diff --git a/bower.json b/bower.json index a504e9d18..2e38b2479 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-strap", "description": "AngularStrap - AngularJS directives for Twitter Bootstrap", - "version": "2.0.0-rc.4", + "version": "2.0.0", "keywords": [ "angular", "bootstrap" @@ -19,7 +19,8 @@ }, "licenses": [ { - "type": "MIT" + "type": "MIT", + "url": "https://github.com/mgcrea/angular-strap/blob/master/LICENSE.md" } ], "main": [ diff --git a/dist/angular-strap.js b/dist/angular-strap.js index 44d86bac9..24503a9b1 100644 --- a/dist/angular-strap.js +++ b/dist/angular-strap.js @@ -1,64 +1,131 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -(function (window, document, undefined) { - 'use strict'; - // Source: src/module.js - angular.module('mgcrea.ngStrap', [ - 'mgcrea.ngStrap.modal', - 'mgcrea.ngStrap.aside', - 'mgcrea.ngStrap.alert', - 'mgcrea.ngStrap.button', - 'mgcrea.ngStrap.select', - 'mgcrea.ngStrap.datepicker', - 'mgcrea.ngStrap.timepicker', - 'mgcrea.ngStrap.navbar', - 'mgcrea.ngStrap.tooltip', - 'mgcrea.ngStrap.popover', - 'mgcrea.ngStrap.dropdown', - 'mgcrea.ngStrap.typeahead', - 'mgcrea.ngStrap.scrollspy', - 'mgcrea.ngStrap.affix', - 'mgcrea.ngStrap.tab' - ]); - // Source: src/affix/affix.js - angular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions']).provider('$affix', function () { - var defaults = this.defaults = { offsetTop: 'auto' }; - this.$get = [ - '$window', - 'dimensions', - function ($window, dimensions) { - var bodyEl = angular.element($window.document.body); - function AffixFactory(element, config) { - var $affix = {}; - // Common vars - var options = angular.extend({}, defaults, config); - var targetEl = options.target; - // Initial private vars - var reset = 'affix affix-top affix-bottom', initialAffixTop = 0, initialOffsetTop = 0, affixed = null, unpin = null; - var parent = element.parent(); - // Options: custom parent - if (options.offsetParent) { - if (options.offsetParent.match(/^\d+$/)) { - for (var i = 0; i < options.offsetParent * 1 - 1; i++) { - parent = parent.parent(); - } +(function(window, document, undefined) { +'use strict'; +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/module.js +angular.module('mgcrea.ngStrap', [ + 'mgcrea.ngStrap.modal', + 'mgcrea.ngStrap.aside', + 'mgcrea.ngStrap.alert', + 'mgcrea.ngStrap.button', + 'mgcrea.ngStrap.select', + 'mgcrea.ngStrap.datepicker', + 'mgcrea.ngStrap.timepicker', + 'mgcrea.ngStrap.navbar', + 'mgcrea.ngStrap.tooltip', + 'mgcrea.ngStrap.popover', + 'mgcrea.ngStrap.dropdown', + 'mgcrea.ngStrap.typeahead', + 'mgcrea.ngStrap.scrollspy', + 'mgcrea.ngStrap.affix', + 'mgcrea.ngStrap.tab' +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/affix/affix.js +angular.module('mgcrea.ngStrap.affix', [ + 'mgcrea.ngStrap.helpers.dimensions', + 'mgcrea.ngStrap.helpers.debounce' +]).provider('$affix', function () { + var defaults = this.defaults = { offsetTop: 'auto' }; + this.$get = [ + '$window', + 'debounce', + 'dimensions', + function ($window, debounce, dimensions) { + var bodyEl = angular.element($window.document.body); + var windowEl = angular.element($window); + function AffixFactory(element, config) { + var $affix = {}; + // Common vars + var options = angular.extend({}, defaults, config); + var targetEl = options.target; + // Initial private vars + var reset = 'affix affix-top affix-bottom', initialAffixTop = 0, initialOffsetTop = 0, offsetTop = 0, offsetBottom = 0, affixed = null, unpin = null; + var parent = element.parent(); + // Options: custom parent + if (options.offsetParent) { + if (options.offsetParent.match(/^\d+$/)) { + for (var i = 0; i < options.offsetParent * 1 - 1; i++) { + parent = parent.parent(); + } + } else { + parent = angular.element(options.offsetParent); + } + } + $affix.init = function () { + $affix.$parseOffsets(); + initialOffsetTop = dimensions.offset(element[0]).top + initialAffixTop; + // Bind events + targetEl.on('scroll', $affix.checkPosition); + targetEl.on('click', $affix.checkPositionWithEventLoop); + windowEl.on('resize', $affix.$debouncedOnResize); + // Both of these checkPosition() calls are necessary for the case where + // the user hits refresh after scrolling to the bottom of the page. + $affix.checkPosition(); + $affix.checkPositionWithEventLoop(); + }; + $affix.destroy = function () { + // Unbind events + targetEl.off('scroll', $affix.checkPosition); + targetEl.off('click', $affix.checkPositionWithEventLoop); + windowEl.off('resize', $affix.$debouncedOnResize); + }; + $affix.checkPositionWithEventLoop = function () { + setTimeout($affix.checkPosition, 1); + }; + $affix.checkPosition = function () { + // if (!this.$element.is(':visible')) return + var scrollTop = getScrollTop(); + var position = dimensions.offset(element[0]); + var elementHeight = dimensions.height(element[0]); + // Get required affix class according to position + var affix = getRequiredAffixClass(unpin, position, elementHeight); + // Did affix status changed this last check? + if (affixed === affix) + return; + affixed = affix; + // Add proper affix class + element.removeClass(reset).addClass('affix' + (affix !== 'middle' ? '-' + affix : '')); + if (affix === 'top') { + unpin = null; + element.css('position', options.offsetParent ? '' : 'relative'); + element.css('top', ''); + } else if (affix === 'bottom') { + if (options.offsetUnpin) { + unpin = -(options.offsetUnpin * 1); } else { - parent = angular.element(options.offsetParent); - } + // Calculate unpin threshold when affixed to bottom. + // Hopefully the browser scrolls pixel by pixel. + unpin = position.top - scrollTop; + } + element.css('position', options.offsetParent ? '' : 'relative'); + element.css('top', options.offsetParent ? '' : bodyEl[0].offsetHeight - offsetBottom - elementHeight - initialOffsetTop + 'px'); + } else { + // affix === 'middle' + unpin = null; + element.css('position', 'fixed'); + element.css('top', initialAffixTop + 'px'); } - // Options: offsets - var offsetTop = 0; + }; + $affix.$onResize = function () { + $affix.$parseOffsets(); + $affix.checkPosition(); + }; + $affix.$debouncedOnResize = debounce($affix.$onResize, 50); + $affix.$parseOffsets = function () { + // Reset position to calculate correct offsetTop + element.css('position', options.offsetParent ? '' : 'relative'); if (options.offsetTop) { if (options.offsetTop === 'auto') { options.offsetTop = '+0'; } if (options.offsetTop.match(/^[-+]\d+$/)) { - initialAffixTop -= options.offsetTop * 1; + initialAffixTop = -options.offsetTop * 1; if (options.offsetParent) { offsetTop = dimensions.offset(parent[0]).top + options.offsetTop * 1; } else { @@ -68,7 +135,6 @@ offsetTop = options.offsetTop * 1; } } - var offsetBottom = 0; if (options.offsetBottom) { if (options.offsetParent && options.offsetBottom.match(/^[-+]\d+$/)) { // add 1 pixel due to rounding problems... @@ -77,3467 +143,3544 @@ offsetBottom = options.offsetBottom * 1; } } - $affix.init = function () { - initialOffsetTop = dimensions.offset(element[0]).top + initialAffixTop; - // Bind events - targetEl.on('scroll', this.checkPosition); - targetEl.on('click', this.checkPositionWithEventLoop); - // Both of these checkPosition() calls are necessary for the case where - // the user hits refresh after scrolling to the bottom of the page. - this.checkPosition(); - this.checkPositionWithEventLoop(); - }; - $affix.destroy = function () { - // Unbind events - targetEl.off('scroll', this.checkPosition); - targetEl.off('click', this.checkPositionWithEventLoop); - }; - $affix.checkPositionWithEventLoop = function () { - setTimeout(this.checkPosition, 1); - }; - $affix.checkPosition = function () { - // if (!this.$element.is(':visible')) return - var scrollTop = getScrollTop(); - var position = dimensions.offset(element[0]); - var elementHeight = dimensions.height(element[0]); - // Get required affix class according to position - var affix = getRequiredAffixClass(unpin, position, elementHeight); - // Did affix status changed this last check? - if (affixed === affix) - return; - affixed = affix; - // Add proper affix class - element.removeClass(reset).addClass('affix' + (affix !== 'middle' ? '-' + affix : '')); - if (affix === 'top') { - unpin = null; - element.css('position', options.offsetParent ? '' : 'relative'); - element.css('top', ''); - } else if (affix === 'bottom') { - if (options.offsetUnpin) { - unpin = -(options.offsetUnpin * 1); - } else { - // Calculate unpin threshold when affixed to bottom. - // Hopefully the browser scrolls pixel by pixel. - unpin = position.top - scrollTop; - } - element.css('position', options.offsetParent ? '' : 'relative'); - element.css('top', options.offsetParent ? '' : bodyEl[0].offsetHeight - offsetBottom - elementHeight - initialOffsetTop + 'px'); - } else { - // affix === 'middle' - unpin = null; - element.css('position', 'fixed'); - element.css('top', initialAffixTop + 'px'); - } - }; - // Private methods - function getRequiredAffixClass(unpin, position, elementHeight) { - var scrollTop = getScrollTop(); - var scrollHeight = getScrollHeight(); - if (scrollTop <= offsetTop) { - return 'top'; - } else if (unpin !== null && scrollTop + unpin <= position.top) { - return 'middle'; - } else if (offsetBottom !== null && position.top + elementHeight + initialAffixTop >= scrollHeight - offsetBottom) { - return 'bottom'; - } else { - return 'middle'; - } - } - function getScrollTop() { - return targetEl[0] === $window ? $window.pageYOffset : targetEl[0] === $window; - } - function getScrollHeight() { - return targetEl[0] === $window ? $window.document.body.scrollHeight : targetEl[0].scrollHeight; + }; + // Private methods + function getRequiredAffixClass(unpin, position, elementHeight) { + var scrollTop = getScrollTop(); + var scrollHeight = getScrollHeight(); + if (scrollTop <= offsetTop) { + return 'top'; + } else if (unpin !== null && scrollTop + unpin <= position.top) { + return 'middle'; + } else if (offsetBottom !== null && position.top + elementHeight + initialAffixTop >= scrollHeight - offsetBottom) { + return 'bottom'; + } else { + return 'middle'; } - $affix.init(); - return $affix; } - return AffixFactory; - } - ]; - }).directive('bsAffix', [ - '$affix', - '$window', - function ($affix, $window) { - return { - restrict: 'EAC', - require: '^?bsAffixTarget', - link: function postLink(scope, element, attr, affixTarget) { - var options = { - scope: scope, - offsetTop: 'auto', - target: affixTarget ? affixTarget.$element : angular.element($window) - }; - angular.forEach([ - 'offsetTop', - 'offsetBottom', - 'offsetParent', - 'offsetUnpin' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - var affix = $affix(element, options); - scope.$on('$destroy', function () { - options = null; - affix = null; - }); + function getScrollTop() { + return targetEl[0] === $window ? $window.pageYOffset : targetEl[0] === $window; } - }; + function getScrollHeight() { + return targetEl[0] === $window ? $window.document.body.scrollHeight : targetEl[0].scrollHeight; + } + $affix.init(); + return $affix; + } + return AffixFactory; } - ]).directive('bsAffixTarget', function () { + ]; +}).directive('bsAffix', [ + '$affix', + '$window', + function ($affix, $window) { return { - controller: [ - '$element', - function ($element) { - this.$element = $element; + restrict: 'EAC', + require: '^?bsAffixTarget', + link: function postLink(scope, element, attr, affixTarget) { + var options = { + scope: scope, + offsetTop: 'auto', + target: affixTarget ? affixTarget.$element : angular.element($window) + }; + angular.forEach([ + 'offsetTop', + 'offsetBottom', + 'offsetParent', + 'offsetUnpin' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + var affix = $affix(element, options); + scope.$on('$destroy', function () { + options = null; + affix = null; + }); + } + }; + } +]).directive('bsAffixTarget', function () { + return { + controller: [ + '$element', + function ($element) { + this.$element = $element; + } + ] + }; +}); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/alert/alert.js +// @BUG: following snippet won't compile correctly +// @TODO: submit issue to core +// ' ' + +angular.module('mgcrea.ngStrap.alert', ['mgcrea.ngStrap.modal']).provider('$alert', function () { + var defaults = this.defaults = { + animation: 'am-fade', + prefixClass: 'alert', + placement: null, + template: 'alert/alert.tpl.html', + container: false, + element: null, + backdrop: false, + keyboard: true, + show: true, + duration: false, + type: false + }; + this.$get = [ + '$modal', + '$timeout', + function ($modal, $timeout) { + function AlertFactory(config) { + var $alert = {}; + // Common vars + var options = angular.extend({}, defaults, config); + $alert = $modal(options); + // Support scope as string options [/*title, content, */type] + if (options.type) { + $alert.$scope.type = options.type; + } + // Support auto-close duration + var show = $alert.show; + if (options.duration) { + $alert.show = function () { + show(); + $timeout(function () { + $alert.hide(); + }, options.duration * 1000); + }; } - ] + return $alert; + } + return AlertFactory; + } + ]; +}).directive('bsAlert', [ + '$window', + '$location', + '$sce', + '$alert', + function ($window, $location, $sce, $alert) { + var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; + return { + restrict: 'EAC', + scope: true, + link: function postLink(scope, element, attr, transclusion) { + // Directive options + var options = { + scope: scope, + element: element, + show: false + }; + angular.forEach([ + 'template', + 'placement', + 'keyboard', + 'html', + 'container', + 'animation', + 'duration' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Support scope as data-attrs + angular.forEach([ + 'title', + 'content', + 'type' + ], function (key) { + attr[key] && attr.$observe(key, function (newValue, oldValue) { + scope[key] = $sce.trustAsHtml(newValue); + }); + }); + // Support scope as an object + attr.bsAlert && scope.$watch(attr.bsAlert, function (newValue, oldValue) { + if (angular.isObject(newValue)) { + angular.extend(scope, newValue); + } else { + scope.content = newValue; + } + }, true); + // Initialize alert + var alert = $alert(options); + // Trigger + element.on(attr.trigger || 'click', alert.toggle); + // Garbage collection + scope.$on('$destroy', function () { + alert.destroy(); + options = null; + alert = null; + }); + } }; - }); - // Source: src/alert/alert.js - // @BUG: following snippet won't compile correctly - // @TODO: submit issue to core - // ' ' + - angular.module('mgcrea.ngStrap.alert', []).provider('$alert', function () { - var defaults = this.defaults = { - animation: 'am-fade', - prefixClass: 'alert', - placement: null, - template: 'alert/alert.tpl.html', - container: false, - element: null, - backdrop: false, - keyboard: true, - show: true, - duration: false, - type: false - }; - this.$get = [ - '$modal', - '$timeout', - function ($modal, $timeout) { - function AlertFactory(config) { - var $alert = {}; - // Common vars - var options = angular.extend({}, defaults, config); - $alert = $modal(options); - // Support scope as string options [/*title, content, */type] - if (options.type) { - $alert.$scope.type = options.type; - } - // Support auto-close duration - var show = $alert.show; - if (options.duration) { - $alert.show = function () { - show(); - $timeout(function () { - $alert.hide(); - }, options.duration * 1000); - }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/aside/aside.js +angular.module('mgcrea.ngStrap.aside', ['mgcrea.ngStrap.modal']).provider('$aside', function () { + var defaults = this.defaults = { + animation: 'am-fade-and-slide-right', + prefixClass: 'aside', + placement: 'right', + template: 'aside/aside.tpl.html', + contentTemplate: false, + container: false, + element: null, + backdrop: true, + keyboard: true, + html: false, + show: true + }; + this.$get = [ + '$modal', + function ($modal) { + function AsideFactory(config) { + var $aside = {}; + // Common vars + var options = angular.extend({}, defaults, config); + $aside = $modal(options); + return $aside; + } + return AsideFactory; + } + ]; +}).directive('bsAside', [ + '$window', + '$location', + '$sce', + '$aside', + function ($window, $location, $sce, $aside) { + var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; + return { + restrict: 'EAC', + scope: true, + link: function postLink(scope, element, attr, transclusion) { + // Directive options + var options = { + scope: scope, + element: element, + show: false + }; + angular.forEach([ + 'template', + 'contentTemplate', + 'placement', + 'backdrop', + 'keyboard', + 'html', + 'container', + 'animation' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Support scope as data-attrs + angular.forEach([ + 'title', + 'content' + ], function (key) { + attr[key] && attr.$observe(key, function (newValue, oldValue) { + scope[key] = $sce.trustAsHtml(newValue); + }); + }); + // Support scope as an object + attr.bsAside && scope.$watch(attr.bsAside, function (newValue, oldValue) { + if (angular.isObject(newValue)) { + angular.extend(scope, newValue); + } else { + scope.content = newValue; } - return $alert; - } - return AlertFactory; + }, true); + // Initialize aside + var aside = $aside(options); + // Trigger + element.on(attr.trigger || 'click', aside.toggle); + // Garbage collection + scope.$on('$destroy', function () { + aside.destroy(); + options = null; + aside = null; + }); } - ]; - }).directive('bsAlert', [ - '$window', - '$location', - '$sce', - '$alert', - function ($window, $location, $sce, $alert) { - var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; - return { - restrict: 'EAC', - scope: true, - link: function postLink(scope, element, attr, transclusion) { - // Directive options - var options = { - scope: scope, - element: element, - show: false - }; - angular.forEach([ - 'template', - 'placement', - 'keyboard', - 'html', - 'container', - 'animation', - 'duration' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/button/button.js +angular.module('mgcrea.ngStrap.button', ['ngAnimate']).provider('$button', function () { + var defaults = this.defaults = { + activeClass: 'active', + toggleEvent: 'click' + }; + this.$get = function () { + return { defaults: defaults }; + }; +}).directive('bsCheckboxGroup', function () { + return { + restrict: 'A', + require: 'ngModel', + compile: function postLink(element, attr) { + element.attr('data-toggle', 'buttons'); + element.removeAttr('ng-model'); + var children = element[0].querySelectorAll('input[type="checkbox"]'); + angular.forEach(children, function (child) { + var childEl = angular.element(child); + childEl.attr('bs-checkbox', ''); + childEl.attr('ng-model', attr.ngModel + '.' + childEl.attr('value')); + }); + } + }; +}).directive('bsCheckbox', [ + '$button', + '$$rAF', + function ($button, $$rAF) { + var defaults = $button.defaults; + var constantValueRegExp = /^(true|false|\d+)$/; + return { + restrict: 'A', + require: 'ngModel', + link: function postLink(scope, element, attr, controller) { + var options = defaults; + // Support label > input[type="checkbox"] + var isInput = element[0].nodeName === 'INPUT'; + var activeElement = isInput ? element.parent() : element; + var trueValue = angular.isDefined(attr.trueValue) ? attr.trueValue : true; + if (constantValueRegExp.test(attr.trueValue)) { + trueValue = scope.$eval(attr.trueValue); + } + var falseValue = angular.isDefined(attr.falseValue) ? attr.falseValue : false; + if (constantValueRegExp.test(attr.falseValue)) { + falseValue = scope.$eval(attr.falseValue); + } + // Parse exotic values + var hasExoticValues = typeof trueValue !== 'boolean' || typeof falseValue !== 'boolean'; + if (hasExoticValues) { + controller.$parsers.push(function (viewValue) { + // console.warn('$parser', element.attr('ng-model'), 'viewValue', viewValue); + return viewValue ? trueValue : falseValue; }); - // Support scope as data-attrs - angular.forEach([ - 'title', - 'content', - 'type' - ], function (key) { - attr[key] && attr.$observe(key, function (newValue, oldValue) { - scope[key] = $sce.trustAsHtml(newValue); - }); + // Fix rendering for exotic values + scope.$watch(attr.ngModel, function (newValue, oldValue) { + controller.$render(); }); - // Support scope as an object - attr.bsAlert && scope.$watch(attr.bsAlert, function (newValue, oldValue) { - if (angular.isObject(newValue)) { - angular.extend(scope, newValue); - } else { - scope.content = newValue; + } + // model -> view + controller.$render = function () { + // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); + var isActive = angular.equals(controller.$modelValue, trueValue); + $$rAF(function () { + if (isInput) + element[0].checked = isActive; + activeElement.toggleClass(options.activeClass, isActive); + }); + }; + // view -> model + element.bind(options.toggleEvent, function () { + scope.$apply(function () { + // console.warn('!click', element.attr('ng-model'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue); + if (!isInput) { + controller.$setViewValue(!activeElement.hasClass('active')); + } + if (!hasExoticValues) { + controller.$render(); } - }, true); - // Initialize alert - var alert = $alert(options); - // Trigger - element.on(attr.trigger || 'click', alert.toggle); - // Garbage collection - scope.$on('$destroy', function () { - alert.destroy(); - options = null; - alert = null; }); - } - }; + }); + } + }; + } +]).directive('bsRadioGroup', function () { + return { + restrict: 'A', + require: 'ngModel', + compile: function postLink(element, attr) { + element.attr('data-toggle', 'buttons'); + element.removeAttr('ng-model'); + var children = element[0].querySelectorAll('input[type="radio"]'); + angular.forEach(children, function (child) { + angular.element(child).attr('bs-radio', ''); + angular.element(child).attr('ng-model', attr.ngModel); + }); } - ]); - // Source: src/aside/aside.js - angular.module('mgcrea.ngStrap.aside', ['mgcrea.ngStrap.modal']).provider('$aside', function () { - var defaults = this.defaults = { - animation: 'am-fade-and-slide-right', - prefixClass: 'aside', - placement: 'right', - template: 'aside/aside.tpl.html', - contentTemplate: false, - container: false, - element: null, - backdrop: true, - keyboard: true, - html: false, - show: true - }; - this.$get = [ - '$modal', - function ($modal) { - function AsideFactory(config) { - var $aside = {}; - // Common vars - var options = angular.extend({}, defaults, config); - $aside = $modal(options); - return $aside; - } - return AsideFactory; + }; +}).directive('bsRadio', [ + '$button', + '$$rAF', + function ($button, $$rAF) { + var defaults = $button.defaults; + var constantValueRegExp = /^(true|false|\d+)$/; + return { + restrict: 'A', + require: 'ngModel', + link: function postLink(scope, element, attr, controller) { + var options = defaults; + // Support `label > input[type="radio"]` markup + var isInput = element[0].nodeName === 'INPUT'; + var activeElement = isInput ? element.parent() : element; + var value = constantValueRegExp.test(attr.value) ? scope.$eval(attr.value) : attr.value; + // model -> view + controller.$render = function () { + // console.warn('$render', element.attr('value'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); + var isActive = angular.equals(controller.$modelValue, value); + $$rAF(function () { + if (isInput) + element[0].checked = isActive; + activeElement.toggleClass(options.activeClass, isActive); + }); + }; + // view -> model + element.bind(options.toggleEvent, function () { + scope.$apply(function () { + // console.warn('!click', element.attr('value'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue); + controller.$setViewValue(value); + controller.$render(); + }); + }); } - ]; - }).directive('bsAside', [ + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/datepicker/datepicker.js +angular.module('mgcrea.ngStrap.datepicker', [ + 'mgcrea.ngStrap.helpers.dateParser', + 'mgcrea.ngStrap.tooltip' +]).provider('$datepicker', function () { + var defaults = this.defaults = { + animation: 'am-fade', + prefixClass: 'datepicker', + placement: 'bottom-left', + template: 'datepicker/datepicker.tpl.html', + trigger: 'focus', + container: false, + keyboard: true, + html: false, + delay: 0, + useNative: false, + dateType: 'date', + dateFormat: 'shortDate', + strictFormat: false, + autoclose: false, + minDate: -Infinity, + maxDate: +Infinity, + startView: 0, + minView: 0, + startWeek: 0 + }; + this.$get = [ '$window', - '$location', + '$document', + '$rootScope', '$sce', - '$aside', - function ($window, $location, $sce, $aside) { - var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; - return { - restrict: 'EAC', - scope: true, - link: function postLink(scope, element, attr, transclusion) { - // Directive options - var options = { - scope: scope, - element: element, - show: false - }; - angular.forEach([ - 'template', - 'contentTemplate', - 'placement', - 'backdrop', - 'keyboard', - 'html', - 'container', - 'animation' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Support scope as data-attrs - angular.forEach([ - 'title', - 'content' - ], function (key) { - attr[key] && attr.$observe(key, function (newValue, oldValue) { - scope[key] = $sce.trustAsHtml(newValue); + '$locale', + 'dateFilter', + 'datepickerViews', + '$tooltip', + function ($window, $document, $rootScope, $sce, $locale, dateFilter, datepickerViews, $tooltip) { + var bodyEl = angular.element($window.document.body); + var isTouch = 'createTouch' in $window.document; + var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); + if (!defaults.lang) + defaults.lang = $locale.id; + function DatepickerFactory(element, controller, config) { + var $datepicker = $tooltip(element, angular.extend({}, defaults, config)); + var parentScope = config.scope; + var options = $datepicker.$options; + var scope = $datepicker.$scope; + if (options.startView) + options.startView -= options.minView; + // View vars + var pickerViews = datepickerViews($datepicker); + $datepicker.$views = pickerViews.views; + var viewDate = pickerViews.viewDate; + scope.$mode = options.startView; + var $picker = $datepicker.$views[scope.$mode]; + // Scope methods + scope.$select = function (date) { + $datepicker.select(date); + }; + scope.$selectPane = function (value) { + $datepicker.$selectPane(value); + }; + scope.$toggleMode = function () { + $datepicker.setMode((scope.$mode + 1) % $datepicker.$views.length); + }; + // Public methods + $datepicker.update = function (date) { + // console.warn('$datepicker.update() newValue=%o', date); + if (angular.isDate(date) && !isNaN(date.getTime())) { + $datepicker.$date = date; + $picker.update.call($picker, date); + } + // Build only if pristine + $datepicker.$build(true); + }; + $datepicker.select = function (date, keep) { + // console.warn('$datepicker.select', date, scope.$mode); + if (!angular.isDate(controller.$dateValue)) + controller.$dateValue = new Date(date); + controller.$dateValue.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); + if (!scope.$mode || keep) { + controller.$setViewValue(controller.$dateValue); + controller.$render(); + if (options.autoclose && !keep) { + $datepicker.hide(true); + } + } else { + angular.extend(viewDate, { + year: date.getFullYear(), + month: date.getMonth(), + date: date.getDate() }); + $datepicker.setMode(scope.$mode - 1); + $datepicker.$build(); + } + }; + $datepicker.setMode = function (mode) { + // console.warn('$datepicker.setMode', mode); + scope.$mode = mode; + $picker = $datepicker.$views[scope.$mode]; + $datepicker.$build(); + }; + // Protected methods + $datepicker.$build = function (pristine) { + // console.warn('$datepicker.$build() viewDate=%o', viewDate); + if (pristine === true && $picker.built) + return; + if (pristine === false && !$picker.built) + return; + $picker.build.call($picker); + }; + $datepicker.$updateSelected = function () { + for (var i = 0, l = scope.rows.length; i < l; i++) { + angular.forEach(scope.rows[i], updateSelected); + } + }; + $datepicker.$isSelected = function (date) { + return $picker.isSelected(date); + }; + $datepicker.$selectPane = function (value) { + var steps = $picker.steps; + var targetDate = new Date(Date.UTC(viewDate.year + (steps.year || 0) * value, viewDate.month + (steps.month || 0) * value, viewDate.date + (steps.day || 0) * value)); + angular.extend(viewDate, { + year: targetDate.getUTCFullYear(), + month: targetDate.getUTCMonth(), + date: targetDate.getUTCDate() }); - // Support scope as an object - attr.bsAside && scope.$watch(attr.bsAside, function (newValue, oldValue) { - if (angular.isObject(newValue)) { - angular.extend(scope, newValue); + $datepicker.$build(); + }; + $datepicker.$onMouseDown = function (evt) { + // Prevent blur on mousedown on .dropdown-menu + evt.preventDefault(); + evt.stopPropagation(); + // Emulate click for mobile devices + if (isTouch) { + var targetEl = angular.element(evt.target); + if (targetEl[0].nodeName.toLowerCase() !== 'button') { + targetEl = targetEl.parent(); + } + targetEl.triggerHandler('click'); + } + }; + $datepicker.$onKeyDown = function (evt) { + if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) + return; + evt.preventDefault(); + evt.stopPropagation(); + if (evt.keyCode === 13) { + if (!scope.$mode) { + return $datepicker.hide(true); } else { - scope.content = newValue; + return scope.$apply(function () { + $datepicker.setMode(scope.$mode - 1); + }); } - }, true); - // Initialize aside - var aside = $aside(options); - // Trigger - element.on(attr.trigger || 'click', aside.toggle); - // Garbage collection - scope.$on('$destroy', function () { - aside.destroy(); - options = null; - aside = null; - }); + } + // Navigate with keyboard + $picker.onKeyDown(evt); + parentScope.$digest(); + }; + // Private + function updateSelected(el) { + el.selected = $datepicker.$isSelected(el.date); } - }; + function focusElement() { + element[0].focus(); + } + // Overrides + var _init = $datepicker.init; + $datepicker.init = function () { + if (isNative && options.useNative) { + element.prop('type', 'date'); + element.css('-webkit-appearance', 'textfield'); + return; + } else if (isTouch) { + element.prop('type', 'text'); + element.attr('readonly', 'true'); + element.on('click', focusElement); + } + _init(); + }; + var _destroy = $datepicker.destroy; + $datepicker.destroy = function () { + if (isNative && options.useNative) { + element.off('click', focusElement); + } + _destroy(); + }; + var _show = $datepicker.show; + $datepicker.show = function () { + _show(); + setTimeout(function () { + $datepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown); + if (options.keyboard) { + element.on('keydown', $datepicker.$onKeyDown); + } + }); + }; + var _hide = $datepicker.hide; + $datepicker.hide = function (blur) { + $datepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown); + if (options.keyboard) { + element.off('keydown', $datepicker.$onKeyDown); + } + _hide(blur); + }; + return $datepicker; + } + DatepickerFactory.defaults = defaults; + return DatepickerFactory; } - ]); - // Source: src/button/button.js - angular.module('mgcrea.ngStrap.button', ['ngAnimate']).provider('$button', function () { - var defaults = this.defaults = { - activeClass: 'active', - toggleEvent: 'click' - }; - this.$get = function () { - return { defaults: defaults }; + ]; +}).directive('bsDatepicker', [ + '$window', + '$parse', + '$q', + '$locale', + 'dateFilter', + '$datepicker', + '$dateParser', + '$timeout', + function ($window, $parse, $q, $locale, dateFilter, $datepicker, $dateParser, $timeout) { + var defaults = $datepicker.defaults; + var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); + var isNumeric = function (n) { + return !isNaN(parseFloat(n)) && isFinite(n); }; - }).directive('bsCheckboxGroup', function () { return { - restrict: 'A', + restrict: 'EAC', require: 'ngModel', - compile: function postLink(element, attr) { - element.attr('data-toggle', 'buttons'); - element.removeAttr('ng-model'); - var children = element[0].querySelectorAll('input[type="checkbox"]'); - angular.forEach(children, function (child) { - var childEl = angular.element(child); - childEl.attr('bs-checkbox', ''); - childEl.attr('ng-model', attr.ngModel + '.' + childEl.attr('value')); + link: function postLink(scope, element, attr, controller) { + // Directive options + var options = { + scope: scope, + controller: controller + }; + angular.forEach([ + 'placement', + 'container', + 'delay', + 'trigger', + 'keyboard', + 'html', + 'animation', + 'template', + 'autoclose', + 'dateType', + 'dateFormat', + 'strictFormat', + 'startWeek', + 'useNative', + 'lang', + 'startView', + 'minView' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Initialize datepicker + if (isNative && options.useNative) + options.dateFormat = 'yyyy-MM-dd'; + var datepicker = $datepicker(element, controller, options); + options = datepicker.$options; + // Observe attributes for changes + angular.forEach([ + 'minDate', + 'maxDate' + ], function (key) { + // console.warn('attr.$observe(%s)', key, attr[key]); + angular.isDefined(attr[key]) && attr.$observe(key, function (newValue) { + // console.warn('attr.$observe(%s)=%o', key, newValue); + if (newValue === 'today') { + var today = new Date(); + datepicker.$options[key] = +new Date(today.getFullYear(), today.getMonth(), today.getDate() + (key === 'maxDate' ? 1 : 0), 0, 0, 0, key === 'minDate' ? 0 : -1); + } else if (angular.isString(newValue) && newValue.match(/^".+"$/)) { + // Support {{ dateObj }} + datepicker.$options[key] = +new Date(newValue.substr(1, newValue.length - 2)); + } else if (isNumeric(newValue)) { + datepicker.$options[key] = +new Date(parseInt(newValue, 10)); + } else { + datepicker.$options[key] = +new Date(newValue); + } + // Build only if dirty + !isNaN(datepicker.$options[key]) && datepicker.$build(false); + }); + }); + // Watch model for changes + scope.$watch(attr.ngModel, function (newValue, oldValue) { + datepicker.update(controller.$dateValue); + }, true); + var dateParser = $dateParser({ + format: options.dateFormat, + lang: options.lang, + strict: options.strictFormat + }); + // viewValue -> $parsers -> modelValue + controller.$parsers.unshift(function (viewValue) { + // console.warn('$parser("%s"): viewValue=%o', element.attr('ng-model'), viewValue); + // Null values should correctly reset the model value & validity + if (!viewValue) { + controller.$setValidity('date', true); + return; + } + var parsedDate = dateParser.parse(viewValue, controller.$dateValue); + if (!parsedDate || isNaN(parsedDate.getTime())) { + controller.$setValidity('date', false); + return; + } else { + var isValid = (isNaN(datepicker.$options.minDate) || parsedDate.getTime() >= datepicker.$options.minDate) && (isNaN(datepicker.$options.maxDate) || parsedDate.getTime() <= datepicker.$options.maxDate); + controller.$setValidity('date', isValid); + // Only update the model when we have a valid date + if (isValid) + controller.$dateValue = parsedDate; + } + if (options.dateType === 'string') { + return dateFilter(viewValue, options.dateFormat); + } else if (options.dateType === 'number') { + return controller.$dateValue.getTime(); + } else if (options.dateType === 'iso') { + return controller.$dateValue.toISOString(); + } else { + return new Date(controller.$dateValue); + } + }); + // modelValue -> $formatters -> viewValue + controller.$formatters.push(function (modelValue) { + // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue); + var date; + if (angular.isUndefined(modelValue) || modelValue === null) { + date = NaN; + } else if (angular.isDate(modelValue)) { + date = modelValue; + } else if (options.dateType === 'string') { + date = dateParser.parse(modelValue); + } else { + date = new Date(modelValue); + } + // Setup default value? + // if(isNaN(date.getTime())) { + // var today = new Date(); + // date = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0); + // } + controller.$dateValue = date; + return controller.$dateValue; + }); + // viewValue -> element + controller.$render = function () { + // console.warn('$render("%s"): viewValue=%o', element.attr('ng-model'), controller.$viewValue); + element.val(!controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : dateFilter(controller.$dateValue, options.dateFormat)); + }; + // Garbage collection + scope.$on('$destroy', function () { + datepicker.destroy(); + options = null; + datepicker = null; }); } }; - }).directive('bsCheckbox', [ - '$button', - '$$animateReflow', - function ($button, $$animateReflow) { - var defaults = $button.defaults; - var constantValueRegExp = /^(true|false|\d+)$/; - return { - restrict: 'A', - require: 'ngModel', - link: function postLink(scope, element, attr, controller) { - var options = defaults; - // Support label > input[type="checkbox"] - var isInput = element[0].nodeName === 'INPUT'; - var activeElement = isInput ? element.parent() : element; - var trueValue = angular.isDefined(attr.trueValue) ? attr.trueValue : true; - if (constantValueRegExp.test(attr.trueValue)) { - trueValue = scope.$eval(attr.trueValue); - } - var falseValue = angular.isDefined(attr.falseValue) ? attr.falseValue : false; - if (constantValueRegExp.test(attr.falseValue)) { - falseValue = scope.$eval(attr.falseValue); - } - // Parse exotic values - var hasExoticValues = typeof trueValue !== 'boolean' || typeof falseValue !== 'boolean'; - if (hasExoticValues) { - controller.$parsers.push(function (viewValue) { - // console.warn('$parser', element.attr('ng-model'), 'viewValue', viewValue); - return viewValue ? trueValue : falseValue; - }); - // Fix rendering for exotic values - scope.$watch(attr.ngModel, function (newValue, oldValue) { - controller.$render(); - }); - } - // model -> view - controller.$render = function () { - // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); - var isActive = angular.equals(controller.$modelValue, trueValue); - $$animateReflow(function () { - if (isInput) - element[0].checked = isActive; - activeElement.toggleClass(options.activeClass, isActive); - }); - }; - // view -> model - element.bind(options.toggleEvent, function () { - scope.$apply(function () { - // console.warn('!click', element.attr('ng-model'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue); - if (!isInput) { - controller.$setViewValue(!activeElement.hasClass('active')); + } +]).provider('datepickerViews', function () { + var defaults = this.defaults = { + dayFormat: 'dd', + daySplit: 7 + }; + // Split array into smaller arrays + function split(arr, size) { + var arrays = []; + while (arr.length > 0) { + arrays.push(arr.splice(0, size)); + } + return arrays; + } + // Modulus operator + function mod(n, m) { + return (n % m + m) % m; + } + this.$get = [ + '$locale', + '$sce', + 'dateFilter', + function ($locale, $sce, dateFilter) { + return function (picker) { + var scope = picker.$scope; + var options = picker.$options; + var weekDaysMin = $locale.DATETIME_FORMATS.SHORTDAY; + var weekDaysLabels = weekDaysMin.slice(options.startWeek).concat(weekDaysMin.slice(0, options.startWeek)); + var weekDaysLabelsHtml = $sce.trustAsHtml('' + weekDaysLabels.join('') + ''); + var startDate = picker.$date || new Date(); + var viewDate = { + year: startDate.getFullYear(), + month: startDate.getMonth(), + date: startDate.getDate() + }; + var timezoneOffset = startDate.getTimezoneOffset() * 60000; + var views = [ + { + format: 'dd', + split: 7, + steps: { month: 1 }, + update: function (date, force) { + if (!this.built || force || date.getFullYear() !== viewDate.year || date.getMonth() !== viewDate.month) { + angular.extend(viewDate, { + year: picker.$date.getFullYear(), + month: picker.$date.getMonth(), + date: picker.$date.getDate() + }); + picker.$build(); + } else if (date.getDate() !== viewDate.date) { + viewDate.date = picker.$date.getDate(); + picker.$updateSelected(); + } + }, + build: function () { + var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1), firstDayOfMonthOffset = firstDayOfMonth.getTimezoneOffset(); + var firstDate = new Date(+firstDayOfMonth - mod(firstDayOfMonth.getDay() - options.startWeek, 6) * 86400000), firstDateOffset = firstDate.getTimezoneOffset(); + // Handle daylight time switch + if (firstDateOffset !== firstDayOfMonthOffset) + firstDate = new Date(+firstDate + (firstDateOffset - firstDayOfMonthOffset) * 60000); + var days = [], day; + for (var i = 0; i < 42; i++) { + // < 7 * 6 + day = new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + i); + days.push({ + date: day, + label: dateFilter(day, this.format), + selected: picker.$date && this.isSelected(day), + muted: day.getMonth() !== viewDate.month, + disabled: this.isDisabled(day) + }); + } + scope.title = dateFilter(firstDayOfMonth, 'MMMM yyyy'); + scope.labels = weekDaysLabelsHtml; + scope.rows = split(days, this.split); + this.built = true; + }, + isSelected: function (date) { + return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth() && date.getDate() === picker.$date.getDate(); + }, + isDisabled: function (date) { + return date.getTime() < options.minDate || date.getTime() > options.maxDate; + }, + onKeyDown: function (evt) { + var actualTime = picker.$date.getTime(); + if (evt.keyCode === 37) + picker.select(new Date(actualTime - 1 * 86400000), true); + else if (evt.keyCode === 38) + picker.select(new Date(actualTime - 7 * 86400000), true); + else if (evt.keyCode === 39) + picker.select(new Date(actualTime + 1 * 86400000), true); + else if (evt.keyCode === 40) + picker.select(new Date(actualTime + 7 * 86400000), true); + } + }, + { + name: 'month', + format: 'MMM', + split: 4, + steps: { year: 1 }, + update: function (date, force) { + if (!this.built || date.getFullYear() !== viewDate.year) { + angular.extend(viewDate, { + year: picker.$date.getFullYear(), + month: picker.$date.getMonth(), + date: picker.$date.getDate() + }); + picker.$build(); + } else if (date.getMonth() !== viewDate.month) { + angular.extend(viewDate, { + month: picker.$date.getMonth(), + date: picker.$date.getDate() + }); + picker.$updateSelected(); + } + }, + build: function () { + var firstMonth = new Date(viewDate.year, 0, 1); + var months = [], month; + for (var i = 0; i < 12; i++) { + month = new Date(viewDate.year, i, 1); + months.push({ + date: month, + label: dateFilter(month, this.format), + selected: picker.$isSelected(month), + disabled: this.isDisabled(month) + }); + } + scope.title = dateFilter(month, 'yyyy'); + scope.labels = false; + scope.rows = split(months, this.split); + this.built = true; + }, + isSelected: function (date) { + return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth(); + }, + isDisabled: function (date) { + var lastDate = +new Date(date.getFullYear(), date.getMonth() + 1, 0); + return lastDate < options.minDate || date.getTime() > options.maxDate; + }, + onKeyDown: function (evt) { + var actualMonth = picker.$date.getMonth(); + if (evt.keyCode === 37) + picker.select(picker.$date.setMonth(actualMonth - 1), true); + else if (evt.keyCode === 38) + picker.select(picker.$date.setMonth(actualMonth - 4), true); + else if (evt.keyCode === 39) + picker.select(picker.$date.setMonth(actualMonth + 1), true); + else if (evt.keyCode === 40) + picker.select(picker.$date.setMonth(actualMonth + 4), true); } - if (!hasExoticValues) { - controller.$render(); + }, + { + name: 'year', + format: 'yyyy', + split: 4, + steps: { year: 12 }, + update: function (date, force) { + if (!this.built || force || parseInt(date.getFullYear() / 20, 10) !== parseInt(viewDate.year / 20, 10)) { + angular.extend(viewDate, { + year: picker.$date.getFullYear(), + month: picker.$date.getMonth(), + date: picker.$date.getDate() + }); + picker.$build(); + } else if (date.getFullYear() !== viewDate.year) { + angular.extend(viewDate, { + year: picker.$date.getFullYear(), + month: picker.$date.getMonth(), + date: picker.$date.getDate() + }); + picker.$updateSelected(); + } + }, + build: function () { + var firstYear = viewDate.year - viewDate.year % (this.split * 3); + var years = [], year; + for (var i = 0; i < 12; i++) { + year = new Date(firstYear + i, 0, 1); + years.push({ + date: year, + label: dateFilter(year, this.format), + selected: picker.$isSelected(year), + disabled: this.isDisabled(year) + }); + } + scope.title = years[0].label + '-' + years[years.length - 1].label; + scope.labels = false; + scope.rows = split(years, this.split); + this.built = true; + }, + isSelected: function (date) { + return picker.$date && date.getFullYear() === picker.$date.getFullYear(); + }, + isDisabled: function (date) { + var lastDate = +new Date(date.getFullYear() + 1, 0, 0); + return lastDate < options.minDate || date.getTime() > options.maxDate; + }, + onKeyDown: function (evt) { + var actualYear = picker.$date.getFullYear(); + if (evt.keyCode === 37) + picker.select(picker.$date.setYear(actualYear - 1), true); + else if (evt.keyCode === 38) + picker.select(picker.$date.setYear(actualYear - 4), true); + else if (evt.keyCode === 39) + picker.select(picker.$date.setYear(actualYear + 1), true); + else if (evt.keyCode === 40) + picker.select(picker.$date.setYear(actualYear + 4), true); } - }); + } + ]; + return { + views: options.minView ? Array.prototype.slice.call(views, options.minView) : views, + viewDate: viewDate + }; + }; + } + ]; +}); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/dropdown/dropdown.js +angular.module('mgcrea.ngStrap.dropdown', ['mgcrea.ngStrap.tooltip']).provider('$dropdown', function () { + var defaults = this.defaults = { + animation: 'am-fade', + prefixClass: 'dropdown', + placement: 'bottom-left', + template: 'dropdown/dropdown.tpl.html', + trigger: 'click', + container: false, + keyboard: true, + html: false, + delay: 0 + }; + this.$get = [ + '$window', + '$rootScope', + '$tooltip', + function ($window, $rootScope, $tooltip) { + var bodyEl = angular.element($window.document.body); + var matchesSelector = Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector; + function DropdownFactory(element, config) { + var $dropdown = {}; + // Common vars + var options = angular.extend({}, defaults, config); + var scope = $dropdown.$scope = options.scope && options.scope.$new() || $rootScope.$new(); + $dropdown = $tooltip(element, options); + // Protected methods + $dropdown.$onKeyDown = function (evt) { + if (!/(38|40)/.test(evt.keyCode)) + return; + evt.preventDefault(); + evt.stopPropagation(); + // Retrieve focused index + var items = angular.element($dropdown.$element[0].querySelectorAll('li:not(.divider) a')); + if (!items.length) + return; + var index; + angular.forEach(items, function (el, i) { + if (matchesSelector && matchesSelector.call(el, ':focus')) + index = i; + }); + // Navigate with keyboard + if (evt.keyCode === 38 && index > 0) + index--; + else if (evt.keyCode === 40 && index < items.length - 1) + index++; + else if (angular.isUndefined(index)) + index = 0; + items.eq(index)[0].focus(); + }; + // Overrides + var show = $dropdown.show; + $dropdown.show = function () { + show(); + setTimeout(function () { + options.keyboard && $dropdown.$element.on('keydown', $dropdown.$onKeyDown); + bodyEl.on('click', onBodyClick); }); + }; + var hide = $dropdown.hide; + $dropdown.hide = function () { + options.keyboard && $dropdown.$element.off('keydown', $dropdown.$onKeyDown); + bodyEl.off('click', onBodyClick); + hide(); + }; + // Private functions + function onBodyClick(evt) { + if (evt.target === element[0]) + return; + return evt.target !== element[0] && $dropdown.hide(); } - }; + return $dropdown; + } + return DropdownFactory; } - ]).directive('bsRadioGroup', function () { + ]; +}).directive('bsDropdown', [ + '$window', + '$location', + '$sce', + '$dropdown', + function ($window, $location, $sce, $dropdown) { return { - restrict: 'A', - require: 'ngModel', - compile: function postLink(element, attr) { - element.attr('data-toggle', 'buttons'); - element.removeAttr('ng-model'); - var children = element[0].querySelectorAll('input[type="radio"]'); - angular.forEach(children, function (child) { - angular.element(child).attr('bs-radio', ''); - angular.element(child).attr('ng-model', attr.ngModel); + restrict: 'EAC', + scope: true, + link: function postLink(scope, element, attr, transclusion) { + // Directive options + var options = { scope: scope }; + angular.forEach([ + 'placement', + 'container', + 'delay', + 'trigger', + 'keyboard', + 'html', + 'animation', + 'template' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Support scope as an object + attr.bsDropdown && scope.$watch(attr.bsDropdown, function (newValue, oldValue) { + scope.content = newValue; + }, true); + // Initialize dropdown + var dropdown = $dropdown(element, options); + // Garbage collection + scope.$on('$destroy', function () { + dropdown.destroy(); + options = null; + dropdown = null; }); } }; - }).directive('bsRadio', [ - '$button', - '$$animateReflow', - function ($button, $$animateReflow) { - var defaults = $button.defaults; - var constantValueRegExp = /^(true|false|\d+)$/; - return { - restrict: 'A', - require: 'ngModel', - link: function postLink(scope, element, attr, controller) { - var options = defaults; - // Support `label > input[type="radio"]` markup - var isInput = element[0].nodeName === 'INPUT'; - var activeElement = isInput ? element.parent() : element; - var value = constantValueRegExp.test(attr.value) ? scope.$eval(attr.value) : attr.value; - // model -> view - controller.$render = function () { - // console.warn('$render', element.attr('value'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); - var isActive = angular.equals(controller.$modelValue, value); - $$animateReflow(function () { - if (isInput) - element[0].checked = isActive; - activeElement.toggleClass(options.activeClass, isActive); - }); - }; - // view -> model - element.bind(options.toggleEvent, function () { - scope.$apply(function () { - // console.warn('!click', element.attr('value'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue); - controller.$setViewValue(value); - controller.$render(); - }); - }); - } - }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/helpers/date-parser.js +angular.module('mgcrea.ngStrap.helpers.dateParser', []).provider('$dateParser', [ + '$localeProvider', + function ($localeProvider) { + var proto = Date.prototype; + function isNumeric(n) { + return !isNaN(parseFloat(n)) && isFinite(n); } - ]); - // Source: src/datepicker/datepicker.js - angular.module('mgcrea.ngStrap.datepicker', [ - 'mgcrea.ngStrap.helpers.dateParser', - 'mgcrea.ngStrap.tooltip' - ]).provider('$datepicker', function () { var defaults = this.defaults = { - animation: 'am-fade', - prefixClass: 'datepicker', - placement: 'bottom-left', - template: 'datepicker/datepicker.tpl.html', - trigger: 'focus', - container: false, - keyboard: true, - html: false, - delay: 0, - useNative: false, - dateType: 'date', - dateFormat: 'shortDate', - strictFormat: false, - autoclose: false, - minDate: -Infinity, - maxDate: +Infinity, - startView: 0, - minView: 0, - startWeek: 0 + format: 'shortDate', + strict: false }; this.$get = [ - '$window', - '$document', - '$rootScope', - '$sce', '$locale', - 'dateFilter', - 'datepickerViews', - '$tooltip', - function ($window, $document, $rootScope, $sce, $locale, dateFilter, datepickerViews, $tooltip) { - var bodyEl = angular.element($window.document.body); - var isTouch = 'createTouch' in $window.document; - var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); - if (!defaults.lang) - defaults.lang = $locale.id; - function DatepickerFactory(element, controller, config) { - var $datepicker = $tooltip(element, angular.extend({}, defaults, config)); - var parentScope = config.scope; - var options = $datepicker.$options; - var scope = $datepicker.$scope; - if (options.startView) - options.startView -= options.minView; - // View vars - var pickerViews = datepickerViews($datepicker); - $datepicker.$views = pickerViews.views; - var viewDate = pickerViews.viewDate; - scope.$mode = options.startView; - var $picker = $datepicker.$views[scope.$mode]; - // Scope methods - scope.$select = function (date) { - $datepicker.select(date); - }; - scope.$selectPane = function (value) { - $datepicker.$selectPane(value); - }; - scope.$toggleMode = function () { - $datepicker.setMode((scope.$mode + 1) % $datepicker.$views.length); - }; - // Public methods - $datepicker.update = function (date) { - // console.warn('$datepicker.update() newValue=%o', date); - if (angular.isDate(date) && !isNaN(date.getTime())) { - $datepicker.$date = date; - $picker.update.call($picker, date); - } - // Build only if pristine - $datepicker.$build(true); - }; - $datepicker.select = function (date, keep) { - // console.warn('$datepicker.select', date, scope.$mode); - if (!angular.isDate(controller.$dateValue)) - controller.$dateValue = new Date(date); - controller.$dateValue.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); - if (!scope.$mode || keep) { - controller.$setViewValue(controller.$dateValue); - controller.$render(); - if (options.autoclose && !keep) { - $datepicker.hide(true); - } - } else { - angular.extend(viewDate, { - year: date.getFullYear(), - month: date.getMonth(), - date: date.getDate() - }); - $datepicker.setMode(scope.$mode - 1); - $datepicker.$build(); - } - }; - $datepicker.setMode = function (mode) { - // console.warn('$datepicker.setMode', mode); - scope.$mode = mode; - $picker = $datepicker.$views[scope.$mode]; - $datepicker.$build(); - }; - // Protected methods - $datepicker.$build = function (pristine) { - // console.warn('$datepicker.$build() viewDate=%o', viewDate); - if (pristine === true && $picker.built) - return; - if (pristine === false && !$picker.built) - return; - $picker.build.call($picker); - }; - $datepicker.$updateSelected = function () { - for (var i = 0, l = scope.rows.length; i < l; i++) { - angular.forEach(scope.rows[i], updateSelected); - } - }; - $datepicker.$isSelected = function (date) { - return $picker.isSelected(date); - }; - $datepicker.$selectPane = function (value) { - var steps = $picker.steps; - var targetDate = new Date(Date.UTC(viewDate.year + (steps.year || 0) * value, viewDate.month + (steps.month || 0) * value, viewDate.date + (steps.day || 0) * value)); - angular.extend(viewDate, { - year: targetDate.getUTCFullYear(), - month: targetDate.getUTCMonth(), - date: targetDate.getUTCDate() - }); - $datepicker.$build(); - }; - $datepicker.$onMouseDown = function (evt) { - // Prevent blur on mousedown on .dropdown-menu - evt.preventDefault(); - evt.stopPropagation(); - // Emulate click for mobile devices - if (isTouch) { - var targetEl = angular.element(evt.target); - if (targetEl[0].nodeName.toLowerCase() !== 'button') { - targetEl = targetEl.parent(); - } - targetEl.triggerHandler('click'); - } - }; - $datepicker.$onKeyDown = function (evt) { - if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) - return; - evt.preventDefault(); - evt.stopPropagation(); - if (evt.keyCode === 13) { - if (!scope.$mode) { - return $datepicker.hide(true); - } else { - return scope.$apply(function () { - $datepicker.setMode(scope.$mode - 1); - }); - } - } - // Navigate with keyboard - $picker.onKeyDown(evt); - parentScope.$digest(); - }; - // Private - function updateSelected(el) { - el.selected = $datepicker.$isSelected(el.date); - } - function focusElement() { - element[0].focus(); - } - // Overrides - var _init = $datepicker.init; - $datepicker.init = function () { - if (isNative && options.useNative) { - element.prop('type', 'date'); - element.css('-webkit-appearance', 'textfield'); - return; - } else if (isTouch) { - element.prop('type', 'text'); - element.attr('readonly', 'true'); - element.on('click', focusElement); - } - _init(); - }; - var _destroy = $datepicker.destroy; - $datepicker.destroy = function () { - if (isNative && options.useNative) { - element.off('click', focusElement); - } - _destroy(); - }; - var _show = $datepicker.show; - $datepicker.show = function () { - _show(); - setTimeout(function () { - $datepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown); - if (options.keyboard) { - element.on('keydown', $datepicker.$onKeyDown); - } - }); - }; - var _hide = $datepicker.hide; - $datepicker.hide = function (blur) { - $datepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown); - if (options.keyboard) { - element.off('keydown', $datepicker.$onKeyDown); - } - _hide(blur); - }; - return $datepicker; - } - DatepickerFactory.defaults = defaults; - return DatepickerFactory; - } - ]; - }).directive('bsDatepicker', [ - '$window', - '$parse', - '$q', - '$locale', - 'dateFilter', - '$datepicker', - '$dateParser', - '$timeout', - function ($window, $parse, $q, $locale, dateFilter, $datepicker, $dateParser, $timeout) { - var defaults = $datepicker.defaults; - var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); - var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; - return { - restrict: 'EAC', - require: 'ngModel', - link: function postLink(scope, element, attr, controller) { - // Directive options - var options = { - scope: scope, - controller: controller - }; - angular.forEach([ - 'placement', - 'container', - 'delay', - 'trigger', - 'keyboard', - 'html', - 'animation', - 'template', - 'autoclose', - 'dateType', - 'dateFormat', - 'strictFormat', - 'startWeek', - 'useNative', - 'lang', - 'startView', - 'minView' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Initialize datepicker - if (isNative && options.useNative) - options.dateFormat = 'yyyy-MM-dd'; - var datepicker = $datepicker(element, controller, options); - options = datepicker.$options; - // Observe attributes for changes - angular.forEach([ - 'minDate', - 'maxDate' - ], function (key) { - // console.warn('attr.$observe(%s)', key, attr[key]); - angular.isDefined(attr[key]) && attr.$observe(key, function (newValue) { - // console.warn('attr.$observe(%s)=%o', key, newValue); - if (newValue === 'today') { - var today = new Date(); - datepicker.$options[key] = +new Date(today.getFullYear(), today.getMonth(), today.getDate() + (key === 'maxDate' ? 1 : 0), 0, 0, 0, key === 'minDate' ? 0 : -1); - } else if (angular.isString(newValue) && newValue.match(/^".+"$/)) { - datepicker.$options[key] = +new Date(newValue.substr(1, newValue.length - 2)); - } else { - datepicker.$options[key] = +new Date(newValue); - } - // console.warn(angular.isDate(newValue), newValue); - // Build only if dirty - !isNaN(datepicker.$options[key]) && datepicker.$build(false); - }); - }); - // Watch model for changes - scope.$watch(attr.ngModel, function (newValue, oldValue) { - datepicker.update(controller.$dateValue); - }, true); - var dateParser = $dateParser({ - format: options.dateFormat, - lang: options.lang, - strict: options.strictFormat - }); - // viewValue -> $parsers -> modelValue - controller.$parsers.unshift(function (viewValue) { - // console.warn('$parser("%s"): viewValue=%o', element.attr('ng-model'), viewValue); - // Null values should correctly reset the model value & validity - if (!viewValue) { - controller.$setValidity('date', true); - return; - } - var parsedDate = dateParser.parse(viewValue, controller.$dateValue); - if (!parsedDate || isNaN(parsedDate.getTime())) { - controller.$setValidity('date', false); - } else { - var isValid = parsedDate.getTime() >= options.minDate && parsedDate.getTime() <= options.maxDate; - controller.$setValidity('date', isValid); - // Only update the model when we have a valid date - if (isValid) - controller.$dateValue = parsedDate; - } - if (options.dateType === 'string') { - return dateFilter(viewValue, options.dateFormat); - } else if (options.dateType === 'number') { - return controller.$dateValue.getTime(); - } else if (options.dateType === 'iso') { - return controller.$dateValue.toISOString(); - } else { - return new Date(controller.$dateValue); - } - }); - // modelValue -> $formatters -> viewValue - controller.$formatters.push(function (modelValue) { - // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue); - if (angular.isUndefined(modelValue) || modelValue === null) - return; - var date = angular.isDate(modelValue) ? modelValue : new Date(modelValue); - // Setup default value? - // if(isNaN(date.getTime())) { - // var today = new Date(); - // date = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0); - // } - controller.$dateValue = date; - return controller.$dateValue; - }); - // viewValue -> element - controller.$render = function () { - // console.warn('$render("%s"): viewValue=%o', element.attr('ng-model'), controller.$viewValue); - element.val(!controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : dateFilter(controller.$dateValue, options.dateFormat)); - }; - // Garbage collection - scope.$on('$destroy', function () { - datepicker.destroy(); - options = null; - datepicker = null; - }); - } - }; - } - ]).provider('datepickerViews', function () { - var defaults = this.defaults = { - dayFormat: 'dd', - daySplit: 7 - }; - // Split array into smaller arrays - function split(arr, size) { - var arrays = []; - while (arr.length > 0) { - arrays.push(arr.splice(0, size)); - } - return arrays; - } - this.$get = [ - '$locale', - '$sce', - 'dateFilter', - function ($locale, $sce, dateFilter) { - return function (picker) { - var scope = picker.$scope; - var options = picker.$options; - var weekDaysMin = $locale.DATETIME_FORMATS.SHORTDAY; - var weekDaysLabels = weekDaysMin.slice(options.startWeek).concat(weekDaysMin.slice(0, options.startWeek)); - var weekDaysLabelsHtml = $sce.trustAsHtml('' + weekDaysLabels.join('') + ''); - var startDate = picker.$date || new Date(); - var viewDate = { - year: startDate.getFullYear(), - month: startDate.getMonth(), - date: startDate.getDate() + function ($locale) { + var DateParserFactory = function (config) { + var options = angular.extend({}, defaults, config); + var $dateParser = {}; + var regExpMap = { + 'sss': '[0-9]{3}', + 'ss': '[0-5][0-9]', + 's': options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]', + 'mm': '[0-5][0-9]', + 'm': options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]', + 'HH': '[01][0-9]|2[0-3]', + 'H': options.strict ? '1?[0-9]|2[0-3]' : '[01]?[0-9]|2[0-3]', + 'hh': '[0][1-9]|[1][012]', + 'h': options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]', + 'a': 'AM|PM', + 'EEEE': $locale.DATETIME_FORMATS.DAY.join('|'), + 'EEE': $locale.DATETIME_FORMATS.SHORTDAY.join('|'), + 'dd': '0[1-9]|[12][0-9]|3[01]', + 'd': options.strict ? '[1-9]|[1-2][0-9]|3[01]' : '0?[1-9]|[1-2][0-9]|3[01]', + 'MMMM': $locale.DATETIME_FORMATS.MONTH.join('|'), + 'MMM': $locale.DATETIME_FORMATS.SHORTMONTH.join('|'), + 'MM': '0[1-9]|1[012]', + 'M': options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]', + 'yyyy': '[1]{1}[0-9]{3}|[2]{1}[0-9]{3}', + 'yy': '[0-9]{2}', + 'y': options.strict ? '-?(0|[1-9][0-9]{0,3})' : '-?0*[0-9]{1,4}' }; - var timezoneOffset = startDate.getTimezoneOffset() * 60000; - var views = [ - { - format: 'dd', - split: 7, - steps: { month: 1 }, - update: function (date, force) { - if (!this.built || force || date.getFullYear() !== viewDate.year || date.getMonth() !== viewDate.month) { - angular.extend(viewDate, { - year: picker.$date.getFullYear(), - month: picker.$date.getMonth(), - date: picker.$date.getDate() - }); - picker.$build(); - } else if (date.getDate() !== viewDate.date) { - viewDate.date = picker.$date.getDate(); - picker.$updateSelected(); - } - }, - build: function () { - var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1); - var firstDate = new Date(+firstDayOfMonth - (firstDayOfMonth.getDay() - options.startWeek) * 86400000); - var days = [], day; - for (var i = 0; i < 42; i++) { - // < 7 * 6 - day = new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + i); - days.push({ - date: day, - label: dateFilter(day, this.format), - selected: picker.$date && this.isSelected(day), - muted: day.getMonth() !== viewDate.month, - disabled: this.isDisabled(day) - }); - } - scope.title = dateFilter(firstDayOfMonth, 'MMMM yyyy'); - scope.labels = weekDaysLabelsHtml; - scope.rows = split(days, this.split); - this.built = true; - }, - isSelected: function (date) { - return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth() && date.getDate() === picker.$date.getDate(); - }, - isDisabled: function (date) { - return date.getTime() < options.minDate || date.getTime() > options.maxDate; - }, - onKeyDown: function (evt) { - var actualTime = picker.$date.getTime(); - if (evt.keyCode === 37) - picker.select(new Date(actualTime - 1 * 86400000), true); - else if (evt.keyCode === 38) - picker.select(new Date(actualTime - 7 * 86400000), true); - else if (evt.keyCode === 39) - picker.select(new Date(actualTime + 1 * 86400000), true); - else if (evt.keyCode === 40) - picker.select(new Date(actualTime + 7 * 86400000), true); - } + var setFnMap = { + 'sss': proto.setMilliseconds, + 'ss': proto.setSeconds, + 's': proto.setSeconds, + 'mm': proto.setMinutes, + 'm': proto.setMinutes, + 'HH': proto.setHours, + 'H': proto.setHours, + 'hh': proto.setHours, + 'h': proto.setHours, + 'dd': proto.setDate, + 'd': proto.setDate, + 'a': function (value) { + var hours = this.getHours(); + return this.setHours(value.match(/pm/i) ? hours + 12 : hours); }, - { - name: 'month', - format: 'MMM', - split: 4, - steps: { year: 1 }, - update: function (date, force) { - if (!this.built || date.getFullYear() !== viewDate.year) { - angular.extend(viewDate, { - year: picker.$date.getFullYear(), - month: picker.$date.getMonth(), - date: picker.$date.getDate() - }); - picker.$build(); - } else if (date.getMonth() !== viewDate.month) { - angular.extend(viewDate, { - month: picker.$date.getMonth(), - date: picker.$date.getDate() - }); - picker.$updateSelected(); - } - }, - build: function () { - var firstMonth = new Date(viewDate.year, 0, 1); - var months = [], month; - for (var i = 0; i < 12; i++) { - month = new Date(viewDate.year, i, 1); - months.push({ - date: month, - label: dateFilter(month, this.format), - selected: picker.$isSelected(month), - disabled: this.isDisabled(month) - }); - } - scope.title = dateFilter(month, 'yyyy'); - scope.labels = false; - scope.rows = split(months, this.split); - this.built = true; - }, - isSelected: function (date) { - return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth(); - }, - isDisabled: function (date) { - var lastDate = +new Date(date.getFullYear(), date.getMonth() + 1, 0); - return lastDate < options.minDate || date.getTime() > options.maxDate; - }, - onKeyDown: function (evt) { - var actualMonth = picker.$date.getMonth(); - if (evt.keyCode === 37) - picker.select(picker.$date.setMonth(actualMonth - 1), true); - else if (evt.keyCode === 38) - picker.select(picker.$date.setMonth(actualMonth - 4), true); - else if (evt.keyCode === 39) - picker.select(picker.$date.setMonth(actualMonth + 1), true); - else if (evt.keyCode === 40) - picker.select(picker.$date.setMonth(actualMonth + 4), true); - } + 'MMMM': function (value) { + return this.setMonth($locale.DATETIME_FORMATS.MONTH.indexOf(value)); }, - { - name: 'year', - format: 'yyyy', - split: 4, - steps: { year: 12 }, - update: function (date, force) { - if (!this.built || force || parseInt(date.getFullYear() / 20, 10) !== parseInt(viewDate.year / 20, 10)) { - angular.extend(viewDate, { - year: picker.$date.getFullYear(), - month: picker.$date.getMonth(), - date: picker.$date.getDate() - }); - picker.$build(); - } else if (date.getFullYear() !== viewDate.year) { - angular.extend(viewDate, { - year: picker.$date.getFullYear(), - month: picker.$date.getMonth(), - date: picker.$date.getDate() - }); - picker.$updateSelected(); - } - }, - build: function () { - var firstYear = viewDate.year - viewDate.year % (this.split * 3); - var years = [], year; - for (var i = 0; i < 12; i++) { - year = new Date(firstYear + i, 0, 1); - years.push({ - date: year, - label: dateFilter(year, this.format), - selected: picker.$isSelected(year), - disabled: this.isDisabled(year) - }); - } - scope.title = years[0].label + '-' + years[years.length - 1].label; - scope.labels = false; - scope.rows = split(years, this.split); - this.built = true; - }, - isSelected: function (date) { - return picker.$date && date.getFullYear() === picker.$date.getFullYear(); - }, - isDisabled: function (date) { - var lastDate = +new Date(date.getFullYear() + 1, 0, 0); - return lastDate < options.minDate || date.getTime() > options.maxDate; - }, - onKeyDown: function (evt) { - var actualYear = picker.$date.getFullYear(); - if (evt.keyCode === 37) - picker.select(picker.$date.setYear(actualYear - 1), true); - else if (evt.keyCode === 38) - picker.select(picker.$date.setYear(actualYear - 4), true); - else if (evt.keyCode === 39) - picker.select(picker.$date.setYear(actualYear + 1), true); - else if (evt.keyCode === 40) - picker.select(picker.$date.setYear(actualYear + 4), true); - } - } - ]; - return { - views: options.minView ? Array.prototype.slice.call(views, options.minView) : views, - viewDate: viewDate - }; - }; - } - ]; - }); - // Source: src/dropdown/dropdown.js - angular.module('mgcrea.ngStrap.dropdown', ['mgcrea.ngStrap.tooltip']).provider('$dropdown', function () { - var defaults = this.defaults = { - animation: 'am-fade', - prefixClass: 'dropdown', - placement: 'bottom-left', - template: 'dropdown/dropdown.tpl.html', - trigger: 'click', - container: false, - keyboard: true, - html: false, - delay: 0 - }; - this.$get = [ - '$window', - '$rootScope', - '$tooltip', - function ($window, $rootScope, $tooltip) { - var bodyEl = angular.element($window.document.body); - var matchesSelector = Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector; - function DropdownFactory(element, config) { - var $dropdown = {}; - // Common vars - var options = angular.extend({}, defaults, config); - var scope = $dropdown.$scope = options.scope && options.scope.$new() || $rootScope.$new(); - $dropdown = $tooltip(element, options); - // Protected methods - $dropdown.$onKeyDown = function (evt) { - if (!/(38|40)/.test(evt.keyCode)) - return; - evt.preventDefault(); - evt.stopPropagation(); - // Retrieve focused index - var items = angular.element($dropdown.$element[0].querySelectorAll('li:not(.divider) a')); - if (!items.length) - return; - var index; - angular.forEach(items, function (el, i) { - if (matchesSelector && matchesSelector.call(el, ':focus')) - index = i; - }); - // Navigate with keyboard - if (evt.keyCode === 38 && index > 0) - index--; - else if (evt.keyCode === 40 && index < items.length - 1) - index++; - else if (angular.isUndefined(index)) - index = 0; - items.eq(index)[0].focus(); - }; - // Overrides - var show = $dropdown.show; - $dropdown.show = function () { - show(); - setTimeout(function () { - options.keyboard && $dropdown.$element.on('keydown', $dropdown.$onKeyDown); - bodyEl.on('click', onBodyClick); - }); - }; - var hide = $dropdown.hide; - $dropdown.hide = function () { - options.keyboard && $dropdown.$element.off('keydown', $dropdown.$onKeyDown); - bodyEl.off('click', onBodyClick); - hide(); - }; - // Private functions - function onBodyClick(evt) { - if (evt.target === element[0]) - return; - return evt.target !== element[0] && $dropdown.hide(); - } - return $dropdown; - } - return DropdownFactory; - } - ]; - }).directive('bsDropdown', [ - '$window', - '$location', - '$sce', - '$dropdown', - function ($window, $location, $sce, $dropdown) { - return { - restrict: 'EAC', - scope: true, - link: function postLink(scope, element, attr, transclusion) { - // Directive options - var options = { scope: scope }; - angular.forEach([ - 'placement', - 'container', - 'delay', - 'trigger', - 'keyboard', - 'html', - 'animation', - 'template' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Support scope as an object - attr.bsDropdown && scope.$watch(attr.bsDropdown, function (newValue, oldValue) { - scope.content = newValue; - }, true); - // Initialize dropdown - var dropdown = $dropdown(element, options); - // Garbage collection - scope.$on('$destroy', function () { - dropdown.destroy(); - options = null; - dropdown = null; - }); - } - }; - } - ]); - // Source: src/helpers/date-parser.js - angular.module('mgcrea.ngStrap.helpers.dateParser', []).provider('$dateParser', [ - '$localeProvider', - function ($localeProvider) { - var proto = Date.prototype; - function isNumeric(n) { - return !isNaN(parseFloat(n)) && isFinite(n); - } - var defaults = this.defaults = { - format: 'shortDate', - strict: false - }; - this.$get = [ - '$locale', - function ($locale) { - var DateParserFactory = function (config) { - var options = angular.extend({}, defaults, config); - var $dateParser = {}; - var regExpMap = { - 'sss': '[0-9]{3}', - 'ss': '[0-5][0-9]', - 's': options.strict ? '[1-5]?[0-9]' : '[0-5][0-9]', - 'mm': '[0-5][0-9]', - 'm': options.strict ? '[1-5]?[0-9]' : '[0-5][0-9]', - 'HH': '[01][0-9]|2[0-3]', - 'H': options.strict ? '[0][1-9]|[1][012]' : '[01][0-9]|2[0-3]', - 'hh': '[0][1-9]|[1][012]', - 'h': options.strict ? '[1-9]|[1][012]' : '[0]?[1-9]|[1][012]', - 'a': 'AM|PM', - 'EEEE': $locale.DATETIME_FORMATS.DAY.join('|'), - 'EEE': $locale.DATETIME_FORMATS.SHORTDAY.join('|'), - 'dd': '[0-2][0-9]{1}|[3][01]{1}', - 'd': options.strict ? '[1-2]?[0-9]{1}|[3][01]{1}' : '[0-2][0-9]{1}|[3][01]{1}', - 'MMMM': $locale.DATETIME_FORMATS.MONTH.join('|'), - 'MMM': $locale.DATETIME_FORMATS.SHORTMONTH.join('|'), - 'MM': '[0][1-9]|[1][012]', - 'M': options.strict ? '[1-9]|[1][012]' : '[0][1-9]|[1][012]', - 'yyyy': '(?:(?:[1]{1}[0-9]{1}[0-9]{1}[0-9]{1})|(?:[2]{1}[0-9]{3}))(?![[0-9]])', - 'yy': '(?:(?:[0-9]{1}[0-9]{1}))(?![[0-9]])' - }; - var setFnMap = { - 'sss': proto.setMilliseconds, - 'ss': proto.setSeconds, - 's': proto.setSeconds, - 'mm': proto.setMinutes, - 'm': proto.setMinutes, - 'HH': proto.setHours, - 'H': proto.setHours, - 'hh': proto.setHours, - 'h': proto.setHours, - 'dd': proto.setDate, - 'd': proto.setDate, - 'a': function (value) { - var hours = this.getHours(); - return this.setHours(value.match(/pm/i) ? hours + 12 : hours); - }, - 'MMMM': function (value) { - return this.setMonth($locale.DATETIME_FORMATS.MONTH.indexOf(value)); - }, - 'MMM': function (value) { - return this.setMonth($locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value)); - }, - 'MM': function (value) { - return this.setMonth(1 * value - 1); - }, - 'M': function (value) { - return this.setMonth(1 * value - 1); - }, - 'yyyy': proto.setFullYear, - 'yy': function (value) { - return this.setFullYear(2000 + 1 * value); - }, - 'y': proto.setFullYear - }; - var regex, setMap; - $dateParser.init = function () { - $dateParser.$format = $locale.DATETIME_FORMATS[options.format] || options.format; - regex = regExpForFormat($dateParser.$format); - setMap = setMapForFormat($dateParser.$format); - }; - $dateParser.isValid = function (date) { - if (angular.isDate(date)) - return !isNaN(date.getTime()); - return regex.test(date); - }; - $dateParser.parse = function (value, baseDate) { - if (angular.isDate(value)) - return value; - var matches = regex.exec(value); - if (!matches) - return false; - var date = baseDate || new Date(0); - for (var i = 0; i < matches.length - 1; i++) { - setMap[i] && setMap[i].call(date, matches[i + 1]); - } - return date; + 'MMM': function (value) { + return this.setMonth($locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value)); + }, + 'MM': function (value) { + return this.setMonth(1 * value - 1); + }, + 'M': function (value) { + return this.setMonth(1 * value - 1); + }, + 'yyyy': proto.setFullYear, + 'yy': function (value) { + return this.setFullYear(2000 + 1 * value); + }, + 'y': proto.setFullYear }; - // Private functions - function setMapForFormat(format) { - var keys = Object.keys(setFnMap), i; - var map = [], sortedMap = []; - // Map to setFn - var clonedFormat = format; - for (i = 0; i < keys.length; i++) { - if (format.split(keys[i]).length > 1) { - var index = clonedFormat.search(keys[i]); - format = format.split(keys[i]).join(''); - if (setFnMap[keys[i]]) - map[index] = setFnMap[keys[i]]; - } - } - // Sort result map - angular.forEach(map, function (v) { - sortedMap.push(v); - }); - return sortedMap; - } - function escapeReservedSymbols(text) { - return text.replace(/\//g, '[\\/]').replace('/-/g', '[-]').replace(/\./g, '[.]').replace(/\\s/g, '[\\s]'); + var regex, setMap; + $dateParser.init = function () { + $dateParser.$format = $locale.DATETIME_FORMATS[options.format] || options.format; + regex = regExpForFormat($dateParser.$format); + setMap = setMapForFormat($dateParser.$format); + }; + $dateParser.isValid = function (date) { + if (angular.isDate(date)) + return !isNaN(date.getTime()); + return regex.test(date); + }; + $dateParser.parse = function (value, baseDate) { + if (angular.isDate(value)) + return value; + var matches = regex.exec(value); + if (!matches) + return false; + var date = baseDate || new Date(0); + for (var i = 0; i < matches.length - 1; i++) { + setMap[i] && setMap[i].call(date, matches[i + 1]); } - function regExpForFormat(format) { - var keys = Object.keys(regExpMap), i; - var re = format; - // Abstract replaces to avoid collisions - for (i = 0; i < keys.length; i++) { - re = re.split(keys[i]).join('${' + i + '}'); - } - // Replace abstracted values - for (i = 0; i < keys.length; i++) { - re = re.split('${' + i + '}').join('(' + regExpMap[keys[i]] + ')'); + return date; + }; + // Private functions + function setMapForFormat(format) { + var keys = Object.keys(setFnMap), i; + var map = [], sortedMap = []; + // Map to setFn + var clonedFormat = format; + for (i = 0; i < keys.length; i++) { + if (format.split(keys[i]).length > 1) { + var index = clonedFormat.search(keys[i]); + format = format.split(keys[i]).join(''); + if (setFnMap[keys[i]]) + map[index] = setFnMap[keys[i]]; } - format = escapeReservedSymbols(format); - return new RegExp('^' + re + '$', ['i']); } - $dateParser.init(); - return $dateParser; - }; - return DateParserFactory; - } - ]; - } - ]); - // Source: src/helpers/debounce.js - angular.module('mgcrea.ngStrap.helpers.debounce', []).constant('debounce', function (func, wait, immediate) { - var timeout, args, context, timestamp, result; - return function () { - context = this; - args = arguments; - timestamp = new Date(); - var later = function () { - var last = new Date() - timestamp; - if (last < wait) { - timeout = setTimeout(later, wait - last); - } else { - timeout = null; - if (!immediate) - result = func.apply(context, args); - } - }; - var callNow = immediate && !timeout; - if (!timeout) { - timeout = setTimeout(later, wait); + // Sort result map + angular.forEach(map, function (v) { + sortedMap.push(v); + }); + return sortedMap; + } + function escapeReservedSymbols(text) { + return text.replace(/\//g, '[\\/]').replace('/-/g', '[-]').replace(/\./g, '[.]').replace(/\\s/g, '[\\s]'); + } + function regExpForFormat(format) { + var keys = Object.keys(regExpMap), i; + var re = format; + // Abstract replaces to avoid collisions + for (i = 0; i < keys.length; i++) { + re = re.split(keys[i]).join('${' + i + '}'); + } + // Replace abstracted values + for (i = 0; i < keys.length; i++) { + re = re.split('${' + i + '}').join('(' + regExpMap[keys[i]] + ')'); + } + format = escapeReservedSymbols(format); + return new RegExp('^' + re + '$', ['i']); + } + $dateParser.init(); + return $dateParser; + }; + return DateParserFactory; } - if (callNow) - result = func.apply(context, args); - return result; - }; - }).constant('throttle', function (func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - options || (options = {}); + ]; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/helpers/debounce.js +angular.module('mgcrea.ngStrap.helpers.debounce', []).constant('debounce', function (func, wait, immediate) { + var timeout, args, context, timestamp, result; + return function () { + context = this; + args = arguments; + timestamp = new Date(); var later = function () { - previous = options.leading === false ? 0 : new Date(); - timeout = null; - result = func.apply(context, args); - }; - return function () { - var now = new Date(); - if (!previous && options.leading === false) - previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0) { - clearTimeout(timeout); + var last = new Date() - timestamp; + if (last < wait) { + timeout = setTimeout(later, wait - last); + } else { timeout = null; - previous = now; - result = func.apply(context, args); - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); + if (!immediate) + result = func.apply(context, args); } - return result; }; - }); - // Source: src/helpers/dimensions.js - angular.module('mgcrea.ngStrap.helpers.dimensions', []).factory('dimensions', [ - '$document', - '$window', - function ($document, $window) { - var jqLite = angular.element; - var fn = {}; - /** + var callNow = immediate && !timeout; + if (!timeout) { + timeout = setTimeout(later, wait); + } + if (callNow) + result = func.apply(context, args); + return result; + }; +}).constant('throttle', function (func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + options || (options = {}); + var later = function () { + previous = options.leading === false ? 0 : new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function () { + var now = new Date(); + if (!previous && options.leading === false) + previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; +}); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/helpers/dimensions.js +angular.module('mgcrea.ngStrap.helpers.dimensions', []).factory('dimensions', [ + '$document', + '$window', + function ($document, $window) { + var jqLite = angular.element; + var fn = {}; + /** * Test the element nodeName * @param element * @param name */ - var nodeName = fn.nodeName = function (element, name) { - return element.nodeName && element.nodeName.toLowerCase() === name.toLowerCase(); - }; - /** + var nodeName = fn.nodeName = function (element, name) { + return element.nodeName && element.nodeName.toLowerCase() === name.toLowerCase(); + }; + /** * Returns the element computed style * @param element * @param prop * @param extra */ - fn.css = function (element, prop, extra) { - var value; - if (element.currentStyle) { - //IE - value = element.currentStyle[prop]; - } else if (window.getComputedStyle) { - value = window.getComputedStyle(element)[prop]; - } else { - value = element.style[prop]; - } - return extra === true ? parseFloat(value) || 0 : value; - }; - /** + fn.css = function (element, prop, extra) { + var value; + if (element.currentStyle) { + //IE + value = element.currentStyle[prop]; + } else if (window.getComputedStyle) { + value = window.getComputedStyle(element)[prop]; + } else { + value = element.style[prop]; + } + return extra === true ? parseFloat(value) || 0 : value; + }; + /** * Provides read-only equivalent of jQuery's offset function: * @required-by bootstrap-tooltip, bootstrap-affix * @url http://api.jquery.com/offset/ * @param element */ - fn.offset = function (element) { - var boxRect = element.getBoundingClientRect(); - var docElement = element.ownerDocument; - return { - width: element.offsetWidth, - height: element.offsetHeight, - top: boxRect.top + (window.pageYOffset || docElement.documentElement.scrollTop) - (docElement.documentElement.clientTop || 0), - left: boxRect.left + (window.pageXOffset || docElement.documentElement.scrollLeft) - (docElement.documentElement.clientLeft || 0) - }; + fn.offset = function (element) { + var boxRect = element.getBoundingClientRect(); + var docElement = element.ownerDocument; + return { + width: element.offsetWidth, + height: element.offsetHeight, + top: boxRect.top + (window.pageYOffset || docElement.documentElement.scrollTop) - (docElement.documentElement.clientTop || 0), + left: boxRect.left + (window.pageXOffset || docElement.documentElement.scrollLeft) - (docElement.documentElement.clientLeft || 0) }; - /** + }; + /** * Provides read-only equivalent of jQuery's position function * @required-by bootstrap-tooltip, bootstrap-affix * @url http://api.jquery.com/offset/ * @param element */ - fn.position = function (element) { - var offsetParentRect = { - top: 0, - left: 0 - }, offsetParentElement, offset; - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent - if (fn.css(element, 'position') === 'fixed') { - // We assume that getBoundingClientRect is available when computed position is fixed - offset = element.getBoundingClientRect(); - } else { - // Get *real* offsetParentElement - offsetParentElement = offsetParent(element); - offset = fn.offset(element); - // Get correct offsets - offset = fn.offset(element); - if (!nodeName(offsetParentElement, 'html')) { - offsetParentRect = fn.offset(offsetParentElement); - } - // Add offsetParent borders - offsetParentRect.top += fn.css(offsetParentElement, 'borderTopWidth', true); - offsetParentRect.left += fn.css(offsetParentElement, 'borderLeftWidth', true); + fn.position = function (element) { + var offsetParentRect = { + top: 0, + left: 0 + }, offsetParentElement, offset; + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent + if (fn.css(element, 'position') === 'fixed') { + // We assume that getBoundingClientRect is available when computed position is fixed + offset = element.getBoundingClientRect(); + } else { + // Get *real* offsetParentElement + offsetParentElement = offsetParent(element); + offset = fn.offset(element); + // Get correct offsets + offset = fn.offset(element); + if (!nodeName(offsetParentElement, 'html')) { + offsetParentRect = fn.offset(offsetParentElement); } - // Subtract parent offsets and element margins - return { - width: element.offsetWidth, - height: element.offsetHeight, - top: offset.top - offsetParentRect.top - fn.css(element, 'marginTop', true), - left: offset.left - offsetParentRect.left - fn.css(element, 'marginLeft', true) - }; + // Add offsetParent borders + offsetParentRect.top += fn.css(offsetParentElement, 'borderTopWidth', true); + offsetParentRect.left += fn.css(offsetParentElement, 'borderLeftWidth', true); + } + // Subtract parent offsets and element margins + return { + width: element.offsetWidth, + height: element.offsetHeight, + top: offset.top - offsetParentRect.top - fn.css(element, 'marginTop', true), + left: offset.left - offsetParentRect.left - fn.css(element, 'marginLeft', true) }; - /** + }; + /** * Returns the closest, non-statically positioned offsetParent of a given element * @required-by fn.position * @param element */ - var offsetParent = function offsetParentElement(element) { - var docElement = element.ownerDocument; - var offsetParent = element.offsetParent || docElement; - if (nodeName(offsetParent, '#document')) - return docElement.documentElement; - while (offsetParent && !nodeName(offsetParent, 'html') && fn.css(offsetParent, 'position') === 'static') { - offsetParent = offsetParent.offsetParent; - } - return offsetParent || docElement.documentElement; - }; - /** + var offsetParent = function offsetParentElement(element) { + var docElement = element.ownerDocument; + var offsetParent = element.offsetParent || docElement; + if (nodeName(offsetParent, '#document')) + return docElement.documentElement; + while (offsetParent && !nodeName(offsetParent, 'html') && fn.css(offsetParent, 'position') === 'static') { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || docElement.documentElement; + }; + /** * Provides equivalent of jQuery's height function * @required-by bootstrap-affix * @url http://api.jquery.com/height/ * @param element * @param outer */ - fn.height = function (element, outer) { - var value = element.offsetHeight; - if (outer) { - value += fn.css(element, 'marginTop', true) + fn.css(element, 'marginBottom', true); - } else { - value -= fn.css(element, 'paddingTop', true) + fn.css(element, 'paddingBottom', true) + fn.css(element, 'borderTopWidth', true) + fn.css(element, 'borderBottomWidth', true); - } - return value; - }; - /** + fn.height = function (element, outer) { + var value = element.offsetHeight; + if (outer) { + value += fn.css(element, 'marginTop', true) + fn.css(element, 'marginBottom', true); + } else { + value -= fn.css(element, 'paddingTop', true) + fn.css(element, 'paddingBottom', true) + fn.css(element, 'borderTopWidth', true) + fn.css(element, 'borderBottomWidth', true); + } + return value; + }; + /** * Provides equivalent of jQuery's height function * @required-by bootstrap-affix * @url http://api.jquery.com/width/ * @param element * @param outer */ - fn.width = function (element, outer) { - var value = element.offsetWidth; - if (outer) { - value += fn.css(element, 'marginLeft', true) + fn.css(element, 'marginRight', true); - } else { - value -= fn.css(element, 'paddingLeft', true) + fn.css(element, 'paddingRight', true) + fn.css(element, 'borderLeftWidth', true) + fn.css(element, 'borderRightWidth', true); - } - return value; - }; - return fn; - } - ]); - // Source: src/helpers/parse-options.js - angular.module('mgcrea.ngStrap.helpers.parseOptions', []).provider('$parseOptions', function () { - var defaults = this.defaults = { regexp: /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/ }; - this.$get = [ - '$parse', - '$q', - function ($parse, $q) { - function ParseOptionsFactory(attr, config) { - var $parseOptions = {}; - // Common vars - var options = angular.extend({}, defaults, config); - $parseOptions.$values = []; - // Private vars - var match, displayFn, valueName, keyName, groupByFn, valueFn, valuesFn; - $parseOptions.init = function () { - $parseOptions.$match = match = attr.match(options.regexp); - displayFn = $parse(match[2] || match[1]), valueName = match[4] || match[6], keyName = match[5], groupByFn = $parse(match[3] || ''), valueFn = $parse(match[2] ? match[1] : valueName), valuesFn = $parse(match[7]); - }; - $parseOptions.valuesFn = function (scope, controller) { - return $q.when(valuesFn(scope, controller)).then(function (values) { - $parseOptions.$values = values ? parseValues(values) : {}; - return $parseOptions.$values; - }); - }; - // Private functions - function parseValues(values) { - return values.map(function (match, index) { - var locals = {}, label, value; - locals[valueName] = match; - label = displayFn(locals); - value = valueFn(locals) || index; - return { - label: label, - value: value - }; - }); - } - $parseOptions.init(); - return $parseOptions; + fn.width = function (element, outer) { + var value = element.offsetWidth; + if (outer) { + value += fn.css(element, 'marginLeft', true) + fn.css(element, 'marginRight', true); + } else { + value -= fn.css(element, 'paddingLeft', true) + fn.css(element, 'paddingRight', true) + fn.css(element, 'borderLeftWidth', true) + fn.css(element, 'borderRightWidth', true); + } + return value; + }; + return fn; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/helpers/parse-options.js +angular.module('mgcrea.ngStrap.helpers.parseOptions', []).provider('$parseOptions', function () { + var defaults = this.defaults = { regexp: /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/ }; + this.$get = [ + '$parse', + '$q', + function ($parse, $q) { + function ParseOptionsFactory(attr, config) { + var $parseOptions = {}; + // Common vars + var options = angular.extend({}, defaults, config); + $parseOptions.$values = []; + // Private vars + var match, displayFn, valueName, keyName, groupByFn, valueFn, valuesFn; + $parseOptions.init = function () { + $parseOptions.$match = match = attr.match(options.regexp); + displayFn = $parse(match[2] || match[1]), valueName = match[4] || match[6], keyName = match[5], groupByFn = $parse(match[3] || ''), valueFn = $parse(match[2] ? match[1] : valueName), valuesFn = $parse(match[7]); + }; + $parseOptions.valuesFn = function (scope, controller) { + return $q.when(valuesFn(scope, controller)).then(function (values) { + $parseOptions.$values = values ? parseValues(values) : {}; + return $parseOptions.$values; + }); + }; + // Private functions + function parseValues(values) { + return values.map(function (match, index) { + var locals = {}, label, value; + locals[valueName] = match; + label = displayFn(locals); + value = valueFn(locals) || index; + return { + label: label, + value: value + }; + }); } - return ParseOptionsFactory; + $parseOptions.init(); + return $parseOptions; } - ]; - }); - // Source: src/modal/modal.js - angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).provider('$modal', function () { - var defaults = this.defaults = { - animation: 'am-fade', - backdropAnimation: 'am-fade', - prefixClass: 'modal', - placement: 'top', - template: 'modal/modal.tpl.html', - contentTemplate: false, - container: false, - element: null, - backdrop: true, - keyboard: true, - html: false, - show: true + return ParseOptionsFactory; + } + ]; +}); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/helpers/raf.js +angular.version.minor < 3 && angular.version.dot < 14 && angular.module('ng').factory('$$rAF', [ + '$window', + '$timeout', + function ($window, $timeout) { + var requestAnimationFrame = $window.requestAnimationFrame || $window.webkitRequestAnimationFrame || $window.mozRequestAnimationFrame; + var cancelAnimationFrame = $window.cancelAnimationFrame || $window.webkitCancelAnimationFrame || $window.mozCancelAnimationFrame || $window.webkitCancelRequestAnimationFrame; + var rafSupported = !!requestAnimationFrame; + var raf = rafSupported ? function (fn) { + var id = requestAnimationFrame(fn); + return function () { + cancelAnimationFrame(id); + }; + } : function (fn) { + var timer = $timeout(fn, 16.66, false); + // 1000 / 60 = 16.666 + return function () { + $timeout.cancel(timer); + }; }; - this.$get = [ - '$window', - '$rootScope', - '$compile', - '$q', - '$templateCache', - '$http', - '$animate', - '$timeout', - 'dimensions', - function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, dimensions) { - var forEach = angular.forEach; - var trim = String.prototype.trim; - var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; - var bodyElement = angular.element($window.document.body); - var htmlReplaceRegExp = /ng-bind="/gi; - function ModalFactory(config) { - var $modal = {}; - // Common vars - var options = angular.extend({}, defaults, config); - $modal.$promise = fetchTemplate(options.template); - var scope = $modal.$scope = options.scope && options.scope.$new() || $rootScope.$new(); - if (!options.element && !options.container) { - options.container = 'body'; - } - // Support scope as string options - forEach([ - 'title', - 'content' - ], function (key) { - if (options[key]) - scope[key] = options[key]; + raf.supported = rafSupported; + return raf; + } +]); // .factory('$$animateReflow', function($$rAF, $document) { + // var bodyEl = $document[0].body; + // return function(fn) { + // //the returned function acts as the cancellation function + // return $$rAF(function() { + // //the line below will force the browser to perform a repaint + // //so that all the animated elements within the animation frame + // //will be properly updated and drawn on screen. This is + // //required to perform multi-class CSS based animations with + // //Firefox. DO NOT REMOVE THIS LINE. + // var a = bodyEl.offsetWidth + 1; + // fn(); + // }); + // }; + // }); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/modal/modal.js +angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).provider('$modal', function () { + var defaults = this.defaults = { + animation: 'am-fade', + backdropAnimation: 'am-fade', + prefixClass: 'modal', + prefixEvent: 'modal', + placement: 'top', + template: 'modal/modal.tpl.html', + contentTemplate: false, + container: false, + element: null, + backdrop: true, + keyboard: true, + html: false, + show: true + }; + this.$get = [ + '$window', + '$rootScope', + '$compile', + '$q', + '$templateCache', + '$http', + '$animate', + '$timeout', + '$sce', + 'dimensions', + function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, $sce, dimensions) { + var forEach = angular.forEach; + var trim = String.prototype.trim; + var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; + var bodyElement = angular.element($window.document.body); + var htmlReplaceRegExp = /ng-bind="/gi; + function ModalFactory(config) { + var $modal = {}; + // Common vars + var options = $modal.$options = angular.extend({}, defaults, config); + $modal.$promise = fetchTemplate(options.template); + var scope = $modal.$scope = options.scope && options.scope.$new() || $rootScope.$new(); + if (!options.element && !options.container) { + options.container = 'body'; + } + // Support scope as string options + forEach([ + 'title', + 'content' + ], function (key) { + if (options[key]) + scope[key] = $sce.trustAsHtml(options[key]); + }); + // Provide scope helpers + scope.$hide = function () { + scope.$$postDigest(function () { + $modal.hide(); }); - // Provide scope helpers - scope.$hide = function () { - scope.$$postDigest(function () { - $modal.hide(); + }; + scope.$show = function () { + scope.$$postDigest(function () { + $modal.show(); + }); + }; + scope.$toggle = function () { + scope.$$postDigest(function () { + $modal.toggle(); + }); + }; + // Support contentTemplate option + if (options.contentTemplate) { + $modal.$promise = $modal.$promise.then(function (template) { + var templateEl = angular.element(template); + return fetchTemplate(options.contentTemplate).then(function (contentTemplate) { + var contentEl = findElement('[ng-bind="content"]', templateEl[0]).removeAttr('ng-bind').html(contentTemplate); + // Drop the default footer as you probably don't want it if you use a custom contentTemplate + if (!config.template) + contentEl.next().remove(); + return templateEl[0].outerHTML; }); - }; - scope.$show = function () { + }); + } + // Fetch, compile then initialize modal + var modalLinker, modalElement; + var backdropElement = angular.element('
'); + $modal.$promise.then(function (template) { + if (angular.isObject(template)) + template = template.data; + if (options.html) + template = template.replace(htmlReplaceRegExp, 'ng-bind-html="'); + template = trim.apply(template); + modalLinker = $compile(template); + $modal.init(); + }); + $modal.init = function () { + // Options: show + if (options.show) { scope.$$postDigest(function () { $modal.show(); }); - }; - scope.$toggle = function () { - scope.$$postDigest(function () { - $modal.toggle(); - }); - }; - // Support contentTemplate option - if (options.contentTemplate) { - $modal.$promise = $modal.$promise.then(function (template) { - var templateEl = angular.element(template); - return fetchTemplate(options.contentTemplate).then(function (contentTemplate) { - var contentEl = findElement('[ng-bind="content"]', templateEl[0]).removeAttr('ng-bind').html(contentTemplate); - // Drop the default footer as you probably don't want it if you use a custom contentTemplate - if (!config.template) - contentEl.next().remove(); - return templateEl[0].outerHTML; - }); - }); } - // Fetch, compile then initialize modal - var modalLinker, modalElement; - var backdropElement = angular.element('
'); - $modal.$promise.then(function (template) { - if (angular.isObject(template)) - template = template.data; - if (options.html) - template = template.replace(htmlReplaceRegExp, 'ng-bind-html="'); - template = trim.apply(template); - modalLinker = $compile(template); - $modal.init(); + }; + $modal.destroy = function () { + // Remove element + if (modalElement) { + modalElement.remove(); + modalElement = null; + } + if (backdropElement) { + backdropElement.remove(); + backdropElement = null; + } + // Destroy scope + scope.$destroy(); + }; + $modal.show = function () { + scope.$emit(options.prefixEvent + '.show.before', $modal); + var parent = options.container ? findElement(options.container) : null; + var after = options.container ? null : options.element; + // Fetch a cloned element linked from template + modalElement = $modal.$element = modalLinker(scope, function (clonedElement, scope) { }); - $modal.init = function () { - // Options: show - if (options.show) { - scope.$$postDigest(function () { - $modal.show(); - }); - } - }; - $modal.destroy = function () { - // Remove element - if (modalElement) { - modalElement.remove(); - modalElement = null; - } - if (backdropElement) { - backdropElement.remove(); - backdropElement = null; - } - // Destroy scope - scope.$destroy(); - }; - $modal.show = function () { - var parent = options.container ? findElement(options.container) : null; - var after = options.container ? null : options.element; - // Fetch a cloned element linked from template - modalElement = $modal.$element = modalLinker(scope, function (clonedElement, scope) { - }); - // Set the initial positioning. - modalElement.css({ display: 'block' }).addClass(options.placement); - // Options: animation - if (options.animation) { - if (options.backdrop) { - backdropElement.addClass(options.backdropAnimation); - } - modalElement.addClass(options.animation); - } + // Set the initial positioning. + modalElement.css({ display: 'block' }).addClass(options.placement); + // Options: animation + if (options.animation) { if (options.backdrop) { - $animate.enter(backdropElement, bodyElement, null, function () { - }); + backdropElement.addClass(options.backdropAnimation); } - $animate.enter(modalElement, parent, after, function () { - }); - scope.$isShown = true; - scope.$$phase || scope.$digest(); - // Focus once the enter-animation has started - // Weird PhantomJS bug hack - var el = modalElement[0]; - requestAnimationFrame(function () { - el.focus(); + modalElement.addClass(options.animation); + } + if (options.backdrop) { + $animate.enter(backdropElement, bodyElement, null, function () { }); - bodyElement.addClass(options.prefixClass + '-open'); + } + $animate.enter(modalElement, parent, after, function () { + scope.$emit(options.prefixEvent + '.show', $modal); + }); + scope.$isShown = true; + scope.$$phase || scope.$root.$$phase || scope.$digest(); + // Focus once the enter-animation has started + // Weird PhantomJS bug hack + var el = modalElement[0]; + requestAnimationFrame(function () { + el.focus(); + }); + bodyElement.addClass(options.prefixClass + '-open'); + if (options.animation) { + bodyElement.addClass(options.prefixClass + '-with-' + options.animation); + } + // Bind events + if (options.backdrop) { + modalElement.on('click', hideOnBackdropClick); + backdropElement.on('click', hideOnBackdropClick); + } + if (options.keyboard) { + modalElement.on('keyup', $modal.$onKeyUp); + } + }; + $modal.hide = function () { + scope.$emit(options.prefixEvent + '.hide.before', $modal); + $animate.leave(modalElement, function () { + scope.$emit(options.prefixEvent + '.hide', $modal); + bodyElement.removeClass(options.prefixClass + '-open'); if (options.animation) { bodyElement.addClass(options.prefixClass + '-with-' + options.animation); } - // Bind events - if (options.backdrop) { - modalElement.on('click', hideOnBackdropClick); - backdropElement.on('click', hideOnBackdropClick); - } - if (options.keyboard) { - modalElement.on('keyup', $modal.$onKeyUp); - } - }; - $modal.hide = function () { - $animate.leave(modalElement, function () { - bodyElement.removeClass(options.prefixClass + '-open'); - if (options.animation) { - bodyElement.addClass(options.prefixClass + '-with-' + options.animation); - } + }); + if (options.backdrop) { + $animate.leave(backdropElement, function () { }); - if (options.backdrop) { - $animate.leave(backdropElement, function () { - }); - } - scope.$isShown = false; - scope.$$phase || scope.$digest(); - // Unbind events - if (options.backdrop) { - modalElement.off('click', hideOnBackdropClick); - backdropElement.off('click', hideOnBackdropClick); - } - if (options.keyboard) { - modalElement.off('keyup', $modal.$onKeyUp); - } - }; - $modal.toggle = function () { - scope.$isShown ? $modal.hide() : $modal.show(); - }; - $modal.focus = function () { - modalElement[0].focus(); - }; - // Protected methods - $modal.$onKeyUp = function (evt) { - evt.which === 27 && $modal.hide(); - }; - // Private methods - function hideOnBackdropClick(evt) { - if (evt.target !== evt.currentTarget) - return; - options.backdrop === 'static' ? $modal.focus() : $modal.hide(); } - return $modal; - } - // Helper functions - function findElement(query, element) { - return angular.element((element || document).querySelectorAll(query)); - } - function fetchTemplate(template) { - return $q.when($templateCache.get(template) || $http.get(template)).then(function (res) { - if (angular.isObject(res)) { - $templateCache.put(template, res.data); - return res.data; - } - return res; - }); + scope.$isShown = false; + scope.$$phase || scope.$root.$$phase || scope.$digest(); + // Unbind events + if (options.backdrop) { + modalElement.off('click', hideOnBackdropClick); + backdropElement.off('click', hideOnBackdropClick); + } + if (options.keyboard) { + modalElement.off('keyup', $modal.$onKeyUp); + } + }; + $modal.toggle = function () { + scope.$isShown ? $modal.hide() : $modal.show(); + }; + $modal.focus = function () { + modalElement[0].focus(); + }; + // Protected methods + $modal.$onKeyUp = function (evt) { + evt.which === 27 && $modal.hide(); + }; + // Private methods + function hideOnBackdropClick(evt) { + if (evt.target !== evt.currentTarget) + return; + options.backdrop === 'static' ? $modal.focus() : $modal.hide(); } - return ModalFactory; + return $modal; } - ]; - }).directive('bsModal', [ - '$window', - '$location', - '$sce', - '$modal', - function ($window, $location, $sce, $modal) { - return { - restrict: 'EAC', - scope: true, - link: function postLink(scope, element, attr, transclusion) { - // Directive options - var options = { - scope: scope, - element: element, - show: false - }; - angular.forEach([ - 'template', - 'contentTemplate', - 'placement', - 'backdrop', - 'keyboard', - 'html', - 'container', - 'animation' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Support scope as data-attrs - angular.forEach([ - 'title', - 'content' - ], function (key) { - attr[key] && attr.$observe(key, function (newValue, oldValue) { - scope[key] = $sce.trustAsHtml(newValue); - }); + // Helper functions + function findElement(query, element) { + return angular.element((element || document).querySelectorAll(query)); + } + function fetchTemplate(template) { + return $q.when($templateCache.get(template) || $http.get(template)).then(function (res) { + if (angular.isObject(res)) { + $templateCache.put(template, res.data); + return res.data; + } + return res; + }); + } + return ModalFactory; + } + ]; +}).directive('bsModal', [ + '$window', + '$location', + '$sce', + '$modal', + function ($window, $location, $sce, $modal) { + return { + restrict: 'EAC', + scope: true, + link: function postLink(scope, element, attr, transclusion) { + // Directive options + var options = { + scope: scope, + element: element, + show: false + }; + angular.forEach([ + 'template', + 'contentTemplate', + 'placement', + 'backdrop', + 'keyboard', + 'html', + 'container', + 'animation' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Support scope as data-attrs + angular.forEach([ + 'title', + 'content' + ], function (key) { + attr[key] && attr.$observe(key, function (newValue, oldValue) { + scope[key] = $sce.trustAsHtml(newValue); }); - // Support scope as an object - attr.bsModal && scope.$watch(attr.bsModal, function (newValue, oldValue) { - if (angular.isObject(newValue)) { - angular.extend(scope, newValue); + }); + // Support scope as an object + attr.bsModal && scope.$watch(attr.bsModal, function (newValue, oldValue) { + if (angular.isObject(newValue)) { + angular.extend(scope, newValue); + } else { + scope.content = newValue; + } + }, true); + // Initialize modal + var modal = $modal(options); + // Trigger + element.on(attr.trigger || 'click', modal.toggle); + // Garbage collection + scope.$on('$destroy', function () { + modal.destroy(); + options = null; + modal = null; + }); + } + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/navbar/navbar.js +angular.module('mgcrea.ngStrap.navbar', []).provider('$navbar', function () { + var defaults = this.defaults = { + activeClass: 'active', + routeAttr: 'data-match-route', + strict: false + }; + this.$get = function () { + return { defaults: defaults }; + }; +}).directive('bsNavbar', [ + '$window', + '$location', + '$navbar', + function ($window, $location, $navbar) { + var defaults = $navbar.defaults; + return { + restrict: 'A', + link: function postLink(scope, element, attr, controller) { + // Directive options + var options = angular.copy(defaults); + angular.forEach(Object.keys(defaults), function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Watch for the $location + scope.$watch(function () { + return $location.path(); + }, function (newValue, oldValue) { + var liElements = element[0].querySelectorAll('li[' + options.routeAttr + ']'); + angular.forEach(liElements, function (li) { + var liElement = angular.element(li); + var pattern = liElement.attr(options.routeAttr).replace('/', '\\/'); + if (options.strict) { + pattern = '^' + pattern + '$'; + } + var regexp = new RegExp(pattern, ['i']); + if (regexp.test(newValue)) { + liElement.addClass(options.activeClass); } else { - scope.content = newValue; + liElement.removeClass(options.activeClass); } - }, true); - // Initialize modal - var modal = $modal(options); - // Trigger - element.on(attr.trigger || 'click', modal.toggle); - // Garbage collection - scope.$on('$destroy', function () { - modal.destroy(); - options = null; - modal = null; }); + }); + } + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/popover/popover.js +angular.module('mgcrea.ngStrap.popover', ['mgcrea.ngStrap.tooltip']).provider('$popover', function () { + var defaults = this.defaults = { + animation: 'am-fade', + placement: 'right', + template: 'popover/popover.tpl.html', + contentTemplate: false, + trigger: 'click', + keyboard: true, + html: false, + title: '', + content: '', + delay: 0, + container: false + }; + this.$get = [ + '$tooltip', + function ($tooltip) { + function PopoverFactory(element, config) { + // Common vars + var options = angular.extend({}, defaults, config); + var $popover = $tooltip(element, options); + // Support scope as string options [/*title, */content] + if (options.content) { + $popover.$scope.content = options.content; } - }; + return $popover; + } + return PopoverFactory; } - ]); - // Source: src/navbar/navbar.js - angular.module('mgcrea.ngStrap.navbar', []).provider('$navbar', function () { - var defaults = this.defaults = { - activeClass: 'active', - routeAttr: 'data-match-route', - strict: false - }; - this.$get = function () { - return { defaults: defaults }; - }; - }).directive('bsNavbar', [ - '$window', - '$location', - '$navbar', - function ($window, $location, $navbar) { - var defaults = $navbar.defaults; - return { - restrict: 'A', - link: function postLink(scope, element, attr, controller) { - // Directive options - var options = angular.copy(defaults); - angular.forEach(Object.keys(defaults), function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Watch for the $location - scope.$watch(function () { - return $location.path(); - }, function (newValue, oldValue) { - var liElements = element[0].querySelectorAll('li[' + options.routeAttr + ']'); - angular.forEach(liElements, function (li) { - var liElement = angular.element(li); - var pattern = liElement.attr(options.routeAttr).replace('/', '\\/'); - if (options.strict) { - pattern = '^' + pattern + '$'; - } - var regexp = new RegExp(pattern, ['i']); - if (regexp.test(newValue)) { - liElement.addClass(options.activeClass); - } else { - liElement.removeClass(options.activeClass); - } + ]; +}).directive('bsPopover', [ + '$window', + '$location', + '$sce', + '$popover', + function ($window, $location, $sce, $popover) { + var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; + return { + restrict: 'EAC', + scope: true, + link: function postLink(scope, element, attr) { + // Directive options + var options = { scope: scope }; + angular.forEach([ + 'template', + 'contentTemplate', + 'placement', + 'container', + 'delay', + 'trigger', + 'keyboard', + 'html', + 'animation' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Support scope as data-attrs + angular.forEach([ + 'title', + 'content' + ], function (key) { + attr[key] && attr.$observe(key, function (newValue, oldValue) { + scope[key] = $sce.trustAsHtml(newValue); + angular.isDefined(oldValue) && requestAnimationFrame(function () { + popover && popover.$applyPlacement(); }); }); - } - }; - } - ]); - // Source: src/popover/popover.js - angular.module('mgcrea.ngStrap.popover', ['mgcrea.ngStrap.tooltip']).provider('$popover', function () { - var defaults = this.defaults = { - animation: 'am-fade', - placement: 'right', - template: 'popover/popover.tpl.html', - contentTemplate: false, - trigger: 'click', - keyboard: true, - html: false, - title: '', - content: '', - delay: 0, - container: false - }; - this.$get = [ - '$tooltip', - function ($tooltip) { - function PopoverFactory(element, config) { - // Common vars - var options = angular.extend({}, defaults, config); - var $popover = $tooltip(element, options); - // Support scope as string options [/*title, */content] - if (options.content) { - $popover.$scope.content = options.content; + }); + // Support scope as an object + attr.bsPopover && scope.$watch(attr.bsPopover, function (newValue, oldValue) { + if (angular.isObject(newValue)) { + angular.extend(scope, newValue); + } else { + scope.content = newValue; } - return $popover; - } - return PopoverFactory; + angular.isDefined(oldValue) && requestAnimationFrame(function () { + popover && popover.$applyPlacement(); + }); + }, true); + // Initialize popover + var popover = $popover(element, options); + // Garbage collection + scope.$on('$destroy', function () { + popover.destroy(); + options = null; + popover = null; + }); } - ]; - }).directive('bsPopover', [ + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/select/select.js +angular.module('mgcrea.ngStrap.select', [ + 'mgcrea.ngStrap.tooltip', + 'mgcrea.ngStrap.helpers.parseOptions' +]).provider('$select', function () { + var defaults = this.defaults = { + animation: 'am-fade', + prefixClass: 'select', + placement: 'bottom-left', + template: 'select/select.tpl.html', + trigger: 'focus', + container: false, + keyboard: true, + html: false, + delay: 0, + multiple: false, + sort: true, + caretHtml: ' ', + placeholder: 'Choose among the following...', + maxLength: 3, + maxLengthHtml: 'selected' + }; + this.$get = [ '$window', - '$location', - '$sce', - '$popover', - function ($window, $location, $sce, $popover) { - var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; - return { - restrict: 'EAC', - scope: true, - link: function postLink(scope, element, attr) { - // Directive options - var options = { scope: scope }; - angular.forEach([ - 'template', - 'contentTemplate', - 'placement', - 'container', - 'delay', - 'trigger', - 'keyboard', - 'html', - 'animation' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; + '$document', + '$rootScope', + '$tooltip', + function ($window, $document, $rootScope, $tooltip) { + var bodyEl = angular.element($window.document.body); + var isTouch = 'createTouch' in $window.document; + function SelectFactory(element, controller, config) { + var $select = {}; + // Common vars + var options = angular.extend({}, defaults, config); + $select = $tooltip(element, options); + var parentScope = config.scope; + var scope = $select.$scope; + scope.$matches = []; + scope.$activeIndex = 0; + scope.$isMultiple = options.multiple; + scope.$activate = function (index) { + scope.$$postDigest(function () { + $select.activate(index); }); - // Support scope as data-attrs - angular.forEach([ - 'title', - 'content' - ], function (key) { - attr[key] && attr.$observe(key, function (newValue, oldValue) { - scope[key] = $sce.trustAsHtml(newValue); - angular.isDefined(oldValue) && requestAnimationFrame(function () { - popover && popover.$applyPlacement(); - }); - }); + }; + scope.$select = function (index, evt) { + scope.$$postDigest(function () { + $select.select(index); }); - // Support scope as an object - attr.bsPopover && scope.$watch(attr.bsPopover, function (newValue, oldValue) { - if (angular.isObject(newValue)) { - angular.extend(scope, newValue); + }; + scope.$isVisible = function () { + return $select.$isVisible(); + }; + scope.$isActive = function (index) { + return $select.$isActive(index); + }; + // Public methods + $select.update = function (matches) { + scope.$matches = matches; + $select.$updateActiveIndex(); + }; + $select.activate = function (index) { + if (options.multiple) { + scope.$activeIndex.sort(); + $select.$isActive(index) ? scope.$activeIndex.splice(scope.$activeIndex.indexOf(index), 1) : scope.$activeIndex.push(index); + if (options.sort) + scope.$activeIndex.sort(); + } else { + scope.$activeIndex = index; + } + return scope.$activeIndex; + }; + $select.select = function (index) { + var value = scope.$matches[index].value; + $select.activate(index); + if (options.multiple) { + controller.$setViewValue(scope.$activeIndex.map(function (index) { + return scope.$matches[index].value; + })); + } else { + controller.$setViewValue(value); + } + controller.$render(); + if (parentScope) + parentScope.$digest(); + // Hide if single select + if (!options.multiple) { + $select.hide(); + } + // Emit event + scope.$emit('$select.select', value, index); + }; + // Protected methods + $select.$updateActiveIndex = function () { + if (controller.$modelValue && scope.$matches.length) { + if (options.multiple && angular.isArray(controller.$modelValue)) { + scope.$activeIndex = controller.$modelValue.map(function (value) { + return $select.$getIndex(value); + }); } else { - scope.content = newValue; + scope.$activeIndex = $select.$getIndex(controller.$modelValue); + } + } else if (scope.$activeIndex >= scope.$matches.length) { + scope.$activeIndex = options.multiple ? [] : 0; + } + }; + $select.$isVisible = function () { + if (!options.minLength || !controller) { + return scope.$matches.length; + } + // minLength support + return scope.$matches.length && controller.$viewValue.length >= options.minLength; + }; + $select.$isActive = function (index) { + if (options.multiple) { + return scope.$activeIndex.indexOf(index) !== -1; + } else { + return scope.$activeIndex === index; + } + }; + $select.$getIndex = function (value) { + var l = scope.$matches.length, i = l; + if (!l) + return; + for (i = l; i--;) { + if (scope.$matches[i].value === value) + break; + } + if (i < 0) + return; + return i; + }; + $select.$onMouseDown = function (evt) { + // Prevent blur on mousedown on .dropdown-menu + evt.preventDefault(); + evt.stopPropagation(); + // Emulate click for mobile devices + if (isTouch) { + var targetEl = angular.element(evt.target); + targetEl.triggerHandler('click'); + } + }; + $select.$onKeyDown = function (evt) { + if (!/(9|13|38|40)/.test(evt.keyCode)) + return; + evt.preventDefault(); + evt.stopPropagation(); + // Select with enter + if (evt.keyCode === 13 || evt.keyCode === 9) { + return $select.select(scope.$activeIndex); + } + // Navigate with keyboard + if (evt.keyCode === 38 && scope.$activeIndex > 0) + scope.$activeIndex--; + else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) + scope.$activeIndex++; + else if (angular.isUndefined(scope.$activeIndex)) + scope.$activeIndex = 0; + scope.$digest(); + }; + // Overrides + var _show = $select.show; + $select.show = function () { + _show(); + if (options.multiple) { + $select.$element.addClass('select-multiple'); + } + setTimeout(function () { + $select.$element.on(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown); + if (options.keyboard) { + element.on('keydown', $select.$onKeyDown); } - angular.isDefined(oldValue) && requestAnimationFrame(function () { - popover && popover.$applyPlacement(); - }); - }, true); - // Initialize popover - var popover = $popover(element, options); - // Garbage collection - scope.$on('$destroy', function () { - popover.destroy(); - options = null; - popover = null; }); - } - }; + }; + var _hide = $select.hide; + $select.hide = function () { + $select.$element.off(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown); + if (options.keyboard) { + element.off('keydown', $select.$onKeyDown); + } + _hide(); + }; + return $select; + } + SelectFactory.defaults = defaults; + return SelectFactory; } - ]); - // Source: src/scrollspy/scrollspy.js - angular.module('mgcrea.ngStrap.scrollspy', [ - 'mgcrea.ngStrap.helpers.debounce', - 'mgcrea.ngStrap.helpers.dimensions' - ]).provider('$scrollspy', function () { - // Pool of registered spies - var spies = this.$$spies = {}; - var defaults = this.defaults = { - debounce: 150, - throttle: 100, - offset: 100 - }; - this.$get = [ - '$window', - '$document', - '$rootScope', - 'dimensions', - 'debounce', - 'throttle', - function ($window, $document, $rootScope, dimensions, debounce, throttle) { - var windowEl = angular.element($window); - var docEl = angular.element($document.prop('documentElement')); - var bodyEl = angular.element($window.document.body); - // Helper functions - function nodeName(element, name) { - return element[0].nodeName && element[0].nodeName.toLowerCase() === name.toLowerCase(); + ]; +}).directive('bsSelect', [ + '$window', + '$parse', + '$q', + '$select', + '$parseOptions', + function ($window, $parse, $q, $select, $parseOptions) { + var defaults = $select.defaults; + return { + restrict: 'EAC', + require: 'ngModel', + link: function postLink(scope, element, attr, controller) { + // Directive options + var options = { scope: scope }; + angular.forEach([ + 'placement', + 'container', + 'delay', + 'trigger', + 'keyboard', + 'html', + 'animation', + 'template', + 'placeholder', + 'multiple', + 'maxLength', + 'maxLengthHtml' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Add support for select markup + if (element[0].nodeName.toLowerCase() === 'select') { + var inputEl = element; + inputEl.css('display', 'none'); + element = angular.element(''); + inputEl.after(element); } - function ScrollSpyFactory(config) { - // Common vars - var options = angular.extend({}, defaults, config); - if (!options.element) - options.element = bodyEl; - var isWindowSpy = nodeName(options.element, 'body'); - var scrollEl = isWindowSpy ? windowEl : options.element; - var scrollId = isWindowSpy ? 'window' : options.id; - // Use existing spy - if (spies[scrollId]) { - spies[scrollId].$$count++; - return spies[scrollId]; - } - var $scrollspy = {}; - // Private vars - var unbindViewContentLoaded, unbindIncludeContentLoaded; - var trackedElements = $scrollspy.$trackedElements = []; - var sortedElements = []; - var activeTarget; - var debouncedCheckPosition; - var throttledCheckPosition; - var debouncedCheckOffsets; - var viewportHeight; - var scrollTop; - $scrollspy.init = function () { - // Setup internal ref counter - this.$$count = 1; - // Bind events - debouncedCheckPosition = debounce(this.checkPosition, options.debounce); - throttledCheckPosition = throttle(this.checkPosition, options.throttle); - scrollEl.on('click', this.checkPositionWithEventLoop); - windowEl.on('resize', debouncedCheckPosition); - scrollEl.on('scroll', throttledCheckPosition); - debouncedCheckOffsets = debounce(this.checkOffsets, options.debounce); - unbindViewContentLoaded = $rootScope.$on('$viewContentLoaded', debouncedCheckOffsets); - unbindIncludeContentLoaded = $rootScope.$on('$includeContentLoaded', debouncedCheckOffsets); - debouncedCheckOffsets(); - // Register spy for reuse - if (scrollId) { - spies[scrollId] = $scrollspy; - } - }; - $scrollspy.destroy = function () { - // Check internal ref counter - this.$$count--; - if (this.$$count > 0) { - return; - } - // Unbind events - scrollEl.off('click', this.checkPositionWithEventLoop); - windowEl.off('resize', debouncedCheckPosition); - scrollEl.off('scroll', debouncedCheckPosition); - unbindViewContentLoaded(); - unbindIncludeContentLoaded(); - }; - $scrollspy.checkPosition = function () { - // Not ready yet - if (!sortedElements.length) - return; - // Calculate the scroll position - scrollTop = (isWindowSpy ? $window.pageYOffset : scrollEl.prop('scrollTop')) || 0; - // Calculate the viewport height for use by the components - viewportHeight = Math.max($window.innerHeight, docEl.prop('clientHeight')); - // Activate first element if scroll is smaller - if (scrollTop < sortedElements[0].offsetTop && activeTarget !== sortedElements[0].target) { - return $scrollspy.$activateElement(sortedElements[0]); - } - // Activate proper element - for (var i = sortedElements.length; i--;) { - if (angular.isUndefined(sortedElements[i].offsetTop) || sortedElements[i].offsetTop === null) - continue; - if (activeTarget === sortedElements[i].target) - continue; - if (scrollTop < sortedElements[i].offsetTop) - continue; - if (sortedElements[i + 1] && scrollTop > sortedElements[i + 1].offsetTop) - continue; - return $scrollspy.$activateElement(sortedElements[i]); - } - }; - $scrollspy.checkPositionWithEventLoop = function () { - setTimeout(this.checkPosition, 1); - }; - // Protected methods - $scrollspy.$activateElement = function (element) { - if (activeTarget) { - var activeElement = $scrollspy.$getTrackedElement(activeTarget); - if (activeElement) { - activeElement.source.removeClass('active'); - if (nodeName(activeElement.source, 'li') && nodeName(activeElement.source.parent().parent(), 'li')) { - activeElement.source.parent().parent().removeClass('active'); - } - } - } - activeTarget = element.target; - element.source.addClass('active'); - if (nodeName(element.source, 'li') && nodeName(element.source.parent().parent(), 'li')) { - element.source.parent().parent().addClass('active'); - } - }; - $scrollspy.$getTrackedElement = function (target) { - return trackedElements.filter(function (obj) { - return obj.target === target; - })[0]; - }; - // Track offsets behavior - $scrollspy.checkOffsets = function () { - angular.forEach(trackedElements, function (trackedElement) { - var targetElement = document.querySelector(trackedElement.target); - trackedElement.offsetTop = targetElement ? dimensions.offset(targetElement).top : null; - if (options.offset && trackedElement.offsetTop !== null) - trackedElement.offsetTop -= options.offset * 1; - }); - sortedElements = trackedElements.filter(function (el) { - return el.offsetTop !== null; - }).sort(function (a, b) { - return a.offsetTop - b.offsetTop; - }); - debouncedCheckPosition(); - }; - $scrollspy.trackElement = function (target, source) { - trackedElements.push({ - target: target, - source: source - }); - }; - $scrollspy.untrackElement = function (target, source) { - var toDelete; - for (var i = trackedElements.length; i--;) { - if (trackedElements[i].target === target && trackedElements[i].source === source) { - toDelete = i; - break; - } + // Build proper ngOptions + var parsedOptions = $parseOptions(attr.ngOptions); + // Initialize select + var select = $select(element, controller, options); + // Watch ngOptions values before filtering for changes + var watchedOptions = parsedOptions.$match[7].replace(/\|.+/, '').trim(); + scope.$watch(watchedOptions, function (newValue, oldValue) { + // console.warn('scope.$watch(%s)', watchedOptions, newValue, oldValue); + parsedOptions.valuesFn(scope, controller).then(function (values) { + select.update(values); + controller.$render(); + }); + }, true); + // Watch model for changes + scope.$watch(attr.ngModel, function (newValue, oldValue) { + // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue); + select.$updateActiveIndex(); + }, true); + // Model rendering in view + controller.$render = function () { + // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); + var selected, index; + if (options.multiple && angular.isArray(controller.$modelValue)) { + selected = controller.$modelValue.map(function (value) { + index = select.$getIndex(value); + return angular.isDefined(index) ? select.$scope.$matches[index].label : false; + }).filter(angular.isDefined); + if (selected.length > (options.maxLength || defaults.maxLength)) { + selected = selected.length + ' ' + (options.maxLengthHtml || defaults.maxLengthHtml); + } else { + selected = selected.join(', '); } - trackedElements = trackedElements.splice(toDelete, 1); - }; - $scrollspy.activate = function (i) { - trackedElements[i].addClass('active'); - }; - // Initialize plugin - $scrollspy.init(); - return $scrollspy; - } - return ScrollSpyFactory; + } else { + index = select.$getIndex(controller.$modelValue); + selected = angular.isDefined(index) ? select.$scope.$matches[index].label : false; + } + element.html((selected ? selected : attr.placeholder || defaults.placeholder) + defaults.caretHtml); + }; + // Garbage collection + scope.$on('$destroy', function () { + select.destroy(); + options = null; + select = null; + }); } - ]; - }).directive('bsScrollspy', [ + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/scrollspy/scrollspy.js +angular.module('mgcrea.ngStrap.scrollspy', [ + 'mgcrea.ngStrap.helpers.debounce', + 'mgcrea.ngStrap.helpers.dimensions' +]).provider('$scrollspy', function () { + // Pool of registered spies + var spies = this.$$spies = {}; + var defaults = this.defaults = { + debounce: 150, + throttle: 100, + offset: 100 + }; + this.$get = [ + '$window', + '$document', '$rootScope', - 'debounce', 'dimensions', - '$scrollspy', - function ($rootScope, debounce, dimensions, $scrollspy) { - return { - restrict: 'EAC', - link: function postLink(scope, element, attr) { - var options = { scope: scope }; - angular.forEach([ - 'offset', - 'target' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - var scrollspy = $scrollspy(options); - scrollspy.trackElement(options.target, element); - scope.$on('$destroy', function () { - scrollspy.untrackElement(options.target, element); - scrollspy.destroy(); - options = null; - scrollspy = null; - }); - } - }; - } - ]).directive('bsScrollspyList', [ - '$rootScope', 'debounce', - 'dimensions', - '$scrollspy', - function ($rootScope, debounce, dimensions, $scrollspy) { - return { - restrict: 'A', - compile: function postLink(element, attr) { - var children = element[0].querySelectorAll('li > a[href]'); - angular.forEach(children, function (child) { - var childEl = angular.element(child); - childEl.parent().attr('bs-scrollspy', '').attr('data-target', childEl.attr('href')); - }); + 'throttle', + function ($window, $document, $rootScope, dimensions, debounce, throttle) { + var windowEl = angular.element($window); + var docEl = angular.element($document.prop('documentElement')); + var bodyEl = angular.element($window.document.body); + // Helper functions + function nodeName(element, name) { + return element[0].nodeName && element[0].nodeName.toLowerCase() === name.toLowerCase(); + } + function ScrollSpyFactory(config) { + // Common vars + var options = angular.extend({}, defaults, config); + if (!options.element) + options.element = bodyEl; + var isWindowSpy = nodeName(options.element, 'body'); + var scrollEl = isWindowSpy ? windowEl : options.element; + var scrollId = isWindowSpy ? 'window' : options.id; + // Use existing spy + if (spies[scrollId]) { + spies[scrollId].$$count++; + return spies[scrollId]; } - }; - } - ]); - // Source: src/select/select.js - angular.module('mgcrea.ngStrap.select', [ - 'mgcrea.ngStrap.tooltip', - 'mgcrea.ngStrap.helpers.parseOptions' - ]).provider('$select', function () { - var defaults = this.defaults = { - animation: 'am-fade', - prefixClass: 'select', - placement: 'bottom-left', - template: 'select/select.tpl.html', - trigger: 'focus', - container: false, - keyboard: true, - html: false, - delay: 0, - multiple: false, - sort: true, - caretHtml: ' ', - placeholder: 'Choose among the following...', - maxLength: 3, - maxLengthHtml: 'selected' - }; - this.$get = [ - '$window', - '$document', - '$rootScope', - '$tooltip', - function ($window, $document, $rootScope, $tooltip) { - var bodyEl = angular.element($window.document.body); - var isTouch = 'createTouch' in $window.document; - function SelectFactory(element, controller, config) { - var $select = {}; - // Common vars - var options = angular.extend({}, defaults, config); - $select = $tooltip(element, options); - var parentScope = config.scope; - var scope = $select.$scope; - scope.$matches = []; - scope.$activeIndex = 0; - scope.$isMultiple = options.multiple; - scope.$activate = function (index) { - scope.$$postDigest(function () { - $select.activate(index); - }); - }; - scope.$select = function (index, evt) { - scope.$$postDigest(function () { - $select.select(index); - }); - }; - scope.$isVisible = function () { - return $select.$isVisible(); - }; - scope.$isActive = function (index) { - return $select.$isActive(index); - }; - // Public methods - $select.update = function (matches) { - scope.$matches = matches; - $select.$updateActiveIndex(); - }; - $select.activate = function (index) { - if (options.multiple) { - scope.$activeIndex.sort(); - $select.$isActive(index) ? scope.$activeIndex.splice(scope.$activeIndex.indexOf(index), 1) : scope.$activeIndex.push(index); - if (options.sort) - scope.$activeIndex.sort(); - } else { - scope.$activeIndex = index; - } - return scope.$activeIndex; - }; - $select.select = function (index) { - var value = scope.$matches[index].value; - $select.activate(index); - if (options.multiple) { - controller.$setViewValue(scope.$activeIndex.map(function (index) { - return scope.$matches[index].value; - })); - } else { - controller.$setViewValue(value); - } - controller.$render(); - if (parentScope) - parentScope.$digest(); - // Hide if single select - if (!options.multiple) { - if (options.trigger === 'focus') - element[0].blur(); - else if ($select.$isShown) - $select.hide(); - } - // Emit event - scope.$emit('$select.select', value, index); - }; - // Protected methods - $select.$updateActiveIndex = function () { - if (controller.$modelValue && scope.$matches.length) { - if (options.multiple && angular.isArray(controller.$modelValue)) { - scope.$activeIndex = controller.$modelValue.map(function (value) { - return $select.$getIndex(value); - }); - } else { - scope.$activeIndex = $select.$getIndex(controller.$modelValue); - } - } else if (scope.$activeIndex >= scope.$matches.length) { - scope.$activeIndex = options.multiple ? [] : 0; - } - }; - $select.$isVisible = function () { - if (!options.minLength || !controller) { - return scope.$matches.length; - } - // minLength support - return scope.$matches.length && controller.$viewValue.length >= options.minLength; - }; - $select.$isActive = function (index) { - if (options.multiple) { - return scope.$activeIndex.indexOf(index) !== -1; - } else { - return scope.$activeIndex === index; - } - }; - $select.$getIndex = function (value) { - var l = scope.$matches.length, i = l; - if (!l) - return; - for (i = l; i--;) { - if (scope.$matches[i].value === value) - break; - } - if (i < 0) - return; - return i; - }; - $select.$onMouseDown = function (evt) { - // Prevent blur on mousedown on .dropdown-menu - evt.preventDefault(); - evt.stopPropagation(); - // Emulate click for mobile devices - if (isTouch) { - var targetEl = angular.element(evt.target); - targetEl.triggerHandler('click'); - } - }; - $select.$onKeyDown = function (evt) { - if (!/(38|40|13)/.test(evt.keyCode)) - return; - evt.preventDefault(); - evt.stopPropagation(); - // Select with enter - if (evt.keyCode === 13) { - return $select.select(scope.$activeIndex); - } - // Navigate with keyboard - if (evt.keyCode === 38 && scope.$activeIndex > 0) - scope.$activeIndex--; - else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) - scope.$activeIndex++; - else if (angular.isUndefined(scope.$activeIndex)) - scope.$activeIndex = 0; - scope.$digest(); - }; - // Overrides - var _show = $select.show; - $select.show = function () { - _show(); - if (options.multiple) { - $select.$element.addClass('select-multiple'); - } - setTimeout(function () { - $select.$element.on(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown); - if (options.keyboard) { - element.on('keydown', $select.$onKeyDown); + var $scrollspy = {}; + // Private vars + var unbindViewContentLoaded, unbindIncludeContentLoaded; + var trackedElements = $scrollspy.$trackedElements = []; + var sortedElements = []; + var activeTarget; + var debouncedCheckPosition; + var throttledCheckPosition; + var debouncedCheckOffsets; + var viewportHeight; + var scrollTop; + $scrollspy.init = function () { + // Setup internal ref counter + this.$$count = 1; + // Bind events + debouncedCheckPosition = debounce(this.checkPosition, options.debounce); + throttledCheckPosition = throttle(this.checkPosition, options.throttle); + scrollEl.on('click', this.checkPositionWithEventLoop); + windowEl.on('resize', debouncedCheckPosition); + scrollEl.on('scroll', throttledCheckPosition); + debouncedCheckOffsets = debounce(this.checkOffsets, options.debounce); + unbindViewContentLoaded = $rootScope.$on('$viewContentLoaded', debouncedCheckOffsets); + unbindIncludeContentLoaded = $rootScope.$on('$includeContentLoaded', debouncedCheckOffsets); + debouncedCheckOffsets(); + // Register spy for reuse + if (scrollId) { + spies[scrollId] = $scrollspy; + } + }; + $scrollspy.destroy = function () { + // Check internal ref counter + this.$$count--; + if (this.$$count > 0) { + return; + } + // Unbind events + scrollEl.off('click', this.checkPositionWithEventLoop); + windowEl.off('resize', debouncedCheckPosition); + scrollEl.off('scroll', debouncedCheckPosition); + unbindViewContentLoaded(); + unbindIncludeContentLoaded(); + if (scrollId) { + delete spies[scrollId]; + } + }; + $scrollspy.checkPosition = function () { + // Not ready yet + if (!sortedElements.length) + return; + // Calculate the scroll position + scrollTop = (isWindowSpy ? $window.pageYOffset : scrollEl.prop('scrollTop')) || 0; + // Calculate the viewport height for use by the components + viewportHeight = Math.max($window.innerHeight, docEl.prop('clientHeight')); + // Activate first element if scroll is smaller + if (scrollTop < sortedElements[0].offsetTop && activeTarget !== sortedElements[0].target) { + return $scrollspy.$activateElement(sortedElements[0]); + } + // Activate proper element + for (var i = sortedElements.length; i--;) { + if (angular.isUndefined(sortedElements[i].offsetTop) || sortedElements[i].offsetTop === null) + continue; + if (activeTarget === sortedElements[i].target) + continue; + if (scrollTop < sortedElements[i].offsetTop) + continue; + if (sortedElements[i + 1] && scrollTop > sortedElements[i + 1].offsetTop) + continue; + return $scrollspy.$activateElement(sortedElements[i]); + } + }; + $scrollspy.checkPositionWithEventLoop = function () { + setTimeout(this.checkPosition, 1); + }; + // Protected methods + $scrollspy.$activateElement = function (element) { + if (activeTarget) { + var activeElement = $scrollspy.$getTrackedElement(activeTarget); + if (activeElement) { + activeElement.source.removeClass('active'); + if (nodeName(activeElement.source, 'li') && nodeName(activeElement.source.parent().parent(), 'li')) { + activeElement.source.parent().parent().removeClass('active'); } - }); - }; - var _hide = $select.hide; - $select.hide = function () { - $select.$element.off(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown); - if (options.keyboard) { - element.off('keydown', $select.$onKeyDown); } - _hide(); - }; - return $select; - } - SelectFactory.defaults = defaults; - return SelectFactory; - } - ]; - }).directive('bsSelect', [ - '$window', - '$parse', - '$q', - '$select', - '$parseOptions', - function ($window, $parse, $q, $select, $parseOptions) { - var defaults = $select.defaults; - return { - restrict: 'EAC', - require: 'ngModel', - link: function postLink(scope, element, attr, controller) { - // Directive options - var options = { scope: scope }; - angular.forEach([ - 'placement', - 'container', - 'delay', - 'trigger', - 'keyboard', - 'html', - 'animation', - 'template', - 'placeholder', - 'multiple', - 'maxLength', - 'maxLengthHtml' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; + } + activeTarget = element.target; + element.source.addClass('active'); + if (nodeName(element.source, 'li') && nodeName(element.source.parent().parent(), 'li')) { + element.source.parent().parent().addClass('active'); + } + }; + $scrollspy.$getTrackedElement = function (target) { + return trackedElements.filter(function (obj) { + return obj.target === target; + })[0]; + }; + // Track offsets behavior + $scrollspy.checkOffsets = function () { + angular.forEach(trackedElements, function (trackedElement) { + var targetElement = document.querySelector(trackedElement.target); + trackedElement.offsetTop = targetElement ? dimensions.offset(targetElement).top : null; + if (options.offset && trackedElement.offsetTop !== null) + trackedElement.offsetTop -= options.offset * 1; }); - // Add support for select markup - if (element[0].nodeName.toLowerCase() === 'select') { - var inputEl = element; - inputEl.css('display', 'none'); - element = angular.element(''); - inputEl.after(element); - } - // Build proper ngOptions - var parsedOptions = $parseOptions(attr.ngOptions); - // Initialize select - var select = $select(element, controller, options); - // Watch ngOptions values before filtering for changes - var watchedOptions = parsedOptions.$match[7].replace(/\|.+/, '').trim(); - scope.$watch(watchedOptions, function (newValue, oldValue) { - // console.warn('scope.$watch(%s)', watchedOptions, newValue, oldValue); - parsedOptions.valuesFn(scope, controller).then(function (values) { - select.update(values); - controller.$render(); - }); - }, true); - // Watch model for changes - scope.$watch(attr.ngModel, function (newValue, oldValue) { - // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue); - select.$updateActiveIndex(); - }, true); - // Model rendering in view - controller.$render = function () { - // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); - var selected, index; - if (options.multiple && angular.isArray(controller.$modelValue)) { - selected = controller.$modelValue.map(function (value) { - index = select.$getIndex(value); - return angular.isDefined(index) ? select.$scope.$matches[index].label : false; - }).filter(angular.isDefined); - if (selected.length > (options.maxLength || defaults.maxLength)) { - selected = selected.length + ' ' + (options.maxLengthHtml || defaults.maxLengthHtml); - } else { - selected = selected.join(', '); - } - } else { - index = select.$getIndex(controller.$modelValue); - selected = angular.isDefined(index) ? select.$scope.$matches[index].label : false; - } - element.html((selected ? selected : attr.placeholder || defaults.placeholder) + defaults.caretHtml); - }; - // Garbage collection - scope.$on('$destroy', function () { - select.destroy(); - options = null; - select = null; + sortedElements = trackedElements.filter(function (el) { + return el.offsetTop !== null; + }).sort(function (a, b) { + return a.offsetTop - b.offsetTop; }); - } - }; - } - ]); - // Source: src/tab/tab.js - angular.module('mgcrea.ngStrap.tab', []).run([ - '$templateCache', - function ($templateCache) { - $templateCache.put('$pane', '{{pane.content}}'); - } - ]).provider('$tab', function () { - var defaults = this.defaults = { - animation: 'am-fade', - template: 'tab/tab.tpl.html' - }; - this.$get = function () { - return { defaults: defaults }; - }; - }).directive('bsTabs', [ - '$window', - '$animate', - '$tab', - function ($window, $animate, $tab) { - var defaults = $tab.defaults; - return { - restrict: 'EAC', - scope: true, - require: '?ngModel', - templateUrl: function (element, attr) { - return attr.template || defaults.template; - }, - link: function postLink(scope, element, attr, controller) { - // Directive options - var options = defaults; - angular.forEach(['animation'], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; + debouncedCheckPosition(); + }; + $scrollspy.trackElement = function (target, source) { + trackedElements.push({ + target: target, + source: source }); - // Require scope as an object - attr.bsTabs && scope.$watch(attr.bsTabs, function (newValue, oldValue) { - scope.panes = newValue; - }, true); - // Add base class - element.addClass('tabs'); - // Support animations - if (options.animation) { - element.addClass(options.animation); - } - scope.active = scope.activePane = 0; - // view -> model - scope.setActive = function (index, ev) { - scope.active = index; - if (controller) { - controller.$setViewValue(index); + }; + $scrollspy.untrackElement = function (target, source) { + var toDelete; + for (var i = trackedElements.length; i--;) { + if (trackedElements[i].target === target && trackedElements[i].source === source) { + toDelete = i; + break; } - }; - // model -> view - if (controller) { - controller.$render = function () { - scope.active = controller.$modelValue * 1; - }; } - } - }; + trackedElements = trackedElements.splice(toDelete, 1); + }; + $scrollspy.activate = function (i) { + trackedElements[i].addClass('active'); + }; + // Initialize plugin + $scrollspy.init(); + return $scrollspy; + } + return ScrollSpyFactory; } - ]); - // Source: src/timepicker/timepicker.js - angular.module('mgcrea.ngStrap.timepicker', [ - 'mgcrea.ngStrap.helpers.dateParser', - 'mgcrea.ngStrap.tooltip' - ]).provider('$timepicker', function () { - var defaults = this.defaults = { - animation: 'am-fade', - prefixClass: 'timepicker', - placement: 'bottom-left', - template: 'timepicker/timepicker.tpl.html', - trigger: 'focus', - container: false, - keyboard: true, - html: false, - delay: 0, - useNative: true, - timeType: 'date', - timeFormat: 'shortTime', - autoclose: false, - minTime: -Infinity, - maxTime: +Infinity, - length: 5, - hourStep: 1, - minuteStep: 5 - }; - this.$get = [ - '$window', - '$document', - '$rootScope', - '$sce', - '$locale', - 'dateFilter', - '$tooltip', - function ($window, $document, $rootScope, $sce, $locale, dateFilter, $tooltip) { - var bodyEl = angular.element($window.document.body); - var isTouch = 'createTouch' in $window.document; - var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); - if (!defaults.lang) - defaults.lang = $locale.id; - function timepickerFactory(element, controller, config) { - var $timepicker = $tooltip(element, angular.extend({}, defaults, config)); - var parentScope = config.scope; - var options = $timepicker.$options; - var scope = $timepicker.$scope; - // View vars - var selectedIndex = 0; - var startDate = controller.$dateValue || new Date(); - var viewDate = { - hour: startDate.getHours(), - meridian: startDate.getHours() < 12, - minute: startDate.getMinutes(), - second: startDate.getSeconds(), - millisecond: startDate.getMilliseconds() - }; - var format = $locale.DATETIME_FORMATS[options.timeFormat] || options.timeFormat; - var formats = /(h+)[:]?(m+)[ ]?(a?)/i.exec(format).slice(1); - // Scope methods - scope.$select = function (date, index) { - $timepicker.select(date, index); - }; - scope.$moveIndex = function (value, index) { - $timepicker.$moveIndex(value, index); - }; - scope.$switchMeridian = function (date) { - $timepicker.switchMeridian(date); - }; - // Public methods - $timepicker.update = function (date) { - // console.warn('$timepicker.update() newValue=%o', date); - if (angular.isDate(date) && !isNaN(date.getTime())) { - $timepicker.$date = date; - angular.extend(viewDate, { - hour: date.getHours(), - minute: date.getMinutes(), - second: date.getSeconds(), - millisecond: date.getMilliseconds() - }); - $timepicker.$build(); - } else if (!$timepicker.$isBuilt) { - $timepicker.$build(); - } - }; - $timepicker.select = function (date, index, keep) { - // console.warn('$timepicker.select', date, scope.$mode); - if (isNaN(controller.$dateValue.getTime())) - controller.$dateValue = new Date(1970, 0, 1); - if (!angular.isDate(date)) - date = new Date(date); - if (index === 0) - controller.$dateValue.setHours(date.getHours()); - else if (index === 1) - controller.$dateValue.setMinutes(date.getMinutes()); - controller.$setViewValue(controller.$dateValue); - controller.$render(); - if (options.autoclose && !keep) { - $timepicker.hide(true); - } - }; - $timepicker.switchMeridian = function (date) { - var hours = (date || controller.$dateValue).getHours(); - controller.$dateValue.setHours(hours < 12 ? hours + 12 : hours - 12); - controller.$render(); - }; - // Protected methods - $timepicker.$build = function () { - // console.warn('$timepicker.$build() viewDate=%o', viewDate); - var i, midIndex = scope.midIndex = parseInt(options.length / 2, 10); - var hours = [], hour; - for (i = 0; i < options.length; i++) { - hour = new Date(1970, 0, 1, viewDate.hour - (midIndex - i) * options.hourStep); - hours.push({ - date: hour, - label: dateFilter(hour, formats[0]), - selected: $timepicker.$date && $timepicker.$isSelected(hour, 0), - disabled: $timepicker.$isDisabled(hour, 0) - }); - } - var minutes = [], minute; - for (i = 0; i < options.length; i++) { - minute = new Date(1970, 0, 1, 0, viewDate.minute - (midIndex - i) * options.minuteStep); - minutes.push({ - date: minute, - label: dateFilter(minute, formats[1]), - selected: $timepicker.$date && $timepicker.$isSelected(minute, 1), - disabled: $timepicker.$isDisabled(minute, 1) - }); - } - var rows = []; - for (i = 0; i < options.length; i++) { - rows.push([ - hours[i], - minutes[i] - ]); - } - scope.rows = rows; - scope.showAM = !!formats[2]; - scope.isAM = ($timepicker.$date || hours[midIndex].date).getHours() < 12; - $timepicker.$isBuilt = true; - }; - $timepicker.$isSelected = function (date, index) { - if (!$timepicker.$date) - return false; - else if (index === 0) { - return date.getHours() === $timepicker.$date.getHours(); - } else if (index === 1) { - return date.getMinutes() === $timepicker.$date.getMinutes(); - } - }; - $timepicker.$isDisabled = function (date, index) { - var selectedTime; - if (index === 0) { - selectedTime = date.getTime() + viewDate.minute * 60000; - } else if (index === 1) { - selectedTime = date.getTime() + viewDate.hour * 3600000; - } - return selectedTime < options.minTime || selectedTime > options.maxTime; + ]; +}).directive('bsScrollspy', [ + '$rootScope', + 'debounce', + 'dimensions', + '$scrollspy', + function ($rootScope, debounce, dimensions, $scrollspy) { + return { + restrict: 'EAC', + link: function postLink(scope, element, attr) { + var options = { scope: scope }; + angular.forEach([ + 'offset', + 'target' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + var scrollspy = $scrollspy(options); + scrollspy.trackElement(options.target, element); + scope.$on('$destroy', function () { + scrollspy.untrackElement(options.target, element); + scrollspy.destroy(); + options = null; + scrollspy = null; + }); + } + }; + } +]).directive('bsScrollspyList', [ + '$rootScope', + 'debounce', + 'dimensions', + '$scrollspy', + function ($rootScope, debounce, dimensions, $scrollspy) { + return { + restrict: 'A', + compile: function postLink(element, attr) { + var children = element[0].querySelectorAll('li > a[href]'); + angular.forEach(children, function (child) { + var childEl = angular.element(child); + childEl.parent().attr('bs-scrollspy', '').attr('data-target', childEl.attr('href')); + }); + } + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/tab/tab.js +angular.module('mgcrea.ngStrap.tab', []).run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('$pane', '{{pane.content}}'); + } +]).provider('$tab', function () { + var defaults = this.defaults = { + animation: 'am-fade', + template: 'tab/tab.tpl.html' + }; + this.$get = function () { + return { defaults: defaults }; + }; +}).directive('bsTabs', [ + '$window', + '$animate', + '$tab', + function ($window, $animate, $tab) { + var defaults = $tab.defaults; + return { + restrict: 'EAC', + scope: true, + require: '?ngModel', + templateUrl: function (element, attr) { + return attr.template || defaults.template; + }, + link: function postLink(scope, element, attr, controller) { + // Directive options + var options = defaults; + angular.forEach(['animation'], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Require scope as an object + attr.bsTabs && scope.$watch(attr.bsTabs, function (newValue, oldValue) { + scope.panes = newValue; + }, true); + // Add base class + element.addClass('tabs'); + // Support animations + if (options.animation) { + element.addClass(options.animation); + } + scope.active = scope.activePane = 0; + // view -> model + scope.setActive = function (index, ev) { + scope.active = index; + if (controller) { + controller.$setViewValue(index); + } + }; + // model -> view + if (controller) { + controller.$render = function () { + scope.active = controller.$modelValue * 1; }; - $timepicker.$moveIndex = function (value, index) { - var targetDate; - if (index === 0) { - targetDate = new Date(1970, 0, 1, viewDate.hour + value * options.length, viewDate.minute); - angular.extend(viewDate, { hour: targetDate.getHours() }); - } else if (index === 1) { - targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute + value * options.length * 5); - angular.extend(viewDate, { minute: targetDate.getMinutes() }); - } + } + } + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/timepicker/timepicker.js +angular.module('mgcrea.ngStrap.timepicker', [ + 'mgcrea.ngStrap.helpers.dateParser', + 'mgcrea.ngStrap.tooltip' +]).provider('$timepicker', function () { + var defaults = this.defaults = { + animation: 'am-fade', + prefixClass: 'timepicker', + placement: 'bottom-left', + template: 'timepicker/timepicker.tpl.html', + trigger: 'focus', + container: false, + keyboard: true, + html: false, + delay: 0, + useNative: true, + timeType: 'date', + timeFormat: 'shortTime', + autoclose: false, + minTime: -Infinity, + maxTime: +Infinity, + length: 5, + hourStep: 1, + minuteStep: 5 + }; + this.$get = [ + '$window', + '$document', + '$rootScope', + '$sce', + '$locale', + 'dateFilter', + '$tooltip', + function ($window, $document, $rootScope, $sce, $locale, dateFilter, $tooltip) { + var bodyEl = angular.element($window.document.body); + var isTouch = 'createTouch' in $window.document; + var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); + if (!defaults.lang) + defaults.lang = $locale.id; + function timepickerFactory(element, controller, config) { + var $timepicker = $tooltip(element, angular.extend({}, defaults, config)); + var parentScope = config.scope; + var options = $timepicker.$options; + var scope = $timepicker.$scope; + // View vars + var selectedIndex = 0; + var startDate = controller.$dateValue || new Date(); + var viewDate = { + hour: startDate.getHours(), + meridian: startDate.getHours() < 12, + minute: startDate.getMinutes(), + second: startDate.getSeconds(), + millisecond: startDate.getMilliseconds() + }; + var format = $locale.DATETIME_FORMATS[options.timeFormat] || options.timeFormat; + var formats = /(h+)[:]?(m+)[ ]?(a?)/i.exec(format).slice(1); + // Scope methods + scope.$select = function (date, index) { + $timepicker.select(date, index); + }; + scope.$moveIndex = function (value, index) { + $timepicker.$moveIndex(value, index); + }; + scope.$switchMeridian = function (date) { + $timepicker.switchMeridian(date); + }; + // Public methods + $timepicker.update = function (date) { + // console.warn('$timepicker.update() newValue=%o', date); + if (angular.isDate(date) && !isNaN(date.getTime())) { + $timepicker.$date = date; + angular.extend(viewDate, { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds(), + millisecond: date.getMilliseconds() + }); + $timepicker.$build(); + } else if (!$timepicker.$isBuilt) { $timepicker.$build(); - }; - $timepicker.$onMouseDown = function (evt) { - // Prevent blur on mousedown on .dropdown-menu - if (evt.target.nodeName.toLowerCase() !== 'input') - evt.preventDefault(); - evt.stopPropagation(); - // Emulate click for mobile devices - if (isTouch) { - var targetEl = angular.element(evt.target); - if (targetEl[0].nodeName.toLowerCase() !== 'button') { - targetEl = targetEl.parent(); - } - targetEl.triggerHandler('click'); - } - }; - $timepicker.$onKeyDown = function (evt) { - if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) - return; - evt.preventDefault(); - evt.stopPropagation(); - // Close on enter - if (evt.keyCode === 13) - return $timepicker.hide(true); - // Navigate with keyboard - var newDate = new Date($timepicker.$date); - var hours = newDate.getHours(), hoursLength = dateFilter(newDate, 'h').length; - var minutes = newDate.getMinutes(), minutesLength = dateFilter(newDate, 'mm').length; - var lateralMove = /(37|39)/.test(evt.keyCode); - var count = 2 + !!formats[2] * 1; - // Navigate indexes (left, right) - if (lateralMove) { - if (evt.keyCode === 37) - selectedIndex = selectedIndex < 1 ? count - 1 : selectedIndex - 1; - else if (evt.keyCode === 39) - selectedIndex = selectedIndex < count - 1 ? selectedIndex + 1 : 0; - } - // Update values (up, down) - if (selectedIndex === 0) { - if (lateralMove) - return createSelection(0, hoursLength); - if (evt.keyCode === 38) - newDate.setHours(hours - options.hourStep); - else if (evt.keyCode === 40) - newDate.setHours(hours + options.hourStep); - } else if (selectedIndex === 1) { - if (lateralMove) - return createSelection(hoursLength + 1, hoursLength + 1 + minutesLength); - if (evt.keyCode === 38) - newDate.setMinutes(minutes - options.minuteStep); - else if (evt.keyCode === 40) - newDate.setMinutes(minutes + options.minuteStep); - } else if (selectedIndex === 2) { - if (lateralMove) - return createSelection(hoursLength + 1 + minutesLength + 1, hoursLength + 1 + minutesLength + 3); - $timepicker.switchMeridian(); - } - $timepicker.select(newDate, selectedIndex, true); - parentScope.$digest(); - }; - // Private - function createSelection(start, end) { - if (element[0].createTextRange) { - var selRange = element[0].createTextRange(); - selRange.collapse(true); - selRange.moveStart('character', start); - selRange.moveEnd('character', end); - selRange.select(); - } else if (element[0].setSelectionRange) { - element[0].setSelectionRange(start, end); - } else if (angular.isUndefined(element[0].selectionStart)) { - element[0].selectionStart = start; - element[0].selectionEnd = end; - } } - function focusElement() { - element[0].focus(); - } - // Overrides - var _init = $timepicker.init; - $timepicker.init = function () { - if (isNative && options.useNative) { - element.prop('type', 'time'); - element.css('-webkit-appearance', 'textfield'); - return; - } else if (isTouch) { - element.prop('type', 'text'); - element.attr('readonly', 'true'); - element.on('click', focusElement); - } - _init(); - }; - var _destroy = $timepicker.destroy; - $timepicker.destroy = function () { - if (isNative && options.useNative) { - element.off('click', focusElement); - } - _destroy(); - }; - var _show = $timepicker.show; - $timepicker.show = function () { - _show(); - setTimeout(function () { - $timepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown); - if (options.keyboard) { - element.on('keydown', $timepicker.$onKeyDown); - } + }; + $timepicker.select = function (date, index, keep) { + // console.warn('$timepicker.select', date, scope.$mode); + if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) + controller.$dateValue = new Date(1970, 0, 1); + if (!angular.isDate(date)) + date = new Date(date); + if (index === 0) + controller.$dateValue.setHours(date.getHours()); + else if (index === 1) + controller.$dateValue.setMinutes(date.getMinutes()); + controller.$setViewValue(controller.$dateValue); + controller.$render(); + if (options.autoclose && !keep) { + $timepicker.hide(true); + } + }; + $timepicker.switchMeridian = function (date) { + var hours = (date || controller.$dateValue).getHours(); + controller.$dateValue.setHours(hours < 12 ? hours + 12 : hours - 12); + controller.$render(); + }; + // Protected methods + $timepicker.$build = function () { + // console.warn('$timepicker.$build() viewDate=%o', viewDate); + var i, midIndex = scope.midIndex = parseInt(options.length / 2, 10); + var hours = [], hour; + for (i = 0; i < options.length; i++) { + hour = new Date(1970, 0, 1, viewDate.hour - (midIndex - i) * options.hourStep); + hours.push({ + date: hour, + label: dateFilter(hour, formats[0]), + selected: $timepicker.$date && $timepicker.$isSelected(hour, 0), + disabled: $timepicker.$isDisabled(hour, 0) }); - }; - var _hide = $timepicker.hide; - $timepicker.hide = function (blur) { - $timepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown); + } + var minutes = [], minute; + for (i = 0; i < options.length; i++) { + minute = new Date(1970, 0, 1, 0, viewDate.minute - (midIndex - i) * options.minuteStep); + minutes.push({ + date: minute, + label: dateFilter(minute, formats[1]), + selected: $timepicker.$date && $timepicker.$isSelected(minute, 1), + disabled: $timepicker.$isDisabled(minute, 1) + }); + } + var rows = []; + for (i = 0; i < options.length; i++) { + rows.push([ + hours[i], + minutes[i] + ]); + } + scope.rows = rows; + scope.showAM = !!formats[2]; + scope.isAM = ($timepicker.$date || hours[midIndex].date).getHours() < 12; + $timepicker.$isBuilt = true; + }; + $timepicker.$isSelected = function (date, index) { + if (!$timepicker.$date) + return false; + else if (index === 0) { + return date.getHours() === $timepicker.$date.getHours(); + } else if (index === 1) { + return date.getMinutes() === $timepicker.$date.getMinutes(); + } + }; + $timepicker.$isDisabled = function (date, index) { + var selectedTime; + if (index === 0) { + selectedTime = date.getTime() + viewDate.minute * 60000; + } else if (index === 1) { + selectedTime = date.getTime() + viewDate.hour * 3600000; + } + return selectedTime < options.minTime || selectedTime > options.maxTime; + }; + $timepicker.$moveIndex = function (value, index) { + var targetDate; + if (index === 0) { + targetDate = new Date(1970, 0, 1, viewDate.hour + value * options.length, viewDate.minute); + angular.extend(viewDate, { hour: targetDate.getHours() }); + } else if (index === 1) { + targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute + value * options.length * options.minuteStep); + angular.extend(viewDate, { minute: targetDate.getMinutes() }); + } + $timepicker.$build(); + }; + $timepicker.$onMouseDown = function (evt) { + // Prevent blur on mousedown on .dropdown-menu + if (evt.target.nodeName.toLowerCase() !== 'input') + evt.preventDefault(); + evt.stopPropagation(); + // Emulate click for mobile devices + if (isTouch) { + var targetEl = angular.element(evt.target); + if (targetEl[0].nodeName.toLowerCase() !== 'button') { + targetEl = targetEl.parent(); + } + targetEl.triggerHandler('click'); + } + }; + $timepicker.$onKeyDown = function (evt) { + if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) + return; + evt.preventDefault(); + evt.stopPropagation(); + // Close on enter + if (evt.keyCode === 13) + return $timepicker.hide(true); + // Navigate with keyboard + var newDate = new Date($timepicker.$date); + var hours = newDate.getHours(), hoursLength = dateFilter(newDate, 'h').length; + var minutes = newDate.getMinutes(), minutesLength = dateFilter(newDate, 'mm').length; + var lateralMove = /(37|39)/.test(evt.keyCode); + var count = 2 + !!formats[2] * 1; + // Navigate indexes (left, right) + if (lateralMove) { + if (evt.keyCode === 37) + selectedIndex = selectedIndex < 1 ? count - 1 : selectedIndex - 1; + else if (evt.keyCode === 39) + selectedIndex = selectedIndex < count - 1 ? selectedIndex + 1 : 0; + } + // Update values (up, down) + if (selectedIndex === 0) { + if (lateralMove) + return createSelection(0, hoursLength); + if (evt.keyCode === 38) + newDate.setHours(hours - options.hourStep); + else if (evt.keyCode === 40) + newDate.setHours(hours + options.hourStep); + } else if (selectedIndex === 1) { + if (lateralMove) + return createSelection(hoursLength + 1, hoursLength + 1 + minutesLength); + if (evt.keyCode === 38) + newDate.setMinutes(minutes - options.minuteStep); + else if (evt.keyCode === 40) + newDate.setMinutes(minutes + options.minuteStep); + } else if (selectedIndex === 2) { + if (lateralMove) + return createSelection(hoursLength + 1 + minutesLength + 1, hoursLength + 1 + minutesLength + 3); + $timepicker.switchMeridian(); + } + $timepicker.select(newDate, selectedIndex, true); + parentScope.$digest(); + }; + // Private + function createSelection(start, end) { + if (element[0].createTextRange) { + var selRange = element[0].createTextRange(); + selRange.collapse(true); + selRange.moveStart('character', start); + selRange.moveEnd('character', end); + selRange.select(); + } else if (element[0].setSelectionRange) { + element[0].setSelectionRange(start, end); + } else if (angular.isUndefined(element[0].selectionStart)) { + element[0].selectionStart = start; + element[0].selectionEnd = end; + } + } + function focusElement() { + element[0].focus(); + } + // Overrides + var _init = $timepicker.init; + $timepicker.init = function () { + if (isNative && options.useNative) { + element.prop('type', 'time'); + element.css('-webkit-appearance', 'textfield'); + return; + } else if (isTouch) { + element.prop('type', 'text'); + element.attr('readonly', 'true'); + element.on('click', focusElement); + } + _init(); + }; + var _destroy = $timepicker.destroy; + $timepicker.destroy = function () { + if (isNative && options.useNative) { + element.off('click', focusElement); + } + _destroy(); + }; + var _show = $timepicker.show; + $timepicker.show = function () { + _show(); + setTimeout(function () { + $timepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown); if (options.keyboard) { - element.off('keydown', $timepicker.$onKeyDown); + element.on('keydown', $timepicker.$onKeyDown); } - _hide(blur); - }; - return $timepicker; - } - timepickerFactory.defaults = defaults; - return timepickerFactory; + }); + }; + var _hide = $timepicker.hide; + $timepicker.hide = function (blur) { + $timepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown); + if (options.keyboard) { + element.off('keydown', $timepicker.$onKeyDown); + } + _hide(blur); + }; + return $timepicker; + } + timepickerFactory.defaults = defaults; + return timepickerFactory; + } + ]; +}).directive('bsTimepicker', [ + '$window', + '$parse', + '$q', + '$locale', + 'dateFilter', + '$timepicker', + '$dateParser', + '$timeout', + function ($window, $parse, $q, $locale, dateFilter, $timepicker, $dateParser, $timeout) { + var defaults = $timepicker.defaults; + var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); + var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; + return { + restrict: 'EAC', + require: 'ngModel', + link: function postLink(scope, element, attr, controller) { + // Directive options + var options = { + scope: scope, + controller: controller + }; + angular.forEach([ + 'placement', + 'container', + 'delay', + 'trigger', + 'keyboard', + 'html', + 'animation', + 'template', + 'autoclose', + 'timeType', + 'timeFormat', + 'useNative', + 'hourStep', + 'minuteStep' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Initialize timepicker + if (isNative && (options.useNative || defaults.useNative)) + options.timeFormat = 'HH:mm'; + var timepicker = $timepicker(element, controller, options); + options = timepicker.$options; + // Initialize parser + var dateParser = $dateParser({ + format: options.timeFormat, + lang: options.lang + }); + // Observe attributes for changes + angular.forEach([ + 'minTime', + 'maxTime' + ], function (key) { + // console.warn('attr.$observe(%s)', key, attr[key]); + angular.isDefined(attr[key]) && attr.$observe(key, function (newValue) { + if (newValue === 'now') { + timepicker.$options[key] = new Date().setFullYear(1970, 0, 1); + } else if (angular.isString(newValue) && newValue.match(/^".+"$/)) { + timepicker.$options[key] = +new Date(newValue.substr(1, newValue.length - 2)); + } else { + timepicker.$options[key] = dateParser.parse(newValue); + } + !isNaN(timepicker.$options[key]) && timepicker.$build(); + }); + }); + // Watch model for changes + scope.$watch(attr.ngModel, function (newValue, oldValue) { + // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue, controller.$dateValue); + timepicker.update(controller.$dateValue); + }, true); + // viewValue -> $parsers -> modelValue + controller.$parsers.unshift(function (viewValue) { + // console.warn('$parser("%s"): viewValue=%o', element.attr('ng-model'), viewValue); + // Null values should correctly reset the model value & validity + if (!viewValue) { + controller.$setValidity('date', true); + return; + } + var parsedTime = dateParser.parse(viewValue, controller.$dateValue); + if (!parsedTime || isNaN(parsedTime.getTime())) { + controller.$setValidity('date', false); + } else { + var isValid = parsedTime.getTime() >= options.minTime && parsedTime.getTime() <= options.maxTime; + controller.$setValidity('date', isValid); + // Only update the model when we have a valid date + if (isValid) + controller.$dateValue = parsedTime; + } + if (options.timeType === 'string') { + return dateFilter(viewValue, options.timeFormat); + } else if (options.timeType === 'number') { + return controller.$dateValue.getTime(); + } else if (options.timeType === 'iso') { + return controller.$dateValue.toISOString(); + } else { + return new Date(controller.$dateValue); + } + }); + // modelValue -> $formatters -> viewValue + controller.$formatters.push(function (modelValue) { + // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue); + var date; + if (angular.isUndefined(modelValue) || modelValue === null) { + date = NaN; + } else if (angular.isDate(modelValue)) { + date = modelValue; + } else if (options.timeType === 'string') { + date = dateParser.parse(modelValue); + } else { + date = new Date(modelValue); + } + // Setup default value? + // if(isNaN(date.getTime())) date = new Date(new Date().setMinutes(0) + 36e5); + controller.$dateValue = date; + return controller.$dateValue; + }); + // viewValue -> element + controller.$render = function () { + // console.warn('$render("%s"): viewValue=%o', element.attr('ng-model'), controller.$viewValue); + element.val(!controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : dateFilter(controller.$dateValue, options.timeFormat)); + }; + // Garbage collection + scope.$on('$destroy', function () { + timepicker.destroy(); + options = null; + timepicker = null; + }); } - ]; - }).directive('bsTimepicker', [ + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/tooltip/tooltip.js +angular.module('mgcrea.ngStrap.tooltip', [ + 'ngAnimate', + 'mgcrea.ngStrap.helpers.dimensions' +]).provider('$tooltip', function () { + var defaults = this.defaults = { + animation: 'am-fade', + prefixClass: 'tooltip', + prefixEvent: 'tooltip', + container: false, + placement: 'top', + template: 'tooltip/tooltip.tpl.html', + contentTemplate: false, + trigger: 'hover focus', + keyboard: false, + html: false, + show: false, + title: '', + type: '', + delay: 0 + }; + this.$get = [ '$window', - '$parse', + '$rootScope', + '$compile', '$q', - '$locale', - 'dateFilter', - '$timepicker', - '$dateParser', + '$templateCache', + '$http', + '$animate', '$timeout', - function ($window, $parse, $q, $locale, dateFilter, $timepicker, $dateParser, $timeout) { - var defaults = $timepicker.defaults; - var isNative = /(ip(a|o)d|iphone|android)/gi.test($window.navigator.userAgent); - var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; - return { - restrict: 'EAC', - require: 'ngModel', - link: function postLink(scope, element, attr, controller) { - // Directive options - var options = { - scope: scope, - controller: controller - }; - angular.forEach([ - 'placement', - 'container', - 'delay', - 'trigger', - 'keyboard', - 'html', - 'animation', - 'template', - 'autoclose', - 'timeType', - 'timeFormat', - 'useNative', - 'lang' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Initialize timepicker - if (isNative && (options.useNative || defaults.useNative)) - options.timeFormat = 'HH:mm'; - var timepicker = $timepicker(element, controller, options); - options = timepicker.$options; - // Initialize parser - var dateParser = $dateParser({ - format: options.timeFormat, - lang: options.lang - }); - // Observe attributes for changes - angular.forEach([ - 'minTime', - 'maxTime' - ], function (key) { - // console.warn('attr.$observe(%s)', key, attr[key]); - angular.isDefined(attr[key]) && attr.$observe(key, function (newValue) { - if (newValue === 'now') { - timepicker.$options[key] = new Date().setFullYear(1970, 0, 1); - } else if (angular.isString(newValue) && newValue.match(/^".+"$/)) { - timepicker.$options[key] = +new Date(newValue.substr(1, newValue.length - 2)); - } else { - timepicker.$options[key] = dateParser.parse(newValue); - } - !isNaN(timepicker.$options[key]) && timepicker.$build(); - }); + 'dimensions', + '$$rAF', + function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, dimensions, $$rAF) { + var trim = String.prototype.trim; + var isTouch = 'createTouch' in $window.document; + var htmlReplaceRegExp = /ng-bind="/gi; + function TooltipFactory(element, config) { + var $tooltip = {}; + // Common vars + var options = $tooltip.$options = angular.extend({}, defaults, config); + $tooltip.$promise = fetchTemplate(options.template); + var scope = $tooltip.$scope = options.scope && options.scope.$new() || $rootScope.$new(); + if (options.delay && angular.isString(options.delay)) { + options.delay = parseFloat(options.delay); + } + // Support scope as string options + if (options.title) { + $tooltip.$scope.title = options.title; + } + // Provide scope helpers + scope.$hide = function () { + scope.$$postDigest(function () { + $tooltip.hide(); }); - // Watch model for changes - scope.$watch(attr.ngModel, function (newValue, oldValue) { - // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue, controller.$dateValue); - timepicker.update(controller.$dateValue); - }, true); - // viewValue -> $parsers -> modelValue - controller.$parsers.unshift(function (viewValue) { - // console.warn('$parser("%s"): viewValue=%o', element.attr('ng-model'), viewValue); - // Null values should correctly reset the model value & validity - if (!viewValue) { - controller.$setValidity('date', true); - return; - } - var parsedTime = dateParser.parse(viewValue, controller.$dateValue); - if (!parsedTime || isNaN(parsedTime.getTime())) { - controller.$setValidity('date', false); - } else { - var isValid = parsedTime.getTime() >= options.minTime && parsedTime.getTime() <= options.maxTime; - controller.$setValidity('date', isValid); - // Only update the model when we have a valid date - if (isValid) - controller.$dateValue = parsedTime; - } - if (options.timeType === 'string') { - return dateFilter(viewValue, options.timeFormat); - } else if (options.timeType === 'number') { - return controller.$dateValue.getTime(); - } else if (options.timeType === 'iso') { - return controller.$dateValue.toISOString(); - } else { - return controller.$dateValue; - } + }; + scope.$show = function () { + scope.$$postDigest(function () { + $tooltip.show(); }); - // modelValue -> $formatters -> viewValue - controller.$formatters.push(function (modelValue) { - // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue); - var date = options.timeType === 'string' ? dateParser.parse(modelValue, controller.$dateValue) : new Date(modelValue); - // Setup default value: next hour? - // if(isNaN(date.getTime())) date = new Date(new Date().setMinutes(0) + 36e5); - controller.$dateValue = date; - return controller.$dateValue; + }; + scope.$toggle = function () { + scope.$$postDigest(function () { + $tooltip.toggle(); }); - // viewValue -> element - controller.$render = function () { - // console.warn('$render("%s"): viewValue=%o', element.attr('ng-model'), controller.$viewValue); - element.val(isNaN(controller.$dateValue.getTime()) ? '' : dateFilter(controller.$dateValue, options.timeFormat)); - }; - // Garbage collection - scope.$on('$destroy', function () { - timepicker.destroy(); - options = null; - timepicker = null; + }; + $tooltip.$isShown = scope.$isShown = false; + // Private vars + var timeout, hoverState; + // Support contentTemplate option + if (options.contentTemplate) { + $tooltip.$promise = $tooltip.$promise.then(function (template) { + var templateEl = angular.element(template); + return fetchTemplate(options.contentTemplate).then(function (contentTemplate) { + var contentEl = findElement('[ng-bind="content"]', templateEl[0]); + if (!contentEl.length) + contentEl = findElement('[ng-bind="title"]', templateEl[0]); + contentEl.removeAttr('ng-bind').html(contentTemplate); + return templateEl[0].outerHTML; + }); }); } - }; - } - ]); - // Source: src/tooltip/tooltip.js - angular.module('mgcrea.ngStrap.tooltip', [ - 'ngAnimate', - 'mgcrea.ngStrap.helpers.dimensions' - ]).provider('$tooltip', function () { - var defaults = this.defaults = { - animation: 'am-fade', - prefixClass: 'tooltip', - container: false, - placement: 'top', - template: 'tooltip/tooltip.tpl.html', - contentTemplate: false, - trigger: 'hover focus', - keyboard: false, - html: false, - show: false, - title: '', - type: '', - delay: 0 - }; - this.$get = [ - '$window', - '$rootScope', - '$compile', - '$q', - '$templateCache', - '$http', - '$animate', - '$timeout', - 'dimensions', - '$$animateReflow', - function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, dimensions, $$animateReflow) { - var trim = String.prototype.trim; - var isTouch = 'createTouch' in $window.document; - var htmlReplaceRegExp = /ng-bind="/gi; - function TooltipFactory(element, config) { - var $tooltip = {}; - // Common vars - var options = $tooltip.$options = angular.extend({}, defaults, config); - $tooltip.$promise = fetchTemplate(options.template); - var scope = $tooltip.$scope = options.scope && options.scope.$new() || $rootScope.$new(); - if (options.delay && angular.isString(options.delay)) { - options.delay = parseFloat(options.delay); - } - // Support scope as string options - if (options.title) { - $tooltip.$scope.title = options.title; - } - // Provide scope helpers - scope.$hide = function () { - scope.$$postDigest(function () { - $tooltip.hide(); - }); - }; - scope.$show = function () { - scope.$$postDigest(function () { - $tooltip.show(); - }); - }; - scope.$toggle = function () { - scope.$$postDigest(function () { - $tooltip.toggle(); - }); - }; - $tooltip.$isShown = scope.$isShown = false; - // Private vars - var timeout, hoverState; - // Support contentTemplate option - if (options.contentTemplate) { - $tooltip.$promise = $tooltip.$promise.then(function (template) { - var templateEl = angular.element(template); - return fetchTemplate(options.contentTemplate).then(function (contentTemplate) { - findElement('[ng-bind="content"]', templateEl[0]).removeAttr('ng-bind').html(contentTemplate); - return templateEl[0].outerHTML; - }); - }); + // Fetch, compile then initialize tooltip + var tipLinker, tipElement, tipTemplate, tipContainer; + $tooltip.$promise.then(function (template) { + if (angular.isObject(template)) + template = template.data; + if (options.html) + template = template.replace(htmlReplaceRegExp, 'ng-bind-html="'); + template = trim.apply(template); + tipTemplate = template; + tipLinker = $compile(template); + $tooltip.init(); + }); + $tooltip.init = function () { + // Options: delay + if (options.delay && angular.isNumber(options.delay)) { + options.delay = { + show: options.delay, + hide: options.delay + }; } - // Fetch, compile then initialize tooltip - var tipLinker, tipElement, tipTemplate, tipContainer; - $tooltip.$promise.then(function (template) { - if (angular.isObject(template)) - template = template.data; - if (options.html) - template = template.replace(htmlReplaceRegExp, 'ng-bind-html="'); - template = trim.apply(template); - tipTemplate = template; - tipLinker = $compile(template); - $tooltip.init(); - }); - $tooltip.init = function () { - // Options: delay - if (options.delay && angular.isNumber(options.delay)) { - options.delay = { - show: options.delay, - hide: options.delay - }; - } - // Replace trigger on touch devices ? - // if(isTouch && options.trigger === defaults.trigger) { - // options.trigger.replace(/hover/g, 'click'); - // } - // Options : container - if (options.container === 'self') { - tipContainer = element; - } else if (options.container) { - tipContainer = findElement(options.container); - } - // Options: trigger - var triggers = options.trigger.split(' '); - angular.forEach(triggers, function (trigger) { - if (trigger === 'click') { - element.on('click', $tooltip.toggle); - } else if (trigger !== 'manual') { - element.on(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter); - element.on(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave); - trigger !== 'hover' && element.on(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown); - } - }); - // Options: show - if (options.show) { - scope.$$postDigest(function () { - options.trigger === 'focus' ? element[0].focus() : $tooltip.show(); - }); - } - }; - $tooltip.destroy = function () { - // Unbind events - var triggers = options.trigger.split(' '); - for (var i = triggers.length; i--;) { - var trigger = triggers[i]; - if (trigger === 'click') { - element.off('click', $tooltip.toggle); - } else if (trigger !== 'manual') { - element.off(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter); - element.off(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave); - trigger !== 'hover' && element.off(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown); - } - } - // Remove element - if (tipElement) { - tipElement.remove(); - tipElement = null; - } - // Destroy scope - scope.$destroy(); - }; - $tooltip.enter = function () { - clearTimeout(timeout); - hoverState = 'in'; - if (!options.delay || !options.delay.show) { - return $tooltip.show(); - } - timeout = setTimeout(function () { - if (hoverState === 'in') - $tooltip.show(); - }, options.delay.show); - }; - $tooltip.show = function () { - var parent = options.container ? tipContainer : null; - var after = options.container ? null : element; - // Remove any existing tipElement - if (tipElement) - tipElement.remove(); - // Fetch a cloned element linked from template - tipElement = $tooltip.$element = tipLinker(scope, function (clonedElement, scope) { - }); - // Set the initial positioning. - tipElement.css({ - top: '0px', - left: '0px', - display: 'block' - }).addClass(options.placement); - // Options: animation - if (options.animation) - tipElement.addClass(options.animation); - // Options: type - if (options.type) - tipElement.addClass(options.prefixClass + '-' + options.type); - $animate.enter(tipElement, parent, after, function () { - }); - $tooltip.$isShown = scope.$isShown = true; - scope.$$phase || scope.$digest(); - $$animateReflow($tooltip.$applyPlacement); - // Bind events - if (options.keyboard) { - if (options.trigger !== 'focus') { - $tooltip.focus(); - tipElement.on('keyup', $tooltip.$onKeyUp); - } else { - element.on('keyup', $tooltip.$onFocusKeyUp); - } - } - }; - $tooltip.leave = function () { - clearTimeout(timeout); - hoverState = 'out'; - if (!options.delay || !options.delay.hide) { - return $tooltip.hide(); + // Replace trigger on touch devices ? + // if(isTouch && options.trigger === defaults.trigger) { + // options.trigger.replace(/hover/g, 'click'); + // } + // Options : container + if (options.container === 'self') { + tipContainer = element; + } else if (options.container) { + tipContainer = findElement(options.container); + } + // Options: trigger + var triggers = options.trigger.split(' '); + angular.forEach(triggers, function (trigger) { + if (trigger === 'click') { + element.on('click', $tooltip.toggle); + } else if (trigger !== 'manual') { + element.on(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter); + element.on(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave); + trigger !== 'hover' && element.on(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown); } - timeout = setTimeout(function () { - if (hoverState === 'out') { - $tooltip.hide(); - } - }, options.delay.hide); - }; - $tooltip.hide = function (blur) { - if (!$tooltip.$isShown) - return; - $animate.leave(tipElement, function () { - tipElement = null; + }); + // Options: show + if (options.show) { + scope.$$postDigest(function () { + options.trigger === 'focus' ? element[0].focus() : $tooltip.show(); }); - $tooltip.$isShown = scope.$isShown = false; - scope.$$phase || scope.$digest(); - // Unbind events - if (options.keyboard) { - tipElement.off('keyup', $tooltip.$onKeyUp); - } - // Allow to blur the input when hidden, like when pressing enter key - if (blur && options.trigger === 'focus') { - return element[0].blur(); + } + }; + $tooltip.destroy = function () { + // Unbind events + var triggers = options.trigger.split(' '); + for (var i = triggers.length; i--;) { + var trigger = triggers[i]; + if (trigger === 'click') { + element.off('click', $tooltip.toggle); + } else if (trigger !== 'manual') { + element.off(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter); + element.off(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave); + trigger !== 'hover' && element.off(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown); } - }; - $tooltip.toggle = function () { - $tooltip.$isShown ? $tooltip.leave() : $tooltip.enter(); - }; - $tooltip.focus = function () { - tipElement[0].focus(); - }; - // Protected methods - $tooltip.$applyPlacement = function () { - if (!tipElement) - return; - // Get the position of the tooltip element. - var elementPosition = getPosition(); - // Get the height and width of the tooltip so we can center it. - var tipWidth = tipElement.prop('offsetWidth'), tipHeight = tipElement.prop('offsetHeight'); - // Get the tooltip's top and left coordinates to center it with this directive. - var tipPosition = getCalculatedOffset(options.placement, elementPosition, tipWidth, tipHeight); - // Now set the calculated positioning. - tipPosition.top += 'px'; - tipPosition.left += 'px'; - tipElement.css(tipPosition); - }; - $tooltip.$onKeyUp = function (evt) { - evt.which === 27 && $tooltip.hide(); - }; - $tooltip.$onFocusKeyUp = function (evt) { - evt.which === 27 && element[0].blur(); - }; - $tooltip.$onFocusElementMouseDown = function (evt) { - evt.preventDefault(); - evt.stopPropagation(); - // Some browsers do not auto-focus buttons (eg. Safari) - $tooltip.$isShown ? element[0].blur() : element[0].focus(); - }; - // Private methods - function getPosition() { - if (options.container === 'body') { - return dimensions.offset(element[0]); + } + // Remove element + if (tipElement) { + tipElement.remove(); + tipElement = null; + } + // Destroy scope + scope.$destroy(); + }; + $tooltip.enter = function () { + clearTimeout(timeout); + hoverState = 'in'; + if (!options.delay || !options.delay.show) { + return $tooltip.show(); + } + timeout = setTimeout(function () { + if (hoverState === 'in') + $tooltip.show(); + }, options.delay.show); + }; + $tooltip.show = function () { + scope.$emit(options.prefixEvent + '.show.before', $tooltip); + var parent = options.container ? tipContainer : null; + var after = options.container ? null : element; + // Hide any existing tipElement + if (tipElement) + tipElement.remove(); + // Fetch a cloned element linked from template + tipElement = $tooltip.$element = tipLinker(scope, function (clonedElement, scope) { + }); + // Set the initial positioning. + tipElement.css({ + top: '0px', + left: '0px', + display: 'block' + }).addClass(options.placement); + // Options: animation + if (options.animation) + tipElement.addClass(options.animation); + // Options: type + if (options.type) + tipElement.addClass(options.prefixClass + '-' + options.type); + $animate.enter(tipElement, parent, after, function () { + scope.$emit(options.prefixEvent + '.show', $tooltip); + }); + $tooltip.$isShown = scope.$isShown = true; + scope.$$phase || scope.$root.$$phase || scope.$digest(); + $$rAF($tooltip.$applyPlacement); + // var a = bodyEl.offsetWidth + 1; ? + // Bind events + if (options.keyboard) { + if (options.trigger !== 'focus') { + $tooltip.focus(); + tipElement.on('keyup', $tooltip.$onKeyUp); } else { - return dimensions.position(element[0]); + element.on('keyup', $tooltip.$onFocusKeyUp); } } - function getCalculatedOffset(placement, position, actualWidth, actualHeight) { - var offset; - var split = placement.split('-'); - switch (split[0]) { - case 'right': - offset = { - top: position.top + position.height / 2 - actualHeight / 2, - left: position.left + position.width - }; - break; - case 'bottom': - offset = { - top: position.top + position.height, - left: position.left + position.width / 2 - actualWidth / 2 - }; - break; + }; + $tooltip.leave = function () { + clearTimeout(timeout); + hoverState = 'out'; + if (!options.delay || !options.delay.hide) { + return $tooltip.hide(); + } + timeout = setTimeout(function () { + if (hoverState === 'out') { + $tooltip.hide(); + } + }, options.delay.hide); + }; + $tooltip.hide = function (blur) { + if (!$tooltip.$isShown) + return; + scope.$emit(options.prefixEvent + '.hide.before', $tooltip); + $animate.leave(tipElement, function () { + scope.$emit(options.prefixEvent + '.hide', $tooltip); + }); + $tooltip.$isShown = scope.$isShown = false; + scope.$$phase || scope.$root.$$phase || scope.$digest(); + // Unbind events + if (options.keyboard && tipElement !== null) { + tipElement.off('keyup', $tooltip.$onKeyUp); + } + // Allow to blur the input when hidden, like when pressing enter key + if (blur && options.trigger === 'focus') { + return element[0].blur(); + } + }; + $tooltip.toggle = function () { + $tooltip.$isShown ? $tooltip.leave() : $tooltip.enter(); + }; + $tooltip.focus = function () { + tipElement[0].focus(); + }; + // Protected methods + $tooltip.$applyPlacement = function () { + if (!tipElement) + return; + // Get the position of the tooltip element. + var elementPosition = getPosition(); + // Get the height and width of the tooltip so we can center it. + var tipWidth = tipElement.prop('offsetWidth'), tipHeight = tipElement.prop('offsetHeight'); + // Get the tooltip's top and left coordinates to center it with this directive. + var tipPosition = getCalculatedOffset(options.placement, elementPosition, tipWidth, tipHeight); + // Now set the calculated positioning. + tipPosition.top += 'px'; + tipPosition.left += 'px'; + tipElement.css(tipPosition); + }; + $tooltip.$onKeyUp = function (evt) { + evt.which === 27 && $tooltip.hide(); + }; + $tooltip.$onFocusKeyUp = function (evt) { + evt.which === 27 && element[0].blur(); + }; + $tooltip.$onFocusElementMouseDown = function (evt) { + evt.preventDefault(); + evt.stopPropagation(); + // Some browsers do not auto-focus buttons (eg. Safari) + $tooltip.$isShown ? element[0].blur() : element[0].focus(); + }; + // Private methods + function getPosition() { + if (options.container === 'body') { + return dimensions.offset(element[0]); + } else { + return dimensions.position(element[0]); + } + } + function getCalculatedOffset(placement, position, actualWidth, actualHeight) { + var offset; + var split = placement.split('-'); + switch (split[0]) { + case 'right': + offset = { + top: position.top + position.height / 2 - actualHeight / 2, + left: position.left + position.width + }; + break; + case 'bottom': + offset = { + top: position.top + position.height, + left: position.left + position.width / 2 - actualWidth / 2 + }; + break; + case 'left': + offset = { + top: position.top + position.height / 2 - actualHeight / 2, + left: position.left - actualWidth + }; + break; + default: + offset = { + top: position.top - actualHeight, + left: position.left + position.width / 2 - actualWidth / 2 + }; + break; + } + if (!split[1]) { + return offset; + } + // Add support for corners @todo css + if (split[0] === 'top' || split[0] === 'bottom') { + switch (split[1]) { case 'left': - offset = { - top: position.top + position.height / 2 - actualHeight / 2, - left: position.left - actualWidth - }; + offset.left = position.left; break; - default: - offset = { - top: position.top - actualHeight, - left: position.left + position.width / 2 - actualWidth / 2 - }; - break; - } - if (!split[1]) { - return offset; + case 'right': + offset.left = position.left + position.width - actualWidth; } - // Add support for corners @todo css - if (split[0] === 'top' || split[0] === 'bottom') { - switch (split[1]) { - case 'left': - offset.left = position.left; - break; - case 'right': - offset.left = position.left + position.width - actualWidth; - } - } else if (split[0] === 'left' || split[0] === 'right') { - switch (split[1]) { - case 'top': - offset.top = position.top - actualHeight; - break; - case 'bottom': - offset.top = position.top + position.height; - } + } else if (split[0] === 'left' || split[0] === 'right') { + switch (split[1]) { + case 'top': + offset.top = position.top - actualHeight; + break; + case 'bottom': + offset.top = position.top + position.height; } - return offset; } - return $tooltip; + return offset; } - // Helper functions - function findElement(query, element) { - return angular.element((element || document).querySelectorAll(query)); - } - function fetchTemplate(template) { - return $q.when($templateCache.get(template) || $http.get(template)).then(function (res) { - if (angular.isObject(res)) { - $templateCache.put(template, res.data); - return res.data; - } - return res; + return $tooltip; + } + // Helper functions + function findElement(query, element) { + return angular.element((element || document).querySelectorAll(query)); + } + function fetchTemplate(template) { + return $q.when($templateCache.get(template) || $http.get(template)).then(function (res) { + if (angular.isObject(res)) { + $templateCache.put(template, res.data); + return res.data; + } + return res; + }); + } + return TooltipFactory; + } + ]; +}).directive('bsTooltip', [ + '$window', + '$location', + '$sce', + '$tooltip', + '$$rAF', + function ($window, $location, $sce, $tooltip, $$rAF) { + return { + restrict: 'EAC', + scope: true, + link: function postLink(scope, element, attr, transclusion) { + // Directive options + var options = { scope: scope }; + angular.forEach([ + 'template', + 'contentTemplate', + 'placement', + 'container', + 'delay', + 'trigger', + 'keyboard', + 'html', + 'animation', + 'type' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Observe scope attributes for change + angular.forEach(['title'], function (key) { + attr[key] && attr.$observe(key, function (newValue, oldValue) { + scope[key] = $sce.trustAsHtml(newValue); + angular.isDefined(oldValue) && $$rAF(function () { + tooltip && tooltip.$applyPlacement(); + }); }); - } - return TooltipFactory; + }); + // Support scope as an object + attr.bsTooltip && scope.$watch(attr.bsTooltip, function (newValue, oldValue) { + if (angular.isObject(newValue)) { + angular.extend(scope, newValue); + } else { + scope.title = newValue; + } + angular.isDefined(oldValue) && $$rAF(function () { + tooltip && tooltip.$applyPlacement(); + }); + }, true); + // Initialize popover + var tooltip = $tooltip(element, options); + // Garbage collection + scope.$on('$destroy', function () { + tooltip.destroy(); + options = null; + tooltip = null; + }); } - ]; - }).directive('bsTooltip', [ + }; + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/typeahead/typeahead.js +angular.module('mgcrea.ngStrap.typeahead', [ + 'mgcrea.ngStrap.tooltip', + 'mgcrea.ngStrap.helpers.parseOptions' +]).provider('$typeahead', function () { + var defaults = this.defaults = { + animation: 'am-fade', + prefixClass: 'typeahead', + placement: 'bottom-left', + template: 'typeahead/typeahead.tpl.html', + trigger: 'focus', + container: false, + keyboard: true, + html: false, + delay: 0, + minLength: 1, + filter: 'filter', + limit: 6 + }; + this.$get = [ '$window', - '$location', - '$sce', + '$rootScope', '$tooltip', - '$$animateReflow', - function ($window, $location, $sce, $tooltip, $$animateReflow) { - return { - restrict: 'EAC', - scope: true, - link: function postLink(scope, element, attr, transclusion) { - // Directive options - var options = { scope: scope }; - angular.forEach([ - 'template', - 'contentTemplate', - 'placement', - 'container', - 'delay', - 'trigger', - 'keyboard', - 'html', - 'animation', - 'type' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Observe scope attributes for change - angular.forEach(['title'], function (key) { - attr[key] && attr.$observe(key, function (newValue, oldValue) { - scope[key] = $sce.trustAsHtml(newValue); - angular.isDefined(oldValue) && $$animateReflow(function () { - tooltip && tooltip.$applyPlacement(); - }); - }); + function ($window, $rootScope, $tooltip) { + var bodyEl = angular.element($window.document.body); + function TypeaheadFactory(element, config) { + var $typeahead = {}; + // Common vars + var options = angular.extend({}, defaults, config); + var controller = options.controller; + $typeahead = $tooltip(element, options); + var parentScope = config.scope; + var scope = $typeahead.$scope; + scope.$matches = []; + scope.$activeIndex = 0; + scope.$activate = function (index) { + scope.$$postDigest(function () { + $typeahead.activate(index); }); - // Support scope as an object - attr.bsTooltip && scope.$watch(attr.bsTooltip, function (newValue, oldValue) { - if (angular.isObject(newValue)) { - angular.extend(scope, newValue); - } else { - scope.content = newValue; - } - angular.isDefined(oldValue) && $$animateReflow(function () { - tooltip && tooltip.$applyPlacement(); - }); - }, true); - // Initialize popover - var tooltip = $tooltip(element, options); - // Garbage collection - scope.$on('$destroy', function () { - tooltip.destroy(); - options = null; - tooltip = null; + }; + scope.$select = function (index, evt) { + scope.$$postDigest(function () { + $typeahead.select(index); }); - } - }; - } - ]); - // Source: src/typeahead/typeahead.js - angular.module('mgcrea.ngStrap.typeahead', [ - 'mgcrea.ngStrap.tooltip', - 'mgcrea.ngStrap.helpers.parseOptions' - ]).provider('$typeahead', function () { - var defaults = this.defaults = { - animation: 'am-fade', - prefixClass: 'typeahead', - placement: 'bottom-left', - template: 'typeahead/typeahead.tpl.html', - trigger: 'focus', - container: false, - keyboard: true, - html: false, - delay: 0, - minLength: 1, - filter: 'filter', - limit: 6 - }; - this.$get = [ - '$window', - '$rootScope', - '$tooltip', - function ($window, $rootScope, $tooltip) { - var bodyEl = angular.element($window.document.body); - function TypeaheadFactory(element, config) { - var $typeahead = {}; - // Common vars - var options = angular.extend({}, defaults, config); - var controller = options.controller; - $typeahead = $tooltip(element, options); - var parentScope = config.scope; - var scope = $typeahead.$scope; - scope.$matches = []; + }; + scope.$isVisible = function () { + return $typeahead.$isVisible(); + }; + // Public methods + $typeahead.update = function (matches) { + scope.$matches = matches; + if (scope.$activeIndex >= matches.length) { + scope.$activeIndex = 0; + } + }; + $typeahead.activate = function (index) { + scope.$activeIndex = index; + }; + $typeahead.select = function (index) { + var value = scope.$matches[index].value; + if (controller) { + controller.$setViewValue(value); + controller.$render(); + if (parentScope) + parentScope.$digest(); + } + if (options.trigger === 'focus') + element[0].blur(); + else if ($typeahead.$isShown) + $typeahead.hide(); scope.$activeIndex = 0; - scope.$activate = function (index) { - scope.$$postDigest(function () { - $typeahead.activate(index); - }); - }; - scope.$select = function (index, evt) { - scope.$$postDigest(function () { - $typeahead.select(index); - }); - }; - scope.$isVisible = function () { - return $typeahead.$isVisible(); - }; - // Public methods - $typeahead.update = function (matches) { - scope.$matches = matches; - if (scope.$activeIndex >= matches.length) { - scope.$activeIndex = 0; - } - }; - $typeahead.activate = function (index) { - scope.$activeIndex = index; - }; - $typeahead.select = function (index) { - var value = scope.$matches[index].value; - if (controller) { - controller.$setViewValue(value); - controller.$render(); - if (parentScope) - parentScope.$digest(); - } - if (options.trigger === 'focus') - element[0].blur(); - else if ($typeahead.$isShown) - $typeahead.hide(); + // Emit event + scope.$emit('$typeahead.select', value, index); + }; + // Protected methods + $typeahead.$isVisible = function () { + if (!options.minLength || !controller) { + return !!scope.$matches.length; + } + // minLength support + return scope.$matches.length && angular.isString(controller.$viewValue) && controller.$viewValue.length >= options.minLength; + }; + $typeahead.$getIndex = function (value) { + var l = scope.$matches.length, i = l; + if (!l) + return; + for (i = l; i--;) { + if (scope.$matches[i].value === value) + break; + } + if (i < 0) + return; + return i; + }; + $typeahead.$onMouseDown = function (evt) { + // Prevent blur on mousedown + evt.preventDefault(); + evt.stopPropagation(); + }; + $typeahead.$onKeyDown = function (evt) { + if (!/(38|40|13)/.test(evt.keyCode)) + return; + evt.preventDefault(); + evt.stopPropagation(); + // Select with enter + if (evt.keyCode === 13 && scope.$matches.length) { + return $typeahead.select(scope.$activeIndex); + } + // Navigate with keyboard + if (evt.keyCode === 38 && scope.$activeIndex > 0) + scope.$activeIndex--; + else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) + scope.$activeIndex++; + else if (angular.isUndefined(scope.$activeIndex)) scope.$activeIndex = 0; - // Emit event - scope.$emit('$typeahead.select', value, index); - }; - // Protected methods - $typeahead.$isVisible = function () { - if (!options.minLength || !controller) { - return !!scope.$matches.length; - } - // minLength support - return scope.$matches.length && angular.isString(controller.$viewValue) && controller.$viewValue.length >= options.minLength; - }; - $typeahead.$onMouseDown = function (evt) { - // Prevent blur on mousedown - evt.preventDefault(); - evt.stopPropagation(); - }; - $typeahead.$onKeyDown = function (evt) { - if (!/(38|40|13)/.test(evt.keyCode)) - return; - evt.preventDefault(); - evt.stopPropagation(); - // Select with enter - if (evt.keyCode === 13) { - return $typeahead.select(scope.$activeIndex); - } - // Navigate with keyboard - if (evt.keyCode === 38 && scope.$activeIndex > 0) - scope.$activeIndex--; - else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) - scope.$activeIndex++; - else if (angular.isUndefined(scope.$activeIndex)) - scope.$activeIndex = 0; - scope.$digest(); - }; - // Overrides - var show = $typeahead.show; - $typeahead.show = function () { - show(); - setTimeout(function () { - $typeahead.$element.on('mousedown', $typeahead.$onMouseDown); - if (options.keyboard) { - element.on('keydown', $typeahead.$onKeyDown); - } - }); - }; - var hide = $typeahead.hide; - $typeahead.hide = function () { - $typeahead.$element.off('mousedown', $typeahead.$onMouseDown); + scope.$digest(); + }; + // Overrides + var show = $typeahead.show; + $typeahead.show = function () { + show(); + setTimeout(function () { + $typeahead.$element.on('mousedown', $typeahead.$onMouseDown); if (options.keyboard) { - element.off('keydown', $typeahead.$onKeyDown); + element.on('keydown', $typeahead.$onKeyDown); } - hide(); - }; - return $typeahead; - } - TypeaheadFactory.defaults = defaults; - return TypeaheadFactory; - } - ]; - }).directive('bsTypeahead', [ - '$window', - '$parse', - '$q', - '$typeahead', - '$parseOptions', - function ($window, $parse, $q, $typeahead, $parseOptions) { - var defaults = $typeahead.defaults; - return { - restrict: 'EAC', - require: 'ngModel', - link: function postLink(scope, element, attr, controller) { - // Directive options - var options = { - scope: scope, - controller: controller - }; - angular.forEach([ - 'placement', - 'container', - 'delay', - 'trigger', - 'keyboard', - 'html', - 'animation', - 'template', - 'filter', - 'limit', - 'minLength' - ], function (key) { - if (angular.isDefined(attr[key])) - options[key] = attr[key]; - }); - // Build proper ngOptions - var filter = options.filter || defaults.filter; - var limit = options.limit || defaults.limit; - var ngOptions = attr.ngOptions; - if (filter) - ngOptions += ' | ' + filter + ':$viewValue'; - if (limit) - ngOptions += ' | limitTo:' + limit; - var parsedOptions = $parseOptions(ngOptions); - // Initialize typeahead - var typeahead = $typeahead(element, options); - // Watch model for changes - scope.$watch(attr.ngModel, function (newValue, oldValue) { - parsedOptions.valuesFn(scope, controller).then(function (values) { - if (values.length > limit) - values = values.slice(0, limit); - // if(matches.length === 1 && matches[0].value === newValue) return; - typeahead.update(values); - }); - }); - // Garbage collection - scope.$on('$destroy', function () { - typeahead.destroy(); - options = null; - typeahead = null; }); - } - }; + }; + var hide = $typeahead.hide; + $typeahead.hide = function () { + $typeahead.$element.off('mousedown', $typeahead.$onMouseDown); + if (options.keyboard) { + element.off('keydown', $typeahead.$onKeyDown); + } + hide(); + }; + return $typeahead; + } + TypeaheadFactory.defaults = defaults; + return TypeaheadFactory; } - ]); -}(window, document)); \ No newline at end of file + ]; +}).directive('bsTypeahead', [ + '$window', + '$parse', + '$q', + '$typeahead', + '$parseOptions', + function ($window, $parse, $q, $typeahead, $parseOptions) { + var defaults = $typeahead.defaults; + return { + restrict: 'EAC', + require: 'ngModel', + link: function postLink(scope, element, attr, controller) { + // Directive options + var options = { + scope: scope, + controller: controller + }; + angular.forEach([ + 'placement', + 'container', + 'delay', + 'trigger', + 'keyboard', + 'html', + 'animation', + 'template', + 'filter', + 'limit', + 'minLength' + ], function (key) { + if (angular.isDefined(attr[key])) + options[key] = attr[key]; + }); + // Build proper ngOptions + var filter = options.filter || defaults.filter; + var limit = options.limit || defaults.limit; + var ngOptions = attr.ngOptions; + if (filter) + ngOptions += ' | ' + filter + ':$viewValue'; + if (limit) + ngOptions += ' | limitTo:' + limit; + var parsedOptions = $parseOptions(ngOptions); + // Initialize typeahead + var typeahead = $typeahead(element, options); + // if(!dump) var dump = console.error.bind(console); + // Watch model for changes + scope.$watch(attr.ngModel, function (newValue, oldValue) { + scope.$modelValue = newValue; + //Set model value on the scope to custom templates can use it. + parsedOptions.valuesFn(scope, controller).then(function (values) { + if (values.length > limit) + values = values.slice(0, limit); + // if(matches.length === 1 && matches[0].value === newValue) return; + typeahead.update(values); + // Queue a new rendering that will leverage collection loading + controller.$render(); + }); + }); + // Model rendering in view + controller.$render = function () { + // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); + if (controller.$isEmpty(controller.$viewValue)) + return element.val(''); + var index = typeahead.$getIndex(controller.$modelValue); + var selected = angular.isDefined(index) ? typeahead.$scope.$matches[index].label : controller.$viewValue; + element.val(selected.replace(/<(?:.|\n)*?>/gm, '').trim()); + }; + // Garbage collection + scope.$on('$destroy', function () { + typeahead.destroy(); + options = null; + typeahead = null; + }); + } + }; + } +]); + +})(window, document); diff --git a/dist/angular-strap.min.js b/dist/angular-strap.min.js index c358b9e1c..6428d3bdc 100644 --- a/dist/angular-strap.min.js +++ b/dist/angular-strap.min.js @@ -1,10 +1,9 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -!function(a,b){"use strict";angular.module("mgcrea.ngStrap",["mgcrea.ngStrap.modal","mgcrea.ngStrap.aside","mgcrea.ngStrap.alert","mgcrea.ngStrap.button","mgcrea.ngStrap.select","mgcrea.ngStrap.datepicker","mgcrea.ngStrap.timepicker","mgcrea.ngStrap.navbar","mgcrea.ngStrap.tooltip","mgcrea.ngStrap.popover","mgcrea.ngStrap.dropdown","mgcrea.ngStrap.typeahead","mgcrea.ngStrap.scrollspy","mgcrea.ngStrap.affix","mgcrea.ngStrap.tab"]),angular.module("mgcrea.ngStrap.affix",["mgcrea.ngStrap.helpers.dimensions"]).provider("$affix",function(){var a=this.defaults={offsetTop:"auto"};this.$get=["$window","dimensions",function(b,c){function d(d,f){function g(a,b,c){var d=h(),e=i();return t>=d?"top":null!==a&&d+a<=b.top?"middle":null!==u&&b.top+c+n>=e-u?"bottom":"middle"}function h(){return l[0]===b?b.pageYOffset:l[0]===b}function i(){return l[0]===b?b.document.body.scrollHeight:l[0].scrollHeight}var j={},k=angular.extend({},a,f),l=k.target,m="affix affix-top affix-bottom",n=0,o=0,p=null,q=null,r=d.parent();if(k.offsetParent)if(k.offsetParent.match(/^\d+$/))for(var s=0;s<1*k.offsetParent-1;s++)r=r.parent();else r=angular.element(k.offsetParent);var t=0;k.offsetTop&&("auto"===k.offsetTop&&(k.offsetTop="+0"),k.offsetTop.match(/^[-+]\d+$/)?(n-=1*k.offsetTop,t=k.offsetParent?c.offset(r[0]).top+1*k.offsetTop:c.offset(d[0]).top-c.css(d[0],"marginTop",!0)+1*k.offsetTop):t=1*k.offsetTop);var u=0;return k.offsetBottom&&(u=k.offsetParent&&k.offsetBottom.match(/^[-+]\d+$/)?i()-(c.offset(r[0]).top+c.height(r[0]))+1*k.offsetBottom+1:1*k.offsetBottom),j.init=function(){o=c.offset(d[0]).top+n,l.on("scroll",this.checkPosition),l.on("click",this.checkPositionWithEventLoop),this.checkPosition(),this.checkPositionWithEventLoop()},j.destroy=function(){l.off("scroll",this.checkPosition),l.off("click",this.checkPositionWithEventLoop)},j.checkPositionWithEventLoop=function(){setTimeout(this.checkPosition,1)},j.checkPosition=function(){var a=h(),b=c.offset(d[0]),f=c.height(d[0]),i=g(q,b,f);p!==i&&(p=i,d.removeClass(m).addClass("affix"+("middle"!==i?"-"+i:"")),"top"===i?(q=null,d.css("position",k.offsetParent?"":"relative"),d.css("top","")):"bottom"===i?(q=k.offsetUnpin?-(1*k.offsetUnpin):b.top-a,d.css("position",k.offsetParent?"":"relative"),d.css("top",k.offsetParent?"":e[0].offsetHeight-u-f-o+"px")):(q=null,d.css("position","fixed"),d.css("top",n+"px")))},j.init(),j}var e=angular.element(b.document.body);return d}]}).directive("bsAffix",["$affix","$window",function(a,b){return{restrict:"EAC",require:"^?bsAffixTarget",link:function(c,d,e,f){var g={scope:c,offsetTop:"auto",target:f?f.$element:angular.element(b)};angular.forEach(["offsetTop","offsetBottom","offsetParent","offsetUnpin"],function(a){angular.isDefined(e[a])&&(g[a]=e[a])});var h=a(d,g);c.$on("$destroy",function(){g=null,h=null})}}}]).directive("bsAffixTarget",function(){return{controller:["$element",function(a){this.$element=a}]}}),angular.module("mgcrea.ngStrap.alert",[]).provider("$alert",function(){var a=this.defaults={animation:"am-fade",prefixClass:"alert",placement:null,template:"alert/alert.tpl.html",container:!1,element:null,backdrop:!1,keyboard:!0,show:!0,duration:!1,type:!1};this.$get=["$modal","$timeout",function(b,c){function d(d){var e={},f=angular.extend({},a,d);e=b(f),f.type&&(e.$scope.type=f.type);var g=e.show;return f.duration&&(e.show=function(){g(),c(function(){e.hide()},1e3*f.duration)}),e}return d}]}).directive("bsAlert",["$window","$location","$sce","$alert",function(a,b,c,d){a.requestAnimationFrame||a.setTimeout;return{restrict:"EAC",scope:!0,link:function(a,b,e){var f={scope:a,element:b,show:!1};angular.forEach(["template","placement","keyboard","html","container","animation","duration"],function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),angular.forEach(["title","content","type"],function(b){e[b]&&e.$observe(b,function(d){a[b]=c.trustAsHtml(d)})}),e.bsAlert&&a.$watch(e.bsAlert,function(b){angular.isObject(b)?angular.extend(a,b):a.content=b},!0);var g=d(f);b.on(e.trigger||"click",g.toggle),a.$on("$destroy",function(){g.destroy(),f=null,g=null})}}}]),angular.module("mgcrea.ngStrap.aside",["mgcrea.ngStrap.modal"]).provider("$aside",function(){var a=this.defaults={animation:"am-fade-and-slide-right",prefixClass:"aside",placement:"right",template:"aside/aside.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$modal",function(b){function c(c){var d={},e=angular.extend({},a,c);return d=b(e)}return c}]}).directive("bsAside",["$window","$location","$sce","$aside",function(a,b,c,d){a.requestAnimationFrame||a.setTimeout;return{restrict:"EAC",scope:!0,link:function(a,b,e){var f={scope:a,element:b,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),angular.forEach(["title","content"],function(b){e[b]&&e.$observe(b,function(d){a[b]=c.trustAsHtml(d)})}),e.bsAside&&a.$watch(e.bsAside,function(b){angular.isObject(b)?angular.extend(a,b):a.content=b},!0);var g=d(f);b.on(e.trigger||"click",g.toggle),a.$on("$destroy",function(){g.destroy(),f=null,g=null})}}}]),angular.module("mgcrea.ngStrap.button",["ngAnimate"]).provider("$button",function(){var a=this.defaults={activeClass:"active",toggleEvent:"click"};this.$get=function(){return{defaults:a}}}).directive("bsCheckboxGroup",function(){return{restrict:"A",require:"ngModel",compile:function(a,b){a.attr("data-toggle","buttons"),a.removeAttr("ng-model");var c=a[0].querySelectorAll('input[type="checkbox"]');angular.forEach(c,function(a){var c=angular.element(a);c.attr("bs-checkbox",""),c.attr("ng-model",b.ngModel+"."+c.attr("value"))})}}}).directive("bsCheckbox",["$button","$$animateReflow",function(a,b){var c=a.defaults,d=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(a,e,f,g){var h=c,i="INPUT"===e[0].nodeName,j=i?e.parent():e,k=angular.isDefined(f.trueValue)?f.trueValue:!0;d.test(f.trueValue)&&(k=a.$eval(f.trueValue));var l=angular.isDefined(f.falseValue)?f.falseValue:!1;d.test(f.falseValue)&&(l=a.$eval(f.falseValue));var m="boolean"!=typeof k||"boolean"!=typeof l;m&&(g.$parsers.push(function(a){return a?k:l}),a.$watch(f.ngModel,function(){g.$render()})),g.$render=function(){var a=angular.equals(g.$modelValue,k);b(function(){i&&(e[0].checked=a),j.toggleClass(h.activeClass,a)})},e.bind(h.toggleEvent,function(){a.$apply(function(){i||g.$setViewValue(!j.hasClass("active")),m||g.$render()})})}}}]).directive("bsRadioGroup",function(){return{restrict:"A",require:"ngModel",compile:function(a,b){a.attr("data-toggle","buttons"),a.removeAttr("ng-model");var c=a[0].querySelectorAll('input[type="radio"]');angular.forEach(c,function(a){angular.element(a).attr("bs-radio",""),angular.element(a).attr("ng-model",b.ngModel)})}}}).directive("bsRadio",["$button","$$animateReflow",function(a,b){var c=a.defaults,d=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(a,e,f,g){var h=c,i="INPUT"===e[0].nodeName,j=i?e.parent():e,k=d.test(f.value)?a.$eval(f.value):f.value;g.$render=function(){var a=angular.equals(g.$modelValue,k);b(function(){i&&(e[0].checked=a),j.toggleClass(h.activeClass,a)})},e.bind(h.toggleEvent,function(){a.$apply(function(){g.$setViewValue(k),g.$render()})})}}}]),angular.module("mgcrea.ngStrap.datepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$datepicker",function(){var a=this.defaults={animation:"am-fade",prefixClass:"datepicker",placement:"bottom-left",template:"datepicker/datepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!1,dateType:"date",dateFormat:"shortDate",strictFormat:!1,autoclose:!1,minDate:-1/0,maxDate:+1/0,startView:0,minView:0,startWeek:0};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","datepickerViews","$tooltip",function(b,c,d,e,f,g,h,i){function j(b,c,d){function e(a){a.selected=g.$isSelected(a.date)}function f(){b[0].focus()}var g=i(b,angular.extend({},a,d)),j=d.scope,m=g.$options,n=g.$scope;m.startView&&(m.startView-=m.minView);var o=h(g);g.$views=o.views;var p=o.viewDate;n.$mode=m.startView;var q=g.$views[n.$mode];n.$select=function(a){g.select(a)},n.$selectPane=function(a){g.$selectPane(a)},n.$toggleMode=function(){g.setMode((n.$mode+1)%g.$views.length)},g.update=function(a){angular.isDate(a)&&!isNaN(a.getTime())&&(g.$date=a,q.update.call(q,a)),g.$build(!0)},g.select=function(a,b){angular.isDate(c.$dateValue)||(c.$dateValue=new Date(a)),c.$dateValue.setFullYear(a.getFullYear(),a.getMonth(),a.getDate()),!n.$mode||b?(c.$setViewValue(c.$dateValue),c.$render(),m.autoclose&&!b&&g.hide(!0)):(angular.extend(p,{year:a.getFullYear(),month:a.getMonth(),date:a.getDate()}),g.setMode(n.$mode-1),g.$build())},g.setMode=function(a){n.$mode=a,q=g.$views[n.$mode],g.$build()},g.$build=function(a){a===!0&&q.built||(a!==!1||q.built)&&q.build.call(q)},g.$updateSelected=function(){for(var a=0,b=n.rows.length;b>a;a++)angular.forEach(n.rows[a],e)},g.$isSelected=function(a){return q.isSelected(a)},g.$selectPane=function(a){var b=q.steps,c=new Date(Date.UTC(p.year+(b.year||0)*a,p.month+(b.month||0)*a,p.date+(b.day||0)*a));angular.extend(p,{year:c.getUTCFullYear(),month:c.getUTCMonth(),date:c.getUTCDate()}),g.$build()},g.$onMouseDown=function(a){if(a.preventDefault(),a.stopPropagation(),k){var b=angular.element(a.target);"button"!==b[0].nodeName.toLowerCase()&&(b=b.parent()),b.triggerHandler("click")}},g.$onKeyDown=function(a){if(/(38|37|39|40|13)/.test(a.keyCode)&&!a.shiftKey&&!a.altKey){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return n.$mode?n.$apply(function(){g.setMode(n.$mode-1)}):g.hide(!0);q.onKeyDown(a),j.$digest()}};var r=g.init;g.init=function(){return l&&m.useNative?(b.prop("type","date"),void b.css("-webkit-appearance","textfield")):(k&&(b.prop("type","text"),b.attr("readonly","true"),b.on("click",f)),void r())};var s=g.destroy;g.destroy=function(){l&&m.useNative&&b.off("click",f),s()};var t=g.show;g.show=function(){t(),setTimeout(function(){g.$element.on(k?"touchstart":"mousedown",g.$onMouseDown),m.keyboard&&b.on("keydown",g.$onKeyDown)})};var u=g.hide;return g.hide=function(a){g.$element.off(k?"touchstart":"mousedown",g.$onMouseDown),m.keyboard&&b.off("keydown",g.$onKeyDown),u(a)},g}var k=(angular.element(b.document.body),"createTouch"in b.document),l=/(ip(a|o)d|iphone|android)/gi.test(b.navigator.userAgent);return a.lang||(a.lang=f.id),j.defaults=a,j}]}).directive("bsDatepicker",["$window","$parse","$q","$locale","dateFilter","$datepicker","$dateParser","$timeout",function(a,b,c,d,e,f,g){{var h=(f.defaults,/(ip(a|o)d|iphone|android)/gi.test(a.navigator.userAgent));a.requestAnimationFrame||a.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(a,b,c,d){var i={scope:a,controller:d};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","dateType","dateFormat","strictFormat","startWeek","useNative","lang","startView","minView"],function(a){angular.isDefined(c[a])&&(i[a]=c[a])}),h&&i.useNative&&(i.dateFormat="yyyy-MM-dd");var j=f(b,d,i);i=j.$options,angular.forEach(["minDate","maxDate"],function(a){angular.isDefined(c[a])&&c.$observe(a,function(b){if("today"===b){var c=new Date;j.$options[a]=+new Date(c.getFullYear(),c.getMonth(),c.getDate()+("maxDate"===a?1:0),0,0,0,"minDate"===a?0:-1)}else j.$options[a]=angular.isString(b)&&b.match(/^".+"$/)?+new Date(b.substr(1,b.length-2)):+new Date(b);!isNaN(j.$options[a])&&j.$build(!1)})}),a.$watch(c.ngModel,function(){j.update(d.$dateValue)},!0);var k=g({format:i.dateFormat,lang:i.lang,strict:i.strictFormat});d.$parsers.unshift(function(a){if(!a)return void d.$setValidity("date",!0);var b=k.parse(a,d.$dateValue);if(!b||isNaN(b.getTime()))d.$setValidity("date",!1);else{var c=b.getTime()>=i.minDate&&b.getTime()<=i.maxDate;d.$setValidity("date",c),c&&(d.$dateValue=b)}return"string"===i.dateType?e(a,i.dateFormat):"number"===i.dateType?d.$dateValue.getTime():"iso"===i.dateType?d.$dateValue.toISOString():new Date(d.$dateValue)}),d.$formatters.push(function(a){if(!angular.isUndefined(a)&&null!==a){var b=angular.isDate(a)?a:new Date(a);return d.$dateValue=b,d.$dateValue}}),d.$render=function(){b.val(!d.$dateValue||isNaN(d.$dateValue.getTime())?"":e(d.$dateValue,i.dateFormat))},a.$on("$destroy",function(){j.destroy(),i=null,j=null})}}}]).provider("datepickerViews",function(){function a(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c}this.defaults={dayFormat:"dd",daySplit:7};this.$get=["$locale","$sce","dateFilter",function(b,c,d){return function(e){var f=e.$scope,g=e.$options,h=b.DATETIME_FORMATS.SHORTDAY,i=h.slice(g.startWeek).concat(h.slice(0,g.startWeek)),j=c.trustAsHtml(''+i.join('')+""),k=e.$date||new Date,l={year:k.getFullYear(),month:k.getMonth(),date:k.getDate()},m=(6e4*k.getTimezoneOffset(),[{format:"dd",split:7,steps:{month:1},update:function(a,b){!this.built||b||a.getFullYear()!==l.year||a.getMonth()!==l.month?(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$build()):a.getDate()!==l.date&&(l.date=e.$date.getDate(),e.$updateSelected())},build:function(){for(var b,c=new Date(l.year,l.month,1),h=new Date(+c-864e5*(c.getDay()-g.startWeek)),i=[],k=0;42>k;k++)b=new Date(h.getFullYear(),h.getMonth(),h.getDate()+k),i.push({date:b,label:d(b,this.format),selected:e.$date&&this.isSelected(b),muted:b.getMonth()!==l.month,disabled:this.isDisabled(b)});f.title=d(c,"MMMM yyyy"),f.labels=j,f.rows=a(i,this.split),this.built=!0},isSelected:function(a){return e.$date&&a.getFullYear()===e.$date.getFullYear()&&a.getMonth()===e.$date.getMonth()&&a.getDate()===e.$date.getDate()},isDisabled:function(a){return a.getTime()g.maxDate},onKeyDown:function(a){var b=e.$date.getTime();37===a.keyCode?e.select(new Date(b-864e5),!0):38===a.keyCode?e.select(new Date(b-6048e5),!0):39===a.keyCode?e.select(new Date(b+864e5),!0):40===a.keyCode&&e.select(new Date(b+6048e5),!0)}},{name:"month",format:"MMM",split:4,steps:{year:1},update:function(a){this.built&&a.getFullYear()===l.year?a.getMonth()!==l.month&&(angular.extend(l,{month:e.$date.getMonth(),date:e.$date.getDate()}),e.$updateSelected()):(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$build())},build:function(){for(var b,c=(new Date(l.year,0,1),[]),g=0;12>g;g++)b=new Date(l.year,g,1),c.push({date:b,label:d(b,this.format),selected:e.$isSelected(b),disabled:this.isDisabled(b)});f.title=d(b,"yyyy"),f.labels=!1,f.rows=a(c,this.split),this.built=!0},isSelected:function(a){return e.$date&&a.getFullYear()===e.$date.getFullYear()&&a.getMonth()===e.$date.getMonth()},isDisabled:function(a){var b=+new Date(a.getFullYear(),a.getMonth()+1,0);return bg.maxDate},onKeyDown:function(a){var b=e.$date.getMonth();37===a.keyCode?e.select(e.$date.setMonth(b-1),!0):38===a.keyCode?e.select(e.$date.setMonth(b-4),!0):39===a.keyCode?e.select(e.$date.setMonth(b+1),!0):40===a.keyCode&&e.select(e.$date.setMonth(b+4),!0)}},{name:"year",format:"yyyy",split:4,steps:{year:12},update:function(a,b){!this.built||b||parseInt(a.getFullYear()/20,10)!==parseInt(l.year/20,10)?(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$build()):a.getFullYear()!==l.year&&(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$updateSelected())},build:function(){for(var b,c=l.year-l.year%(3*this.split),g=[],h=0;12>h;h++)b=new Date(c+h,0,1),g.push({date:b,label:d(b,this.format),selected:e.$isSelected(b),disabled:this.isDisabled(b)});f.title=g[0].label+"-"+g[g.length-1].label,f.labels=!1,f.rows=a(g,this.split),this.built=!0},isSelected:function(a){return e.$date&&a.getFullYear()===e.$date.getFullYear()},isDisabled:function(a){var b=+new Date(a.getFullYear()+1,0,0);return bg.maxDate},onKeyDown:function(a){var b=e.$date.getFullYear();37===a.keyCode?e.select(e.$date.setYear(b-1),!0):38===a.keyCode?e.select(e.$date.setYear(b-4),!0):39===a.keyCode?e.select(e.$date.setYear(b+1),!0):40===a.keyCode&&e.select(e.$date.setYear(b+4),!0)}}]);return{views:g.minView?Array.prototype.slice.call(m,g.minView):m,viewDate:l}}}]}),angular.module("mgcrea.ngStrap.dropdown",["mgcrea.ngStrap.tooltip"]).provider("$dropdown",function(){var a=this.defaults={animation:"am-fade",prefixClass:"dropdown",placement:"bottom-left",template:"dropdown/dropdown.tpl.html",trigger:"click",container:!1,keyboard:!0,html:!1,delay:0};this.$get=["$window","$rootScope","$tooltip",function(b,c,d){function e(b,e){function h(a){return a.target!==b[0]?a.target!==b[0]&&i.hide():void 0}{var i={},j=angular.extend({},a,e);i.$scope=j.scope&&j.scope.$new()||c.$new()}i=d(b,j),i.$onKeyDown=function(a){if(/(38|40)/.test(a.keyCode)){a.preventDefault(),a.stopPropagation();var b=angular.element(i.$element[0].querySelectorAll("li:not(.divider) a"));if(b.length){var c;angular.forEach(b,function(a,b){g&&g.call(a,":focus")&&(c=b)}),38===a.keyCode&&c>0?c--:40===a.keyCode&&c1){var g=f.search(c[b]);a=a.split(c[b]).join(""),m[c[b]]&&(d[g]=m[c[b]])}return angular.forEach(d,function(a){e.push(a)}),e}function f(a){return a.replace(/\//g,"[\\/]").replace("/-/g","[-]").replace(/\./g,"[.]").replace(/\\s/g,"[\\s]")}function g(a){var b,c=Object.keys(l),d=a;for(b=0;bj?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e)))},j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e)),h}}).constant("throttle",function(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:new Date,g=null,f=a.apply(d,e)};return function(){var j=new Date;h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e)):g||c.trailing===!1||(g=setTimeout(i,k)),f}}),angular.module("mgcrea.ngStrap.helpers.dimensions",[]).factory("dimensions",["$document","$window",function(){var b=(angular.element,{}),c=b.nodeName=function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()};b.css=function(b,c,d){var e;return e=b.currentStyle?b.currentStyle[c]:a.getComputedStyle?a.getComputedStyle(b)[c]:b.style[c],d===!0?parseFloat(e)||0:e},b.offset=function(b){var c=b.getBoundingClientRect(),d=b.ownerDocument;return{width:b.offsetWidth,height:b.offsetHeight,top:c.top+(a.pageYOffset||d.documentElement.scrollTop)-(d.documentElement.clientTop||0),left:c.left+(a.pageXOffset||d.documentElement.scrollLeft)-(d.documentElement.clientLeft||0)}},b.position=function(a){var e,f,g={top:0,left:0};return"fixed"===b.css(a,"position")?f=a.getBoundingClientRect():(e=d(a),f=b.offset(a),f=b.offset(a),c(e,"html")||(g=b.offset(e)),g.top+=b.css(e,"borderTopWidth",!0),g.left+=b.css(e,"borderLeftWidth",!0)),{width:a.offsetWidth,height:a.offsetHeight,top:f.top-g.top-b.css(a,"marginTop",!0),left:f.left-g.left-b.css(a,"marginLeft",!0)}};var d=function(a){var d=a.ownerDocument,e=a.offsetParent||d;if(c(e,"#document"))return d.documentElement;for(;e&&!c(e,"html")&&"static"===b.css(e,"position");)e=e.offsetParent;return e||d.documentElement};return b.height=function(a,c){var d=a.offsetHeight;return c?d+=b.css(a,"marginTop",!0)+b.css(a,"marginBottom",!0):d-=b.css(a,"paddingTop",!0)+b.css(a,"paddingBottom",!0)+b.css(a,"borderTopWidth",!0)+b.css(a,"borderBottomWidth",!0),d},b.width=function(a,c){var d=a.offsetWidth;return c?d+=b.css(a,"marginLeft",!0)+b.css(a,"marginRight",!0):d-=b.css(a,"paddingLeft",!0)+b.css(a,"paddingRight",!0)+b.css(a,"borderLeftWidth",!0)+b.css(a,"borderRightWidth",!0),d},b}]),angular.module("mgcrea.ngStrap.helpers.parseOptions",[]).provider("$parseOptions",function(){var a=this.defaults={regexp:/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/};this.$get=["$parse","$q",function(b,c){function d(d,e){function f(a){return a.map(function(a,b){var c,d,e={};return e[k]=a,c=j(e),d=n(e)||b,{label:c,value:d}})}var g={},h=angular.extend({},a,e);g.$values=[];var i,j,k,l,m,n,o;return g.init=function(){g.$match=i=d.match(h.regexp),j=b(i[2]||i[1]),k=i[4]||i[6],l=i[5],m=b(i[3]||""),n=b(i[2]?i[1]:k),o=b(i[7])},g.valuesFn=function(a,b){return c.when(o(a,b)).then(function(a){return g.$values=a?f(a):{},g.$values})},g.init(),g}return d}]}),angular.module("mgcrea.ngStrap.modal",["mgcrea.ngStrap.helpers.dimensions"]).provider("$modal",function(){var a=this.defaults={animation:"am-fade",backdropAnimation:"am-fade",prefixClass:"modal",placement:"top",template:"modal/modal.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions",function(c,d,e,f,g,h,i){function j(b){function c(a){a.target===a.currentTarget&&("static"===g.backdrop?f.focus():f.hide())}var f={},g=angular.extend({},a,b);f.$promise=l(g.template);var h=f.$scope=g.scope&&g.scope.$new()||d.$new();g.element||g.container||(g.container="body"),m(["title","content"],function(a){g[a]&&(h[a]=g[a])}),h.$hide=function(){h.$$postDigest(function(){f.hide()})},h.$show=function(){h.$$postDigest(function(){f.show()})},h.$toggle=function(){h.$$postDigest(function(){f.toggle()})},g.contentTemplate&&(f.$promise=f.$promise.then(function(a){var c=angular.element(a);return l(g.contentTemplate).then(function(a){var d=k('[ng-bind="content"]',c[0]).removeAttr("ng-bind").html(a);return b.template||d.next().remove(),c[0].outerHTML})}));var j,r,s=angular.element('
');return f.$promise.then(function(a){angular.isObject(a)&&(a=a.data),g.html&&(a=a.replace(q,'ng-bind-html="')),a=n.apply(a),j=e(a),f.init()}),f.init=function(){g.show&&h.$$postDigest(function(){f.show()})},f.destroy=function(){r&&(r.remove(),r=null),s&&(s.remove(),s=null),h.$destroy()},f.show=function(){var a=g.container?k(g.container):null,b=g.container?null:g.element;r=f.$element=j(h,function(){}),r.css({display:"block"}).addClass(g.placement),g.animation&&(g.backdrop&&s.addClass(g.backdropAnimation),r.addClass(g.animation)),g.backdrop&&i.enter(s,p,null,function(){}),i.enter(r,a,b,function(){}),h.$isShown=!0,h.$$phase||h.$digest();var d=r[0];o(function(){d.focus()}),p.addClass(g.prefixClass+"-open"),g.animation&&p.addClass(g.prefixClass+"-with-"+g.animation),g.backdrop&&(r.on("click",c),s.on("click",c)),g.keyboard&&r.on("keyup",f.$onKeyUp)},f.hide=function(){i.leave(r,function(){p.removeClass(g.prefixClass+"-open"),g.animation&&p.addClass(g.prefixClass+"-with-"+g.animation)}),g.backdrop&&i.leave(s,function(){}),h.$isShown=!1,h.$$phase||h.$digest(),g.backdrop&&(r.off("click",c),s.off("click",c)),g.keyboard&&r.off("keyup",f.$onKeyUp)},f.toggle=function(){h.$isShown?f.hide():f.show()},f.focus=function(){r[0].focus()},f.$onKeyUp=function(a){27===a.which&&f.hide()},f}function k(a,c){return angular.element((c||b).querySelectorAll(a))}function l(a){return f.when(g.get(a)||h.get(a)).then(function(b){return angular.isObject(b)?(g.put(a,b.data),b.data):b})}var m=angular.forEach,n=String.prototype.trim,o=c.requestAnimationFrame||c.setTimeout,p=angular.element(c.document.body),q=/ng-bind="/gi;return j}]}).directive("bsModal",["$window","$location","$sce","$modal",function(a,b,c,d){return{restrict:"EAC",scope:!0,link:function(a,b,e){var f={scope:a,element:b,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),angular.forEach(["title","content"],function(b){e[b]&&e.$observe(b,function(d){a[b]=c.trustAsHtml(d)})}),e.bsModal&&a.$watch(e.bsModal,function(b){angular.isObject(b)?angular.extend(a,b):a.content=b},!0);var g=d(f);b.on(e.trigger||"click",g.toggle),a.$on("$destroy",function(){g.destroy(),f=null,g=null})}}}]),angular.module("mgcrea.ngStrap.navbar",[]).provider("$navbar",function(){var a=this.defaults={activeClass:"active",routeAttr:"data-match-route",strict:!1};this.$get=function(){return{defaults:a}}}).directive("bsNavbar",["$window","$location","$navbar",function(a,b,c){var d=c.defaults;return{restrict:"A",link:function(a,c,e){var f=angular.copy(d);angular.forEach(Object.keys(d),function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),a.$watch(function(){return b.path()},function(a){var b=c[0].querySelectorAll("li["+f.routeAttr+"]");angular.forEach(b,function(b){var c=angular.element(b),d=c.attr(f.routeAttr).replace("/","\\/");f.strict&&(d="^"+d+"$");var e=new RegExp(d,["i"]);e.test(a)?c.addClass(f.activeClass):c.removeClass(f.activeClass)})})}}}]),angular.module("mgcrea.ngStrap.popover",["mgcrea.ngStrap.tooltip"]).provider("$popover",function(){var a=this.defaults={animation:"am-fade",placement:"right",template:"popover/popover.tpl.html",contentTemplate:!1,trigger:"click",keyboard:!0,html:!1,title:"",content:"",delay:0,container:!1};this.$get=["$tooltip",function(b){function c(c,d){var e=angular.extend({},a,d),f=b(c,e);return e.content&&(f.$scope.content=e.content),f}return c}]}).directive("bsPopover",["$window","$location","$sce","$popover",function(a,b,c,d){var e=a.requestAnimationFrame||a.setTimeout;return{restrict:"EAC",scope:!0,link:function(a,b,f){var g={scope:a};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation"],function(a){angular.isDefined(f[a])&&(g[a]=f[a])}),angular.forEach(["title","content"],function(b){f[b]&&f.$observe(b,function(d,f){a[b]=c.trustAsHtml(d),angular.isDefined(f)&&e(function(){h&&h.$applyPlacement()})})}),f.bsPopover&&a.$watch(f.bsPopover,function(b,c){angular.isObject(b)?angular.extend(a,b):a.content=b,angular.isDefined(c)&&e(function(){h&&h.$applyPlacement()})},!0);var h=d(b,g);a.$on("$destroy",function(){h.destroy(),g=null,h=null})}}}]),angular.module("mgcrea.ngStrap.scrollspy",["mgcrea.ngStrap.helpers.debounce","mgcrea.ngStrap.helpers.dimensions"]).provider("$scrollspy",function(){var a=this.$$spies={},c=this.defaults={debounce:150,throttle:100,offset:100};this.$get=["$window","$document","$rootScope","dimensions","debounce","throttle",function(d,e,f,g,h,i){function j(a,b){return a[0].nodeName&&a[0].nodeName.toLowerCase()===b.toLowerCase()}function k(e){var k=angular.extend({},c,e);k.element||(k.element=n);var o=j(k.element,"body"),p=o?l:k.element,q=o?"window":k.id;if(a[q])return a[q].$$count++,a[q];var r,s,t,u,v,w,x,y,z={},A=z.$trackedElements=[],B=[];return z.init=function(){this.$$count=1,u=h(this.checkPosition,k.debounce),v=i(this.checkPosition,k.throttle),p.on("click",this.checkPositionWithEventLoop),l.on("resize",u),p.on("scroll",v),w=h(this.checkOffsets,k.debounce),r=f.$on("$viewContentLoaded",w),s=f.$on("$includeContentLoaded",w),w(),q&&(a[q]=z)},z.destroy=function(){this.$$count--,this.$$count>0||(p.off("click",this.checkPositionWithEventLoop),l.off("resize",u),p.off("scroll",u),r(),s())},z.checkPosition=function(){if(B.length){if(y=(o?d.pageYOffset:p.prop("scrollTop"))||0,x=Math.max(d.innerHeight,m.prop("clientHeight")),yB[a+1].offsetTop))return z.$activateElement(B[a])}},z.checkPositionWithEventLoop=function(){setTimeout(this.checkPosition,1)},z.$activateElement=function(a){if(t){var b=z.$getTrackedElement(t);b&&(b.source.removeClass("active"),j(b.source,"li")&&j(b.source.parent().parent(),"li")&&b.source.parent().parent().removeClass("active"))}t=a.target,a.source.addClass("active"),j(a.source,"li")&&j(a.source.parent().parent(),"li")&&a.source.parent().parent().addClass("active")},z.$getTrackedElement=function(a){return A.filter(function(b){return b.target===a})[0]},z.checkOffsets=function(){angular.forEach(A,function(a){var c=b.querySelector(a.target);a.offsetTop=c?g.offset(c).top:null,k.offset&&null!==a.offsetTop&&(a.offsetTop-=1*k.offset)}),B=A.filter(function(a){return null!==a.offsetTop}).sort(function(a,b){return a.offsetTop-b.offsetTop}),u()},z.trackElement=function(a,b){A.push({target:a,source:b})},z.untrackElement=function(a,b){for(var c,d=A.length;d--;)if(A[d].target===a&&A[d].source===b){c=d;break}A=A.splice(c,1)},z.activate=function(a){A[a].addClass("active")},z.init(),z}var l=angular.element(d),m=angular.element(e.prop("documentElement")),n=angular.element(d.document.body);return k}]}).directive("bsScrollspy",["$rootScope","debounce","dimensions","$scrollspy",function(a,b,c,d){return{restrict:"EAC",link:function(a,b,c){var e={scope:a}; -angular.forEach(["offset","target"],function(a){angular.isDefined(c[a])&&(e[a]=c[a])});var f=d(e);f.trackElement(e.target,b),a.$on("$destroy",function(){f.untrackElement(e.target,b),f.destroy(),e=null,f=null})}}}]).directive("bsScrollspyList",["$rootScope","debounce","dimensions","$scrollspy",function(){return{restrict:"A",compile:function(a){var b=a[0].querySelectorAll("li > a[href]");angular.forEach(b,function(a){var b=angular.element(a);b.parent().attr("bs-scrollspy","").attr("data-target",b.attr("href"))})}}}]),angular.module("mgcrea.ngStrap.select",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$select",function(){var a=this.defaults={animation:"am-fade",prefixClass:"select",placement:"bottom-left",template:"select/select.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,multiple:!1,sort:!0,caretHtml:' ',placeholder:"Choose among the following...",maxLength:3,maxLengthHtml:"selected"};this.$get=["$window","$document","$rootScope","$tooltip",function(b,c,d,e){function f(b,c,d){var f={},h=angular.extend({},a,d);f=e(b,h);var i=d.scope,j=f.$scope;j.$matches=[],j.$activeIndex=0,j.$isMultiple=h.multiple,j.$activate=function(a){j.$$postDigest(function(){f.activate(a)})},j.$select=function(a){j.$$postDigest(function(){f.select(a)})},j.$isVisible=function(){return f.$isVisible()},j.$isActive=function(a){return f.$isActive(a)},f.update=function(a){j.$matches=a,f.$updateActiveIndex()},f.activate=function(a){return h.multiple?(j.$activeIndex.sort(),f.$isActive(a)?j.$activeIndex.splice(j.$activeIndex.indexOf(a),1):j.$activeIndex.push(a),h.sort&&j.$activeIndex.sort()):j.$activeIndex=a,j.$activeIndex},f.select=function(a){var d=j.$matches[a].value;f.activate(a),c.$setViewValue(h.multiple?j.$activeIndex.map(function(a){return j.$matches[a].value}):d),c.$render(),i&&i.$digest(),h.multiple||("focus"===h.trigger?b[0].blur():f.$isShown&&f.hide()),j.$emit("$select.select",d,a)},f.$updateActiveIndex=function(){c.$modelValue&&j.$matches.length?j.$activeIndex=h.multiple&&angular.isArray(c.$modelValue)?c.$modelValue.map(function(a){return f.$getIndex(a)}):f.$getIndex(c.$modelValue):j.$activeIndex>=j.$matches.length&&(j.$activeIndex=h.multiple?[]:0)},f.$isVisible=function(){return h.minLength&&c?j.$matches.length&&c.$viewValue.length>=h.minLength:j.$matches.length},f.$isActive=function(a){return h.multiple?-1!==j.$activeIndex.indexOf(a):j.$activeIndex===a},f.$getIndex=function(a){var b=j.$matches.length,c=b;if(b){for(c=b;c--&&j.$matches[c].value!==a;);if(!(0>c))return c}},f.$onMouseDown=function(a){if(a.preventDefault(),a.stopPropagation(),g){var b=angular.element(a.target);b.triggerHandler("click")}},f.$onKeyDown=function(a){if(/(38|40|13)/.test(a.keyCode)){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return f.select(j.$activeIndex);38===a.keyCode&&j.$activeIndex>0?j.$activeIndex--:40===a.keyCode&&j.$activeIndex'),i.after(b)}var j=e(c.ngOptions),k=d(b,g,h),l=j.$match[7].replace(/\|.+/,"").trim();a.$watch(l,function(){j.valuesFn(a,g).then(function(a){k.update(a),g.$render()})},!0),a.$watch(c.ngModel,function(){k.$updateActiveIndex()},!0),g.$render=function(){var a,d;h.multiple&&angular.isArray(g.$modelValue)?(a=g.$modelValue.map(function(a){return d=k.$getIndex(a),angular.isDefined(d)?k.$scope.$matches[d].label:!1}).filter(angular.isDefined),a=a.length>(h.maxLength||f.maxLength)?a.length+" "+(h.maxLengthHtml||f.maxLengthHtml):a.join(", ")):(d=k.$getIndex(g.$modelValue),a=angular.isDefined(d)?k.$scope.$matches[d].label:!1),b.html((a?a:c.placeholder||f.placeholder)+f.caretHtml)},a.$on("$destroy",function(){k.destroy(),h=null,k=null})}}}]),angular.module("mgcrea.ngStrap.tab",[]).run(["$templateCache",function(a){a.put("$pane","{{pane.content}}")}]).provider("$tab",function(){var a=this.defaults={animation:"am-fade",template:"tab/tab.tpl.html"};this.$get=function(){return{defaults:a}}}).directive("bsTabs",["$window","$animate","$tab",function(a,b,c){var d=c.defaults;return{restrict:"EAC",scope:!0,require:"?ngModel",templateUrl:function(a,b){return b.template||d.template},link:function(a,b,c,e){var f=d;angular.forEach(["animation"],function(a){angular.isDefined(c[a])&&(f[a]=c[a])}),c.bsTabs&&a.$watch(c.bsTabs,function(b){a.panes=b},!0),b.addClass("tabs"),f.animation&&b.addClass(f.animation),a.active=a.activePane=0,a.setActive=function(b){a.active=b,e&&e.$setViewValue(b)},e&&(e.$render=function(){a.active=1*e.$modelValue})}}}]),angular.module("mgcrea.ngStrap.timepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$timepicker",function(){var a=this.defaults={animation:"am-fade",prefixClass:"timepicker",placement:"bottom-left",template:"timepicker/timepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:"date",timeFormat:"shortTime",autoclose:!1,minTime:-1/0,maxTime:+1/0,length:5,hourStep:1,minuteStep:5};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","$tooltip",function(b,c,d,e,f,g,h){function i(b,c,d){function e(a,c){if(b[0].createTextRange){var d=b[0].createTextRange();d.collapse(!0),d.moveStart("character",a),d.moveEnd("character",c),d.select()}else b[0].setSelectionRange?b[0].setSelectionRange(a,c):angular.isUndefined(b[0].selectionStart)&&(b[0].selectionStart=a,b[0].selectionEnd=c)}function i(){b[0].focus()}var l=h(b,angular.extend({},a,d)),m=d.scope,n=l.$options,o=l.$scope,p=0,q=c.$dateValue||new Date,r={hour:q.getHours(),meridian:q.getHours()<12,minute:q.getMinutes(),second:q.getSeconds(),millisecond:q.getMilliseconds()},s=f.DATETIME_FORMATS[n.timeFormat]||n.timeFormat,t=/(h+)[:]?(m+)[ ]?(a?)/i.exec(s).slice(1);o.$select=function(a,b){l.select(a,b)},o.$moveIndex=function(a,b){l.$moveIndex(a,b)},o.$switchMeridian=function(a){l.switchMeridian(a)},l.update=function(a){angular.isDate(a)&&!isNaN(a.getTime())?(l.$date=a,angular.extend(r,{hour:a.getHours(),minute:a.getMinutes(),second:a.getSeconds(),millisecond:a.getMilliseconds()}),l.$build()):l.$isBuilt||l.$build()},l.select=function(a,b,d){isNaN(c.$dateValue.getTime())&&(c.$dateValue=new Date(1970,0,1)),angular.isDate(a)||(a=new Date(a)),0===b?c.$dateValue.setHours(a.getHours()):1===b&&c.$dateValue.setMinutes(a.getMinutes()),c.$setViewValue(c.$dateValue),c.$render(),n.autoclose&&!d&&l.hide(!0)},l.switchMeridian=function(a){var b=(a||c.$dateValue).getHours();c.$dateValue.setHours(12>b?b+12:b-12),c.$render()},l.$build=function(){var a,b,c=o.midIndex=parseInt(n.length/2,10),d=[];for(a=0;an.maxTime},l.$moveIndex=function(a,b){var c;0===b?(c=new Date(1970,0,1,r.hour+a*n.length,r.minute),angular.extend(r,{hour:c.getHours()})):1===b&&(c=new Date(1970,0,1,r.hour,r.minute+a*n.length*5),angular.extend(r,{minute:c.getMinutes()})),l.$build()},l.$onMouseDown=function(a){if("input"!==a.target.nodeName.toLowerCase()&&a.preventDefault(),a.stopPropagation(),j){var b=angular.element(a.target);"button"!==b[0].nodeName.toLowerCase()&&(b=b.parent()),b.triggerHandler("click")}},l.$onKeyDown=function(a){if(/(38|37|39|40|13)/.test(a.keyCode)&&!a.shiftKey&&!a.altKey){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return l.hide(!0);var b=new Date(l.$date),c=b.getHours(),d=g(b,"h").length,f=b.getMinutes(),h=g(b,"mm").length,i=/(37|39)/.test(a.keyCode),j=2+1*!!t[2];if(i&&(37===a.keyCode?p=1>p?j-1:p-1:39===a.keyCode&&(p=j-1>p?p+1:0)),0===p){if(i)return e(0,d);38===a.keyCode?b.setHours(c-n.hourStep):40===a.keyCode&&b.setHours(c+n.hourStep)}else if(1===p){if(i)return e(d+1,d+1+h);38===a.keyCode?b.setMinutes(f-n.minuteStep):40===a.keyCode&&b.setMinutes(f+n.minuteStep)}else if(2===p){if(i)return e(d+1+h+1,d+1+h+3);l.switchMeridian()}l.select(b,p,!0),m.$digest()}};var u=l.init;l.init=function(){return k&&n.useNative?(b.prop("type","time"),void b.css("-webkit-appearance","textfield")):(j&&(b.prop("type","text"),b.attr("readonly","true"),b.on("click",i)),void u())};var v=l.destroy;l.destroy=function(){k&&n.useNative&&b.off("click",i),v()};var w=l.show;l.show=function(){w(),setTimeout(function(){l.$element.on(j?"touchstart":"mousedown",l.$onMouseDown),n.keyboard&&b.on("keydown",l.$onKeyDown)})};var x=l.hide;return l.hide=function(a){l.$element.off(j?"touchstart":"mousedown",l.$onMouseDown),n.keyboard&&b.off("keydown",l.$onKeyDown),x(a)},l}var j=(angular.element(b.document.body),"createTouch"in b.document),k=/(ip(a|o)d|iphone|android)/gi.test(b.navigator.userAgent);return a.lang||(a.lang=f.id),i.defaults=a,i}]}).directive("bsTimepicker",["$window","$parse","$q","$locale","dateFilter","$timepicker","$dateParser","$timeout",function(a,b,c,d,e,f,g){{var h=f.defaults,i=/(ip(a|o)d|iphone|android)/gi.test(a.navigator.userAgent);a.requestAnimationFrame||a.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(a,b,c,d){var j={scope:a,controller:d};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","timeType","timeFormat","useNative","lang"],function(a){angular.isDefined(c[a])&&(j[a]=c[a])}),i&&(j.useNative||h.useNative)&&(j.timeFormat="HH:mm");var k=f(b,d,j);j=k.$options;var l=g({format:j.timeFormat,lang:j.lang});angular.forEach(["minTime","maxTime"],function(a){angular.isDefined(c[a])&&c.$observe(a,function(b){k.$options[a]="now"===b?(new Date).setFullYear(1970,0,1):angular.isString(b)&&b.match(/^".+"$/)?+new Date(b.substr(1,b.length-2)):l.parse(b),!isNaN(k.$options[a])&&k.$build()})}),a.$watch(c.ngModel,function(){k.update(d.$dateValue)},!0),d.$parsers.unshift(function(a){if(!a)return void d.$setValidity("date",!0);var b=l.parse(a,d.$dateValue);if(!b||isNaN(b.getTime()))d.$setValidity("date",!1);else{var c=b.getTime()>=j.minTime&&b.getTime()<=j.maxTime;d.$setValidity("date",c),c&&(d.$dateValue=b)}return"string"===j.timeType?e(a,j.timeFormat):"number"===j.timeType?d.$dateValue.getTime():"iso"===j.timeType?d.$dateValue.toISOString():d.$dateValue}),d.$formatters.push(function(a){var b="string"===j.timeType?l.parse(a,d.$dateValue):new Date(a);return d.$dateValue=b,d.$dateValue}),d.$render=function(){b.val(isNaN(d.$dateValue.getTime())?"":e(d.$dateValue,j.timeFormat))},a.$on("$destroy",function(){k.destroy(),j=null,k=null})}}}]),angular.module("mgcrea.ngStrap.tooltip",["ngAnimate","mgcrea.ngStrap.helpers.dimensions"]).provider("$tooltip",function(){var a=this.defaults={animation:"am-fade",prefixClass:"tooltip",container:!1,placement:"top",template:"tooltip/tooltip.tpl.html",contentTemplate:!1,trigger:"hover focus",keyboard:!1,html:!1,show:!1,title:"",type:"",delay:0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions","$$animateReflow",function(c,d,e,f,g,h,i,j,k,l){function m(b,c){function f(){return"body"===j.container?k.offset(b[0]):k.position(b[0])}function g(a,b,c,d){var e,f=a.split("-");switch(f[0]){case"right":e={top:b.top+b.height/2-d/2,left:b.left+b.width};break;case"bottom":e={top:b.top+b.height,left:b.left+b.width/2-c/2};break;case"left":e={top:b.top+b.height/2-d/2,left:b.left-c};break;default:e={top:b.top-d,left:b.left+b.width/2-c/2}}if(!f[1])return e;if("top"===f[0]||"bottom"===f[0])switch(f[1]){case"left":e.left=b.left;break;case"right":e.left=b.left+b.width-c}else if("left"===f[0]||"right"===f[0])switch(f[1]){case"top":e.top=b.top-d;break;case"bottom":e.top=b.top+b.height}return e}var h={},j=h.$options=angular.extend({},a,c);h.$promise=o(j.template);var m=h.$scope=j.scope&&j.scope.$new()||d.$new();j.delay&&angular.isString(j.delay)&&(j.delay=parseFloat(j.delay)),j.title&&(h.$scope.title=j.title),m.$hide=function(){m.$$postDigest(function(){h.hide()})},m.$show=function(){m.$$postDigest(function(){h.show()})},m.$toggle=function(){m.$$postDigest(function(){h.toggle()})},h.$isShown=m.$isShown=!1;var s,t;j.contentTemplate&&(h.$promise=h.$promise.then(function(a){var b=angular.element(a);return o(j.contentTemplate).then(function(a){return n('[ng-bind="content"]',b[0]).removeAttr("ng-bind").html(a),b[0].outerHTML})}));var u,v,w,x;return h.$promise.then(function(a){angular.isObject(a)&&(a=a.data),j.html&&(a=a.replace(r,'ng-bind-html="')),a=p.apply(a),w=a,u=e(a),h.init()}),h.init=function(){j.delay&&angular.isNumber(j.delay)&&(j.delay={show:j.delay,hide:j.delay}),"self"===j.container?x=b:j.container&&(x=n(j.container));var a=j.trigger.split(" ");angular.forEach(a,function(a){"click"===a?b.on("click",h.toggle):"manual"!==a&&(b.on("hover"===a?"mouseenter":"focus",h.enter),b.on("hover"===a?"mouseleave":"blur",h.leave),"hover"!==a&&b.on(q?"touchstart":"mousedown",h.$onFocusElementMouseDown))}),j.show&&m.$$postDigest(function(){"focus"===j.trigger?b[0].focus():h.show()})},h.destroy=function(){for(var a=j.trigger.split(" "),c=a.length;c--;){var d=a[c];"click"===d?b.off("click",h.toggle):"manual"!==d&&(b.off("hover"===d?"mouseenter":"focus",h.enter),b.off("hover"===d?"mouseleave":"blur",h.leave),"hover"!==d&&b.off(q?"touchstart":"mousedown",h.$onFocusElementMouseDown))}v&&(v.remove(),v=null),m.$destroy()},h.enter=function(){return clearTimeout(s),t="in",j.delay&&j.delay.show?void(s=setTimeout(function(){"in"===t&&h.show()},j.delay.show)):h.show()},h.show=function(){var a=j.container?x:null,c=j.container?null:b;v&&v.remove(),v=h.$element=u(m,function(){}),v.css({top:"0px",left:"0px",display:"block"}).addClass(j.placement),j.animation&&v.addClass(j.animation),j.type&&v.addClass(j.prefixClass+"-"+j.type),i.enter(v,a,c,function(){}),h.$isShown=m.$isShown=!0,m.$$phase||m.$digest(),l(h.$applyPlacement),j.keyboard&&("focus"!==j.trigger?(h.focus(),v.on("keyup",h.$onKeyUp)):b.on("keyup",h.$onFocusKeyUp))},h.leave=function(){return clearTimeout(s),t="out",j.delay&&j.delay.hide?void(s=setTimeout(function(){"out"===t&&h.hide()},j.delay.hide)):h.hide()},h.hide=function(a){return h.$isShown?(i.leave(v,function(){v=null}),h.$isShown=m.$isShown=!1,m.$$phase||m.$digest(),j.keyboard&&v.off("keyup",h.$onKeyUp),a&&"focus"===j.trigger?b[0].blur():void 0):void 0},h.toggle=function(){h.$isShown?h.leave():h.enter()},h.focus=function(){v[0].focus()},h.$applyPlacement=function(){if(v){var a=f(),b=v.prop("offsetWidth"),c=v.prop("offsetHeight"),d=g(j.placement,a,b,c);d.top+="px",d.left+="px",v.css(d)}},h.$onKeyUp=function(a){27===a.which&&h.hide()},h.$onFocusKeyUp=function(a){27===a.which&&b[0].blur()},h.$onFocusElementMouseDown=function(a){a.preventDefault(),a.stopPropagation(),h.$isShown?b[0].blur():b[0].focus()},h}function n(a,c){return angular.element((c||b).querySelectorAll(a))}function o(a){return f.when(g.get(a)||h.get(a)).then(function(b){return angular.isObject(b)?(g.put(a,b.data),b.data):b})}var p=String.prototype.trim,q="createTouch"in c.document,r=/ng-bind="/gi;return m}]}).directive("bsTooltip",["$window","$location","$sce","$tooltip","$$animateReflow",function(a,b,c,d,e){return{restrict:"EAC",scope:!0,link:function(a,b,f){var g={scope:a};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation","type"],function(a){angular.isDefined(f[a])&&(g[a]=f[a])}),angular.forEach(["title"],function(b){f[b]&&f.$observe(b,function(d,f){a[b]=c.trustAsHtml(d),angular.isDefined(f)&&e(function(){h&&h.$applyPlacement()})})}),f.bsTooltip&&a.$watch(f.bsTooltip,function(b,c){angular.isObject(b)?angular.extend(a,b):a.content=b,angular.isDefined(c)&&e(function(){h&&h.$applyPlacement()})},!0);var h=d(b,g);a.$on("$destroy",function(){h.destroy(),g=null,h=null})}}}]),angular.module("mgcrea.ngStrap.typeahead",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$typeahead",function(){var a=this.defaults={animation:"am-fade",prefixClass:"typeahead",placement:"bottom-left",template:"typeahead/typeahead.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,minLength:1,filter:"filter",limit:6};this.$get=["$window","$rootScope","$tooltip",function(b,c,d){function e(b,c){var e={},f=angular.extend({},a,c),g=f.controller;e=d(b,f);var h=c.scope,i=e.$scope;i.$matches=[],i.$activeIndex=0,i.$activate=function(a){i.$$postDigest(function(){e.activate(a)})},i.$select=function(a){i.$$postDigest(function(){e.select(a)})},i.$isVisible=function(){return e.$isVisible()},e.update=function(a){i.$matches=a,i.$activeIndex>=a.length&&(i.$activeIndex=0)},e.activate=function(a){i.$activeIndex=a},e.select=function(a){var c=i.$matches[a].value;g&&(g.$setViewValue(c),g.$render(),h&&h.$digest()),"focus"===f.trigger?b[0].blur():e.$isShown&&e.hide(),i.$activeIndex=0,i.$emit("$typeahead.select",c,a)},e.$isVisible=function(){return f.minLength&&g?i.$matches.length&&angular.isString(g.$viewValue)&&g.$viewValue.length>=f.minLength:!!i.$matches.length},e.$onMouseDown=function(a){a.preventDefault(),a.stopPropagation()},e.$onKeyDown=function(a){if(/(38|40|13)/.test(a.keyCode)){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return e.select(i.$activeIndex);38===a.keyCode&&i.$activeIndex>0?i.$activeIndex--:40===a.keyCode&&i.$activeIndexj&&(a=a.slice(0,j)),m.update(a)})}),a.$on("$destroy",function(){m.destroy(),h=null,m=null})}}}])}(window,document),function(){"use strict";angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(a){a.put("alert/alert.tpl.html",'
 
')}]),angular.module("mgcrea.ngStrap.aside").run(["$templateCache",function(a){a.put("aside/aside.tpl.html",'')}]),angular.module("mgcrea.ngStrap.datepicker").run(["$templateCache",function(a){a.put("datepicker/datepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.dropdown").run(["$templateCache",function(a){a.put("dropdown/dropdown.tpl.html",'')}]),angular.module("mgcrea.ngStrap.modal").run(["$templateCache",function(a){a.put("modal/modal.tpl.html",'')}]),angular.module("mgcrea.ngStrap.popover").run(["$templateCache",function(a){a.put("popover/popover.tpl.html",'

')}]),angular.module("mgcrea.ngStrap.select").run(["$templateCache",function(a){a.put("select/select.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tab").run(["$templateCache",function(a){a.put("tab/tab.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.timepicker").run(["$templateCache",function(a){a.put("timepicker/timepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tooltip").run(["$templateCache",function(a){a.put("tooltip/tooltip.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.typeahead").run(["$templateCache",function(a){a.put("typeahead/typeahead.tpl.html",'')}])}(window,document); -//# sourceMappingURL=angular-strap.min.map \ No newline at end of file +!function(e,t){"use strict";angular.module("mgcrea.ngStrap",["mgcrea.ngStrap.modal","mgcrea.ngStrap.aside","mgcrea.ngStrap.alert","mgcrea.ngStrap.button","mgcrea.ngStrap.select","mgcrea.ngStrap.datepicker","mgcrea.ngStrap.timepicker","mgcrea.ngStrap.navbar","mgcrea.ngStrap.tooltip","mgcrea.ngStrap.popover","mgcrea.ngStrap.dropdown","mgcrea.ngStrap.typeahead","mgcrea.ngStrap.scrollspy","mgcrea.ngStrap.affix","mgcrea.ngStrap.tab"]),angular.module("mgcrea.ngStrap.affix",["mgcrea.ngStrap.helpers.dimensions","mgcrea.ngStrap.helpers.debounce"]).provider("$affix",function(){var e=this.defaults={offsetTop:"auto"};this.$get=["$window","debounce","dimensions",function(t,n,a){function o(o,l){function s(e,t,n){var a=u(),o=c();return h>=a?"top":null!==e&&a+e<=t.top?"middle":null!==v&&t.top+n+g>=o-v?"bottom":"middle"}function u(){return p[0]===t?t.pageYOffset:p[0]===t}function c(){return p[0]===t?t.document.body.scrollHeight:p[0].scrollHeight}var d={},f=angular.extend({},e,l),p=f.target,m="affix affix-top affix-bottom",g=0,$=0,h=0,v=0,y=null,w=null,b=o.parent();if(f.offsetParent)if(f.offsetParent.match(/^\d+$/))for(var k=0;k<1*f.offsetParent-1;k++)b=b.parent();else b=angular.element(f.offsetParent);return d.init=function(){d.$parseOffsets(),$=a.offset(o[0]).top+g,p.on("scroll",d.checkPosition),p.on("click",d.checkPositionWithEventLoop),r.on("resize",d.$debouncedOnResize),d.checkPosition(),d.checkPositionWithEventLoop()},d.destroy=function(){p.off("scroll",d.checkPosition),p.off("click",d.checkPositionWithEventLoop),r.off("resize",d.$debouncedOnResize)},d.checkPositionWithEventLoop=function(){setTimeout(d.checkPosition,1)},d.checkPosition=function(){var e=u(),t=a.offset(o[0]),n=a.height(o[0]),r=s(w,t,n);y!==r&&(y=r,o.removeClass(m).addClass("affix"+("middle"!==r?"-"+r:"")),"top"===r?(w=null,o.css("position",f.offsetParent?"":"relative"),o.css("top","")):"bottom"===r?(w=f.offsetUnpin?-(1*f.offsetUnpin):t.top-e,o.css("position",f.offsetParent?"":"relative"),o.css("top",f.offsetParent?"":i[0].offsetHeight-v-n-$+"px")):(w=null,o.css("position","fixed"),o.css("top",g+"px")))},d.$onResize=function(){d.$parseOffsets(),d.checkPosition()},d.$debouncedOnResize=n(d.$onResize,50),d.$parseOffsets=function(){o.css("position",f.offsetParent?"":"relative"),f.offsetTop&&("auto"===f.offsetTop&&(f.offsetTop="+0"),f.offsetTop.match(/^[-+]\d+$/)?(g=1*-f.offsetTop,h=f.offsetParent?a.offset(b[0]).top+1*f.offsetTop:a.offset(o[0]).top-a.css(o[0],"marginTop",!0)+1*f.offsetTop):h=1*f.offsetTop),f.offsetBottom&&(v=f.offsetParent&&f.offsetBottom.match(/^[-+]\d+$/)?c()-(a.offset(b[0]).top+a.height(b[0]))+1*f.offsetBottom+1:1*f.offsetBottom)},d.init(),d}var i=angular.element(t.document.body),r=angular.element(t);return o}]}).directive("bsAffix",["$affix","$window",function(e,t){return{restrict:"EAC",require:"^?bsAffixTarget",link:function(n,a,o,i){var r={scope:n,offsetTop:"auto",target:i?i.$element:angular.element(t)};angular.forEach(["offsetTop","offsetBottom","offsetParent","offsetUnpin"],function(e){angular.isDefined(o[e])&&(r[e]=o[e])});var l=e(a,r);n.$on("$destroy",function(){r=null,l=null})}}}]).directive("bsAffixTarget",function(){return{controller:["$element",function(e){this.$element=e}]}}),angular.module("mgcrea.ngStrap.alert",["mgcrea.ngStrap.modal"]).provider("$alert",function(){var e=this.defaults={animation:"am-fade",prefixClass:"alert",placement:null,template:"alert/alert.tpl.html",container:!1,element:null,backdrop:!1,keyboard:!0,show:!0,duration:!1,type:!1};this.$get=["$modal","$timeout",function(t,n){function a(a){var o={},i=angular.extend({},e,a);o=t(i),i.type&&(o.$scope.type=i.type);var r=o.show;return i.duration&&(o.show=function(){r(),n(function(){o.hide()},1e3*i.duration)}),o}return a}]}).directive("bsAlert",["$window","$location","$sce","$alert",function(e,t,n,a){e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,t,o){var i={scope:e,element:t,show:!1};angular.forEach(["template","placement","keyboard","html","container","animation","duration"],function(e){angular.isDefined(o[e])&&(i[e]=o[e])}),angular.forEach(["title","content","type"],function(t){o[t]&&o.$observe(t,function(a){e[t]=n.trustAsHtml(a)})}),o.bsAlert&&e.$watch(o.bsAlert,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var r=a(i);t.on(o.trigger||"click",r.toggle),e.$on("$destroy",function(){r.destroy(),i=null,r=null})}}}]),angular.module("mgcrea.ngStrap.aside",["mgcrea.ngStrap.modal"]).provider("$aside",function(){var e=this.defaults={animation:"am-fade-and-slide-right",prefixClass:"aside",placement:"right",template:"aside/aside.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$modal",function(t){function n(n){var a={},o=angular.extend({},e,n);return a=t(o)}return n}]}).directive("bsAside",["$window","$location","$sce","$aside",function(e,t,n,a){e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,t,o){var i={scope:e,element:t,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(e){angular.isDefined(o[e])&&(i[e]=o[e])}),angular.forEach(["title","content"],function(t){o[t]&&o.$observe(t,function(a){e[t]=n.trustAsHtml(a)})}),o.bsAside&&e.$watch(o.bsAside,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var r=a(i);t.on(o.trigger||"click",r.toggle),e.$on("$destroy",function(){r.destroy(),i=null,r=null})}}}]),angular.module("mgcrea.ngStrap.button",["ngAnimate"]).provider("$button",function(){var e=this.defaults={activeClass:"active",toggleEvent:"click"};this.$get=function(){return{defaults:e}}}).directive("bsCheckboxGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var n=e[0].querySelectorAll('input[type="checkbox"]');angular.forEach(n,function(e){var n=angular.element(e);n.attr("bs-checkbox",""),n.attr("ng-model",t.ngModel+"."+n.attr("value"))})}}}).directive("bsCheckbox",["$button","$$rAF",function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,o,i,r){var l=n,s="INPUT"===o[0].nodeName,u=s?o.parent():o,c=angular.isDefined(i.trueValue)?i.trueValue:!0;a.test(i.trueValue)&&(c=e.$eval(i.trueValue));var d=angular.isDefined(i.falseValue)?i.falseValue:!1;a.test(i.falseValue)&&(d=e.$eval(i.falseValue));var f="boolean"!=typeof c||"boolean"!=typeof d;f&&(r.$parsers.push(function(e){return e?c:d}),e.$watch(i.ngModel,function(){r.$render()})),r.$render=function(){var e=angular.equals(r.$modelValue,c);t(function(){s&&(o[0].checked=e),u.toggleClass(l.activeClass,e)})},o.bind(l.toggleEvent,function(){e.$apply(function(){s||r.$setViewValue(!u.hasClass("active")),f||r.$render()})})}}}]).directive("bsRadioGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var n=e[0].querySelectorAll('input[type="radio"]');angular.forEach(n,function(e){angular.element(e).attr("bs-radio",""),angular.element(e).attr("ng-model",t.ngModel)})}}}).directive("bsRadio",["$button","$$rAF",function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,o,i,r){var l=n,s="INPUT"===o[0].nodeName,u=s?o.parent():o,c=a.test(i.value)?e.$eval(i.value):i.value;r.$render=function(){var e=angular.equals(r.$modelValue,c);t(function(){s&&(o[0].checked=e),u.toggleClass(l.activeClass,e)})},o.bind(l.toggleEvent,function(){e.$apply(function(){r.$setViewValue(c),r.$render()})})}}}]),angular.module("mgcrea.ngStrap.datepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$datepicker",function(){var e=this.defaults={animation:"am-fade",prefixClass:"datepicker",placement:"bottom-left",template:"datepicker/datepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!1,dateType:"date",dateFormat:"shortDate",strictFormat:!1,autoclose:!1,minDate:-1/0,maxDate:+1/0,startView:0,minView:0,startWeek:0};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","datepickerViews","$tooltip",function(t,n,a,o,i,r,l,s){function u(t,n,a){function o(e){e.selected=r.$isSelected(e.date)}function i(){t[0].focus()}var r=s(t,angular.extend({},e,a)),u=a.scope,f=r.$options,p=r.$scope;f.startView&&(f.startView-=f.minView);var m=l(r);r.$views=m.views;var g=m.viewDate;p.$mode=f.startView;var $=r.$views[p.$mode];p.$select=function(e){r.select(e)},p.$selectPane=function(e){r.$selectPane(e)},p.$toggleMode=function(){r.setMode((p.$mode+1)%r.$views.length)},r.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())&&(r.$date=e,$.update.call($,e)),r.$build(!0)},r.select=function(e,t){angular.isDate(n.$dateValue)||(n.$dateValue=new Date(e)),n.$dateValue.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),!p.$mode||t?(n.$setViewValue(n.$dateValue),n.$render(),f.autoclose&&!t&&r.hide(!0)):(angular.extend(g,{year:e.getFullYear(),month:e.getMonth(),date:e.getDate()}),r.setMode(p.$mode-1),r.$build())},r.setMode=function(e){p.$mode=e,$=r.$views[p.$mode],r.$build()},r.$build=function(e){e===!0&&$.built||(e!==!1||$.built)&&$.build.call($)},r.$updateSelected=function(){for(var e=0,t=p.rows.length;t>e;e++)angular.forEach(p.rows[e],o)},r.$isSelected=function(e){return $.isSelected(e)},r.$selectPane=function(e){var t=$.steps,n=new Date(Date.UTC(g.year+(t.year||0)*e,g.month+(t.month||0)*e,g.date+(t.day||0)*e));angular.extend(g,{year:n.getUTCFullYear(),month:n.getUTCMonth(),date:n.getUTCDate()}),r.$build()},r.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),c){var t=angular.element(e.target);"button"!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler("click")}},r.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return p.$mode?p.$apply(function(){r.setMode(p.$mode-1)}):r.hide(!0);$.onKeyDown(e),u.$digest()}};var h=r.init;r.init=function(){return d&&f.useNative?(t.prop("type","date"),void t.css("-webkit-appearance","textfield")):(c&&(t.prop("type","text"),t.attr("readonly","true"),t.on("click",i)),void h())};var v=r.destroy;r.destroy=function(){d&&f.useNative&&t.off("click",i),v()};var y=r.show;r.show=function(){y(),setTimeout(function(){r.$element.on(c?"touchstart":"mousedown",r.$onMouseDown),f.keyboard&&t.on("keydown",r.$onKeyDown)})};var w=r.hide;return r.hide=function(e){r.$element.off(c?"touchstart":"mousedown",r.$onMouseDown),f.keyboard&&t.off("keydown",r.$onKeyDown),w(e)},r}var c=(angular.element(t.document.body),"createTouch"in t.document),d=/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent);return e.lang||(e.lang=i.id),u.defaults=e,u}]}).directive("bsDatepicker",["$window","$parse","$q","$locale","dateFilter","$datepicker","$dateParser","$timeout",function(e,t,n,a,o,i,r){var l=(i.defaults,/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent)),s=function(e){return!isNaN(parseFloat(e))&&isFinite(e)};return{restrict:"EAC",require:"ngModel",link:function(e,t,n,a){var u={scope:e,controller:a};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","dateType","dateFormat","strictFormat","startWeek","useNative","lang","startView","minView"],function(e){angular.isDefined(n[e])&&(u[e]=n[e])}),l&&u.useNative&&(u.dateFormat="yyyy-MM-dd");var c=i(t,a,u);u=c.$options,angular.forEach(["minDate","maxDate"],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){if("today"===t){var n=new Date;c.$options[e]=+new Date(n.getFullYear(),n.getMonth(),n.getDate()+("maxDate"===e?1:0),0,0,0,"minDate"===e?0:-1)}else c.$options[e]=angular.isString(t)&&t.match(/^".+"$/)?+new Date(t.substr(1,t.length-2)):s(t)?+new Date(parseInt(t,10)):+new Date(t);!isNaN(c.$options[e])&&c.$build(!1)})}),e.$watch(n.ngModel,function(){c.update(a.$dateValue)},!0);var d=r({format:u.dateFormat,lang:u.lang,strict:u.strictFormat});a.$parsers.unshift(function(e){if(!e)return void a.$setValidity("date",!0);var t=d.parse(e,a.$dateValue);if(!t||isNaN(t.getTime()))return void a.$setValidity("date",!1);var n=(isNaN(c.$options.minDate)||t.getTime()>=c.$options.minDate)&&(isNaN(c.$options.maxDate)||t.getTime()<=c.$options.maxDate);return a.$setValidity("date",n),n&&(a.$dateValue=t),"string"===u.dateType?o(e,u.dateFormat):"number"===u.dateType?a.$dateValue.getTime():"iso"===u.dateType?a.$dateValue.toISOString():new Date(a.$dateValue)}),a.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:"string"===u.dateType?d.parse(e):new Date(e),a.$dateValue=t,a.$dateValue}),a.$render=function(){t.val(!a.$dateValue||isNaN(a.$dateValue.getTime())?"":o(a.$dateValue,u.dateFormat))},e.$on("$destroy",function(){c.destroy(),u=null,c=null})}}}]).provider("datepickerViews",function(){function e(e,t){for(var n=[];e.length>0;)n.push(e.splice(0,t));return n}function t(e,t){return(e%t+t)%t}this.defaults={dayFormat:"dd",daySplit:7};this.$get=["$locale","$sce","dateFilter",function(n,a,o){return function(i){var r=i.$scope,l=i.$options,s=n.DATETIME_FORMATS.SHORTDAY,u=s.slice(l.startWeek).concat(s.slice(0,l.startWeek)),c=a.trustAsHtml(''+u.join('')+""),d=i.$date||new Date,f={year:d.getFullYear(),month:d.getMonth(),date:d.getDate()},p=(6e4*d.getTimezoneOffset(),[{format:"dd",split:7,steps:{month:1},update:function(e,t){!this.built||t||e.getFullYear()!==f.year||e.getMonth()!==f.month?(angular.extend(f,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):e.getDate()!==f.date&&(f.date=i.$date.getDate(),i.$updateSelected())},build:function(){var n=new Date(f.year,f.month,1),a=n.getTimezoneOffset(),s=new Date(+n-864e5*t(n.getDay()-l.startWeek,6)),u=s.getTimezoneOffset();u!==a&&(s=new Date(+s+6e4*(u-a)));for(var d,p=[],m=0;42>m;m++)d=new Date(s.getFullYear(),s.getMonth(),s.getDate()+m),p.push({date:d,label:o(d,this.format),selected:i.$date&&this.isSelected(d),muted:d.getMonth()!==f.month,disabled:this.isDisabled(d)});r.title=o(n,"MMMM yyyy"),r.labels=c,r.rows=e(p,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()&&e.getDate()===i.$date.getDate()},isDisabled:function(e){return e.getTime()l.maxDate},onKeyDown:function(e){var t=i.$date.getTime();37===e.keyCode?i.select(new Date(t-864e5),!0):38===e.keyCode?i.select(new Date(t-6048e5),!0):39===e.keyCode?i.select(new Date(t+864e5),!0):40===e.keyCode&&i.select(new Date(t+6048e5),!0)}},{name:"month",format:"MMM",split:4,steps:{year:1},update:function(e){this.built&&e.getFullYear()===f.year?e.getMonth()!==f.month&&(angular.extend(f,{month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected()):(angular.extend(f,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build())},build:function(){for(var t,n=(new Date(f.year,0,1),[]),a=0;12>a;a++)t=new Date(f.year,a,1),n.push({date:t,label:o(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=o(t,"yyyy"),r.labels=!1,r.rows=e(n,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()},isDisabled:function(e){var t=+new Date(e.getFullYear(),e.getMonth()+1,0);return tl.maxDate},onKeyDown:function(e){var t=i.$date.getMonth();37===e.keyCode?i.select(i.$date.setMonth(t-1),!0):38===e.keyCode?i.select(i.$date.setMonth(t-4),!0):39===e.keyCode?i.select(i.$date.setMonth(t+1),!0):40===e.keyCode&&i.select(i.$date.setMonth(t+4),!0)}},{name:"year",format:"yyyy",split:4,steps:{year:12},update:function(e,t){!this.built||t||parseInt(e.getFullYear()/20,10)!==parseInt(f.year/20,10)?(angular.extend(f,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):e.getFullYear()!==f.year&&(angular.extend(f,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected())},build:function(){for(var t,n=f.year-f.year%(3*this.split),a=[],l=0;12>l;l++)t=new Date(n+l,0,1),a.push({date:t,label:o(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=a[0].label+"-"+a[a.length-1].label,r.labels=!1,r.rows=e(a,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()},isDisabled:function(e){var t=+new Date(e.getFullYear()+1,0,0);return tl.maxDate},onKeyDown:function(e){var t=i.$date.getFullYear();37===e.keyCode?i.select(i.$date.setYear(t-1),!0):38===e.keyCode?i.select(i.$date.setYear(t-4),!0):39===e.keyCode?i.select(i.$date.setYear(t+1),!0):40===e.keyCode&&i.select(i.$date.setYear(t+4),!0)}}]);return{views:l.minView?Array.prototype.slice.call(p,l.minView):p,viewDate:f}}}]}),angular.module("mgcrea.ngStrap.dropdown",["mgcrea.ngStrap.tooltip"]).provider("$dropdown",function(){var e=this.defaults={animation:"am-fade",prefixClass:"dropdown",placement:"bottom-left",template:"dropdown/dropdown.tpl.html",trigger:"click",container:!1,keyboard:!0,html:!1,delay:0};this.$get=["$window","$rootScope","$tooltip",function(t,n,a){function o(t,o){function l(e){return e.target!==t[0]?e.target!==t[0]&&s.hide():void 0}{var s={},u=angular.extend({},e,o);s.$scope=u.scope&&u.scope.$new()||n.$new()}s=a(t,u),s.$onKeyDown=function(e){if(/(38|40)/.test(e.keyCode)){e.preventDefault(),e.stopPropagation();var t=angular.element(s.$element[0].querySelectorAll("li:not(.divider) a"));if(t.length){var n;angular.forEach(t,function(e,t){r&&r.call(e,":focus")&&(n=t)}),38===e.keyCode&&n>0?n--:40===e.keyCode&&n1){var r=i.search(n[t]);e=e.split(n[t]).join(""),f[n[t]]&&(a[r]=f[n[t]])}return angular.forEach(a,function(e){o.push(e)}),o}function i(e){return e.replace(/\//g,"[\\/]").replace("/-/g","[-]").replace(/\./g,"[.]").replace(/\\s/g,"[\\s]")}function r(e){var t,n=Object.keys(d),a=e;for(t=0;tu?a=setTimeout(s,t-u):(a=null,n||(l=e.apply(i,o)))},u=n&&!a;return a||(a=setTimeout(s,t)),u&&(l=e.apply(i,o)),l}}).constant("throttle",function(e,t,n){var a,o,i,r=null,l=0;n||(n={});var s=function(){l=n.leading===!1?0:new Date,r=null,i=e.apply(a,o)};return function(){var u=new Date;l||n.leading!==!1||(l=u);var c=t-(u-l);return a=this,o=arguments,0>=c?(clearTimeout(r),r=null,l=u,i=e.apply(a,o)):r||n.trailing===!1||(r=setTimeout(s,c)),i}}),angular.module("mgcrea.ngStrap.helpers.dimensions",[]).factory("dimensions",["$document","$window",function(){var t=(angular.element,{}),n=t.nodeName=function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()};t.css=function(t,n,a){var o;return o=t.currentStyle?t.currentStyle[n]:e.getComputedStyle?e.getComputedStyle(t)[n]:t.style[n],a===!0?parseFloat(o)||0:o},t.offset=function(t){var n=t.getBoundingClientRect(),a=t.ownerDocument;return{width:t.offsetWidth,height:t.offsetHeight,top:n.top+(e.pageYOffset||a.documentElement.scrollTop)-(a.documentElement.clientTop||0),left:n.left+(e.pageXOffset||a.documentElement.scrollLeft)-(a.documentElement.clientLeft||0)}},t.position=function(e){var o,i,r={top:0,left:0};return"fixed"===t.css(e,"position")?i=e.getBoundingClientRect():(o=a(e),i=t.offset(e),i=t.offset(e),n(o,"html")||(r=t.offset(o)),r.top+=t.css(o,"borderTopWidth",!0),r.left+=t.css(o,"borderLeftWidth",!0)),{width:e.offsetWidth,height:e.offsetHeight,top:i.top-r.top-t.css(e,"marginTop",!0),left:i.left-r.left-t.css(e,"marginLeft",!0)}};var a=function(e){var a=e.ownerDocument,o=e.offsetParent||a;if(n(o,"#document"))return a.documentElement;for(;o&&!n(o,"html")&&"static"===t.css(o,"position");)o=o.offsetParent;return o||a.documentElement};return t.height=function(e,n){var a=e.offsetHeight;return n?a+=t.css(e,"marginTop",!0)+t.css(e,"marginBottom",!0):a-=t.css(e,"paddingTop",!0)+t.css(e,"paddingBottom",!0)+t.css(e,"borderTopWidth",!0)+t.css(e,"borderBottomWidth",!0),a},t.width=function(e,n){var a=e.offsetWidth;return n?a+=t.css(e,"marginLeft",!0)+t.css(e,"marginRight",!0):a-=t.css(e,"paddingLeft",!0)+t.css(e,"paddingRight",!0)+t.css(e,"borderLeftWidth",!0)+t.css(e,"borderRightWidth",!0),a},t}]),angular.module("mgcrea.ngStrap.helpers.parseOptions",[]).provider("$parseOptions",function(){var e=this.defaults={regexp:/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/};this.$get=["$parse","$q",function(t,n){function a(a,o){function i(e){return e.map(function(e,t){var n,a,o={};return o[c]=e,n=u(o),a=p(o)||t,{label:n,value:a}})}var r={},l=angular.extend({},e,o);r.$values=[];var s,u,c,d,f,p,m;return r.init=function(){r.$match=s=a.match(l.regexp),u=t(s[2]||s[1]),c=s[4]||s[6],d=s[5],f=t(s[3]||""),p=t(s[2]?s[1]:c),m=t(s[7])},r.valuesFn=function(e,t){return n.when(m(e,t)).then(function(e){return r.$values=e?i(e):{},r.$values})},r.init(),r}return a}]}),angular.version.minor<3&&angular.version.dot<14&&angular.module("ng").factory("$$rAF",["$window","$timeout",function(e,t){var n=e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame,a=e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.mozCancelAnimationFrame||e.webkitCancelRequestAnimationFrame,o=!!n,i=o?function(e){var t=n(e);return function(){a(t)}}:function(e){var n=t(e,16.66,!1);return function(){t.cancel(n)}};return i.supported=o,i}]),angular.module("mgcrea.ngStrap.modal",["mgcrea.ngStrap.helpers.dimensions"]).provider("$modal",function(){var e=this.defaults={animation:"am-fade",backdropAnimation:"am-fade",prefixClass:"modal",prefixEvent:"modal",placement:"top",template:"modal/modal.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","$sce","dimensions",function(n,a,o,i,r,l,s,u,c){function d(t){function n(e){e.target===e.currentTarget&&("static"===r.backdrop?i.focus():i.hide())}var i={},r=i.$options=angular.extend({},e,t);i.$promise=p(r.template);var l=i.$scope=r.scope&&r.scope.$new()||a.$new();r.element||r.container||(r.container="body"),m(["title","content"],function(e){r[e]&&(l[e]=c.trustAsHtml(r[e]))}),l.$hide=function(){l.$$postDigest(function(){i.hide()})},l.$show=function(){l.$$postDigest(function(){i.show()})},l.$toggle=function(){l.$$postDigest(function(){i.toggle()})},r.contentTemplate&&(i.$promise=i.$promise.then(function(e){var n=angular.element(e);return p(r.contentTemplate).then(function(e){var a=f('[ng-bind="content"]',n[0]).removeAttr("ng-bind").html(e);return t.template||a.next().remove(),n[0].outerHTML})}));var u,d,y=angular.element('
');return i.$promise.then(function(e){angular.isObject(e)&&(e=e.data),r.html&&(e=e.replace(v,'ng-bind-html="')),e=g.apply(e),u=o(e),i.init()}),i.init=function(){r.show&&l.$$postDigest(function(){i.show()})},i.destroy=function(){d&&(d.remove(),d=null),y&&(y.remove(),y=null),l.$destroy()},i.show=function(){l.$emit(r.prefixEvent+".show.before",i);var e=r.container?f(r.container):null,t=r.container?null:r.element;d=i.$element=u(l,function(){}),d.css({display:"block"}).addClass(r.placement),r.animation&&(r.backdrop&&y.addClass(r.backdropAnimation),d.addClass(r.animation)),r.backdrop&&s.enter(y,h,null,function(){}),s.enter(d,e,t,function(){l.$emit(r.prefixEvent+".show",i)}),l.$isShown=!0,l.$$phase||l.$root.$$phase||l.$digest();var a=d[0];$(function(){a.focus()}),h.addClass(r.prefixClass+"-open"),r.animation&&h.addClass(r.prefixClass+"-with-"+r.animation),r.backdrop&&(d.on("click",n),y.on("click",n)),r.keyboard&&d.on("keyup",i.$onKeyUp)},i.hide=function(){l.$emit(r.prefixEvent+".hide.before",i),s.leave(d,function(){l.$emit(r.prefixEvent+".hide",i),h.removeClass(r.prefixClass+"-open"),r.animation&&h.addClass(r.prefixClass+"-with-"+r.animation)}),r.backdrop&&s.leave(y,function(){}),l.$isShown=!1,l.$$phase||l.$root.$$phase||l.$digest(),r.backdrop&&(d.off("click",n),y.off("click",n)),r.keyboard&&d.off("keyup",i.$onKeyUp)},i.toggle=function(){l.$isShown?i.hide():i.show()},i.focus=function(){d[0].focus()},i.$onKeyUp=function(e){27===e.which&&i.hide()},i}function f(e,n){return angular.element((n||t).querySelectorAll(e))}function p(e){return i.when(r.get(e)||l.get(e)).then(function(t){return angular.isObject(t)?(r.put(e,t.data),t.data):t})}var m=angular.forEach,g=String.prototype.trim,$=n.requestAnimationFrame||n.setTimeout,h=angular.element(n.document.body),v=/ng-bind="/gi;return d}]}).directive("bsModal",["$window","$location","$sce","$modal",function(e,t,n,a){return{restrict:"EAC",scope:!0,link:function(e,t,o){var i={scope:e,element:t,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(e){angular.isDefined(o[e])&&(i[e]=o[e])}),angular.forEach(["title","content"],function(t){o[t]&&o.$observe(t,function(a){e[t]=n.trustAsHtml(a)})}),o.bsModal&&e.$watch(o.bsModal,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var r=a(i);t.on(o.trigger||"click",r.toggle),e.$on("$destroy",function(){r.destroy(),i=null,r=null})}}}]),angular.module("mgcrea.ngStrap.navbar",[]).provider("$navbar",function(){var e=this.defaults={activeClass:"active",routeAttr:"data-match-route",strict:!1};this.$get=function(){return{defaults:e}}}).directive("bsNavbar",["$window","$location","$navbar",function(e,t,n){var a=n.defaults;return{restrict:"A",link:function(e,n,o){var i=angular.copy(a);angular.forEach(Object.keys(a),function(e){angular.isDefined(o[e])&&(i[e]=o[e])}),e.$watch(function(){return t.path()},function(e){var t=n[0].querySelectorAll("li["+i.routeAttr+"]");angular.forEach(t,function(t){var n=angular.element(t),a=n.attr(i.routeAttr).replace("/","\\/");i.strict&&(a="^"+a+"$");var o=new RegExp(a,["i"]);o.test(e)?n.addClass(i.activeClass):n.removeClass(i.activeClass)})})}}}]),angular.module("mgcrea.ngStrap.popover",["mgcrea.ngStrap.tooltip"]).provider("$popover",function(){var e=this.defaults={animation:"am-fade",placement:"right",template:"popover/popover.tpl.html",contentTemplate:!1,trigger:"click",keyboard:!0,html:!1,title:"",content:"",delay:0,container:!1};this.$get=["$tooltip",function(t){function n(n,a){var o=angular.extend({},e,a),i=t(n,o);return o.content&&(i.$scope.content=o.content),i}return n}]}).directive("bsPopover",["$window","$location","$sce","$popover",function(e,t,n,a){var o=e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,t,i){var r={scope:e};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation"],function(e){angular.isDefined(i[e])&&(r[e]=i[e])}),angular.forEach(["title","content"],function(t){i[t]&&i.$observe(t,function(a,i){e[t]=n.trustAsHtml(a),angular.isDefined(i)&&o(function(){l&&l.$applyPlacement()})})}),i.bsPopover&&e.$watch(i.bsPopover,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t,angular.isDefined(n)&&o(function(){l&&l.$applyPlacement()})},!0);var l=a(t,r);e.$on("$destroy",function(){l.destroy(),r=null,l=null})}}}]),angular.module("mgcrea.ngStrap.select",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$select",function(){var e=this.defaults={animation:"am-fade",prefixClass:"select",placement:"bottom-left",template:"select/select.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,multiple:!1,sort:!0,caretHtml:' ',placeholder:"Choose among the following...",maxLength:3,maxLengthHtml:"selected"};this.$get=["$window","$document","$rootScope","$tooltip",function(t,n,a,o){function i(t,n,a){var i={},l=angular.extend({},e,a);i=o(t,l);var s=a.scope,u=i.$scope;u.$matches=[],u.$activeIndex=0,u.$isMultiple=l.multiple,u.$activate=function(e){u.$$postDigest(function(){i.activate(e)})},u.$select=function(e){u.$$postDigest(function(){i.select(e)})},u.$isVisible=function(){return i.$isVisible()},u.$isActive=function(e){return i.$isActive(e)},i.update=function(e){u.$matches=e,i.$updateActiveIndex()},i.activate=function(e){return l.multiple?(u.$activeIndex.sort(),i.$isActive(e)?u.$activeIndex.splice(u.$activeIndex.indexOf(e),1):u.$activeIndex.push(e),l.sort&&u.$activeIndex.sort()):u.$activeIndex=e,u.$activeIndex},i.select=function(e){var t=u.$matches[e].value;i.activate(e),n.$setViewValue(l.multiple?u.$activeIndex.map(function(e){return u.$matches[e].value}):t),n.$render(),s&&s.$digest(),l.multiple||i.hide(),u.$emit("$select.select",t,e)},i.$updateActiveIndex=function(){n.$modelValue&&u.$matches.length?u.$activeIndex=l.multiple&&angular.isArray(n.$modelValue)?n.$modelValue.map(function(e){return i.$getIndex(e) +}):i.$getIndex(n.$modelValue):u.$activeIndex>=u.$matches.length&&(u.$activeIndex=l.multiple?[]:0)},i.$isVisible=function(){return l.minLength&&n?u.$matches.length&&n.$viewValue.length>=l.minLength:u.$matches.length},i.$isActive=function(e){return l.multiple?-1!==u.$activeIndex.indexOf(e):u.$activeIndex===e},i.$getIndex=function(e){var t=u.$matches.length,n=t;if(t){for(n=t;n--&&u.$matches[n].value!==e;);if(!(0>n))return n}},i.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),r){var t=angular.element(e.target);t.triggerHandler("click")}},i.$onKeyDown=function(e){if(/(9|13|38|40)/.test(e.keyCode)){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode||9===e.keyCode)return i.select(u.$activeIndex);38===e.keyCode&&u.$activeIndex>0?u.$activeIndex--:40===e.keyCode&&u.$activeIndex'),s.after(t)}var u=o(n.ngOptions),c=a(t,r,l),d=u.$match[7].replace(/\|.+/,"").trim();e.$watch(d,function(){u.valuesFn(e,r).then(function(e){c.update(e),r.$render()})},!0),e.$watch(n.ngModel,function(){c.$updateActiveIndex()},!0),r.$render=function(){var e,a;l.multiple&&angular.isArray(r.$modelValue)?(e=r.$modelValue.map(function(e){return a=c.$getIndex(e),angular.isDefined(a)?c.$scope.$matches[a].label:!1}).filter(angular.isDefined),e=e.length>(l.maxLength||i.maxLength)?e.length+" "+(l.maxLengthHtml||i.maxLengthHtml):e.join(", ")):(a=c.$getIndex(r.$modelValue),e=angular.isDefined(a)?c.$scope.$matches[a].label:!1),t.html((e?e:n.placeholder||i.placeholder)+i.caretHtml)},e.$on("$destroy",function(){c.destroy(),l=null,c=null})}}}]),angular.module("mgcrea.ngStrap.scrollspy",["mgcrea.ngStrap.helpers.debounce","mgcrea.ngStrap.helpers.dimensions"]).provider("$scrollspy",function(){var e=this.$$spies={},n=this.defaults={debounce:150,throttle:100,offset:100};this.$get=["$window","$document","$rootScope","dimensions","debounce","throttle",function(a,o,i,r,l,s){function u(e,t){return e[0].nodeName&&e[0].nodeName.toLowerCase()===t.toLowerCase()}function c(o){var c=angular.extend({},n,o);c.element||(c.element=p);var m=u(c.element,"body"),g=m?d:c.element,$=m?"window":c.id;if(e[$])return e[$].$$count++,e[$];var h,v,y,w,b,k,D,T,x={},S=x.$trackedElements=[],M=[];return x.init=function(){this.$$count=1,w=l(this.checkPosition,c.debounce),b=s(this.checkPosition,c.throttle),g.on("click",this.checkPositionWithEventLoop),d.on("resize",w),g.on("scroll",b),k=l(this.checkOffsets,c.debounce),h=i.$on("$viewContentLoaded",k),v=i.$on("$includeContentLoaded",k),k(),$&&(e[$]=x)},x.destroy=function(){this.$$count--,this.$$count>0||(g.off("click",this.checkPositionWithEventLoop),d.off("resize",w),g.off("scroll",w),h(),v(),$&&delete e[$])},x.checkPosition=function(){if(M.length){if(T=(m?a.pageYOffset:g.prop("scrollTop"))||0,D=Math.max(a.innerHeight,f.prop("clientHeight")),TM[e+1].offsetTop))return x.$activateElement(M[e])}},x.checkPositionWithEventLoop=function(){setTimeout(this.checkPosition,1)},x.$activateElement=function(e){if(y){var t=x.$getTrackedElement(y);t&&(t.source.removeClass("active"),u(t.source,"li")&&u(t.source.parent().parent(),"li")&&t.source.parent().parent().removeClass("active"))}y=e.target,e.source.addClass("active"),u(e.source,"li")&&u(e.source.parent().parent(),"li")&&e.source.parent().parent().addClass("active")},x.$getTrackedElement=function(e){return S.filter(function(t){return t.target===e})[0]},x.checkOffsets=function(){angular.forEach(S,function(e){var n=t.querySelector(e.target);e.offsetTop=n?r.offset(n).top:null,c.offset&&null!==e.offsetTop&&(e.offsetTop-=1*c.offset)}),M=S.filter(function(e){return null!==e.offsetTop}).sort(function(e,t){return e.offsetTop-t.offsetTop}),w()},x.trackElement=function(e,t){S.push({target:e,source:t})},x.untrackElement=function(e,t){for(var n,a=S.length;a--;)if(S[a].target===e&&S[a].source===t){n=a;break}S=S.splice(n,1)},x.activate=function(e){S[e].addClass("active")},x.init(),x}var d=angular.element(a),f=angular.element(o.prop("documentElement")),p=angular.element(a.document.body);return c}]}).directive("bsScrollspy",["$rootScope","debounce","dimensions","$scrollspy",function(e,t,n,a){return{restrict:"EAC",link:function(e,t,n){var o={scope:e};angular.forEach(["offset","target"],function(e){angular.isDefined(n[e])&&(o[e]=n[e])});var i=a(o);i.trackElement(o.target,t),e.$on("$destroy",function(){i.untrackElement(o.target,t),i.destroy(),o=null,i=null})}}}]).directive("bsScrollspyList",["$rootScope","debounce","dimensions","$scrollspy",function(){return{restrict:"A",compile:function(e){var t=e[0].querySelectorAll("li > a[href]");angular.forEach(t,function(e){var t=angular.element(e);t.parent().attr("bs-scrollspy","").attr("data-target",t.attr("href"))})}}}]),angular.module("mgcrea.ngStrap.tab",[]).run(["$templateCache",function(e){e.put("$pane","{{pane.content}}")}]).provider("$tab",function(){var e=this.defaults={animation:"am-fade",template:"tab/tab.tpl.html"};this.$get=function(){return{defaults:e}}}).directive("bsTabs",["$window","$animate","$tab",function(e,t,n){var a=n.defaults;return{restrict:"EAC",scope:!0,require:"?ngModel",templateUrl:function(e,t){return t.template||a.template},link:function(e,t,n,o){var i=a;angular.forEach(["animation"],function(e){angular.isDefined(n[e])&&(i[e]=n[e])}),n.bsTabs&&e.$watch(n.bsTabs,function(t){e.panes=t},!0),t.addClass("tabs"),i.animation&&t.addClass(i.animation),e.active=e.activePane=0,e.setActive=function(t){e.active=t,o&&o.$setViewValue(t)},o&&(o.$render=function(){e.active=1*o.$modelValue})}}}]),angular.module("mgcrea.ngStrap.timepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$timepicker",function(){var e=this.defaults={animation:"am-fade",prefixClass:"timepicker",placement:"bottom-left",template:"timepicker/timepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:"date",timeFormat:"shortTime",autoclose:!1,minTime:-1/0,maxTime:+1/0,length:5,hourStep:1,minuteStep:5};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","$tooltip",function(t,n,a,o,i,r,l){function s(t,n,a){function o(e,n){if(t[0].createTextRange){var a=t[0].createTextRange();a.collapse(!0),a.moveStart("character",e),a.moveEnd("character",n),a.select()}else t[0].setSelectionRange?t[0].setSelectionRange(e,n):angular.isUndefined(t[0].selectionStart)&&(t[0].selectionStart=e,t[0].selectionEnd=n)}function s(){t[0].focus()}var d=l(t,angular.extend({},e,a)),f=a.scope,p=d.$options,m=d.$scope,g=0,$=n.$dateValue||new Date,h={hour:$.getHours(),meridian:$.getHours()<12,minute:$.getMinutes(),second:$.getSeconds(),millisecond:$.getMilliseconds()},v=i.DATETIME_FORMATS[p.timeFormat]||p.timeFormat,y=/(h+)[:]?(m+)[ ]?(a?)/i.exec(v).slice(1);m.$select=function(e,t){d.select(e,t)},m.$moveIndex=function(e,t){d.$moveIndex(e,t)},m.$switchMeridian=function(e){d.switchMeridian(e)},d.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())?(d.$date=e,angular.extend(h,{hour:e.getHours(),minute:e.getMinutes(),second:e.getSeconds(),millisecond:e.getMilliseconds()}),d.$build()):d.$isBuilt||d.$build()},d.select=function(e,t,a){(!n.$dateValue||isNaN(n.$dateValue.getTime()))&&(n.$dateValue=new Date(1970,0,1)),angular.isDate(e)||(e=new Date(e)),0===t?n.$dateValue.setHours(e.getHours()):1===t&&n.$dateValue.setMinutes(e.getMinutes()),n.$setViewValue(n.$dateValue),n.$render(),p.autoclose&&!a&&d.hide(!0)},d.switchMeridian=function(e){var t=(e||n.$dateValue).getHours();n.$dateValue.setHours(12>t?t+12:t-12),n.$render()},d.$build=function(){var e,t,n=m.midIndex=parseInt(p.length/2,10),a=[];for(e=0;ep.maxTime},d.$moveIndex=function(e,t){var n;0===t?(n=new Date(1970,0,1,h.hour+e*p.length,h.minute),angular.extend(h,{hour:n.getHours()})):1===t&&(n=new Date(1970,0,1,h.hour,h.minute+e*p.length*p.minuteStep),angular.extend(h,{minute:n.getMinutes()})),d.$build()},d.$onMouseDown=function(e){if("input"!==e.target.nodeName.toLowerCase()&&e.preventDefault(),e.stopPropagation(),u){var t=angular.element(e.target);"button"!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler("click")}},d.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return d.hide(!0);var t=new Date(d.$date),n=t.getHours(),a=r(t,"h").length,i=t.getMinutes(),l=r(t,"mm").length,s=/(37|39)/.test(e.keyCode),u=2+1*!!y[2];if(s&&(37===e.keyCode?g=1>g?u-1:g-1:39===e.keyCode&&(g=u-1>g?g+1:0)),0===g){if(s)return o(0,a);38===e.keyCode?t.setHours(n-p.hourStep):40===e.keyCode&&t.setHours(n+p.hourStep)}else if(1===g){if(s)return o(a+1,a+1+l);38===e.keyCode?t.setMinutes(i-p.minuteStep):40===e.keyCode&&t.setMinutes(i+p.minuteStep)}else if(2===g){if(s)return o(a+1+l+1,a+1+l+3);d.switchMeridian()}d.select(t,g,!0),f.$digest()}};var w=d.init;d.init=function(){return c&&p.useNative?(t.prop("type","time"),void t.css("-webkit-appearance","textfield")):(u&&(t.prop("type","text"),t.attr("readonly","true"),t.on("click",s)),void w())};var b=d.destroy;d.destroy=function(){c&&p.useNative&&t.off("click",s),b()};var k=d.show;d.show=function(){k(),setTimeout(function(){d.$element.on(u?"touchstart":"mousedown",d.$onMouseDown),p.keyboard&&t.on("keydown",d.$onKeyDown)})};var D=d.hide;return d.hide=function(e){d.$element.off(u?"touchstart":"mousedown",d.$onMouseDown),p.keyboard&&t.off("keydown",d.$onKeyDown),D(e)},d}var u=(angular.element(t.document.body),"createTouch"in t.document),c=/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent);return e.lang||(e.lang=i.id),s.defaults=e,s}]}).directive("bsTimepicker",["$window","$parse","$q","$locale","dateFilter","$timepicker","$dateParser","$timeout",function(e,t,n,a,o,i,r){{var l=i.defaults,s=/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent);e.requestAnimationFrame||e.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(e,t,n,a){var u={scope:e,controller:a};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","timeType","timeFormat","useNative","hourStep","minuteStep"],function(e){angular.isDefined(n[e])&&(u[e]=n[e])}),s&&(u.useNative||l.useNative)&&(u.timeFormat="HH:mm");var c=i(t,a,u);u=c.$options;var d=r({format:u.timeFormat,lang:u.lang});angular.forEach(["minTime","maxTime"],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){c.$options[e]="now"===t?(new Date).setFullYear(1970,0,1):angular.isString(t)&&t.match(/^".+"$/)?+new Date(t.substr(1,t.length-2)):d.parse(t),!isNaN(c.$options[e])&&c.$build()})}),e.$watch(n.ngModel,function(){c.update(a.$dateValue)},!0),a.$parsers.unshift(function(e){if(!e)return void a.$setValidity("date",!0);var t=d.parse(e,a.$dateValue);if(!t||isNaN(t.getTime()))a.$setValidity("date",!1);else{var n=t.getTime()>=u.minTime&&t.getTime()<=u.maxTime;a.$setValidity("date",n),n&&(a.$dateValue=t)}return"string"===u.timeType?o(e,u.timeFormat):"number"===u.timeType?a.$dateValue.getTime():"iso"===u.timeType?a.$dateValue.toISOString():new Date(a.$dateValue)}),a.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:"string"===u.timeType?d.parse(e):new Date(e),a.$dateValue=t,a.$dateValue}),a.$render=function(){t.val(!a.$dateValue||isNaN(a.$dateValue.getTime())?"":o(a.$dateValue,u.timeFormat))},e.$on("$destroy",function(){c.destroy(),u=null,c=null})}}}]),angular.module("mgcrea.ngStrap.tooltip",["ngAnimate","mgcrea.ngStrap.helpers.dimensions"]).provider("$tooltip",function(){var e=this.defaults={animation:"am-fade",prefixClass:"tooltip",prefixEvent:"tooltip",container:!1,placement:"top",template:"tooltip/tooltip.tpl.html",contentTemplate:!1,trigger:"hover focus",keyboard:!1,html:!1,show:!1,title:"",type:"",delay:0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions","$$rAF",function(n,a,o,i,r,l,s,u,c,d){function f(t,n){function i(){return"body"===u.container?c.offset(t[0]):c.position(t[0])}function r(e,t,n,a){var o,i=e.split("-");switch(i[0]){case"right":o={top:t.top+t.height/2-a/2,left:t.left+t.width};break;case"bottom":o={top:t.top+t.height,left:t.left+t.width/2-n/2};break;case"left":o={top:t.top+t.height/2-a/2,left:t.left-n};break;default:o={top:t.top-a,left:t.left+t.width/2-n/2}}if(!i[1])return o;if("top"===i[0]||"bottom"===i[0])switch(i[1]){case"left":o.left=t.left;break;case"right":o.left=t.left+t.width-n}else if("left"===i[0]||"right"===i[0])switch(i[1]){case"top":o.top=t.top-a;break;case"bottom":o.top=t.top+t.height}return o}var l={},u=l.$options=angular.extend({},e,n);l.$promise=m(u.template);var f=l.$scope=u.scope&&u.scope.$new()||a.$new();u.delay&&angular.isString(u.delay)&&(u.delay=parseFloat(u.delay)),u.title&&(l.$scope.title=u.title),f.$hide=function(){f.$$postDigest(function(){l.hide()})},f.$show=function(){f.$$postDigest(function(){l.show()})},f.$toggle=function(){f.$$postDigest(function(){l.toggle()})},l.$isShown=f.$isShown=!1;var v,y;u.contentTemplate&&(l.$promise=l.$promise.then(function(e){var t=angular.element(e);return m(u.contentTemplate).then(function(e){var n=p('[ng-bind="content"]',t[0]);return n.length||(n=p('[ng-bind="title"]',t[0])),n.removeAttr("ng-bind").html(e),t[0].outerHTML})}));var w,b,k,D;return l.$promise.then(function(e){angular.isObject(e)&&(e=e.data),u.html&&(e=e.replace(h,'ng-bind-html="')),e=g.apply(e),k=e,w=o(e),l.init()}),l.init=function(){u.delay&&angular.isNumber(u.delay)&&(u.delay={show:u.delay,hide:u.delay}),"self"===u.container?D=t:u.container&&(D=p(u.container));var e=u.trigger.split(" ");angular.forEach(e,function(e){"click"===e?t.on("click",l.toggle):"manual"!==e&&(t.on("hover"===e?"mouseenter":"focus",l.enter),t.on("hover"===e?"mouseleave":"blur",l.leave),"hover"!==e&&t.on($?"touchstart":"mousedown",l.$onFocusElementMouseDown))}),u.show&&f.$$postDigest(function(){"focus"===u.trigger?t[0].focus():l.show()})},l.destroy=function(){for(var e=u.trigger.split(" "),n=e.length;n--;){var a=e[n];"click"===a?t.off("click",l.toggle):"manual"!==a&&(t.off("hover"===a?"mouseenter":"focus",l.enter),t.off("hover"===a?"mouseleave":"blur",l.leave),"hover"!==a&&t.off($?"touchstart":"mousedown",l.$onFocusElementMouseDown))}b&&(b.remove(),b=null),f.$destroy()},l.enter=function(){return clearTimeout(v),y="in",u.delay&&u.delay.show?void(v=setTimeout(function(){"in"===y&&l.show()},u.delay.show)):l.show()},l.show=function(){f.$emit(u.prefixEvent+".show.before",l);var e=u.container?D:null,n=u.container?null:t;b&&b.remove(),b=l.$element=w(f,function(){}),b.css({top:"0px",left:"0px",display:"block"}).addClass(u.placement),u.animation&&b.addClass(u.animation),u.type&&b.addClass(u.prefixClass+"-"+u.type),s.enter(b,e,n,function(){f.$emit(u.prefixEvent+".show",l)}),l.$isShown=f.$isShown=!0,f.$$phase||f.$root.$$phase||f.$digest(),d(l.$applyPlacement),u.keyboard&&("focus"!==u.trigger?(l.focus(),b.on("keyup",l.$onKeyUp)):t.on("keyup",l.$onFocusKeyUp))},l.leave=function(){return clearTimeout(v),y="out",u.delay&&u.delay.hide?void(v=setTimeout(function(){"out"===y&&l.hide()},u.delay.hide)):l.hide()},l.hide=function(e){return l.$isShown?(f.$emit(u.prefixEvent+".hide.before",l),s.leave(b,function(){f.$emit(u.prefixEvent+".hide",l)}),l.$isShown=f.$isShown=!1,f.$$phase||f.$root.$$phase||f.$digest(),u.keyboard&&null!==b&&b.off("keyup",l.$onKeyUp),e&&"focus"===u.trigger?t[0].blur():void 0):void 0},l.toggle=function(){l.$isShown?l.leave():l.enter()},l.focus=function(){b[0].focus()},l.$applyPlacement=function(){if(b){var e=i(),t=b.prop("offsetWidth"),n=b.prop("offsetHeight"),a=r(u.placement,e,t,n);a.top+="px",a.left+="px",b.css(a)}},l.$onKeyUp=function(e){27===e.which&&l.hide()},l.$onFocusKeyUp=function(e){27===e.which&&t[0].blur()},l.$onFocusElementMouseDown=function(e){e.preventDefault(),e.stopPropagation(),l.$isShown?t[0].blur():t[0].focus()},l}function p(e,n){return angular.element((n||t).querySelectorAll(e))}function m(e){return i.when(r.get(e)||l.get(e)).then(function(t){return angular.isObject(t)?(r.put(e,t.data),t.data):t})}var g=String.prototype.trim,$="createTouch"in n.document,h=/ng-bind="/gi;return f}]}).directive("bsTooltip",["$window","$location","$sce","$tooltip","$$rAF",function(e,t,n,a,o){return{restrict:"EAC",scope:!0,link:function(e,t,i){var r={scope:e};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation","type"],function(e){angular.isDefined(i[e])&&(r[e]=i[e])}),angular.forEach(["title"],function(t){i[t]&&i.$observe(t,function(a,i){e[t]=n.trustAsHtml(a),angular.isDefined(i)&&o(function(){l&&l.$applyPlacement()})})}),i.bsTooltip&&e.$watch(i.bsTooltip,function(t,n){angular.isObject(t)?angular.extend(e,t):e.title=t,angular.isDefined(n)&&o(function(){l&&l.$applyPlacement()})},!0);var l=a(t,r);e.$on("$destroy",function(){l.destroy(),r=null,l=null})}}}]),angular.module("mgcrea.ngStrap.typeahead",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$typeahead",function(){var e=this.defaults={animation:"am-fade",prefixClass:"typeahead",placement:"bottom-left",template:"typeahead/typeahead.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,minLength:1,filter:"filter",limit:6};this.$get=["$window","$rootScope","$tooltip",function(t,n,a){function o(t,n){var o={},i=angular.extend({},e,n),r=i.controller;o=a(t,i);var l=n.scope,s=o.$scope;s.$matches=[],s.$activeIndex=0,s.$activate=function(e){s.$$postDigest(function(){o.activate(e)})},s.$select=function(e){s.$$postDigest(function(){o.select(e)})},s.$isVisible=function(){return o.$isVisible()},o.update=function(e){s.$matches=e,s.$activeIndex>=e.length&&(s.$activeIndex=0)},o.activate=function(e){s.$activeIndex=e},o.select=function(e){var n=s.$matches[e].value;r&&(r.$setViewValue(n),r.$render(),l&&l.$digest()),"focus"===i.trigger?t[0].blur():o.$isShown&&o.hide(),s.$activeIndex=0,s.$emit("$typeahead.select",n,e)},o.$isVisible=function(){return i.minLength&&r?s.$matches.length&&angular.isString(r.$viewValue)&&r.$viewValue.length>=i.minLength:!!s.$matches.length},o.$getIndex=function(e){var t=s.$matches.length,n=t;if(t){for(n=t;n--&&s.$matches[n].value!==e;);if(!(0>n))return n}},o.$onMouseDown=function(e){e.preventDefault(),e.stopPropagation()},o.$onKeyDown=function(e){if(/(38|40|13)/.test(e.keyCode)){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode&&s.$matches.length)return o.select(s.$activeIndex);38===e.keyCode&&s.$activeIndex>0?s.$activeIndex--:40===e.keyCode&&s.$activeIndexu&&(e=e.slice(0,u)),f.update(e),r.$render()})}),r.$render=function(){if(r.$isEmpty(r.$viewValue))return t.val("");var e=f.$getIndex(r.$modelValue),n=angular.isDefined(e)?f.$scope.$matches[e].label:r.$viewValue;t.val(n.replace(/<(?:.|\n)*?>/gm,"").trim())},e.$on("$destroy",function(){f.destroy(),l=null,f=null})}}}])}(window,document); \ No newline at end of file diff --git a/dist/angular-strap.min.js.map b/dist/angular-strap.min.js.map new file mode 100644 index 000000000..6af662904 --- /dev/null +++ b/dist/angular-strap.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"angular-strap.min.js.map","sources":["angular-strap.min.js"],"names":["window","document","angular","module","provider","defaults","this","offsetTop","$get","$window","debounce","dimensions","AffixFactory","element","config","getRequiredAffixClass","unpin","position","elementHeight","scrollTop","getScrollTop","scrollHeight","getScrollHeight","top","offsetBottom","initialAffixTop","targetEl","pageYOffset","body","$affix","options","extend","target","reset","initialOffsetTop","affixed","parent","offsetParent","match","i","init","$parseOffsets","offset","on","checkPosition","checkPositionWithEventLoop","windowEl","$debouncedOnResize","destroy","off","setTimeout","height","affix","removeClass","addClass","css","offsetUnpin","bodyEl","offsetHeight","$onResize","directive","restrict","require","link","scope","attr","affixTarget","$element","forEach","key","isDefined","$on","controller","animation","prefixClass","placement","template","container","backdrop","keyboard","show","duration","type","$modal","$timeout","AlertFactory","$alert","$scope","hide","$location","$sce","requestAnimationFrame","$observe","newValue","trustAsHtml","bsAlert","$watch","isObject","content","alert","trigger","toggle","contentTemplate","html","AsideFactory","$aside","bsAside","aside","activeClass","toggleEvent","compile","removeAttr","children","querySelectorAll","child","childEl","ngModel","$button","$$rAF","constantValueRegExp","isInput","nodeName","activeElement","trueValue","test","$eval","falseValue","hasExoticValues","$parsers","push","viewValue","$render","isActive","equals","$modelValue","checked","toggleClass","bind","$apply","$setViewValue","hasClass","value","delay","useNative","dateType","dateFormat","strictFormat","autoclose","minDate","Infinity","maxDate","startView","minView","startWeek","$document","$rootScope","$locale","dateFilter","datepickerViews","$tooltip","DatepickerFactory","updateSelected","el","selected","$datepicker","$isSelected","date","focusElement","focus","parentScope","$options","pickerViews","$views","views","viewDate","$mode","$picker","$select","select","$selectPane","$toggleMode","setMode","length","update","isDate","isNaN","getTime","$date","call","$build","keep","$dateValue","Date","setFullYear","getFullYear","getMonth","getDate","year","month","mode","pristine","built","build","$updateSelected","l","rows","isSelected","steps","targetDate","UTC","day","getUTCFullYear","getUTCMonth","getUTCDate","$onMouseDown","evt","preventDefault","stopPropagation","isTouch","toLowerCase","triggerHandler","$onKeyDown","keyCode","shiftKey","altKey","onKeyDown","$digest","_init","isNative","prop","_destroy","_show","_hide","blur","navigator","userAgent","lang","id","$parse","$q","$dateParser","isNumeric","n","parseFloat","isFinite","datepicker","today","isString","substr","parseInt","dateParser","format","strict","unshift","$setValidity","parsedDate","parse","isValid","toISOString","$formatters","modelValue","isUndefined","NaN","val","split","arr","size","arrays","splice","mod","m","dayFormat","daySplit","picker","weekDaysMin","DATETIME_FORMATS","SHORTDAY","weekDaysLabels","slice","concat","weekDaysLabelsHtml","join","startDate","getTimezoneOffset","force","firstDayOfMonth","firstDayOfMonthOffset","firstDate","getDay","firstDateOffset","days","label","muted","disabled","isDisabled","title","labels","actualTime","name","months","lastDate","actualMonth","setMonth","firstYear","years","actualYear","setYear","Array","prototype","DropdownFactory","onBodyClick","$dropdown","$new","items","index","matchesSelector","eq","Element","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","bsDropdown","dropdown","proto","DateParserFactory","setMapForFormat","keys","Object","setFnMap","map","sortedMap","clonedFormat","search","v","escapeReservedSymbols","text","replace","regExpForFormat","regExpMap","re","RegExp","regex","setMap","sss","ss","s","mm","HH","H","hh","h","a","EEEE","DAY","EEE","dd","d","MMMM","MONTH","MMM","SHORTMONTH","MM","M","yyyy","yy","y","setMilliseconds","setSeconds","setMinutes","setHours","setDate","hours","getHours","indexOf","$format","baseDate","matches","exec","constant","func","wait","immediate","timeout","args","context","timestamp","result","arguments","later","last","apply","callNow","previous","leading","now","remaining","clearTimeout","trailing","factory","fn","extra","currentStyle","getComputedStyle","style","boxRect","getBoundingClientRect","docElement","ownerDocument","width","offsetWidth","documentElement","clientTop","left","pageXOffset","scrollLeft","clientLeft","offsetParentElement","offsetParentRect","outer","regexp","ParseOptionsFactory","parseValues","values","locals","valueName","displayFn","valueFn","$parseOptions","$values","keyName","groupByFn","valuesFn","$match","when","then","version","minor","dot","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","cancel","supported","backdropAnimation","prefixEvent","$compile","$templateCache","$http","$animate","ModalFactory","hideOnBackdropClick","currentTarget","$promise","fetchTemplate","$hide","$$postDigest","$show","$toggle","templateEl","contentEl","findElement","next","remove","outerHTML","modalLinker","modalElement","backdropElement","data","htmlReplaceRegExp","trim","$destroy","$emit","after","display","enter","bodyElement","$isShown","$$phase","$root","$onKeyUp","leave","which","query","get","res","put","String","bsModal","modal","routeAttr","$navbar","copy","path","liElements","li","liElement","pattern","PopoverFactory","$popover","oldValue","popover","$applyPlacement","bsPopover","multiple","sort","caretHtml","placeholder","maxLength","maxLengthHtml","SelectFactory","$matches","$activeIndex","$isMultiple","$activate","activate","$isVisible","$isActive","$updateActiveIndex","isArray","$getIndex","minLength","$viewValue","inputEl","parsedOptions","ngOptions","watchedOptions","filter","spies","$$spies","throttle","ScrollSpyFactory","isWindowSpy","scrollEl","scrollId","$$count","unbindViewContentLoaded","unbindIncludeContentLoaded","activeTarget","debouncedCheckPosition","throttledCheckPosition","debouncedCheckOffsets","viewportHeight","$scrollspy","trackedElements","$trackedElements","sortedElements","checkOffsets","Math","max","innerHeight","docEl","$activateElement","$getTrackedElement","source","obj","trackedElement","targetElement","querySelector","b","trackElement","untrackElement","toDelete","scrollspy","run","$tab","templateUrl","bsTabs","panes","active","activePane","setActive","timeType","timeFormat","minTime","maxTime","hourStep","minuteStep","timepickerFactory","createSelection","start","end","createTextRange","selRange","collapse","moveStart","moveEnd","setSelectionRange","selectionStart","selectionEnd","$timepicker","selectedIndex","hour","meridian","minute","getMinutes","second","getSeconds","millisecond","getMilliseconds","formats","$moveIndex","$switchMeridian","switchMeridian","$isBuilt","midIndex","$isDisabled","minutes","showAM","isAM","selectedTime","newDate","hoursLength","minutesLength","lateralMove","count","timepicker","parsedTime","TooltipFactory","getPosition","getCalculatedOffset","actualWidth","actualHeight","hoverState","tipLinker","tipElement","tipTemplate","tipContainer","isNumber","triggers","$onFocusElementMouseDown","$onFocusKeyUp","elementPosition","tipWidth","tipHeight","tipPosition","tooltip","bsTooltip","limit","TypeaheadFactory","$typeahead","typeahead","$isEmpty"],"mappings":"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"} \ No newline at end of file diff --git a/dist/angular-strap.min.map b/dist/angular-strap.min.map deleted file mode 100644 index 361d6e3eb..000000000 --- a/dist/angular-strap.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"angular-strap.min.js","sources":["angular-strap.js","angular-strap.tpl.js"],"names":["window","document","angular","module","provider","defaults","this","offsetTop","$get","$window","dimensions","AffixFactory","element","config","getRequiredAffixClass","unpin","position","elementHeight","scrollTop","getScrollTop","scrollHeight","getScrollHeight","top","offsetBottom","initialAffixTop","targetEl","pageYOffset","body","$affix","options","extend","target","reset","initialOffsetTop","affixed","parent","offsetParent","match","i","offset","css","height","init","on","checkPosition","checkPositionWithEventLoop","destroy","off","setTimeout","affix","removeClass","addClass","offsetUnpin","bodyEl","offsetHeight","directive","restrict","require","link","scope","attr","affixTarget","$element","forEach","key","isDefined","$on","controller","animation","prefixClass","placement","template","container","backdrop","keyboard","show","duration","type","$modal","$timeout","AlertFactory","$alert","$scope","hide","$location","$sce","requestAnimationFrame","$observe","newValue","trustAsHtml","bsAlert","$watch","isObject","content","alert","trigger","toggle","contentTemplate","html","AsideFactory","$aside","bsAside","aside","activeClass","toggleEvent","compile","removeAttr","children","querySelectorAll","child","childEl","ngModel","$button","$$animateReflow","constantValueRegExp","isInput","nodeName","activeElement","trueValue","test","$eval","falseValue","hasExoticValues","$parsers","push","viewValue","$render","isActive","equals","$modelValue","checked","toggleClass","bind","$apply","$setViewValue","hasClass","value","delay","useNative","dateType","dateFormat","strictFormat","autoclose","minDate","Infinity","maxDate","startView","minView","startWeek","$document","$rootScope","$locale","dateFilter","datepickerViews","$tooltip","DatepickerFactory","updateSelected","el","selected","$datepicker","$isSelected","date","focusElement","focus","parentScope","$options","pickerViews","$views","views","viewDate","$mode","$picker","$select","select","$selectPane","$toggleMode","setMode","length","update","isDate","isNaN","getTime","$date","call","$build","keep","$dateValue","Date","setFullYear","getFullYear","getMonth","getDate","year","month","mode","pristine","built","build","$updateSelected","l","rows","isSelected","steps","targetDate","UTC","day","getUTCFullYear","getUTCMonth","getUTCDate","$onMouseDown","evt","preventDefault","stopPropagation","isTouch","toLowerCase","triggerHandler","$onKeyDown","keyCode","shiftKey","altKey","onKeyDown","$digest","_init","isNative","prop","_destroy","_show","_hide","blur","navigator","userAgent","lang","id","$parse","$q","$dateParser","datepicker","today","isString","substr","dateParser","format","strict","unshift","$setValidity","parsedDate","parse","isValid","toISOString","$formatters","modelValue","isUndefined","val","split","arr","size","arrays","splice","dayFormat","daySplit","picker","weekDaysMin","DATETIME_FORMATS","SHORTDAY","weekDaysLabels","slice","concat","weekDaysLabelsHtml","join","startDate","getTimezoneOffset","force","firstDayOfMonth","firstDate","getDay","days","label","muted","disabled","isDisabled","title","labels","actualTime","name","months","lastDate","actualMonth","setMonth","parseInt","firstYear","years","actualYear","setYear","Array","prototype","DropdownFactory","onBodyClick","$dropdown","$new","items","index","matchesSelector","eq","Element","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","bsDropdown","dropdown","proto","DateParserFactory","setMapForFormat","keys","Object","setFnMap","map","sortedMap","clonedFormat","search","v","escapeReservedSymbols","text","replace","regExpForFormat","regExpMap","re","RegExp","regex","setMap","sss","ss","s","mm","m","HH","H","hh","h","a","EEEE","DAY","EEE","dd","d","MMMM","MONTH","MMM","SHORTMONTH","MM","M","yyyy","yy","setMilliseconds","setSeconds","setMinutes","setHours","setDate","hours","getHours","indexOf","y","$format","baseDate","matches","exec","constant","func","wait","immediate","timeout","args","context","timestamp","result","arguments","later","last","apply","callNow","previous","leading","now","remaining","clearTimeout","trailing","factory","fn","extra","currentStyle","getComputedStyle","style","parseFloat","boxRect","getBoundingClientRect","docElement","ownerDocument","width","offsetWidth","documentElement","clientTop","left","pageXOffset","scrollLeft","clientLeft","offsetParentElement","offsetParentRect","outer","regexp","ParseOptionsFactory","parseValues","values","locals","valueName","displayFn","valueFn","$parseOptions","$values","keyName","groupByFn","valuesFn","$match","when","then","backdropAnimation","$compile","$templateCache","$http","$animate","ModalFactory","hideOnBackdropClick","currentTarget","$promise","fetchTemplate","$hide","$$postDigest","$show","$toggle","templateEl","contentEl","findElement","next","remove","outerHTML","modalLinker","modalElement","backdropElement","data","htmlReplaceRegExp","trim","$destroy","after","display","enter","bodyElement","$isShown","$$phase","$onKeyUp","leave","which","query","get","res","put","String","bsModal","modal","routeAttr","$navbar","copy","path","liElements","li","liElement","pattern","PopoverFactory","$popover","oldValue","popover","$applyPlacement","bsPopover","spies","$$spies","debounce","throttle","ScrollSpyFactory","isWindowSpy","scrollEl","windowEl","scrollId","$$count","unbindViewContentLoaded","unbindIncludeContentLoaded","activeTarget","debouncedCheckPosition","throttledCheckPosition","debouncedCheckOffsets","viewportHeight","$scrollspy","trackedElements","$trackedElements","sortedElements","checkOffsets","Math","max","innerHeight","docEl","$activateElement","$getTrackedElement","source","filter","obj","trackedElement","targetElement","querySelector","sort","b","trackElement","untrackElement","toDelete","activate","scrollspy","multiple","caretHtml","placeholder","maxLength","maxLengthHtml","SelectFactory","$matches","$activeIndex","$isMultiple","$activate","$isVisible","$isActive","$updateActiveIndex","$emit","isArray","$getIndex","minLength","$viewValue","inputEl","parsedOptions","ngOptions","watchedOptions","run","$tab","templateUrl","bsTabs","panes","active","activePane","setActive","timeType","timeFormat","minTime","maxTime","hourStep","minuteStep","timepickerFactory","createSelection","start","end","createTextRange","selRange","collapse","moveStart","moveEnd","setSelectionRange","selectionStart","selectionEnd","$timepicker","selectedIndex","hour","meridian","minute","getMinutes","second","getSeconds","millisecond","getMilliseconds","formats","$moveIndex","$switchMeridian","switchMeridian","$isBuilt","midIndex","$isDisabled","minutes","showAM","isAM","selectedTime","newDate","hoursLength","minutesLength","lateralMove","count","timepicker","parsedTime","TooltipFactory","getPosition","getCalculatedOffset","actualWidth","actualHeight","hoverState","tipLinker","tipElement","tipTemplate","tipContainer","isNumber","triggers","$onFocusElementMouseDown","$onFocusKeyUp","elementPosition","tipWidth","tipHeight","tipPosition","tooltip","bsTooltip","limit","TypeaheadFactory","$typeahead","typeahead"],"mappings":"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"} \ No newline at end of file diff --git a/dist/angular-strap.tpl.js b/dist/angular-strap.tpl.js index dc066ac7e..004b55432 100644 --- a/dist/angular-strap.tpl.js +++ b/dist/angular-strap.tpl.js @@ -1,98 +1,100 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ (function(window, document, undefined) { 'use strict'; -// Source: dist/modules/alert.tpl.js -angular.module('mgcrea.ngStrap.alert').run(['$templateCache', function($templateCache) { -$templateCache.put('alert/alert.tpl.html', - "
 
" - ); -}]); +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/alert/alert.tpl.js +angular.module('mgcrea.ngStrap.alert').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('alert/alert.tpl.html', '
 
'); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/aside/aside.tpl.js +angular.module('mgcrea.ngStrap.aside').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('aside/aside.tpl.html', ''); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/datepicker/datepicker.tpl.js +angular.module('mgcrea.ngStrap.datepicker').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('datepicker/datepicker.tpl.html', ''); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/dropdown/dropdown.tpl.js +angular.module('mgcrea.ngStrap.dropdown').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('dropdown/dropdown.tpl.html', ''); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/modal/modal.tpl.js +angular.module('mgcrea.ngStrap.modal').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('modal/modal.tpl.html', ''); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/popover/popover.tpl.js +angular.module('mgcrea.ngStrap.popover').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('popover/popover.tpl.html', '

'); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/select/select.tpl.js +angular.module('mgcrea.ngStrap.select').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('select/select.tpl.html', ''); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/tab/tab.tpl.js +angular.module('mgcrea.ngStrap.tab').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('tab/tab.tpl.html', '
'); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/timepicker/timepicker.tpl.js +angular.module('mgcrea.ngStrap.timepicker').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('timepicker/timepicker.tpl.html', ''); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/tooltip/tooltip.tpl.js +angular.module('mgcrea.ngStrap.tooltip').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('tooltip/tooltip.tpl.html', '
'); + } +]); + +// Source: /Users/olivier/Dropbox/Projects/angular-strap/src/typeahead/typeahead.tpl.js +angular.module('mgcrea.ngStrap.typeahead').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('typeahead/typeahead.tpl.html', ''); + } +]); -// Source: dist/modules/aside.tpl.js -angular.module('mgcrea.ngStrap.aside').run(['$templateCache', function($templateCache) { -$templateCache.put('aside/aside.tpl.html', - "

" - ); - -}]); - -// Source: dist/modules/datepicker.tpl.js -angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache', function($templateCache) { -$templateCache.put('datepicker/datepicker.tpl.html', - "
" - ); - -}]); - -// Source: dist/modules/dropdown.tpl.js -angular.module('mgcrea.ngStrap.dropdown').run(['$templateCache', function($templateCache) { -$templateCache.put('dropdown/dropdown.tpl.html', - "
" - ); - -}]); - -// Source: dist/modules/modal.tpl.js -angular.module('mgcrea.ngStrap.modal').run(['$templateCache', function($templateCache) { -$templateCache.put('modal/modal.tpl.html', - "

" - ); - -}]); - -// Source: dist/modules/popover.tpl.js -angular.module('mgcrea.ngStrap.popover').run(['$templateCache', function($templateCache) { -$templateCache.put('popover/popover.tpl.html', - "

" - ); - -}]); - -// Source: dist/modules/select.tpl.js -angular.module('mgcrea.ngStrap.select').run(['$templateCache', function($templateCache) { -$templateCache.put('select/select.tpl.html', - "" - ); - -}]); - -// Source: dist/modules/tab.tpl.js -angular.module('mgcrea.ngStrap.tab').run(['$templateCache', function($templateCache) { -$templateCache.put('tab/tab.tpl.html', - "
" - ); - -}]); - -// Source: dist/modules/timepicker.tpl.js -angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache', function($templateCache) { -$templateCache.put('timepicker/timepicker.tpl.html', - "
 
 
 
" - ); - -}]); - -// Source: dist/modules/tooltip.tpl.js -angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache', function($templateCache) { -$templateCache.put('tooltip/tooltip.tpl.html', - "
" - ); - -}]); - -// Source: dist/modules/typeahead.tpl.js -angular.module('mgcrea.ngStrap.typeahead').run(['$templateCache', function($templateCache) { -$templateCache.put('typeahead/typeahead.tpl.html', - "
" - ); - -}]); })(window, document); diff --git a/dist/angular-strap.tpl.min.js b/dist/angular-strap.tpl.min.js index 42fcc29ea..4a04c779d 100644 --- a/dist/angular-strap.tpl.min.js +++ b/dist/angular-strap.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -!function(){"use strict";angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(a){a.put("alert/alert.tpl.html",'
 
')}]),angular.module("mgcrea.ngStrap.aside").run(["$templateCache",function(a){a.put("aside/aside.tpl.html",'')}]),angular.module("mgcrea.ngStrap.datepicker").run(["$templateCache",function(a){a.put("datepicker/datepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.dropdown").run(["$templateCache",function(a){a.put("dropdown/dropdown.tpl.html",'')}]),angular.module("mgcrea.ngStrap.modal").run(["$templateCache",function(a){a.put("modal/modal.tpl.html",'')}]),angular.module("mgcrea.ngStrap.popover").run(["$templateCache",function(a){a.put("popover/popover.tpl.html",'

')}]),angular.module("mgcrea.ngStrap.select").run(["$templateCache",function(a){a.put("select/select.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tab").run(["$templateCache",function(a){a.put("tab/tab.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.timepicker").run(["$templateCache",function(a){a.put("timepicker/timepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tooltip").run(["$templateCache",function(a){a.put("tooltip/tooltip.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.typeahead").run(["$templateCache",function(a){a.put("typeahead/typeahead.tpl.html",'')}])}(window,document); -//# sourceMappingURL=angular-strap.tpl.min.map \ No newline at end of file +!function(){"use strict";angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(t){t.put("alert/alert.tpl.html",'
 
')}]),angular.module("mgcrea.ngStrap.aside").run(["$templateCache",function(t){t.put("aside/aside.tpl.html",'')}]),angular.module("mgcrea.ngStrap.datepicker").run(["$templateCache",function(t){t.put("datepicker/datepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.dropdown").run(["$templateCache",function(t){t.put("dropdown/dropdown.tpl.html",'')}]),angular.module("mgcrea.ngStrap.modal").run(["$templateCache",function(t){t.put("modal/modal.tpl.html",'')}]),angular.module("mgcrea.ngStrap.popover").run(["$templateCache",function(t){t.put("popover/popover.tpl.html",'

')}]),angular.module("mgcrea.ngStrap.select").run(["$templateCache",function(t){t.put("select/select.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tab").run(["$templateCache",function(t){t.put("tab/tab.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.timepicker").run(["$templateCache",function(t){t.put("timepicker/timepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tooltip").run(["$templateCache",function(t){t.put("tooltip/tooltip.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.typeahead").run(["$templateCache",function(t){t.put("typeahead/typeahead.tpl.html",'')}])}(window,document); \ No newline at end of file diff --git a/dist/angular-strap.tpl.min.js.map b/dist/angular-strap.tpl.min.js.map new file mode 100644 index 000000000..fd30df8b3 --- /dev/null +++ b/dist/angular-strap.tpl.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"angular-strap.tpl.min.js.map","sources":["angular-strap.tpl.min.js"],"names":["angular","module","run","$templateCache","put","window","document"],"mappings":"CAOA,WACA,YAGAA,SAAQC,OAAO,wBAAwBC,KACrC,iBACA,SAAUC,GACRA,EAAeC,IAAI,uBAAwB,gQAK/CJ,QAAQC,OAAO,wBAAwBC,KACrC,iBACA,SAAUC,GACRA,EAAeC,IAAI,uBAAwB,gcAK/CJ,QAAQC,OAAO,6BAA6BC,KAC1C,iBACA,SAAUC,GACRA,EAAeC,IAAI,iCAAkC,gtCAKzDJ,QAAQC,OAAO,2BAA2BC,KACxC,iBACA,SAAUC,GACRA,EAAeC,IAAI,6BAA8B,6aAKrDJ,QAAQC,OAAO,wBAAwBC,KACrC,iBACA,SAAUC,GACRA,EAAeC,IAAI,uBAAwB,gcAK/CJ,QAAQC,OAAO,0BAA0BC,KACvC,iBACA,SAAUC,GACRA,EAAeC,IAAI,2BAA4B,+KAKnDJ,QAAQC,OAAO,yBAAyBC,KACtC,iBACA,SAAUC,GACRA,EAAeC,IAAI,yBAA0B,gaAKjDJ,QAAQC,OAAO,sBAAsBC,KACnC,iBACA,SAAUC,GACRA,EAAeC,IAAI,mBAAoB,iYAK3CJ,QAAQC,OAAO,6BAA6BC,KAC1C,iBACA,SAAUC,GACRA,EAAeC,IAAI,iCAAkC,olEAKzDJ,QAAQC,OAAO,0BAA0BC,KACvC,iBACA,SAAUC,GACRA,EAAeC,IAAI,2BAA4B,uIAKnDJ,QAAQC,OAAO,4BAA4BC,KACzC,iBACA,SAAUC,GACRA,EAAeC,IAAI,+BAAgC,ySAKpDC,OAAQC"} \ No newline at end of file diff --git a/dist/angular-strap.tpl.min.map b/dist/angular-strap.tpl.min.map deleted file mode 100644 index 280392631..000000000 --- a/dist/angular-strap.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"angular-strap.tpl.min.js","sources":["angular-strap.tpl.js"],"names":["angular","module","run","$templateCache","put","window","document"],"mappings":"CAAA,WACA,YAEAA,SAAQC,OAAO,wBAAwBC,KAAK,iBAAkB,SAASC,GACvEA,EAAeC,IAAI,uBACf,gQAMJJ,QAAQC,OAAO,wBAAwBC,KAAK,iBAAkB,SAASC,GACvEA,EAAeC,IAAI,uBACf,gcAMJJ,QAAQC,OAAO,6BAA6BC,KAAK,iBAAkB,SAASC,GAC5EA,EAAeC,IAAI,iCACf,gtCAMJJ,QAAQC,OAAO,2BAA2BC,KAAK,iBAAkB,SAASC,GAC1EA,EAAeC,IAAI,6BACf,6aAMJJ,QAAQC,OAAO,wBAAwBC,KAAK,iBAAkB,SAASC,GACvEA,EAAeC,IAAI,uBACf,gcAMJJ,QAAQC,OAAO,0BAA0BC,KAAK,iBAAkB,SAASC,GACzEA,EAAeC,IAAI,2BACf,+KAMJJ,QAAQC,OAAO,yBAAyBC,KAAK,iBAAkB,SAASC,GACxEA,EAAeC,IAAI,yBACf,gaAMJJ,QAAQC,OAAO,sBAAsBC,KAAK,iBAAkB,SAASC,GACrEA,EAAeC,IAAI,mBACf,iYAMJJ,QAAQC,OAAO,6BAA6BC,KAAK,iBAAkB,SAASC,GAC5EA,EAAeC,IAAI,iCACf,olEAMJJ,QAAQC,OAAO,0BAA0BC,KAAK,iBAAkB,SAASC,GACzEA,EAAeC,IAAI,2BACf,uIAMJJ,QAAQC,OAAO,4BAA4BC,KAAK,iBAAkB,SAASC,GAC3EA,EAAeC,IAAI,+BACf,ySAKDC,OAAQC"} \ No newline at end of file diff --git a/dist/modules/affix.js b/dist/modules/affix.js index 61f5267bb..20eff6d3f 100644 --- a/dist/modules/affix.js +++ b/dist/modules/affix.js @@ -1,25 +1,30 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ 'use strict'; -angular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions']).provider('$affix', function () { +angular.module('mgcrea.ngStrap.affix', [ + 'mgcrea.ngStrap.helpers.dimensions', + 'mgcrea.ngStrap.helpers.debounce' +]).provider('$affix', function () { var defaults = this.defaults = { offsetTop: 'auto' }; this.$get = [ '$window', + 'debounce', 'dimensions', - function ($window, dimensions) { + function ($window, debounce, dimensions) { var bodyEl = angular.element($window.document.body); + var windowEl = angular.element($window); function AffixFactory(element, config) { var $affix = {}; // Common vars var options = angular.extend({}, defaults, config); var targetEl = options.target; // Initial private vars - var reset = 'affix affix-top affix-bottom', initialAffixTop = 0, initialOffsetTop = 0, affixed = null, unpin = null; + var reset = 'affix affix-top affix-bottom', initialAffixTop = 0, initialOffsetTop = 0, offsetTop = 0, offsetBottom = 0, affixed = null, unpin = null; var parent = element.parent(); // Options: custom parent if (options.offsetParent) { @@ -31,49 +36,26 @@ angular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions']).pr parent = angular.element(options.offsetParent); } } - // Options: offsets - var offsetTop = 0; - if (options.offsetTop) { - if (options.offsetTop === 'auto') { - options.offsetTop = '+0'; - } - if (options.offsetTop.match(/^[-+]\d+$/)) { - initialAffixTop -= options.offsetTop * 1; - if (options.offsetParent) { - offsetTop = dimensions.offset(parent[0]).top + options.offsetTop * 1; - } else { - offsetTop = dimensions.offset(element[0]).top - dimensions.css(element[0], 'marginTop', true) + options.offsetTop * 1; - } - } else { - offsetTop = options.offsetTop * 1; - } - } - var offsetBottom = 0; - if (options.offsetBottom) { - if (options.offsetParent && options.offsetBottom.match(/^[-+]\d+$/)) { - // add 1 pixel due to rounding problems... - offsetBottom = getScrollHeight() - (dimensions.offset(parent[0]).top + dimensions.height(parent[0])) + options.offsetBottom * 1 + 1; - } else { - offsetBottom = options.offsetBottom * 1; - } - } $affix.init = function () { + $affix.$parseOffsets(); initialOffsetTop = dimensions.offset(element[0]).top + initialAffixTop; // Bind events - targetEl.on('scroll', this.checkPosition); - targetEl.on('click', this.checkPositionWithEventLoop); + targetEl.on('scroll', $affix.checkPosition); + targetEl.on('click', $affix.checkPositionWithEventLoop); + windowEl.on('resize', $affix.$debouncedOnResize); // Both of these checkPosition() calls are necessary for the case where // the user hits refresh after scrolling to the bottom of the page. - this.checkPosition(); - this.checkPositionWithEventLoop(); + $affix.checkPosition(); + $affix.checkPositionWithEventLoop(); }; $affix.destroy = function () { // Unbind events - targetEl.off('scroll', this.checkPosition); - targetEl.off('click', this.checkPositionWithEventLoop); + targetEl.off('scroll', $affix.checkPosition); + targetEl.off('click', $affix.checkPositionWithEventLoop); + windowEl.off('resize', $affix.$debouncedOnResize); }; $affix.checkPositionWithEventLoop = function () { - setTimeout(this.checkPosition, 1); + setTimeout($affix.checkPosition, 1); }; $affix.checkPosition = function () { // if (!this.$element.is(':visible')) return @@ -109,6 +91,38 @@ angular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions']).pr element.css('top', initialAffixTop + 'px'); } }; + $affix.$onResize = function () { + $affix.$parseOffsets(); + $affix.checkPosition(); + }; + $affix.$debouncedOnResize = debounce($affix.$onResize, 50); + $affix.$parseOffsets = function () { + // Reset position to calculate correct offsetTop + element.css('position', options.offsetParent ? '' : 'relative'); + if (options.offsetTop) { + if (options.offsetTop === 'auto') { + options.offsetTop = '+0'; + } + if (options.offsetTop.match(/^[-+]\d+$/)) { + initialAffixTop = -options.offsetTop * 1; + if (options.offsetParent) { + offsetTop = dimensions.offset(parent[0]).top + options.offsetTop * 1; + } else { + offsetTop = dimensions.offset(element[0]).top - dimensions.css(element[0], 'marginTop', true) + options.offsetTop * 1; + } + } else { + offsetTop = options.offsetTop * 1; + } + } + if (options.offsetBottom) { + if (options.offsetParent && options.offsetBottom.match(/^[-+]\d+$/)) { + // add 1 pixel due to rounding problems... + offsetBottom = getScrollHeight() - (dimensions.offset(parent[0]).top + dimensions.height(parent[0])) + options.offsetBottom * 1 + 1; + } else { + offsetBottom = options.offsetBottom * 1; + } + } + }; // Private methods function getRequiredAffixClass(unpin, position, elementHeight) { var scrollTop = getScrollTop(); diff --git a/dist/modules/affix.min.js b/dist/modules/affix.min.js index eb7f5dfd1..2f80c3ffe 100644 --- a/dist/modules/affix.min.js +++ b/dist/modules/affix.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.affix",["mgcrea.ngStrap.helpers.dimensions"]).provider("$affix",function(){var a=this.defaults={offsetTop:"auto"};this.$get=["$window","dimensions",function(b,c){function d(d,f){function g(a,b,c){var d=h(),e=i();return t>=d?"top":null!==a&&d+a<=b.top?"middle":null!==u&&b.top+c+n>=e-u?"bottom":"middle"}function h(){return l[0]===b?b.pageYOffset:l[0]===b}function i(){return l[0]===b?b.document.body.scrollHeight:l[0].scrollHeight}var j={},k=angular.extend({},a,f),l=k.target,m="affix affix-top affix-bottom",n=0,o=0,p=null,q=null,r=d.parent();if(k.offsetParent)if(k.offsetParent.match(/^\d+$/))for(var s=0;s<1*k.offsetParent-1;s++)r=r.parent();else r=angular.element(k.offsetParent);var t=0;k.offsetTop&&("auto"===k.offsetTop&&(k.offsetTop="+0"),k.offsetTop.match(/^[-+]\d+$/)?(n-=1*k.offsetTop,t=k.offsetParent?c.offset(r[0]).top+1*k.offsetTop:c.offset(d[0]).top-c.css(d[0],"marginTop",!0)+1*k.offsetTop):t=1*k.offsetTop);var u=0;return k.offsetBottom&&(u=k.offsetParent&&k.offsetBottom.match(/^[-+]\d+$/)?i()-(c.offset(r[0]).top+c.height(r[0]))+1*k.offsetBottom+1:1*k.offsetBottom),j.init=function(){o=c.offset(d[0]).top+n,l.on("scroll",this.checkPosition),l.on("click",this.checkPositionWithEventLoop),this.checkPosition(),this.checkPositionWithEventLoop()},j.destroy=function(){l.off("scroll",this.checkPosition),l.off("click",this.checkPositionWithEventLoop)},j.checkPositionWithEventLoop=function(){setTimeout(this.checkPosition,1)},j.checkPosition=function(){var a=h(),b=c.offset(d[0]),f=c.height(d[0]),i=g(q,b,f);p!==i&&(p=i,d.removeClass(m).addClass("affix"+("middle"!==i?"-"+i:"")),"top"===i?(q=null,d.css("position",k.offsetParent?"":"relative"),d.css("top","")):"bottom"===i?(q=k.offsetUnpin?-(1*k.offsetUnpin):b.top-a,d.css("position",k.offsetParent?"":"relative"),d.css("top",k.offsetParent?"":e[0].offsetHeight-u-f-o+"px")):(q=null,d.css("position","fixed"),d.css("top",n+"px")))},j.init(),j}var e=angular.element(b.document.body);return d}]}).directive("bsAffix",["$affix","$window",function(a,b){return{restrict:"EAC",require:"^?bsAffixTarget",link:function(c,d,e,f){var g={scope:c,offsetTop:"auto",target:f?f.$element:angular.element(b)};angular.forEach(["offsetTop","offsetBottom","offsetParent","offsetUnpin"],function(a){angular.isDefined(e[a])&&(g[a]=e[a])});var h=a(d,g);c.$on("$destroy",function(){g=null,h=null})}}}]).directive("bsAffixTarget",function(){return{controller:["$element",function(a){this.$element=a}]}}); -//# sourceMappingURL=affix.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.affix",["mgcrea.ngStrap.helpers.dimensions","mgcrea.ngStrap.helpers.debounce"]).provider("$affix",function(){var t=this.defaults={offsetTop:"auto"};this.$get=["$window","debounce","dimensions",function(e,o,n){function f(f,r){function c(t,e,o){var n=a(),f=l();return P>=n?"top":null!==t&&n+t<=e.top?"middle":null!==$&&e.top+o+h>=f-$?"bottom":"middle"}function a(){return d[0]===e?e.pageYOffset:d[0]===e}function l(){return d[0]===e?e.document.body.scrollHeight:d[0].scrollHeight}var u={},p=angular.extend({},t,r),d=p.target,m="affix affix-top affix-bottom",h=0,g=0,P=0,$=0,v=null,T=null,x=f.parent();if(p.offsetParent)if(p.offsetParent.match(/^\d+$/))for(var b=0;b<1*p.offsetParent-1;b++)x=x.parent();else x=angular.element(p.offsetParent);return u.init=function(){u.$parseOffsets(),g=n.offset(f[0]).top+h,d.on("scroll",u.checkPosition),d.on("click",u.checkPositionWithEventLoop),i.on("resize",u.$debouncedOnResize),u.checkPosition(),u.checkPositionWithEventLoop()},u.destroy=function(){d.off("scroll",u.checkPosition),d.off("click",u.checkPositionWithEventLoop),i.off("resize",u.$debouncedOnResize)},u.checkPositionWithEventLoop=function(){setTimeout(u.checkPosition,1)},u.checkPosition=function(){var t=a(),e=n.offset(f[0]),o=n.height(f[0]),i=c(T,e,o);v!==i&&(v=i,f.removeClass(m).addClass("affix"+("middle"!==i?"-"+i:"")),"top"===i?(T=null,f.css("position",p.offsetParent?"":"relative"),f.css("top","")):"bottom"===i?(T=p.offsetUnpin?-(1*p.offsetUnpin):e.top-t,f.css("position",p.offsetParent?"":"relative"),f.css("top",p.offsetParent?"":s[0].offsetHeight-$-o-g+"px")):(T=null,f.css("position","fixed"),f.css("top",h+"px")))},u.$onResize=function(){u.$parseOffsets(),u.checkPosition()},u.$debouncedOnResize=o(u.$onResize,50),u.$parseOffsets=function(){f.css("position",p.offsetParent?"":"relative"),p.offsetTop&&("auto"===p.offsetTop&&(p.offsetTop="+0"),p.offsetTop.match(/^[-+]\d+$/)?(h=1*-p.offsetTop,P=p.offsetParent?n.offset(x[0]).top+1*p.offsetTop:n.offset(f[0]).top-n.css(f[0],"marginTop",!0)+1*p.offsetTop):P=1*p.offsetTop),p.offsetBottom&&($=p.offsetParent&&p.offsetBottom.match(/^[-+]\d+$/)?l()-(n.offset(x[0]).top+n.height(x[0]))+1*p.offsetBottom+1:1*p.offsetBottom)},u.init(),u}var s=angular.element(e.document.body),i=angular.element(e);return f}]}).directive("bsAffix",["$affix","$window",function(t,e){return{restrict:"EAC",require:"^?bsAffixTarget",link:function(o,n,f,s){var i={scope:o,offsetTop:"auto",target:s?s.$element:angular.element(e)};angular.forEach(["offsetTop","offsetBottom","offsetParent","offsetUnpin"],function(t){angular.isDefined(f[t])&&(i[t]=f[t])});var r=t(n,i);o.$on("$destroy",function(){i=null,r=null})}}}]).directive("bsAffixTarget",function(){return{controller:["$element",function(t){this.$element=t}]}}); \ No newline at end of file diff --git a/dist/modules/affix.min.js.map b/dist/modules/affix.min.js.map new file mode 100644 index 000000000..5ede65e93 --- /dev/null +++ b/dist/modules/affix.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"affix.min.js.map","sources":["affix.min.js"],"names":["angular","module","provider","defaults","this","offsetTop","$get","$window","debounce","dimensions","AffixFactory","element","config","getRequiredAffixClass","unpin","position","elementHeight","scrollTop","getScrollTop","scrollHeight","getScrollHeight","top","offsetBottom","initialAffixTop","targetEl","pageYOffset","document","body","$affix","options","extend","target","reset","initialOffsetTop","affixed","parent","offsetParent","match","i","init","$parseOffsets","offset","on","checkPosition","checkPositionWithEventLoop","windowEl","$debouncedOnResize","destroy","off","setTimeout","height","affix","removeClass","addClass","css","offsetUnpin","bodyEl","offsetHeight","$onResize","directive","restrict","require","link","scope","attr","affixTarget","$element","forEach","key","isDefined","$on","controller"],"mappings":"AAOA,YACAA,SAAQC,OAAO,wBACb,oCACA,oCACCC,SAAS,SAAU,WACpB,GAAIC,GAAWC,KAAKD,UAAaE,UAAW,OAC5CD,MAAKE,MACH,UACA,WACA,aACA,SAAUC,EAASC,EAAUC,GAG3B,QAASC,GAAaC,EAASC,GA0G7B,QAASC,GAAsBC,EAAOC,EAAUC,GAC9C,GAAIC,GAAYC,IACZC,EAAeC,GACnB,OAAiBf,IAAbY,EACK,MACY,OAAVH,GAAkBG,EAAYH,GAASC,EAASM,IAClD,SACmB,OAAjBC,GAAyBP,EAASM,IAAML,EAAgBO,GAAmBJ,EAAeG,EAC5F,SAEA,SAGX,QAASJ,KACP,MAAOM,GAAS,KAAOjB,EAAUA,EAAQkB,YAAcD,EAAS,KAAOjB,EAEzE,QAASa,KACP,MAAOI,GAAS,KAAOjB,EAAUA,EAAQmB,SAASC,KAAKR,aAAeK,EAAS,GAAGL,aA1HpF,GAAIS,MAEAC,EAAU7B,QAAQ8B,UAAW3B,EAAUS,GACvCY,EAAWK,EAAQE,OAEnBC,EAAQ,+BAAgCT,EAAkB,EAAGU,EAAmB,EAAG5B,EAAY,EAAGiB,EAAe,EAAGY,EAAU,KAAMpB,EAAQ,KAC5IqB,EAASxB,EAAQwB,QAErB,IAAIN,EAAQO,aACV,GAAIP,EAAQO,aAAaC,MAAM,SAC7B,IAAK,GAAIC,GAAI,EAAGA,EAA2B,EAAvBT,EAAQO,aAAmB,EAAGE,IAChDH,EAASA,EAAOA,aAGlBA,GAASnC,QAAQW,QAAQkB,EAAQO,aA+GrC,OA5GAR,GAAOW,KAAO,WACZX,EAAOY,gBACPP,EAAmBxB,EAAWgC,OAAO9B,EAAQ,IAAIU,IAAME,EAEvDC,EAASkB,GAAG,SAAUd,EAAOe,eAC7BnB,EAASkB,GAAG,QAASd,EAAOgB,4BAC5BC,EAASH,GAAG,SAAUd,EAAOkB,oBAG7BlB,EAAOe,gBACPf,EAAOgB,8BAEThB,EAAOmB,QAAU,WAEfvB,EAASwB,IAAI,SAAUpB,EAAOe,eAC9BnB,EAASwB,IAAI,QAASpB,EAAOgB,4BAC7BC,EAASG,IAAI,SAAUpB,EAAOkB,qBAEhClB,EAAOgB,2BAA6B,WAClCK,WAAWrB,EAAOe,cAAe,IAEnCf,EAAOe,cAAgB,WAErB,GAAI1B,GAAYC,IACZH,EAAWN,EAAWgC,OAAO9B,EAAQ,IACrCK,EAAgBP,EAAWyC,OAAOvC,EAAQ,IAE1CwC,EAAQtC,EAAsBC,EAAOC,EAAUC,EAE/CkB,KAAYiB,IAEhBjB,EAAUiB,EAEVxC,EAAQyC,YAAYpB,GAAOqB,SAAS,SAAqB,WAAVF,EAAqB,IAAMA,EAAQ,KACpE,QAAVA,GACFrC,EAAQ,KACRH,EAAQ2C,IAAI,WAAYzB,EAAQO,aAAe,GAAK,YACpDzB,EAAQ2C,IAAI,MAAO,KACA,WAAVH,GAEPrC,EADEe,EAAQ0B,cACsB,EAAtB1B,EAAQ0B,aAIVxC,EAASM,IAAMJ,EAEzBN,EAAQ2C,IAAI,WAAYzB,EAAQO,aAAe,GAAK,YACpDzB,EAAQ2C,IAAI,MAAOzB,EAAQO,aAAe,GAAKoB,EAAO,GAAGC,aAAenC,EAAeN,EAAgBiB,EAAmB,QAG1HnB,EAAQ,KACRH,EAAQ2C,IAAI,WAAY,SACxB3C,EAAQ2C,IAAI,MAAO/B,EAAkB,SAGzCK,EAAO8B,UAAY,WACjB9B,EAAOY,gBACPZ,EAAOe,iBAETf,EAAOkB,mBAAqBtC,EAASoB,EAAO8B,UAAW,IACvD9B,EAAOY,cAAgB,WAErB7B,EAAQ2C,IAAI,WAAYzB,EAAQO,aAAe,GAAK,YAChDP,EAAQxB,YACgB,SAAtBwB,EAAQxB,YACVwB,EAAQxB,UAAY,MAElBwB,EAAQxB,UAAUgC,MAAM,cAC1Bd,EAAuC,GAApBM,EAAQxB,UAEzBA,EADEwB,EAAQO,aACE3B,EAAWgC,OAAON,EAAO,IAAId,IAA0B,EAApBQ,EAAQxB,UAE3CI,EAAWgC,OAAO9B,EAAQ,IAAIU,IAAMZ,EAAW6C,IAAI3C,EAAQ,GAAI,aAAa,GAA4B,EAApBkB,EAAQxB,WAG1GA,EAAgC,EAApBwB,EAAQxB,WAGpBwB,EAAQP,eAGRA,EAFEO,EAAQO,cAAgBP,EAAQP,aAAae,MAAM,aAEtCjB,KAAqBX,EAAWgC,OAAON,EAAO,IAAId,IAAMZ,EAAWyC,OAAOf,EAAO,KAA8B,EAAvBN,EAAQP,aAAmB,EAE5F,EAAvBO,EAAQP,eAwB7BM,EAAOW,OACAX,EAhIT,GAAI4B,GAASxD,QAAQW,QAAQJ,EAAQmB,SAASC,MAC1CkB,EAAW7C,QAAQW,QAAQJ,EAiI/B,OAAOG,OAGViD,UAAU,WACX,SACA,UACA,SAAU/B,EAAQrB,GAChB,OACEqD,SAAU,MACVC,QAAS,kBACTC,KAAM,SAAkBC,EAAOpD,EAASqD,EAAMC,GAC5C,GAAIpC,IACAkC,MAAOA,EACP1D,UAAW,OACX0B,OAAQkC,EAAcA,EAAYC,SAAWlE,QAAQW,QAAQJ,GAEjEP,SAAQmE,SACN,YACA,eACA,eACA,eACC,SAAUC,GACPpE,QAAQqE,UAAUL,EAAKI,MACzBvC,EAAQuC,GAAOJ,EAAKI,KAExB,IAAIjB,GAAQvB,EAAOjB,EAASkB,EAC5BkC,GAAMO,IAAI,WAAY,WACpBzC,EAAU,KACVsB,EAAQ,YAKfQ,UAAU,gBAAiB,WAC5B,OACEY,YACE,WACA,SAAUL,GACR9D,KAAK8D,SAAWA"} \ No newline at end of file diff --git a/dist/modules/affix.min.map b/dist/modules/affix.min.map deleted file mode 100644 index e45689b16..000000000 --- a/dist/modules/affix.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"affix.min.js","sources":["affix.js"],"names":["angular","module","provider","defaults","this","offsetTop","$get","$window","dimensions","AffixFactory","element","config","getRequiredAffixClass","unpin","position","elementHeight","scrollTop","getScrollTop","scrollHeight","getScrollHeight","top","offsetBottom","initialAffixTop","targetEl","pageYOffset","document","body","$affix","options","extend","target","reset","initialOffsetTop","affixed","parent","offsetParent","match","i","offset","css","height","init","on","checkPosition","checkPositionWithEventLoop","destroy","off","setTimeout","affix","removeClass","addClass","offsetUnpin","bodyEl","offsetHeight","directive","restrict","require","link","scope","attr","affixTarget","$element","forEach","key","isDefined","$on","controller"],"mappings":"AAAA,YACAA,SAAQC,OAAO,wBAAyB,sCAAsCC,SAAS,SAAU,WAC/F,GAAIC,GAAWC,KAAKD,UAAaE,UAAW,OAC5CD,MAAKE,MACH,UACA,aACA,SAAUC,EAASC,GAEjB,QAASC,GAAaC,EAASC,GAiG7B,QAASC,GAAsBC,EAAOC,EAAUC,GAC9C,GAAIC,GAAYC,IACZC,EAAeC,GACnB,OAAiBd,IAAbW,EACK,MACY,OAAVH,GAAkBG,EAAYH,GAASC,EAASM,IAClD,SACmB,OAAjBC,GAAyBP,EAASM,IAAML,EAAgBO,GAAmBJ,EAAeG,EAC5F,SAEA,SAGX,QAASJ,KACP,MAAOM,GAAS,KAAOhB,EAAUA,EAAQiB,YAAcD,EAAS,KAAOhB,EAEzE,QAASY,KACP,MAAOI,GAAS,KAAOhB,EAAUA,EAAQkB,SAASC,KAAKR,aAAeK,EAAS,GAAGL,aAjHpF,GAAIS,MAEAC,EAAU5B,QAAQ6B,UAAW1B,EAAUQ,GACvCY,EAAWK,EAAQE,OAEnBC,EAAQ,+BAAgCT,EAAkB,EAAGU,EAAmB,EAAGC,EAAU,KAAMpB,EAAQ,KAC3GqB,EAASxB,EAAQwB,QAErB,IAAIN,EAAQO,aACV,GAAIP,EAAQO,aAAaC,MAAM,SAC7B,IAAK,GAAIC,GAAI,EAAGA,EAA2B,EAAvBT,EAAQO,aAAmB,EAAGE,IAChDH,EAASA,EAAOA,aAGlBA,GAASlC,QAAQU,QAAQkB,EAAQO,aAIrC,IAAI9B,GAAY,CACZuB,GAAQvB,YACgB,SAAtBuB,EAAQvB,YACVuB,EAAQvB,UAAY,MAElBuB,EAAQvB,UAAU+B,MAAM,cAC1Bd,GAAuC,EAApBM,EAAQvB,UAEzBA,EADEuB,EAAQO,aACE3B,EAAW8B,OAAOJ,EAAO,IAAId,IAA0B,EAApBQ,EAAQvB,UAE3CG,EAAW8B,OAAO5B,EAAQ,IAAIU,IAAMZ,EAAW+B,IAAI7B,EAAQ,GAAI,aAAa,GAA4B,EAApBkB,EAAQvB,WAG1GA,EAAgC,EAApBuB,EAAQvB,UAGxB,IAAIgB,GAAe,CAkFnB,OAjFIO,GAAQP,eAGRA,EAFEO,EAAQO,cAAgBP,EAAQP,aAAae,MAAM,aAEtCjB,KAAqBX,EAAW8B,OAAOJ,EAAO,IAAId,IAAMZ,EAAWgC,OAAON,EAAO,KAA8B,EAAvBN,EAAQP,aAAmB,EAE5F,EAAvBO,EAAQP,cAG3BM,EAAOc,KAAO,WACZT,EAAmBxB,EAAW8B,OAAO5B,EAAQ,IAAIU,IAAME,EAEvDC,EAASmB,GAAG,SAAUtC,KAAKuC,eAC3BpB,EAASmB,GAAG,QAAStC,KAAKwC,4BAG1BxC,KAAKuC,gBACLvC,KAAKwC,8BAEPjB,EAAOkB,QAAU,WAEftB,EAASuB,IAAI,SAAU1C,KAAKuC,eAC5BpB,EAASuB,IAAI,QAAS1C,KAAKwC,6BAE7BjB,EAAOiB,2BAA6B,WAClCG,WAAW3C,KAAKuC,cAAe,IAEjChB,EAAOgB,cAAgB,WAErB,GAAI3B,GAAYC,IACZH,EAAWN,EAAW8B,OAAO5B,EAAQ,IACrCK,EAAgBP,EAAWgC,OAAO9B,EAAQ,IAE1CsC,EAAQpC,EAAsBC,EAAOC,EAAUC,EAE/CkB,KAAYe,IAEhBf,EAAUe,EAEVtC,EAAQuC,YAAYlB,GAAOmB,SAAS,SAAqB,WAAVF,EAAqB,IAAMA,EAAQ,KACpE,QAAVA,GACFnC,EAAQ,KACRH,EAAQ6B,IAAI,WAAYX,EAAQO,aAAe,GAAK,YACpDzB,EAAQ6B,IAAI,MAAO,KACA,WAAVS,GAEPnC,EADEe,EAAQuB,cACsB,EAAtBvB,EAAQuB,aAIVrC,EAASM,IAAMJ,EAEzBN,EAAQ6B,IAAI,WAAYX,EAAQO,aAAe,GAAK,YACpDzB,EAAQ6B,IAAI,MAAOX,EAAQO,aAAe,GAAKiB,EAAO,GAAGC,aAAehC,EAAeN,EAAgBiB,EAAmB,QAG1HnB,EAAQ,KACRH,EAAQ6B,IAAI,WAAY,SACxB7B,EAAQ6B,IAAI,MAAOjB,EAAkB,SAuBzCK,EAAOc,OACAd,EAtHT,GAAIyB,GAASpD,QAAQU,QAAQH,EAAQkB,SAASC,KAwH9C,OAAOjB,OAGV6C,UAAU,WACX,SACA,UACA,SAAU3B,EAAQpB,GAChB,OACEgD,SAAU,MACVC,QAAS,kBACTC,KAAM,SAAkBC,EAAOhD,EAASiD,EAAMC,GAC5C,GAAIhC,IACA8B,MAAOA,EACPrD,UAAW,OACXyB,OAAQ8B,EAAcA,EAAYC,SAAW7D,QAAQU,QAAQH,GAEjEP,SAAQ8D,SACN,YACA,eACA,eACA,eACC,SAAUC,GACP/D,QAAQgE,UAAUL,EAAKI,MACzBnC,EAAQmC,GAAOJ,EAAKI,KAExB,IAAIf,GAAQrB,EAAOjB,EAASkB,EAC5B8B,GAAMO,IAAI,WAAY,WACpBrC,EAAU,KACVoB,EAAQ,YAKfM,UAAU,gBAAiB,WAC5B,OACEY,YACE,WACA,SAAUL,GACRzD,KAAKyD,SAAWA"} \ No newline at end of file diff --git a/dist/modules/alert.js b/dist/modules/alert.js index b576fcb0e..0cd495c53 100644 --- a/dist/modules/alert.js +++ b/dist/modules/alert.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -9,7 +9,7 @@ // @BUG: following snippet won't compile correctly // @TODO: submit issue to core // ' ' + -angular.module('mgcrea.ngStrap.alert', []).provider('$alert', function () { +angular.module('mgcrea.ngStrap.alert', ['mgcrea.ngStrap.modal']).provider('$alert', function () { var defaults = this.defaults = { animation: 'am-fade', prefixClass: 'alert', diff --git a/dist/modules/alert.min.js b/dist/modules/alert.min.js index 87d9c5c88..ed9f635ba 100644 --- a/dist/modules/alert.min.js +++ b/dist/modules/alert.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.alert",[]).provider("$alert",function(){var a=this.defaults={animation:"am-fade",prefixClass:"alert",placement:null,template:"alert/alert.tpl.html",container:!1,element:null,backdrop:!1,keyboard:!0,show:!0,duration:!1,type:!1};this.$get=["$modal","$timeout",function(b,c){function d(d){var e={},f=angular.extend({},a,d);e=b(f),f.type&&(e.$scope.type=f.type);var g=e.show;return f.duration&&(e.show=function(){g(),c(function(){e.hide()},1e3*f.duration)}),e}return d}]}).directive("bsAlert",["$window","$location","$sce","$alert",function(a,b,c,d){a.requestAnimationFrame||a.setTimeout;return{restrict:"EAC",scope:!0,link:function(a,b,e){var f={scope:a,element:b,show:!1};angular.forEach(["template","placement","keyboard","html","container","animation","duration"],function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),angular.forEach(["title","content","type"],function(b){e[b]&&e.$observe(b,function(d){a[b]=c.trustAsHtml(d)})}),e.bsAlert&&a.$watch(e.bsAlert,function(b){angular.isObject(b)?angular.extend(a,b):a.content=b},!0);var g=d(f);b.on(e.trigger||"click",g.toggle),a.$on("$destroy",function(){g.destroy(),f=null,g=null})}}}]),angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(a){a.put("alert/alert.tpl.html",'
 
')}]); -//# sourceMappingURL=alert.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.alert",["mgcrea.ngStrap.modal"]).provider("$alert",function(){var t=this.defaults={animation:"am-fade",prefixClass:"alert",placement:null,template:"alert/alert.tpl.html",container:!1,element:null,backdrop:!1,keyboard:!0,show:!0,duration:!1,type:!1};this.$get=["$modal","$timeout",function(e,n){function a(a){var r={},o=angular.extend({},t,a);r=e(o),o.type&&(r.$scope.type=o.type);var i=r.show;return o.duration&&(r.show=function(){i(),n(function(){r.hide()},1e3*o.duration)}),r}return a}]}).directive("bsAlert",["$window","$location","$sce","$alert",function(t,e,n,a){t.requestAnimationFrame||t.setTimeout;return{restrict:"EAC",scope:!0,link:function(t,e,r){var o={scope:t,element:e,show:!1};angular.forEach(["template","placement","keyboard","html","container","animation","duration"],function(t){angular.isDefined(r[t])&&(o[t]=r[t])}),angular.forEach(["title","content","type"],function(e){r[e]&&r.$observe(e,function(a){t[e]=n.trustAsHtml(a)})}),r.bsAlert&&t.$watch(r.bsAlert,function(e){angular.isObject(e)?angular.extend(t,e):t.content=e},!0);var i=a(o);e.on(r.trigger||"click",i.toggle),t.$on("$destroy",function(){i.destroy(),o=null,i=null})}}}]); \ No newline at end of file diff --git a/dist/modules/alert.min.js.map b/dist/modules/alert.min.js.map new file mode 100644 index 000000000..a0f1438f8 --- /dev/null +++ b/dist/modules/alert.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"alert.min.js.map","sources":["alert.min.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","container","element","backdrop","keyboard","show","duration","type","$get","$modal","$timeout","AlertFactory","config","$alert","options","extend","$scope","hide","directive","$window","$location","$sce","requestAnimationFrame","setTimeout","restrict","scope","link","attr","forEach","key","isDefined","$observe","newValue","trustAsHtml","bsAlert","$watch","isObject","content","alert","on","trigger","toggle","$on","destroy"],"mappings":"AAOA,YAIAA,SAAQC,OAAO,wBAAyB,yBAAyBC,SAAS,SAAU,WAClF,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,UACXC,YAAa,QACbC,UAAW,KACXC,SAAU,uBACVC,WAAW,EACXC,QAAS,KACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,UAAU,EACVC,MAAM,EAEVX,MAAKY,MACH,SACA,WACA,SAAUC,EAAQC,GAChB,QAASC,GAAaC,GACpB,GAAIC,MAEAC,EAAUtB,QAAQuB,UAAWpB,EAAUiB,EAC3CC,GAASJ,EAAOK,GAEZA,EAAQP,OACVM,EAAOG,OAAOT,KAAOO,EAAQP,KAG/B,IAAIF,GAAOQ,EAAOR,IASlB,OARIS,GAAQR,WACVO,EAAOR,KAAO,WACZA,IACAK,EAAS,WACPG,EAAOI,QACa,IAAnBH,EAAQR,YAGRO,EAET,MAAOF,OAGVO,UAAU,WACX,UACA,YACA,OACA,SACA,SAAUC,EAASC,EAAWC,EAAMR,GACNM,EAAQG,uBAAyBH,EAAQI,UACrE,QACEC,SAAU,MACVC,OAAO,EACPC,KAAM,SAAkBD,EAAOvB,EAASyB,GAEtC,GAAIb,IACAW,MAAOA,EACPvB,QAASA,EACTG,MAAM,EAEVb,SAAQoC,SACN,WACA,YACA,WACA,OACA,YACA,YACA,YACC,SAAUC,GACPrC,QAAQsC,UAAUH,EAAKE,MACzBf,EAAQe,GAAOF,EAAKE,MAGxBrC,QAAQoC,SACN,QACA,UACA,QACC,SAAUC,GACXF,EAAKE,IAAQF,EAAKI,SAASF,EAAK,SAAUG,GACxCP,EAAMI,GAAOR,EAAKY,YAAYD,OAIlCL,EAAKO,SAAWT,EAAMU,OAAOR,EAAKO,QAAS,SAAUF,GAC/CxC,QAAQ4C,SAASJ,GACnBxC,QAAQuB,OAAOU,EAAOO,GAEtBP,EAAMY,QAAUL,IAEjB,EAEH,IAAIM,GAAQzB,EAAOC,EAEnBZ,GAAQqC,GAAGZ,EAAKa,SAAW,QAASF,EAAMG,QAE1ChB,EAAMiB,IAAI,WAAY,WACpBJ,EAAMK,UACN7B,EAAU,KACVwB,EAAQ"} \ No newline at end of file diff --git a/dist/modules/alert.min.map b/dist/modules/alert.min.map deleted file mode 100644 index 3689df200..000000000 --- a/dist/modules/alert.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"alert.min.js","sources":["alert.js","alert.tpl.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","container","element","backdrop","keyboard","show","duration","type","$get","$modal","$timeout","AlertFactory","config","$alert","options","extend","$scope","hide","directive","$window","$location","$sce","requestAnimationFrame","setTimeout","restrict","scope","link","attr","forEach","key","isDefined","$observe","newValue","trustAsHtml","bsAlert","$watch","isObject","content","alert","on","trigger","toggle","$on","destroy","run","$templateCache","put"],"mappings":"AAAA,YAIAA,SAAQC,OAAO,2BAA4BC,SAAS,SAAU,WAC5D,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,UACXC,YAAa,QACbC,UAAW,KACXC,SAAU,uBACVC,WAAW,EACXC,QAAS,KACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,UAAU,EACVC,MAAM,EAEVX,MAAKY,MACH,SACA,WACA,SAAUC,EAAQC,GAChB,QAASC,GAAaC,GACpB,GAAIC,MAEAC,EAAUtB,QAAQuB,UAAWpB,EAAUiB,EAC3CC,GAASJ,EAAOK,GAEZA,EAAQP,OACVM,EAAOG,OAAOT,KAAOO,EAAQP,KAG/B,IAAIF,GAAOQ,EAAOR,IASlB,OARIS,GAAQR,WACVO,EAAOR,KAAO,WACZA,IACAK,EAAS,WACPG,EAAOI,QACa,IAAnBH,EAAQR,YAGRO,EAET,MAAOF,OAGVO,UAAU,WACX,UACA,YACA,OACA,SACA,SAAUC,EAASC,EAAWC,EAAMR,GACNM,EAAQG,uBAAyBH,EAAQI,UACrE,QACEC,SAAU,MACVC,OAAO,EACPC,KAAM,SAAkBD,EAAOvB,EAASyB,GAEtC,GAAIb,IACAW,MAAOA,EACPvB,QAASA,EACTG,MAAM,EAEVb,SAAQoC,SACN,WACA,YACA,WACA,OACA,YACA,YACA,YACC,SAAUC,GACPrC,QAAQsC,UAAUH,EAAKE,MACzBf,EAAQe,GAAOF,EAAKE,MAGxBrC,QAAQoC,SACN,QACA,UACA,QACC,SAAUC,GACXF,EAAKE,IAAQF,EAAKI,SAASF,EAAK,SAAUG,GACxCP,EAAMI,GAAOR,EAAKY,YAAYD,OAIlCL,EAAKO,SAAWT,EAAMU,OAAOR,EAAKO,QAAS,SAAUF,GAC/CxC,QAAQ4C,SAASJ,GACnBxC,QAAQuB,OAAOU,EAAOO,GAEtBP,EAAMY,QAAUL,IAEjB,EAEH,IAAIM,GAAQzB,EAAOC,EAEnBZ,GAAQqC,GAAGZ,EAAKa,SAAW,QAASF,EAAMG,QAE1ChB,EAAMiB,IAAI,WAAY,WACpBJ,EAAMK,UACN7B,EAAU,KACVwB,EAAQ,YCrGlB9C,QAAQC,OAAO,wBAAwBmD,KAAK,iBAAkB,SAASC,GAGrEA,EAAeC,IAAI,uBACjB"} \ No newline at end of file diff --git a/dist/modules/alert.tpl.js b/dist/modules/alert.tpl.js index 5b9224516..51d6d19ce 100644 --- a/dist/modules/alert.tpl.js +++ b/dist/modules/alert.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.alert').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('alert/alert.tpl.html', - "
 
" - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.alert').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('alert/alert.tpl.html', '
 
'); + } +]); \ No newline at end of file diff --git a/dist/modules/alert.tpl.min.js b/dist/modules/alert.tpl.min.js index 056bcf6e8..f075979f8 100644 --- a/dist/modules/alert.tpl.min.js +++ b/dist/modules/alert.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(a){"use strict";a.put("alert/alert.tpl.html",'
 
')}]); -//# sourceMappingURL=alert.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(t){t.put("alert/alert.tpl.html",'
 
')}]); \ No newline at end of file diff --git a/dist/modules/alert.tpl.min.map b/dist/modules/alert.tpl.min.map deleted file mode 100644 index 5068b29a3..000000000 --- a/dist/modules/alert.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"alert.tpl.min.js","sources":["alert.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,wBAAwBC,KAAK,iBAAkB,SAASC,GACrE,YAEAA,GAAeC,IAAI,uBACjB"} \ No newline at end of file diff --git a/dist/modules/aside.js b/dist/modules/aside.js index a80e08bd3..0406517b2 100644 --- a/dist/modules/aside.js +++ b/dist/modules/aside.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/aside.min.js b/dist/modules/aside.min.js index 13bee9ee3..83ec5f800 100644 --- a/dist/modules/aside.min.js +++ b/dist/modules/aside.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.aside",["mgcrea.ngStrap.modal"]).provider("$aside",function(){var a=this.defaults={animation:"am-fade-and-slide-right",prefixClass:"aside",placement:"right",template:"aside/aside.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$modal",function(b){function c(c){var d={},e=angular.extend({},a,c);return d=b(e)}return c}]}).directive("bsAside",["$window","$location","$sce","$aside",function(a,b,c,d){a.requestAnimationFrame||a.setTimeout;return{restrict:"EAC",scope:!0,link:function(a,b,e){var f={scope:a,element:b,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),angular.forEach(["title","content"],function(b){e[b]&&e.$observe(b,function(d){a[b]=c.trustAsHtml(d)})}),e.bsAside&&a.$watch(e.bsAside,function(b){angular.isObject(b)?angular.extend(a,b):a.content=b},!0);var g=d(f);b.on(e.trigger||"click",g.toggle),a.$on("$destroy",function(){g.destroy(),f=null,g=null})}}}]),angular.module("mgcrea.ngStrap.aside").run(["$templateCache",function(a){a.put("aside/aside.tpl.html",'')}]); -//# sourceMappingURL=aside.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.aside",["mgcrea.ngStrap.modal"]).provider("$aside",function(){var e=this.defaults={animation:"am-fade-and-slide-right",prefixClass:"aside",placement:"right",template:"aside/aside.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$modal",function(t){function n(n){var a={},i=angular.extend({},e,n);return a=t(i)}return n}]}).directive("bsAside",["$window","$location","$sce","$aside",function(e,t,n,a){e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,t,i){var r={scope:e,element:t,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(e){angular.isDefined(i[e])&&(r[e]=i[e])}),angular.forEach(["title","content"],function(t){i[t]&&i.$observe(t,function(a){e[t]=n.trustAsHtml(a)})}),i.bsAside&&e.$watch(i.bsAside,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var o=a(r);t.on(i.trigger||"click",o.toggle),e.$on("$destroy",function(){o.destroy(),r=null,o=null})}}}]); \ No newline at end of file diff --git a/dist/modules/aside.min.js.map b/dist/modules/aside.min.js.map new file mode 100644 index 000000000..1a41cad52 --- /dev/null +++ b/dist/modules/aside.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"aside.min.js.map","sources":["aside.min.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","contentTemplate","container","element","backdrop","keyboard","html","show","$get","$modal","AsideFactory","config","$aside","options","extend","directive","$window","$location","$sce","requestAnimationFrame","setTimeout","restrict","scope","link","attr","forEach","key","isDefined","$observe","newValue","trustAsHtml","bsAside","$watch","isObject","content","aside","on","trigger","toggle","$on","destroy"],"mappings":"AAOA,YACAA,SAAQC,OAAO,wBAAyB,yBAAyBC,SAAS,SAAU,WAClF,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,0BACXC,YAAa,QACbC,UAAW,QACXC,SAAU,uBACVC,iBAAiB,EACjBC,WAAW,EACXC,QAAS,KACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,MAAM,EAEVX,MAAKY,MACH,SACA,SAAUC,GACR,QAASC,GAAaC,GACpB,GAAIC,MAEAC,EAAUrB,QAAQsB,UAAWnB,EAAUgB,EAE3C,OADAC,GAASH,EAAOI,GAGlB,MAAOH,OAGVK,UAAU,WACX,UACA,YACA,OACA,SACA,SAAUC,EAASC,EAAWC,EAAMN,GACNI,EAAQG,uBAAyBH,EAAQI,UACrE,QACEC,SAAU,MACVC,OAAO,EACPC,KAAM,SAAkBD,EAAOnB,EAASqB,GAEtC,GAAIX,IACAS,MAAOA,EACPnB,QAASA,EACTI,MAAM,EAEVf,SAAQiC,SACN,WACA,kBACA,YACA,WACA,WACA,OACA,YACA,aACC,SAAUC,GACPlC,QAAQmC,UAAUH,EAAKE,MACzBb,EAAQa,GAAOF,EAAKE,MAGxBlC,QAAQiC,SACN,QACA,WACC,SAAUC,GACXF,EAAKE,IAAQF,EAAKI,SAASF,EAAK,SAAUG,GACxCP,EAAMI,GAAOR,EAAKY,YAAYD,OAIlCL,EAAKO,SAAWT,EAAMU,OAAOR,EAAKO,QAAS,SAAUF,GAC/CrC,QAAQyC,SAASJ,GACnBrC,QAAQsB,OAAOQ,EAAOO,GAEtBP,EAAMY,QAAUL,IAEjB,EAEH,IAAIM,GAAQvB,EAAOC,EAEnBV,GAAQiC,GAAGZ,EAAKa,SAAW,QAASF,EAAMG,QAE1ChB,EAAMiB,IAAI,WAAY,WACpBJ,EAAMK,UACN3B,EAAU,KACVsB,EAAQ"} \ No newline at end of file diff --git a/dist/modules/aside.min.map b/dist/modules/aside.min.map deleted file mode 100644 index 368a94efd..000000000 --- a/dist/modules/aside.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"aside.min.js","sources":["aside.js","aside.tpl.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","contentTemplate","container","element","backdrop","keyboard","html","show","$get","$modal","AsideFactory","config","$aside","options","extend","directive","$window","$location","$sce","requestAnimationFrame","setTimeout","restrict","scope","link","attr","forEach","key","isDefined","$observe","newValue","trustAsHtml","bsAside","$watch","isObject","content","aside","on","trigger","toggle","$on","destroy","run","$templateCache","put"],"mappings":"AAAA,YACAA,SAAQC,OAAO,wBAAyB,yBAAyBC,SAAS,SAAU,WAClF,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,0BACXC,YAAa,QACbC,UAAW,QACXC,SAAU,uBACVC,iBAAiB,EACjBC,WAAW,EACXC,QAAS,KACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,MAAM,EAEVX,MAAKY,MACH,SACA,SAAUC,GACR,QAASC,GAAaC,GACpB,GAAIC,MAEAC,EAAUrB,QAAQsB,UAAWnB,EAAUgB,EAE3C,OADAC,GAASH,EAAOI,GAGlB,MAAOH,OAGVK,UAAU,WACX,UACA,YACA,OACA,SACA,SAAUC,EAASC,EAAWC,EAAMN,GACNI,EAAQG,uBAAyBH,EAAQI,UACrE,QACEC,SAAU,MACVC,OAAO,EACPC,KAAM,SAAkBD,EAAOnB,EAASqB,GAEtC,GAAIX,IACAS,MAAOA,EACPnB,QAASA,EACTI,MAAM,EAEVf,SAAQiC,SACN,WACA,kBACA,YACA,WACA,WACA,OACA,YACA,aACC,SAAUC,GACPlC,QAAQmC,UAAUH,EAAKE,MACzBb,EAAQa,GAAOF,EAAKE,MAGxBlC,QAAQiC,SACN,QACA,WACC,SAAUC,GACXF,EAAKE,IAAQF,EAAKI,SAASF,EAAK,SAAUG,GACxCP,EAAMI,GAAOR,EAAKY,YAAYD,OAIlCL,EAAKO,SAAWT,EAAMU,OAAOR,EAAKO,QAAS,SAAUF,GAC/CrC,QAAQyC,SAASJ,GACnBrC,QAAQsB,OAAOQ,EAAOO,GAEtBP,EAAMY,QAAUL,IAEjB,EAEH,IAAIM,GAAQvB,EAAOC,EAEnBV,GAAQiC,GAAGZ,EAAKa,SAAW,QAASF,EAAMG,QAE1ChB,EAAMiB,IAAI,WAAY,WACpBJ,EAAMK,UACN3B,EAAU,KACVsB,EAAQ,YCnFlB3C,QAAQC,OAAO,wBAAwBgD,KAAK,iBAAkB,SAASC,GAGrEA,EAAeC,IAAI,uBACjB"} \ No newline at end of file diff --git a/dist/modules/aside.tpl.js b/dist/modules/aside.tpl.js index a1f957270..17a2388fe 100644 --- a/dist/modules/aside.tpl.js +++ b/dist/modules/aside.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.aside').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('aside/aside.tpl.html', - "

" - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.aside').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('aside/aside.tpl.html', ''); + } +]); \ No newline at end of file diff --git a/dist/modules/aside.tpl.min.js b/dist/modules/aside.tpl.min.js index c27e28587..3ea4fb7d5 100644 --- a/dist/modules/aside.tpl.min.js +++ b/dist/modules/aside.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.aside").run(["$templateCache",function(a){"use strict";a.put("aside/aside.tpl.html",'')}]); -//# sourceMappingURL=aside.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.aside").run(["$templateCache",function(t){t.put("aside/aside.tpl.html",'')}]); \ No newline at end of file diff --git a/dist/modules/aside.tpl.min.map b/dist/modules/aside.tpl.min.map deleted file mode 100644 index 93cce30ba..000000000 --- a/dist/modules/aside.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"aside.tpl.min.js","sources":["aside.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,wBAAwBC,KAAK,iBAAkB,SAASC,GACrE,YAEAA,GAAeC,IAAI,uBACjB"} \ No newline at end of file diff --git a/dist/modules/button.js b/dist/modules/button.js index 6a51f668a..98589efae 100644 --- a/dist/modules/button.js +++ b/dist/modules/button.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -31,8 +31,8 @@ angular.module('mgcrea.ngStrap.button', ['ngAnimate']).provider('$button', funct }; }).directive('bsCheckbox', [ '$button', - '$$animateReflow', - function ($button, $$animateReflow) { + '$$rAF', + function ($button, $$rAF) { var defaults = $button.defaults; var constantValueRegExp = /^(true|false|\d+)$/; return { @@ -67,7 +67,7 @@ angular.module('mgcrea.ngStrap.button', ['ngAnimate']).provider('$button', funct controller.$render = function () { // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); var isActive = angular.equals(controller.$modelValue, trueValue); - $$animateReflow(function () { + $$rAF(function () { if (isInput) element[0].checked = isActive; activeElement.toggleClass(options.activeClass, isActive); @@ -104,8 +104,8 @@ angular.module('mgcrea.ngStrap.button', ['ngAnimate']).provider('$button', funct }; }).directive('bsRadio', [ '$button', - '$$animateReflow', - function ($button, $$animateReflow) { + '$$rAF', + function ($button, $$rAF) { var defaults = $button.defaults; var constantValueRegExp = /^(true|false|\d+)$/; return { @@ -121,7 +121,7 @@ angular.module('mgcrea.ngStrap.button', ['ngAnimate']).provider('$button', funct controller.$render = function () { // console.warn('$render', element.attr('value'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); var isActive = angular.equals(controller.$modelValue, value); - $$animateReflow(function () { + $$rAF(function () { if (isInput) element[0].checked = isActive; activeElement.toggleClass(options.activeClass, isActive); diff --git a/dist/modules/button.min.js b/dist/modules/button.min.js index fad301669..883cd09c9 100644 --- a/dist/modules/button.min.js +++ b/dist/modules/button.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.button",["ngAnimate"]).provider("$button",function(){var a=this.defaults={activeClass:"active",toggleEvent:"click"};this.$get=function(){return{defaults:a}}}).directive("bsCheckboxGroup",function(){return{restrict:"A",require:"ngModel",compile:function(a,b){a.attr("data-toggle","buttons"),a.removeAttr("ng-model");var c=a[0].querySelectorAll('input[type="checkbox"]');angular.forEach(c,function(a){var c=angular.element(a);c.attr("bs-checkbox",""),c.attr("ng-model",b.ngModel+"."+c.attr("value"))})}}}).directive("bsCheckbox",["$button","$$animateReflow",function(a,b){var c=a.defaults,d=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(a,e,f,g){var h=c,i="INPUT"===e[0].nodeName,j=i?e.parent():e,k=angular.isDefined(f.trueValue)?f.trueValue:!0;d.test(f.trueValue)&&(k=a.$eval(f.trueValue));var l=angular.isDefined(f.falseValue)?f.falseValue:!1;d.test(f.falseValue)&&(l=a.$eval(f.falseValue));var m="boolean"!=typeof k||"boolean"!=typeof l;m&&(g.$parsers.push(function(a){return a?k:l}),a.$watch(f.ngModel,function(){g.$render()})),g.$render=function(){var a=angular.equals(g.$modelValue,k);b(function(){i&&(e[0].checked=a),j.toggleClass(h.activeClass,a)})},e.bind(h.toggleEvent,function(){a.$apply(function(){i||g.$setViewValue(!j.hasClass("active")),m||g.$render()})})}}}]).directive("bsRadioGroup",function(){return{restrict:"A",require:"ngModel",compile:function(a,b){a.attr("data-toggle","buttons"),a.removeAttr("ng-model");var c=a[0].querySelectorAll('input[type="radio"]');angular.forEach(c,function(a){angular.element(a).attr("bs-radio",""),angular.element(a).attr("ng-model",b.ngModel)})}}}).directive("bsRadio",["$button","$$animateReflow",function(a,b){var c=a.defaults,d=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(a,e,f,g){var h=c,i="INPUT"===e[0].nodeName,j=i?e.parent():e,k=d.test(f.value)?a.$eval(f.value):f.value;g.$render=function(){var a=angular.equals(g.$modelValue,k);b(function(){i&&(e[0].checked=a),j.toggleClass(h.activeClass,a)})},e.bind(h.toggleEvent,function(){a.$apply(function(){g.$setViewValue(k),g.$render()})})}}}]); -//# sourceMappingURL=button.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.button",["ngAnimate"]).provider("$button",function(){var e=this.defaults={activeClass:"active",toggleEvent:"click"};this.$get=function(){return{defaults:e}}}).directive("bsCheckboxGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var a=e[0].querySelectorAll('input[type="checkbox"]');angular.forEach(a,function(e){var a=angular.element(e);a.attr("bs-checkbox",""),a.attr("ng-model",t.ngModel+"."+a.attr("value"))})}}}).directive("bsCheckbox",["$button","$$rAF",function(e,t){var a=e.defaults,n=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,r,l,u){var o=a,i="INPUT"===r[0].nodeName,c=i?r.parent():r,s=angular.isDefined(l.trueValue)?l.trueValue:!0;n.test(l.trueValue)&&(s=e.$eval(l.trueValue));var d=angular.isDefined(l.falseValue)?l.falseValue:!1;n.test(l.falseValue)&&(d=e.$eval(l.falseValue));var g="boolean"!=typeof s||"boolean"!=typeof d;g&&(u.$parsers.push(function(e){return e?s:d}),e.$watch(l.ngModel,function(){u.$render()})),u.$render=function(){var e=angular.equals(u.$modelValue,s);t(function(){i&&(r[0].checked=e),c.toggleClass(o.activeClass,e)})},r.bind(o.toggleEvent,function(){e.$apply(function(){i||u.$setViewValue(!c.hasClass("active")),g||u.$render()})})}}}]).directive("bsRadioGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var a=e[0].querySelectorAll('input[type="radio"]');angular.forEach(a,function(e){angular.element(e).attr("bs-radio",""),angular.element(e).attr("ng-model",t.ngModel)})}}}).directive("bsRadio",["$button","$$rAF",function(e,t){var a=e.defaults,n=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,r,l,u){var o=a,i="INPUT"===r[0].nodeName,c=i?r.parent():r,s=n.test(l.value)?e.$eval(l.value):l.value;u.$render=function(){var e=angular.equals(u.$modelValue,s);t(function(){i&&(r[0].checked=e),c.toggleClass(o.activeClass,e)})},r.bind(o.toggleEvent,function(){e.$apply(function(){u.$setViewValue(s),u.$render()})})}}}]); \ No newline at end of file diff --git a/dist/modules/button.min.js.map b/dist/modules/button.min.js.map new file mode 100644 index 000000000..26c75710e --- /dev/null +++ b/dist/modules/button.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"button.min.js.map","sources":["button.min.js"],"names":["angular","module","provider","defaults","this","activeClass","toggleEvent","$get","directive","restrict","require","compile","element","attr","removeAttr","children","querySelectorAll","forEach","child","childEl","ngModel","$button","$$rAF","constantValueRegExp","link","scope","controller","options","isInput","nodeName","activeElement","parent","trueValue","isDefined","test","$eval","falseValue","hasExoticValues","$parsers","push","viewValue","$watch","$render","isActive","equals","$modelValue","checked","toggleClass","bind","$apply","$setViewValue","hasClass","value"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/button.min.map b/dist/modules/button.min.map deleted file mode 100644 index 3bce51c17..000000000 --- a/dist/modules/button.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"button.min.js","sources":["button.js"],"names":["angular","module","provider","defaults","this","activeClass","toggleEvent","$get","directive","restrict","require","compile","element","attr","removeAttr","children","querySelectorAll","forEach","child","childEl","ngModel","$button","$$animateReflow","constantValueRegExp","link","scope","controller","options","isInput","nodeName","activeElement","parent","trueValue","isDefined","test","$eval","falseValue","hasExoticValues","$parsers","push","viewValue","$watch","$render","isActive","equals","$modelValue","checked","toggleClass","bind","$apply","$setViewValue","hasClass","value"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/date-parser.js b/dist/modules/date-parser.js index b07fefb38..a620f6ecb 100644 --- a/dist/modules/date-parser.js +++ b/dist/modules/date-parser.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -26,24 +26,25 @@ angular.module('mgcrea.ngStrap.helpers.dateParser', []).provider('$dateParser', var regExpMap = { 'sss': '[0-9]{3}', 'ss': '[0-5][0-9]', - 's': options.strict ? '[1-5]?[0-9]' : '[0-5][0-9]', + 's': options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]', 'mm': '[0-5][0-9]', - 'm': options.strict ? '[1-5]?[0-9]' : '[0-5][0-9]', + 'm': options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]', 'HH': '[01][0-9]|2[0-3]', - 'H': options.strict ? '[0][1-9]|[1][012]' : '[01][0-9]|2[0-3]', + 'H': options.strict ? '1?[0-9]|2[0-3]' : '[01]?[0-9]|2[0-3]', 'hh': '[0][1-9]|[1][012]', - 'h': options.strict ? '[1-9]|[1][012]' : '[0]?[1-9]|[1][012]', + 'h': options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]', 'a': 'AM|PM', 'EEEE': $locale.DATETIME_FORMATS.DAY.join('|'), 'EEE': $locale.DATETIME_FORMATS.SHORTDAY.join('|'), - 'dd': '[0-2][0-9]{1}|[3][01]{1}', - 'd': options.strict ? '[1-2]?[0-9]{1}|[3][01]{1}' : '[0-2][0-9]{1}|[3][01]{1}', + 'dd': '0[1-9]|[12][0-9]|3[01]', + 'd': options.strict ? '[1-9]|[1-2][0-9]|3[01]' : '0?[1-9]|[1-2][0-9]|3[01]', 'MMMM': $locale.DATETIME_FORMATS.MONTH.join('|'), 'MMM': $locale.DATETIME_FORMATS.SHORTMONTH.join('|'), - 'MM': '[0][1-9]|[1][012]', - 'M': options.strict ? '[1-9]|[1][012]' : '[0][1-9]|[1][012]', - 'yyyy': '(?:(?:[1]{1}[0-9]{1}[0-9]{1}[0-9]{1})|(?:[2]{1}[0-9]{3}))(?![[0-9]])', - 'yy': '(?:(?:[0-9]{1}[0-9]{1}))(?![[0-9]])' + 'MM': '0[1-9]|1[012]', + 'M': options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]', + 'yyyy': '[1]{1}[0-9]{3}|[2]{1}[0-9]{3}', + 'yy': '[0-9]{2}', + 'y': options.strict ? '-?(0|[1-9][0-9]{0,3})' : '-?0*[0-9]{1,4}' }; var setFnMap = { 'sss': proto.setMilliseconds, diff --git a/dist/modules/date-parser.min.js b/dist/modules/date-parser.min.js index 2529d6d3e..551d05acc 100644 --- a/dist/modules/date-parser.min.js +++ b/dist/modules/date-parser.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.helpers.dateParser",[]).provider("$dateParser",["$localeProvider",function(){var a=Date.prototype,b=this.defaults={format:"shortDate",strict:!1};this.$get=["$locale",function(c){var d=function(d){function e(a){var b,c=Object.keys(m),d=[],e=[],f=a;for(b=0;b1){var g=f.search(c[b]);a=a.split(c[b]).join(""),m[c[b]]&&(d[g]=m[c[b]])}return angular.forEach(d,function(a){e.push(a)}),e}function f(a){return a.replace(/\//g,"[\\/]").replace("/-/g","[-]").replace(/\./g,"[.]").replace(/\\s/g,"[\\s]")}function g(a){var b,c=Object.keys(l),d=a;for(b=0;b1){var a=i.search(r[e]);t=t.split(r[e]).join(""),f[r[e]]&&(s[a]=f[r[e]])}return angular.forEach(s,function(t){n.push(t)}),n}function i(t){return t.replace(/\//g,"[\\/]").replace("/-/g","[-]").replace(/\./g,"[.]").replace(/\\s/g,"[\\s]")}function a(t){var e,r=Object.keys(l),s=t;for(e=0;e= options.minDate && parsedDate.getTime() <= options.maxDate; + var isValid = (isNaN(datepicker.$options.minDate) || parsedDate.getTime() >= datepicker.$options.minDate) && (isNaN(datepicker.$options.maxDate) || parsedDate.getTime() <= datepicker.$options.maxDate); controller.$setValidity('date', isValid); // Only update the model when we have a valid date if (isValid) @@ -326,9 +331,16 @@ angular.module('mgcrea.ngStrap.datepicker', [ // modelValue -> $formatters -> viewValue controller.$formatters.push(function (modelValue) { // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue); - if (angular.isUndefined(modelValue) || modelValue === null) - return; - var date = angular.isDate(modelValue) ? modelValue : new Date(modelValue); + var date; + if (angular.isUndefined(modelValue) || modelValue === null) { + date = NaN; + } else if (angular.isDate(modelValue)) { + date = modelValue; + } else if (options.dateType === 'string') { + date = dateParser.parse(modelValue); + } else { + date = new Date(modelValue); + } // Setup default value? // if(isNaN(date.getTime())) { // var today = new Date(); @@ -364,6 +376,10 @@ angular.module('mgcrea.ngStrap.datepicker', [ } return arrays; } + // Modulus operator + function mod(n, m) { + return (n % m + m) % m; + } this.$get = [ '$locale', '$sce', @@ -401,8 +417,11 @@ angular.module('mgcrea.ngStrap.datepicker', [ } }, build: function () { - var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1); - var firstDate = new Date(+firstDayOfMonth - (firstDayOfMonth.getDay() - options.startWeek) * 86400000); + var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1), firstDayOfMonthOffset = firstDayOfMonth.getTimezoneOffset(); + var firstDate = new Date(+firstDayOfMonth - mod(firstDayOfMonth.getDay() - options.startWeek, 6) * 86400000), firstDateOffset = firstDate.getTimezoneOffset(); + // Handle daylight time switch + if (firstDateOffset !== firstDayOfMonthOffset) + firstDate = new Date(+firstDate + (firstDateOffset - firstDayOfMonthOffset) * 60000); var days = [], day; for (var i = 0; i < 42; i++) { // < 7 * 6 diff --git a/dist/modules/datepicker.min.js b/dist/modules/datepicker.min.js index 38c48fc20..dd6369967 100644 --- a/dist/modules/datepicker.min.js +++ b/dist/modules/datepicker.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.datepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$datepicker",function(){var a=this.defaults={animation:"am-fade",prefixClass:"datepicker",placement:"bottom-left",template:"datepicker/datepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!1,dateType:"date",dateFormat:"shortDate",strictFormat:!1,autoclose:!1,minDate:-1/0,maxDate:+1/0,startView:0,minView:0,startWeek:0};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","datepickerViews","$tooltip",function(b,c,d,e,f,g,h,i){function j(b,c,d){function e(a){a.selected=g.$isSelected(a.date)}function f(){b[0].focus()}var g=i(b,angular.extend({},a,d)),j=d.scope,m=g.$options,n=g.$scope;m.startView&&(m.startView-=m.minView);var o=h(g);g.$views=o.views;var p=o.viewDate;n.$mode=m.startView;var q=g.$views[n.$mode];n.$select=function(a){g.select(a)},n.$selectPane=function(a){g.$selectPane(a)},n.$toggleMode=function(){g.setMode((n.$mode+1)%g.$views.length)},g.update=function(a){angular.isDate(a)&&!isNaN(a.getTime())&&(g.$date=a,q.update.call(q,a)),g.$build(!0)},g.select=function(a,b){angular.isDate(c.$dateValue)||(c.$dateValue=new Date(a)),c.$dateValue.setFullYear(a.getFullYear(),a.getMonth(),a.getDate()),!n.$mode||b?(c.$setViewValue(c.$dateValue),c.$render(),m.autoclose&&!b&&g.hide(!0)):(angular.extend(p,{year:a.getFullYear(),month:a.getMonth(),date:a.getDate()}),g.setMode(n.$mode-1),g.$build())},g.setMode=function(a){n.$mode=a,q=g.$views[n.$mode],g.$build()},g.$build=function(a){a===!0&&q.built||(a!==!1||q.built)&&q.build.call(q)},g.$updateSelected=function(){for(var a=0,b=n.rows.length;b>a;a++)angular.forEach(n.rows[a],e)},g.$isSelected=function(a){return q.isSelected(a)},g.$selectPane=function(a){var b=q.steps,c=new Date(Date.UTC(p.year+(b.year||0)*a,p.month+(b.month||0)*a,p.date+(b.day||0)*a));angular.extend(p,{year:c.getUTCFullYear(),month:c.getUTCMonth(),date:c.getUTCDate()}),g.$build()},g.$onMouseDown=function(a){if(a.preventDefault(),a.stopPropagation(),k){var b=angular.element(a.target);"button"!==b[0].nodeName.toLowerCase()&&(b=b.parent()),b.triggerHandler("click")}},g.$onKeyDown=function(a){if(/(38|37|39|40|13)/.test(a.keyCode)&&!a.shiftKey&&!a.altKey){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return n.$mode?n.$apply(function(){g.setMode(n.$mode-1)}):g.hide(!0);q.onKeyDown(a),j.$digest()}};var r=g.init;g.init=function(){return l&&m.useNative?(b.prop("type","date"),void b.css("-webkit-appearance","textfield")):(k&&(b.prop("type","text"),b.attr("readonly","true"),b.on("click",f)),void r())};var s=g.destroy;g.destroy=function(){l&&m.useNative&&b.off("click",f),s()};var t=g.show;g.show=function(){t(),setTimeout(function(){g.$element.on(k?"touchstart":"mousedown",g.$onMouseDown),m.keyboard&&b.on("keydown",g.$onKeyDown)})};var u=g.hide;return g.hide=function(a){g.$element.off(k?"touchstart":"mousedown",g.$onMouseDown),m.keyboard&&b.off("keydown",g.$onKeyDown),u(a)},g}var k=(angular.element(b.document.body),"createTouch"in b.document),l=/(ip(a|o)d|iphone|android)/gi.test(b.navigator.userAgent);return a.lang||(a.lang=f.id),j.defaults=a,j}]}).directive("bsDatepicker",["$window","$parse","$q","$locale","dateFilter","$datepicker","$dateParser","$timeout",function(a,b,c,d,e,f,g){{var h=(f.defaults,/(ip(a|o)d|iphone|android)/gi.test(a.navigator.userAgent));a.requestAnimationFrame||a.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(a,b,c,d){var i={scope:a,controller:d};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","dateType","dateFormat","strictFormat","startWeek","useNative","lang","startView","minView"],function(a){angular.isDefined(c[a])&&(i[a]=c[a])}),h&&i.useNative&&(i.dateFormat="yyyy-MM-dd");var j=f(b,d,i);i=j.$options,angular.forEach(["minDate","maxDate"],function(a){angular.isDefined(c[a])&&c.$observe(a,function(b){if("today"===b){var c=new Date;j.$options[a]=+new Date(c.getFullYear(),c.getMonth(),c.getDate()+("maxDate"===a?1:0),0,0,0,"minDate"===a?0:-1)}else j.$options[a]=angular.isString(b)&&b.match(/^".+"$/)?+new Date(b.substr(1,b.length-2)):+new Date(b);!isNaN(j.$options[a])&&j.$build(!1)})}),a.$watch(c.ngModel,function(){j.update(d.$dateValue)},!0);var k=g({format:i.dateFormat,lang:i.lang,strict:i.strictFormat});d.$parsers.unshift(function(a){if(!a)return void d.$setValidity("date",!0);var b=k.parse(a,d.$dateValue);if(!b||isNaN(b.getTime()))d.$setValidity("date",!1);else{var c=b.getTime()>=i.minDate&&b.getTime()<=i.maxDate;d.$setValidity("date",c),c&&(d.$dateValue=b)}return"string"===i.dateType?e(a,i.dateFormat):"number"===i.dateType?d.$dateValue.getTime():"iso"===i.dateType?d.$dateValue.toISOString():new Date(d.$dateValue)}),d.$formatters.push(function(a){if(!angular.isUndefined(a)&&null!==a){var b=angular.isDate(a)?a:new Date(a);return d.$dateValue=b,d.$dateValue}}),d.$render=function(){b.val(!d.$dateValue||isNaN(d.$dateValue.getTime())?"":e(d.$dateValue,i.dateFormat))},a.$on("$destroy",function(){j.destroy(),i=null,j=null})}}}]).provider("datepickerViews",function(){function a(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c}this.defaults={dayFormat:"dd",daySplit:7};this.$get=["$locale","$sce","dateFilter",function(b,c,d){return function(e){var f=e.$scope,g=e.$options,h=b.DATETIME_FORMATS.SHORTDAY,i=h.slice(g.startWeek).concat(h.slice(0,g.startWeek)),j=c.trustAsHtml(''+i.join('')+""),k=e.$date||new Date,l={year:k.getFullYear(),month:k.getMonth(),date:k.getDate()},m=(6e4*k.getTimezoneOffset(),[{format:"dd",split:7,steps:{month:1},update:function(a,b){!this.built||b||a.getFullYear()!==l.year||a.getMonth()!==l.month?(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$build()):a.getDate()!==l.date&&(l.date=e.$date.getDate(),e.$updateSelected())},build:function(){for(var b,c=new Date(l.year,l.month,1),h=new Date(+c-864e5*(c.getDay()-g.startWeek)),i=[],k=0;42>k;k++)b=new Date(h.getFullYear(),h.getMonth(),h.getDate()+k),i.push({date:b,label:d(b,this.format),selected:e.$date&&this.isSelected(b),muted:b.getMonth()!==l.month,disabled:this.isDisabled(b)});f.title=d(c,"MMMM yyyy"),f.labels=j,f.rows=a(i,this.split),this.built=!0},isSelected:function(a){return e.$date&&a.getFullYear()===e.$date.getFullYear()&&a.getMonth()===e.$date.getMonth()&&a.getDate()===e.$date.getDate()},isDisabled:function(a){return a.getTime()g.maxDate},onKeyDown:function(a){var b=e.$date.getTime();37===a.keyCode?e.select(new Date(b-864e5),!0):38===a.keyCode?e.select(new Date(b-6048e5),!0):39===a.keyCode?e.select(new Date(b+864e5),!0):40===a.keyCode&&e.select(new Date(b+6048e5),!0)}},{name:"month",format:"MMM",split:4,steps:{year:1},update:function(a){this.built&&a.getFullYear()===l.year?a.getMonth()!==l.month&&(angular.extend(l,{month:e.$date.getMonth(),date:e.$date.getDate()}),e.$updateSelected()):(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$build())},build:function(){for(var b,c=(new Date(l.year,0,1),[]),g=0;12>g;g++)b=new Date(l.year,g,1),c.push({date:b,label:d(b,this.format),selected:e.$isSelected(b),disabled:this.isDisabled(b)});f.title=d(b,"yyyy"),f.labels=!1,f.rows=a(c,this.split),this.built=!0},isSelected:function(a){return e.$date&&a.getFullYear()===e.$date.getFullYear()&&a.getMonth()===e.$date.getMonth()},isDisabled:function(a){var b=+new Date(a.getFullYear(),a.getMonth()+1,0);return bg.maxDate},onKeyDown:function(a){var b=e.$date.getMonth();37===a.keyCode?e.select(e.$date.setMonth(b-1),!0):38===a.keyCode?e.select(e.$date.setMonth(b-4),!0):39===a.keyCode?e.select(e.$date.setMonth(b+1),!0):40===a.keyCode&&e.select(e.$date.setMonth(b+4),!0)}},{name:"year",format:"yyyy",split:4,steps:{year:12},update:function(a,b){!this.built||b||parseInt(a.getFullYear()/20,10)!==parseInt(l.year/20,10)?(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$build()):a.getFullYear()!==l.year&&(angular.extend(l,{year:e.$date.getFullYear(),month:e.$date.getMonth(),date:e.$date.getDate()}),e.$updateSelected())},build:function(){for(var b,c=l.year-l.year%(3*this.split),g=[],h=0;12>h;h++)b=new Date(c+h,0,1),g.push({date:b,label:d(b,this.format),selected:e.$isSelected(b),disabled:this.isDisabled(b)});f.title=g[0].label+"-"+g[g.length-1].label,f.labels=!1,f.rows=a(g,this.split),this.built=!0},isSelected:function(a){return e.$date&&a.getFullYear()===e.$date.getFullYear()},isDisabled:function(a){var b=+new Date(a.getFullYear()+1,0,0);return bg.maxDate},onKeyDown:function(a){var b=e.$date.getFullYear();37===a.keyCode?e.select(e.$date.setYear(b-1),!0):38===a.keyCode?e.select(e.$date.setYear(b-4),!0):39===a.keyCode?e.select(e.$date.setYear(b+1),!0):40===a.keyCode&&e.select(e.$date.setYear(b+4),!0)}}]);return{views:g.minView?Array.prototype.slice.call(m,g.minView):m,viewDate:l}}}]}),angular.module("mgcrea.ngStrap.datepicker").run(["$templateCache",function(a){a.put("datepicker/datepicker.tpl.html",'')}]); -//# sourceMappingURL=datepicker.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.datepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$datepicker",function(){var e=this.defaults={animation:"am-fade",prefixClass:"datepicker",placement:"bottom-left",template:"datepicker/datepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!1,dateType:"date",dateFormat:"shortDate",strictFormat:!1,autoclose:!1,minDate:-1/0,maxDate:+1/0,startView:0,minView:0,startWeek:0};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","datepickerViews","$tooltip",function(t,a,n,i,o,r,l,d){function s(t,a,n){function i(e){e.selected=r.$isSelected(e.date)}function o(){t[0].focus()}var r=d(t,angular.extend({},e,n)),s=n.scope,$=r.$options,g=r.$scope;$.startView&&($.startView-=$.minView);var m=l(r);r.$views=m.views;var f=m.viewDate;g.$mode=$.startView;var p=r.$views[g.$mode];g.$select=function(e){r.select(e)},g.$selectPane=function(e){r.$selectPane(e)},g.$toggleMode=function(){r.setMode((g.$mode+1)%r.$views.length)},r.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())&&(r.$date=e,p.update.call(p,e)),r.$build(!0)},r.select=function(e,t){angular.isDate(a.$dateValue)||(a.$dateValue=new Date(e)),a.$dateValue.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),!g.$mode||t?(a.$setViewValue(a.$dateValue),a.$render(),$.autoclose&&!t&&r.hide(!0)):(angular.extend(f,{year:e.getFullYear(),month:e.getMonth(),date:e.getDate()}),r.setMode(g.$mode-1),r.$build())},r.setMode=function(e){g.$mode=e,p=r.$views[g.$mode],r.$build()},r.$build=function(e){e===!0&&p.built||(e!==!1||p.built)&&p.build.call(p)},r.$updateSelected=function(){for(var e=0,t=g.rows.length;t>e;e++)angular.forEach(g.rows[e],i)},r.$isSelected=function(e){return p.isSelected(e)},r.$selectPane=function(e){var t=p.steps,a=new Date(Date.UTC(f.year+(t.year||0)*e,f.month+(t.month||0)*e,f.date+(t.day||0)*e));angular.extend(f,{year:a.getUTCFullYear(),month:a.getUTCMonth(),date:a.getUTCDate()}),r.$build()},r.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),u){var t=angular.element(e.target);"button"!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler("click")}},r.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return g.$mode?g.$apply(function(){r.setMode(g.$mode-1)}):r.hide(!0);p.onKeyDown(e),s.$digest()}};var h=r.init;r.init=function(){return c&&$.useNative?(t.prop("type","date"),void t.css("-webkit-appearance","textfield")):(u&&(t.prop("type","text"),t.attr("readonly","true"),t.on("click",o)),void h())};var y=r.destroy;r.destroy=function(){c&&$.useNative&&t.off("click",o),y()};var D=r.show;r.show=function(){D(),setTimeout(function(){r.$element.on(u?"touchstart":"mousedown",r.$onMouseDown),$.keyboard&&t.on("keydown",r.$onKeyDown)})};var w=r.hide;return r.hide=function(e){r.$element.off(u?"touchstart":"mousedown",r.$onMouseDown),$.keyboard&&t.off("keydown",r.$onKeyDown),w(e)},r}var u=(angular.element(t.document.body),"createTouch"in t.document),c=/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent);return e.lang||(e.lang=o.id),s.defaults=e,s}]}).directive("bsDatepicker",["$window","$parse","$q","$locale","dateFilter","$datepicker","$dateParser","$timeout",function(e,t,a,n,i,o,r){var l=(o.defaults,/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent)),d=function(e){return!isNaN(parseFloat(e))&&isFinite(e)};return{restrict:"EAC",require:"ngModel",link:function(e,t,a,n){var s={scope:e,controller:n};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","dateType","dateFormat","strictFormat","startWeek","useNative","lang","startView","minView"],function(e){angular.isDefined(a[e])&&(s[e]=a[e])}),l&&s.useNative&&(s.dateFormat="yyyy-MM-dd");var u=o(t,n,s);s=u.$options,angular.forEach(["minDate","maxDate"],function(e){angular.isDefined(a[e])&&a.$observe(e,function(t){if("today"===t){var a=new Date;u.$options[e]=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+("maxDate"===e?1:0),0,0,0,"minDate"===e?0:-1)}else u.$options[e]=angular.isString(t)&&t.match(/^".+"$/)?+new Date(t.substr(1,t.length-2)):d(t)?+new Date(parseInt(t,10)):+new Date(t);!isNaN(u.$options[e])&&u.$build(!1)})}),e.$watch(a.ngModel,function(){u.update(n.$dateValue)},!0);var c=r({format:s.dateFormat,lang:s.lang,strict:s.strictFormat});n.$parsers.unshift(function(e){if(!e)return void n.$setValidity("date",!0);var t=c.parse(e,n.$dateValue);if(!t||isNaN(t.getTime()))return void n.$setValidity("date",!1);var a=(isNaN(u.$options.minDate)||t.getTime()>=u.$options.minDate)&&(isNaN(u.$options.maxDate)||t.getTime()<=u.$options.maxDate);return n.$setValidity("date",a),a&&(n.$dateValue=t),"string"===s.dateType?i(e,s.dateFormat):"number"===s.dateType?n.$dateValue.getTime():"iso"===s.dateType?n.$dateValue.toISOString():new Date(n.$dateValue)}),n.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:"string"===s.dateType?c.parse(e):new Date(e),n.$dateValue=t,n.$dateValue}),n.$render=function(){t.val(!n.$dateValue||isNaN(n.$dateValue.getTime())?"":i(n.$dateValue,s.dateFormat))},e.$on("$destroy",function(){u.destroy(),s=null,u=null})}}}]).provider("datepickerViews",function(){function e(e,t){for(var a=[];e.length>0;)a.push(e.splice(0,t));return a}function t(e,t){return(e%t+t)%t}this.defaults={dayFormat:"dd",daySplit:7};this.$get=["$locale","$sce","dateFilter",function(a,n,i){return function(o){var r=o.$scope,l=o.$options,d=a.DATETIME_FORMATS.SHORTDAY,s=d.slice(l.startWeek).concat(d.slice(0,l.startWeek)),u=n.trustAsHtml(''+s.join('')+""),c=o.$date||new Date,$={year:c.getFullYear(),month:c.getMonth(),date:c.getDate()},g=(6e4*c.getTimezoneOffset(),[{format:"dd",split:7,steps:{month:1},update:function(e,t){!this.built||t||e.getFullYear()!==$.year||e.getMonth()!==$.month?(angular.extend($,{year:o.$date.getFullYear(),month:o.$date.getMonth(),date:o.$date.getDate()}),o.$build()):e.getDate()!==$.date&&($.date=o.$date.getDate(),o.$updateSelected())},build:function(){var a=new Date($.year,$.month,1),n=a.getTimezoneOffset(),d=new Date(+a-864e5*t(a.getDay()-l.startWeek,6)),s=d.getTimezoneOffset();s!==n&&(d=new Date(+d+6e4*(s-n)));for(var c,g=[],m=0;42>m;m++)c=new Date(d.getFullYear(),d.getMonth(),d.getDate()+m),g.push({date:c,label:i(c,this.format),selected:o.$date&&this.isSelected(c),muted:c.getMonth()!==$.month,disabled:this.isDisabled(c)});r.title=i(a,"MMMM yyyy"),r.labels=u,r.rows=e(g,this.split),this.built=!0},isSelected:function(e){return o.$date&&e.getFullYear()===o.$date.getFullYear()&&e.getMonth()===o.$date.getMonth()&&e.getDate()===o.$date.getDate()},isDisabled:function(e){return e.getTime()l.maxDate},onKeyDown:function(e){var t=o.$date.getTime();37===e.keyCode?o.select(new Date(t-864e5),!0):38===e.keyCode?o.select(new Date(t-6048e5),!0):39===e.keyCode?o.select(new Date(t+864e5),!0):40===e.keyCode&&o.select(new Date(t+6048e5),!0)}},{name:"month",format:"MMM",split:4,steps:{year:1},update:function(e){this.built&&e.getFullYear()===$.year?e.getMonth()!==$.month&&(angular.extend($,{month:o.$date.getMonth(),date:o.$date.getDate()}),o.$updateSelected()):(angular.extend($,{year:o.$date.getFullYear(),month:o.$date.getMonth(),date:o.$date.getDate()}),o.$build())},build:function(){for(var t,a=(new Date($.year,0,1),[]),n=0;12>n;n++)t=new Date($.year,n,1),a.push({date:t,label:i(t,this.format),selected:o.$isSelected(t),disabled:this.isDisabled(t)});r.title=i(t,"yyyy"),r.labels=!1,r.rows=e(a,this.split),this.built=!0},isSelected:function(e){return o.$date&&e.getFullYear()===o.$date.getFullYear()&&e.getMonth()===o.$date.getMonth()},isDisabled:function(e){var t=+new Date(e.getFullYear(),e.getMonth()+1,0);return tl.maxDate},onKeyDown:function(e){var t=o.$date.getMonth();37===e.keyCode?o.select(o.$date.setMonth(t-1),!0):38===e.keyCode?o.select(o.$date.setMonth(t-4),!0):39===e.keyCode?o.select(o.$date.setMonth(t+1),!0):40===e.keyCode&&o.select(o.$date.setMonth(t+4),!0)}},{name:"year",format:"yyyy",split:4,steps:{year:12},update:function(e,t){!this.built||t||parseInt(e.getFullYear()/20,10)!==parseInt($.year/20,10)?(angular.extend($,{year:o.$date.getFullYear(),month:o.$date.getMonth(),date:o.$date.getDate()}),o.$build()):e.getFullYear()!==$.year&&(angular.extend($,{year:o.$date.getFullYear(),month:o.$date.getMonth(),date:o.$date.getDate()}),o.$updateSelected())},build:function(){for(var t,a=$.year-$.year%(3*this.split),n=[],l=0;12>l;l++)t=new Date(a+l,0,1),n.push({date:t,label:i(t,this.format),selected:o.$isSelected(t),disabled:this.isDisabled(t)});r.title=n[0].label+"-"+n[n.length-1].label,r.labels=!1,r.rows=e(n,this.split),this.built=!0},isSelected:function(e){return o.$date&&e.getFullYear()===o.$date.getFullYear()},isDisabled:function(e){var t=+new Date(e.getFullYear()+1,0,0);return tl.maxDate},onKeyDown:function(e){var t=o.$date.getFullYear();37===e.keyCode?o.select(o.$date.setYear(t-1),!0):38===e.keyCode?o.select(o.$date.setYear(t-4),!0):39===e.keyCode?o.select(o.$date.setYear(t+1),!0):40===e.keyCode&&o.select(o.$date.setYear(t+4),!0)}}]);return{views:l.minView?Array.prototype.slice.call(g,l.minView):g,viewDate:$}}}]}); \ No newline at end of file diff --git a/dist/modules/datepicker.min.js.map b/dist/modules/datepicker.min.js.map new file mode 100644 index 000000000..8f35a66ed --- /dev/null +++ b/dist/modules/datepicker.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"datepicker.min.js.map","sources":["datepicker.min.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","useNative","dateType","dateFormat","strictFormat","autoclose","minDate","Infinity","maxDate","startView","minView","startWeek","$get","$window","$document","$rootScope","$sce","$locale","dateFilter","datepickerViews","$tooltip","DatepickerFactory","element","controller","config","updateSelected","el","selected","$datepicker","$isSelected","date","focusElement","focus","extend","parentScope","scope","options","$options","$scope","pickerViews","$views","views","viewDate","$mode","$picker","$select","select","$selectPane","value","$toggleMode","setMode","length","update","isDate","isNaN","getTime","$date","call","$build","keep","$dateValue","Date","setFullYear","getFullYear","getMonth","getDate","$setViewValue","$render","hide","year","month","mode","pristine","built","build","$updateSelected","i","l","rows","forEach","isSelected","steps","targetDate","UTC","day","getUTCFullYear","getUTCMonth","getUTCDate","$onMouseDown","evt","preventDefault","stopPropagation","isTouch","targetEl","target","nodeName","toLowerCase","parent","triggerHandler","$onKeyDown","test","keyCode","shiftKey","altKey","$apply","onKeyDown","$digest","_init","init","isNative","prop","css","attr","on","_destroy","destroy","off","_show","show","setTimeout","$element","_hide","blur","document","body","navigator","userAgent","lang","id","directive","$parse","$q","$dateParser","isNumeric","n","parseFloat","isFinite","restrict","require","link","key","isDefined","datepicker","$observe","newValue","today","isString","match","substr","parseInt","$watch","ngModel","dateParser","format","strict","$parsers","unshift","viewValue","$setValidity","parsedDate","parse","isValid","toISOString","$formatters","push","modelValue","isUndefined","NaN","val","$on","split","arr","size","arrays","splice","mod","m","dayFormat","daySplit","picker","weekDaysMin","DATETIME_FORMATS","SHORTDAY","weekDaysLabels","slice","concat","weekDaysLabelsHtml","trustAsHtml","join","startDate","getTimezoneOffset","force","firstDayOfMonth","firstDayOfMonthOffset","firstDate","getDay","firstDateOffset","days","label","muted","disabled","isDisabled","title","labels","actualTime","name","months","lastDate","actualMonth","setMonth","firstYear","years","actualYear","setYear","Array","prototype"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/datepicker.min.map b/dist/modules/datepicker.min.map deleted file mode 100644 index b3784a5fc..000000000 --- a/dist/modules/datepicker.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"datepicker.min.js","sources":["datepicker.js","datepicker.tpl.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","useNative","dateType","dateFormat","strictFormat","autoclose","minDate","Infinity","maxDate","startView","minView","startWeek","$get","$window","$document","$rootScope","$sce","$locale","dateFilter","datepickerViews","$tooltip","DatepickerFactory","element","controller","config","updateSelected","el","selected","$datepicker","$isSelected","date","focusElement","focus","extend","parentScope","scope","options","$options","$scope","pickerViews","$views","views","viewDate","$mode","$picker","$select","select","$selectPane","value","$toggleMode","setMode","length","update","isDate","isNaN","getTime","$date","call","$build","keep","$dateValue","Date","setFullYear","getFullYear","getMonth","getDate","$setViewValue","$render","hide","year","month","mode","pristine","built","build","$updateSelected","i","l","rows","forEach","isSelected","steps","targetDate","UTC","day","getUTCFullYear","getUTCMonth","getUTCDate","$onMouseDown","evt","preventDefault","stopPropagation","isTouch","targetEl","target","nodeName","toLowerCase","parent","triggerHandler","$onKeyDown","test","keyCode","shiftKey","altKey","$apply","onKeyDown","$digest","_init","init","isNative","prop","css","attr","on","_destroy","destroy","off","_show","show","setTimeout","$element","_hide","blur","document","body","navigator","userAgent","lang","id","directive","$parse","$q","$dateParser","requestAnimationFrame","restrict","require","link","key","isDefined","datepicker","$observe","newValue","today","isString","match","substr","$watch","ngModel","dateParser","format","strict","$parsers","unshift","viewValue","$setValidity","parsedDate","parse","isValid","toISOString","$formatters","push","modelValue","isUndefined","val","$on","split","arr","size","arrays","splice","dayFormat","daySplit","picker","weekDaysMin","DATETIME_FORMATS","SHORTDAY","weekDaysLabels","slice","concat","weekDaysLabelsHtml","trustAsHtml","join","startDate","getTimezoneOffset","force","firstDayOfMonth","firstDate","getDay","days","label","muted","disabled","isDisabled","title","labels","actualTime","name","months","lastDate","actualMonth","setMonth","parseInt","firstYear","years","actualYear","setYear","Array","prototype","run","$templateCache","put"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/datepicker.tpl.js b/dist/modules/datepicker.tpl.js index fab3c8e3c..5fba8bd0b 100644 --- a/dist/modules/datepicker.tpl.js +++ b/dist/modules/datepicker.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('datepicker/datepicker.tpl.html', - "
" - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.datepicker').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('datepicker/datepicker.tpl.html', ''); + } +]); \ No newline at end of file diff --git a/dist/modules/datepicker.tpl.min.js b/dist/modules/datepicker.tpl.min.js index 176b878c1..5af46bcc6 100644 --- a/dist/modules/datepicker.tpl.min.js +++ b/dist/modules/datepicker.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.datepicker").run(["$templateCache",function(a){"use strict";a.put("datepicker/datepicker.tpl.html",'')}]); -//# sourceMappingURL=datepicker.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.datepicker").run(["$templateCache",function(t){t.put("datepicker/datepicker.tpl.html",'')}]); \ No newline at end of file diff --git a/dist/modules/datepicker.tpl.min.map b/dist/modules/datepicker.tpl.min.map deleted file mode 100644 index b4210d0a5..000000000 --- a/dist/modules/datepicker.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"datepicker.tpl.min.js","sources":["datepicker.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,6BAA6BC,KAAK,iBAAkB,SAASC,GAC1E,YAEAA,GAAeC,IAAI,iCACjB"} \ No newline at end of file diff --git a/dist/modules/debounce.js b/dist/modules/debounce.js index efb9db6b0..b3f657901 100644 --- a/dist/modules/debounce.js +++ b/dist/modules/debounce.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/debounce.min.js b/dist/modules/debounce.min.js index 8f30c048a..8bf5df2a7 100644 --- a/dist/modules/debounce.min.js +++ b/dist/modules/debounce.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.helpers.debounce",[]).constant("debounce",function(a,b,c){var d,e,f,g,h;return function(){f=this,e=arguments,g=new Date;var i=function(){var j=new Date-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e)))},j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e)),h}}).constant("throttle",function(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:new Date,g=null,f=a.apply(d,e)};return function(){var j=new Date;h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e)):g||c.trailing===!1||(g=setTimeout(i,k)),f}}); -//# sourceMappingURL=debounce.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.helpers.debounce",[]).constant("debounce",function(n,t,e){var a,r,u,l,i;return function(){u=this,r=arguments,l=new Date;var o=function(){var c=new Date-l;t>c?a=setTimeout(o,t-c):(a=null,e||(i=n.apply(u,r)))},c=e&&!a;return a||(a=setTimeout(o,t)),c&&(i=n.apply(u,r)),i}}).constant("throttle",function(n,t,e){var a,r,u,l=null,i=0;e||(e={});var o=function(){i=e.leading===!1?0:new Date,l=null,u=n.apply(a,r)};return function(){var c=new Date;i||e.leading!==!1||(i=c);var s=t-(c-i);return a=this,r=arguments,0>=s?(clearTimeout(l),l=null,i=c,u=n.apply(a,r)):l||e.trailing===!1||(l=setTimeout(o,s)),u}}); \ No newline at end of file diff --git a/dist/modules/debounce.min.js.map b/dist/modules/debounce.min.js.map new file mode 100644 index 000000000..3fcd11191 --- /dev/null +++ b/dist/modules/debounce.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"debounce.min.js.map","sources":["debounce.min.js"],"names":["angular","module","constant","func","wait","immediate","timeout","args","context","timestamp","result","this","arguments","Date","later","last","setTimeout","apply","callNow","options","previous","leading","now","remaining","clearTimeout","trailing"],"mappings":"AAOA,YACAA,SAAQC,OAAO,sCAAuCC,SAAS,WAAY,SAAUC,EAAMC,EAAMC,GAC/F,GAAIC,GAASC,EAAMC,EAASC,EAAWC,CACvC,OAAO,YACLF,EAAUG,KACVJ,EAAOK,UACPH,EAAY,GAAII,KAChB,IAAIC,GAAQ,WACV,GAAIC,GAAO,GAAIF,MAASJ,CACbL,GAAPW,EACFT,EAAUU,WAAWF,EAAOV,EAAOW,IAEnCT,EAAU,KACLD,IACHK,EAASP,EAAKc,MAAMT,EAASD,MAG/BW,EAAUb,IAAcC,CAM5B,OALKA,KACHA,EAAUU,WAAWF,EAAOV,IAE1Bc,IACFR,EAASP,EAAKc,MAAMT,EAASD,IACxBG,KAERR,SAAS,WAAY,SAAUC,EAAMC,EAAMe,GAC5C,GAAIX,GAASD,EAAMG,EACfJ,EAAU,KACVc,EAAW,CACfD,KAAYA,KACZ,IAAIL,GAAQ,WACVM,EAAWD,EAAQE,WAAY,EAAQ,EAAI,GAAIR,MAC/CP,EAAU,KACVI,EAASP,EAAKc,MAAMT,EAASD,GAE/B,OAAO,YACL,GAAIe,GAAM,GAAIT,KACTO,IAAYD,EAAQE,WAAY,IACnCD,EAAWE,EACb,IAAIC,GAAYnB,GAAQkB,EAAMF,EAW9B,OAVAZ,GAAUG,KACVJ,EAAOK,UACU,GAAbW,GACFC,aAAalB,GACbA,EAAU,KACVc,EAAWE,EACXZ,EAASP,EAAKc,MAAMT,EAASD,IACnBD,GAAWa,EAAQM,YAAa,IAC1CnB,EAAUU,WAAWF,EAAOS,IAEvBb"} \ No newline at end of file diff --git a/dist/modules/debounce.min.map b/dist/modules/debounce.min.map deleted file mode 100644 index 4a6d1afb5..000000000 --- a/dist/modules/debounce.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"debounce.min.js","sources":["debounce.js"],"names":["angular","module","constant","func","wait","immediate","timeout","args","context","timestamp","result","this","arguments","Date","later","last","setTimeout","apply","callNow","options","previous","leading","now","remaining","clearTimeout","trailing"],"mappings":"AAAA,YACAA,SAAQC,OAAO,sCAAuCC,SAAS,WAAY,SAAUC,EAAMC,EAAMC,GAC/F,GAAIC,GAASC,EAAMC,EAASC,EAAWC,CACvC,OAAO,YACLF,EAAUG,KACVJ,EAAOK,UACPH,EAAY,GAAII,KAChB,IAAIC,GAAQ,WACV,GAAIC,GAAO,GAAIF,MAASJ,CACbL,GAAPW,EACFT,EAAUU,WAAWF,EAAOV,EAAOW,IAEnCT,EAAU,KACLD,IACHK,EAASP,EAAKc,MAAMT,EAASD,MAG/BW,EAAUb,IAAcC,CAM5B,OALKA,KACHA,EAAUU,WAAWF,EAAOV,IAE1Bc,IACFR,EAASP,EAAKc,MAAMT,EAASD,IACxBG,KAERR,SAAS,WAAY,SAAUC,EAAMC,EAAMe,GAC5C,GAAIX,GAASD,EAAMG,EACfJ,EAAU,KACVc,EAAW,CACfD,KAAYA,KACZ,IAAIL,GAAQ,WACVM,EAAWD,EAAQE,WAAY,EAAQ,EAAI,GAAIR,MAC/CP,EAAU,KACVI,EAASP,EAAKc,MAAMT,EAASD,GAE/B,OAAO,YACL,GAAIe,GAAM,GAAIT,KACTO,IAAYD,EAAQE,WAAY,IACnCD,EAAWE,EACb,IAAIC,GAAYnB,GAAQkB,EAAMF,EAW9B,OAVAZ,GAAUG,KACVJ,EAAOK,UACU,GAAbW,GACFC,aAAalB,GACbA,EAAU,KACVc,EAAWE,EACXZ,EAASP,EAAKc,MAAMT,EAASD,IACnBD,GAAWa,EAAQM,YAAa,IAC1CnB,EAAUU,WAAWF,EAAOS,IAEvBb"} \ No newline at end of file diff --git a/dist/modules/dimensions.js b/dist/modules/dimensions.js index 4acceab65..4981b16be 100644 --- a/dist/modules/dimensions.js +++ b/dist/modules/dimensions.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/dimensions.min.js b/dist/modules/dimensions.min.js index 14b8e83d9..23bd6d977 100644 --- a/dist/modules/dimensions.min.js +++ b/dist/modules/dimensions.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.helpers.dimensions",[]).factory("dimensions",["$document","$window",function(){var a=(angular.element,{}),b=a.nodeName=function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()};a.css=function(a,b,c){var d;return d=a.currentStyle?a.currentStyle[b]:window.getComputedStyle?window.getComputedStyle(a)[b]:a.style[b],c===!0?parseFloat(d)||0:d},a.offset=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument;return{width:a.offsetWidth,height:a.offsetHeight,top:b.top+(window.pageYOffset||c.documentElement.scrollTop)-(c.documentElement.clientTop||0),left:b.left+(window.pageXOffset||c.documentElement.scrollLeft)-(c.documentElement.clientLeft||0)}},a.position=function(d){var e,f,g={top:0,left:0};return"fixed"===a.css(d,"position")?f=d.getBoundingClientRect():(e=c(d),f=a.offset(d),f=a.offset(d),b(e,"html")||(g=a.offset(e)),g.top+=a.css(e,"borderTopWidth",!0),g.left+=a.css(e,"borderLeftWidth",!0)),{width:d.offsetWidth,height:d.offsetHeight,top:f.top-g.top-a.css(d,"marginTop",!0),left:f.left-g.left-a.css(d,"marginLeft",!0)}};var c=function(c){var d=c.ownerDocument,e=c.offsetParent||d;if(b(e,"#document"))return d.documentElement;for(;e&&!b(e,"html")&&"static"===a.css(e,"position");)e=e.offsetParent;return e||d.documentElement};return a.height=function(b,c){var d=b.offsetHeight;return c?d+=a.css(b,"marginTop",!0)+a.css(b,"marginBottom",!0):d-=a.css(b,"paddingTop",!0)+a.css(b,"paddingBottom",!0)+a.css(b,"borderTopWidth",!0)+a.css(b,"borderBottomWidth",!0),d},a.width=function(b,c){var d=b.offsetWidth;return c?d+=a.css(b,"marginLeft",!0)+a.css(b,"marginRight",!0):d-=a.css(b,"paddingLeft",!0)+a.css(b,"paddingRight",!0)+a.css(b,"borderLeftWidth",!0)+a.css(b,"borderRightWidth",!0),d},a}]); -//# sourceMappingURL=dimensions.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.helpers.dimensions",[]).factory("dimensions",["$document","$window",function(){var t=(angular.element,{}),e=t.nodeName=function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()};t.css=function(t,e,o){var n;return n=t.currentStyle?t.currentStyle[e]:window.getComputedStyle?window.getComputedStyle(t)[e]:t.style[e],o===!0?parseFloat(n)||0:n},t.offset=function(t){var e=t.getBoundingClientRect(),o=t.ownerDocument;return{width:t.offsetWidth,height:t.offsetHeight,top:e.top+(window.pageYOffset||o.documentElement.scrollTop)-(o.documentElement.clientTop||0),left:e.left+(window.pageXOffset||o.documentElement.scrollLeft)-(o.documentElement.clientLeft||0)}},t.position=function(n){var s,r,i={top:0,left:0};return"fixed"===t.css(n,"position")?r=n.getBoundingClientRect():(s=o(n),r=t.offset(n),r=t.offset(n),e(s,"html")||(i=t.offset(s)),i.top+=t.css(s,"borderTopWidth",!0),i.left+=t.css(s,"borderLeftWidth",!0)),{width:n.offsetWidth,height:n.offsetHeight,top:r.top-i.top-t.css(n,"marginTop",!0),left:r.left-i.left-t.css(n,"marginLeft",!0)}};var o=function(o){var n=o.ownerDocument,s=o.offsetParent||n;if(e(s,"#document"))return n.documentElement;for(;s&&!e(s,"html")&&"static"===t.css(s,"position");)s=s.offsetParent;return s||n.documentElement};return t.height=function(e,o){var n=e.offsetHeight;return o?n+=t.css(e,"marginTop",!0)+t.css(e,"marginBottom",!0):n-=t.css(e,"paddingTop",!0)+t.css(e,"paddingBottom",!0)+t.css(e,"borderTopWidth",!0)+t.css(e,"borderBottomWidth",!0),n},t.width=function(e,o){var n=e.offsetWidth;return o?n+=t.css(e,"marginLeft",!0)+t.css(e,"marginRight",!0):n-=t.css(e,"paddingLeft",!0)+t.css(e,"paddingRight",!0)+t.css(e,"borderLeftWidth",!0)+t.css(e,"borderRightWidth",!0),n},t}]); \ No newline at end of file diff --git a/dist/modules/dimensions.min.js.map b/dist/modules/dimensions.min.js.map new file mode 100644 index 000000000..03f008d9c --- /dev/null +++ b/dist/modules/dimensions.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"dimensions.min.js.map","sources":["dimensions.min.js"],"names":["angular","module","factory","fn","element","nodeName","name","toLowerCase","css","prop","extra","value","currentStyle","window","getComputedStyle","style","parseFloat","offset","boxRect","getBoundingClientRect","docElement","ownerDocument","width","offsetWidth","height","offsetHeight","top","pageYOffset","documentElement","scrollTop","clientTop","left","pageXOffset","scrollLeft","clientLeft","position","offsetParentElement","offsetParentRect","offsetParent","outer"],"mappings":"AAOA,YACAA,SAAQC,OAAO,wCAAyCC,QAAQ,cAC9D,YACA,UACA,WACE,GACIC,IADSH,QAAQI,YAOjBC,EAAWF,EAAGE,SAAW,SAAUD,EAASE,GAC5C,MAAOF,GAAQC,UAAYD,EAAQC,SAASE,gBAAkBD,EAAKC,cAQvEJ,GAAGK,IAAM,SAAUJ,EAASK,EAAMC,GAChC,GAAIC,EASJ,OANEA,GAFEP,EAAQQ,aAEFR,EAAQQ,aAAaH,GACpBI,OAAOC,iBACRD,OAAOC,iBAAiBV,GAASK,GAEjCL,EAAQW,MAAMN,GAEjBC,KAAU,EAAOM,WAAWL,IAAU,EAAIA,GAQnDR,EAAGc,OAAS,SAAUb,GACpB,GAAIc,GAAUd,EAAQe,wBAClBC,EAAahB,EAAQiB,aACzB,QACEC,MAAOlB,EAAQmB,YACfC,OAAQpB,EAAQqB,aAChBC,IAAKR,EAAQQ,KAAOb,OAAOc,aAAeP,EAAWQ,gBAAgBC,YAAcT,EAAWQ,gBAAgBE,WAAa,GAC3HC,KAAMb,EAAQa,MAAQlB,OAAOmB,aAAeZ,EAAWQ,gBAAgBK,aAAeb,EAAWQ,gBAAgBM,YAAc,KASnI/B,EAAGgC,SAAW,SAAU/B,GACtB,GAGKgC,GAAqBnB,EAHtBoB,GACAX,IAAK,EACLK,KAAM,EAoBV,OAjBoC,UAAhC5B,EAAGK,IAAIJ,EAAS,YAElBa,EAASb,EAAQe,yBAGjBiB,EAAsBE,EAAalC,GACnCa,EAASd,EAAGc,OAAOb,GAEnBa,EAASd,EAAGc,OAAOb,GACdC,EAAS+B,EAAqB,UACjCC,EAAmBlC,EAAGc,OAAOmB,IAG/BC,EAAiBX,KAAOvB,EAAGK,IAAI4B,EAAqB,kBAAkB,GACtEC,EAAiBN,MAAQ5B,EAAGK,IAAI4B,EAAqB,mBAAmB,KAIxEd,MAAOlB,EAAQmB,YACfC,OAAQpB,EAAQqB,aAChBC,IAAKT,EAAOS,IAAMW,EAAiBX,IAAMvB,EAAGK,IAAIJ,EAAS,aAAa,GACtE2B,KAAMd,EAAOc,KAAOM,EAAiBN,KAAO5B,EAAGK,IAAIJ,EAAS,cAAc,IAQ9E,IAAIkC,GAAe,SAA6BlC,GAC9C,GAAIgB,GAAahB,EAAQiB,cACrBiB,EAAelC,EAAQkC,cAAgBlB,CAC3C,IAAIf,EAASiC,EAAc,aACzB,MAAOlB,GAAWQ,eACpB,MAAOU,IAAiBjC,EAASiC,EAAc,SAAgD,WAArCnC,EAAGK,IAAI8B,EAAc,aAC7EA,EAAeA,EAAaA,YAE9B,OAAOA,IAAgBlB,EAAWQ,gBAkCpC,OAzBAzB,GAAGqB,OAAS,SAAUpB,EAASmC,GAC7B,GAAI5B,GAAQP,EAAQqB,YAMpB,OALIc,GACF5B,GAASR,EAAGK,IAAIJ,EAAS,aAAa,GAAQD,EAAGK,IAAIJ,EAAS,gBAAgB,GAE9EO,GAASR,EAAGK,IAAIJ,EAAS,cAAc,GAAQD,EAAGK,IAAIJ,EAAS,iBAAiB,GAAQD,EAAGK,IAAIJ,EAAS,kBAAkB,GAAQD,EAAGK,IAAIJ,EAAS,qBAAqB,GAElKO,GASTR,EAAGmB,MAAQ,SAAUlB,EAASmC,GAC5B,GAAI5B,GAAQP,EAAQmB,WAMpB,OALIgB,GACF5B,GAASR,EAAGK,IAAIJ,EAAS,cAAc,GAAQD,EAAGK,IAAIJ,EAAS,eAAe,GAE9EO,GAASR,EAAGK,IAAIJ,EAAS,eAAe,GAAQD,EAAGK,IAAIJ,EAAS,gBAAgB,GAAQD,EAAGK,IAAIJ,EAAS,mBAAmB,GAAQD,EAAGK,IAAIJ,EAAS,oBAAoB,GAElKO,GAEFR"} \ No newline at end of file diff --git a/dist/modules/dimensions.min.map b/dist/modules/dimensions.min.map deleted file mode 100644 index 77a55d926..000000000 --- a/dist/modules/dimensions.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"dimensions.min.js","sources":["dimensions.js"],"names":["angular","module","factory","fn","element","nodeName","name","toLowerCase","css","prop","extra","value","currentStyle","window","getComputedStyle","style","parseFloat","offset","boxRect","getBoundingClientRect","docElement","ownerDocument","width","offsetWidth","height","offsetHeight","top","pageYOffset","documentElement","scrollTop","clientTop","left","pageXOffset","scrollLeft","clientLeft","position","offsetParentElement","offsetParentRect","offsetParent","outer"],"mappings":"AAAA,YACAA,SAAQC,OAAO,wCAAyCC,QAAQ,cAC9D,YACA,UACA,WACE,GACIC,IADSH,QAAQI,YAOjBC,EAAWF,EAAGE,SAAW,SAAUD,EAASE,GAC5C,MAAOF,GAAQC,UAAYD,EAAQC,SAASE,gBAAkBD,EAAKC,cAQvEJ,GAAGK,IAAM,SAAUJ,EAASK,EAAMC,GAChC,GAAIC,EASJ,OANEA,GAFEP,EAAQQ,aAEFR,EAAQQ,aAAaH,GACpBI,OAAOC,iBACRD,OAAOC,iBAAiBV,GAASK,GAEjCL,EAAQW,MAAMN,GAEjBC,KAAU,EAAOM,WAAWL,IAAU,EAAIA,GAQnDR,EAAGc,OAAS,SAAUb,GACpB,GAAIc,GAAUd,EAAQe,wBAClBC,EAAahB,EAAQiB,aACzB,QACEC,MAAOlB,EAAQmB,YACfC,OAAQpB,EAAQqB,aAChBC,IAAKR,EAAQQ,KAAOb,OAAOc,aAAeP,EAAWQ,gBAAgBC,YAAcT,EAAWQ,gBAAgBE,WAAa,GAC3HC,KAAMb,EAAQa,MAAQlB,OAAOmB,aAAeZ,EAAWQ,gBAAgBK,aAAeb,EAAWQ,gBAAgBM,YAAc,KASnI/B,EAAGgC,SAAW,SAAU/B,GACtB,GAGKgC,GAAqBnB,EAHtBoB,GACAX,IAAK,EACLK,KAAM,EAoBV,OAjBoC,UAAhC5B,EAAGK,IAAIJ,EAAS,YAElBa,EAASb,EAAQe,yBAGjBiB,EAAsBE,EAAalC,GACnCa,EAASd,EAAGc,OAAOb,GAEnBa,EAASd,EAAGc,OAAOb,GACdC,EAAS+B,EAAqB,UACjCC,EAAmBlC,EAAGc,OAAOmB,IAG/BC,EAAiBX,KAAOvB,EAAGK,IAAI4B,EAAqB,kBAAkB,GACtEC,EAAiBN,MAAQ5B,EAAGK,IAAI4B,EAAqB,mBAAmB,KAIxEd,MAAOlB,EAAQmB,YACfC,OAAQpB,EAAQqB,aAChBC,IAAKT,EAAOS,IAAMW,EAAiBX,IAAMvB,EAAGK,IAAIJ,EAAS,aAAa,GACtE2B,KAAMd,EAAOc,KAAOM,EAAiBN,KAAO5B,EAAGK,IAAIJ,EAAS,cAAc,IAQ9E,IAAIkC,GAAe,SAA6BlC,GAC9C,GAAIgB,GAAahB,EAAQiB,cACrBiB,EAAelC,EAAQkC,cAAgBlB,CAC3C,IAAIf,EAASiC,EAAc,aACzB,MAAOlB,GAAWQ,eACpB,MAAOU,IAAiBjC,EAASiC,EAAc,SAAgD,WAArCnC,EAAGK,IAAI8B,EAAc,aAC7EA,EAAeA,EAAaA,YAE9B,OAAOA,IAAgBlB,EAAWQ,gBAkCpC,OAzBAzB,GAAGqB,OAAS,SAAUpB,EAASmC,GAC7B,GAAI5B,GAAQP,EAAQqB,YAMpB,OALIc,GACF5B,GAASR,EAAGK,IAAIJ,EAAS,aAAa,GAAQD,EAAGK,IAAIJ,EAAS,gBAAgB,GAE9EO,GAASR,EAAGK,IAAIJ,EAAS,cAAc,GAAQD,EAAGK,IAAIJ,EAAS,iBAAiB,GAAQD,EAAGK,IAAIJ,EAAS,kBAAkB,GAAQD,EAAGK,IAAIJ,EAAS,qBAAqB,GAElKO,GASTR,EAAGmB,MAAQ,SAAUlB,EAASmC,GAC5B,GAAI5B,GAAQP,EAAQmB,WAMpB,OALIgB,GACF5B,GAASR,EAAGK,IAAIJ,EAAS,cAAc,GAAQD,EAAGK,IAAIJ,EAAS,eAAe,GAE9EO,GAASR,EAAGK,IAAIJ,EAAS,eAAe,GAAQD,EAAGK,IAAIJ,EAAS,gBAAgB,GAAQD,EAAGK,IAAIJ,EAAS,mBAAmB,GAAQD,EAAGK,IAAIJ,EAAS,oBAAoB,GAElKO,GAEFR"} \ No newline at end of file diff --git a/dist/modules/dropdown.js b/dist/modules/dropdown.js index 7c136fbe3..043f38be9 100644 --- a/dist/modules/dropdown.js +++ b/dist/modules/dropdown.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/dropdown.min.js b/dist/modules/dropdown.min.js index 5bba50ee0..437fb627d 100644 --- a/dist/modules/dropdown.min.js +++ b/dist/modules/dropdown.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.dropdown",["mgcrea.ngStrap.tooltip"]).provider("$dropdown",function(){var a=this.defaults={animation:"am-fade",prefixClass:"dropdown",placement:"bottom-left",template:"dropdown/dropdown.tpl.html",trigger:"click",container:!1,keyboard:!0,html:!1,delay:0};this.$get=["$window","$rootScope","$tooltip",function(b,c,d){function e(b,e){function h(a){return a.target!==b[0]?a.target!==b[0]&&i.hide():void 0}{var i={},j=angular.extend({},a,e);i.$scope=j.scope&&j.scope.$new()||c.$new()}i=d(b,j),i.$onKeyDown=function(a){if(/(38|40)/.test(a.keyCode)){a.preventDefault(),a.stopPropagation();var b=angular.element(i.$element[0].querySelectorAll("li:not(.divider) a"));if(b.length){var c;angular.forEach(b,function(a,b){g&&g.call(a,":focus")&&(c=b)}),38===a.keyCode&&c>0?c--:40===a.keyCode&&c
  • ')}]); -//# sourceMappingURL=dropdown.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.dropdown",["mgcrea.ngStrap.tooltip"]).provider("$dropdown",function(){var e=this.defaults={animation:"am-fade",prefixClass:"dropdown",placement:"bottom-left",template:"dropdown/dropdown.tpl.html",trigger:"click",container:!1,keyboard:!0,html:!1,delay:0};this.$get=["$window","$rootScope","$tooltip",function(o,t,n){function r(o,r){function c(e){return e.target!==o[0]?e.target!==o[0]&&i.hide():void 0}{var i={},d=angular.extend({},e,r);i.$scope=d.scope&&d.scope.$new()||t.$new()}i=n(o,d),i.$onKeyDown=function(e){if(/(38|40)/.test(e.keyCode)){e.preventDefault(),e.stopPropagation();var o=angular.element(i.$element[0].querySelectorAll("li:not(.divider) a"));if(o.length){var t;angular.forEach(o,function(e,o){l&&l.call(e,":focus")&&(t=o)}),38===e.keyCode&&t>0?t--:40===e.keyCode&&t
  • " - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.dropdown').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('dropdown/dropdown.tpl.html', ''); + } +]); \ No newline at end of file diff --git a/dist/modules/dropdown.tpl.min.js b/dist/modules/dropdown.tpl.min.js index 1a9e7c536..afd499a22 100644 --- a/dist/modules/dropdown.tpl.min.js +++ b/dist/modules/dropdown.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.dropdown").run(["$templateCache",function(a){"use strict";a.put("dropdown/dropdown.tpl.html",'')}]); -//# sourceMappingURL=dropdown.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.dropdown").run(["$templateCache",function(e){e.put("dropdown/dropdown.tpl.html",'')}]); \ No newline at end of file diff --git a/dist/modules/dropdown.tpl.min.map b/dist/modules/dropdown.tpl.min.map deleted file mode 100644 index 06aad84e9..000000000 --- a/dist/modules/dropdown.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"dropdown.tpl.min.js","sources":["dropdown.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,2BAA2BC,KAAK,iBAAkB,SAASC,GACxE,YAEAA,GAAeC,IAAI,6BACjB"} \ No newline at end of file diff --git a/dist/modules/modal.js b/dist/modules/modal.js index 4e6f855bd..32a223805 100644 --- a/dist/modules/modal.js +++ b/dist/modules/modal.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -11,6 +11,7 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr animation: 'am-fade', backdropAnimation: 'am-fade', prefixClass: 'modal', + prefixEvent: 'modal', placement: 'top', template: 'modal/modal.tpl.html', contentTemplate: false, @@ -30,8 +31,9 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr '$http', '$animate', '$timeout', + '$sce', 'dimensions', - function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, dimensions) { + function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, $sce, dimensions) { var forEach = angular.forEach; var trim = String.prototype.trim; var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout; @@ -40,7 +42,7 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr function ModalFactory(config) { var $modal = {}; // Common vars - var options = angular.extend({}, defaults, config); + var options = $modal.$options = angular.extend({}, defaults, config); $modal.$promise = fetchTemplate(options.template); var scope = $modal.$scope = options.scope && options.scope.$new() || $rootScope.$new(); if (!options.element && !options.container) { @@ -52,7 +54,7 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr 'content' ], function (key) { if (options[key]) - scope[key] = options[key]; + scope[key] = $sce.trustAsHtml(options[key]); }); // Provide scope helpers scope.$hide = function () { @@ -117,6 +119,7 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr scope.$destroy(); }; $modal.show = function () { + scope.$emit(options.prefixEvent + '.show.before', $modal); var parent = options.container ? findElement(options.container) : null; var after = options.container ? null : options.element; // Fetch a cloned element linked from template @@ -136,9 +139,10 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr }); } $animate.enter(modalElement, parent, after, function () { + scope.$emit(options.prefixEvent + '.show', $modal); }); scope.$isShown = true; - scope.$$phase || scope.$digest(); + scope.$$phase || scope.$root.$$phase || scope.$digest(); // Focus once the enter-animation has started // Weird PhantomJS bug hack var el = modalElement[0]; @@ -159,7 +163,9 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr } }; $modal.hide = function () { + scope.$emit(options.prefixEvent + '.hide.before', $modal); $animate.leave(modalElement, function () { + scope.$emit(options.prefixEvent + '.hide', $modal); bodyElement.removeClass(options.prefixClass + '-open'); if (options.animation) { bodyElement.addClass(options.prefixClass + '-with-' + options.animation); @@ -170,7 +176,7 @@ angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).pr }); } scope.$isShown = false; - scope.$$phase || scope.$digest(); + scope.$$phase || scope.$root.$$phase || scope.$digest(); // Unbind events if (options.backdrop) { modalElement.off('click', hideOnBackdropClick); diff --git a/dist/modules/modal.min.js b/dist/modules/modal.min.js index 5f0843dc8..f809cc613 100644 --- a/dist/modules/modal.min.js +++ b/dist/modules/modal.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.modal",["mgcrea.ngStrap.helpers.dimensions"]).provider("$modal",function(){var a=this.defaults={animation:"am-fade",backdropAnimation:"am-fade",prefixClass:"modal",placement:"top",template:"modal/modal.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions",function(b,c,d,e,f,g,h){function i(b){function e(a){a.target===a.currentTarget&&("static"===g.backdrop?f.focus():f.hide())}var f={},g=angular.extend({},a,b);f.$promise=k(g.template);var i=f.$scope=g.scope&&g.scope.$new()||c.$new();g.element||g.container||(g.container="body"),l(["title","content"],function(a){g[a]&&(i[a]=g[a])}),i.$hide=function(){i.$$postDigest(function(){f.hide()})},i.$show=function(){i.$$postDigest(function(){f.show()})},i.$toggle=function(){i.$$postDigest(function(){f.toggle()})},g.contentTemplate&&(f.$promise=f.$promise.then(function(a){var c=angular.element(a);return k(g.contentTemplate).then(function(a){var d=j('[ng-bind="content"]',c[0]).removeAttr("ng-bind").html(a);return b.template||d.next().remove(),c[0].outerHTML})}));var q,r,s=angular.element('
    ');return f.$promise.then(function(a){angular.isObject(a)&&(a=a.data),g.html&&(a=a.replace(p,'ng-bind-html="')),a=m.apply(a),q=d(a),f.init()}),f.init=function(){g.show&&i.$$postDigest(function(){f.show()})},f.destroy=function(){r&&(r.remove(),r=null),s&&(s.remove(),s=null),i.$destroy()},f.show=function(){var a=g.container?j(g.container):null,b=g.container?null:g.element;r=f.$element=q(i,function(){}),r.css({display:"block"}).addClass(g.placement),g.animation&&(g.backdrop&&s.addClass(g.backdropAnimation),r.addClass(g.animation)),g.backdrop&&h.enter(s,o,null,function(){}),h.enter(r,a,b,function(){}),i.$isShown=!0,i.$$phase||i.$digest();var c=r[0];n(function(){c.focus()}),o.addClass(g.prefixClass+"-open"),g.animation&&o.addClass(g.prefixClass+"-with-"+g.animation),g.backdrop&&(r.on("click",e),s.on("click",e)),g.keyboard&&r.on("keyup",f.$onKeyUp)},f.hide=function(){h.leave(r,function(){o.removeClass(g.prefixClass+"-open"),g.animation&&o.addClass(g.prefixClass+"-with-"+g.animation)}),g.backdrop&&h.leave(s,function(){}),i.$isShown=!1,i.$$phase||i.$digest(),g.backdrop&&(r.off("click",e),s.off("click",e)),g.keyboard&&r.off("keyup",f.$onKeyUp)},f.toggle=function(){i.$isShown?f.hide():f.show()},f.focus=function(){r[0].focus()},f.$onKeyUp=function(a){27===a.which&&f.hide()},f}function j(a,b){return angular.element((b||document).querySelectorAll(a))}function k(a){return e.when(f.get(a)||g.get(a)).then(function(b){return angular.isObject(b)?(f.put(a,b.data),b.data):b})}var l=angular.forEach,m=String.prototype.trim,n=b.requestAnimationFrame||b.setTimeout,o=angular.element(b.document.body),p=/ng-bind="/gi;return i}]}).directive("bsModal",["$window","$location","$sce","$modal",function(a,b,c,d){return{restrict:"EAC",scope:!0,link:function(a,b,e){var f={scope:a,element:b,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),angular.forEach(["title","content"],function(b){e[b]&&e.$observe(b,function(d){a[b]=c.trustAsHtml(d)})}),e.bsModal&&a.$watch(e.bsModal,function(b){angular.isObject(b)?angular.extend(a,b):a.content=b},!0);var g=d(f);b.on(e.trigger||"click",g.toggle),a.$on("$destroy",function(){g.destroy(),f=null,g=null})}}}]),angular.module("mgcrea.ngStrap.modal").run(["$templateCache",function(a){a.put("modal/modal.tpl.html",'')}]); -//# sourceMappingURL=modal.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.modal",["mgcrea.ngStrap.helpers.dimensions"]).provider("$modal",function(){var n=this.defaults={animation:"am-fade",backdropAnimation:"am-fade",prefixClass:"modal",prefixEvent:"modal",placement:"top",template:"modal/modal.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","$sce","dimensions",function(e,t,o,a,i,r,c,l,s){function u(e){function a(n){n.target===n.currentTarget&&("static"===r.backdrop?i.focus():i.hide())}var i={},r=i.$options=angular.extend({},n,e);i.$promise=m(r.template);var l=i.$scope=r.scope&&r.scope.$new()||t.$new();r.element||r.container||(r.container="body"),p(["title","content"],function(n){r[n]&&(l[n]=s.trustAsHtml(r[n]))}),l.$hide=function(){l.$$postDigest(function(){i.hide()})},l.$show=function(){l.$$postDigest(function(){i.show()})},l.$toggle=function(){l.$$postDigest(function(){i.toggle()})},r.contentTemplate&&(i.$promise=i.$promise.then(function(n){var t=angular.element(n);return m(r.contentTemplate).then(function(n){var o=d('[ng-bind="content"]',t[0]).removeAttr("ng-bind").html(n);return e.template||o.next().remove(),t[0].outerHTML})}));var u,b,v=angular.element('
    ');return i.$promise.then(function(n){angular.isObject(n)&&(n=n.data),r.html&&(n=n.replace(g,'ng-bind-html="')),n=f.apply(n),u=o(n),i.init()}),i.init=function(){r.show&&l.$$postDigest(function(){i.show()})},i.destroy=function(){b&&(b.remove(),b=null),v&&(v.remove(),v=null),l.$destroy()},i.show=function(){l.$emit(r.prefixEvent+".show.before",i);var n=r.container?d(r.container):null,e=r.container?null:r.element;b=i.$element=u(l,function(){}),b.css({display:"block"}).addClass(r.placement),r.animation&&(r.backdrop&&v.addClass(r.backdropAnimation),b.addClass(r.animation)),r.backdrop&&c.enter(v,h,null,function(){}),c.enter(b,n,e,function(){l.$emit(r.prefixEvent+".show",i)}),l.$isShown=!0,l.$$phase||l.$root.$$phase||l.$digest();var t=b[0];$(function(){t.focus()}),h.addClass(r.prefixClass+"-open"),r.animation&&h.addClass(r.prefixClass+"-with-"+r.animation),r.backdrop&&(b.on("click",a),v.on("click",a)),r.keyboard&&b.on("keyup",i.$onKeyUp)},i.hide=function(){l.$emit(r.prefixEvent+".hide.before",i),c.leave(b,function(){l.$emit(r.prefixEvent+".hide",i),h.removeClass(r.prefixClass+"-open"),r.animation&&h.addClass(r.prefixClass+"-with-"+r.animation)}),r.backdrop&&c.leave(v,function(){}),l.$isShown=!1,l.$$phase||l.$root.$$phase||l.$digest(),r.backdrop&&(b.off("click",a),v.off("click",a)),r.keyboard&&b.off("keyup",i.$onKeyUp)},i.toggle=function(){l.$isShown?i.hide():i.show()},i.focus=function(){b[0].focus()},i.$onKeyUp=function(n){27===n.which&&i.hide()},i}function d(n,e){return angular.element((e||document).querySelectorAll(n))}function m(n){return a.when(i.get(n)||r.get(n)).then(function(e){return angular.isObject(e)?(i.put(n,e.data),e.data):e})}var p=angular.forEach,f=String.prototype.trim,$=e.requestAnimationFrame||e.setTimeout,h=angular.element(e.document.body),g=/ng-bind="/gi;return u}]}).directive("bsModal",["$window","$location","$sce","$modal",function(n,e,t,o){return{restrict:"EAC",scope:!0,link:function(n,e,a){var i={scope:n,element:e,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(n){angular.isDefined(a[n])&&(i[n]=a[n])}),angular.forEach(["title","content"],function(e){a[e]&&a.$observe(e,function(o){n[e]=t.trustAsHtml(o)})}),a.bsModal&&n.$watch(a.bsModal,function(e){angular.isObject(e)?angular.extend(n,e):n.content=e},!0);var r=o(i);e.on(a.trigger||"click",r.toggle),n.$on("$destroy",function(){r.destroy(),i=null,r=null})}}}]); \ No newline at end of file diff --git a/dist/modules/modal.min.js.map b/dist/modules/modal.min.js.map new file mode 100644 index 000000000..e12105c33 --- /dev/null +++ b/dist/modules/modal.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"modal.min.js.map","sources":["modal.min.js"],"names":["angular","module","provider","defaults","this","animation","backdropAnimation","prefixClass","prefixEvent","placement","template","contentTemplate","container","element","backdrop","keyboard","html","show","$get","$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","$sce","ModalFactory","config","hideOnBackdropClick","evt","target","currentTarget","options","$modal","focus","hide","$options","extend","$promise","fetchTemplate","scope","$scope","$new","forEach","key","trustAsHtml","$hide","$$postDigest","$show","$toggle","toggle","then","templateEl","contentEl","findElement","removeAttr","next","remove","outerHTML","modalLinker","modalElement","backdropElement","isObject","data","replace","htmlReplaceRegExp","trim","apply","init","destroy","$destroy","$emit","parent","after","$element","css","display","addClass","enter","bodyElement","$isShown","$$phase","$root","$digest","el","requestAnimationFrame","on","$onKeyUp","leave","removeClass","off","which","query","document","querySelectorAll","when","get","res","put","String","prototype","setTimeout","body","directive","$location","restrict","link","attr","isDefined","$observe","newValue","bsModal","$watch","content","modal","trigger","$on"],"mappings":"AAOA,YACAA,SAAQC,OAAO,wBAAyB,sCAAsCC,SAAS,SAAU,WAC/F,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,UACXC,kBAAmB,UACnBC,YAAa,QACbC,YAAa,QACbC,UAAW,MACXC,SAAU,uBACVC,iBAAiB,EACjBC,WAAW,EACXC,QAAS,KACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,MAAM,EAEVb,MAAKc,MACH,UACA,aACA,WACA,KACA,iBACA,QACA,WACA,WACA,OACA,aACA,SAAUC,EAASC,EAAYC,EAAUC,EAAIC,EAAgBC,EAAOC,EAAUC,EAAUC,GAMtF,QAASC,GAAaC,GA8JpB,QAASC,GAAoBC,GACvBA,EAAIC,SAAWD,EAAIE,gBAEF,WAArBC,EAAQpB,SAAwBqB,EAAOC,QAAUD,EAAOE,QAhK1D,GAAIF,MAEAD,EAAUC,EAAOG,SAAWtC,QAAQuC,UAAWpC,EAAU0B,EAC7DM,GAAOK,SAAWC,EAAcP,EAAQxB,SACxC,IAAIgC,GAAQP,EAAOQ,OAAST,EAAQQ,OAASR,EAAQQ,MAAME,QAAUxB,EAAWwB,MAC3EV,GAAQrB,SAAYqB,EAAQtB,YAC/BsB,EAAQtB,UAAY,QAGtBiC,GACE,QACA,WACC,SAAUC,GACPZ,EAAQY,KACVJ,EAAMI,GAAOnB,EAAKoB,YAAYb,EAAQY,OAG1CJ,EAAMM,MAAQ,WACZN,EAAMO,aAAa,WACjBd,EAAOE,UAGXK,EAAMQ,MAAQ,WACZR,EAAMO,aAAa,WACjBd,EAAOlB,UAGXyB,EAAMS,QAAU,WACdT,EAAMO,aAAa,WACjBd,EAAOiB,YAIPlB,EAAQvB,kBACVwB,EAAOK,SAAWL,EAAOK,SAASa,KAAK,SAAU3C,GAC/C,GAAI4C,GAAatD,QAAQa,QAAQH,EACjC,OAAO+B,GAAcP,EAAQvB,iBAAiB0C,KAAK,SAAU1C,GAC3D,GAAI4C,GAAYC,EAAY,sBAAuBF,EAAW,IAAIG,WAAW,WAAWzC,KAAKL,EAI7F,OAFKkB,GAAOnB,UACV6C,EAAUG,OAAOC,SACZL,EAAW,GAAGM,cAK3B,IAAIC,GAAaC,EACbC,EAAkB/D,QAAQa,QAAQ,eAAiBqB,EAAQ3B,YAAc,eAmH7E,OAlHA4B,GAAOK,SAASa,KAAK,SAAU3C,GACzBV,QAAQgE,SAAStD,KACnBA,EAAWA,EAASuD,MAClB/B,EAAQlB,OACVN,EAAWA,EAASwD,QAAQC,EAAmB,mBACjDzD,EAAW0D,EAAKC,MAAM3D,GACtBmD,EAAcxC,EAASX,GACvByB,EAAOmC,SAETnC,EAAOmC,KAAO,WAERpC,EAAQjB,MACVyB,EAAMO,aAAa,WACjBd,EAAOlB,UAIbkB,EAAOoC,QAAU,WAEXT,IACFA,EAAaH,SACbG,EAAe,MAEbC,IACFA,EAAgBJ,SAChBI,EAAkB,MAGpBrB,EAAM8B,YAERrC,EAAOlB,KAAO,WACZyB,EAAM+B,MAAMvC,EAAQ1B,YAAc,eAAgB2B,EAClD,IAAIuC,GAASxC,EAAQtB,UAAY4C,EAAYtB,EAAQtB,WAAa,KAC9D+D,EAAQzC,EAAQtB,UAAY,KAAOsB,EAAQrB,OAE/CiD,GAAe3B,EAAOyC,SAAWf,EAAYnB,EAAO,cAGpDoB,EAAae,KAAMC,QAAS,UAAWC,SAAS7C,EAAQzB,WAEpDyB,EAAQ7B,YACN6B,EAAQpB,UACViD,EAAgBgB,SAAS7C,EAAQ5B,mBAEnCwD,EAAaiB,SAAS7C,EAAQ7B,YAE5B6B,EAAQpB,UACVW,EAASuD,MAAMjB,EAAiBkB,EAAa,KAAM,cAGrDxD,EAASuD,MAAMlB,EAAcY,EAAQC,EAAO,WAC1CjC,EAAM+B,MAAMvC,EAAQ1B,YAAc,QAAS2B,KAE7CO,EAAMwC,UAAW,EACjBxC,EAAMyC,SAAWzC,EAAM0C,MAAMD,SAAWzC,EAAM2C,SAG9C,IAAIC,GAAKxB,EAAa,EACtByB,GAAsB,WACpBD,EAAGlD,UAEL6C,EAAYF,SAAS7C,EAAQ3B,YAAc,SACvC2B,EAAQ7B,WACV4E,EAAYF,SAAS7C,EAAQ3B,YAAc,SAAW2B,EAAQ7B,WAG5D6B,EAAQpB,WACVgD,EAAa0B,GAAG,QAAS1D,GACzBiC,EAAgByB,GAAG,QAAS1D,IAE1BI,EAAQnB,UACV+C,EAAa0B,GAAG,QAASrD,EAAOsD,WAGpCtD,EAAOE,KAAO,WACZK,EAAM+B,MAAMvC,EAAQ1B,YAAc,eAAgB2B,GAClDV,EAASiE,MAAM5B,EAAc,WAC3BpB,EAAM+B,MAAMvC,EAAQ1B,YAAc,QAAS2B,GAC3C8C,EAAYU,YAAYzD,EAAQ3B,YAAc,SAC1C2B,EAAQ7B,WACV4E,EAAYF,SAAS7C,EAAQ3B,YAAc,SAAW2B,EAAQ7B,aAG9D6B,EAAQpB,UACVW,EAASiE,MAAM3B,EAAiB,cAGlCrB,EAAMwC,UAAW,EACjBxC,EAAMyC,SAAWzC,EAAM0C,MAAMD,SAAWzC,EAAM2C,UAE1CnD,EAAQpB,WACVgD,EAAa8B,IAAI,QAAS9D,GAC1BiC,EAAgB6B,IAAI,QAAS9D,IAE3BI,EAAQnB,UACV+C,EAAa8B,IAAI,QAASzD,EAAOsD,WAGrCtD,EAAOiB,OAAS,WACdV,EAAMwC,SAAW/C,EAAOE,OAASF,EAAOlB,QAE1CkB,EAAOC,MAAQ,WACb0B,EAAa,GAAG1B,SAGlBD,EAAOsD,SAAW,SAAU1D,GACZ,KAAdA,EAAI8D,OAAgB1D,EAAOE,QAQtBF,EAGT,QAASqB,GAAYsC,EAAOjF,GAC1B,MAAOb,SAAQa,SAASA,GAAWkF,UAAUC,iBAAiBF,IAEhE,QAASrD,GAAc/B,GACrB,MAAOY,GAAG2E,KAAK1E,EAAe2E,IAAIxF,IAAac,EAAM0E,IAAIxF,IAAW2C,KAAK,SAAU8C,GACjF,MAAInG,SAAQgE,SAASmC,IACnB5E,EAAe6E,IAAI1F,EAAUyF,EAAIlC,MAC1BkC,EAAIlC,MAENkC,IApLX,GAAItD,GAAU7C,QAAQ6C,QAClBuB,EAAOiC,OAAOC,UAAUlC,KACxBmB,EAAwBpE,EAAQoE,uBAAyBpE,EAAQoF,WACjEtB,EAAcjF,QAAQa,QAAQM,EAAQ4E,SAASS,MAC/CrC,EAAoB,aAmLxB,OAAOvC,OAGV6E,UAAU,WACX,UACA,YACA,OACA,SACA,SAAUtF,EAASuF,EAAW/E,EAAMQ,GAClC,OACEwE,SAAU,MACVjE,OAAO,EACPkE,KAAM,SAAkBlE,EAAO7B,EAASgG,GAEtC,GAAI3E,IACAQ,MAAOA,EACP7B,QAASA,EACTI,MAAM,EAEVjB,SAAQ6C,SACN,WACA,kBACA,YACA,WACA,WACA,OACA,YACA,aACC,SAAUC,GACP9C,QAAQ8G,UAAUD,EAAK/D,MACzBZ,EAAQY,GAAO+D,EAAK/D,MAGxB9C,QAAQ6C,SACN,QACA,WACC,SAAUC,GACX+D,EAAK/D,IAAQ+D,EAAKE,SAASjE,EAAK,SAAUkE,GACxCtE,EAAMI,GAAOnB,EAAKoB,YAAYiE,OAIlCH,EAAKI,SAAWvE,EAAMwE,OAAOL,EAAKI,QAAS,SAAUD,GAC/ChH,QAAQgE,SAASgD,GACnBhH,QAAQuC,OAAOG,EAAOsE,GAEtBtE,EAAMyE,QAAUH,IAEjB,EAEH,IAAII,GAAQjF,EAAOD,EAEnBrB,GAAQ2E,GAAGqB,EAAKQ,SAAW,QAASD,EAAMhE,QAE1CV,EAAM4E,IAAI,WAAY,WACpBF,EAAM7C,UACNrC,EAAU,KACVkF,EAAQ"} \ No newline at end of file diff --git a/dist/modules/modal.min.map b/dist/modules/modal.min.map deleted file mode 100644 index d8c936a7c..000000000 --- a/dist/modules/modal.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"modal.min.js","sources":["modal.js","modal.tpl.js"],"names":["angular","module","provider","defaults","this","animation","backdropAnimation","prefixClass","placement","template","contentTemplate","container","element","backdrop","keyboard","html","show","$get","$window","$rootScope","$compile","$q","$templateCache","$http","$animate","ModalFactory","config","hideOnBackdropClick","evt","target","currentTarget","options","$modal","focus","hide","extend","$promise","fetchTemplate","scope","$scope","$new","forEach","key","$hide","$$postDigest","$show","$toggle","toggle","then","templateEl","contentEl","findElement","removeAttr","next","remove","outerHTML","modalLinker","modalElement","backdropElement","isObject","data","replace","htmlReplaceRegExp","trim","apply","init","destroy","$destroy","parent","after","$element","css","display","addClass","enter","bodyElement","$isShown","$$phase","$digest","el","requestAnimationFrame","on","$onKeyUp","leave","removeClass","off","which","query","document","querySelectorAll","when","get","res","put","String","prototype","setTimeout","body","directive","$location","$sce","restrict","link","attr","isDefined","$observe","newValue","trustAsHtml","bsModal","$watch","content","modal","trigger","$on","run"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/modal.tpl.js b/dist/modules/modal.tpl.js index 1f1a6c1c7..142fd724d 100644 --- a/dist/modules/modal.tpl.js +++ b/dist/modules/modal.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.modal').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('modal/modal.tpl.html', - "

    " - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.modal').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('modal/modal.tpl.html', ''); + } +]); \ No newline at end of file diff --git a/dist/modules/modal.tpl.min.js b/dist/modules/modal.tpl.min.js index 83fced26e..8b902acc8 100644 --- a/dist/modules/modal.tpl.min.js +++ b/dist/modules/modal.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.modal").run(["$templateCache",function(a){"use strict";a.put("modal/modal.tpl.html",'')}]); -//# sourceMappingURL=modal.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.modal").run(["$templateCache",function(t){t.put("modal/modal.tpl.html",'')}]); \ No newline at end of file diff --git a/dist/modules/modal.tpl.min.map b/dist/modules/modal.tpl.min.map deleted file mode 100644 index a34413b0c..000000000 --- a/dist/modules/modal.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"modal.tpl.min.js","sources":["modal.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,wBAAwBC,KAAK,iBAAkB,SAASC,GACrE,YAEAA,GAAeC,IAAI,uBACjB"} \ No newline at end of file diff --git a/dist/modules/module.js b/dist/modules/module.js deleted file mode 100644 index d441e6bd5..000000000 --- a/dist/modules/module.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 - * @link http://mgcrea.github.io/angular-strap - * @author Olivier Louvignes (olivier@mg-crea.com) - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -angular.module('mgcrea.ngStrap', [ - 'mgcrea.ngStrap.modal', - 'mgcrea.ngStrap.aside', - 'mgcrea.ngStrap.alert', - 'mgcrea.ngStrap.button', - 'mgcrea.ngStrap.select', - 'mgcrea.ngStrap.datepicker', - 'mgcrea.ngStrap.timepicker', - 'mgcrea.ngStrap.navbar', - 'mgcrea.ngStrap.tooltip', - 'mgcrea.ngStrap.popover', - 'mgcrea.ngStrap.dropdown', - 'mgcrea.ngStrap.typeahead', - 'mgcrea.ngStrap.scrollspy', - 'mgcrea.ngStrap.affix', - 'mgcrea.ngStrap.tab' -]); \ No newline at end of file diff --git a/dist/modules/module.min.js b/dist/modules/module.min.js deleted file mode 100644 index dee6a6865..000000000 --- a/dist/modules/module.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 - * @link http://mgcrea.github.io/angular-strap - * @author Olivier Louvignes (olivier@mg-crea.com) - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -angular.module("mgcrea.ngStrap",["mgcrea.ngStrap.modal","mgcrea.ngStrap.aside","mgcrea.ngStrap.alert","mgcrea.ngStrap.button","mgcrea.ngStrap.select","mgcrea.ngStrap.datepicker","mgcrea.ngStrap.timepicker","mgcrea.ngStrap.navbar","mgcrea.ngStrap.tooltip","mgcrea.ngStrap.popover","mgcrea.ngStrap.dropdown","mgcrea.ngStrap.typeahead","mgcrea.ngStrap.scrollspy","mgcrea.ngStrap.affix","mgcrea.ngStrap.tab"]); -//# sourceMappingURL=module.min.map \ No newline at end of file diff --git a/dist/modules/module.min.map b/dist/modules/module.min.map deleted file mode 100644 index 5c2cf6f98..000000000 --- a/dist/modules/module.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"module.min.js","sources":["module.js"],"names":["angular","module"],"mappings":"AAAAA,QAAQC,OAAO,kBACb,uBACA,uBACA,uBACA,wBACA,wBACA,4BACA,4BACA,wBACA,yBACA,yBACA,0BACA,2BACA,2BACA,uBACA"} \ No newline at end of file diff --git a/dist/modules/navbar.js b/dist/modules/navbar.js index 52d41982d..9a65c666d 100644 --- a/dist/modules/navbar.js +++ b/dist/modules/navbar.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/navbar.min.js b/dist/modules/navbar.min.js index 5eba5e6ea..8ec8cca5c 100644 --- a/dist/modules/navbar.min.js +++ b/dist/modules/navbar.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.navbar",[]).provider("$navbar",function(){var a=this.defaults={activeClass:"active",routeAttr:"data-match-route",strict:!1};this.$get=function(){return{defaults:a}}}).directive("bsNavbar",["$window","$location","$navbar",function(a,b,c){var d=c.defaults;return{restrict:"A",link:function(a,c,e){var f=angular.copy(d);angular.forEach(Object.keys(d),function(a){angular.isDefined(e[a])&&(f[a]=e[a])}),a.$watch(function(){return b.path()},function(a){var b=c[0].querySelectorAll("li["+f.routeAttr+"]");angular.forEach(b,function(b){var c=angular.element(b),d=c.attr(f.routeAttr).replace("/","\\/");f.strict&&(d="^"+d+"$");var e=new RegExp(d,["i"]);e.test(a)?c.addClass(f.activeClass):c.removeClass(f.activeClass)})})}}}]); -//# sourceMappingURL=navbar.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.navbar",[]).provider("$navbar",function(){var t=this.defaults={activeClass:"active",routeAttr:"data-match-route",strict:!1};this.$get=function(){return{defaults:t}}}).directive("bsNavbar",["$window","$location","$navbar",function(t,a,r){var e=r.defaults;return{restrict:"A",link:function(t,r,n){var i=angular.copy(e);angular.forEach(Object.keys(e),function(t){angular.isDefined(n[t])&&(i[t]=n[t])}),t.$watch(function(){return a.path()},function(t){var a=r[0].querySelectorAll("li["+i.routeAttr+"]");angular.forEach(a,function(a){var r=angular.element(a),e=r.attr(i.routeAttr).replace("/","\\/");i.strict&&(e="^"+e+"$");var n=new RegExp(e,["i"]);n.test(t)?r.addClass(i.activeClass):r.removeClass(i.activeClass)})})}}}]); \ No newline at end of file diff --git a/dist/modules/navbar.min.js.map b/dist/modules/navbar.min.js.map new file mode 100644 index 000000000..48501fb45 --- /dev/null +++ b/dist/modules/navbar.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"navbar.min.js.map","sources":["navbar.min.js"],"names":["angular","module","provider","defaults","this","activeClass","routeAttr","strict","$get","directive","$window","$location","$navbar","restrict","link","scope","element","attr","options","copy","forEach","Object","keys","key","isDefined","$watch","path","newValue","liElements","querySelectorAll","li","liElement","pattern","replace","regexp","RegExp","test","addClass","removeClass"],"mappings":"AAOA,YACAA,SAAQC,OAAO,4BAA6BC,SAAS,UAAW,WAC9D,GAAIC,GAAWC,KAAKD,UAChBE,YAAa,SACbC,UAAW,mBACXC,QAAQ,EAEZH,MAAKI,KAAO,WACV,OAASL,SAAUA,MAEpBM,UAAU,YACX,UACA,YACA,UACA,SAAUC,EAASC,EAAWC,GAC5B,GAAIT,GAAWS,EAAQT,QACvB,QACEU,SAAU,IACVC,KAAM,SAAkBC,EAAOC,EAASC,GAEtC,GAAIC,GAAUlB,QAAQmB,KAAKhB,EAC3BH,SAAQoB,QAAQC,OAAOC,KAAKnB,GAAW,SAAUoB,GAC3CvB,QAAQwB,UAAUP,EAAKM,MACzBL,EAAQK,GAAON,EAAKM,MAGxBR,EAAMU,OAAO,WACX,MAAOd,GAAUe,QAChB,SAAUC,GACX,GAAIC,GAAaZ,EAAQ,GAAGa,iBAAiB,MAAQX,EAAQZ,UAAY,IACzEN,SAAQoB,QAAQQ,EAAY,SAAUE,GACpC,GAAIC,GAAY/B,QAAQgB,QAAQc,GAC5BE,EAAUD,EAAUd,KAAKC,EAAQZ,WAAW2B,QAAQ,IAAK,MACzDf,GAAQX,SACVyB,EAAU,IAAMA,EAAU,IAE5B,IAAIE,GAAS,GAAIC,QAAOH,GAAU,KAC9BE,GAAOE,KAAKT,GACdI,EAAUM,SAASnB,EAAQb,aAE3B0B,EAAUO,YAAYpB,EAAQb"} \ No newline at end of file diff --git a/dist/modules/navbar.min.map b/dist/modules/navbar.min.map deleted file mode 100644 index 2b229c3c8..000000000 --- a/dist/modules/navbar.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"navbar.min.js","sources":["navbar.js"],"names":["angular","module","provider","defaults","this","activeClass","routeAttr","strict","$get","directive","$window","$location","$navbar","restrict","link","scope","element","attr","options","copy","forEach","Object","keys","key","isDefined","$watch","path","newValue","liElements","querySelectorAll","li","liElement","pattern","replace","regexp","RegExp","test","addClass","removeClass"],"mappings":"AAAA,YACAA,SAAQC,OAAO,4BAA6BC,SAAS,UAAW,WAC9D,GAAIC,GAAWC,KAAKD,UAChBE,YAAa,SACbC,UAAW,mBACXC,QAAQ,EAEZH,MAAKI,KAAO,WACV,OAASL,SAAUA,MAEpBM,UAAU,YACX,UACA,YACA,UACA,SAAUC,EAASC,EAAWC,GAC5B,GAAIT,GAAWS,EAAQT,QACvB,QACEU,SAAU,IACVC,KAAM,SAAkBC,EAAOC,EAASC,GAEtC,GAAIC,GAAUlB,QAAQmB,KAAKhB,EAC3BH,SAAQoB,QAAQC,OAAOC,KAAKnB,GAAW,SAAUoB,GAC3CvB,QAAQwB,UAAUP,EAAKM,MACzBL,EAAQK,GAAON,EAAKM,MAGxBR,EAAMU,OAAO,WACX,MAAOd,GAAUe,QAChB,SAAUC,GACX,GAAIC,GAAaZ,EAAQ,GAAGa,iBAAiB,MAAQX,EAAQZ,UAAY,IACzEN,SAAQoB,QAAQQ,EAAY,SAAUE,GACpC,GAAIC,GAAY/B,QAAQgB,QAAQc,GAC5BE,EAAUD,EAAUd,KAAKC,EAAQZ,WAAW2B,QAAQ,IAAK,MACzDf,GAAQX,SACVyB,EAAU,IAAMA,EAAU,IAE5B,IAAIE,GAAS,GAAIC,QAAOH,GAAU,KAC9BE,GAAOE,KAAKT,GACdI,EAAUM,SAASnB,EAAQb,aAE3B0B,EAAUO,YAAYpB,EAAQb"} \ No newline at end of file diff --git a/dist/modules/parse-options.js b/dist/modules/parse-options.js index 22d622114..d05bcbf16 100644 --- a/dist/modules/parse-options.js +++ b/dist/modules/parse-options.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/parse-options.min.js b/dist/modules/parse-options.min.js index e831fa6ea..60676bd3e 100644 --- a/dist/modules/parse-options.min.js +++ b/dist/modules/parse-options.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.helpers.parseOptions",[]).provider("$parseOptions",function(){var a=this.defaults={regexp:/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/};this.$get=["$parse","$q",function(b,c){function d(d,e){function f(a){return a.map(function(a,b){var c,d,e={};return e[k]=a,c=j(e),d=n(e)||b,{label:c,value:d}})}var g={},h=angular.extend({},a,e);g.$values=[];var i,j,k,l,m,n,o;return g.init=function(){g.$match=i=d.match(h.regexp),j=b(i[2]||i[1]),k=i[4]||i[6],l=i[5],m=b(i[3]||""),n=b(i[2]?i[1]:k),o=b(i[7])},g.valuesFn=function(a,b){return c.when(o(a,b)).then(function(a){return g.$values=a?f(a):{},g.$values})},g.init(),g}return d}]}); -//# sourceMappingURL=parse-options.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.helpers.parseOptions",[]).provider("$parseOptions",function(){var n=this.defaults={regexp:/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/};this.$get=["$parse","$q",function(s,r){function e(e,t){function a(n){return n.map(function(n,s){var r,e,t={};return t[c]=n,r=o(t),e=f(t)||s,{label:r,value:e}})}var u={},i=angular.extend({},n,t);u.$values=[];var $,o,c,l,p,f,v;return u.init=function(){u.$match=$=e.match(i.regexp),o=s($[2]||$[1]),c=$[4]||$[6],l=$[5],p=s($[3]||""),f=s($[2]?$[1]:c),v=s($[7])},u.valuesFn=function(n,s){return r.when(v(n,s)).then(function(n){return u.$values=n?a(n):{},u.$values})},u.init(),u}return e}]}); \ No newline at end of file diff --git a/dist/modules/parse-options.min.js.map b/dist/modules/parse-options.min.js.map new file mode 100644 index 000000000..c3a38200e --- /dev/null +++ b/dist/modules/parse-options.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"parse-options.min.js.map","sources":["parse-options.min.js"],"names":["angular","module","provider","defaults","this","regexp","$get","$parse","$q","ParseOptionsFactory","attr","config","parseValues","values","map","match","index","label","value","locals","valueName","displayFn","valueFn","$parseOptions","options","extend","$values","keyName","groupByFn","valuesFn","init","$match","scope","controller","when","then"],"mappings":"AAOA,YACAA,SAAQC,OAAO,0CAA2CC,SAAS,gBAAiB,WAClF,GAAIC,GAAWC,KAAKD,UAAaE,OAAQ,+KACzCD,MAAKE,MACH,SACA,KACA,SAAUC,EAAQC,GAChB,QAASC,GAAoBC,EAAMC,GAkBjC,QAASC,GAAYC,GACnB,MAAOA,GAAOC,IAAI,SAAUC,EAAOC,GACjC,GAAiBC,GAAOC,EAApBC,IAIJ,OAHAA,GAAOC,GAAaL,EACpBE,EAAQI,EAAUF,GAClBD,EAAQI,EAAQH,IAAWH,GAEzBC,MAAOA,EACPC,MAAOA,KAzBb,GAAIK,MAEAC,EAAUxB,QAAQyB,UAAWtB,EAAUQ,EAC3CY,GAAcG,UAEd,IAAIX,GAAOM,EAAWD,EAAWO,EAASC,EAAWN,EAASO,CAyB9D,OAxBAN,GAAcO,KAAO,WACnBP,EAAcQ,OAAShB,EAAQL,EAAKK,MAAMS,EAAQnB,QAClDgB,EAAYd,EAAOQ,EAAM,IAAMA,EAAM,IAAKK,EAAYL,EAAM,IAAMA,EAAM,GAAIY,EAAUZ,EAAM,GAAIa,EAAYrB,EAAOQ,EAAM,IAAM,IAAKO,EAAUf,EAAOQ,EAAM,GAAKA,EAAM,GAAKK,GAAYS,EAAWtB,EAAOQ,EAAM,KAEjNQ,EAAcM,SAAW,SAAUG,EAAOC,GACxC,MAAOzB,GAAG0B,KAAKL,EAASG,EAAOC,IAAaE,KAAK,SAAUtB,GAEzD,MADAU,GAAcG,QAAUb,EAASD,EAAYC,MACtCU,EAAcG,WAgBzBH,EAAcO,OACPP,EAET,MAAOd"} \ No newline at end of file diff --git a/dist/modules/parse-options.min.map b/dist/modules/parse-options.min.map deleted file mode 100644 index 1eaef3929..000000000 --- a/dist/modules/parse-options.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"parse-options.min.js","sources":["parse-options.js"],"names":["angular","module","provider","defaults","this","regexp","$get","$parse","$q","ParseOptionsFactory","attr","config","parseValues","values","map","match","index","label","value","locals","valueName","displayFn","valueFn","$parseOptions","options","extend","$values","keyName","groupByFn","valuesFn","init","$match","scope","controller","when","then"],"mappings":"AAAA,YACAA,SAAQC,OAAO,0CAA2CC,SAAS,gBAAiB,WAClF,GAAIC,GAAWC,KAAKD,UAAaE,OAAQ,+KACzCD,MAAKE,MACH,SACA,KACA,SAAUC,EAAQC,GAChB,QAASC,GAAoBC,EAAMC,GAkBjC,QAASC,GAAYC,GACnB,MAAOA,GAAOC,IAAI,SAAUC,EAAOC,GACjC,GAAiBC,GAAOC,EAApBC,IAIJ,OAHAA,GAAOC,GAAaL,EACpBE,EAAQI,EAAUF,GAClBD,EAAQI,EAAQH,IAAWH,GAEzBC,MAAOA,EACPC,MAAOA,KAzBb,GAAIK,MAEAC,EAAUxB,QAAQyB,UAAWtB,EAAUQ,EAC3CY,GAAcG,UAEd,IAAIX,GAAOM,EAAWD,EAAWO,EAASC,EAAWN,EAASO,CAyB9D,OAxBAN,GAAcO,KAAO,WACnBP,EAAcQ,OAAShB,EAAQL,EAAKK,MAAMS,EAAQnB,QAClDgB,EAAYd,EAAOQ,EAAM,IAAMA,EAAM,IAAKK,EAAYL,EAAM,IAAMA,EAAM,GAAIY,EAAUZ,EAAM,GAAIa,EAAYrB,EAAOQ,EAAM,IAAM,IAAKO,EAAUf,EAAOQ,EAAM,GAAKA,EAAM,GAAKK,GAAYS,EAAWtB,EAAOQ,EAAM,KAEjNQ,EAAcM,SAAW,SAAUG,EAAOC,GACxC,MAAOzB,GAAG0B,KAAKL,EAASG,EAAOC,IAAaE,KAAK,SAAUtB,GAEzD,MADAU,GAAcG,QAAUb,EAASD,EAAYC,MACtCU,EAAcG,WAgBzBH,EAAcO,OACPP,EAET,MAAOd"} \ No newline at end of file diff --git a/dist/modules/popover.js b/dist/modules/popover.js index 3c0ffbdd8..55b0d49cc 100644 --- a/dist/modules/popover.js +++ b/dist/modules/popover.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/popover.min.js b/dist/modules/popover.min.js index c5646d8f6..37cbde6c1 100644 --- a/dist/modules/popover.min.js +++ b/dist/modules/popover.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.popover",["mgcrea.ngStrap.tooltip"]).provider("$popover",function(){var a=this.defaults={animation:"am-fade",placement:"right",template:"popover/popover.tpl.html",contentTemplate:!1,trigger:"click",keyboard:!0,html:!1,title:"",content:"",delay:0,container:!1};this.$get=["$tooltip",function(b){function c(c,d){var e=angular.extend({},a,d),f=b(c,e);return e.content&&(f.$scope.content=e.content),f}return c}]}).directive("bsPopover",["$window","$location","$sce","$popover",function(a,b,c,d){var e=a.requestAnimationFrame||a.setTimeout;return{restrict:"EAC",scope:!0,link:function(a,b,f){var g={scope:a};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation"],function(a){angular.isDefined(f[a])&&(g[a]=f[a])}),angular.forEach(["title","content"],function(b){f[b]&&f.$observe(b,function(d,f){a[b]=c.trustAsHtml(d),angular.isDefined(f)&&e(function(){h&&h.$applyPlacement()})})}),f.bsPopover&&a.$watch(f.bsPopover,function(b,c){angular.isObject(b)?angular.extend(a,b):a.content=b,angular.isDefined(c)&&e(function(){h&&h.$applyPlacement()})},!0);var h=d(b,g);a.$on("$destroy",function(){h.destroy(),g=null,h=null})}}}]),angular.module("mgcrea.ngStrap.popover").run(["$templateCache",function(a){a.put("popover/popover.tpl.html",'

    ')}]); -//# sourceMappingURL=popover.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.popover",["mgcrea.ngStrap.tooltip"]).provider("$popover",function(){var t=this.defaults={animation:"am-fade",placement:"right",template:"popover/popover.tpl.html",contentTemplate:!1,trigger:"click",keyboard:!0,html:!1,title:"",content:"",delay:0,container:!1};this.$get=["$tooltip",function(e){function n(n,o){var a=angular.extend({},t,o),r=e(n,a);return a.content&&(r.$scope.content=a.content),r}return n}]}).directive("bsPopover",["$window","$location","$sce","$popover",function(t,e,n,o){var a=t.requestAnimationFrame||t.setTimeout;return{restrict:"EAC",scope:!0,link:function(t,e,r){var i={scope:t};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation"],function(t){angular.isDefined(r[t])&&(i[t]=r[t])}),angular.forEach(["title","content"],function(e){r[e]&&r.$observe(e,function(o,r){t[e]=n.trustAsHtml(o),angular.isDefined(r)&&a(function(){c&&c.$applyPlacement()})})}),r.bsPopover&&t.$watch(r.bsPopover,function(e,n){angular.isObject(e)?angular.extend(t,e):t.content=e,angular.isDefined(n)&&a(function(){c&&c.$applyPlacement()})},!0);var c=o(e,i);t.$on("$destroy",function(){c.destroy(),i=null,c=null})}}}]); \ No newline at end of file diff --git a/dist/modules/popover.min.js.map b/dist/modules/popover.min.js.map new file mode 100644 index 000000000..9208cd3bb --- /dev/null +++ b/dist/modules/popover.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"popover.min.js.map","sources":["popover.min.js"],"names":["angular","module","provider","defaults","this","animation","placement","template","contentTemplate","trigger","keyboard","html","title","content","delay","container","$get","$tooltip","PopoverFactory","element","config","options","extend","$popover","$scope","directive","$window","$location","$sce","requestAnimationFrame","setTimeout","restrict","scope","link","attr","forEach","key","isDefined","$observe","newValue","oldValue","trustAsHtml","popover","$applyPlacement","bsPopover","$watch","isObject","$on","destroy"],"mappings":"AAOA,YACAA,SAAQC,OAAO,0BAA2B,2BAA2BC,SAAS,WAAY,WACxF,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,UACXC,UAAW,QACXC,SAAU,2BACVC,iBAAiB,EACjBC,QAAS,QACTC,UAAU,EACVC,MAAM,EACNC,MAAO,GACPC,QAAS,GACTC,MAAO,EACPC,WAAW,EAEfX,MAAKY,MACH,WACA,SAAUC,GACR,QAASC,GAAeC,EAASC,GAE/B,GAAIC,GAAUrB,QAAQsB,UAAWnB,EAAUiB,GACvCG,EAAWN,EAASE,EAASE,EAKjC,OAHIA,GAAQR,UACVU,EAASC,OAAOX,QAAUQ,EAAQR,SAE7BU,EAET,MAAOL,OAGVO,UAAU,aACX,UACA,YACA,OACA,WACA,SAAUC,EAASC,EAAWC,EAAML,GAClC,GAAIM,GAAwBH,EAAQG,uBAAyBH,EAAQI,UACrE,QACEC,SAAU,MACVC,OAAO,EACPC,KAAM,SAAkBD,EAAOb,EAASe,GAEtC,GAAIb,IAAYW,MAAOA,EACvBhC,SAAQmC,SACN,WACA,kBACA,YACA,YACA,QACA,UACA,WACA,OACA,aACC,SAAUC,GACPpC,QAAQqC,UAAUH,EAAKE,MACzBf,EAAQe,GAAOF,EAAKE,MAGxBpC,QAAQmC,SACN,QACA,WACC,SAAUC,GACXF,EAAKE,IAAQF,EAAKI,SAASF,EAAK,SAAUG,EAAUC,GAClDR,EAAMI,GAAOR,EAAKa,YAAYF,GAC9BvC,QAAQqC,UAAUG,IAAaX,EAAsB,WACnDa,GAAWA,EAAQC,wBAKzBT,EAAKU,WAAaZ,EAAMa,OAAOX,EAAKU,UAAW,SAAUL,EAAUC,GAC7DxC,QAAQ8C,SAASP,GACnBvC,QAAQsB,OAAOU,EAAOO,GAEtBP,EAAMnB,QAAU0B,EAElBvC,QAAQqC,UAAUG,IAAaX,EAAsB,WACnDa,GAAWA,EAAQC,sBAEpB,EAEH,IAAID,GAAUnB,EAASJ,EAASE,EAEhCW,GAAMe,IAAI,WAAY,WACpBL,EAAQM,UACR3B,EAAU,KACVqB,EAAU"} \ No newline at end of file diff --git a/dist/modules/popover.min.map b/dist/modules/popover.min.map deleted file mode 100644 index f697fefe7..000000000 --- a/dist/modules/popover.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"popover.min.js","sources":["popover.js","popover.tpl.js"],"names":["angular","module","provider","defaults","this","animation","placement","template","contentTemplate","trigger","keyboard","html","title","content","delay","container","$get","$tooltip","PopoverFactory","element","config","options","extend","$popover","$scope","directive","$window","$location","$sce","requestAnimationFrame","setTimeout","restrict","scope","link","attr","forEach","key","isDefined","$observe","newValue","oldValue","trustAsHtml","popover","$applyPlacement","bsPopover","$watch","isObject","$on","destroy","run","$templateCache","put"],"mappings":"AAAA,YACAA,SAAQC,OAAO,0BAA2B,2BAA2BC,SAAS,WAAY,WACxF,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,UACXC,UAAW,QACXC,SAAU,2BACVC,iBAAiB,EACjBC,QAAS,QACTC,UAAU,EACVC,MAAM,EACNC,MAAO,GACPC,QAAS,GACTC,MAAO,EACPC,WAAW,EAEfX,MAAKY,MACH,WACA,SAAUC,GACR,QAASC,GAAeC,EAASC,GAE/B,GAAIC,GAAUrB,QAAQsB,UAAWnB,EAAUiB,GACvCG,EAAWN,EAASE,EAASE,EAKjC,OAHIA,GAAQR,UACVU,EAASC,OAAOX,QAAUQ,EAAQR,SAE7BU,EAET,MAAOL,OAGVO,UAAU,aACX,UACA,YACA,OACA,WACA,SAAUC,EAASC,EAAWC,EAAML,GAClC,GAAIM,GAAwBH,EAAQG,uBAAyBH,EAAQI,UACrE,QACEC,SAAU,MACVC,OAAO,EACPC,KAAM,SAAkBD,EAAOb,EAASe,GAEtC,GAAIb,IAAYW,MAAOA,EACvBhC,SAAQmC,SACN,WACA,kBACA,YACA,YACA,QACA,UACA,WACA,OACA,aACC,SAAUC,GACPpC,QAAQqC,UAAUH,EAAKE,MACzBf,EAAQe,GAAOF,EAAKE,MAGxBpC,QAAQmC,SACN,QACA,WACC,SAAUC,GACXF,EAAKE,IAAQF,EAAKI,SAASF,EAAK,SAAUG,EAAUC,GAClDR,EAAMI,GAAOR,EAAKa,YAAYF,GAC9BvC,QAAQqC,UAAUG,IAAaX,EAAsB,WACnDa,GAAWA,EAAQC,wBAKzBT,EAAKU,WAAaZ,EAAMa,OAAOX,EAAKU,UAAW,SAAUL,EAAUC,GAC7DxC,QAAQ8C,SAASP,GACnBvC,QAAQsB,OAAOU,EAAOO,GAEtBP,EAAMnB,QAAU0B,EAElBvC,QAAQqC,UAAUG,IAAaX,EAAsB,WACnDa,GAAWA,EAAQC,sBAEpB,EAEH,IAAID,GAAUnB,EAASJ,EAASE,EAEhCW,GAAMe,IAAI,WAAY,WACpBL,EAAQM,UACR3B,EAAU,KACVqB,EAAU,YCvFpB1C,QAAQC,OAAO,0BAA0BgD,KAAK,iBAAkB,SAASC,GAGvEA,EAAeC,IAAI,2BACjB"} \ No newline at end of file diff --git a/dist/modules/popover.tpl.js b/dist/modules/popover.tpl.js index a9758793e..52babb05d 100644 --- a/dist/modules/popover.tpl.js +++ b/dist/modules/popover.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.popover').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('popover/popover.tpl.html', - "

    " - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.popover').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('popover/popover.tpl.html', '

    '); + } +]); \ No newline at end of file diff --git a/dist/modules/popover.tpl.min.js b/dist/modules/popover.tpl.min.js index abd1cf4be..941d391e3 100644 --- a/dist/modules/popover.tpl.min.js +++ b/dist/modules/popover.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.popover").run(["$templateCache",function(a){"use strict";a.put("popover/popover.tpl.html",'

    ')}]); -//# sourceMappingURL=popover.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.popover").run(["$templateCache",function(t){t.put("popover/popover.tpl.html",'

    ')}]); \ No newline at end of file diff --git a/dist/modules/popover.tpl.min.map b/dist/modules/popover.tpl.min.map deleted file mode 100644 index 0703a6c82..000000000 --- a/dist/modules/popover.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"popover.tpl.min.js","sources":["popover.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,0BAA0BC,KAAK,iBAAkB,SAASC,GACvE,YAEAA,GAAeC,IAAI,2BACjB"} \ No newline at end of file diff --git a/dist/modules/raf.js b/dist/modules/raf.js new file mode 100644 index 000000000..0be875206 --- /dev/null +++ b/dist/modules/raf.js @@ -0,0 +1,45 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +'use strict'; +angular.version.minor < 3 && angular.version.dot < 14 && angular.module('ng').factory('$$rAF', [ + '$window', + '$timeout', + function ($window, $timeout) { + var requestAnimationFrame = $window.requestAnimationFrame || $window.webkitRequestAnimationFrame || $window.mozRequestAnimationFrame; + var cancelAnimationFrame = $window.cancelAnimationFrame || $window.webkitCancelAnimationFrame || $window.mozCancelAnimationFrame || $window.webkitCancelRequestAnimationFrame; + var rafSupported = !!requestAnimationFrame; + var raf = rafSupported ? function (fn) { + var id = requestAnimationFrame(fn); + return function () { + cancelAnimationFrame(id); + }; + } : function (fn) { + var timer = $timeout(fn, 16.66, false); + // 1000 / 60 = 16.666 + return function () { + $timeout.cancel(timer); + }; + }; + raf.supported = rafSupported; + return raf; + } +]); // .factory('$$animateReflow', function($$rAF, $document) { + // var bodyEl = $document[0].body; + // return function(fn) { + // //the returned function acts as the cancellation function + // return $$rAF(function() { + // //the line below will force the browser to perform a repaint + // //so that all the animated elements within the animation frame + // //will be properly updated and drawn on screen. This is + // //required to perform multi-class CSS based animations with + // //Firefox. DO NOT REMOVE THIS LINE. + // var a = bodyEl.offsetWidth + 1; + // fn(); + // }); + // }; + // }); diff --git a/dist/modules/raf.min.js b/dist/modules/raf.min.js new file mode 100644 index 000000000..a10507435 --- /dev/null +++ b/dist/modules/raf.min.js @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +"use strict";angular.version.minor<3&&angular.version.dot<14&&angular.module("ng").factory("$$rAF",["$window","$timeout",function(n,e){var a=n.requestAnimationFrame||n.webkitRequestAnimationFrame||n.mozRequestAnimationFrame,t=n.cancelAnimationFrame||n.webkitCancelAnimationFrame||n.mozCancelAnimationFrame||n.webkitCancelRequestAnimationFrame,i=!!a,r=i?function(n){var e=a(n);return function(){t(e)}}:function(n){var a=e(n,16.66,!1);return function(){e.cancel(a)}};return r.supported=i,r}]); \ No newline at end of file diff --git a/dist/modules/raf.min.js.map b/dist/modules/raf.min.js.map new file mode 100644 index 000000000..2b6983705 --- /dev/null +++ b/dist/modules/raf.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"raf.min.js.map","sources":["raf.min.js"],"names":["angular","version","minor","dot","module","factory","$window","$timeout","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","fn","id","timer","cancel","supported"],"mappings":"AAOA,YACAA,SAAQC,QAAQC,MAAQ,GAAKF,QAAQC,QAAQE,IAAM,IAAMH,QAAQI,OAAO,MAAMC,QAAQ,SACpF,UACA,WACA,SAAUC,EAASC,GACjB,GAAIC,GAAwBF,EAAQE,uBAAyBF,EAAQG,6BAA+BH,EAAQI,yBACxGC,EAAuBL,EAAQK,sBAAwBL,EAAQM,4BAA8BN,EAAQO,yBAA2BP,EAAQQ,kCACxIC,IAAiBP,EACjBQ,EAAMD,EAAe,SAAUE,GAC/B,GAAIC,GAAKV,EAAsBS,EAC/B,OAAO,YACLN,EAAqBO,KAErB,SAAUD,GACZ,GAAIE,GAAQZ,EAASU,EAAI,OAAO,EAEhC,OAAO,YACLV,EAASa,OAAOD,IAItB,OADAH,GAAIK,UAAYN,EACTC"} \ No newline at end of file diff --git a/dist/modules/scrollspy.js b/dist/modules/scrollspy.js index 24bd7b4c3..f9658b89c 100644 --- a/dist/modules/scrollspy.js +++ b/dist/modules/scrollspy.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -86,6 +86,9 @@ angular.module('mgcrea.ngStrap.scrollspy', [ scrollEl.off('scroll', debouncedCheckPosition); unbindViewContentLoaded(); unbindIncludeContentLoaded(); + if (scrollId) { + delete spies[scrollId]; + } }; $scrollspy.checkPosition = function () { // Not ready yet diff --git a/dist/modules/scrollspy.min.js b/dist/modules/scrollspy.min.js index 55385ee55..b0636399c 100644 --- a/dist/modules/scrollspy.min.js +++ b/dist/modules/scrollspy.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.scrollspy",["mgcrea.ngStrap.helpers.debounce","mgcrea.ngStrap.helpers.dimensions"]).provider("$scrollspy",function(){var a=this.$$spies={},b=this.defaults={debounce:150,throttle:100,offset:100};this.$get=["$window","$document","$rootScope","dimensions","debounce","throttle",function(c,d,e,f,g,h){function i(a,b){return a[0].nodeName&&a[0].nodeName.toLowerCase()===b.toLowerCase()}function j(d){var j=angular.extend({},b,d);j.element||(j.element=m);var n=i(j.element,"body"),o=n?k:j.element,p=n?"window":j.id;if(a[p])return a[p].$$count++,a[p];var q,r,s,t,u,v,w,x,y={},z=y.$trackedElements=[],A=[];return y.init=function(){this.$$count=1,t=g(this.checkPosition,j.debounce),u=h(this.checkPosition,j.throttle),o.on("click",this.checkPositionWithEventLoop),k.on("resize",t),o.on("scroll",u),v=g(this.checkOffsets,j.debounce),q=e.$on("$viewContentLoaded",v),r=e.$on("$includeContentLoaded",v),v(),p&&(a[p]=y)},y.destroy=function(){this.$$count--,this.$$count>0||(o.off("click",this.checkPositionWithEventLoop),k.off("resize",t),o.off("scroll",t),q(),r())},y.checkPosition=function(){if(A.length){if(x=(n?c.pageYOffset:o.prop("scrollTop"))||0,w=Math.max(c.innerHeight,l.prop("clientHeight")),xA[a+1].offsetTop))return y.$activateElement(A[a])}},y.checkPositionWithEventLoop=function(){setTimeout(this.checkPosition,1)},y.$activateElement=function(a){if(s){var b=y.$getTrackedElement(s);b&&(b.source.removeClass("active"),i(b.source,"li")&&i(b.source.parent().parent(),"li")&&b.source.parent().parent().removeClass("active"))}s=a.target,a.source.addClass("active"),i(a.source,"li")&&i(a.source.parent().parent(),"li")&&a.source.parent().parent().addClass("active")},y.$getTrackedElement=function(a){return z.filter(function(b){return b.target===a})[0]},y.checkOffsets=function(){angular.forEach(z,function(a){var b=document.querySelector(a.target);a.offsetTop=b?f.offset(b).top:null,j.offset&&null!==a.offsetTop&&(a.offsetTop-=1*j.offset)}),A=z.filter(function(a){return null!==a.offsetTop}).sort(function(a,b){return a.offsetTop-b.offsetTop}),t()},y.trackElement=function(a,b){z.push({target:a,source:b})},y.untrackElement=function(a,b){for(var c,d=z.length;d--;)if(z[d].target===a&&z[d].source===b){c=d;break}z=z.splice(c,1)},y.activate=function(a){z[a].addClass("active")},y.init(),y}var k=angular.element(c),l=angular.element(d.prop("documentElement")),m=angular.element(c.document.body);return j}]}).directive("bsScrollspy",["$rootScope","debounce","dimensions","$scrollspy",function(a,b,c,d){return{restrict:"EAC",link:function(a,b,c){var e={scope:a};angular.forEach(["offset","target"],function(a){angular.isDefined(c[a])&&(e[a]=c[a])});var f=d(e);f.trackElement(e.target,b),a.$on("$destroy",function(){f.untrackElement(e.target,b),f.destroy(),e=null,f=null})}}}]).directive("bsScrollspyList",["$rootScope","debounce","dimensions","$scrollspy",function(){return{restrict:"A",compile:function(a){var b=a[0].querySelectorAll("li > a[href]");angular.forEach(b,function(a){var b=angular.element(a);b.parent().attr("bs-scrollspy","").attr("data-target",b.attr("href"))})}}}]); -//# sourceMappingURL=scrollspy.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.scrollspy",["mgcrea.ngStrap.helpers.debounce","mgcrea.ngStrap.helpers.dimensions"]).provider("$scrollspy",function(){var e=this.$$spies={},t=this.defaults={debounce:150,throttle:100,offset:100};this.$get=["$window","$document","$rootScope","dimensions","debounce","throttle",function(n,o,r,c,i,s){function a(e,t){return e[0].nodeName&&e[0].nodeName.toLowerCase()===t.toLowerCase()}function l(o){var l=angular.extend({},t,o);l.element||(l.element=p);var d=a(l.element,"body"),h=d?u:l.element,m=d?"window":l.id;if(e[m])return e[m].$$count++,e[m];var g,v,$,k,E,T,y,b,C={},S=C.$trackedElements=[],L=[];return C.init=function(){this.$$count=1,k=i(this.checkPosition,l.debounce),E=s(this.checkPosition,l.throttle),h.on("click",this.checkPositionWithEventLoop),u.on("resize",k),h.on("scroll",E),T=i(this.checkOffsets,l.debounce),g=r.$on("$viewContentLoaded",T),v=r.$on("$includeContentLoaded",T),T(),m&&(e[m]=C)},C.destroy=function(){this.$$count--,this.$$count>0||(h.off("click",this.checkPositionWithEventLoop),u.off("resize",k),h.off("scroll",k),g(),v(),m&&delete e[m])},C.checkPosition=function(){if(L.length){if(b=(d?n.pageYOffset:h.prop("scrollTop"))||0,y=Math.max(n.innerHeight,f.prop("clientHeight")),bL[e+1].offsetTop))return C.$activateElement(L[e])}},C.checkPositionWithEventLoop=function(){setTimeout(this.checkPosition,1)},C.$activateElement=function(e){if($){var t=C.$getTrackedElement($);t&&(t.source.removeClass("active"),a(t.source,"li")&&a(t.source.parent().parent(),"li")&&t.source.parent().parent().removeClass("active"))}$=e.target,e.source.addClass("active"),a(e.source,"li")&&a(e.source.parent().parent(),"li")&&e.source.parent().parent().addClass("active")},C.$getTrackedElement=function(e){return S.filter(function(t){return t.target===e})[0]},C.checkOffsets=function(){angular.forEach(S,function(e){var t=document.querySelector(e.target);e.offsetTop=t?c.offset(t).top:null,l.offset&&null!==e.offsetTop&&(e.offsetTop-=1*l.offset)}),L=S.filter(function(e){return null!==e.offsetTop}).sort(function(e,t){return e.offsetTop-t.offsetTop}),k()},C.trackElement=function(e,t){S.push({target:e,source:t})},C.untrackElement=function(e,t){for(var n,o=S.length;o--;)if(S[o].target===e&&S[o].source===t){n=o;break}S=S.splice(n,1)},C.activate=function(e){S[e].addClass("active")},C.init(),C}var u=angular.element(n),f=angular.element(o.prop("documentElement")),p=angular.element(n.document.body);return l}]}).directive("bsScrollspy",["$rootScope","debounce","dimensions","$scrollspy",function(e,t,n,o){return{restrict:"EAC",link:function(e,t,n){var r={scope:e};angular.forEach(["offset","target"],function(e){angular.isDefined(n[e])&&(r[e]=n[e])});var c=o(r);c.trackElement(r.target,t),e.$on("$destroy",function(){c.untrackElement(r.target,t),c.destroy(),r=null,c=null})}}}]).directive("bsScrollspyList",["$rootScope","debounce","dimensions","$scrollspy",function(){return{restrict:"A",compile:function(e){var t=e[0].querySelectorAll("li > a[href]");angular.forEach(t,function(e){var t=angular.element(e);t.parent().attr("bs-scrollspy","").attr("data-target",t.attr("href"))})}}}]); \ No newline at end of file diff --git a/dist/modules/scrollspy.min.js.map b/dist/modules/scrollspy.min.js.map new file mode 100644 index 000000000..66fee3130 --- /dev/null +++ b/dist/modules/scrollspy.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"scrollspy.min.js.map","sources":["scrollspy.min.js"],"names":["angular","module","provider","spies","this","$$spies","defaults","debounce","throttle","offset","$get","$window","$document","$rootScope","dimensions","nodeName","element","name","toLowerCase","ScrollSpyFactory","config","options","extend","bodyEl","isWindowSpy","scrollEl","windowEl","scrollId","id","$$count","unbindViewContentLoaded","unbindIncludeContentLoaded","activeTarget","debouncedCheckPosition","throttledCheckPosition","debouncedCheckOffsets","viewportHeight","scrollTop","$scrollspy","trackedElements","$trackedElements","sortedElements","init","checkPosition","on","checkPositionWithEventLoop","checkOffsets","$on","destroy","off","length","pageYOffset","prop","Math","max","innerHeight","docEl","offsetTop","target","$activateElement","i","isUndefined","setTimeout","activeElement","$getTrackedElement","source","removeClass","parent","addClass","filter","obj","forEach","trackedElement","targetElement","document","querySelector","top","el","sort","a","b","trackElement","push","untrackElement","toDelete","splice","activate","body","directive","restrict","link","scope","attr","key","isDefined","scrollspy","compile","children","querySelectorAll","child","childEl"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/scrollspy.min.map b/dist/modules/scrollspy.min.map deleted file mode 100644 index cef4ab46d..000000000 --- a/dist/modules/scrollspy.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scrollspy.min.js","sources":["scrollspy.js"],"names":["angular","module","provider","spies","this","$$spies","defaults","debounce","throttle","offset","$get","$window","$document","$rootScope","dimensions","nodeName","element","name","toLowerCase","ScrollSpyFactory","config","options","extend","bodyEl","isWindowSpy","scrollEl","windowEl","scrollId","id","$$count","unbindViewContentLoaded","unbindIncludeContentLoaded","activeTarget","debouncedCheckPosition","throttledCheckPosition","debouncedCheckOffsets","viewportHeight","scrollTop","$scrollspy","trackedElements","$trackedElements","sortedElements","init","checkPosition","on","checkPositionWithEventLoop","checkOffsets","$on","destroy","off","length","pageYOffset","prop","Math","max","innerHeight","docEl","offsetTop","target","$activateElement","i","isUndefined","setTimeout","activeElement","$getTrackedElement","source","removeClass","parent","addClass","filter","obj","forEach","trackedElement","targetElement","document","querySelector","top","el","sort","a","b","trackElement","push","untrackElement","toDelete","splice","activate","body","directive","restrict","link","scope","attr","key","isDefined","scrollspy","compile","children","querySelectorAll","child","childEl"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/select.js b/dist/modules/select.js index 2e0626083..ad098e1d2 100644 --- a/dist/modules/select.js +++ b/dist/modules/select.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -92,10 +92,7 @@ angular.module('mgcrea.ngStrap.select', [ parentScope.$digest(); // Hide if single select if (!options.multiple) { - if (options.trigger === 'focus') - element[0].blur(); - else if ($select.$isShown) - $select.hide(); + $select.hide(); } // Emit event scope.$emit('$select.select', value, index); @@ -151,12 +148,12 @@ angular.module('mgcrea.ngStrap.select', [ } }; $select.$onKeyDown = function (evt) { - if (!/(38|40|13)/.test(evt.keyCode)) + if (!/(9|13|38|40)/.test(evt.keyCode)) return; evt.preventDefault(); evt.stopPropagation(); // Select with enter - if (evt.keyCode === 13) { + if (evt.keyCode === 13 || evt.keyCode === 9) { return $select.select(scope.$activeIndex); } // Navigate with keyboard diff --git a/dist/modules/select.min.js b/dist/modules/select.min.js index ef81e56b6..21312a5d5 100644 --- a/dist/modules/select.min.js +++ b/dist/modules/select.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.select",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$select",function(){var a=this.defaults={animation:"am-fade",prefixClass:"select",placement:"bottom-left",template:"select/select.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,multiple:!1,sort:!0,caretHtml:' ',placeholder:"Choose among the following...",maxLength:3,maxLengthHtml:"selected"};this.$get=["$window","$document","$rootScope","$tooltip",function(b,c,d,e){function f(b,c,d){var f={},h=angular.extend({},a,d);f=e(b,h);var i=d.scope,j=f.$scope;j.$matches=[],j.$activeIndex=0,j.$isMultiple=h.multiple,j.$activate=function(a){j.$$postDigest(function(){f.activate(a)})},j.$select=function(a){j.$$postDigest(function(){f.select(a)})},j.$isVisible=function(){return f.$isVisible()},j.$isActive=function(a){return f.$isActive(a)},f.update=function(a){j.$matches=a,f.$updateActiveIndex()},f.activate=function(a){return h.multiple?(j.$activeIndex.sort(),f.$isActive(a)?j.$activeIndex.splice(j.$activeIndex.indexOf(a),1):j.$activeIndex.push(a),h.sort&&j.$activeIndex.sort()):j.$activeIndex=a,j.$activeIndex},f.select=function(a){var d=j.$matches[a].value;f.activate(a),c.$setViewValue(h.multiple?j.$activeIndex.map(function(a){return j.$matches[a].value}):d),c.$render(),i&&i.$digest(),h.multiple||("focus"===h.trigger?b[0].blur():f.$isShown&&f.hide()),j.$emit("$select.select",d,a)},f.$updateActiveIndex=function(){c.$modelValue&&j.$matches.length?j.$activeIndex=h.multiple&&angular.isArray(c.$modelValue)?c.$modelValue.map(function(a){return f.$getIndex(a)}):f.$getIndex(c.$modelValue):j.$activeIndex>=j.$matches.length&&(j.$activeIndex=h.multiple?[]:0)},f.$isVisible=function(){return h.minLength&&c?j.$matches.length&&c.$viewValue.length>=h.minLength:j.$matches.length},f.$isActive=function(a){return h.multiple?-1!==j.$activeIndex.indexOf(a):j.$activeIndex===a},f.$getIndex=function(a){var b=j.$matches.length,c=b;if(b){for(c=b;c--&&j.$matches[c].value!==a;);if(!(0>c))return c}},f.$onMouseDown=function(a){if(a.preventDefault(),a.stopPropagation(),g){var b=angular.element(a.target);b.triggerHandler("click")}},f.$onKeyDown=function(a){if(/(38|40|13)/.test(a.keyCode)){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return f.select(j.$activeIndex);38===a.keyCode&&j.$activeIndex>0?j.$activeIndex--:40===a.keyCode&&j.$activeIndex'),i.after(b)}var j=e(c.ngOptions),k=d(b,g,h),l=j.$match[7].replace(/\|.+/,"").trim();a.$watch(l,function(){j.valuesFn(a,g).then(function(a){k.update(a),g.$render()})},!0),a.$watch(c.ngModel,function(){k.$updateActiveIndex()},!0),g.$render=function(){var a,d;h.multiple&&angular.isArray(g.$modelValue)?(a=g.$modelValue.map(function(a){return d=k.$getIndex(a),angular.isDefined(d)?k.$scope.$matches[d].label:!1}).filter(angular.isDefined),a=a.length>(h.maxLength||f.maxLength)?a.length+" "+(h.maxLengthHtml||f.maxLengthHtml):a.join(", ")):(d=k.$getIndex(g.$modelValue),a=angular.isDefined(d)?k.$scope.$matches[d].label:!1),b.html((a?a:c.placeholder||f.placeholder)+f.caretHtml)},a.$on("$destroy",function(){k.destroy(),h=null,k=null})}}}]),angular.module("mgcrea.ngStrap.select").run(["$templateCache",function(a){a.put("select/select.tpl.html",'')}]); -//# sourceMappingURL=select.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.select",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$select",function(){var e=this.defaults={animation:"am-fade",prefixClass:"select",placement:"bottom-left",template:"select/select.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,multiple:!1,sort:!0,caretHtml:' ',placeholder:"Choose among the following...",maxLength:3,maxLengthHtml:"selected"};this.$get=["$window","$document","$rootScope","$tooltip",function(t,n,a,i){function l(t,n,a){var l={},c=angular.extend({},e,a);l=i(t,c);var r=a.scope,u=l.$scope;u.$matches=[],u.$activeIndex=0,u.$isMultiple=c.multiple,u.$activate=function(e){u.$$postDigest(function(){l.activate(e)})},u.$select=function(e){u.$$postDigest(function(){l.select(e)})},u.$isVisible=function(){return l.$isVisible()},u.$isActive=function(e){return l.$isActive(e)},l.update=function(e){u.$matches=e,l.$updateActiveIndex()},l.activate=function(e){return c.multiple?(u.$activeIndex.sort(),l.$isActive(e)?u.$activeIndex.splice(u.$activeIndex.indexOf(e),1):u.$activeIndex.push(e),c.sort&&u.$activeIndex.sort()):u.$activeIndex=e,u.$activeIndex},l.select=function(e){var t=u.$matches[e].value;l.activate(e),n.$setViewValue(c.multiple?u.$activeIndex.map(function(e){return u.$matches[e].value}):t),n.$render(),r&&r.$digest(),c.multiple||l.hide(),u.$emit("$select.select",t,e)},l.$updateActiveIndex=function(){n.$modelValue&&u.$matches.length?u.$activeIndex=c.multiple&&angular.isArray(n.$modelValue)?n.$modelValue.map(function(e){return l.$getIndex(e)}):l.$getIndex(n.$modelValue):u.$activeIndex>=u.$matches.length&&(u.$activeIndex=c.multiple?[]:0)},l.$isVisible=function(){return c.minLength&&n?u.$matches.length&&n.$viewValue.length>=c.minLength:u.$matches.length},l.$isActive=function(e){return c.multiple?-1!==u.$activeIndex.indexOf(e):u.$activeIndex===e},l.$getIndex=function(e){var t=u.$matches.length,n=t;if(t){for(n=t;n--&&u.$matches[n].value!==e;);if(!(0>n))return n}},l.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),o){var t=angular.element(e.target);t.triggerHandler("click")}},l.$onKeyDown=function(e){if(/(9|13|38|40)/.test(e.keyCode)){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode||9===e.keyCode)return l.select(u.$activeIndex);38===e.keyCode&&u.$activeIndex>0?u.$activeIndex--:40===e.keyCode&&u.$activeIndex'),r.after(t)}var u=i(n.ngOptions),s=a(t,o,c),d=u.$match[7].replace(/\|.+/,"").trim();e.$watch(d,function(){u.valuesFn(e,o).then(function(e){s.update(e),o.$render()})},!0),e.$watch(n.ngModel,function(){s.$updateActiveIndex()},!0),o.$render=function(){var e,a;c.multiple&&angular.isArray(o.$modelValue)?(e=o.$modelValue.map(function(e){return a=s.$getIndex(e),angular.isDefined(a)?s.$scope.$matches[a].label:!1}).filter(angular.isDefined),e=e.length>(c.maxLength||l.maxLength)?e.length+" "+(c.maxLengthHtml||l.maxLengthHtml):e.join(", ")):(a=s.$getIndex(o.$modelValue),e=angular.isDefined(a)?s.$scope.$matches[a].label:!1),t.html((e?e:n.placeholder||l.placeholder)+l.caretHtml)},e.$on("$destroy",function(){s.destroy(),c=null,s=null})}}}]); \ No newline at end of file diff --git a/dist/modules/select.min.js.map b/dist/modules/select.min.js.map new file mode 100644 index 000000000..0781cc7d9 --- /dev/null +++ b/dist/modules/select.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"select.min.js.map","sources":["select.min.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","multiple","sort","caretHtml","placeholder","maxLength","maxLengthHtml","$get","$window","$document","$rootScope","$tooltip","SelectFactory","element","controller","config","$select","options","extend","parentScope","scope","$scope","$matches","$activeIndex","$isMultiple","$activate","index","$$postDigest","activate","select","$isVisible","$isActive","update","matches","$updateActiveIndex","splice","indexOf","push","value","$setViewValue","map","$render","$digest","hide","$emit","$modelValue","length","isArray","$getIndex","minLength","$viewValue","l","i","$onMouseDown","evt","preventDefault","stopPropagation","isTouch","targetEl","target","triggerHandler","$onKeyDown","test","keyCode","isUndefined","_show","show","$element","addClass","setTimeout","on","_hide","off","document","body","directive","$parse","$q","$parseOptions","restrict","require","link","attr","forEach","key","isDefined","nodeName","toLowerCase","inputEl","css","after","parsedOptions","ngOptions","watchedOptions","$match","replace","trim","$watch","valuesFn","then","values","ngModel","selected","label","filter","join","$on","destroy"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/select.min.map b/dist/modules/select.min.map deleted file mode 100644 index c79e40a30..000000000 --- a/dist/modules/select.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"select.min.js","sources":["select.js","select.tpl.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","multiple","sort","caretHtml","placeholder","maxLength","maxLengthHtml","$get","$window","$document","$rootScope","$tooltip","SelectFactory","element","controller","config","$select","options","extend","parentScope","scope","$scope","$matches","$activeIndex","$isMultiple","$activate","index","$$postDigest","activate","select","$isVisible","$isActive","update","matches","$updateActiveIndex","splice","indexOf","push","value","$setViewValue","map","$render","$digest","blur","$isShown","hide","$emit","$modelValue","length","isArray","$getIndex","minLength","$viewValue","l","i","$onMouseDown","evt","preventDefault","stopPropagation","isTouch","targetEl","target","triggerHandler","$onKeyDown","test","keyCode","isUndefined","_show","show","$element","addClass","setTimeout","on","_hide","off","document","body","directive","$parse","$q","$parseOptions","restrict","require","link","attr","forEach","key","isDefined","nodeName","toLowerCase","inputEl","css","after","parsedOptions","ngOptions","watchedOptions","$match","replace","trim","$watch","valuesFn","then","values","ngModel","selected","label","filter","join","$on","destroy","run","$templateCache","put"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/select.tpl.js b/dist/modules/select.tpl.js index aa7dc5219..776ea157a 100644 --- a/dist/modules/select.tpl.js +++ b/dist/modules/select.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.select').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('select/select.tpl.html', - "" - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.select').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('select/select.tpl.html', ''); + } +]); \ No newline at end of file diff --git a/dist/modules/select.tpl.min.js b/dist/modules/select.tpl.min.js index 02dd940fe..a0a9d0f5f 100644 --- a/dist/modules/select.tpl.min.js +++ b/dist/modules/select.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.select").run(["$templateCache",function(a){"use strict";a.put("select/select.tpl.html",'')}]); -//# sourceMappingURL=select.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.select").run(["$templateCache",function(e){e.put("select/select.tpl.html",'')}]); \ No newline at end of file diff --git a/dist/modules/select.tpl.min.map b/dist/modules/select.tpl.min.map deleted file mode 100644 index 6ef23a6bc..000000000 --- a/dist/modules/select.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"select.tpl.min.js","sources":["select.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,yBAAyBC,KAAK,iBAAkB,SAASC,GACtE,YAEAA,GAAeC,IAAI,yBACjB"} \ No newline at end of file diff --git a/dist/modules/tab.js b/dist/modules/tab.js index 55d7b1d48..8c255c70a 100644 --- a/dist/modules/tab.js +++ b/dist/modules/tab.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT diff --git a/dist/modules/tab.min.js b/dist/modules/tab.min.js index 95d6ba561..3a416e225 100644 --- a/dist/modules/tab.min.js +++ b/dist/modules/tab.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.tab",[]).run(["$templateCache",function(a){a.put("$pane","{{pane.content}}")}]).provider("$tab",function(){var a=this.defaults={animation:"am-fade",template:"tab/tab.tpl.html"};this.$get=function(){return{defaults:a}}}).directive("bsTabs",["$window","$animate","$tab",function(a,b,c){var d=c.defaults;return{restrict:"EAC",scope:!0,require:"?ngModel",templateUrl:function(a,b){return b.template||d.template},link:function(a,b,c,e){var f=d;angular.forEach(["animation"],function(a){angular.isDefined(c[a])&&(f[a]=c[a])}),c.bsTabs&&a.$watch(c.bsTabs,function(b){a.panes=b},!0),b.addClass("tabs"),f.animation&&b.addClass(f.animation),a.active=a.activePane=0,a.setActive=function(b){a.active=b,e&&e.$setViewValue(b)},e&&(e.$render=function(){a.active=1*e.$modelValue})}}}]),angular.module("mgcrea.ngStrap.tab").run(["$templateCache",function(a){a.put("tab/tab.tpl.html",'
    ')}]); -//# sourceMappingURL=tab.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.tab",[]).run(["$templateCache",function(t){t.put("$pane","{{pane.content}}")}]).provider("$tab",function(){var t=this.defaults={animation:"am-fade",template:"tab/tab.tpl.html"};this.$get=function(){return{defaults:t}}}).directive("bsTabs",["$window","$animate","$tab",function(t,a,e){var n=e.defaults;return{restrict:"EAC",scope:!0,require:"?ngModel",templateUrl:function(t,a){return a.template||n.template},link:function(t,a,e,i){var r=n;angular.forEach(["animation"],function(t){angular.isDefined(e[t])&&(r[t]=e[t])}),e.bsTabs&&t.$watch(e.bsTabs,function(a){t.panes=a},!0),a.addClass("tabs"),r.animation&&a.addClass(r.animation),t.active=t.activePane=0,t.setActive=function(a){t.active=a,i&&i.$setViewValue(a)},i&&(i.$render=function(){t.active=1*i.$modelValue})}}}]); \ No newline at end of file diff --git a/dist/modules/tab.min.js.map b/dist/modules/tab.min.js.map new file mode 100644 index 000000000..311bb4e77 --- /dev/null +++ b/dist/modules/tab.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"tab.min.js.map","sources":["tab.min.js"],"names":["angular","module","run","$templateCache","put","provider","defaults","this","animation","template","$get","directive","$window","$animate","$tab","restrict","scope","require","templateUrl","element","attr","link","controller","options","forEach","key","isDefined","bsTabs","$watch","newValue","panes","addClass","active","activePane","setActive","index","$setViewValue","$render","$modelValue"],"mappings":"AAOA,YACAA,SAAQC,OAAO,yBAA0BC,KACvC,iBACA,SAAUC,GACRA,EAAeC,IAAI,QAAS,uBAE7BC,SAAS,OAAQ,WAClB,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,UACXC,SAAU,mBAEdF,MAAKG,KAAO,WACV,OAASJ,SAAUA,MAEpBK,UAAU,UACX,UACA,WACA,OACA,SAAUC,EAASC,EAAUC,GAC3B,GAAIR,GAAWQ,EAAKR,QACpB,QACES,SAAU,MACVC,OAAO,EACPC,QAAS,WACTC,YAAa,SAAUC,EAASC,GAC9B,MAAOA,GAAKX,UAAYH,EAASG,UAEnCY,KAAM,SAAkBL,EAAOG,EAASC,EAAME,GAE5C,GAAIC,GAAUjB,CACdN,SAAQwB,SAAS,aAAc,SAAUC,GACnCzB,QAAQ0B,UAAUN,EAAKK,MACzBF,EAAQE,GAAOL,EAAKK,MAGxBL,EAAKO,QAAUX,EAAMY,OAAOR,EAAKO,OAAQ,SAAUE,GACjDb,EAAMc,MAAQD,IACb,GAEHV,EAAQY,SAAS,QAEbR,EAAQf,WACVW,EAAQY,SAASR,EAAQf,WAE3BQ,EAAMgB,OAAShB,EAAMiB,WAAa,EAElCjB,EAAMkB,UAAY,SAAUC,GAC1BnB,EAAMgB,OAASG,EACXb,GACFA,EAAWc,cAAcD,IAIzBb,IACFA,EAAWe,QAAU,WACnBrB,EAAMgB,OAAkC,EAAzBV,EAAWgB"} \ No newline at end of file diff --git a/dist/modules/tab.min.map b/dist/modules/tab.min.map deleted file mode 100644 index e58c89754..000000000 --- a/dist/modules/tab.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tab.min.js","sources":["tab.js","tab.tpl.js"],"names":["angular","module","run","$templateCache","put","provider","defaults","this","animation","template","$get","directive","$window","$animate","$tab","restrict","scope","require","templateUrl","element","attr","link","controller","options","forEach","key","isDefined","bsTabs","$watch","newValue","panes","addClass","active","activePane","setActive","index","$setViewValue","$render","$modelValue"],"mappings":"AAAA,YACAA,SAAQC,OAAO,yBAA0BC,KACvC,iBACA,SAAUC,GACRA,EAAeC,IAAI,QAAS,uBAE7BC,SAAS,OAAQ,WAClB,GAAIC,GAAWC,KAAKD,UAChBE,UAAW,UACXC,SAAU,mBAEdF,MAAKG,KAAO,WACV,OAASJ,SAAUA,MAEpBK,UAAU,UACX,UACA,WACA,OACA,SAAUC,EAASC,EAAUC,GAC3B,GAAIR,GAAWQ,EAAKR,QACpB,QACES,SAAU,MACVC,OAAO,EACPC,QAAS,WACTC,YAAa,SAAUC,EAASC,GAC9B,MAAOA,GAAKX,UAAYH,EAASG,UAEnCY,KAAM,SAAkBL,EAAOG,EAASC,EAAME,GAE5C,GAAIC,GAAUjB,CACdN,SAAQwB,SAAS,aAAc,SAAUC,GACnCzB,QAAQ0B,UAAUN,EAAKK,MACzBF,EAAQE,GAAOL,EAAKK,MAGxBL,EAAKO,QAAUX,EAAMY,OAAOR,EAAKO,OAAQ,SAAUE,GACjDb,EAAMc,MAAQD,IACb,GAEHV,EAAQY,SAAS,QAEbR,EAAQf,WACVW,EAAQY,SAASR,EAAQf,WAE3BQ,EAAMgB,OAAShB,EAAMiB,WAAa,EAElCjB,EAAMkB,UAAY,SAAUC,GAC1BnB,EAAMgB,OAASG,EACXb,GACFA,EAAWc,cAAcD,IAIzBb,IACFA,EAAWe,QAAU,WACnBrB,EAAMgB,OAAkC,EAAzBV,EAAWgB,mBCvDtCtC,QAAQC,OAAO,sBAAsBC,KAAK,iBAAkB,SAASC,GAGnEA,EAAeC,IAAI,mBACjB"} \ No newline at end of file diff --git a/dist/modules/tab.tpl.js b/dist/modules/tab.tpl.js index f60e60b6a..12ad7b7ce 100644 --- a/dist/modules/tab.tpl.js +++ b/dist/modules/tab.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.tab').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('tab/tab.tpl.html', - "
    " - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.tab').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('tab/tab.tpl.html', '
    '); + } +]); \ No newline at end of file diff --git a/dist/modules/tab.tpl.min.js b/dist/modules/tab.tpl.min.js index 1e16c49e3..e1320d9e1 100644 --- a/dist/modules/tab.tpl.min.js +++ b/dist/modules/tab.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.tab").run(["$templateCache",function(a){"use strict";a.put("tab/tab.tpl.html",'
    ')}]); -//# sourceMappingURL=tab.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.tab").run(["$templateCache",function(a){a.put("tab/tab.tpl.html",'
    ')}]); \ No newline at end of file diff --git a/dist/modules/tab.tpl.min.map b/dist/modules/tab.tpl.min.map deleted file mode 100644 index 150819677..000000000 --- a/dist/modules/tab.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tab.tpl.min.js","sources":["tab.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,sBAAsBC,KAAK,iBAAkB,SAASC,GACnE,YAEAA,GAAeC,IAAI,mBACjB"} \ No newline at end of file diff --git a/dist/modules/timepicker.js b/dist/modules/timepicker.js index 89856beef..241e37fcd 100644 --- a/dist/modules/timepicker.js +++ b/dist/modules/timepicker.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -89,7 +89,7 @@ angular.module('mgcrea.ngStrap.timepicker', [ }; $timepicker.select = function (date, index, keep) { // console.warn('$timepicker.select', date, scope.$mode); - if (isNaN(controller.$dateValue.getTime())) + if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) controller.$dateValue = new Date(1970, 0, 1); if (!angular.isDate(date)) date = new Date(date); @@ -168,7 +168,7 @@ angular.module('mgcrea.ngStrap.timepicker', [ targetDate = new Date(1970, 0, 1, viewDate.hour + value * options.length, viewDate.minute); angular.extend(viewDate, { hour: targetDate.getHours() }); } else if (index === 1) { - targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute + value * options.length * 5); + targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute + value * options.length * options.minuteStep); angular.extend(viewDate, { minute: targetDate.getMinutes() }); } $timepicker.$build(); @@ -329,7 +329,8 @@ angular.module('mgcrea.ngStrap.timepicker', [ 'timeType', 'timeFormat', 'useNative', - 'lang' + 'hourStep', + 'minuteStep' ], function (key) { if (angular.isDefined(attr[key])) options[key] = attr[key]; @@ -391,14 +392,23 @@ angular.module('mgcrea.ngStrap.timepicker', [ } else if (options.timeType === 'iso') { return controller.$dateValue.toISOString(); } else { - return controller.$dateValue; + return new Date(controller.$dateValue); } }); // modelValue -> $formatters -> viewValue controller.$formatters.push(function (modelValue) { // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue); - var date = options.timeType === 'string' ? dateParser.parse(modelValue, controller.$dateValue) : new Date(modelValue); - // Setup default value: next hour? + var date; + if (angular.isUndefined(modelValue) || modelValue === null) { + date = NaN; + } else if (angular.isDate(modelValue)) { + date = modelValue; + } else if (options.timeType === 'string') { + date = dateParser.parse(modelValue); + } else { + date = new Date(modelValue); + } + // Setup default value? // if(isNaN(date.getTime())) date = new Date(new Date().setMinutes(0) + 36e5); controller.$dateValue = date; return controller.$dateValue; @@ -406,7 +416,7 @@ angular.module('mgcrea.ngStrap.timepicker', [ // viewValue -> element controller.$render = function () { // console.warn('$render("%s"): viewValue=%o', element.attr('ng-model'), controller.$viewValue); - element.val(isNaN(controller.$dateValue.getTime()) ? '' : dateFilter(controller.$dateValue, options.timeFormat)); + element.val(!controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : dateFilter(controller.$dateValue, options.timeFormat)); }; // Garbage collection scope.$on('$destroy', function () { diff --git a/dist/modules/timepicker.min.js b/dist/modules/timepicker.min.js index 0fe5ab778..44a7372e9 100644 --- a/dist/modules/timepicker.min.js +++ b/dist/modules/timepicker.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.timepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$timepicker",function(){var a=this.defaults={animation:"am-fade",prefixClass:"timepicker",placement:"bottom-left",template:"timepicker/timepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:"date",timeFormat:"shortTime",autoclose:!1,minTime:-1/0,maxTime:+1/0,length:5,hourStep:1,minuteStep:5};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","$tooltip",function(b,c,d,e,f,g,h){function i(b,c,d){function e(a,c){if(b[0].createTextRange){var d=b[0].createTextRange();d.collapse(!0),d.moveStart("character",a),d.moveEnd("character",c),d.select()}else b[0].setSelectionRange?b[0].setSelectionRange(a,c):angular.isUndefined(b[0].selectionStart)&&(b[0].selectionStart=a,b[0].selectionEnd=c)}function i(){b[0].focus()}var l=h(b,angular.extend({},a,d)),m=d.scope,n=l.$options,o=l.$scope,p=0,q=c.$dateValue||new Date,r={hour:q.getHours(),meridian:q.getHours()<12,minute:q.getMinutes(),second:q.getSeconds(),millisecond:q.getMilliseconds()},s=f.DATETIME_FORMATS[n.timeFormat]||n.timeFormat,t=/(h+)[:]?(m+)[ ]?(a?)/i.exec(s).slice(1);o.$select=function(a,b){l.select(a,b)},o.$moveIndex=function(a,b){l.$moveIndex(a,b)},o.$switchMeridian=function(a){l.switchMeridian(a)},l.update=function(a){angular.isDate(a)&&!isNaN(a.getTime())?(l.$date=a,angular.extend(r,{hour:a.getHours(),minute:a.getMinutes(),second:a.getSeconds(),millisecond:a.getMilliseconds()}),l.$build()):l.$isBuilt||l.$build()},l.select=function(a,b,d){isNaN(c.$dateValue.getTime())&&(c.$dateValue=new Date(1970,0,1)),angular.isDate(a)||(a=new Date(a)),0===b?c.$dateValue.setHours(a.getHours()):1===b&&c.$dateValue.setMinutes(a.getMinutes()),c.$setViewValue(c.$dateValue),c.$render(),n.autoclose&&!d&&l.hide(!0)},l.switchMeridian=function(a){var b=(a||c.$dateValue).getHours();c.$dateValue.setHours(12>b?b+12:b-12),c.$render()},l.$build=function(){var a,b,c=o.midIndex=parseInt(n.length/2,10),d=[];for(a=0;an.maxTime},l.$moveIndex=function(a,b){var c;0===b?(c=new Date(1970,0,1,r.hour+a*n.length,r.minute),angular.extend(r,{hour:c.getHours()})):1===b&&(c=new Date(1970,0,1,r.hour,r.minute+a*n.length*5),angular.extend(r,{minute:c.getMinutes()})),l.$build()},l.$onMouseDown=function(a){if("input"!==a.target.nodeName.toLowerCase()&&a.preventDefault(),a.stopPropagation(),j){var b=angular.element(a.target);"button"!==b[0].nodeName.toLowerCase()&&(b=b.parent()),b.triggerHandler("click")}},l.$onKeyDown=function(a){if(/(38|37|39|40|13)/.test(a.keyCode)&&!a.shiftKey&&!a.altKey){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return l.hide(!0);var b=new Date(l.$date),c=b.getHours(),d=g(b,"h").length,f=b.getMinutes(),h=g(b,"mm").length,i=/(37|39)/.test(a.keyCode),j=2+1*!!t[2];if(i&&(37===a.keyCode?p=1>p?j-1:p-1:39===a.keyCode&&(p=j-1>p?p+1:0)),0===p){if(i)return e(0,d);38===a.keyCode?b.setHours(c-n.hourStep):40===a.keyCode&&b.setHours(c+n.hourStep)}else if(1===p){if(i)return e(d+1,d+1+h);38===a.keyCode?b.setMinutes(f-n.minuteStep):40===a.keyCode&&b.setMinutes(f+n.minuteStep)}else if(2===p){if(i)return e(d+1+h+1,d+1+h+3);l.switchMeridian()}l.select(b,p,!0),m.$digest()}};var u=l.init;l.init=function(){return k&&n.useNative?(b.prop("type","time"),void b.css("-webkit-appearance","textfield")):(j&&(b.prop("type","text"),b.attr("readonly","true"),b.on("click",i)),void u())};var v=l.destroy;l.destroy=function(){k&&n.useNative&&b.off("click",i),v()};var w=l.show;l.show=function(){w(),setTimeout(function(){l.$element.on(j?"touchstart":"mousedown",l.$onMouseDown),n.keyboard&&b.on("keydown",l.$onKeyDown)})};var x=l.hide;return l.hide=function(a){l.$element.off(j?"touchstart":"mousedown",l.$onMouseDown),n.keyboard&&b.off("keydown",l.$onKeyDown),x(a)},l}var j=(angular.element(b.document.body),"createTouch"in b.document),k=/(ip(a|o)d|iphone|android)/gi.test(b.navigator.userAgent);return a.lang||(a.lang=f.id),i.defaults=a,i}]}).directive("bsTimepicker",["$window","$parse","$q","$locale","dateFilter","$timepicker","$dateParser","$timeout",function(a,b,c,d,e,f,g){{var h=f.defaults,i=/(ip(a|o)d|iphone|android)/gi.test(a.navigator.userAgent);a.requestAnimationFrame||a.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(a,b,c,d){var j={scope:a,controller:d};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","timeType","timeFormat","useNative","lang"],function(a){angular.isDefined(c[a])&&(j[a]=c[a])}),i&&(j.useNative||h.useNative)&&(j.timeFormat="HH:mm");var k=f(b,d,j);j=k.$options;var l=g({format:j.timeFormat,lang:j.lang});angular.forEach(["minTime","maxTime"],function(a){angular.isDefined(c[a])&&c.$observe(a,function(b){k.$options[a]="now"===b?(new Date).setFullYear(1970,0,1):angular.isString(b)&&b.match(/^".+"$/)?+new Date(b.substr(1,b.length-2)):l.parse(b),!isNaN(k.$options[a])&&k.$build()})}),a.$watch(c.ngModel,function(){k.update(d.$dateValue)},!0),d.$parsers.unshift(function(a){if(!a)return void d.$setValidity("date",!0);var b=l.parse(a,d.$dateValue);if(!b||isNaN(b.getTime()))d.$setValidity("date",!1);else{var c=b.getTime()>=j.minTime&&b.getTime()<=j.maxTime;d.$setValidity("date",c),c&&(d.$dateValue=b)}return"string"===j.timeType?e(a,j.timeFormat):"number"===j.timeType?d.$dateValue.getTime():"iso"===j.timeType?d.$dateValue.toISOString():d.$dateValue}),d.$formatters.push(function(a){var b="string"===j.timeType?l.parse(a,d.$dateValue):new Date(a);return d.$dateValue=b,d.$dateValue}),d.$render=function(){b.val(isNaN(d.$dateValue.getTime())?"":e(d.$dateValue,j.timeFormat))},a.$on("$destroy",function(){k.destroy(),j=null,k=null})}}}]),angular.module("mgcrea.ngStrap.timepicker").run(["$templateCache",function(a){a.put("timepicker/timepicker.tpl.html",'')}]); -//# sourceMappingURL=timepicker.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.timepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.tooltip"]).provider("$timepicker",function(){var e=this.defaults={animation:"am-fade",prefixClass:"timepicker",placement:"bottom-left",template:"timepicker/timepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:"date",timeFormat:"shortTime",autoclose:!1,minTime:-1/0,maxTime:+1/0,length:5,hourStep:1,minuteStep:5};this.$get=["$window","$document","$rootScope","$sce","$locale","dateFilter","$tooltip",function(t,n,a,i,o,r,u){function s(t,n,a){function i(e,n){if(t[0].createTextRange){var a=t[0].createTextRange();a.collapse(!0),a.moveStart("character",e),a.moveEnd("character",n),a.select()}else t[0].setSelectionRange?t[0].setSelectionRange(e,n):angular.isUndefined(t[0].selectionStart)&&(t[0].selectionStart=e,t[0].selectionEnd=n)}function s(){t[0].focus()}var m=u(t,angular.extend({},e,a)),c=a.scope,g=m.$options,$=m.$scope,p=0,f=n.$dateValue||new Date,h={hour:f.getHours(),meridian:f.getHours()<12,minute:f.getMinutes(),second:f.getSeconds(),millisecond:f.getMilliseconds()},v=o.DATETIME_FORMATS[g.timeFormat]||g.timeFormat,w=/(h+)[:]?(m+)[ ]?(a?)/i.exec(v).slice(1);$.$select=function(e,t){m.select(e,t)},$.$moveIndex=function(e,t){m.$moveIndex(e,t)},$.$switchMeridian=function(e){m.switchMeridian(e)},m.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())?(m.$date=e,angular.extend(h,{hour:e.getHours(),minute:e.getMinutes(),second:e.getSeconds(),millisecond:e.getMilliseconds()}),m.$build()):m.$isBuilt||m.$build()},m.select=function(e,t,a){(!n.$dateValue||isNaN(n.$dateValue.getTime()))&&(n.$dateValue=new Date(1970,0,1)),angular.isDate(e)||(e=new Date(e)),0===t?n.$dateValue.setHours(e.getHours()):1===t&&n.$dateValue.setMinutes(e.getMinutes()),n.$setViewValue(n.$dateValue),n.$render(),g.autoclose&&!a&&m.hide(!0)},m.switchMeridian=function(e){var t=(e||n.$dateValue).getHours();n.$dateValue.setHours(12>t?t+12:t-12),n.$render()},m.$build=function(){var e,t,n=$.midIndex=parseInt(g.length/2,10),a=[];for(e=0;eg.maxTime},m.$moveIndex=function(e,t){var n;0===t?(n=new Date(1970,0,1,h.hour+e*g.length,h.minute),angular.extend(h,{hour:n.getHours()})):1===t&&(n=new Date(1970,0,1,h.hour,h.minute+e*g.length*g.minuteStep),angular.extend(h,{minute:n.getMinutes()})),m.$build()},m.$onMouseDown=function(e){if("input"!==e.target.nodeName.toLowerCase()&&e.preventDefault(),e.stopPropagation(),l){var t=angular.element(e.target);"button"!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler("click")}},m.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return m.hide(!0);var t=new Date(m.$date),n=t.getHours(),a=r(t,"h").length,o=t.getMinutes(),u=r(t,"mm").length,s=/(37|39)/.test(e.keyCode),l=2+1*!!w[2];if(s&&(37===e.keyCode?p=1>p?l-1:p-1:39===e.keyCode&&(p=l-1>p?p+1:0)),0===p){if(s)return i(0,a);38===e.keyCode?t.setHours(n-g.hourStep):40===e.keyCode&&t.setHours(n+g.hourStep)}else if(1===p){if(s)return i(a+1,a+1+u);38===e.keyCode?t.setMinutes(o-g.minuteStep):40===e.keyCode&&t.setMinutes(o+g.minuteStep)}else if(2===p){if(s)return i(a+1+u+1,a+1+u+3);m.switchMeridian()}m.select(t,p,!0),c.$digest()}};var y=m.init;m.init=function(){return d&&g.useNative?(t.prop("type","time"),void t.css("-webkit-appearance","textfield")):(l&&(t.prop("type","text"),t.attr("readonly","true"),t.on("click",s)),void y())};var T=m.destroy;m.destroy=function(){d&&g.useNative&&t.off("click",s),T()};var D=m.show;m.show=function(){D(),setTimeout(function(){m.$element.on(l?"touchstart":"mousedown",m.$onMouseDown),g.keyboard&&t.on("keydown",m.$onKeyDown)})};var S=m.hide;return m.hide=function(e){m.$element.off(l?"touchstart":"mousedown",m.$onMouseDown),g.keyboard&&t.off("keydown",m.$onKeyDown),S(e)},m}var l=(angular.element(t.document.body),"createTouch"in t.document),d=/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent);return e.lang||(e.lang=o.id),s.defaults=e,s}]}).directive("bsTimepicker",["$window","$parse","$q","$locale","dateFilter","$timepicker","$dateParser","$timeout",function(e,t,n,a,i,o,r){{var u=o.defaults,s=/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent);e.requestAnimationFrame||e.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(e,t,n,a){var l={scope:e,controller:a};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","timeType","timeFormat","useNative","hourStep","minuteStep"],function(e){angular.isDefined(n[e])&&(l[e]=n[e])}),s&&(l.useNative||u.useNative)&&(l.timeFormat="HH:mm");var d=o(t,a,l);l=d.$options;var m=r({format:l.timeFormat,lang:l.lang});angular.forEach(["minTime","maxTime"],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){d.$options[e]="now"===t?(new Date).setFullYear(1970,0,1):angular.isString(t)&&t.match(/^".+"$/)?+new Date(t.substr(1,t.length-2)):m.parse(t),!isNaN(d.$options[e])&&d.$build()})}),e.$watch(n.ngModel,function(){d.update(a.$dateValue)},!0),a.$parsers.unshift(function(e){if(!e)return void a.$setValidity("date",!0);var t=m.parse(e,a.$dateValue);if(!t||isNaN(t.getTime()))a.$setValidity("date",!1);else{var n=t.getTime()>=l.minTime&&t.getTime()<=l.maxTime;a.$setValidity("date",n),n&&(a.$dateValue=t)}return"string"===l.timeType?i(e,l.timeFormat):"number"===l.timeType?a.$dateValue.getTime():"iso"===l.timeType?a.$dateValue.toISOString():new Date(a.$dateValue)}),a.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:"string"===l.timeType?m.parse(e):new Date(e),a.$dateValue=t,a.$dateValue}),a.$render=function(){t.val(!a.$dateValue||isNaN(a.$dateValue.getTime())?"":i(a.$dateValue,l.timeFormat))},e.$on("$destroy",function(){d.destroy(),l=null,d=null})}}}]); \ No newline at end of file diff --git a/dist/modules/timepicker.min.js.map b/dist/modules/timepicker.min.js.map new file mode 100644 index 000000000..be4289556 --- /dev/null +++ b/dist/modules/timepicker.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"timepicker.min.js.map","sources":["timepicker.min.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","useNative","timeType","timeFormat","autoclose","minTime","Infinity","maxTime","length","hourStep","minuteStep","$get","$window","$document","$rootScope","$sce","$locale","dateFilter","$tooltip","timepickerFactory","element","controller","config","createSelection","start","end","createTextRange","selRange","collapse","moveStart","moveEnd","select","setSelectionRange","isUndefined","selectionStart","selectionEnd","focusElement","focus","$timepicker","extend","parentScope","scope","options","$options","$scope","selectedIndex","startDate","$dateValue","Date","viewDate","hour","getHours","meridian","minute","getMinutes","second","getSeconds","millisecond","getMilliseconds","format","DATETIME_FORMATS","formats","exec","slice","$select","date","index","$moveIndex","value","$switchMeridian","switchMeridian","update","isDate","isNaN","getTime","$date","$build","$isBuilt","keep","setHours","setMinutes","$setViewValue","$render","hide","hours","i","midIndex","parseInt","push","label","selected","$isSelected","disabled","$isDisabled","minutes","rows","showAM","isAM","selectedTime","targetDate","$onMouseDown","evt","target","nodeName","toLowerCase","preventDefault","stopPropagation","isTouch","targetEl","parent","triggerHandler","$onKeyDown","test","keyCode","shiftKey","altKey","newDate","hoursLength","minutesLength","lateralMove","count","$digest","_init","init","isNative","prop","css","attr","on","_destroy","destroy","off","_show","show","setTimeout","$element","_hide","blur","document","body","navigator","userAgent","lang","id","directive","$parse","$q","$dateParser","requestAnimationFrame","restrict","require","link","forEach","key","isDefined","timepicker","dateParser","$observe","newValue","setFullYear","isString","match","substr","parse","$watch","ngModel","$parsers","unshift","viewValue","$setValidity","parsedTime","isValid","toISOString","$formatters","modelValue","NaN","val","$on"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/timepicker.min.map b/dist/modules/timepicker.min.map deleted file mode 100644 index 417360441..000000000 --- a/dist/modules/timepicker.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"timepicker.min.js","sources":["timepicker.js","timepicker.tpl.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","useNative","timeType","timeFormat","autoclose","minTime","Infinity","maxTime","length","hourStep","minuteStep","$get","$window","$document","$rootScope","$sce","$locale","dateFilter","$tooltip","timepickerFactory","element","controller","config","createSelection","start","end","createTextRange","selRange","collapse","moveStart","moveEnd","select","setSelectionRange","isUndefined","selectionStart","selectionEnd","focusElement","focus","$timepicker","extend","parentScope","scope","options","$options","$scope","selectedIndex","startDate","$dateValue","Date","viewDate","hour","getHours","meridian","minute","getMinutes","second","getSeconds","millisecond","getMilliseconds","format","DATETIME_FORMATS","formats","exec","slice","$select","date","index","$moveIndex","value","$switchMeridian","switchMeridian","update","isDate","isNaN","getTime","$date","$build","$isBuilt","keep","setHours","setMinutes","$setViewValue","$render","hide","hours","i","midIndex","parseInt","push","label","selected","$isSelected","disabled","$isDisabled","minutes","rows","showAM","isAM","selectedTime","targetDate","$onMouseDown","evt","target","nodeName","toLowerCase","preventDefault","stopPropagation","isTouch","targetEl","parent","triggerHandler","$onKeyDown","test","keyCode","shiftKey","altKey","newDate","hoursLength","minutesLength","lateralMove","count","$digest","_init","init","isNative","prop","css","attr","on","_destroy","destroy","off","_show","show","setTimeout","$element","_hide","blur","document","body","navigator","userAgent","lang","id","directive","$parse","$q","$dateParser","requestAnimationFrame","restrict","require","link","forEach","key","isDefined","timepicker","dateParser","$observe","newValue","setFullYear","isString","match","substr","parse","$watch","ngModel","$parsers","unshift","viewValue","$setValidity","parsedTime","isValid","toISOString","$formatters","modelValue","val","$on","run","$templateCache","put"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/timepicker.tpl.js b/dist/modules/timepicker.tpl.js index b74480c1c..565a4a33b 100644 --- a/dist/modules/timepicker.tpl.js +++ b/dist/modules/timepicker.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('timepicker/timepicker.tpl.html', - "
     
     
     
    " - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.timepicker').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('timepicker/timepicker.tpl.html', ''); + } +]); \ No newline at end of file diff --git a/dist/modules/timepicker.tpl.min.js b/dist/modules/timepicker.tpl.min.js index c84658b77..3c6005bba 100644 --- a/dist/modules/timepicker.tpl.min.js +++ b/dist/modules/timepicker.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.timepicker").run(["$templateCache",function(a){"use strict";a.put("timepicker/timepicker.tpl.html",'')}]); -//# sourceMappingURL=timepicker.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.timepicker").run(["$templateCache",function(t){t.put("timepicker/timepicker.tpl.html",'')}]); \ No newline at end of file diff --git a/dist/modules/timepicker.tpl.min.map b/dist/modules/timepicker.tpl.min.map deleted file mode 100644 index 107782c6a..000000000 --- a/dist/modules/timepicker.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"timepicker.tpl.min.js","sources":["timepicker.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,6BAA6BC,KAAK,iBAAkB,SAASC,GAC1E,YAEAA,GAAeC,IAAI,iCACjB"} \ No newline at end of file diff --git a/dist/modules/tooltip.js b/dist/modules/tooltip.js index 8a2cc180f..bd0764926 100644 --- a/dist/modules/tooltip.js +++ b/dist/modules/tooltip.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -13,6 +13,7 @@ angular.module('mgcrea.ngStrap.tooltip', [ var defaults = this.defaults = { animation: 'am-fade', prefixClass: 'tooltip', + prefixEvent: 'tooltip', container: false, placement: 'top', template: 'tooltip/tooltip.tpl.html', @@ -35,8 +36,8 @@ angular.module('mgcrea.ngStrap.tooltip', [ '$animate', '$timeout', 'dimensions', - '$$animateReflow', - function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, dimensions, $$animateReflow) { + '$$rAF', + function ($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $timeout, dimensions, $$rAF) { var trim = String.prototype.trim; var isTouch = 'createTouch' in $window.document; var htmlReplaceRegExp = /ng-bind="/gi; @@ -77,7 +78,10 @@ angular.module('mgcrea.ngStrap.tooltip', [ $tooltip.$promise = $tooltip.$promise.then(function (template) { var templateEl = angular.element(template); return fetchTemplate(options.contentTemplate).then(function (contentTemplate) { - findElement('[ng-bind="content"]', templateEl[0]).removeAttr('ng-bind').html(contentTemplate); + var contentEl = findElement('[ng-bind="content"]', templateEl[0]); + if (!contentEl.length) + contentEl = findElement('[ng-bind="title"]', templateEl[0]); + contentEl.removeAttr('ng-bind').html(contentTemplate); return templateEl[0].outerHTML; }); }); @@ -163,9 +167,10 @@ angular.module('mgcrea.ngStrap.tooltip', [ }, options.delay.show); }; $tooltip.show = function () { + scope.$emit(options.prefixEvent + '.show.before', $tooltip); var parent = options.container ? tipContainer : null; var after = options.container ? null : element; - // Remove any existing tipElement + // Hide any existing tipElement if (tipElement) tipElement.remove(); // Fetch a cloned element linked from template @@ -184,10 +189,12 @@ angular.module('mgcrea.ngStrap.tooltip', [ if (options.type) tipElement.addClass(options.prefixClass + '-' + options.type); $animate.enter(tipElement, parent, after, function () { + scope.$emit(options.prefixEvent + '.show', $tooltip); }); $tooltip.$isShown = scope.$isShown = true; - scope.$$phase || scope.$digest(); - $$animateReflow($tooltip.$applyPlacement); + scope.$$phase || scope.$root.$$phase || scope.$digest(); + $$rAF($tooltip.$applyPlacement); + // var a = bodyEl.offsetWidth + 1; ? // Bind events if (options.keyboard) { if (options.trigger !== 'focus') { @@ -213,13 +220,14 @@ angular.module('mgcrea.ngStrap.tooltip', [ $tooltip.hide = function (blur) { if (!$tooltip.$isShown) return; + scope.$emit(options.prefixEvent + '.hide.before', $tooltip); $animate.leave(tipElement, function () { - tipElement = null; + scope.$emit(options.prefixEvent + '.hide', $tooltip); }); $tooltip.$isShown = scope.$isShown = false; - scope.$$phase || scope.$digest(); + scope.$$phase || scope.$root.$$phase || scope.$digest(); // Unbind events - if (options.keyboard) { + if (options.keyboard && tipElement !== null) { tipElement.off('keyup', $tooltip.$onKeyUp); } // Allow to blur the input when hidden, like when pressing enter key @@ -343,8 +351,8 @@ angular.module('mgcrea.ngStrap.tooltip', [ '$location', '$sce', '$tooltip', - '$$animateReflow', - function ($window, $location, $sce, $tooltip, $$animateReflow) { + '$$rAF', + function ($window, $location, $sce, $tooltip, $$rAF) { return { restrict: 'EAC', scope: true, @@ -370,7 +378,7 @@ angular.module('mgcrea.ngStrap.tooltip', [ angular.forEach(['title'], function (key) { attr[key] && attr.$observe(key, function (newValue, oldValue) { scope[key] = $sce.trustAsHtml(newValue); - angular.isDefined(oldValue) && $$animateReflow(function () { + angular.isDefined(oldValue) && $$rAF(function () { tooltip && tooltip.$applyPlacement(); }); }); @@ -380,9 +388,9 @@ angular.module('mgcrea.ngStrap.tooltip', [ if (angular.isObject(newValue)) { angular.extend(scope, newValue); } else { - scope.content = newValue; + scope.title = newValue; } - angular.isDefined(oldValue) && $$animateReflow(function () { + angular.isDefined(oldValue) && $$rAF(function () { tooltip && tooltip.$applyPlacement(); }); }, true); diff --git a/dist/modules/tooltip.min.js b/dist/modules/tooltip.min.js index 03cc40a6b..0d8e96378 100644 --- a/dist/modules/tooltip.min.js +++ b/dist/modules/tooltip.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.tooltip",["ngAnimate","mgcrea.ngStrap.helpers.dimensions"]).provider("$tooltip",function(){var a=this.defaults={animation:"am-fade",prefixClass:"tooltip",container:!1,placement:"top",template:"tooltip/tooltip.tpl.html",contentTemplate:!1,trigger:"hover focus",keyboard:!1,html:!1,show:!1,title:"",type:"",delay:0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions","$$animateReflow",function(b,c,d,e,f,g,h,i,j,k){function l(b,e){function f(){return"body"===l.container?j.offset(b[0]):j.position(b[0])}function g(a,b,c,d){var e,f=a.split("-");switch(f[0]){case"right":e={top:b.top+b.height/2-d/2,left:b.left+b.width};break;case"bottom":e={top:b.top+b.height,left:b.left+b.width/2-c/2};break;case"left":e={top:b.top+b.height/2-d/2,left:b.left-c};break;default:e={top:b.top-d,left:b.left+b.width/2-c/2}}if(!f[1])return e;if("top"===f[0]||"bottom"===f[0])switch(f[1]){case"left":e.left=b.left;break;case"right":e.left=b.left+b.width-c}else if("left"===f[0]||"right"===f[0])switch(f[1]){case"top":e.top=b.top-d;break;case"bottom":e.top=b.top+b.height}return e}var i={},l=i.$options=angular.extend({},a,e);i.$promise=n(l.template);var r=i.$scope=l.scope&&l.scope.$new()||c.$new();l.delay&&angular.isString(l.delay)&&(l.delay=parseFloat(l.delay)),l.title&&(i.$scope.title=l.title),r.$hide=function(){r.$$postDigest(function(){i.hide()})},r.$show=function(){r.$$postDigest(function(){i.show()})},r.$toggle=function(){r.$$postDigest(function(){i.toggle()})},i.$isShown=r.$isShown=!1;var s,t;l.contentTemplate&&(i.$promise=i.$promise.then(function(a){var b=angular.element(a);return n(l.contentTemplate).then(function(a){return m('[ng-bind="content"]',b[0]).removeAttr("ng-bind").html(a),b[0].outerHTML})}));var u,v,w,x;return i.$promise.then(function(a){angular.isObject(a)&&(a=a.data),l.html&&(a=a.replace(q,'ng-bind-html="')),a=o.apply(a),w=a,u=d(a),i.init()}),i.init=function(){l.delay&&angular.isNumber(l.delay)&&(l.delay={show:l.delay,hide:l.delay}),"self"===l.container?x=b:l.container&&(x=m(l.container));var a=l.trigger.split(" ");angular.forEach(a,function(a){"click"===a?b.on("click",i.toggle):"manual"!==a&&(b.on("hover"===a?"mouseenter":"focus",i.enter),b.on("hover"===a?"mouseleave":"blur",i.leave),"hover"!==a&&b.on(p?"touchstart":"mousedown",i.$onFocusElementMouseDown))}),l.show&&r.$$postDigest(function(){"focus"===l.trigger?b[0].focus():i.show()})},i.destroy=function(){for(var a=l.trigger.split(" "),c=a.length;c--;){var d=a[c];"click"===d?b.off("click",i.toggle):"manual"!==d&&(b.off("hover"===d?"mouseenter":"focus",i.enter),b.off("hover"===d?"mouseleave":"blur",i.leave),"hover"!==d&&b.off(p?"touchstart":"mousedown",i.$onFocusElementMouseDown))}v&&(v.remove(),v=null),r.$destroy()},i.enter=function(){return clearTimeout(s),t="in",l.delay&&l.delay.show?void(s=setTimeout(function(){"in"===t&&i.show()},l.delay.show)):i.show()},i.show=function(){var a=l.container?x:null,c=l.container?null:b;v&&v.remove(),v=i.$element=u(r,function(){}),v.css({top:"0px",left:"0px",display:"block"}).addClass(l.placement),l.animation&&v.addClass(l.animation),l.type&&v.addClass(l.prefixClass+"-"+l.type),h.enter(v,a,c,function(){}),i.$isShown=r.$isShown=!0,r.$$phase||r.$digest(),k(i.$applyPlacement),l.keyboard&&("focus"!==l.trigger?(i.focus(),v.on("keyup",i.$onKeyUp)):b.on("keyup",i.$onFocusKeyUp))},i.leave=function(){return clearTimeout(s),t="out",l.delay&&l.delay.hide?void(s=setTimeout(function(){"out"===t&&i.hide()},l.delay.hide)):i.hide()},i.hide=function(a){return i.$isShown?(h.leave(v,function(){v=null}),i.$isShown=r.$isShown=!1,r.$$phase||r.$digest(),l.keyboard&&v.off("keyup",i.$onKeyUp),a&&"focus"===l.trigger?b[0].blur():void 0):void 0},i.toggle=function(){i.$isShown?i.leave():i.enter()},i.focus=function(){v[0].focus()},i.$applyPlacement=function(){if(v){var a=f(),b=v.prop("offsetWidth"),c=v.prop("offsetHeight"),d=g(l.placement,a,b,c);d.top+="px",d.left+="px",v.css(d)}},i.$onKeyUp=function(a){27===a.which&&i.hide()},i.$onFocusKeyUp=function(a){27===a.which&&b[0].blur()},i.$onFocusElementMouseDown=function(a){a.preventDefault(),a.stopPropagation(),i.$isShown?b[0].blur():b[0].focus()},i}function m(a,b){return angular.element((b||document).querySelectorAll(a))}function n(a){return e.when(f.get(a)||g.get(a)).then(function(b){return angular.isObject(b)?(f.put(a,b.data),b.data):b})}var o=String.prototype.trim,p="createTouch"in b.document,q=/ng-bind="/gi;return l}]}).directive("bsTooltip",["$window","$location","$sce","$tooltip","$$animateReflow",function(a,b,c,d,e){return{restrict:"EAC",scope:!0,link:function(a,b,f){var g={scope:a};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation","type"],function(a){angular.isDefined(f[a])&&(g[a]=f[a])}),angular.forEach(["title"],function(b){f[b]&&f.$observe(b,function(d,f){a[b]=c.trustAsHtml(d),angular.isDefined(f)&&e(function(){h&&h.$applyPlacement()})})}),f.bsTooltip&&a.$watch(f.bsTooltip,function(b,c){angular.isObject(b)?angular.extend(a,b):a.content=b,angular.isDefined(c)&&e(function(){h&&h.$applyPlacement()})},!0);var h=d(b,g);a.$on("$destroy",function(){h.destroy(),g=null,h=null})}}}]),angular.module("mgcrea.ngStrap.tooltip").run(["$templateCache",function(a){a.put("tooltip/tooltip.tpl.html",'
    ')}]); -//# sourceMappingURL=tooltip.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.tooltip",["ngAnimate","mgcrea.ngStrap.helpers.dimensions"]).provider("$tooltip",function(){var e=this.defaults={animation:"am-fade",prefixClass:"tooltip",prefixEvent:"tooltip",container:!1,placement:"top",template:"tooltip/tooltip.tpl.html",contentTemplate:!1,trigger:"hover focus",keyboard:!1,html:!1,show:!1,title:"",type:"",delay:0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions","$$rAF",function(t,o,n,i,a,r,l,s,c,u){function p(t,i){function a(){return"body"===p.container?c.offset(t[0]):c.position(t[0])}function r(e,t,o,n){var i,a=e.split("-");switch(a[0]){case"right":i={top:t.top+t.height/2-n/2,left:t.left+t.width};break;case"bottom":i={top:t.top+t.height,left:t.left+t.width/2-o/2};break;case"left":i={top:t.top+t.height/2-n/2,left:t.left-o};break;default:i={top:t.top-n,left:t.left+t.width/2-o/2}}if(!a[1])return i;if("top"===a[0]||"bottom"===a[0])switch(a[1]){case"left":i.left=t.left;break;case"right":i.left=t.left+t.width-o}else if("left"===a[0]||"right"===a[0])switch(a[1]){case"top":i.top=t.top-n;break;case"bottom":i.top=t.top+t.height}return i}var s={},p=s.$options=angular.extend({},e,i);s.$promise=h(p.template);var m=s.$scope=p.scope&&p.scope.$new()||o.$new();p.delay&&angular.isString(p.delay)&&(p.delay=parseFloat(p.delay)),p.title&&(s.$scope.title=p.title),m.$hide=function(){m.$$postDigest(function(){s.hide()})},m.$show=function(){m.$$postDigest(function(){s.show()})},m.$toggle=function(){m.$$postDigest(function(){s.toggle()})},s.$isShown=m.$isShown=!1;var v,y;p.contentTemplate&&(s.$promise=s.$promise.then(function(e){var t=angular.element(e);return h(p.contentTemplate).then(function(e){var o=f('[ng-bind="content"]',t[0]);return o.length||(o=f('[ng-bind="title"]',t[0])),o.removeAttr("ng-bind").html(e),t[0].outerHTML})}));var w,b,k,S;return s.$promise.then(function(e){angular.isObject(e)&&(e=e.data),p.html&&(e=e.replace(g,'ng-bind-html="')),e=d.apply(e),k=e,w=n(e),s.init()}),s.init=function(){p.delay&&angular.isNumber(p.delay)&&(p.delay={show:p.delay,hide:p.delay}),"self"===p.container?S=t:p.container&&(S=f(p.container));var e=p.trigger.split(" ");angular.forEach(e,function(e){"click"===e?t.on("click",s.toggle):"manual"!==e&&(t.on("hover"===e?"mouseenter":"focus",s.enter),t.on("hover"===e?"mouseleave":"blur",s.leave),"hover"!==e&&t.on($?"touchstart":"mousedown",s.$onFocusElementMouseDown))}),p.show&&m.$$postDigest(function(){"focus"===p.trigger?t[0].focus():s.show()})},s.destroy=function(){for(var e=p.trigger.split(" "),o=e.length;o--;){var n=e[o];"click"===n?t.off("click",s.toggle):"manual"!==n&&(t.off("hover"===n?"mouseenter":"focus",s.enter),t.off("hover"===n?"mouseleave":"blur",s.leave),"hover"!==n&&t.off($?"touchstart":"mousedown",s.$onFocusElementMouseDown))}b&&(b.remove(),b=null),m.$destroy()},s.enter=function(){return clearTimeout(v),y="in",p.delay&&p.delay.show?void(v=setTimeout(function(){"in"===y&&s.show()},p.delay.show)):s.show()},s.show=function(){m.$emit(p.prefixEvent+".show.before",s);var e=p.container?S:null,o=p.container?null:t;b&&b.remove(),b=s.$element=w(m,function(){}),b.css({top:"0px",left:"0px",display:"block"}).addClass(p.placement),p.animation&&b.addClass(p.animation),p.type&&b.addClass(p.prefixClass+"-"+p.type),l.enter(b,e,o,function(){m.$emit(p.prefixEvent+".show",s)}),s.$isShown=m.$isShown=!0,m.$$phase||m.$root.$$phase||m.$digest(),u(s.$applyPlacement),p.keyboard&&("focus"!==p.trigger?(s.focus(),b.on("keyup",s.$onKeyUp)):t.on("keyup",s.$onFocusKeyUp))},s.leave=function(){return clearTimeout(v),y="out",p.delay&&p.delay.hide?void(v=setTimeout(function(){"out"===y&&s.hide()},p.delay.hide)):s.hide()},s.hide=function(e){return s.$isShown?(m.$emit(p.prefixEvent+".hide.before",s),l.leave(b,function(){m.$emit(p.prefixEvent+".hide",s)}),s.$isShown=m.$isShown=!1,m.$$phase||m.$root.$$phase||m.$digest(),p.keyboard&&null!==b&&b.off("keyup",s.$onKeyUp),e&&"focus"===p.trigger?t[0].blur():void 0):void 0},s.toggle=function(){s.$isShown?s.leave():s.enter()},s.focus=function(){b[0].focus()},s.$applyPlacement=function(){if(b){var e=a(),t=b.prop("offsetWidth"),o=b.prop("offsetHeight"),n=r(p.placement,e,t,o);n.top+="px",n.left+="px",b.css(n)}},s.$onKeyUp=function(e){27===e.which&&s.hide()},s.$onFocusKeyUp=function(e){27===e.which&&t[0].blur()},s.$onFocusElementMouseDown=function(e){e.preventDefault(),e.stopPropagation(),s.$isShown?t[0].blur():t[0].focus()},s}function f(e,t){return angular.element((t||document).querySelectorAll(e))}function h(e){return i.when(a.get(e)||r.get(e)).then(function(t){return angular.isObject(t)?(a.put(e,t.data),t.data):t})}var d=String.prototype.trim,$="createTouch"in t.document,g=/ng-bind="/gi;return p}]}).directive("bsTooltip",["$window","$location","$sce","$tooltip","$$rAF",function(e,t,o,n,i){return{restrict:"EAC",scope:!0,link:function(e,t,a){var r={scope:e};angular.forEach(["template","contentTemplate","placement","container","delay","trigger","keyboard","html","animation","type"],function(e){angular.isDefined(a[e])&&(r[e]=a[e])}),angular.forEach(["title"],function(t){a[t]&&a.$observe(t,function(n,a){e[t]=o.trustAsHtml(n),angular.isDefined(a)&&i(function(){l&&l.$applyPlacement()})})}),a.bsTooltip&&e.$watch(a.bsTooltip,function(t,o){angular.isObject(t)?angular.extend(e,t):e.title=t,angular.isDefined(o)&&i(function(){l&&l.$applyPlacement()})},!0);var l=n(t,r);e.$on("$destroy",function(){l.destroy(),r=null,l=null})}}}]); \ No newline at end of file diff --git a/dist/modules/tooltip.min.js.map b/dist/modules/tooltip.min.js.map new file mode 100644 index 000000000..a2e56c380 --- /dev/null +++ b/dist/modules/tooltip.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"tooltip.min.js.map","sources":["tooltip.min.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","prefixEvent","container","placement","template","contentTemplate","trigger","keyboard","html","show","title","type","delay","$get","$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions","$$rAF","TooltipFactory","element","config","getPosition","options","offset","position","getCalculatedOffset","actualWidth","actualHeight","split","top","height","left","width","$tooltip","$options","extend","$promise","fetchTemplate","scope","$scope","$new","isString","parseFloat","$hide","$$postDigest","hide","$show","$toggle","toggle","$isShown","timeout","hoverState","then","templateEl","contentEl","findElement","length","removeAttr","outerHTML","tipLinker","tipElement","tipTemplate","tipContainer","isObject","data","replace","htmlReplaceRegExp","trim","apply","init","isNumber","triggers","forEach","on","enter","leave","isTouch","$onFocusElementMouseDown","focus","destroy","i","off","remove","$destroy","clearTimeout","setTimeout","$emit","parent","after","$element","css","display","addClass","$$phase","$root","$digest","$applyPlacement","$onKeyUp","$onFocusKeyUp","blur","elementPosition","tipWidth","prop","tipHeight","tipPosition","evt","which","preventDefault","stopPropagation","query","document","querySelectorAll","when","get","res","put","String","prototype","directive","$location","$sce","restrict","link","attr","key","isDefined","$observe","newValue","oldValue","trustAsHtml","tooltip","bsTooltip","$watch","$on"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/tooltip.min.map b/dist/modules/tooltip.min.map deleted file mode 100644 index b65f47617..000000000 --- a/dist/modules/tooltip.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tooltip.min.js","sources":["tooltip.js","tooltip.tpl.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","container","placement","template","contentTemplate","trigger","keyboard","html","show","title","type","delay","$get","$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","dimensions","$$animateReflow","TooltipFactory","element","config","getPosition","options","offset","position","getCalculatedOffset","actualWidth","actualHeight","split","top","height","left","width","$tooltip","$options","extend","$promise","fetchTemplate","scope","$scope","$new","isString","parseFloat","$hide","$$postDigest","hide","$show","$toggle","toggle","$isShown","timeout","hoverState","then","templateEl","findElement","removeAttr","outerHTML","tipLinker","tipElement","tipTemplate","tipContainer","isObject","data","replace","htmlReplaceRegExp","trim","apply","init","isNumber","triggers","forEach","on","enter","leave","isTouch","$onFocusElementMouseDown","focus","destroy","i","length","off","remove","$destroy","clearTimeout","setTimeout","parent","after","$element","css","display","addClass","$$phase","$digest","$applyPlacement","$onKeyUp","$onFocusKeyUp","blur","elementPosition","tipWidth","prop","tipHeight","tipPosition","evt","which","preventDefault","stopPropagation","query","document","querySelectorAll","when","get","res","put","String","prototype","directive","$location","$sce","restrict","link","attr","key","isDefined","$observe","newValue","oldValue","trustAsHtml","tooltip","bsTooltip","$watch","content","$on","run"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/tooltip.tpl.js b/dist/modules/tooltip.tpl.js index d077b989f..ddc07a77f 100644 --- a/dist/modules/tooltip.tpl.js +++ b/dist/modules/tooltip.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('tooltip/tooltip.tpl.html', - "
    " - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.tooltip').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('tooltip/tooltip.tpl.html', '
    '); + } +]); \ No newline at end of file diff --git a/dist/modules/tooltip.tpl.min.js b/dist/modules/tooltip.tpl.min.js index 9cc4bd1d2..e63bca79c 100644 --- a/dist/modules/tooltip.tpl.min.js +++ b/dist/modules/tooltip.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.tooltip").run(["$templateCache",function(a){"use strict";a.put("tooltip/tooltip.tpl.html",'
    ')}]); -//# sourceMappingURL=tooltip.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.tooltip").run(["$templateCache",function(t){t.put("tooltip/tooltip.tpl.html",'
    ')}]); \ No newline at end of file diff --git a/dist/modules/tooltip.tpl.min.map b/dist/modules/tooltip.tpl.min.map deleted file mode 100644 index 1c4c8e5c8..000000000 --- a/dist/modules/tooltip.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tooltip.tpl.min.js","sources":["tooltip.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,0BAA0BC,KAAK,iBAAkB,SAASC,GACvE,YAEAA,GAAeC,IAAI,2BACjB"} \ No newline at end of file diff --git a/dist/modules/typeahead.js b/dist/modules/typeahead.js index 61138c047..dff3d234c 100644 --- a/dist/modules/typeahead.js +++ b/dist/modules/typeahead.js @@ -1,6 +1,6 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT @@ -87,6 +87,18 @@ angular.module('mgcrea.ngStrap.typeahead', [ // minLength support return scope.$matches.length && angular.isString(controller.$viewValue) && controller.$viewValue.length >= options.minLength; }; + $typeahead.$getIndex = function (value) { + var l = scope.$matches.length, i = l; + if (!l) + return; + for (i = l; i--;) { + if (scope.$matches[i].value === value) + break; + } + if (i < 0) + return; + return i; + }; $typeahead.$onMouseDown = function (evt) { // Prevent blur on mousedown evt.preventDefault(); @@ -98,7 +110,7 @@ angular.module('mgcrea.ngStrap.typeahead', [ evt.preventDefault(); evt.stopPropagation(); // Select with enter - if (evt.keyCode === 13) { + if (evt.keyCode === 13 && scope.$matches.length) { return $typeahead.select(scope.$activeIndex); } // Navigate with keyboard @@ -179,15 +191,29 @@ angular.module('mgcrea.ngStrap.typeahead', [ var parsedOptions = $parseOptions(ngOptions); // Initialize typeahead var typeahead = $typeahead(element, options); + // if(!dump) var dump = console.error.bind(console); // Watch model for changes scope.$watch(attr.ngModel, function (newValue, oldValue) { + scope.$modelValue = newValue; + //Set model value on the scope to custom templates can use it. parsedOptions.valuesFn(scope, controller).then(function (values) { if (values.length > limit) values = values.slice(0, limit); // if(matches.length === 1 && matches[0].value === newValue) return; typeahead.update(values); + // Queue a new rendering that will leverage collection loading + controller.$render(); }); }); + // Model rendering in view + controller.$render = function () { + // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue); + if (controller.$isEmpty(controller.$viewValue)) + return element.val(''); + var index = typeahead.$getIndex(controller.$modelValue); + var selected = angular.isDefined(index) ? typeahead.$scope.$matches[index].label : controller.$viewValue; + element.val(selected.replace(/<(?:.|\n)*?>/gm, '').trim()); + }; // Garbage collection scope.$on('$destroy', function () { typeahead.destroy(); diff --git a/dist/modules/typeahead.min.js b/dist/modules/typeahead.min.js index f17316ece..4a33a8fb1 100644 --- a/dist/modules/typeahead.min.js +++ b/dist/modules/typeahead.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -"use strict";angular.module("mgcrea.ngStrap.typeahead",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$typeahead",function(){var a=this.defaults={animation:"am-fade",prefixClass:"typeahead",placement:"bottom-left",template:"typeahead/typeahead.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,minLength:1,filter:"filter",limit:6};this.$get=["$window","$rootScope","$tooltip",function(b,c,d){function e(b,c){var e={},f=angular.extend({},a,c),g=f.controller;e=d(b,f);var h=c.scope,i=e.$scope;i.$matches=[],i.$activeIndex=0,i.$activate=function(a){i.$$postDigest(function(){e.activate(a)})},i.$select=function(a){i.$$postDigest(function(){e.select(a)})},i.$isVisible=function(){return e.$isVisible()},e.update=function(a){i.$matches=a,i.$activeIndex>=a.length&&(i.$activeIndex=0)},e.activate=function(a){i.$activeIndex=a},e.select=function(a){var c=i.$matches[a].value;g&&(g.$setViewValue(c),g.$render(),h&&h.$digest()),"focus"===f.trigger?b[0].blur():e.$isShown&&e.hide(),i.$activeIndex=0,i.$emit("$typeahead.select",c,a)},e.$isVisible=function(){return f.minLength&&g?i.$matches.length&&angular.isString(g.$viewValue)&&g.$viewValue.length>=f.minLength:!!i.$matches.length},e.$onMouseDown=function(a){a.preventDefault(),a.stopPropagation()},e.$onKeyDown=function(a){if(/(38|40|13)/.test(a.keyCode)){if(a.preventDefault(),a.stopPropagation(),13===a.keyCode)return e.select(i.$activeIndex);38===a.keyCode&&i.$activeIndex>0?i.$activeIndex--:40===a.keyCode&&i.$activeIndexj&&(a=a.slice(0,j)),m.update(a)})}),a.$on("$destroy",function(){m.destroy(),h=null,m=null})}}}]),angular.module("mgcrea.ngStrap.typeahead").run(["$templateCache",function(a){a.put("typeahead/typeahead.tpl.html",'')}]); -//# sourceMappingURL=typeahead.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.typeahead",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$typeahead",function(){var e=this.defaults={animation:"am-fade",prefixClass:"typeahead",placement:"bottom-left",template:"typeahead/typeahead.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,minLength:1,filter:"filter",limit:6};this.$get=["$window","$rootScope","$tooltip",function(t,n,a){function i(t,n){var i={},o=angular.extend({},e,n),r=o.controller;i=a(t,o);var l=n.scope,c=i.$scope;c.$matches=[],c.$activeIndex=0,c.$activate=function(e){c.$$postDigest(function(){i.activate(e)})},c.$select=function(e){c.$$postDigest(function(){i.select(e)})},c.$isVisible=function(){return i.$isVisible()},i.update=function(e){c.$matches=e,c.$activeIndex>=e.length&&(c.$activeIndex=0)},i.activate=function(e){c.$activeIndex=e},i.select=function(e){var n=c.$matches[e].value;r&&(r.$setViewValue(n),r.$render(),l&&l.$digest()),"focus"===o.trigger?t[0].blur():i.$isShown&&i.hide(),c.$activeIndex=0,c.$emit("$typeahead.select",n,e)},i.$isVisible=function(){return o.minLength&&r?c.$matches.length&&angular.isString(r.$viewValue)&&r.$viewValue.length>=o.minLength:!!c.$matches.length},i.$getIndex=function(e){var t=c.$matches.length,n=t;if(t){for(n=t;n--&&c.$matches[n].value!==e;);if(!(0>n))return n}},i.$onMouseDown=function(e){e.preventDefault(),e.stopPropagation()},i.$onKeyDown=function(e){if(/(38|40|13)/.test(e.keyCode)){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode&&c.$matches.length)return i.select(c.$activeIndex);38===e.keyCode&&c.$activeIndex>0?c.$activeIndex--:40===e.keyCode&&c.$activeIndexu&&(e=e.slice(0,u)),d.update(e),r.$render()})}),r.$render=function(){if(r.$isEmpty(r.$viewValue))return t.val("");var e=d.$getIndex(r.$modelValue),n=angular.isDefined(e)?d.$scope.$matches[e].label:r.$viewValue;t.val(n.replace(/<(?:.|\n)*?>/gm,"").trim())},e.$on("$destroy",function(){d.destroy(),l=null,d=null})}}}]); \ No newline at end of file diff --git a/dist/modules/typeahead.min.js.map b/dist/modules/typeahead.min.js.map new file mode 100644 index 000000000..7a07125ee --- /dev/null +++ b/dist/modules/typeahead.min.js.map @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.0.0 - 2014-04-07 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (olivier@mg-crea.com) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +{"version":3,"file":"typeahead.min.js.map","sources":["typeahead.min.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","minLength","filter","limit","$get","$window","$rootScope","$tooltip","TypeaheadFactory","element","config","$typeahead","options","extend","controller","parentScope","scope","$scope","$matches","$activeIndex","$activate","index","$$postDigest","activate","$select","select","$isVisible","update","matches","length","value","$setViewValue","$render","$digest","blur","$isShown","hide","$emit","isString","$viewValue","$getIndex","l","i","$onMouseDown","evt","preventDefault","stopPropagation","$onKeyDown","test","keyCode","isUndefined","show","setTimeout","$element","on","off","document","body","directive","$parse","$q","$parseOptions","restrict","require","link","attr","forEach","key","isDefined","ngOptions","parsedOptions","typeahead","$watch","ngModel","newValue","$modelValue","valuesFn","then","values","slice","$isEmpty","val","selected","label","replace","trim","$on","destroy"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/typeahead.min.map b/dist/modules/typeahead.min.map deleted file mode 100644 index 916717c54..000000000 --- a/dist/modules/typeahead.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"typeahead.min.js","sources":["typeahead.js","typeahead.tpl.js"],"names":["angular","module","provider","defaults","this","animation","prefixClass","placement","template","trigger","container","keyboard","html","delay","minLength","filter","limit","$get","$window","$rootScope","$tooltip","TypeaheadFactory","element","config","$typeahead","options","extend","controller","parentScope","scope","$scope","$matches","$activeIndex","$activate","index","$$postDigest","activate","$select","select","$isVisible","update","matches","length","value","$setViewValue","$render","$digest","blur","$isShown","hide","$emit","isString","$viewValue","$onMouseDown","evt","preventDefault","stopPropagation","$onKeyDown","test","keyCode","isUndefined","show","setTimeout","$element","on","off","document","body","directive","$parse","$q","$parseOptions","restrict","require","link","attr","forEach","key","isDefined","ngOptions","parsedOptions","typeahead","$watch","ngModel","valuesFn","then","values","slice","$on","destroy","run","$templateCache","put"],"mappings":"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"} \ No newline at end of file diff --git a/dist/modules/typeahead.tpl.js b/dist/modules/typeahead.tpl.js index 4bb6f6677..ab3a35788 100644 --- a/dist/modules/typeahead.tpl.js +++ b/dist/modules/typeahead.tpl.js @@ -1,15 +1,14 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module('mgcrea.ngStrap.typeahead').run(['$templateCache', function($templateCache) { - 'use strict'; - - $templateCache.put('typeahead/typeahead.tpl.html', - "
    " - ); - -}]); +'use strict'; +angular.module('mgcrea.ngStrap.typeahead').run([ + '$templateCache', + function ($templateCache) { + $templateCache.put('typeahead/typeahead.tpl.html', ''); + } +]); \ No newline at end of file diff --git a/dist/modules/typeahead.tpl.min.js b/dist/modules/typeahead.tpl.min.js index 30ccc21c1..715fd25c4 100644 --- a/dist/modules/typeahead.tpl.min.js +++ b/dist/modules/typeahead.tpl.min.js @@ -1,9 +1,8 @@ /** * angular-strap - * @version v2.0.0-rc.4 - 2014-03-07 + * @version v2.0.0 - 2014-04-07 * @link http://mgcrea.github.io/angular-strap * @author Olivier Louvignes (olivier@mg-crea.com) * @license MIT License, http://www.opensource.org/licenses/MIT */ -angular.module("mgcrea.ngStrap.typeahead").run(["$templateCache",function(a){"use strict";a.put("typeahead/typeahead.tpl.html",'')}]); -//# sourceMappingURL=typeahead.tpl.min.map \ No newline at end of file +"use strict";angular.module("mgcrea.ngStrap.typeahead").run(["$templateCache",function(e){e.put("typeahead/typeahead.tpl.html",'')}]); \ No newline at end of file diff --git a/dist/modules/typeahead.tpl.min.map b/dist/modules/typeahead.tpl.min.map deleted file mode 100644 index 4c22ebcb1..000000000 --- a/dist/modules/typeahead.tpl.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"typeahead.tpl.min.js","sources":["typeahead.tpl.js"],"names":["angular","module","run","$templateCache","put"],"mappings":"AAAAA,QAAQC,OAAO,4BAA4BC,KAAK,iBAAkB,SAASC,GACzE,YAEAA,GAAeC,IAAI,+BACjB"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 48c52c5eb..a4168fc82 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -121,7 +121,7 @@ gulp.task('scripts:dist', function() { .pipe(concat.header(banner)) .pipe(gulp.dest('dist/modules')) .pipe(rename(function(path) { path.extname = '.min.js'; })) - .pipe(uglify({outSourceMap: false})) + .pipe(uglify({outSourceMap: true})) .pipe(concat.header(banner)) .pipe(gulp.dest('dist/modules')); @@ -140,8 +140,8 @@ gulp.task('templates:dist', function() { .pipe(ngtemplate({module: function(src) { return 'mgcrea.ngStrap.' + src.split('/')[0]; }})) .pipe(ngmin()) .pipe(concat(pkg.name + '.tpl.js', {process: function(src) { return '// Source: ' + this.path + '\n' + (src.trim() + '\n').replace(/(^|\n)[ \t]*('use strict'|"use strict");?\s*/g, '$1'); }})) - .pipe(concat.header('(function(window, document, undefined) {\n\'use strict\';\n')) - .pipe(concat.footer('\n})(window, document);\n')) + .pipe(concat.header('(function(window, document, undefined) {\n\'use strict\';\n\n')) + .pipe(concat.footer('\n\n})(window, document);\n')) .pipe(concat.header(banner)) .pipe(gulp.dest('dist')) .pipe(rename(function(path) { path.extname = '.min.js'; })) diff --git a/package.json b/package.json index cfe7968b1..dfa83ded6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "angular-strap", "description": "AngularStrap - AngularJS directives for Twitter Bootstrap", - "version": "2.0.0-rc.4", + "version": "2.0.0", "keywords": [ "angular", "bootstrap" @@ -26,12 +26,12 @@ "dependencies": {}, "devDependencies": { "gulp": "^3.6.0", - "gulp-autoprefixer": "0.0.6", + "gulp-autoprefixer": "0.0.7", "gulp-changed": "^0.3.0", "gulp-clean": "^0.2.4", "gulp-cleancss": "^0.2.1", "gulp-concat-util": "^0.2.2", - "gulp-connect": "^2.0.2", + "gulp-connect": "^2.0.4", "gulp-htmlmin": "^0.1.2", "gulp-less": "^1.2.3", "gulp-nginclude": "^0.4.3", @@ -43,7 +43,7 @@ "gulp-usemin": "^0.3.3", "gulp-util": "^2.2.14", "gulp-watch": "^0.5.3", - "karma": "^0.12.3", + "karma": "^0.12.4", "karma-coverage": "^0.2.1", "karma-jasmine": "^0.1.5", "karma-phantomjs-launcher": "^0.1.4"