{"version":3,"sources":["_modules.js","alert/alert.js","bindHtml/bindHtml.js","accordion/accordion.js","buttons/buttons.js","carousel/carousel.js","collapse/collapse.js","datepicker/datepicker.js","dropdownToggle/dropdownToggle.js","pagination/pagination.js","modal/modal.js","position/position.js","popover/popover.js","progressbar/progressbar.js","rating/rating.js","tabs/tabs.js","timepicker/timepicker.js","tooltip/tooltip.js","transition/transition.js","typeahead/typeahead.js","ui-bootstrap-tpls.js"],"names":["angular","module","controller","$scope","$attrs","closeable","directive","restrict","templateUrl","transclude","replace","scope","type","close","element","attr","addClass","data","bindHtmlUnsafe","$watch","value","html","constant","closeOthers","accordionConfig","this","groups","openGroup","isDefined","$eval","forEach","group","isOpen","addGroup","groupScope","that","push","$on","event","removeGroup","index","indexOf","splice","$parse","require","heading","setHeading","link","attrs","accordionCtrl","getIsOpen","setIsOpen","assign","$parent","template","compile","accordionGroupCtrl","accordionTransclude","append","activeClass","toggleEvent","buttonConfig","ctrls","buttonsCtrl","ngModelCtrl","$render","toggleClass","equals","$modelValue","btnRadio","bind","hasClass","$apply","$setViewValue","getTrueValue","getCheckboxValue","btnCheckboxTrue","getFalseValue","btnCheckboxFalse","attributeValue","defaultValue","val","$timeout","$transition","$q","restartTimer","resetTimer","interval","isNaN","currentTimeout","timerFn","cancel","isPlaying","next","pause","self","slides","currentIndex","currentSlide","destroyed","select","nextSlide","direction","goNext","isString","noTransition","$element","offsetWidth","slide","extend","entering","leaving","active","$currentTransition","current","then","transitionDone","nextIndex","undefined","indexOfSlide","newIndex","length","prev","isActive","play","noPause","addSlide","removeSlide","carouselCtrl","getActive","setActive","lastValue","parentActive","doTransition","change","newTransitionDone","currentTransition","newTransition","expand","initialAnimSkip","expandDone","removeClass","height","scrollHeight","css","collapse","collapseDone","shouldCollapse","dayFormat","monthFormat","yearFormat","dayHeaderFormat","dayTitleFormat","monthTitleFormat","showWeeks","startingDay","yearRange","minDate","maxDate","dateFilter","dtConfig","getValue","getDaysInMonth","year","month","Date","getDate","getDates","startDate","n","dates","Array","i","setDate","makeDate","date","format","isSelected","isSecondary","label","selected","secondary","day","dayHeader","dayTitle","monthTitle","modes","name","getVisibleDates","getFullYear","getMonth","firstDayOfMonth","difference","getDay","numDisplayedFromPreviousMonth","firstDate","numDates","days","labels","dt","j","objects","title","compare","date1","date2","split","step","months","years","startYear","parseInt","join","isDisabled","mode","currentMode","dateDisabled","datepickerConfig","$log","updateShowWeekNumbers","showWeekNumbers","arr","size","arrays","refill","updateSelected","valid","ngModel","error","$setValidity","datepickerCtrl","obj","disabled","rows","setMode","getISO8601WeekNumber","checkDate","time","getTime","setMonth","Math","floor","round","min","max","setFullYear","move","toggleMode","getWeekNumber","row","dateFormat","currentText","toggleWeeksText","clearText","closeText","closeOnDateSelection","appendToBody","showButtonBar","$compile","$document","$position","datepickerPopupConfig","originalScope","setOpen","parseDate","viewValue","isDate","addWatchableAttribute","attribute","scopeProperty","datepickerAttribute","datepickerEl","updatePosition","position","offset","top","prop","$new","datepickerAppendToBody","$observe","$popup","remove","$destroy","text","documentClickBind","target","elementFocusBind","popupEl","ng-model","ng-change","children","datepickerOptions","$parsers","unshift","dateSelection","$viewValue","documentBindingInitialized","elementFocusInitialized","unbind","focus","today","clear","find","after","preventDefault","stopPropagation","$location","openElement","closeMenu","noop","parent","elementWasOpen","$interpolate","setNumPages","numPages","init","defaultItemsPerPage","itemsPerPage","totalPages","calculateTotalPages","noPrevious","page","noNext","ceil","totalItems","getAttributeValue","interpolate","render","pages","getPages","selectPage","onSelectPage","boundaryLinks","directionLinks","firstText","previousText","nextText","lastText","rotate","config","paginationCtrl","makePage","number","maxSize","currentPage","startPage","endPage","isMaxSized","previousPageSet","nextPageSet","previousPage","nextPage","firstPage","lastPage","align","isPrevious","isNext","previous","factory","createNew","stack","add","key","get","keys","idx","removeTop","animate","$modalStack","windowClass","evt","modal","getTop","backdrop","currentTarget","dismiss","$rootScope","$$stackedMap","backdropIndex","topBackdropIndex","opened","openedWindows","removeModalWindow","modalInstance","body","eq","modalWindow","removeAfterAnimate","modalDomEl","modalScope","checkRemoveBackdrop","OPENED_MODAL_CLASS","backdropDomEl","backdropScopeRef","backdropScope","domEl","emulateTime","done","afterAnimating","transitionEndEventName","timeout","newBackdropIndex","which","keyboard","open","deferred","currBackdropIndex","angularDomEl","content","result","resolve","reason","reject","dismissAll","topModal","provider","$modalProvider","options","$get","$injector","$http","$templateCache","$controller","getTemplatePromise","when","cache","getResolvePromises","resolves","promisesArr","isFunction","isArray","invoke","$modal","modalOptions","modalResultDeferred","defer","modalOpenedDeferred","promise","Error","templateAndResolvePromise","all","concat","tplAndVars","$close","$dismiss","ctrlInstance","ctrlLocals","resolveIter","$modalInstance","$window","getStyle","el","cssprop","currentStyle","getComputedStyle","style","isStaticPositioned","parentOffsetEl","docDomEl","offsetParent","elBCR","offsetParentBCR","left","offsetParentEl","clientTop","scrollTop","clientLeft","scrollLeft","boundingClientRect","getBoundingClientRect","width","pageYOffset","documentElement","pageXOffset","placement","animation","$tooltip","progressConfig","bars","addBar","bar","oldValue","$index","update","removeBar","newValue","percent","getPercentage","transition","progressCtrl","stateOn","stateOff","ratingConfig","maxRange","createRateObjects","states","defaultOptions","range","ratingStates","copy","rate","readonly","enter","onHover","reset","onLeave","ctrl","tabs","tab","addTab","removeTab","newActiveIndex","vertical","justified","onSelect","onDeselect","elm","tabsetCtrl","oldVal","$transcludeFn","tabCtrl","isTabHeading","node","tagName","hasAttribute","toLowerCase","tabContentTransclude","contents","headingElement","hourStep","minuteStep","showMeridian","meridians","readonlyInput","mousewheel","timepickerConfig","$locale","getHoursFromTemplate","hours","meridian","getMinutesFromTemplate","minutes","pad","toString","refresh","keyboardChange","makeValid","updateTemplate","invalidHours","invalidMinutes","getHours","getMinutes","addMinutes","setHours","DATETIME_FORMATS","AMPMS","$error","inputs","hoursInputEl","minutesInputEl","isScrollingUp","e","originalEvent","delta","wheelDelta","deltaY","detail","incrementHours","decrementHours","incrementMinutes","decrementMinutes","updateHours","updateMinutes","invalidate","validHours","setMinutes","toggleMeridian","snake_case","regexp","separator","letter","pos","popupDelay","triggerMap","mouseenter","click","globalOptions","setTriggers","triggers","prefix","defaultTriggerShow","getTriggers","trigger","show","hide","directiveName","startSym","startSymbol","endSym","endSymbol","tElem","tAttrs","tooltipLinker","toggleTooltipBind","tt_isOpen","hideTooltipBind","showTooltipBind","hasEnableExp","tt_popupDelay","popupTimeout","reposition","tt_content","createTooltip","transitionTimeout","tooltip","display","positionTooltip","$digest","tt_animation","removeTooltip","hasRegisteredTriggers","ttWidth","ttHeight","ttPosition","tt_placement","tt_title","delay","unregisterTriggers","findEndEventName","endEventNames","transElement","endEventName","transitionEndHandler","isObject","document","createElement","transitionEndEventNames","WebkitTransition","MozTransition","OTransition","animationEndEventNames","animationEndEventName","TYPEAHEAD_REGEXP","parse","input","match","itemName","source","viewMapper","modelMapper","typeaheadParser","HOT_KEYS","modelCtrl","hasFocus","minSearch","typeaheadMinLength","waitTime","typeaheadWaitMs","isEditable","typeaheadEditable","isLoadingSetter","typeaheadLoading","onSelectCallback","typeaheadOnSelect","inputFormatter","typeaheadInputFormatter","typeaheadAppendToBody","$setModelValue","parserResult","typeahead","popUpEl","matches","query","typeaheadTemplateUrl","resetMatches","activeIdx","getMatchesAsync","inputValue","locals","model","timeoutPromise","$formatters","modelValue","candidateViewValue","emptyViewValue","item","$item","$model","$label","dismissClickHandler","matchIdx","selectActive","selectMatch","tplUrl","success","tplContent","replaceWith","trim","filter","escapeRegexp","queryToEscape","matchItem","RegExp","run","put"],"mappings":"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","file":"angular-ui-bootstrap-4f62e142.js","sourcesContent":["/*\r\n * angular-ui-bootstrap\r\n * http://angular-ui.github.io/bootstrap/\r\n\r\n * Version: 0.10.0 - 2014-01-13\r\n * License: MIT\r\n */\r\nangular.module(\"ui.bootstrap\", [\r\n \"ui.bootstrap.transition\",\r\n \"ui.bootstrap.collapse\",\r\n \"ui.bootstrap.accordion\",\r\n \"ui.bootstrap.alert\",\r\n \"ui.bootstrap.bindHtml\",\r\n \"ui.bootstrap.buttons\",\r\n \"ui.bootstrap.carousel\",\r\n \"ui.bootstrap.position\",\r\n \"ui.bootstrap.datepicker\",\r\n \"ui.bootstrap.dropdownToggle\",\r\n \"ui.bootstrap.modal\",\r\n \"ui.bootstrap.pagination\",\r\n \"ui.bootstrap.tooltip\",\r\n \"ui.bootstrap.popover\",\r\n \"ui.bootstrap.progressbar\",\r\n \"ui.bootstrap.rating\",\r\n \"ui.bootstrap.tabs\",\r\n \"ui.bootstrap.timepicker\",\r\n \"ui.bootstrap.typeahead\"\r\n]);\r\n","angular.module(\"ui.bootstrap.alert\", [])\r\n\r\n.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) {\r\n $scope.closeable = 'close' in $attrs;\r\n}])\r\n\r\n.directive('alert', function () {\r\n return {\r\n restrict:'EA',\r\n controller:'AlertController',\r\n templateUrl:'template/alert/alert.html',\r\n transclude:true,\r\n replace:true,\r\n scope: {\r\n type: '=',\r\n close: '&'\r\n }\r\n };\r\n});\r\n","angular.module('ui.bootstrap.bindHtml', [])\r\n\r\n .directive('bindHtmlUnsafe', function () {\r\n return function (scope, element, attr) {\r\n element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe);\r\n scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) {\r\n element.html(value || '');\r\n });\r\n };\r\n });","angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])\r\n\r\n.constant('accordionConfig', {\r\n closeOthers: true\r\n})\r\n\r\n.controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) {\r\n\r\n // This array keeps track of the accordion groups\r\n this.groups = [];\r\n\r\n // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\r\n this.closeOthers = function(openGroup) {\r\n var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;\r\n if ( closeOthers ) {\r\n angular.forEach(this.groups, function (group) {\r\n if ( group !== openGroup ) {\r\n group.isOpen = false;\r\n }\r\n });\r\n }\r\n };\r\n \r\n // This is called from the accordion-group directive to add itself to the accordion\r\n this.addGroup = function(groupScope) {\r\n var that = this;\r\n this.groups.push(groupScope);\r\n\r\n groupScope.$on('$destroy', function (event) {\r\n that.removeGroup(groupScope);\r\n });\r\n };\r\n\r\n // This is called from the accordion-group directive when to remove itself\r\n this.removeGroup = function(group) {\r\n var index = this.groups.indexOf(group);\r\n if ( index !== -1 ) {\r\n this.groups.splice(this.groups.indexOf(group), 1);\r\n }\r\n };\r\n\r\n}])\r\n\r\n// The accordion directive simply sets up the directive controller\r\n// and adds an accordion CSS class to itself element.\r\n.directive('accordion', function () {\r\n return {\r\n restrict:'EA',\r\n controller:'AccordionController',\r\n transclude: true,\r\n replace: false,\r\n templateUrl: 'template/accordion/accordion.html'\r\n };\r\n})\r\n\r\n// The accordion-group directive indicates a block of html that will expand and collapse in an accordion\r\n.directive('accordionGroup', ['$parse', function($parse) {\r\n return {\r\n require:'^accordion', // We need this directive to be inside an accordion\r\n restrict:'EA',\r\n transclude:true, // It transcludes the contents of the directive into the template\r\n replace: true, // The element containing the directive will be replaced with the template\r\n templateUrl:'template/accordion/accordion-group.html',\r\n scope:{ heading:'@' }, // Create an isolated scope and interpolate the heading attribute onto this scope\r\n controller: function() {\r\n this.setHeading = function(element) {\r\n this.heading = element;\r\n };\r\n },\r\n link: function(scope, element, attrs, accordionCtrl) {\r\n var getIsOpen, setIsOpen;\r\n\r\n accordionCtrl.addGroup(scope);\r\n\r\n scope.isOpen = false;\r\n \r\n if ( attrs.isOpen ) {\r\n getIsOpen = $parse(attrs.isOpen);\r\n setIsOpen = getIsOpen.assign;\r\n\r\n scope.$parent.$watch(getIsOpen, function(value) {\r\n scope.isOpen = !!value;\r\n });\r\n }\r\n\r\n scope.$watch('isOpen', function(value) {\r\n if ( value ) {\r\n accordionCtrl.closeOthers(scope);\r\n }\r\n if ( setIsOpen ) {\r\n setIsOpen(scope.$parent, value);\r\n }\r\n });\r\n }\r\n };\r\n}])\r\n\r\n// Use accordion-heading below an accordion-group to provide a heading containing HTML\r\n// \r\n// Heading containing HTML - \r\n// \r\n.directive('accordionHeading', function() {\r\n return {\r\n restrict: 'EA',\r\n transclude: true, // Grab the contents to be used as the heading\r\n template: '', // In effect remove this element!\r\n replace: true,\r\n require: '^accordionGroup',\r\n compile: function(element, attr, transclude) {\r\n return function link(scope, element, attr, accordionGroupCtrl) {\r\n // Pass the heading to the accordion-group controller\r\n // so that it can be transcluded into the right place in the template\r\n // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]\r\n accordionGroupCtrl.setHeading(transclude(scope, function() {}));\r\n };\r\n }\r\n };\r\n})\r\n\r\n// Use in the accordion-group template to indicate where you want the heading to be transcluded\r\n// You must provide the property on the accordion-group controller that will hold the transcluded element\r\n//
\r\n//
...
\r\n// ...\r\n//
\r\n.directive('accordionTransclude', function() {\r\n return {\r\n require: '^accordionGroup',\r\n link: function(scope, element, attr, controller) {\r\n scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) {\r\n if ( heading ) {\r\n element.html('');\r\n element.append(heading);\r\n }\r\n });\r\n }\r\n };\r\n});\r\n","angular.module('ui.bootstrap.buttons', [])\r\n\r\n.constant('buttonConfig', {\r\n activeClass: 'active',\r\n toggleEvent: 'click'\r\n})\r\n\r\n.controller('ButtonsController', ['buttonConfig', function(buttonConfig) {\r\n this.activeClass = buttonConfig.activeClass || 'active';\r\n this.toggleEvent = buttonConfig.toggleEvent || 'click';\r\n}])\r\n\r\n.directive('btnRadio', function () {\r\n return {\r\n require: ['btnRadio', 'ngModel'],\r\n controller: 'ButtonsController',\r\n link: function (scope, element, attrs, ctrls) {\r\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n //model -> UI\r\n ngModelCtrl.$render = function () {\r\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));\r\n };\r\n\r\n //ui->model\r\n element.bind(buttonsCtrl.toggleEvent, function () {\r\n if (!element.hasClass(buttonsCtrl.activeClass)) {\r\n scope.$apply(function () {\r\n ngModelCtrl.$setViewValue(scope.$eval(attrs.btnRadio));\r\n ngModelCtrl.$render();\r\n });\r\n }\r\n });\r\n }\r\n };\r\n})\r\n\r\n.directive('btnCheckbox', function () {\r\n return {\r\n require: ['btnCheckbox', 'ngModel'],\r\n controller: 'ButtonsController',\r\n link: function (scope, element, attrs, ctrls) {\r\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n function getTrueValue() {\r\n return getCheckboxValue(attrs.btnCheckboxTrue, true);\r\n }\r\n\r\n function getFalseValue() {\r\n return getCheckboxValue(attrs.btnCheckboxFalse, false);\r\n }\r\n \r\n function getCheckboxValue(attributeValue, defaultValue) {\r\n var val = scope.$eval(attributeValue);\r\n return angular.isDefined(val) ? val : defaultValue;\r\n }\r\n\r\n //model -> UI\r\n ngModelCtrl.$render = function () {\r\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));\r\n };\r\n\r\n //ui->model\r\n element.bind(buttonsCtrl.toggleEvent, function () {\r\n scope.$apply(function () {\r\n ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());\r\n ngModelCtrl.$render();\r\n });\r\n });\r\n }\r\n };\r\n});\r\n","/**\r\n* @ngdoc overview\r\n* @name ui.bootstrap.carousel\r\n*\r\n* @description\r\n* AngularJS version of an image carousel.\r\n*\r\n*/\r\nangular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])\r\n.controller('CarouselController', ['$scope', '$timeout', '$transition', '$q', function ($scope, $timeout, $transition, $q) {\r\n var self = this,\r\n slides = self.slides = [],\r\n currentIndex = -1,\r\n currentTimeout, isPlaying;\r\n self.currentSlide = null;\r\n\r\n var destroyed = false;\r\n /* direction: \"prev\" or \"next\" */\r\n self.select = function(nextSlide, direction) {\r\n var nextIndex = slides.indexOf(nextSlide);\r\n //Decide direction if it's not given\r\n if (direction === undefined) {\r\n direction = nextIndex > currentIndex ? \"next\" : \"prev\";\r\n }\r\n if (nextSlide && nextSlide !== self.currentSlide) {\r\n if ($scope.$currentTransition) {\r\n $scope.$currentTransition.cancel();\r\n //Timeout so ng-class in template has time to fix classes for finished slide\r\n $timeout(goNext);\r\n } else {\r\n goNext();\r\n }\r\n }\r\n function goNext() {\r\n // Scope has been destroyed, stop here.\r\n if (destroyed) { return; }\r\n //If we have a slide to transition from and we have a transition type and we're allowed, go\r\n if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) {\r\n //We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime\r\n nextSlide.$element.addClass(direction);\r\n var reflow = nextSlide.$element[0].offsetWidth; //force reflow\r\n\r\n //Set all other slides to stop doing their stuff for the new transition\r\n angular.forEach(slides, function(slide) {\r\n angular.extend(slide, {direction: '', entering: false, leaving: false, active: false});\r\n });\r\n angular.extend(nextSlide, {direction: direction, active: true, entering: true});\r\n angular.extend(self.currentSlide||{}, {direction: direction, leaving: true});\r\n\r\n $scope.$currentTransition = $transition(nextSlide.$element, {});\r\n //We have to create new pointers inside a closure since next & current will change\r\n (function(next,current) {\r\n $scope.$currentTransition.then(\r\n function(){ transitionDone(next, current); },\r\n function(){ transitionDone(next, current); }\r\n );\r\n }(nextSlide, self.currentSlide));\r\n } else {\r\n transitionDone(nextSlide, self.currentSlide);\r\n }\r\n self.currentSlide = nextSlide;\r\n currentIndex = nextIndex;\r\n //every time you change slides, reset the timer\r\n restartTimer();\r\n }\r\n function transitionDone(next, current) {\r\n angular.extend(next, {direction: '', active: true, leaving: false, entering: false});\r\n angular.extend(current||{}, {direction: '', active: false, leaving: false, entering: false});\r\n $scope.$currentTransition = null;\r\n }\r\n };\r\n $scope.$on('$destroy', function () {\r\n destroyed = true;\r\n });\r\n\r\n /* Allow outside people to call indexOf on slides array */\r\n self.indexOfSlide = function(slide) {\r\n return slides.indexOf(slide);\r\n };\r\n\r\n $scope.next = function() {\r\n var newIndex = (currentIndex + 1) % slides.length;\r\n\r\n //Prevent this user-triggered transition from occurring if there is already one in progress\r\n if (!$scope.$currentTransition) {\r\n return self.select(slides[newIndex], 'next');\r\n }\r\n };\r\n\r\n $scope.prev = function() {\r\n var newIndex = currentIndex - 1 < 0 ? slides.length - 1 : currentIndex - 1;\r\n\r\n //Prevent this user-triggered transition from occurring if there is already one in progress\r\n if (!$scope.$currentTransition) {\r\n return self.select(slides[newIndex], 'prev');\r\n }\r\n };\r\n\r\n $scope.select = function(slide) {\r\n self.select(slide);\r\n };\r\n\r\n $scope.isActive = function(slide) {\r\n return self.currentSlide === slide;\r\n };\r\n\r\n $scope.slides = function() {\r\n return slides;\r\n };\r\n\r\n $scope.$watch('interval', restartTimer);\r\n $scope.$on('$destroy', resetTimer);\r\n\r\n function restartTimer() {\r\n resetTimer();\r\n var interval = +$scope.interval;\r\n if (!isNaN(interval) && interval>=0) {\r\n currentTimeout = $timeout(timerFn, interval);\r\n }\r\n }\r\n\r\n function resetTimer() {\r\n if (currentTimeout) {\r\n $timeout.cancel(currentTimeout);\r\n currentTimeout = null;\r\n }\r\n }\r\n\r\n function timerFn() {\r\n if (isPlaying) {\r\n $scope.next();\r\n restartTimer();\r\n } else {\r\n $scope.pause();\r\n }\r\n }\r\n\r\n $scope.play = function() {\r\n if (!isPlaying) {\r\n isPlaying = true;\r\n restartTimer();\r\n }\r\n };\r\n $scope.pause = function() {\r\n if (!$scope.noPause) {\r\n isPlaying = false;\r\n resetTimer();\r\n }\r\n };\r\n\r\n self.addSlide = function(slide, element) {\r\n slide.$element = element;\r\n slides.push(slide);\r\n //if this is the first slide or the slide is set to active, select it\r\n if(slides.length === 1 || slide.active) {\r\n self.select(slides[slides.length-1]);\r\n if (slides.length == 1) {\r\n $scope.play();\r\n }\r\n } else {\r\n slide.active = false;\r\n }\r\n };\r\n\r\n self.removeSlide = function(slide) {\r\n //get the index of the slide inside the carousel\r\n var index = slides.indexOf(slide);\r\n slides.splice(index, 1);\r\n if (slides.length > 0 && slide.active) {\r\n if (index >= slides.length) {\r\n self.select(slides[index-1]);\r\n } else {\r\n self.select(slides[index]);\r\n }\r\n } else if (currentIndex > index) {\r\n currentIndex--;\r\n }\r\n };\r\n\r\n}])\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ui.bootstrap.carousel.directive:carousel\r\n * @restrict EA\r\n *\r\n * @description\r\n * Carousel is the outer container for a set of image 'slides' to showcase.\r\n *\r\n * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide.\r\n * @param {boolean=} noTransition Whether to disable transitions on the carousel.\r\n * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover).\r\n *\r\n * @example\r\n\r\n \r\n \r\n \r\n \r\n
\r\n

Beautiful!

\r\n
\r\n
\r\n \r\n \r\n
\r\n

D'aww!

\r\n
\r\n
\r\n
\r\n
\r\n \r\n .carousel-indicators {\r\n top: auto;\r\n bottom: 15px;\r\n }\r\n \r\n
\r\n */\r\n.directive('carousel', [function() {\r\n return {\r\n restrict: 'EA',\r\n transclude: true,\r\n replace: true,\r\n controller: 'CarouselController',\r\n require: 'carousel',\r\n templateUrl: 'template/carousel/carousel.html',\r\n scope: {\r\n interval: '=',\r\n noTransition: '=',\r\n noPause: '='\r\n }\r\n };\r\n}])\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ui.bootstrap.carousel.directive:slide\r\n * @restrict EA\r\n *\r\n * @description\r\n * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element.\r\n *\r\n * @param {boolean=} active Model binding, whether or not this slide is currently active.\r\n *\r\n * @example\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n

Slide {{$index}}

\r\n

{{slide.text}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n \r\n {{$index}}: {{slide.text}}\r\n
  • \r\n
\r\n Add Slide\r\n
\r\n
\r\n Interval, in milliseconds: \r\n
Enter a negative number to stop the interval.\r\n
\r\n
\r\n
\r\n
\r\n \r\nfunction CarouselDemoCtrl($scope) {\r\n $scope.myInterval = 5000;\r\n var slides = $scope.slides = [];\r\n $scope.addSlide = function() {\r\n var newWidth = 200 + ((slides.length + (25 * slides.length)) % 150);\r\n slides.push({\r\n image: 'http://placekitten.com/' + newWidth + '/200',\r\n text: ['More','Extra','Lots of','Surplus'][slides.length % 4] + ' '\r\n ['Cats', 'Kittys', 'Felines', 'Cutes'][slides.length % 4]\r\n });\r\n };\r\n for (var i=0; i<4; i++) $scope.addSlide();\r\n}\r\n \r\n \r\n .carousel-indicators {\r\n top: auto;\r\n bottom: 15px;\r\n }\r\n \r\n
\r\n*/\r\n\r\n.directive('slide', ['$parse', function($parse) {\r\n return {\r\n require: '^carousel',\r\n restrict: 'EA',\r\n transclude: true,\r\n replace: true,\r\n templateUrl: 'template/carousel/slide.html',\r\n scope: {\r\n },\r\n link: function (scope, element, attrs, carouselCtrl) {\r\n //Set up optional 'active' = binding\r\n if (attrs.active) {\r\n var getActive = $parse(attrs.active);\r\n var setActive = getActive.assign;\r\n var lastValue = scope.active = getActive(scope.$parent);\r\n scope.$watch(function parentActiveWatch() {\r\n var parentActive = getActive(scope.$parent);\r\n\r\n if (parentActive !== scope.active) {\r\n // we are out of sync and need to copy\r\n if (parentActive !== lastValue) {\r\n // parent changed and it has precedence\r\n lastValue = scope.active = parentActive;\r\n } else {\r\n // if the parent can be assigned then do so\r\n setActive(scope.$parent, parentActive = lastValue = scope.active);\r\n }\r\n }\r\n return parentActive;\r\n });\r\n }\r\n\r\n carouselCtrl.addSlide(scope, element);\r\n //when the scope is destroyed then remove the slide from the current slides array\r\n scope.$on('$destroy', function() {\r\n carouselCtrl.removeSlide(scope);\r\n });\r\n\r\n scope.$watch('active', function(active) {\r\n if (active) {\r\n carouselCtrl.select(scope);\r\n }\r\n });\r\n }\r\n };\r\n}]);\r\n","angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition'])\r\n\r\n .directive('collapse', ['$transition', function ($transition, $timeout) {\r\n\r\n return {\r\n link: function (scope, element, attrs) {\r\n\r\n var initialAnimSkip = true;\r\n var currentTransition;\r\n\r\n function doTransition(change) {\r\n var newTransition = $transition(element, change);\r\n if (currentTransition) {\r\n currentTransition.cancel();\r\n }\r\n currentTransition = newTransition;\r\n newTransition.then(newTransitionDone, newTransitionDone);\r\n return newTransition;\r\n\r\n function newTransitionDone() {\r\n // Make sure it's this transition, otherwise, leave it alone.\r\n if (currentTransition === newTransition) {\r\n currentTransition = undefined;\r\n }\r\n }\r\n }\r\n\r\n function expand() {\r\n if (initialAnimSkip) {\r\n initialAnimSkip = false;\r\n expandDone();\r\n } else {\r\n element.removeClass('collapse').addClass('collapsing');\r\n doTransition({ height: element[0].scrollHeight + 'px' }).then(expandDone);\r\n }\r\n }\r\n\r\n function expandDone() {\r\n element.removeClass('collapsing');\r\n element.addClass('collapse in');\r\n element.css({height: 'auto'});\r\n }\r\n\r\n function collapse() {\r\n if (initialAnimSkip) {\r\n initialAnimSkip = false;\r\n collapseDone();\r\n element.css({height: 0});\r\n } else {\r\n // CSS transitions don't work with height: auto, so we have to manually change the height to a specific value\r\n element.css({ height: element[0].scrollHeight + 'px' });\r\n //trigger reflow so a browser realizes that height was updated from auto to a specific value\r\n var x = element[0].offsetWidth;\r\n\r\n element.removeClass('collapse in').addClass('collapsing');\r\n\r\n doTransition({ height: 0 }).then(collapseDone);\r\n }\r\n }\r\n\r\n function collapseDone() {\r\n element.removeClass('collapsing');\r\n element.addClass('collapse');\r\n }\r\n\r\n scope.$watch(attrs.collapse, function (shouldCollapse) {\r\n if (shouldCollapse) {\r\n collapse();\r\n } else {\r\n expand();\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n","angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.position'])\r\n\r\n.constant('datepickerConfig', {\r\n dayFormat: 'dd',\r\n monthFormat: 'MMMM',\r\n yearFormat: 'yyyy',\r\n dayHeaderFormat: 'EEE',\r\n dayTitleFormat: 'MMMM yyyy',\r\n monthTitleFormat: 'yyyy',\r\n showWeeks: true,\r\n startingDay: 0,\r\n yearRange: 20,\r\n minDate: null,\r\n maxDate: null\r\n})\r\n\r\n.controller('DatepickerController', ['$scope', '$attrs', 'dateFilter', 'datepickerConfig', function($scope, $attrs, dateFilter, dtConfig) {\r\n var format = {\r\n day: getValue($attrs.dayFormat, dtConfig.dayFormat),\r\n month: getValue($attrs.monthFormat, dtConfig.monthFormat),\r\n year: getValue($attrs.yearFormat, dtConfig.yearFormat),\r\n dayHeader: getValue($attrs.dayHeaderFormat, dtConfig.dayHeaderFormat),\r\n dayTitle: getValue($attrs.dayTitleFormat, dtConfig.dayTitleFormat),\r\n monthTitle: getValue($attrs.monthTitleFormat, dtConfig.monthTitleFormat)\r\n },\r\n startingDay = getValue($attrs.startingDay, dtConfig.startingDay),\r\n yearRange = getValue($attrs.yearRange, dtConfig.yearRange);\r\n\r\n this.minDate = dtConfig.minDate ? new Date(dtConfig.minDate) : null;\r\n this.maxDate = dtConfig.maxDate ? new Date(dtConfig.maxDate) : null;\r\n\r\n function getValue(value, defaultValue) {\r\n return angular.isDefined(value) ? $scope.$parent.$eval(value) : defaultValue;\r\n }\r\n\r\n function getDaysInMonth( year, month ) {\r\n return new Date(year, month, 0).getDate();\r\n }\r\n\r\n function getDates(startDate, n) {\r\n var dates = new Array(n);\r\n var current = startDate, i = 0;\r\n while (i < n) {\r\n dates[i++] = new Date(current);\r\n current.setDate( current.getDate() + 1 );\r\n }\r\n return dates;\r\n }\r\n\r\n function makeDate(date, format, isSelected, isSecondary) {\r\n return { date: date, label: dateFilter(date, format), selected: !!isSelected, secondary: !!isSecondary };\r\n }\r\n\r\n this.modes = [\r\n {\r\n name: 'day',\r\n getVisibleDates: function(date, selected) {\r\n var year = date.getFullYear(), month = date.getMonth(), firstDayOfMonth = new Date(year, month, 1);\r\n var difference = startingDay - firstDayOfMonth.getDay(),\r\n numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference,\r\n firstDate = new Date(firstDayOfMonth), numDates = 0;\r\n\r\n if ( numDisplayedFromPreviousMonth > 0 ) {\r\n firstDate.setDate( - numDisplayedFromPreviousMonth + 1 );\r\n numDates += numDisplayedFromPreviousMonth; // Previous\r\n }\r\n numDates += getDaysInMonth(year, month + 1); // Current\r\n numDates += (7 - numDates % 7) % 7; // Next\r\n\r\n var days = getDates(firstDate, numDates), labels = new Array(7);\r\n for (var i = 0; i < numDates; i ++) {\r\n var dt = new Date(days[i]);\r\n days[i] = makeDate(dt, format.day, (selected && selected.getDate() === dt.getDate() && selected.getMonth() === dt.getMonth() && selected.getFullYear() === dt.getFullYear()), dt.getMonth() !== month);\r\n }\r\n for (var j = 0; j < 7; j++) {\r\n labels[j] = dateFilter(days[j].date, format.dayHeader);\r\n }\r\n return { objects: days, title: dateFilter(date, format.dayTitle), labels: labels };\r\n },\r\n compare: function(date1, date2) {\r\n return (new Date( date1.getFullYear(), date1.getMonth(), date1.getDate() ) - new Date( date2.getFullYear(), date2.getMonth(), date2.getDate() ) );\r\n },\r\n split: 7,\r\n step: { months: 1 }\r\n },\r\n {\r\n name: 'month',\r\n getVisibleDates: function(date, selected) {\r\n var months = new Array(12), year = date.getFullYear();\r\n for ( var i = 0; i < 12; i++ ) {\r\n var dt = new Date(year, i, 1);\r\n months[i] = makeDate(dt, format.month, (selected && selected.getMonth() === i && selected.getFullYear() === year));\r\n }\r\n return { objects: months, title: dateFilter(date, format.monthTitle) };\r\n },\r\n compare: function(date1, date2) {\r\n return new Date( date1.getFullYear(), date1.getMonth() ) - new Date( date2.getFullYear(), date2.getMonth() );\r\n },\r\n split: 3,\r\n step: { years: 1 }\r\n },\r\n {\r\n name: 'year',\r\n getVisibleDates: function(date, selected) {\r\n var years = new Array(yearRange), year = date.getFullYear(), startYear = parseInt((year - 1) / yearRange, 10) * yearRange + 1;\r\n for ( var i = 0; i < yearRange; i++ ) {\r\n var dt = new Date(startYear + i, 0, 1);\r\n years[i] = makeDate(dt, format.year, (selected && selected.getFullYear() === dt.getFullYear()));\r\n }\r\n return { objects: years, title: [years[0].label, years[yearRange - 1].label].join(' - ') };\r\n },\r\n compare: function(date1, date2) {\r\n return date1.getFullYear() - date2.getFullYear();\r\n },\r\n split: 5,\r\n step: { years: yearRange }\r\n }\r\n ];\r\n\r\n this.isDisabled = function(date, mode) {\r\n var currentMode = this.modes[mode || 0];\r\n return ((this.minDate && currentMode.compare(date, this.minDate) < 0) || (this.maxDate && currentMode.compare(date, this.maxDate) > 0) || ($scope.dateDisabled && $scope.dateDisabled({date: date, mode: currentMode.name})));\r\n };\r\n}])\r\n\r\n.directive( 'datepicker', ['dateFilter', '$parse', 'datepickerConfig', '$log', function (dateFilter, $parse, datepickerConfig, $log) {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n templateUrl: 'template/datepicker/datepicker.html',\r\n scope: {\r\n dateDisabled: '&'\r\n },\r\n require: ['datepicker', '?^ngModel'],\r\n controller: 'DatepickerController',\r\n link: function(scope, element, attrs, ctrls) {\r\n var datepickerCtrl = ctrls[0], ngModel = ctrls[1];\r\n\r\n if (!ngModel) {\r\n return; // do nothing if no ng-model\r\n }\r\n\r\n // Configuration parameters\r\n var mode = 0, selected = new Date(), showWeeks = datepickerConfig.showWeeks;\r\n\r\n if (attrs.showWeeks) {\r\n scope.$parent.$watch($parse(attrs.showWeeks), function(value) {\r\n showWeeks = !! value;\r\n updateShowWeekNumbers();\r\n });\r\n } else {\r\n updateShowWeekNumbers();\r\n }\r\n\r\n if (attrs.min) {\r\n scope.$parent.$watch($parse(attrs.min), function(value) {\r\n datepickerCtrl.minDate = value ? new Date(value) : null;\r\n refill();\r\n });\r\n }\r\n if (attrs.max) {\r\n scope.$parent.$watch($parse(attrs.max), function(value) {\r\n datepickerCtrl.maxDate = value ? new Date(value) : null;\r\n refill();\r\n });\r\n }\r\n\r\n function updateShowWeekNumbers() {\r\n scope.showWeekNumbers = mode === 0 && showWeeks;\r\n }\r\n\r\n // Split array into smaller arrays\r\n function split(arr, size) {\r\n var arrays = [];\r\n while (arr.length > 0) {\r\n arrays.push(arr.splice(0, size));\r\n }\r\n return arrays;\r\n }\r\n\r\n function refill( updateSelected ) {\r\n var date = null, valid = true;\r\n\r\n if ( ngModel.$modelValue ) {\r\n date = new Date( ngModel.$modelValue );\r\n\r\n if ( isNaN(date) ) {\r\n valid = false;\r\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\r\n } else if ( updateSelected ) {\r\n selected = date;\r\n }\r\n }\r\n ngModel.$setValidity('date', valid);\r\n\r\n var currentMode = datepickerCtrl.modes[mode], data = currentMode.getVisibleDates(selected, date);\r\n angular.forEach(data.objects, function(obj) {\r\n obj.disabled = datepickerCtrl.isDisabled(obj.date, mode);\r\n });\r\n\r\n ngModel.$setValidity('date-disabled', (!date || !datepickerCtrl.isDisabled(date)));\r\n\r\n scope.rows = split(data.objects, currentMode.split);\r\n scope.labels = data.labels || [];\r\n scope.title = data.title;\r\n }\r\n\r\n function setMode(value) {\r\n mode = value;\r\n updateShowWeekNumbers();\r\n refill();\r\n }\r\n\r\n ngModel.$render = function() {\r\n refill( true );\r\n };\r\n\r\n scope.select = function( date ) {\r\n if ( mode === 0 ) {\r\n var dt = ngModel.$modelValue ? new Date( ngModel.$modelValue ) : new Date(0, 0, 0, 0, 0, 0, 0);\r\n dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() );\r\n ngModel.$setViewValue( dt );\r\n refill( true );\r\n } else {\r\n selected = date;\r\n setMode( mode - 1 );\r\n }\r\n };\r\n scope.move = function(direction) {\r\n var step = datepickerCtrl.modes[mode].step;\r\n selected.setMonth( selected.getMonth() + direction * (step.months || 0) );\r\n selected.setFullYear( selected.getFullYear() + direction * (step.years || 0) );\r\n refill();\r\n };\r\n scope.toggleMode = function() {\r\n setMode( (mode + 1) % datepickerCtrl.modes.length );\r\n };\r\n scope.getWeekNumber = function(row) {\r\n return ( mode === 0 && scope.showWeekNumbers && row.length === 7 ) ? getISO8601WeekNumber(row[0].date) : null;\r\n };\r\n\r\n function getISO8601WeekNumber(date) {\r\n var checkDate = new Date(date);\r\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday\r\n var time = checkDate.getTime();\r\n checkDate.setMonth(0); // Compare with Jan 1\r\n checkDate.setDate(1);\r\n return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\r\n }\r\n }\r\n };\r\n}])\r\n\r\n.constant('datepickerPopupConfig', {\r\n dateFormat: 'yyyy-MM-dd',\r\n currentText: 'Today',\r\n toggleWeeksText: 'Weeks',\r\n clearText: 'Clear',\r\n closeText: 'Done',\r\n closeOnDateSelection: true,\r\n appendToBody: false,\r\n showButtonBar: true\r\n})\r\n\r\n.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'datepickerPopupConfig', 'datepickerConfig',\r\nfunction ($compile, $parse, $document, $position, dateFilter, datepickerPopupConfig, datepickerConfig) {\r\n return {\r\n restrict: 'EA',\r\n require: 'ngModel',\r\n link: function(originalScope, element, attrs, ngModel) {\r\n var scope = originalScope.$new(), // create a child scope so we are not polluting original one\r\n dateFormat,\r\n closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? originalScope.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,\r\n appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? originalScope.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;\r\n\r\n attrs.$observe('datepickerPopup', function(value) {\r\n dateFormat = value || datepickerPopupConfig.dateFormat;\r\n ngModel.$render();\r\n });\r\n\r\n scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? originalScope.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;\r\n\r\n originalScope.$on('$destroy', function() {\r\n $popup.remove();\r\n scope.$destroy();\r\n });\r\n\r\n attrs.$observe('currentText', function(text) {\r\n scope.currentText = angular.isDefined(text) ? text : datepickerPopupConfig.currentText;\r\n });\r\n attrs.$observe('toggleWeeksText', function(text) {\r\n scope.toggleWeeksText = angular.isDefined(text) ? text : datepickerPopupConfig.toggleWeeksText;\r\n });\r\n attrs.$observe('clearText', function(text) {\r\n scope.clearText = angular.isDefined(text) ? text : datepickerPopupConfig.clearText;\r\n });\r\n attrs.$observe('closeText', function(text) {\r\n scope.closeText = angular.isDefined(text) ? text : datepickerPopupConfig.closeText;\r\n });\r\n\r\n var getIsOpen, setIsOpen;\r\n if ( attrs.isOpen ) {\r\n getIsOpen = $parse(attrs.isOpen);\r\n setIsOpen = getIsOpen.assign;\r\n\r\n originalScope.$watch(getIsOpen, function updateOpen(value) {\r\n scope.isOpen = !! value;\r\n });\r\n }\r\n scope.isOpen = getIsOpen ? getIsOpen(originalScope) : false; // Initial state\r\n\r\n function setOpen( value ) {\r\n if (setIsOpen) {\r\n setIsOpen(originalScope, !!value);\r\n } else {\r\n scope.isOpen = !!value;\r\n }\r\n }\r\n\r\n var documentClickBind = function(event) {\r\n if (scope.isOpen && event.target !== element[0]) {\r\n scope.$apply(function() {\r\n setOpen(false);\r\n });\r\n }\r\n };\r\n\r\n var elementFocusBind = function() {\r\n scope.$apply(function() {\r\n setOpen( true );\r\n });\r\n };\r\n\r\n // popup element used to display calendar\r\n var popupEl = angular.element('
');\r\n popupEl.attr({\r\n 'ng-model': 'date',\r\n 'ng-change': 'dateSelection()'\r\n });\r\n var datepickerEl = angular.element(popupEl.children()[0]),\r\n datepickerOptions = {};\r\n if (attrs.datepickerOptions) {\r\n datepickerOptions = originalScope.$eval(attrs.datepickerOptions);\r\n datepickerEl.attr(angular.extend({}, datepickerOptions));\r\n }\r\n\r\n // TODO: reverse from dateFilter string to Date object\r\n function parseDate(viewValue) {\r\n if (!viewValue) {\r\n ngModel.$setValidity('date', true);\r\n return null;\r\n } else if (angular.isDate(viewValue)) {\r\n ngModel.$setValidity('date', true);\r\n return viewValue;\r\n } else if (angular.isString(viewValue)) {\r\n var date = new Date(viewValue);\r\n if (isNaN(date)) {\r\n ngModel.$setValidity('date', false);\r\n return undefined;\r\n } else {\r\n ngModel.$setValidity('date', true);\r\n return date;\r\n }\r\n } else {\r\n ngModel.$setValidity('date', false);\r\n return undefined;\r\n }\r\n }\r\n ngModel.$parsers.unshift(parseDate);\r\n\r\n // Inner change\r\n scope.dateSelection = function(dt) {\r\n if (angular.isDefined(dt)) {\r\n scope.date = dt;\r\n }\r\n ngModel.$setViewValue(scope.date);\r\n ngModel.$render();\r\n\r\n if (closeOnDateSelection) {\r\n setOpen( false );\r\n }\r\n };\r\n\r\n element.bind('input change keyup', function() {\r\n scope.$apply(function() {\r\n scope.date = ngModel.$modelValue;\r\n });\r\n });\r\n\r\n // Outter change\r\n ngModel.$render = function() {\r\n var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : '';\r\n element.val(date);\r\n scope.date = ngModel.$modelValue;\r\n };\r\n\r\n function addWatchableAttribute(attribute, scopeProperty, datepickerAttribute) {\r\n if (attribute) {\r\n originalScope.$watch($parse(attribute), function(value){\r\n scope[scopeProperty] = value;\r\n });\r\n datepickerEl.attr(datepickerAttribute || scopeProperty, scopeProperty);\r\n }\r\n }\r\n addWatchableAttribute(attrs.min, 'min');\r\n addWatchableAttribute(attrs.max, 'max');\r\n if (attrs.showWeeks) {\r\n addWatchableAttribute(attrs.showWeeks, 'showWeeks', 'show-weeks');\r\n } else {\r\n scope.showWeeks = 'show-weeks' in datepickerOptions ? datepickerOptions['show-weeks'] : datepickerConfig.showWeeks;\r\n datepickerEl.attr('show-weeks', 'showWeeks');\r\n }\r\n if (attrs.dateDisabled) {\r\n datepickerEl.attr('date-disabled', attrs.dateDisabled);\r\n }\r\n\r\n function updatePosition() {\r\n scope.position = appendToBody ? $position.offset(element) : $position.position(element);\r\n scope.position.top = scope.position.top + element.prop('offsetHeight');\r\n }\r\n\r\n var documentBindingInitialized = false, elementFocusInitialized = false;\r\n scope.$watch('isOpen', function(value) {\r\n if (value) {\r\n updatePosition();\r\n $document.bind('click', documentClickBind);\r\n if(elementFocusInitialized) {\r\n element.unbind('focus', elementFocusBind);\r\n }\r\n element[0].focus();\r\n documentBindingInitialized = true;\r\n } else {\r\n if(documentBindingInitialized) {\r\n $document.unbind('click', documentClickBind);\r\n }\r\n element.bind('focus', elementFocusBind);\r\n elementFocusInitialized = true;\r\n }\r\n\r\n if ( setIsOpen ) {\r\n setIsOpen(originalScope, value);\r\n }\r\n });\r\n\r\n scope.today = function() {\r\n scope.dateSelection(new Date());\r\n };\r\n scope.clear = function() {\r\n scope.dateSelection(null);\r\n };\r\n\r\n var $popup = $compile(popupEl)(scope);\r\n if ( appendToBody ) {\r\n $document.find('body').append($popup);\r\n } else {\r\n element.after($popup);\r\n }\r\n }\r\n };\r\n}])\r\n\r\n.directive('datepickerPopupWrap', function() {\r\n return {\r\n restrict:'EA',\r\n replace: true,\r\n transclude: true,\r\n templateUrl: 'template/datepicker/popup.html',\r\n link:function (scope, element, attrs) {\r\n element.bind('click', function(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n });\r\n }\r\n };\r\n});\r\n","/*\r\n * dropdownToggle - Provides dropdown menu functionality in place of bootstrap js\r\n * @restrict class or attribute\r\n * @example:\r\n
  • \r\n My Dropdown Menu\r\n \r\n
  • \r\n */\r\n\r\nangular.module('ui.bootstrap.dropdownToggle', []).directive('dropdownToggle', ['$document', '$location', function ($document, $location) {\r\n var openElement = null,\r\n closeMenu = angular.noop;\r\n return {\r\n restrict: 'CA',\r\n link: function(scope, element, attrs) {\r\n scope.$watch('$location.path', function() { closeMenu(); });\r\n element.parent().bind('click', function() { closeMenu(); });\r\n element.bind('click', function (event) {\r\n\r\n var elementWasOpen = (element === openElement);\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!!openElement) {\r\n closeMenu();\r\n }\r\n\r\n if (!elementWasOpen && !element.hasClass('disabled') && !element.prop('disabled')) {\r\n element.parent().addClass('open');\r\n openElement = element;\r\n closeMenu = function (event) {\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n $document.unbind('click', closeMenu);\r\n element.parent().removeClass('open');\r\n closeMenu = angular.noop;\r\n openElement = null;\r\n };\r\n $document.bind('click', closeMenu);\r\n }\r\n });\r\n }\r\n };\r\n}]);\r\n","angular.module('ui.bootstrap.pagination', [])\r\n\r\n.controller('PaginationController', ['$scope', '$attrs', '$parse', '$interpolate', function ($scope, $attrs, $parse, $interpolate) {\r\n var self = this,\r\n setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;\r\n\r\n this.init = function(defaultItemsPerPage) {\r\n if ($attrs.itemsPerPage) {\r\n $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {\r\n self.itemsPerPage = parseInt(value, 10);\r\n $scope.totalPages = self.calculateTotalPages();\r\n });\r\n } else {\r\n this.itemsPerPage = defaultItemsPerPage;\r\n }\r\n };\r\n\r\n this.noPrevious = function() {\r\n return this.page === 1;\r\n };\r\n this.noNext = function() {\r\n return this.page === $scope.totalPages;\r\n };\r\n\r\n this.isActive = function(page) {\r\n return this.page === page;\r\n };\r\n\r\n this.calculateTotalPages = function() {\r\n var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage);\r\n return Math.max(totalPages || 0, 1);\r\n };\r\n\r\n this.getAttributeValue = function(attribute, defaultValue, interpolate) {\r\n return angular.isDefined(attribute) ? (interpolate ? $interpolate(attribute)($scope.$parent) : $scope.$parent.$eval(attribute)) : defaultValue;\r\n };\r\n\r\n this.render = function() {\r\n this.page = parseInt($scope.page, 10) || 1;\r\n if (this.page > 0 && this.page <= $scope.totalPages) {\r\n $scope.pages = this.getPages(this.page, $scope.totalPages);\r\n }\r\n };\r\n\r\n $scope.selectPage = function(page) {\r\n if ( ! self.isActive(page) && page > 0 && page <= $scope.totalPages) {\r\n $scope.page = page;\r\n $scope.onSelectPage({ page: page });\r\n }\r\n };\r\n\r\n $scope.$watch('page', function() {\r\n self.render();\r\n });\r\n\r\n $scope.$watch('totalItems', function() {\r\n $scope.totalPages = self.calculateTotalPages();\r\n });\r\n\r\n $scope.$watch('totalPages', function(value) {\r\n setNumPages($scope.$parent, value); // Readonly variable\r\n\r\n if ( self.page > value ) {\r\n $scope.selectPage(value);\r\n } else {\r\n self.render();\r\n }\r\n });\r\n}])\r\n\r\n.constant('paginationConfig', {\r\n itemsPerPage: 10,\r\n boundaryLinks: false,\r\n directionLinks: true,\r\n firstText: 'First',\r\n previousText: 'Previous',\r\n nextText: 'Next',\r\n lastText: 'Last',\r\n rotate: true\r\n})\r\n\r\n.directive('pagination', ['$parse', 'paginationConfig', function($parse, config) {\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n page: '=',\r\n totalItems: '=',\r\n onSelectPage:' &'\r\n },\r\n controller: 'PaginationController',\r\n templateUrl: 'template/pagination/pagination.html',\r\n replace: true,\r\n link: function(scope, element, attrs, paginationCtrl) {\r\n\r\n // Setup configuration parameters\r\n var maxSize,\r\n boundaryLinks = paginationCtrl.getAttributeValue(attrs.boundaryLinks, config.boundaryLinks ),\r\n directionLinks = paginationCtrl.getAttributeValue(attrs.directionLinks, config.directionLinks ),\r\n firstText = paginationCtrl.getAttributeValue(attrs.firstText, config.firstText, true),\r\n previousText = paginationCtrl.getAttributeValue(attrs.previousText, config.previousText, true),\r\n nextText = paginationCtrl.getAttributeValue(attrs.nextText, config.nextText, true),\r\n lastText = paginationCtrl.getAttributeValue(attrs.lastText, config.lastText, true),\r\n rotate = paginationCtrl.getAttributeValue(attrs.rotate, config.rotate);\r\n\r\n paginationCtrl.init(config.itemsPerPage);\r\n\r\n if (attrs.maxSize) {\r\n scope.$parent.$watch($parse(attrs.maxSize), function(value) {\r\n maxSize = parseInt(value, 10);\r\n paginationCtrl.render();\r\n });\r\n }\r\n\r\n // Create page object used in template\r\n function makePage(number, text, isActive, isDisabled) {\r\n return {\r\n number: number,\r\n text: text,\r\n active: isActive,\r\n disabled: isDisabled\r\n };\r\n }\r\n\r\n paginationCtrl.getPages = function(currentPage, totalPages) {\r\n var pages = [];\r\n\r\n // Default page limits\r\n var startPage = 1, endPage = totalPages;\r\n var isMaxSized = ( angular.isDefined(maxSize) && maxSize < totalPages );\r\n\r\n // recompute if maxSize\r\n if ( isMaxSized ) {\r\n if ( rotate ) {\r\n // Current page is displayed in the middle of the visible ones\r\n startPage = Math.max(currentPage - Math.floor(maxSize/2), 1);\r\n endPage = startPage + maxSize - 1;\r\n\r\n // Adjust if limit is exceeded\r\n if (endPage > totalPages) {\r\n endPage = totalPages;\r\n startPage = endPage - maxSize + 1;\r\n }\r\n } else {\r\n // Visible pages are paginated with maxSize\r\n startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1;\r\n\r\n // Adjust last page if limit is exceeded\r\n endPage = Math.min(startPage + maxSize - 1, totalPages);\r\n }\r\n }\r\n\r\n // Add page number links\r\n for (var number = startPage; number <= endPage; number++) {\r\n var page = makePage(number, number, paginationCtrl.isActive(number), false);\r\n pages.push(page);\r\n }\r\n\r\n // Add links to move between page sets\r\n if ( isMaxSized && ! rotate ) {\r\n if ( startPage > 1 ) {\r\n var previousPageSet = makePage(startPage - 1, '...', false, false);\r\n pages.unshift(previousPageSet);\r\n }\r\n\r\n if ( endPage < totalPages ) {\r\n var nextPageSet = makePage(endPage + 1, '...', false, false);\r\n pages.push(nextPageSet);\r\n }\r\n }\r\n\r\n // Add previous & next links\r\n if (directionLinks) {\r\n var previousPage = makePage(currentPage - 1, previousText, false, paginationCtrl.noPrevious());\r\n pages.unshift(previousPage);\r\n\r\n var nextPage = makePage(currentPage + 1, nextText, false, paginationCtrl.noNext());\r\n pages.push(nextPage);\r\n }\r\n\r\n // Add first & last links\r\n if (boundaryLinks) {\r\n var firstPage = makePage(1, firstText, false, paginationCtrl.noPrevious());\r\n pages.unshift(firstPage);\r\n\r\n var lastPage = makePage(totalPages, lastText, false, paginationCtrl.noNext());\r\n pages.push(lastPage);\r\n }\r\n\r\n return pages;\r\n };\r\n }\r\n };\r\n}])\r\n\r\n.constant('pagerConfig', {\r\n itemsPerPage: 10,\r\n previousText: '« Previous',\r\n nextText: 'Next »',\r\n align: true\r\n})\r\n\r\n.directive('pager', ['pagerConfig', function(config) {\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n page: '=',\r\n totalItems: '=',\r\n onSelectPage:' &'\r\n },\r\n controller: 'PaginationController',\r\n templateUrl: 'template/pagination/pager.html',\r\n replace: true,\r\n link: function(scope, element, attrs, paginationCtrl) {\r\n\r\n // Setup configuration parameters\r\n var previousText = paginationCtrl.getAttributeValue(attrs.previousText, config.previousText, true),\r\n nextText = paginationCtrl.getAttributeValue(attrs.nextText, config.nextText, true),\r\n align = paginationCtrl.getAttributeValue(attrs.align, config.align);\r\n\r\n paginationCtrl.init(config.itemsPerPage);\r\n\r\n // Create page object used in template\r\n function makePage(number, text, isDisabled, isPrevious, isNext) {\r\n return {\r\n number: number,\r\n text: text,\r\n disabled: isDisabled,\r\n previous: ( align && isPrevious ),\r\n next: ( align && isNext )\r\n };\r\n }\r\n\r\n paginationCtrl.getPages = function(currentPage) {\r\n return [\r\n makePage(currentPage - 1, previousText, paginationCtrl.noPrevious(), true, false),\r\n makePage(currentPage + 1, nextText, paginationCtrl.noNext(), false, true)\r\n ];\r\n };\r\n }\r\n };\r\n}]);\r\n","angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])\r\n\r\n/**\r\n * A helper, internal data structure that acts as a map but also allows getting / removing\r\n * elements in the LIFO order\r\n */\r\n .factory('$$stackedMap', function () {\r\n return {\r\n createNew: function () {\r\n var stack = [];\r\n\r\n return {\r\n add: function (key, value) {\r\n stack.push({\r\n key: key,\r\n value: value\r\n });\r\n },\r\n get: function (key) {\r\n for (var i = 0; i < stack.length; i++) {\r\n if (key == stack[i].key) {\r\n return stack[i];\r\n }\r\n }\r\n },\r\n keys: function() {\r\n var keys = [];\r\n for (var i = 0; i < stack.length; i++) {\r\n keys.push(stack[i].key);\r\n }\r\n return keys;\r\n },\r\n top: function () {\r\n return stack[stack.length - 1];\r\n },\r\n remove: function (key) {\r\n var idx = -1;\r\n for (var i = 0; i < stack.length; i++) {\r\n if (key == stack[i].key) {\r\n idx = i;\r\n break;\r\n }\r\n }\r\n return stack.splice(idx, 1)[0];\r\n },\r\n removeTop: function () {\r\n return stack.splice(stack.length - 1, 1)[0];\r\n },\r\n length: function () {\r\n return stack.length;\r\n }\r\n };\r\n }\r\n };\r\n })\r\n\r\n/**\r\n * A helper directive for the $modal service. It creates a backdrop element.\r\n */\r\n .directive('modalBackdrop', ['$timeout', function ($timeout) {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n templateUrl: 'template/modal/backdrop.html',\r\n link: function (scope) {\r\n\r\n scope.animate = false;\r\n\r\n //trigger CSS transitions\r\n $timeout(function () {\r\n scope.animate = true;\r\n });\r\n }\r\n };\r\n }])\r\n\r\n .directive('modalWindow', ['$modalStack', '$timeout', function ($modalStack, $timeout) {\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n index: '@',\r\n animate: '='\r\n },\r\n replace: true,\r\n transclude: true,\r\n templateUrl: 'template/modal/window.html',\r\n link: function (scope, element, attrs) {\r\n scope.windowClass = attrs.windowClass || '';\r\n\r\n $timeout(function () {\r\n // trigger CSS transitions\r\n scope.animate = true;\r\n // focus a freshly-opened modal\r\n element[0].focus();\r\n });\r\n\r\n scope.close = function (evt) {\r\n var modal = $modalStack.getTop();\r\n if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $modalStack.dismiss(modal.key, 'backdrop click');\r\n }\r\n };\r\n }\r\n };\r\n }])\r\n\r\n .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap',\r\n function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) {\r\n\r\n var OPENED_MODAL_CLASS = 'modal-open';\r\n\r\n var backdropDomEl, backdropScope;\r\n var openedWindows = $$stackedMap.createNew();\r\n var $modalStack = {};\r\n\r\n function backdropIndex() {\r\n var topBackdropIndex = -1;\r\n var opened = openedWindows.keys();\r\n for (var i = 0; i < opened.length; i++) {\r\n if (openedWindows.get(opened[i]).value.backdrop) {\r\n topBackdropIndex = i;\r\n }\r\n }\r\n return topBackdropIndex;\r\n }\r\n\r\n $rootScope.$watch(backdropIndex, function(newBackdropIndex){\r\n if (backdropScope) {\r\n backdropScope.index = newBackdropIndex;\r\n }\r\n });\r\n\r\n function removeModalWindow(modalInstance) {\r\n\r\n var body = $document.find('body').eq(0);\r\n var modalWindow = openedWindows.get(modalInstance).value;\r\n\r\n //clean up the stack\r\n openedWindows.remove(modalInstance);\r\n\r\n //remove window DOM element\r\n removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, checkRemoveBackdrop);\r\n body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);\r\n }\r\n\r\n function checkRemoveBackdrop() {\r\n //remove backdrop if no longer needed\r\n if (backdropDomEl && backdropIndex() == -1) {\r\n var backdropScopeRef = backdropScope;\r\n removeAfterAnimate(backdropDomEl, backdropScope, 150, function () {\r\n backdropScopeRef.$destroy();\r\n backdropScopeRef = null;\r\n });\r\n backdropDomEl = undefined;\r\n backdropScope = undefined;\r\n }\r\n }\r\n\r\n function removeAfterAnimate(domEl, scope, emulateTime, done) {\r\n // Closing animation\r\n scope.animate = false;\r\n\r\n var transitionEndEventName = $transition.transitionEndEventName;\r\n if (transitionEndEventName) {\r\n // transition out\r\n var timeout = $timeout(afterAnimating, emulateTime);\r\n\r\n domEl.bind(transitionEndEventName, function () {\r\n $timeout.cancel(timeout);\r\n afterAnimating();\r\n scope.$apply();\r\n });\r\n } else {\r\n // Ensure this call is async\r\n $timeout(afterAnimating, 0);\r\n }\r\n\r\n function afterAnimating() {\r\n if (afterAnimating.done) {\r\n return;\r\n }\r\n afterAnimating.done = true;\r\n\r\n domEl.remove();\r\n if (done) {\r\n done();\r\n }\r\n }\r\n }\r\n\r\n $document.bind('keydown', function (evt) {\r\n var modal;\r\n\r\n if (evt.which === 27) {\r\n modal = openedWindows.top();\r\n if (modal && modal.value.keyboard) {\r\n $rootScope.$apply(function () {\r\n $modalStack.dismiss(modal.key);\r\n });\r\n }\r\n }\r\n });\r\n\r\n $modalStack.open = function (modalInstance, modal) {\r\n\r\n openedWindows.add(modalInstance, {\r\n deferred: modal.deferred,\r\n modalScope: modal.scope,\r\n backdrop: modal.backdrop,\r\n keyboard: modal.keyboard\r\n });\r\n\r\n var body = $document.find('body').eq(0),\r\n currBackdropIndex = backdropIndex();\r\n\r\n if (currBackdropIndex >= 0 && !backdropDomEl) {\r\n backdropScope = $rootScope.$new(true);\r\n backdropScope.index = currBackdropIndex;\r\n backdropDomEl = $compile('
    ')(backdropScope);\r\n body.append(backdropDomEl);\r\n }\r\n \r\n var angularDomEl = angular.element('
    ');\r\n angularDomEl.attr('window-class', modal.windowClass);\r\n angularDomEl.attr('index', openedWindows.length() - 1);\r\n angularDomEl.attr('animate', 'animate');\r\n angularDomEl.html(modal.content);\r\n\r\n var modalDomEl = $compile(angularDomEl)(modal.scope);\r\n openedWindows.top().value.modalDomEl = modalDomEl;\r\n body.append(modalDomEl);\r\n body.addClass(OPENED_MODAL_CLASS);\r\n };\r\n\r\n $modalStack.close = function (modalInstance, result) {\r\n var modalWindow = openedWindows.get(modalInstance).value;\r\n if (modalWindow) {\r\n modalWindow.deferred.resolve(result);\r\n removeModalWindow(modalInstance);\r\n }\r\n };\r\n\r\n $modalStack.dismiss = function (modalInstance, reason) {\r\n var modalWindow = openedWindows.get(modalInstance).value;\r\n if (modalWindow) {\r\n modalWindow.deferred.reject(reason);\r\n removeModalWindow(modalInstance);\r\n }\r\n };\r\n\r\n $modalStack.dismissAll = function (reason) {\r\n var topModal = this.getTop();\r\n while (topModal) {\r\n this.dismiss(topModal.key, reason);\r\n topModal = this.getTop();\r\n }\r\n };\r\n\r\n $modalStack.getTop = function () {\r\n return openedWindows.top();\r\n };\r\n\r\n return $modalStack;\r\n }])\r\n\r\n .provider('$modal', function () {\r\n\r\n var $modalProvider = {\r\n options: {\r\n backdrop: true, //can be also false or 'static'\r\n keyboard: true\r\n },\r\n $get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack',\r\n function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) {\r\n\r\n var $modal = {};\r\n\r\n function getTemplatePromise(options) {\r\n return options.template ? $q.when(options.template) :\r\n $http.get(options.templateUrl, {cache: $templateCache}).then(function (result) {\r\n return result.data;\r\n });\r\n }\r\n\r\n function getResolvePromises(resolves) {\r\n var promisesArr = [];\r\n angular.forEach(resolves, function (value, key) {\r\n if (angular.isFunction(value) || angular.isArray(value)) {\r\n promisesArr.push($q.when($injector.invoke(value)));\r\n }\r\n });\r\n return promisesArr;\r\n }\r\n\r\n $modal.open = function (modalOptions) {\r\n\r\n var modalResultDeferred = $q.defer();\r\n var modalOpenedDeferred = $q.defer();\r\n\r\n //prepare an instance of a modal to be injected into controllers and returned to a caller\r\n var modalInstance = {\r\n result: modalResultDeferred.promise,\r\n opened: modalOpenedDeferred.promise,\r\n close: function (result) {\r\n $modalStack.close(modalInstance, result);\r\n },\r\n dismiss: function (reason) {\r\n $modalStack.dismiss(modalInstance, reason);\r\n }\r\n };\r\n\r\n //merge and clean up options\r\n modalOptions = angular.extend({}, $modalProvider.options, modalOptions);\r\n modalOptions.resolve = modalOptions.resolve || {};\r\n\r\n //verify options\r\n if (!modalOptions.template && !modalOptions.templateUrl) {\r\n throw new Error('One of template or templateUrl options is required.');\r\n }\r\n\r\n var templateAndResolvePromise =\r\n $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve)));\r\n\r\n\r\n templateAndResolvePromise.then(function resolveSuccess(tplAndVars) {\r\n\r\n var modalScope = (modalOptions.scope || $rootScope).$new();\r\n modalScope.$close = modalInstance.close;\r\n modalScope.$dismiss = modalInstance.dismiss;\r\n\r\n var ctrlInstance, ctrlLocals = {};\r\n var resolveIter = 1;\r\n\r\n //controllers\r\n if (modalOptions.controller) {\r\n ctrlLocals.$scope = modalScope;\r\n ctrlLocals.$modalInstance = modalInstance;\r\n angular.forEach(modalOptions.resolve, function (value, key) {\r\n ctrlLocals[key] = tplAndVars[resolveIter++];\r\n });\r\n\r\n ctrlInstance = $controller(modalOptions.controller, ctrlLocals);\r\n }\r\n\r\n $modalStack.open(modalInstance, {\r\n scope: modalScope,\r\n deferred: modalResultDeferred,\r\n content: tplAndVars[0],\r\n backdrop: modalOptions.backdrop,\r\n keyboard: modalOptions.keyboard,\r\n windowClass: modalOptions.windowClass\r\n });\r\n\r\n }, function resolveError(reason) {\r\n modalResultDeferred.reject(reason);\r\n });\r\n\r\n templateAndResolvePromise.then(function () {\r\n modalOpenedDeferred.resolve(true);\r\n }, function () {\r\n modalOpenedDeferred.reject(false);\r\n });\r\n\r\n return modalInstance;\r\n };\r\n\r\n return $modal;\r\n }]\r\n };\r\n\r\n return $modalProvider;\r\n });\r\n","angular.module('ui.bootstrap.position', [])\r\n\r\n/**\r\n * A set of utility methods that can be use to retrieve position of DOM elements.\r\n * It is meant to be used where we need to absolute-position DOM elements in\r\n * relation to other, existing elements (this is the case for tooltips, popovers,\r\n * typeahead suggestions etc.).\r\n */\r\n .factory('$position', ['$document', '$window', function ($document, $window) {\r\n\r\n function getStyle(el, cssprop) {\r\n if (el.currentStyle) { //IE\r\n return el.currentStyle[cssprop];\r\n } else if ($window.getComputedStyle) {\r\n return $window.getComputedStyle(el)[cssprop];\r\n }\r\n // finally try and get inline style\r\n return el.style[cssprop];\r\n }\r\n\r\n /**\r\n * Checks if a given element is statically positioned\r\n * @param element - raw DOM element\r\n */\r\n function isStaticPositioned(element) {\r\n return (getStyle(element, \"position\") || 'static' ) === 'static';\r\n }\r\n\r\n /**\r\n * returns the closest, non-statically positioned parentOffset of a given element\r\n * @param element\r\n */\r\n var parentOffsetEl = function (element) {\r\n var docDomEl = $document[0];\r\n var offsetParent = element.offsetParent || docDomEl;\r\n while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {\r\n offsetParent = offsetParent.offsetParent;\r\n }\r\n return offsetParent || docDomEl;\r\n };\r\n\r\n return {\r\n /**\r\n * Provides read-only equivalent of jQuery's position function:\r\n * http://api.jquery.com/position/\r\n */\r\n position: function (element) {\r\n var elBCR = this.offset(element);\r\n var offsetParentBCR = { top: 0, left: 0 };\r\n var offsetParentEl = parentOffsetEl(element[0]);\r\n if (offsetParentEl != $document[0]) {\r\n offsetParentBCR = this.offset(angular.element(offsetParentEl));\r\n offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\r\n offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\r\n }\r\n\r\n var boundingClientRect = element[0].getBoundingClientRect();\r\n return {\r\n width: boundingClientRect.width || element.prop('offsetWidth'),\r\n height: boundingClientRect.height || element.prop('offsetHeight'),\r\n top: elBCR.top - offsetParentBCR.top,\r\n left: elBCR.left - offsetParentBCR.left\r\n };\r\n },\r\n\r\n /**\r\n * Provides read-only equivalent of jQuery's offset function:\r\n * http://api.jquery.com/offset/\r\n */\r\n offset: function (element) {\r\n var boundingClientRect = element[0].getBoundingClientRect();\r\n return {\r\n width: boundingClientRect.width || element.prop('offsetWidth'),\r\n height: boundingClientRect.height || element.prop('offsetHeight'),\r\n top: boundingClientRect.top + ($window.pageYOffset || $document[0].body.scrollTop || $document[0].documentElement.scrollTop),\r\n left: boundingClientRect.left + ($window.pageXOffset || $document[0].body.scrollLeft || $document[0].documentElement.scrollLeft)\r\n };\r\n }\r\n };\r\n }]);\r\n","/**\r\n * The following features are still outstanding: popup delay, animation as a\r\n * function, placement as a function, inside, support for more triggers than\r\n * just mouse enter/leave, html popovers, and selector delegatation.\r\n */\r\nangular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] )\r\n\r\n.directive( 'popoverPopup', function () {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' },\r\n templateUrl: 'template/popover/popover.html'\r\n };\r\n})\r\n\r\n.directive( 'popover', [ '$tooltip', function ( $tooltip ) {\r\n return $tooltip( 'popover', 'popover', 'click' );\r\n}]);\r\n","angular.module('ui.bootstrap.progressbar', ['ui.bootstrap.transition'])\r\n\r\n.constant('progressConfig', {\r\n animate: true,\r\n max: 100\r\n})\r\n\r\n.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', '$transition', function($scope, $attrs, progressConfig, $transition) {\r\n var self = this,\r\n bars = [],\r\n max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max,\r\n animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;\r\n\r\n this.addBar = function(bar, element) {\r\n var oldValue = 0, index = bar.$parent.$index;\r\n if ( angular.isDefined(index) && bars[index] ) {\r\n oldValue = bars[index].value;\r\n }\r\n bars.push(bar);\r\n\r\n this.update(element, bar.value, oldValue);\r\n\r\n bar.$watch('value', function(value, oldValue) {\r\n if (value !== oldValue) {\r\n self.update(element, value, oldValue);\r\n }\r\n });\r\n\r\n bar.$on('$destroy', function() {\r\n self.removeBar(bar);\r\n });\r\n };\r\n\r\n // Update bar element width\r\n this.update = function(element, newValue, oldValue) {\r\n var percent = this.getPercentage(newValue);\r\n\r\n if (animate) {\r\n element.css('width', this.getPercentage(oldValue) + '%');\r\n $transition(element, {width: percent + '%'});\r\n } else {\r\n element.css({'transition': 'none', 'width': percent + '%'});\r\n }\r\n };\r\n\r\n this.removeBar = function(bar) {\r\n bars.splice(bars.indexOf(bar), 1);\r\n };\r\n\r\n this.getPercentage = function(value) {\r\n return Math.round(100 * value / max);\r\n };\r\n}])\r\n\r\n.directive('progress', function() {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n transclude: true,\r\n controller: 'ProgressController',\r\n require: 'progress',\r\n scope: {},\r\n template: '
    '\r\n //templateUrl: 'template/progressbar/progress.html' // Works in AngularJS 1.2\r\n };\r\n})\r\n\r\n.directive('bar', function() {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n transclude: true,\r\n require: '^progress',\r\n scope: {\r\n value: '=',\r\n type: '@'\r\n },\r\n templateUrl: 'template/progressbar/bar.html',\r\n link: function(scope, element, attrs, progressCtrl) {\r\n progressCtrl.addBar(scope, element);\r\n }\r\n };\r\n})\r\n\r\n.directive('progressbar', function() {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n transclude: true,\r\n controller: 'ProgressController',\r\n scope: {\r\n value: '=',\r\n type: '@'\r\n },\r\n templateUrl: 'template/progressbar/progressbar.html',\r\n link: function(scope, element, attrs, progressCtrl) {\r\n progressCtrl.addBar(scope, angular.element(element.children()[0]));\r\n }\r\n };\r\n});","angular.module('ui.bootstrap.rating', [])\r\n\r\n.constant('ratingConfig', {\r\n max: 5,\r\n stateOn: null,\r\n stateOff: null\r\n})\r\n\r\n.controller('RatingController', ['$scope', '$attrs', '$parse', 'ratingConfig', function($scope, $attrs, $parse, ratingConfig) {\r\n\r\n this.maxRange = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max;\r\n this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;\r\n this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;\r\n\r\n this.createRateObjects = function(states) {\r\n var defaultOptions = {\r\n stateOn: this.stateOn,\r\n stateOff: this.stateOff\r\n };\r\n\r\n for (var i = 0, n = states.length; i < n; i++) {\r\n states[i] = angular.extend({ index: i }, defaultOptions, states[i]);\r\n }\r\n return states;\r\n };\r\n\r\n // Get objects used in template\r\n $scope.range = angular.isDefined($attrs.ratingStates) ? this.createRateObjects(angular.copy($scope.$parent.$eval($attrs.ratingStates))): this.createRateObjects(new Array(this.maxRange));\r\n\r\n $scope.rate = function(value) {\r\n if ( $scope.value !== value && !$scope.readonly ) {\r\n $scope.value = value;\r\n }\r\n };\r\n\r\n $scope.enter = function(value) {\r\n if ( ! $scope.readonly ) {\r\n $scope.val = value;\r\n }\r\n $scope.onHover({value: value});\r\n };\r\n\r\n $scope.reset = function() {\r\n $scope.val = angular.copy($scope.value);\r\n $scope.onLeave();\r\n };\r\n\r\n $scope.$watch('value', function(value) {\r\n $scope.val = value;\r\n });\r\n\r\n $scope.readonly = false;\r\n if ($attrs.readonly) {\r\n $scope.$parent.$watch($parse($attrs.readonly), function(value) {\r\n $scope.readonly = !!value;\r\n });\r\n }\r\n}])\r\n\r\n.directive('rating', function() {\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n value: '=',\r\n onHover: '&',\r\n onLeave: '&'\r\n },\r\n controller: 'RatingController',\r\n templateUrl: 'template/rating/rating.html',\r\n replace: true\r\n };\r\n});","\r\n/**\r\n * @ngdoc overview\r\n * @name ui.bootstrap.tabs\r\n *\r\n * @description\r\n * AngularJS version of the tabs directive.\r\n */\r\n\r\nangular.module('ui.bootstrap.tabs', [])\r\n\r\n.controller('TabsetController', ['$scope', function TabsetCtrl($scope) {\r\n var ctrl = this,\r\n tabs = ctrl.tabs = $scope.tabs = [];\r\n\r\n ctrl.select = function(tab) {\r\n angular.forEach(tabs, function(tab) {\r\n tab.active = false;\r\n });\r\n tab.active = true;\r\n };\r\n\r\n ctrl.addTab = function addTab(tab) {\r\n tabs.push(tab);\r\n if (tabs.length === 1 || tab.active) {\r\n ctrl.select(tab);\r\n }\r\n };\r\n\r\n ctrl.removeTab = function removeTab(tab) {\r\n var index = tabs.indexOf(tab);\r\n //Select a new tab if the tab to be removed is selected\r\n if (tab.active && tabs.length > 1) {\r\n //If this is the last tab, select the previous tab. else, the next tab.\r\n var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1;\r\n ctrl.select(tabs[newActiveIndex]);\r\n }\r\n tabs.splice(index, 1);\r\n };\r\n}])\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ui.bootstrap.tabs.directive:tabset\r\n * @restrict EA\r\n *\r\n * @description\r\n * Tabset is the outer container for the tabs directive\r\n *\r\n * @param {boolean=} vertical Whether or not to use vertical styling for the tabs.\r\n * @param {boolean=} justified Whether or not to use justified styling for the tabs.\r\n *\r\n * @example\r\n\r\n \r\n \r\n First Content!\r\n Second Content!\r\n \r\n
    \r\n \r\n First Vertical Content!\r\n Second Vertical Content!\r\n \r\n \r\n First Justified Content!\r\n Second Justified Content!\r\n \r\n
    \r\n
    \r\n */\r\n.directive('tabset', function() {\r\n return {\r\n restrict: 'EA',\r\n transclude: true,\r\n replace: true,\r\n scope: {},\r\n controller: 'TabsetController',\r\n templateUrl: 'template/tabs/tabset.html',\r\n link: function(scope, element, attrs) {\r\n scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;\r\n scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;\r\n scope.type = angular.isDefined(attrs.type) ? scope.$parent.$eval(attrs.type) : 'tabs';\r\n }\r\n };\r\n})\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ui.bootstrap.tabs.directive:tab\r\n * @restrict EA\r\n *\r\n * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}.\r\n * @param {string=} select An expression to evaluate when the tab is selected.\r\n * @param {boolean=} active A binding, telling whether or not this tab is selected.\r\n * @param {boolean=} disabled A binding, telling whether or not this tab is disabled.\r\n *\r\n * @description\r\n * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}.\r\n *\r\n * @example\r\n\r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n First Tab\r\n \r\n Alert me!\r\n Second Tab, with alert callback and html heading!\r\n \r\n \r\n {{item.content}}\r\n \r\n \r\n
    \r\n
    \r\n \r\n function TabsDemoCtrl($scope) {\r\n $scope.items = [\r\n { title:\"Dynamic Title 1\", content:\"Dynamic Item 0\" },\r\n { title:\"Dynamic Title 2\", content:\"Dynamic Item 1\", disabled: true }\r\n ];\r\n\r\n $scope.alertMe = function() {\r\n setTimeout(function() {\r\n alert(\"You've selected the alert tab!\");\r\n });\r\n };\r\n };\r\n \r\n
    \r\n */\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ui.bootstrap.tabs.directive:tabHeading\r\n * @restrict EA\r\n *\r\n * @description\r\n * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element.\r\n *\r\n * @example\r\n\r\n \r\n \r\n \r\n HTML in my titles?!\r\n And some content, too!\r\n \r\n \r\n Icon heading?!?\r\n That's right.\r\n \r\n \r\n \r\n\r\n */\r\n.directive('tab', ['$parse', function($parse) {\r\n return {\r\n require: '^tabset',\r\n restrict: 'EA',\r\n replace: true,\r\n templateUrl: 'template/tabs/tab.html',\r\n transclude: true,\r\n scope: {\r\n heading: '@',\r\n onSelect: '&select', //This callback is called in contentHeadingTransclude\r\n //once it inserts the tab's content into the dom\r\n onDeselect: '&deselect'\r\n },\r\n controller: function() {\r\n //Empty controller so other directives can require being 'under' a tab\r\n },\r\n compile: function(elm, attrs, transclude) {\r\n return function postLink(scope, elm, attrs, tabsetCtrl) {\r\n var getActive, setActive;\r\n if (attrs.active) {\r\n getActive = $parse(attrs.active);\r\n setActive = getActive.assign;\r\n scope.$parent.$watch(getActive, function updateActive(value, oldVal) {\r\n // Avoid re-initializing scope.active as it is already initialized\r\n // below. (watcher is called async during init with value ===\r\n // oldVal)\r\n if (value !== oldVal) {\r\n scope.active = !!value;\r\n }\r\n });\r\n scope.active = getActive(scope.$parent);\r\n } else {\r\n setActive = getActive = angular.noop;\r\n }\r\n\r\n scope.$watch('active', function(active) {\r\n // Note this watcher also initializes and assigns scope.active to the\r\n // attrs.active expression.\r\n setActive(scope.$parent, active);\r\n if (active) {\r\n tabsetCtrl.select(scope);\r\n scope.onSelect();\r\n } else {\r\n scope.onDeselect();\r\n }\r\n });\r\n\r\n scope.disabled = false;\r\n if ( attrs.disabled ) {\r\n scope.$parent.$watch($parse(attrs.disabled), function(value) {\r\n scope.disabled = !! value;\r\n });\r\n }\r\n\r\n scope.select = function() {\r\n if ( ! scope.disabled ) {\r\n scope.active = true;\r\n }\r\n };\r\n\r\n tabsetCtrl.addTab(scope);\r\n scope.$on('$destroy', function() {\r\n tabsetCtrl.removeTab(scope);\r\n });\r\n\r\n\r\n //We need to transclude later, once the content container is ready.\r\n //when this link happens, we're inside a tab heading.\r\n scope.$transcludeFn = transclude;\r\n };\r\n }\r\n };\r\n}])\r\n\r\n.directive('tabHeadingTransclude', [function() {\r\n return {\r\n restrict: 'A',\r\n require: '^tab',\r\n link: function(scope, elm, attrs, tabCtrl) {\r\n scope.$watch('headingElement', function updateHeadingElement(heading) {\r\n if (heading) {\r\n elm.html('');\r\n elm.append(heading);\r\n }\r\n });\r\n }\r\n };\r\n}])\r\n\r\n.directive('tabContentTransclude', function() {\r\n return {\r\n restrict: 'A',\r\n require: '^tabset',\r\n link: function(scope, elm, attrs) {\r\n var tab = scope.$eval(attrs.tabContentTransclude);\r\n\r\n //Now our tab is ready to be transcluded: both the tab heading area\r\n //and the tab content area are loaded. Transclude 'em both.\r\n tab.$transcludeFn(tab.$parent, function(contents) {\r\n angular.forEach(contents, function(node) {\r\n if (isTabHeading(node)) {\r\n //Let tabHeadingTransclude know.\r\n tab.headingElement = node;\r\n } else {\r\n elm.append(node);\r\n }\r\n });\r\n });\r\n }\r\n };\r\n function isTabHeading(node) {\r\n return node.tagName && (\r\n node.hasAttribute('tab-heading') ||\r\n node.hasAttribute('data-tab-heading') ||\r\n node.tagName.toLowerCase() === 'tab-heading' ||\r\n node.tagName.toLowerCase() === 'data-tab-heading'\r\n );\r\n }\r\n})\r\n\r\n;\r\n","angular.module('ui.bootstrap.timepicker', [])\r\n\r\n.constant('timepickerConfig', {\r\n hourStep: 1,\r\n minuteStep: 1,\r\n showMeridian: true,\r\n meridians: null,\r\n readonlyInput: false,\r\n mousewheel: true\r\n})\r\n\r\n.directive('timepicker', ['$parse', '$log', 'timepickerConfig', '$locale', function ($parse, $log, timepickerConfig, $locale) {\r\n return {\r\n restrict: 'EA',\r\n require:'?^ngModel',\r\n replace: true,\r\n scope: {},\r\n templateUrl: 'template/timepicker/timepicker.html',\r\n link: function(scope, element, attrs, ngModel) {\r\n if ( !ngModel ) {\r\n return; // do nothing if no ng-model\r\n }\r\n\r\n var selected = new Date(),\r\n meridians = angular.isDefined(attrs.meridians) ? scope.$parent.$eval(attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;\r\n\r\n var hourStep = timepickerConfig.hourStep;\r\n if (attrs.hourStep) {\r\n scope.$parent.$watch($parse(attrs.hourStep), function(value) {\r\n hourStep = parseInt(value, 10);\r\n });\r\n }\r\n\r\n var minuteStep = timepickerConfig.minuteStep;\r\n if (attrs.minuteStep) {\r\n scope.$parent.$watch($parse(attrs.minuteStep), function(value) {\r\n minuteStep = parseInt(value, 10);\r\n });\r\n }\r\n\r\n // 12H / 24H mode\r\n scope.showMeridian = timepickerConfig.showMeridian;\r\n if (attrs.showMeridian) {\r\n scope.$parent.$watch($parse(attrs.showMeridian), function(value) {\r\n scope.showMeridian = !!value;\r\n\r\n if ( ngModel.$error.time ) {\r\n // Evaluate from template\r\n var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();\r\n if (angular.isDefined( hours ) && angular.isDefined( minutes )) {\r\n selected.setHours( hours );\r\n refresh();\r\n }\r\n } else {\r\n updateTemplate();\r\n }\r\n });\r\n }\r\n\r\n // Get scope.hours in 24H mode if valid\r\n function getHoursFromTemplate ( ) {\r\n var hours = parseInt( scope.hours, 10 );\r\n var valid = ( scope.showMeridian ) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24);\r\n if ( !valid ) {\r\n return undefined;\r\n }\r\n\r\n if ( scope.showMeridian ) {\r\n if ( hours === 12 ) {\r\n hours = 0;\r\n }\r\n if ( scope.meridian === meridians[1] ) {\r\n hours = hours + 12;\r\n }\r\n }\r\n return hours;\r\n }\r\n\r\n function getMinutesFromTemplate() {\r\n var minutes = parseInt(scope.minutes, 10);\r\n return ( minutes >= 0 && minutes < 60 ) ? minutes : undefined;\r\n }\r\n\r\n function pad( value ) {\r\n return ( angular.isDefined(value) && value.toString().length < 2 ) ? '0' + value : value;\r\n }\r\n\r\n // Input elements\r\n var inputs = element.find('input'), hoursInputEl = inputs.eq(0), minutesInputEl = inputs.eq(1);\r\n\r\n // Respond on mousewheel spin\r\n var mousewheel = (angular.isDefined(attrs.mousewheel)) ? scope.$eval(attrs.mousewheel) : timepickerConfig.mousewheel;\r\n if ( mousewheel ) {\r\n\r\n var isScrollingUp = function(e) {\r\n if (e.originalEvent) {\r\n e = e.originalEvent;\r\n }\r\n //pick correct delta variable depending on event\r\n var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY;\r\n return (e.detail || delta > 0);\r\n };\r\n\r\n hoursInputEl.bind('mousewheel wheel', function(e) {\r\n scope.$apply( (isScrollingUp(e)) ? scope.incrementHours() : scope.decrementHours() );\r\n e.preventDefault();\r\n });\r\n\r\n minutesInputEl.bind('mousewheel wheel', function(e) {\r\n scope.$apply( (isScrollingUp(e)) ? scope.incrementMinutes() : scope.decrementMinutes() );\r\n e.preventDefault();\r\n });\r\n }\r\n\r\n scope.readonlyInput = (angular.isDefined(attrs.readonlyInput)) ? scope.$eval(attrs.readonlyInput) : timepickerConfig.readonlyInput;\r\n if ( ! scope.readonlyInput ) {\r\n\r\n var invalidate = function(invalidHours, invalidMinutes) {\r\n ngModel.$setViewValue( null );\r\n ngModel.$setValidity('time', false);\r\n if (angular.isDefined(invalidHours)) {\r\n scope.invalidHours = invalidHours;\r\n }\r\n if (angular.isDefined(invalidMinutes)) {\r\n scope.invalidMinutes = invalidMinutes;\r\n }\r\n };\r\n\r\n scope.updateHours = function() {\r\n var hours = getHoursFromTemplate();\r\n\r\n if ( angular.isDefined(hours) ) {\r\n selected.setHours( hours );\r\n refresh( 'h' );\r\n } else {\r\n invalidate(true);\r\n }\r\n };\r\n\r\n hoursInputEl.bind('blur', function(e) {\r\n if ( !scope.validHours && scope.hours < 10) {\r\n scope.$apply( function() {\r\n scope.hours = pad( scope.hours );\r\n });\r\n }\r\n });\r\n\r\n scope.updateMinutes = function() {\r\n var minutes = getMinutesFromTemplate();\r\n\r\n if ( angular.isDefined(minutes) ) {\r\n selected.setMinutes( minutes );\r\n refresh( 'm' );\r\n } else {\r\n invalidate(undefined, true);\r\n }\r\n };\r\n\r\n minutesInputEl.bind('blur', function(e) {\r\n if ( !scope.invalidMinutes && scope.minutes < 10 ) {\r\n scope.$apply( function() {\r\n scope.minutes = pad( scope.minutes );\r\n });\r\n }\r\n });\r\n } else {\r\n scope.updateHours = angular.noop;\r\n scope.updateMinutes = angular.noop;\r\n }\r\n\r\n ngModel.$render = function() {\r\n var date = ngModel.$modelValue ? new Date( ngModel.$modelValue ) : null;\r\n\r\n if ( isNaN(date) ) {\r\n ngModel.$setValidity('time', false);\r\n $log.error('Timepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\r\n } else {\r\n if ( date ) {\r\n selected = date;\r\n }\r\n makeValid();\r\n updateTemplate();\r\n }\r\n };\r\n\r\n // Call internally when we know that model is valid.\r\n function refresh( keyboardChange ) {\r\n makeValid();\r\n ngModel.$setViewValue( new Date(selected) );\r\n updateTemplate( keyboardChange );\r\n }\r\n\r\n function makeValid() {\r\n ngModel.$setValidity('time', true);\r\n scope.invalidHours = false;\r\n scope.invalidMinutes = false;\r\n }\r\n\r\n function updateTemplate( keyboardChange ) {\r\n var hours = selected.getHours(), minutes = selected.getMinutes();\r\n\r\n if ( scope.showMeridian ) {\r\n hours = ( hours === 0 || hours === 12 ) ? 12 : hours % 12; // Convert 24 to 12 hour system\r\n }\r\n scope.hours = keyboardChange === 'h' ? hours : pad(hours);\r\n scope.minutes = keyboardChange === 'm' ? minutes : pad(minutes);\r\n scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\r\n }\r\n\r\n function addMinutes( minutes ) {\r\n var dt = new Date( selected.getTime() + minutes * 60000 );\r\n selected.setHours( dt.getHours(), dt.getMinutes() );\r\n refresh();\r\n }\r\n\r\n scope.incrementHours = function() {\r\n addMinutes( hourStep * 60 );\r\n };\r\n scope.decrementHours = function() {\r\n addMinutes( - hourStep * 60 );\r\n };\r\n scope.incrementMinutes = function() {\r\n addMinutes( minuteStep );\r\n };\r\n scope.decrementMinutes = function() {\r\n addMinutes( - minuteStep );\r\n };\r\n scope.toggleMeridian = function() {\r\n addMinutes( 12 * 60 * (( selected.getHours() < 12 ) ? 1 : -1) );\r\n };\r\n }\r\n };\r\n}]);\r\n","/**\r\n * The following features are still outstanding: animation as a\r\n * function, placement as a function, inside, support for more triggers than\r\n * just mouse enter/leave, html tooltips, and selector delegation.\r\n */\r\nangular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap.bindHtml' ] )\r\n\r\n/**\r\n * The $tooltip service creates tooltip- and popover-like directives as well as\r\n * houses global options for them.\r\n */\r\n.provider( '$tooltip', function () {\r\n // The default options tooltip and popover.\r\n var defaultOptions = {\r\n placement: 'top',\r\n animation: true,\r\n popupDelay: 0\r\n };\r\n\r\n // Default hide triggers for each show trigger\r\n var triggerMap = {\r\n 'mouseenter': 'mouseleave',\r\n 'click': 'click',\r\n 'focus': 'blur'\r\n };\r\n\r\n // The options specified to the provider globally.\r\n var globalOptions = {};\r\n \r\n /**\r\n * `options({})` allows global configuration of all tooltips in the\r\n * application.\r\n *\r\n * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {\r\n * // place tooltips left instead of top by default\r\n * $tooltipProvider.options( { placement: 'left' } );\r\n * });\r\n */\r\n\tthis.options = function( value ) {\r\n\t\tangular.extend( globalOptions, value );\r\n\t};\r\n\r\n /**\r\n * This allows you to extend the set of trigger mappings available. E.g.:\r\n *\r\n * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );\r\n */\r\n this.setTriggers = function setTriggers ( triggers ) {\r\n angular.extend( triggerMap, triggers );\r\n };\r\n\r\n /**\r\n * This is a helper function for translating camel-case to snake-case.\r\n */\r\n function snake_case(name){\r\n var regexp = /[A-Z]/g;\r\n var separator = '-';\r\n return name.replace(regexp, function(letter, pos) {\r\n return (pos ? separator : '') + letter.toLowerCase();\r\n });\r\n }\r\n\r\n /**\r\n * Returns the actual instance of the $tooltip service.\r\n * TODO support multiple triggers\r\n */\r\n this.$get = [ '$window', '$compile', '$timeout', '$parse', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $parse, $document, $position, $interpolate ) {\r\n return function $tooltip ( type, prefix, defaultTriggerShow ) {\r\n var options = angular.extend( {}, defaultOptions, globalOptions );\r\n\r\n /**\r\n * Returns an object of show and hide triggers.\r\n *\r\n * If a trigger is supplied,\r\n * it is used to show the tooltip; otherwise, it will use the `trigger`\r\n * option passed to the `$tooltipProvider.options` method; else it will\r\n * default to the trigger supplied to this directive factory.\r\n *\r\n * The hide trigger is based on the show trigger. If the `trigger` option\r\n * was passed to the `$tooltipProvider.options` method, it will use the\r\n * mapped trigger from `triggerMap` or the passed trigger if the map is\r\n * undefined; otherwise, it uses the `triggerMap` value of the show\r\n * trigger; else it will just use the show trigger.\r\n */\r\n function getTriggers ( trigger ) {\r\n var show = trigger || options.trigger || defaultTriggerShow;\r\n var hide = triggerMap[show] || show;\r\n return {\r\n show: show,\r\n hide: hide\r\n };\r\n }\r\n\r\n var directiveName = snake_case( type );\r\n\r\n var startSym = $interpolate.startSymbol();\r\n var endSym = $interpolate.endSymbol();\r\n var template = \r\n '
    '+\r\n '
    ';\r\n\r\n return {\r\n restrict: 'EA',\r\n scope: true,\r\n compile: function (tElem, tAttrs) {\r\n var tooltipLinker = $compile( template );\r\n\r\n return function link ( scope, element, attrs ) {\r\n var tooltip;\r\n var transitionTimeout;\r\n var popupTimeout;\r\n var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false;\r\n var triggers = getTriggers( undefined );\r\n var hasRegisteredTriggers = false;\r\n var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']);\r\n\r\n var positionTooltip = function (){\r\n var position,\r\n ttWidth,\r\n ttHeight,\r\n ttPosition;\r\n // Get the position of the directive element.\r\n position = appendToBody ? $position.offset( element ) : $position.position( element );\r\n\r\n // Get the height and width of the tooltip so we can center it.\r\n ttWidth = tooltip.prop( 'offsetWidth' );\r\n ttHeight = tooltip.prop( 'offsetHeight' );\r\n\r\n // Calculate the tooltip's top and left coordinates to center it with\r\n // this directive.\r\n switch ( scope.tt_placement ) {\r\n case 'right':\r\n ttPosition = {\r\n top: position.top + position.height / 2 - ttHeight / 2,\r\n left: position.left + position.width\r\n };\r\n break;\r\n case 'bottom':\r\n ttPosition = {\r\n top: position.top + position.height,\r\n left: position.left + position.width / 2 - ttWidth / 2\r\n };\r\n break;\r\n case 'left':\r\n ttPosition = {\r\n top: position.top + position.height / 2 - ttHeight / 2,\r\n left: position.left - ttWidth\r\n };\r\n break;\r\n default:\r\n ttPosition = {\r\n top: position.top - ttHeight,\r\n left: position.left + position.width / 2 - ttWidth / 2\r\n };\r\n break;\r\n }\r\n\r\n ttPosition.top += 'px';\r\n ttPosition.left += 'px';\r\n\r\n // Now set the calculated positioning.\r\n tooltip.css( ttPosition );\r\n\r\n };\r\n\r\n // By default, the tooltip is not open.\r\n // TODO add ability to start tooltip opened\r\n scope.tt_isOpen = false;\r\n\r\n function toggleTooltipBind () {\r\n if ( ! scope.tt_isOpen ) {\r\n showTooltipBind();\r\n } else {\r\n hideTooltipBind();\r\n }\r\n }\r\n\r\n // Show the tooltip with delay if specified, otherwise show it immediately\r\n function showTooltipBind() {\r\n if(hasEnableExp && !scope.$eval(attrs[prefix+'Enable'])) {\r\n return;\r\n }\r\n if ( scope.tt_popupDelay ) {\r\n popupTimeout = $timeout( show, scope.tt_popupDelay, false );\r\n popupTimeout.then(function(reposition){reposition();});\r\n } else {\r\n show()();\r\n }\r\n }\r\n\r\n function hideTooltipBind () {\r\n scope.$apply(function () {\r\n hide();\r\n });\r\n }\r\n\r\n // Show the tooltip popup element.\r\n function show() {\r\n\r\n\r\n // Don't show empty tooltips.\r\n if ( ! scope.tt_content ) {\r\n return angular.noop;\r\n }\r\n\r\n createTooltip();\r\n\r\n // If there is a pending remove transition, we must cancel it, lest the\r\n // tooltip be mysteriously removed.\r\n if ( transitionTimeout ) {\r\n $timeout.cancel( transitionTimeout );\r\n }\r\n\r\n // Set the initial positioning.\r\n tooltip.css({ top: 0, left: 0, display: 'block' });\r\n\r\n // Now we add it to the DOM because need some info about it. But it's not \r\n // visible yet anyway.\r\n if ( appendToBody ) {\r\n $document.find( 'body' ).append( tooltip );\r\n } else {\r\n element.after( tooltip );\r\n }\r\n\r\n positionTooltip();\r\n\r\n // And show the tooltip.\r\n scope.tt_isOpen = true;\r\n scope.$digest(); // digest required as $apply is not called\r\n\r\n // Return positioning function as promise callback for correct\r\n // positioning after draw.\r\n return positionTooltip;\r\n }\r\n\r\n // Hide the tooltip popup element.\r\n function hide() {\r\n // First things first: we don't show it anymore.\r\n scope.tt_isOpen = false;\r\n\r\n //if tooltip is going to be shown after delay, we must cancel this\r\n $timeout.cancel( popupTimeout );\r\n\r\n // And now we remove it from the DOM. However, if we have animation, we \r\n // need to wait for it to expire beforehand.\r\n // FIXME: this is a placeholder for a port of the transitions library.\r\n if ( scope.tt_animation ) {\r\n transitionTimeout = $timeout(removeTooltip, 500);\r\n } else {\r\n removeTooltip();\r\n }\r\n }\r\n\r\n function createTooltip() {\r\n // There can only be one tooltip element per directive shown at once.\r\n if (tooltip) {\r\n removeTooltip();\r\n }\r\n tooltip = tooltipLinker(scope, function () {});\r\n\r\n // Get contents rendered into the tooltip\r\n scope.$digest();\r\n }\r\n\r\n function removeTooltip() {\r\n if (tooltip) {\r\n tooltip.remove();\r\n tooltip = null;\r\n }\r\n }\r\n\r\n /**\r\n * Observe the relevant attributes.\r\n */\r\n attrs.$observe( type, function ( val ) {\r\n scope.tt_content = val;\r\n\r\n if (!val && scope.tt_isOpen ) {\r\n hide();\r\n }\r\n });\r\n\r\n attrs.$observe( prefix+'Title', function ( val ) {\r\n scope.tt_title = val;\r\n });\r\n\r\n attrs.$observe( prefix+'Placement', function ( val ) {\r\n scope.tt_placement = angular.isDefined( val ) ? val : options.placement;\r\n });\r\n\r\n attrs.$observe( prefix+'PopupDelay', function ( val ) {\r\n var delay = parseInt( val, 10 );\r\n scope.tt_popupDelay = ! isNaN(delay) ? delay : options.popupDelay;\r\n });\r\n\r\n var unregisterTriggers = function() {\r\n if (hasRegisteredTriggers) {\r\n element.unbind( triggers.show, showTooltipBind );\r\n element.unbind( triggers.hide, hideTooltipBind );\r\n }\r\n };\r\n\r\n attrs.$observe( prefix+'Trigger', function ( val ) {\r\n unregisterTriggers();\r\n\r\n triggers = getTriggers( val );\r\n\r\n if ( triggers.show === triggers.hide ) {\r\n element.bind( triggers.show, toggleTooltipBind );\r\n } else {\r\n element.bind( triggers.show, showTooltipBind );\r\n element.bind( triggers.hide, hideTooltipBind );\r\n }\r\n\r\n hasRegisteredTriggers = true;\r\n });\r\n\r\n var animation = scope.$eval(attrs[prefix + 'Animation']);\r\n scope.tt_animation = angular.isDefined(animation) ? !!animation : options.animation;\r\n\r\n attrs.$observe( prefix+'AppendToBody', function ( val ) {\r\n appendToBody = angular.isDefined( val ) ? $parse( val )( scope ) : appendToBody;\r\n });\r\n\r\n // if a tooltip is attached to we need to remove it on\r\n // location change as its parent scope will probably not be destroyed\r\n // by the change.\r\n if ( appendToBody ) {\r\n scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess () {\r\n if ( scope.tt_isOpen ) {\r\n hide();\r\n }\r\n });\r\n }\r\n\r\n // Make sure tooltip is destroyed and removed.\r\n scope.$on('$destroy', function onDestroyTooltip() {\r\n $timeout.cancel( transitionTimeout );\r\n $timeout.cancel( popupTimeout );\r\n unregisterTriggers();\r\n removeTooltip();\r\n });\r\n };\r\n }\r\n };\r\n };\r\n }];\r\n})\r\n\r\n.directive( 'tooltipPopup', function () {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },\r\n templateUrl: 'template/tooltip/tooltip-popup.html'\r\n };\r\n})\r\n\r\n.directive( 'tooltip', [ '$tooltip', function ( $tooltip ) {\r\n return $tooltip( 'tooltip', 'tooltip', 'mouseenter' );\r\n}])\r\n\r\n.directive( 'tooltipHtmlUnsafePopup', function () {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },\r\n templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html'\r\n };\r\n})\r\n\r\n.directive( 'tooltipHtmlUnsafe', [ '$tooltip', function ( $tooltip ) {\r\n return $tooltip( 'tooltipHtmlUnsafe', 'tooltip', 'mouseenter' );\r\n}]);\r\n","angular.module('ui.bootstrap.transition', [])\r\n\r\n/**\r\n * $transition service provides a consistent interface to trigger CSS 3 transitions and to be informed when they complete.\r\n * @param {DOMElement} element The DOMElement that will be animated.\r\n * @param {string|object|function} trigger The thing that will cause the transition to start:\r\n * - As a string, it represents the css class to be added to the element.\r\n * - As an object, it represents a hash of style attributes to be applied to the element.\r\n * - As a function, it represents a function to be called that will cause the transition to occur.\r\n * @return {Promise} A promise that is resolved when the transition finishes.\r\n */\r\n.factory('$transition', ['$q', '$timeout', '$rootScope', function($q, $timeout, $rootScope) {\r\n\r\n var $transition = function(element, trigger, options) {\r\n options = options || {};\r\n var deferred = $q.defer();\r\n var endEventName = $transition[options.animation ? \"animationEndEventName\" : \"transitionEndEventName\"];\r\n\r\n var transitionEndHandler = function(event) {\r\n $rootScope.$apply(function() {\r\n element.unbind(endEventName, transitionEndHandler);\r\n deferred.resolve(element);\r\n });\r\n };\r\n\r\n if (endEventName) {\r\n element.bind(endEventName, transitionEndHandler);\r\n }\r\n\r\n // Wrap in a timeout to allow the browser time to update the DOM before the transition is to occur\r\n $timeout(function() {\r\n if ( angular.isString(trigger) ) {\r\n element.addClass(trigger);\r\n } else if ( angular.isFunction(trigger) ) {\r\n trigger(element);\r\n } else if ( angular.isObject(trigger) ) {\r\n element.css(trigger);\r\n }\r\n //If browser does not support transitions, instantly resolve\r\n if ( !endEventName ) {\r\n deferred.resolve(element);\r\n }\r\n });\r\n\r\n // Add our custom cancel function to the promise that is returned\r\n // We can call this if we are about to run a new transition, which we know will prevent this transition from ending,\r\n // i.e. it will therefore never raise a transitionEnd event for that transition\r\n deferred.promise.cancel = function() {\r\n if ( endEventName ) {\r\n element.unbind(endEventName, transitionEndHandler);\r\n }\r\n deferred.reject('Transition cancelled');\r\n };\r\n\r\n return deferred.promise;\r\n };\r\n\r\n // Work out the name of the transitionEnd event\r\n var transElement = document.createElement('trans');\r\n var transitionEndEventNames = {\r\n 'WebkitTransition': 'webkitTransitionEnd',\r\n 'MozTransition': 'transitionend',\r\n 'OTransition': 'oTransitionEnd',\r\n 'transition': 'transitionend'\r\n };\r\n var animationEndEventNames = {\r\n 'WebkitTransition': 'webkitAnimationEnd',\r\n 'MozTransition': 'animationend',\r\n 'OTransition': 'oAnimationEnd',\r\n 'transition': 'animationend'\r\n };\r\n function findEndEventName(endEventNames) {\r\n for (var name in endEventNames){\r\n if (transElement.style[name] !== undefined) {\r\n return endEventNames[name];\r\n }\r\n }\r\n }\r\n $transition.transitionEndEventName = findEndEventName(transitionEndEventNames);\r\n $transition.animationEndEventName = findEndEventName(animationEndEventNames);\r\n return $transition;\r\n}]);\r\n","angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml'])\r\n\r\n/**\r\n * A helper service that can parse typeahead's syntax (string provided by users)\r\n * Extracted to a separate service for ease of unit testing\r\n */\r\n .factory('typeaheadParser', ['$parse', function ($parse) {\r\n\r\n // 00000111000000000000022200000000000000003333333333333330000000000044000\r\n var TYPEAHEAD_REGEXP = /^\\s*(.*?)(?:\\s+as\\s+(.*?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+(.*)$/;\r\n\r\n return {\r\n parse:function (input) {\r\n\r\n var match = input.match(TYPEAHEAD_REGEXP), modelMapper, viewMapper, source;\r\n if (!match) {\r\n throw new Error(\r\n \"Expected typeahead specification in form of '_modelValue_ (as _label_)? for _item_ in _collection_'\" +\r\n \" but got '\" + input + \"'.\");\r\n }\r\n\r\n return {\r\n itemName:match[3],\r\n source:$parse(match[4]),\r\n viewMapper:$parse(match[2] || match[1]),\r\n modelMapper:$parse(match[1])\r\n };\r\n }\r\n };\r\n}])\r\n\r\n .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser',\r\n function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) {\r\n\r\n var HOT_KEYS = [9, 13, 27, 38, 40];\r\n\r\n return {\r\n require:'ngModel',\r\n link:function (originalScope, element, attrs, modelCtrl) {\r\n\r\n //SUPPORTED ATTRIBUTES (OPTIONS)\r\n\r\n //minimal no of characters that needs to be entered before typeahead kicks-in\r\n var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1;\r\n\r\n //minimal wait time after last character typed before typehead kicks-in\r\n var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;\r\n\r\n //should it restrict model values to the ones selected from the popup only?\r\n var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;\r\n\r\n //binding to a variable that indicates if matches are being retrieved asynchronously\r\n var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;\r\n\r\n //a callback executed when a match is selected\r\n var onSelectCallback = $parse(attrs.typeaheadOnSelect);\r\n\r\n var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\r\n\r\n var appendToBody = attrs.typeaheadAppendToBody ? $parse(attrs.typeaheadAppendToBody) : false;\r\n\r\n //INTERNAL VARIABLES\r\n\r\n //model setter executed upon match selection\r\n var $setModelValue = $parse(attrs.ngModel).assign;\r\n\r\n //expressions used by typeahead\r\n var parserResult = typeaheadParser.parse(attrs.typeahead);\r\n\r\n var hasFocus;\r\n\r\n //pop-up element used to display matches\r\n var popUpEl = angular.element('
    ');\r\n popUpEl.attr({\r\n matches: 'matches',\r\n active: 'activeIdx',\r\n select: 'select(activeIdx)',\r\n query: 'query',\r\n position: 'position'\r\n });\r\n //custom item template\r\n if (angular.isDefined(attrs.typeaheadTemplateUrl)) {\r\n popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);\r\n }\r\n\r\n //create a child scope for the typeahead directive so we are not polluting original scope\r\n //with typeahead-specific data (matches, query etc.)\r\n var scope = originalScope.$new();\r\n originalScope.$on('$destroy', function(){\r\n scope.$destroy();\r\n });\r\n\r\n var resetMatches = function() {\r\n scope.matches = [];\r\n scope.activeIdx = -1;\r\n };\r\n\r\n var getMatchesAsync = function(inputValue) {\r\n\r\n var locals = {$viewValue: inputValue};\r\n isLoadingSetter(originalScope, true);\r\n $q.when(parserResult.source(originalScope, locals)).then(function(matches) {\r\n\r\n //it might happen that several async queries were in progress if a user were typing fast\r\n //but we are interested only in responses that correspond to the current view value\r\n if (inputValue === modelCtrl.$viewValue && hasFocus) {\r\n if (matches.length > 0) {\r\n\r\n scope.activeIdx = 0;\r\n scope.matches.length = 0;\r\n\r\n //transform labels\r\n for(var i=0; i= minSearch) {\r\n if (waitTime > 0) {\r\n if (timeoutPromise) {\r\n $timeout.cancel(timeoutPromise);//cancel previous timeout\r\n }\r\n timeoutPromise = $timeout(function () {\r\n getMatchesAsync(inputValue);\r\n }, waitTime);\r\n } else {\r\n getMatchesAsync(inputValue);\r\n }\r\n } else {\r\n isLoadingSetter(originalScope, false);\r\n resetMatches();\r\n }\r\n\r\n if (isEditable) {\r\n return inputValue;\r\n } else {\r\n if (!inputValue) {\r\n // Reset in case user had typed something previously.\r\n modelCtrl.$setValidity('editable', true);\r\n return inputValue;\r\n } else {\r\n modelCtrl.$setValidity('editable', false);\r\n return undefined;\r\n }\r\n }\r\n });\r\n\r\n modelCtrl.$formatters.push(function (modelValue) {\r\n\r\n var candidateViewValue, emptyViewValue;\r\n var locals = {};\r\n\r\n if (inputFormatter) {\r\n\r\n locals['$model'] = modelValue;\r\n return inputFormatter(originalScope, locals);\r\n\r\n } else {\r\n\r\n //it might happen that we don't have enough info to properly render input value\r\n //we need to check for this situation and simply return model value if we can't apply custom formatting\r\n locals[parserResult.itemName] = modelValue;\r\n candidateViewValue = parserResult.viewMapper(originalScope, locals);\r\n locals[parserResult.itemName] = undefined;\r\n emptyViewValue = parserResult.viewMapper(originalScope, locals);\r\n\r\n return candidateViewValue!== emptyViewValue ? candidateViewValue : modelValue;\r\n }\r\n });\r\n\r\n scope.select = function (activeIdx) {\r\n //called from within the $digest() cycle\r\n var locals = {};\r\n var model, item;\r\n\r\n locals[parserResult.itemName] = item = scope.matches[activeIdx].model;\r\n model = parserResult.modelMapper(originalScope, locals);\r\n $setModelValue(originalScope, model);\r\n modelCtrl.$setValidity('editable', true);\r\n\r\n onSelectCallback(originalScope, {\r\n $item: item,\r\n $model: model,\r\n $label: parserResult.viewMapper(originalScope, locals)\r\n });\r\n\r\n resetMatches();\r\n\r\n //return focus to the input element if a mach was selected via a mouse click event\r\n element[0].focus();\r\n };\r\n\r\n //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\r\n element.bind('keydown', function (evt) {\r\n\r\n //typeahead is open and an \"interesting\" key was pressed\r\n if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {\r\n return;\r\n }\r\n\r\n evt.preventDefault();\r\n\r\n if (evt.which === 40) {\r\n scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\r\n scope.$digest();\r\n\r\n } else if (evt.which === 38) {\r\n scope.activeIdx = (scope.activeIdx ? scope.activeIdx : scope.matches.length) - 1;\r\n scope.$digest();\r\n\r\n } else if (evt.which === 13 || evt.which === 9) {\r\n scope.$apply(function () {\r\n scope.select(scope.activeIdx);\r\n });\r\n\r\n } else if (evt.which === 27) {\r\n evt.stopPropagation();\r\n\r\n resetMatches();\r\n scope.$digest();\r\n }\r\n });\r\n\r\n element.bind('blur', function (evt) {\r\n hasFocus = false;\r\n });\r\n\r\n // Keep reference to click handler to unbind it.\r\n var dismissClickHandler = function (evt) {\r\n if (element[0] !== evt.target) {\r\n resetMatches();\r\n scope.$digest();\r\n }\r\n };\r\n\r\n $document.bind('click', dismissClickHandler);\r\n\r\n originalScope.$on('$destroy', function(){\r\n $document.unbind('click', dismissClickHandler);\r\n });\r\n\r\n var $popup = $compile(popUpEl)(scope);\r\n if ( appendToBody ) {\r\n $document.find('body').append($popup);\r\n } else {\r\n element.after($popup);\r\n }\r\n }\r\n };\r\n\r\n}])\r\n\r\n .directive('typeaheadPopup', function () {\r\n return {\r\n restrict:'EA',\r\n scope:{\r\n matches:'=',\r\n query:'=',\r\n active:'=',\r\n position:'=',\r\n select:'&'\r\n },\r\n replace:true,\r\n templateUrl:'template/typeahead/typeahead-popup.html',\r\n link:function (scope, element, attrs) {\r\n\r\n scope.templateUrl = attrs.templateUrl;\r\n\r\n scope.isOpen = function () {\r\n return scope.matches.length > 0;\r\n };\r\n\r\n scope.isActive = function (matchIdx) {\r\n return scope.active == matchIdx;\r\n };\r\n\r\n scope.selectActive = function (matchIdx) {\r\n scope.active = matchIdx;\r\n };\r\n\r\n scope.selectMatch = function (activeIdx) {\r\n scope.select({activeIdx:activeIdx});\r\n };\r\n }\r\n };\r\n })\r\n\r\n .directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) {\r\n return {\r\n restrict:'EA',\r\n scope:{\r\n index:'=',\r\n match:'=',\r\n query:'='\r\n },\r\n link:function (scope, element, attrs) {\r\n var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html';\r\n $http.get(tplUrl, {cache: $templateCache}).success(function(tplContent){\r\n element.replaceWith($compile(tplContent.trim())(scope));\r\n });\r\n }\r\n };\r\n }])\r\n\r\n .filter('typeaheadHighlight', function() {\r\n\r\n function escapeRegexp(queryToEscape) {\r\n return queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, \"\\\\$1\");\r\n }\r\n\r\n return function(matchItem, query) {\r\n return query ? matchItem.replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem;\r\n };\r\n });","\nangular.module(\"ui.bootstrap.tpls\", [\"template/accordion/accordion-group.html\", \"template/accordion/accordion.html\", \"template/alert/alert.html\", \"template/carousel/carousel.html\", \"template/carousel/slide.html\", \"template/datepicker/datepicker.html\", \"template/datepicker/popup.html\", \"template/modal/backdrop.html\", \"template/modal/window.html\", \"template/pagination/pager.html\", \"template/pagination/pagination.html\", \"template/tooltip/tooltip-html-unsafe-popup.html\", \"template/tooltip/tooltip-popup.html\", \"template/popover/popover.html\", \"template/progressbar/bar.html\", \"template/progressbar/progress.html\", \"template/rating/rating.html\", \"template/tabs/tab.html\", \"template/tabs/tabset.html\", \"template/timepicker/timepicker.html\", \"template/typeahead/typeahead-match.html\", \"template/typeahead/typeahead-popup.html\"]);\n\r\nangular.module(\"template/accordion/accordion-group.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/accordion/accordion-group.html\", \n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \" {{heading}}\\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\t
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \");\n}]);\n\r\nangular.module(\"template/accordion/accordion.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/accordion/accordion.html\", \n \"
    \");\n}]);\n\r\nangular.module(\"template/alert/alert.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/alert/alert.html\", \n \"
    \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/carousel/carousel.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/carousel/carousel.html\", \n \"
    \\n\" +\r\n \"
      1\\\">\\n\" +\r\n \"
    1. \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \" 1\\\">\\n\" +\r\n \" 1\\\">\\n\" +\r\n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/carousel/slide.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/carousel/slide.html\", \n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/datepicker/datepicker.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/datepicker/datepicker.html\", \n \"\\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" 0\\\" class=\\\"h6\\\">\\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
    #{{label}}
    {{ getWeekNumber(row) }}\\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/datepicker/popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/datepicker/popup.html\", \n \"\\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/modal/backdrop.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/modal/backdrop.html\", \n \"
    \");\n}]);\n\r\nangular.module(\"template/modal/window.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/modal/window.html\", \n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \");\n}]);\n\r\nangular.module(\"template/pagination/pager.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/pagination/pager.html\", \n \"\");\n}]);\n\r\nangular.module(\"template/pagination/pagination.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/pagination/pagination.html\", \n \"\");\n}]);\n\r\nangular.module(\"template/tooltip/tooltip-html-unsafe-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/tooltip/tooltip-html-unsafe-popup.html\", \n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/tooltip/tooltip-popup.html\", \n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/popover/popover.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/popover/popover.html\", \n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/progressbar/bar.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/progressbar/bar.html\", \n \"
    \");\n}]);\n\r\nangular.module(\"template/progressbar/progress.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/progressbar/progress.html\", \n \"
    \");\n}]);\n\r\nangular.module(\"template/rating/rating.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/rating/rating.html\", \n \"\\n\" +\r\n \" \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/tabs/tab.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/tabs/tab.html\", \n \"
  • \\n\" +\r\n \" {{heading}}\\n\" +\r\n \"
  • \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/tabs/tabset.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/tabs/tabset.html\", \n \"\\n\" +\r\n \"
    \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/timepicker/timepicker.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/timepicker/timepicker.html\", \n \"\\n\" +\r\n \"\t\\n\" +\r\n \"\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\\n\" +\r\n \"\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\\n\" +\r\n \"\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\t\\n\" +\r\n \"\t\t\\n\" +\r\n \"\t\\n\" +\r\n \"
     
    \\n\" +\r\n \"\t\t\t\t\\n\" +\r\n \"\t\t\t:\\n\" +\r\n \"\t\t\t\t\\n\" +\r\n \"\t\t\t
     
    \\n\" +\r\n \"\");\n}]);\n\r\nangular.module(\"template/typeahead/typeahead-match.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/typeahead/typeahead-match.html\", \n \"\");\n}]);\n\r\nangular.module(\"template/typeahead/typeahead-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"template/typeahead/typeahead-popup.html\", \n \"\");\n}]);\n"]}