{"version":3,"sources":["angular-filter.js","ui-bootstrap-tpls-2.5.0.js","angular-moment.js","jquery.fileupload-angular.js","select.js","re-tree.js","ua-device-detector.js","ng-device-detector.js","angular-scroll.js"],"names":["angular","undefined","isDefined","isUndefined","isFunction","isString","isNumber","isObject","isArray","forEach","extend","copy","equals","toArray","object","Object","keys","map","key","isNull","value","objectContains","partial","el","indexOf","hasApproxPattern","word","pattern","p","i","length","index","c","j","charAt","getFirstMatches","array","n","expression","count","filter","elm","rest","convertToDecimal","num","decimal","Math","round","pow","isScope","obj","$evalAsync","$watch","isGreaterThanFilter","input","check","isGreaterThanOrEqualToFilter","isLessThanFilter","isLessThanOrEqualToFilter","isEqualToFilter","isNotEqualToFilter","isIdenticalToFilter","isNotIdenticalToFilter","containsFilter","$parse","collection","some","uniqFilter","property","uniqueItems","get","pos","self","prop","member","push","ucfirstFilter","split","ch","toUpperCase","substring","join","String","prototype","contains","apply","this","arguments","module","o1","o2","isGreaterThan",">","isGreaterThanOrEqualTo",">=","isLessThan","<","isLessThanOrEqualTo","<=","isEqualTo","==","isNotEqualTo","!=","isIdenticalTo","===","isNotIdenticalTo","!==","slice","filterWatcher","fillVal","isMemoized","memoize","concat","val","ret","ceil","joined","result","defaults","deepKeys","stack","parent","getter","setter","assign","every","properties","search","strict","comparator","toLowerCase","replace","args","Array","call","shallow","flatten","csensitive","sensitive","flag","delimiter","reversed","reverse","total","start","increment","cb","parseInt","nest","field","searchField","addKey","$key","unique","uniq","col1","col2","col","dElm","abs","compared","str","bytes","isFinite","radians","degrees","PI","max","exp","mappedArray","min","divided","divider","Number","isNaN","radix","test","toString","number","initial","reduce","prev","curr","ends","position","defaultDiacriticsRemovalap","base","letters","diacriticsMap","a","chars","trim","RegExp","reg","match","separator","times","strRepeat","sep","sub","skip","_splitted","_regexp","_matches","_temp","splice","unshift","suffix","preserve","ucfirst","titleize","$window","encodeURIComponent","encodeURI","wrap","provider","$get","$rootScope","$$cache","$$listeners","$$timeout","setTimeout","getHashKey","fName","JSON","stringify","cache","document","removeCache","event","id","targetScope","$id","filterName","hashKey","scope","$on","$$phase","window","directive","$animate","$q","$injector","$animateCss","has","link","element","attrs","expandingExpr","expanding","expandedExpr","expanded","collapsingExpr","collapsing","collapsedExpr","collapsed","horizontal","css","cssTo","getScrollFromElement","width","scrollWidth","height","scrollHeight","expandDone","removeClass","addClass","collapseDone","$eval","uibCollapse","attr","shouldCollapse","hasClass","resolve","then","to","noop","easing","overflow","restrict","elem","$observe","disabled","$set","constant","closeOthers","controller","$scope","$attrs","accordionConfig","groups","openGroup","group","isOpen","addGroup","groupScope","that","removeGroup","controllerAs","transclude","templateUrl","require","heading","panelClass","isDisabled","setHeading","accordionCtrl","openClass","toggleClass","toggleOpen","$event","which","floor","random","headingId","panelId","template","accordionGroupCtrl","uibAccordionTransclude","querySelector","html","append","$element","$interpolate","$timeout","closeable","close","dismissOnTimeout","$parent","activeClass","toggleEvent","buttonConfig","ctrls","buttonsCtrl","ngModelCtrl","uncheckableExpr","uibUncheckable","find","display","$render","$modelValue","uibBtnRadio","on","isActive","uncheckable","$apply","$setViewValue","getTrueValue","getCheckboxValue","btnCheckboxTrue","attribute","defaultValue","btnCheckboxFalse","$interval","currentInterval","isPlaying","slides","SLIDE_DIRECTION","currentIndex","active","destroyed","setActive","slide","findSlideIndex","resetTimer","cancel","restartTimer","interval","timerFn","next","pause","addSlide","sort","b","$currentTransition","select","play","getCurrentIndex","newIndex","noWrap","removeSlide","nextSlide","direction","nextIndex","enabled","data","currentIdx","phase","off","indexOfSlide","isPrevDisabled","isNextDisabled","noPause","noTransition","$watchCollection","actual","carouselCtrl","animation","className","callback","beforeAddClass","done","directionClass","removeClassFn","bind","beforeRemoveClass","service","$log","$locale","dateFilter","orderByFilter","filterFilter","localeId","formatCodeToRegex","SPECIAL_CHARACTERS_REGEXP","getFormatCodeToRegex","createFormatter","format","formatter","literalIdx","formatters","endIdx","substr","constructFormatterFromIdx","parser","currentPosStr","toInt","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","Date","parse","addDateMinutes","date","minutes","getTime","setMinutes","getMinutes","convertTimezoneToLocal","dateTimezoneOffset","getTimezoneOffset","init","parsers","regex","year","_date","setFullYear","getFullYear","month","getMonth","DATETIME_FORMATS","MONTH","SHORTMONTH","getDate","DAY","SHORTDAY","hours","milliseconds","seconds","AMPMS","matches","sign","ERANAMES","ERAS","version","major","minor","STANDALONEMONTH","getParser","f","overrideParser","isDate","baseDate","quoteIndex","inLiteral","matcher","results","tzOffset","dt","fields","getHours","getSeconds","getMilliseconds","warn","mapper","datesetter","setUTCFullYear","timesetter","setUTCHours","setHours","toTimezone","fromTimezone","ON_REGEXP","IS_REGEXP","compile","tElement","tAttrs","linkedScopes","instances","expToData","onExpMatches","uibIsClass","onExp","exps","k","addForExp","watchFn","clazz","compareWithExp","compareWithVal","newActivated","instance","lastActivated","watcher","removeScope","e","newWatchScope","removedScope","datepickerMode","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","maxDate","maxMode","minDate","minMode","monthColumns","ngModelOptions","shortcutPropagation","showWeeks","yearColumns","yearRows","datepickerConfig","$datepickerLiteralWarning","$datepickerSuppressError","dateParser","watchListeners","datepickerOptions","modes","startingDay","FIRSTDAYOFWEEK","getOption","refreshView","uniqueId","ngDisabled","dateObject","compare","activeDate","activeDateId","uid","ngModelCtrl_","$options","createChild","initDate","$isEmpty","$invalid","render","$viewValue","error","selectedDt","_refreshView","activeDt","$setValidity","createDateObject","model","today","time","label","selected","past","current","future","customClass","dateDisabled","mode","arr","size","arrays","setMode","$emit","$broadcast","move","step","years","months","toggleMode","13","32","33","34","35","36","37","38","39","40","focus","keydown","evt","shiftKey","altKey","preventDefault","stopPropagation","ctrlKey","handleKeyDown","shift","DAYS_IN_MONTH","getDaysInMonth","ctrl","getDates","startDate","dates","setDate","firstDayOfMonth","difference","getDay","numDisplayedFromPreviousMonth","firstDate","days","secondary","labels","abbr","full","title","rows","weekNumbers","thursdayIndex","numWeeks","curWeek","checkDate","setMonth","date1","date2","_date1","_date2","yearHeaderColspan","columns","range","getStartingYear","yearpickerInit","datepickerCtrl","factory","$document","SCROLLBAR_WIDTH","BODY_SCROLLBAR_WIDTH","OVERFLOW_REGEX","normal","hidden","PLACEMENT_REGEX","auto","primary","vertical","BODY_REGEX","getRawNode","nodeName","parseStyle","parseFloat","offsetParent","documentElement","getComputedStyle","scrollbarWidth","isBody","bodyElem","innerWidth","clientWidth","scrollElem","offsetWidth","remove","scrollbarPadding","elemStyle","paddingRight","paddingBottom","scrollParent","tagName","widthOverflow","right","originalRight","heightOverflow","clientHeight","bottom","originalBottom","isScrollable","includeHidden","overflowRegex","overflowY","overflowX","includeSelf","documentEl","excludeStatic","parentElement","spStyle","includeMagins","elemOffset","offset","top","marginTop","left","marginLeft","parentOffset","clientTop","scrollTop","clientLeft","scrollLeft","offsetHeight","elemBCR","getBoundingClientRect","pageYOffset","pageXOffset","viewportOffset","useDocument","includePadding","offsetBCR","offsetParentBCR","offsetParentStyle","paddingTop","paddingLeft","parsePlacement","placement","autoPlace","positionElements","hostElem","targetElem","appendToBody","yOverflow","targetWidth","targetHeight","hostElemPos","targetElemPos","targetElemStyle","adjustedSize","marginRight","marginBottom","xOverflow","adjustTop","placementClasses","containerPosition","initialHeight","currentHeight","positionArrow","innerElem","isTooltip","arrowElem","arrowCss","borderProp","borderWidth","borderRadiusProp","borderRadius","altInputFormats","clearText","closeOnDateSelection","closeText","currentText","datepickerPopup","datepickerPopupTemplateUrl","datepickerTemplateUrl","html5Types","datetime-local","onOpenFocus","showButtonBar","$compile","$position","datepickerPopupConfig","$datepickerPopupLiteralWarning","dateFormat","popupEl","datepickerEl","scrollParentEl","ngModel","$popup","isHtml5DateInput","parseDateString","viewValue","parseDate","validator","modelValue","ngRequired","documentClickBind","dpContainsTarget","popupContainsTarget","popup","target","inputKeydownBind","positionPopup","dpElement","popupPlacement","_ngModel_","datepickerAppendToBody","type","uibDatepickerPopup","oldValue","newDateFormat","Error","ng-model","ng-change","template-url","children","$formatters","$$parserName","$validators","$parsers","$viewChangeListeners","after","getText","dateSelection","debounceTime","timeoutPromise","createNew","entries","hasKey","put","values","idx","appendToOpenClass","$$multiMap","openScope","openedContainers","closeDropdown","isOnlyOpen","dropdownScope","appendTo","openedDropdowns","toClose","dropdown","open","dropdownToClose","keybindFilter","dropdownElement","getAutoClose","toggleElement","getToggleElement","getDropdownElement","focusToggleElement","dropdownElementTargeted","toggleElementTargeted","isKeynavEnabled","focusDropdownEntry","dropdownConfig","uibDropdownService","$templateRequest","templateScope","getIsOpen","$new","setIsOpen","toggleInvoker","onToggle","keynavEnabled","body","removeDropdownMenu","dropdownMenu","keyboardNav","toggle","autoClose","getElement","keyCode","elems","eq","selectedOption","wasOpen","newEl","openContainer","dropdownAppendTo","appendToEl","dropdownAppendToBody","rightalign","appendOffset","dropdownOpenClass","hasOpenClass","dropdownMenuTemplateUrl","tplContent","replaceWith","$destroy","dropdownCtrl","dropdownNested","tplUrl","toggleDropdown","aria-haspopup","aria-expanded","add","removeTop","pop","resolver","setResolver","invocables","locals","promises","invoke","all","resolves","resolveObj","resolveIter","$modalStack","backdropClass","linkFn","modalInClass","NOW_CLOSING_EVENT","setIsAsync","modalOptions","windowTopClass","modal","getTop","backdrop","currentTarget","dismiss","$isRendered","modalRenderDeferObj","defer","$$postDigest","promise","animationPromise","when","modalRendered","activeElement","modalAnimation","uibModalAnimationClass","clone","empty","enter","$$stackedMap","$uibPosition","backdropDomEl","backdropScope","OPENED_MODAL_CLASS","openedWindows","openedClasses","topModalIndex","previousTopOpenedModal","ARIA_HIDDEN_ATTRIBUTE_NAME","SNAKE_CASE_REGEXP","backdropIndex","topBackdropIndex","opened","removeModalWindow","modalInstance","elementToReceiveFocus","modalWindow","appendToElement","modalDomEl","removeAfterAnimate","modalScope","modalBodyClass","openedClass","areAnyOpen","toggleTopWindowClass","closedDeferred","backdropScopeRef","toggleSwitch","domEl","asyncDeferred","asyncPromise","afterAnimating","leave","keydownListener","isDefaultPrevented","keyboard","list","loadFocusElementList","focusChanged","isFocusInFirstItem","isModalFocused","focusLastFocusableElement","isFocusInLastItem","focusFirstFocusableElement","broadcastClosing","resultOrReason","closing","defaultPrevented","unhideBackgroundElements","querySelectorAll","hiddenEl","newHiddenCount","getAttribute","setAttribute","removeAttribute","newBackdropIndex","content","modalOpener","deferred","renderDeferred","currBackdropIndex","angularDomEl","class","ng-style","uib-modal-animation-class","modal-in-class","component","createElement","name","letter","modal-instance","windowTemplateUrl","window-top-class","role","aria-labelledby","ariaLabelledBy","aria-describedby","ariaDescribedBy","animate","tabindex","windowClass","$$topModalIndex","applyAriaHidden","getSiblings","sibling","elemIsAlreadyHidden","ariaHiddenCount","child","$$uibDestructionScheduled","reason","reject","dismissAll","topModal","srcElement","modalDomE1","elements","getClientRects","$modalProvider","options","$controller","$uibResolve","$modal","promiseChain","getPromiseChain","templateAndResolvePromise","samePromise","modalResultDeferred","modalOpenedDeferred","modalClosedDeferred","modalRenderDeferred","closed","rendered","resolveWithTemplate","tplAndVars","ctrlInstance","providedScope","$close","$dismiss","ctrlLocals","constructLocals","instanceOnScope","injectable","$resolve","$uibModalInstance","ctrlInstantiate","bindToController","$onInit","create","setNumPages","numPages","_watchers","config","itemsPerPage","totalPages","calculateTotalPages","updatePage","newTotal","oldTotal","totalItems","page","selectPage","blur","noPrevious","noNext","uibPaging","uibPagerConfig","align","previousText","nextText","paginationCtrl","uibPaginationConfig","maxSize","rotate","forceEllipses","boundaryLinkNumbers","pageLabel","$page","identity","makePage","text","boundaryLinks","directionLinks","originalRender","pages","currentPage","startPage","endPage","isMaxSized","firstText","lastText","defaultOptions","placementClassPrefix","popupDelay","popupCloseDelay","useContentExp","triggerMap","mouseenter","click","outsideClick","none","globalOptions","setTriggers","triggers","openedTooltips","keypressListener","last","ttType","prefix","defaultTriggerShow","getTriggers","trigger","show","hide","directiveName","startSym","startSymbol","endSym","endSymbol","tElem","tooltipLinker","tooltipCtrl","tooltip","tooltipLinkedScope","transitionTimeout","showTimeout","hideTimeout","positionTimeout","adjustmentTimeout","lastPlacement","hasEnableExp","ttScope","repositionScheduled","isOpenParse","contentParse","observers","positionTooltip","ttPosition","elementPos","adjustment","toggleTooltipBind","hideTooltipBind","showTooltipBind","delay","closeDelay","cancelHide","popupClass","cancelShow","assignIsOpen","removeTooltip","observer","bodyHideTooltipBind","hideOnEscapeKey","origScope","contentExp","unregisterTriggers","showTriggers","hideTriggers","appendKey","appendToBodyVal","$sce","cleanupLastIncludeContent","previousElement","currentScope","currentElement","tooltipTemplateTranscludeScope","changeCounter","parseAsResourceUrl","uibTooltipTemplateTransclude","src","thisChangeId","response","newScope","tooltipAnimationClass","$uibTooltip","originScope","uibTitle","progressConfig","getMaxOrDefault","maxParam","bars","addBar","bar","transition","recalculatePercentage","totalPercentage","percent","toFixed","removeBar","progressCtrl","stateOn","stateOff","enableReset","titles","ratingConfig","tmpTitles","ratingStates","buildTemplateObjects","states","getTitle","rate","readonly","newViewValue","onHover","reset","onLeave","onKeydown","oldIndex","findTabIndex","tabs","$postLink","previousIndex","previousSelected","tab","onDeselect","$selectedIndex","onSelect","addTab","t1","t2","newActiveIndex","removeTab","newActiveTabIndex","justified","classes","tabsetCtrl","disable","t","$transcludeFn","uibTabContentTransclude","contents","node","hasAttribute","headingElement","hourStep","minuteStep","secondStep","showMeridian","showSeconds","meridians","readonlyInput","mousewheel","arrowkeys","showSpinners","timepickerConfig","hoursModelCtrl","minutesModelCtrl","secondsModelCtrl","watchers","padHours","removeAttr","inputs","hoursInputEl","minutesInputEl","secondsInputEl","setupMousewheelEvents","setupArrowkeyEvents","setupInputEvents","noIncrementHours","incrementedSelected","addMinutes","noDecrementHours","decrementedSelected","noIncrementMinutes","noDecrementMinutes","noIncrementSeconds","addSeconds","noDecrementSeconds","noToggleMeridian","getHoursFromTemplate","meridian","getMinutesFromTemplate","pad","noPad","refresh","keyboardChange","makeValid","updateTemplate","invalidHours","invalidMinutes","invalidSeconds","addSecondsToSelected","newDate","modelIsEmpty","$error","isScrollingUp","delta","originalEvent","wheelDelta","deltaY","detail","incrementHours","decrementHours","incrementMinutes","decrementMinutes","incrementSeconds","decrementSeconds","invalidate","updateHours","updateMinutes","updateSeconds","$setDirty","$setTouched","setSeconds","toggleMeridian","uibTimepickerConfig","timepickerCtrl","TYPEAHEAD_REGEXP","itemName","source","viewMapper","modelMapper","originalScope","$$debounce","typeaheadParser","modelCtrl","hasFocus","inputsContainer","hintInputElem","HOT_KEYS","minLength","typeaheadMinLength","waitTime","newVal","typeaheadWaitMs","isEditable","typeaheadEditable","isLoadingSetter","typeaheadLoading","isSelectEvent","typeaheadShouldSelect","vals","onSelectCallback","typeaheadOnSelect","isSelectOnBlur","typeaheadSelectOnBlur","isNoResultsSetter","typeaheadNoResults","inputFormatter","typeaheadInputFormatter","typeaheadAppendToBody","typeaheadAppendTo","focusFirst","typeaheadFocusFirst","selectOnExact","typeaheadSelectOnExact","isOpenSetter","typeaheadIsOpen","showHint","typeaheadShowHint","parsedModel","invokeModelSetter","parserResult","uibTypeahead","offDestroy","popupId","popUpEl","aria-autocomplete","aria-owns","border-color","box-shadow","opacity","background","color","vertical-align","background-color","resetHint","move-in-progress","query","assign-is-open","debounce","typeaheadTemplateUrl","typeaheadPopupTemplateUrl","resetMatches","activeIdx","getMatchId","inputIsExactMatch","inputValue","getMatchesAsync","onCurrentRequest","firstLabel","recalculatePosition","debounceUpdate","debouncedRecalculate","fireRecalculating","moveInProgress","$digest","cancelPreviousTimeout","dismissClickHandler","newValue","item","$$$p","$item","$model","$label","typeaheadFocusOnSelect","shouldSelect","parentNode","offsetTop","editable","_modelCtrl","candidateViewValue","popupTemplateUrl","isDropdownOpen","matchIdx","selectActive","selectMatch","tplEl","isSanitizePresent","matchItem","trustAsHtml","run","$templateCache","$$csp","noInlineStyle","$$uibCarouselCss","prepend","$$uibDatepickerCss","$$uibPositionCss","$$uibDatepickerpopupCss","$$uibTooltipCss","$$uibTimepickerCss","$$uibTypeaheadCss","applyTimezone","aMoment","tz","angularMoment","moment","withoutSuffix","amTimeAgoConfig","currentValue","currentFormat","activeTimeout","cancelTimer","clearTimeout","updateMoment","updateTime","momentInstance","fromNow","howOld","diff","secondsUntilUpdate","amTimeAgo","amWithoutSuffix","changeLanguage","lang","angularMomentConfig","isValid","calendar","duration","humanize","define","amd","scopeEvalAsync","fileupload","addFileMethods","files","file","_index","$state","state","$processing","processing","$progress","progress","$response","$submit","submit","$cancel","abort","addFieldData","fieldName","fileData","fieldData","removeFieldData","fileId","_id","registerField","$config","handleResponse","errorThrown","textStatus","filesCopy","method","option","queue","process","always","autoUpload","fail","clear","stop","processstart","processstop","getNumberOfFiles","dataType","units","unit","fileUpload","uploadMethods","send","jQuery","support","fileInput","oldFiles","newFiles","applyOnQueue","fromJson","jqXHR","responseText","ignore","hasOwnProperty","newOptions","update","fn","loaded","fileUploadProgress","fileUploadPreview","preview","dataTransfer","setData","KEY","TAB","ENTER","ESC","SPACE","LEFT","UP","RIGHT","DOWN","SHIFT","CTRL","ALT","PAGE_UP","PAGE_DOWN","HOME","END","BACKSPACE","DELETE","COMMAND","MAP","91","8","9","16","17","18","19","20","27","43","44","45","46","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","144","145","186","187","188","189","190","191","192","219","220","221","222","isControl","metaKey","isFunctionKey","isVerticalMovement","isHorizontalMovement","toSeparator","isNil","selector","closest","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","latestId","uis","theme","searchEnabled","sortable","placeholder","refreshDelay","closeOnSelect","skipFocusser","dropdownPosition","removeSelected","resetSearchInput","generateId","spinnerEnabled","spinnerClass","backspaceReset","minErr","$$minErr","message","uisTranscludeAppend","boundingClientRect","uiSelectConfig","RepeatParser","uiSelectMinErr","repeat","groupByExp","groupBy","groupFilterExp","groupFilter","getGroupNgRepeatExpression","choices","repeatExpression","rowsInner","addEventListener","$select","parseRepeatAttr","disableChoiceExpression","uiDisableChoice","onHighlightCallback","onHighlight","minimumInputLength","multiple","activate","activeIndex","tagging","isActivated","items","$filter","$$uisDebounce","_refreshDelayPromise","EMPTY_SEARCH","paste","refreshing","focusser","fct","taggingTokens","tokens","lockChoiceExpression","clickTriggeredSelect","err","searchInput","_resetSearchInput","predicate","thisArg","findIndex","isEmpty","initSearchValue","avoidReset","container","animateHandler","taggingLabel","focusSearchInput","_ensureHighlightVisible","findGroupByName","repeatAttr","setItemsFn","groupFn","groupName","groupFilterFn","groupNames","isGrouped","itemProperty","createArrayFromObject","origSrc","originalSource","$uisSource","v","keyName","filters","oldVal","refreshItems","selectedItems","filteredItems","selectedItem","calculateDropdownPos","refreshAttr","refreshPromise","finally","itemScope","itemIndex","_isItemSelected","selection","disabledItems","_isItemDisabled","disabledItemIndex","isTag","setFocus","focusInput","isLocked","doInitalise","lockedItems","lockedItemIndex","sizeWatch","updaterScheduled","posY","highlighted","sizeSearchInput","calculateContainerWidth","updateIfVisible","containerWidth","inputWidth","offsetLeft","tagged","processed","minActiveIndex","idxmin","triggerHandler","newItem","clipboardData","getData","oldsearch","onResize","generatedId","uisOffset","exec","ngClass","combined","inputId","transcludeFn","onDocumentClick","targetController","baseTitle","focusserTitle","focusserId","onRemoveCallback","onRemove","choiceGrouped","limit","taggingEval","autofocus","focusOn","transcluded","transcludedMatch","transcludedChoices","transcludedNoChoice","style","originalWidth","resetDropdown","setDropdownPosUp","offsetDropdown","directionUpClassName","calculateDropdownPosAfterAnimation","needsCalculated","setAllowClear","allow","allowClear","uiLockChoice","activeMatchIndex","updateModel","now","refreshComponent","removeChoice","removedChoice","getPlaceholder","$selectMultiple","_findCaseInsensitiveDupe","origItem","_findApproxDupe","haystack","needle","dupeIndex","mockObj","tempArr","resultMultiple","checkFnMultiple","trackByExp","propsItemNameMatches","caretPosition","selectionStart","tagItems","tagItem","stashArr","hasTag","itemsWithoutTag","checkFnSingle","d","uiSelectSort","dragOverHandler","axis","offsetY","layerY","offsetX","layerX","droppingAfterClassName","droppingBeforeClassName","_dropHandler","droppedItemIndex","theList","itemToMove","$index","$ngModel","from","droppingClassName","dropHandler","dropTimeout","uiSelectSortOptions","draggingClassName","onOpenCloseCallback","uisOpenClose","previousState","filterMatch","grouped","string","and","or","not","res","reTree","exports","hasDontEnumBug","dontEnums","dontEnumsLength","BROWSERS","CHROME","FIREFOX","SAFARI","OPERA","IE","MS_EDGE","MS_EDGE_BETA","FB_MESSENGER","CORDOVA","UNKNOWN","DEVICES","ANDROID","I_PAD","IPHONE","I_POD","BLACKBERRY","FIREFOX_OS","CHROME_BOOK","WINDOWS_PHONE","PS4","VITA","CHROMECAST","APPLE_TV","GOOGLE_TV","MACINTOSH","OS","WINDOWS","MAC","IOS","LINUX","UNIX","CHROME_OS","OS_VERSIONS","WINDOWS_3_11","WINDOWS_95","WINDOWS_ME","WINDOWS_98","WINDOWS_CE","WINDOWS_2000","WINDOWS_XP","WINDOWS_SERVER_2003","WINDOWS_VISTA","WINDOWS_7","WINDOWS_8_1","WINDOWS_8","WINDOWS_10","WINDOWS_PHONE_7_5","WINDOWS_PHONE_8_1","WINDOWS_PHONE_10","WINDOWS_NT_4_0","MACOSX_15","MACOSX_14","MACOSX_13","MACOSX_12","MACOSX_11","MACOSX_10","MACOSX_9","MACOSX_8","MACOSX_7","MACOSX_6","MACOSX_5","MACOSX_4","MACOSX_3","MACOSX_2","MACOSX","OS_RE","BROWSERS_RE","DEVICES_RE","OS_VERSIONS_RE_OLD","OS_VERSIONS_RE_MAP","re","OS_VERSIONS_RE","BROWSER_VERSIONS_RE_MAP","BROWSER_VERSIONS_RE","parseUserAgent","modifiers","customDetectors","ua","userAgent","platform","maxTouchPoints","deviceInfo","raw","os","browser","device","os_version","previousValue","reMap","browser_version","isMobile","isTablet","isDesktop","custom","customDetector","propertyIsEnumerable","TypeError","len","defineProperty","o","kValue","uaDeviceDetector","deviceDetector","isAndroid","isIOS","addCustom","customDetectorName","customDetectorRE","navigator","customKey","duScrollDefaultEasing","x","duScroll","cancelAnimation","requestAnimation","duScrollEasing","duScrollDuration","duScrollOffset","duScrollCancelOnEvents","isDocument","HTMLDocument","nodeType","DOCUMENT_NODE","isElement","HTMLElement","ELEMENT_NODE","unwrap","scrollAnimation","proto","duScrollTo","aliasFn","duScrollToElement","duScrollToAnimated","scrollTo","animationStep","startLeft","duScrollLeft","startTop","duScrollTop","deltaLeft","deltaTop","startTime","cancelScrollAnimation","unbind","timestamp","scrollX","scrollY","duScrollToElementAnimated","duScrollTopAnimated","duScrollLeftAnimated","unprefixed","vendors","fnName","polyfill","lastTime","currTime","timeToCall","scrollContainerAPI","duScrollGreedy","duScrollSpyWait","duScrollSpyRefreshInterval","duScrollBottomSpy","duScrollActiveClass","createScrollHandler","context","handler","queued","bottomReached","spy","containerEl","containerOffset","compareProperty","documentScrollHeight","innerHeight","spies","currentlyActive","toBeActive","getTargetPosition","getTargetElement","timer","createContext","contexts","destroyContext","intervalPromise","getContextForSpy","contextId","getContextForScope","defaultContextId","addSpy","getContainer","removeSpy","getContainerId","containers","setContainer","removeContainer","$attr","href","duSmoothScroll","getElementById","getElementsByName","spyAPI","pre","iElement","iAttrs","Spy","targetElementOrId","targetId","flushTargetCache","ngHref","duScrollspy","deregisterOnStateChange"],"mappings":"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AAA,CAAA,WAAA,cAAA,mDACA,EACAc,QAAA,CACAd,GAAA,CAAA,WACA,EACAe,aAAA,CACAf,GAAA,CAAA,UACA,EACA4B,IAAA,mCACAC,KAAA,0CACAZ,QAAA,cACAD,aAAA,2BACA,EAEA4D,EAAA,CACAxD,QAAA,CACArB,IAAA,CAAA,cAAA,CACAE,IAAA,eACA,EACA,EACAoB,MAAA,WACAC,OAAA,CACAvB,IAAA,CAAA,aAAA,CACAE,IAAA,eACA,EACA,EACAsB,MAAA,WACAC,WAAA,iBACAC,WAAA,CACA1B,IAAA,CAAA,cAAA,aACA,EACA2B,YAAA,WACAC,cAAA,CACA3B,GAAA,CAAA,eAAA,oBACA,EACA4B,IAAA,mCACAE,WAAA,YACAC,SAAA,wBACAC,UAAA,eACAH,KAAA,0CACAI,UAAA,eACA,EAKA4C,EAAA,CACAnC,aAAA,QACAC,WAAA,gCACAC,WAAA,2BACAC,WAAA,qBACAC,WAAA,aACAC,aAAA,gCACAC,WAAA,8BACAC,oBAAA,iBACAC,cAAA,iBACAC,UAAA,6BACAC,YAAA,+BACAC,UAAA,6BACAC,WAAA,oBACAC,kBAAA,yBACAC,kBAAA,sBACAC,iBAAA,qBACAC,eAAA,CACA3D,IAAA,CAAA,6CAAA,CACAE,IAAA,iBACA,EACA,EACAwE,OAAA,uBACAF,SAAA,8BACAD,SAAA,8BACAD,SAAA,kBACAD,SAAA,kBACAD,SAAA,kBACAD,SAAA,kBACAD,SAAA,kBACAD,UAAA,mBACAD,UAAA,mBACAD,UAAA,mBACAD,UAAA,mBACAD,UAAA,mBACAD,UAAA,kBACA,EAEAmB,EAAA,CACA3C,QAAA,CAAA,CACA4C,GAAA,QACA54D,IAAA,cACA,EACA,CACA44D,GAAA,gCACA54D,IAAA,YACA,EACA,CACA44D,GAAA,2BACA54D,IAAA,YACA,EACA,CACA44D,GAAA,qBACA54D,IAAA,YACA,EACA,CACA44D,GAAA,aACA54D,IAAA,YACA,EACA,CACA44D,GAAA,gCACA54D,IAAA,cACA,EACA,CACA44D,GAAA,8BACA54D,IAAA,YACA,EACA,CACA44D,GAAA,iBACA54D,IAAA,qBACA,EACA,CACA44D,GAAA,iBACA54D,IAAA,eACA,EACA,CACA44D,GAAA,6BACA54D,IAAA,WACA,EACA,CACA44D,GAAA,+BACA54D,IAAA,aACA,EACA,CACA44D,GAAA,6BACA54D,IAAA,WACA,EACA,CACA44D,GAAA,oBACA54D,IAAA,YACA,EACA,CACA44D,GAAA,CACAhF,IAAA,CAAA,6CAAA,CACAE,IAAA,iBACA,EACA,EACA9zD,IAAA,gBACA,GAEAw1D,cAAA,CAAA,CACAoD,GAAA,yBACA54D,IAAA,mBACA,EACA,CACA44D,GAAA,sBACA54D,IAAA,mBACA,EACA,CACA44D,GAAA,qBACA54D,IAAA,kBACA,GAEAi2D,IAAA,CAAA,CACA2C,GAAA,uBACA54D,IAAA,UACA,EACA,CACA44D,GAAA,8BACA54D,IAAA,YACA,EACA,CACA44D,GAAA,8BACA54D,IAAA,YACA,EACA,CACA44D,GAAA,kBACA54D,IAAA,YACA,EACA,CACA44D,GAAA,kBACA54D,IAAA,YACA,EACA,CACA44D,GAAA,kBACA54D,IAAA,YACA,EACA,CACA44D,GAAA,kBACA54D,IAAA,YACA,EACA,CACA44D,GAAA,kBACA54D,IAAA,YACA,EACA,CACA44D,GAAA,mBACA54D,IAAA,aACA,EACA,CACA44D,GAAA,mBACA54D,IAAA,aACA,EACA,CACA44D,GAAA,mBACA54D,IAAA,aACA,EACA,CACA44D,GAAA,mBACA54D,IAAA,aACA,EACA,CACA44D,GAAA,mBACA54D,IAAA,aACA,EACA,CACA44D,GAAA,mBACA54D,IAAA,aACA,GAEAk2D,IAAA,CAAA,CACA0C,GAAA,iBACA54D,IAAA,SAAAiL,GACA,OAAAA,EAAA/D,QAAA,KAAA,GAAA,CACA,CACA,GACA+tD,QAAA,CAAA,CACA2D,GAAA,mBACA54D,IAAA,SAAAiL,GACA,OAAAA,CACA,CACA,EACA,EAEA4tD,EAAA/4D,OAAAC,KAAA44D,CAAA,EAAAxuD,OAAA,SAAAlI,EAAAhC,GAEA,OADAgC,EAAA8zD,EAAA91D,IAAA04D,EAAA14D,GACAgC,CACA,EAAA,EAAA,EAEA62D,EAAA,CACAxE,OAAA,CAAA,wBAAA,uBAAA,wCACAC,QAAA,CAAA,yBAAA,wBACAC,OAAA,yBACAC,MAAA,CAAA,yBAAA,sBACAC,GAAA,CAAA,wBAAA,uBACAI,QAAA,yBACAH,QAAA,sBACAC,aAAA,oBACA,EAEAmE,EAAAj5D,OAAAC,KAAA+4D,CAAA,EAAA3uD,OAAA,SAAAlI,EAAAhC,GAEA,OADAgC,EAAAoyD,EAAAp0D,IAAA64D,EAAA74D,GACAgC,CACA,EAAA,EAAA,EAkIA,SAAA+2D,EAAAr6B,GACA,IAkKAs6B,EAlKAjF,EAAAr1B,EAAAA,EAAAq1B,OAAA,GACAkF,EAAAv6B,EAAAA,EAAAu6B,gBAAA,GACAC,EAAAx6B,EAAAA,EAAAy6B,UAAA,GACAH,EAAA,CACAI,SAAA16B,EAAAA,EAAA06B,SAAA,GACAC,eAAA36B,EAAAA,EAAA26B,eAAA,EACA,EAEAC,EAAA,CACAC,IAAA,CACAJ,UAAAD,EACAF,UAAAA,EACAQ,GAAA,GACAC,QAAA,GACAC,OAAA,EACA,CACA,EA+IA,OA7IAJ,EAAAC,IAAAC,GAAA35D,OAAAC,KAAAg2D,CAAA,EAAA5rD,OAAA,SAAAlI,EAAA6zC,GAEA,OADA7zC,EAAA8zD,EAAAjgB,IAAAke,EAAAjqD,KAAAovD,EAAAZ,EAAAziB,EAAA,EACA7zC,CACA,EAAA,EAAA,EAEAs3D,EAAAC,IAAAE,QAAA55D,OAAAC,KAAAs0D,CAAA,EAAAlqD,OAAA,SAAAlI,EAAA6zC,GAEA,OADA7zC,EAAAoyD,EAAAve,IAAAke,EAAAjqD,KAAAovD,EAAAX,EAAA1iB,EAAA,EACA7zC,CACA,EAAA,EAAA,EAEAs3D,EAAAC,IAAAG,OAAA75D,OAAAC,KAAAi1D,CAAA,EAAA7qD,OAAA,SAAAlI,EAAA6zC,GAEA,OADA7zC,EAAA+yD,EAAAlf,IAAAke,EAAAjqD,KAAAovD,EAAAV,EAAA3iB,EAAA,EACA7zC,CACA,EAAA,EAAA,EAEAs3D,EAAAC,IAAAI,WAAA95D,OAAAC,KAAAu2D,CAAA,EAAAnsD,OAAA,SAAAlI,EAAA6zC,GAEA,OADA7zC,EAAAq0D,EAAAxgB,IAAAke,EAAAjqD,KAAAovD,EAAAT,EAAA5iB,EAAA,EACA7zC,CACA,EAAA,EAAA,EAEAs3D,EAAAE,GAAA,CACA1D,EAAAC,QACAD,EAAAG,IACAH,EAAAE,IACAF,EAAAd,QACAc,EAAAI,MACAJ,EAAAK,KACAL,EAAAT,WACAS,EAAAM,UACAN,EAAAP,eACArrD,OAAA,SAAA0vD,EAAAvhB,GACA,OAAAuhB,IAAA9D,EAAAhB,SAAAwE,EAAAC,IAAAC,GAAAnhB,GAAAA,EAAAuhB,CACA,EAAA9D,EAAAhB,OAAA,EAEAwE,EAAAG,QAAA,CACArF,EAAAC,OACAD,EAAAE,QACAF,EAAAG,OACAH,EAAAI,MACAJ,EAAAK,GACAL,EAAAM,QACAN,EAAAO,aACAP,EAAAS,QACAT,EAAAQ,cACA1qD,OAAA,SAAA0vD,EAAAvhB,GACA,OAAAuhB,IAAAxF,EAAAU,SAAAwE,EAAAC,IAAAE,QAAAphB,GAAAA,EAAAuhB,CACA,EAAAxF,EAAAU,OAAA,EAEAwE,EAAAI,OAAA,CACA3E,EAAAC,QACAD,EAAAE,MACAF,EAAAG,OACAH,EAAAI,MACAJ,EAAAK,WACAL,EAAAM,WACAN,EAAAO,YACAP,EAAAQ,cACAR,EAAAS,IACAT,EAAAW,WACAX,EAAAY,SACAZ,EAAAa,UACAb,EAAAU,KACAV,EAAAc,WACA3rD,OAAA,SAAA0vD,EAAAvhB,GACA,OAAAuhB,IAAA7E,EAAAD,SAAAwE,EAAAC,IAAAG,OAAArhB,GAAAA,EAAAuhB,CACA,EAAA7E,EAAAD,OAAA,EAEAwE,EAAAK,WAAA,UACAL,EAAAE,KAAA1D,EAAAhB,UACA/4C,GAAA68C,EAAAU,EAAAE,KAAA,IACAz5D,IAAA,SAAA85D,GACA,IAAA/F,EAAAC,EAAA7F,KAAAgL,EAAAW,EAAAlB,EAAA,EACA,OAAA7E,EACA,UAAA,OAAA+F,EAAA95D,KAAA85D,EAAA95D,eAAAiE,OACA61D,EAAA95D,IAEA85D,EAAA95D,IAAAqH,KAAA,KAAA0sD,EAAA,EAAA,EAGA,IAEA,CAAA,EACA//C,KAAA,SAAA3F,GACA,MAAA,CAAA,CAAAA,CACA,CAAA,KAEAkrD,EAAAK,WAAA59C,GAIAu9C,EAAAQ,gBAAA,IACAR,EAAAG,UAAArF,EAAAU,UACA6D,EAAAG,EAAAQ,EAAAG,SACA3F,EAAAC,EAAA7F,KAAAgL,EAAAP,CAAA,KAEAW,EAAAQ,gBAAAhG,EAAA,IAIAwF,EAAAS,SAAA,WACA,MAAA,CACAhF,EAAAC,QACAD,EAAAE,MACAF,EAAAG,OACAH,EAAAI,MACAJ,EAAAK,WACAL,EAAAM,WACAN,EAAAQ,cACAR,EAAAU,MACAzyD,KAAA,SAAA6yC,GACA,OAAAyjB,EAAAI,QAAA7jB,CACA,CAAA,CACA,EAEAyjB,EAAAU,SAAA,WACA,MAAA,CACAjF,EAAAE,MACAF,EAAAM,YACAryD,KAAA,SAAA6yC,GACA,OAAAyjB,EAAAI,QAAA7jB,CACA,CAAA,CACA,EAEAyjB,EAAAW,UAAA,WACA,MAAA,CACAlF,EAAAS,IACAT,EAAAO,YACAP,EAAAc,UACAd,EAAAD,SACA9xD,KAAA,SAAA6yC,GACA,OAAAyjB,EAAAI,QAAA7jB,CACA,CAAA,CACA,EAEAyjB,EAAAY,OAAAjB,EAAA/uD,OAAA,SAAAgwD,EAAAC,GAEA,OADAD,EAAAC,EAAAv9B,MAAAm3B,EAAAjqD,KAAAovD,EAAAiB,EAAAxB,EAAA,EACAuB,CACA,EAAA,EAAA,EAOAlB,EALAA,GAKAM,EALAA,GAOAE,KAAA1D,EAAAE,KAAA,aAAAgD,EAAAI,UAAA,EAAAJ,EAAAK,iBACAC,EAAAE,GAAA1D,EAAAG,IACAqD,EAAAK,WAAA,OACAL,EAAAI,OAAA3E,EAAAG,QARAoE,CACA,CA9RAz5D,OAAAC,OACAD,OAAAC,MAEAw9C,EAAAz9C,OAAAoE,UAAAq5C,eACA2W,EAAA,CAAA,CACAlqD,SAAA,IACA,EAAAqwD,qBAAA,UAAA,EAUAjG,GATAD,EAAA,CACA,WACA,iBACA,UACA,iBACA,gBACA,uBACA,gBAEAtzD,OAEA,SAAAoB,GACA,GAAA,UAAA,OAAAA,IAAA,YAAA,OAAAA,GAAA,OAAAA,GACA,MAAA,IAAAq4D,UAAA,kCAAA,EAGA,IACA92D,EAAA5C,EADAwF,EAAA,GAGA,IAAA5C,KAAAvB,EACAs7C,EAAAl2C,KAAApF,EAAAuB,CAAA,GACA4C,EAAA1C,KAAAF,CAAA,EAIA,GAAA0wD,EACA,IAAAtzD,EAAA,EAAAA,EAAAwzD,EAAAxzD,CAAA,GACA28C,EAAAl2C,KAAApF,EAAAkyD,EAAAvzD,EAAA,GACAwF,EAAA1C,KAAAywD,EAAAvzD,EAAA,EAIA,OAAAwF,CACA,IAMAgB,MAAAlD,UAAAiG,SACA/C,MAAAlD,UAAAiG,OAAA,SAAA2N,GAEA,GAAA,MAAAzT,KACA,MAAA,IAAAi2D,UAAA,oDAAA,EAEA,GAAA,YAAA,OAAAxiD,EACA,MAAA,IAAAwiD,UAAAxiD,EAAA,oBAAA,EAEA,IAGA3X,EAHAwrC,EAAA7rC,OAAAuE,IAAA,EACAk2D,EAAA5uB,EAAA9qC,SAAA,EACA2d,EAAA,EAEA,GAAA,GAAAla,UAAAzD,OACAV,EAAAmE,UAAA,OACA,CACA,KAAAka,EAAA+7C,GAAA,EAAA/7C,KAAAmtB,IACAntB,CAAA,GAEA,GAAA+7C,GAAA/7C,EACA,MAAA,IAAA87C,UAAA,6CAAA,EAEAn6D,EAAAwrC,EAAAntB,CAAA,GACA,CACA,KAAAA,EAAA+7C,EAAA/7C,CAAA,GACAA,KAAAmtB,IACAxrC,EAAA2X,EAAA3X,EAAAwrC,EAAAntB,GAAAA,EAAAmtB,CAAA,GAGA,OAAAxrC,CACA,GAIAiH,MAAAlD,UAAA8P,MACAlU,OAAA06D,eAAApzD,MAAAlD,UAAA,OAAA,CACA/D,MAAA,SAAAwpD,GAEA,GAAA,MAAAtlD,KACA,MAAA,IAAAi2D,UAAA,+BAAA,EAGA,IAAAG,EAAA36D,OAAAuE,IAAA,EAGAk2D,EAAAE,EAAA55D,SAAA,EAGA,GAAA,YAAA,OAAA8oD,EACA,MAAA,IAAA2Q,UAAA,8BAAA,EAUA,IANA,IAAA1Q,EAAAtlD,UAAA,GAGAka,EAAA,EAGAA,EAAA+7C,GAAA,CAKA,IAAAG,EAAAD,EAAAj8C,GACA,GAAAmrC,EAAAtiD,KAAAuiD,EAAA8Q,EAAAl8C,EAAAi8C,CAAA,EACA,OAAAC,EAGAl8C,CAAA,EACA,CAIA,CACA,CAAA,EAgLAzf,GACAA,EAAAwF,OAAA,mBAAA,CAAA,SAAA,EACAoM,SAAA,QAAA4nD,CAAA,EACA5nD,SAAA,cAAA6nD,CAAA,EACA7nD,SAAA,aAAA8nD,CAAA,EACA9nD,SAAA,iBAAA+nD,CAAA,EACA/nD,SAAA,0BAAAmoD,CAAA,EACAnoD,SAAA,sBAAAooD,CAAA,EACApoD,SAAA,WAAA0jD,CAAA,EACA1jD,SAAA,UAAAqkD,CAAA,EACArkD,SAAA,KAAAolD,CAAA,EACAplD,SAAA,cAAA2lD,CAAA,EACAlvC,QAAA,mBAAA,CAAA,SAAA,SAAA4sC,GACA,MAAA,CACAgF,eAAA,SAAAG,EAAAD,EAAAG,EAAAC,GACA,OAAAN,EAAA,CACAhF,OAAAA,GAAA,GACAkF,gBAAAA,GAAA,GACAE,UAAAD,GAAA,GACAE,SAAAA,EACAC,eAAAA,CACA,CAAA,CACA,EACAjF,SAAAA,EACAW,QAAAA,EACAe,GAAAA,CACA,CACA,EAAA,EAGAloD,IACAA,EAAA8sD,iBAAA,CACA3B,eAAA,SAAAG,EAAAD,EAAAG,EAAAC,GACA,OAAAN,EAAA,CACAhF,OAAAnmD,EAAAmmD,QAAA,GACAkF,gBAAAA,GAAA,GACAE,UAAAD,GAAA,GACAE,SAAAA,EACAC,eAAAA,CACA,CAAA,CACA,EACAjF,SAAAA,EACAW,QAAAA,EACAe,GAAAA,CACA,GAGAxxD,IACAyvD,EAAAnmD,GAAAA,EAAAmmD,QAAApiD,EAAA,SAAA,EACArN,EAAA0vD,QAAA,CACA+E,eAAA,SAAAG,EAAAD,EAAAG,EAAAC,GACA,OAAAN,EAAA,CACAhF,OAAAA,GAAA,GACAkF,gBAAAA,GAAA,GACAE,UAAAD,GAAA,GACAE,SAAAA,EACAC,eAAAA,CACA,CAAA,CACA,EACAjF,SAAAA,EACAW,QAAAA,EACAe,GAAAA,CACA,EAEA,GAAA,aAAA,OAAAxxD,OAAA,KAAAA,OAAA,aAAA,OAAAqN,QAAA,KAAAA,QAAA,aAAA,OAAA/D,OAAA,KAAAA,OAAA,aAAA,OAAA9O,QAAA,KAAAA,OAAA,EClsBAA,QA9DAwF,OAAA,oBAAA,CAAA,SAAA,mBAAA,EACA8T,QAAA,cAAA,CAAA,iBAAA,mBACA,SAAAuiD,EAAAD,GACA,IAAApB,EAAAqB,EAEAv2D,KAAA21D,SAAA,WACA,MAAA,YAAAT,EAAAI,MACA,EAEAt1D,KAAAw2D,UAAA,WACA,OAAAtB,EAAAI,SAAAgB,EAAA3F,QAAAC,SAAAsE,EAAAxD,KAAA4E,EAAA5E,GAAAd,OACA,EAEA5wD,KAAAy2D,MAAA,WACA,OAAAvB,EAAAE,KAAAkB,EAAA5E,GAAAG,KAAAqD,EAAAI,SAAAgB,EAAA3F,QAAAI,OACAmE,EAAAI,SAAAgB,EAAA3F,QAAAG,MACA,CACA,EACA,EACA7oD,SAAA,iBAAA,WACA,IAAA4sD,EAAA,GACA70D,KAAA02D,UAAA,SAAAC,EAAAC,GACA/B,EAAAx1D,KAAA,CAAAm5B,KAAAm+B,EAAApC,GAAAqC,CAAA,CAAA,CACA,EACA52D,KAAAkI,KAAA,CACA,UACA,mBACA,SACA,SACAL,EACAyuD,EACA3G,GAEA,IAAAmF,EAAAjtD,EAAAgvD,UAAA9B,UACAC,EAAAntD,EAAAgvD,UAAA7B,SACAC,EAAAptD,EAAAgvD,UAAA5B,eACAC,EAAAoB,EAAA3B,eAAAG,EAAAD,EAAAG,EAAAC,CAAA,EAEA,OADAC,EAAAP,eAAA,SAAAG,EAAAE,EAAAC,GAAA,OAAAqB,EAAA3B,eAAAG,EAAAD,EAAAG,EAAAC,CAAA,CAAA,EACAC,CACA,EACA,CACA,EACAzrD,UAAA,iBAAA,CAAA,iBAAA,SAAA8sD,GAKA,MAAA,CACAtqD,SAAA,IACAlC,KAAA,SAAAV,EAAAlM,GACAA,EAAAiO,SAAA,MAAAmrD,EAAAnB,EAAA,EACAj4D,EAAAiO,SAAA,WAAAmrD,EAAAlB,OAAA,EACAl4D,EAAAiO,SAAA,UAAAmrD,EAAAjB,MAAA,EACAn4D,EAAA2Q,YAAA,YAAAyoD,EAAAZ,SAAA,CAAA,EACAx4D,EAAA2Q,YAAA,YAAAyoD,EAAAX,SAAA,CAAA,EACAz4D,EAAA2Q,YAAA,aAAAyoD,EAAAV,UAAA,CAAA,EACAp6D,OAAAC,KAAA66D,EAAAT,MAAA,EAAA36D,QAAA,SAAA27D,GACA35D,EAAA2Q,YAbA,MAaAgpD,EAbAl0D,YAAA,EAAAC,QAAA,cAAA,GAAA,EAaA0zD,EAAAT,OAAAgB,EAAA,CACA,CAAA,CACA,CACA,CACA,EAAA,EC7DA,IAAAC,sBAAA,SAAAC,GAGA,OAAAA,EAAA,GACAx5D,KAAAE,IAAA,EAAAs5D,EAAA,CAAA,EAAA,EAEA,EAAAx5D,KAAAE,IAAA,GAAA,EAAAs5D,GAAA,CAAA,EAAA,CACA,EAEAC,SAAAv8D,QAAAwF,OAAA,WAAA,CACA,qBACA,wBACA,2BACA,sBACA,yBACA,EAEApE,MAAA,mBAAA,GAAA,EAEAA,MAAA,kBAAA,GAAA,EAGAA,MAAA,6BAAA,CAAA,EAEAA,MAAA,iBAAA,CAAA,CAAA,EAEAA,MAAA,iBAAA,CAAA,EAEAA,MAAA,iBAAAi7D,qBAAA,EAEAj7D,MAAA,yBAAA,+CAAA,EAEAA,MAAA,oBAAA,CAAA,CAAA,EAEAA,MAAA,sBAAA,QAAA,EAEA,aAAA,OAAAoE,QAAAA,QAAAA,OAAA0vD,UACA1vD,OAAA0vD,QAAAqH,UAIAv8D,QAAAwF,OAAA,yBAAA,CAAA,4BAAA,EACA4yC,IAAA,CAAA,UAAA,KAAA,kBAAA,mBAAA,iBAAA,mBAAA,iBAAA,yBAAA,SAAAjrC,EAAA8B,EAAAutD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAKA,SAAAC,EAAAv7D,GACA,MAAA,aAAA,OAAAw7D,cAAAx7D,aAAAw7D,cAAAx7D,EAAAy7D,UAAAz7D,EAAAy7D,WAAAz7D,EAAA07D,aACA,CAEA,SAAAC,EAAA37D,GACA,MAAA,aAAA,OAAA47D,aAAA57D,aAAA47D,aAAA57D,EAAAy7D,UAAAz7D,EAAAy7D,WAAAz7D,EAAA67D,YACA,CAEA,SAAAC,EAAA97D,GACA,OAAA27D,EAAA37D,CAAA,GAAAu7D,EAAAv7D,CAAA,EAAAA,EAAAA,EAAA,EACA,CAZA,IAgCA+7D,EAAAlgC,EAhCAmgC,EAAA,GAcAA,EAAAC,WAAA,SAAA5xC,EAAAF,EAAAgvB,EAAArpC,GACA,IAAAosD,EAMA,OALAz9D,QAAAk9D,UAAAtxC,CAAA,EACA6xC,EAAAn4D,KAAAo4D,kBACA19D,QAAAE,UAAAw6C,CAAA,IACA+iB,EAAAn4D,KAAAq4D,oBAEAF,EACAA,EAAAp4D,MAAAC,KAAAC,SAAA,GAEAhE,EAAA87D,EAAA/3D,IAAA,EACAw3D,EAAAv7D,CAAA,EACA4L,EAAAywD,SAAAhyC,EAAAF,CAAA,GAEAnqB,EAAA2qB,WAAAN,EAAArqB,KACAA,EAAAyqB,UAAAN,IACA,EAGA6xC,EAAAI,mBAAA,SAAA/xC,EAAAF,EAAAgvB,EAAArpC,GACAqpC,GAAA,CAAArpC,IACAA,EAAAqrD,GAEA,IAgCAmB,EAhCAC,EAAAx4D,KAAAy4D,aAAA,EACAC,EAAA14D,KAAA24D,YAAA,EACAC,EAAAp7D,KAAAC,MAAA6oB,EAAAkyC,CAAA,EACAK,EAAAr7D,KAAAC,MAAA2oB,EAAAsyC,CAAA,EAEAI,EAAA,KAAA3iB,EAAA,EACAl6C,EAAA+D,KAEA+4D,EAAA,SAAA/qD,IACA,CAAAA,GAAAmoC,GAAA,EAAAnoC,EAAAC,SACAspD,GACAt7D,EAAA+8D,OAAAzB,EAAAwB,CAAA,EAEA7B,EAAAc,CAAA,EACAlgC,EAAAgC,OAAA,EACAk+B,EAAA,KAEA,EA8CA,OA5CAA,GACAe,EAAA,EAEAjhC,EAAAnuB,EAAA4pB,MAAA,EAEA,IAAA6hB,GAAA,CAAAwjB,GAAA,CAAAC,GACA,IAAAzjB,GACAn5C,EAAAi8D,WAAA5xC,EAAAF,CAAA,EAEA0R,EAAAnsB,QAAA,IAIA4sD,EAAA,SAAAU,GAMAp0B,EAAAuQ,IADAe,EAAA8iB,GAHAH,EADA,OAAAA,EACAG,EAGAH,IACA,EAAA/sD,EAAAoqC,EAAAf,CAAA,EAEAn5C,EAAAq8D,SACAE,EAAAh7D,KAAAqE,KAAA+2D,EAAA/zB,CAAA,EACA6zB,EAAAl7D,KAAAqE,KAAAg3D,EAAAh0B,CAAA,CACA,EACAA,EAAA,EACAmzB,EAAAb,EAAAoB,CAAA,GAEAhB,GACAt7D,EAAA+8D,OAAAzB,EAAAwB,CAAA,EAEAf,EAAA,KACAlgC,EAAAnsB,QAAA,EAEA,EAGA1P,EAAAi8D,WAAAM,EAAAE,CAAA,EAEAnB,GACAt7D,EAAA6X,KAAAyjD,EAAAwB,CAAA,EAGAf,EAAAb,EAAAoB,CAAA,GACAzgC,EAAArE,OACA,EAEAwkC,EAAAG,kBAAA,SAAA1sC,EAAAvF,EAAAivB,EAAArpC,GACA,IAAA9P,EAAA87D,EAAA/3D,IAAA,EAIAomB,GAHA1rB,QAAAM,SAAAmrB,CAAA,GAAA3gB,CAAAA,MAAA2gB,CAAA,IACAA,EAAAmxC,GAEAt3D,KAAA24D,YAAA,EAAAZ,EAAArsC,CAAA,EAAA3E,sBAAA,EAAAX,IAAAD,GAIA,OAHAyxC,EAAA37D,CAAA,IACAmqB,GAAAnqB,EAAA8qB,sBAAA,EAAAX,KAEApmB,KAAAk4D,WAAA,EAAA9xC,EAAAgvB,EAAArpC,CAAA,CACA,EAEAksD,EAAAQ,aAAA,SAAA38D,EAAAs5C,EAAArpC,GACA,OAAArR,QAAAM,SAAAc,CAAA,EACAkE,KAAAk4D,WAAAp8D,EAAAkE,KAAA24D,YAAA,EAAAvjB,EAAArpC,CAAA,GAEA9P,EAAA87D,EAAA/3D,IAAA,EACAw3D,EAAAv7D,CAAA,EACA4L,EAAAqxD,SAAArwD,SAAAmb,gBAAA4C,YAAA/d,SAAA+mB,KAAAhJ,WAEA3qB,EAAA2qB,WACA,EACAqxC,EAAAU,YAAA,SAAA78D,EAAAs5C,EAAArpC,GACA,OAAArR,QAAAM,SAAAc,CAAA,EACAkE,KAAAk4D,WAAAl4D,KAAAy4D,aAAA,EAAA38D,EAAAs5C,EAAArpC,CAAA,GAEA9P,EAAA87D,EAAA/3D,IAAA,EACAw3D,EAAAv7D,CAAA,EACA4L,EAAAsxD,SAAAtwD,SAAAmb,gBAAA0C,WAAA7d,SAAA+mB,KAAAlJ,UAEAzqB,EAAAyqB,UACA,EAEAuxC,EAAAmB,0BAAA,SAAA1tC,EAAAvF,EAAAivB,EAAArpC,GACA,OAAA/L,KAAAo4D,kBAAA1sC,EAAAvF,EAAAivB,GAAAiiB,EAAAtrD,CAAA,CACA,EAEAksD,EAAAoB,oBAAA,SAAAjzC,EAAAgvB,EAAArpC,GACA,OAAA/L,KAAA24D,YAAAvyC,EAAAgvB,GAAAiiB,EAAAtrD,CAAA,CACA,EAEAksD,EAAAqB,qBAAA,SAAAhzC,EAAA8uB,EAAArpC,GACA,OAAA/L,KAAAy4D,aAAAnyC,EAAA8uB,GAAAiiB,EAAAtrD,CAAA,CACA,EAEArR,QAAAS,QAAA88D,EAAA,SAAA5e,EAAAz9C,GACAlB,QAAAsP,QAAAnK,UAAAjE,GAAAy9C,EAGAkgB,EAAA39D,EAAAiH,QAAA,YAAA,QAAA,EACAnI,QAAAG,YAAAH,QAAAsP,QAAAnK,UAAA05D,EAAA,IACA7+D,QAAAsP,QAAAnK,UAAA05D,GAAAlgB,EAEA,CAAA,CAEA,EAAA,EAIA3+C,QAAAwF,OAAA,oBAAA,EAAA,EACA6iB,QAAA,WAAA,CAAA,UAAA,SAAAlb,GAGA,IAAA2xD,EAAA,CAAA,SAAA,MAAA,IAAA,MAEA,OAAA,SAAAC,EAAAlkD,GACA,GAAA1N,EAAA4xD,GACA,OAAA5xD,EAAA4xD,GAGA,IADA,IACA79D,EADA6L,EAAAgyD,EAAAzkD,OAAA,EAAA,CAAA,EAAAvV,YAAA,EAAAg6D,EAAAzkD,OAAA,CAAA,EACAzY,EAAA,EAAAA,EAAAi9D,EAAAh9D,OAAAD,CAAA,GAEA,GAAAsL,EADAjM,EAAA49D,EAAAj9D,GAAAkL,GAEA,OAAAI,EAAAjM,GAGA,OAAA2Z,CACA,CACA,EAAA,EAEA7a,QAAAwF,OAAA,4BAAA,CAAA,oBAAA,EACA6iB,QAAA,mBAAA,CAAA,WAAA,WAAA,SAAA22C,EAAA5qD,GAGA,IAAA6qD,EAAA,EAUA,OAAAD,EAAA,wBATA,SAAAjmD,EAAAzJ,GACA,IAAA4vD,GAAA,IAAAnkD,MAAAK,QAAA,EACA+jD,EAAAr8D,KAAAyH,IAAA,EAAA,IAAA20D,EAAAD,EAAA,EACA3wD,EAAA8F,EAAA,WAAA2E,EAAAmmD,EAAAC,CAAA,CAAA,EACAA,CAAA,EAEA,OADAF,EAAAC,EAAAC,EACA7wD,CACA,CAEA,CACA,EAAA,EACA+Z,QAAA,kBAAA,CAAA,WAAA,WAAA,SAAA22C,EAAA5qD,GAOA,OAAA4qD,EAAA,uBAJA,SAAAjmC,GACA3kB,EAAAyC,OAAAkiB,CAAA,CACA,CAEA,CACA,EAAA,EAGA/4B,QAAAwF,OAAA,kBAAA,CAAA,8BAAA,EACA6iB,QAAA,SAAA,CAAA,aAAA,WAAA,YAAA,UAAA,YAAA,qBAAA,iBAAA,kBAAA,6BAAA,oBAAA,sBAAA,SAAA5a,EAAA2G,EAAA6B,EAAA9I,EAAAmb,EAAA82C,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAGA,SAAAC,EAAAC,GAEA,SAAAC,IACAC,EAAA,CAAA,EAoBA,IAnBA,IAUAC,EAIAC,EAAAx7D,EAbAy7D,EADAL,EAAAzU,UACA,GACA+U,EAAA,EAUAC,GALAJ,EAFA,aAAA,OAAA3C,aAAA6C,aAAA7C,aAAA6C,EAAAhD,UAAAgD,EAAAhD,WAAAgD,EAAA5C,cACA6C,EAAAD,EAAA3zC,sBAAA,EAAAX,IACA5oB,KAAAC,MAAAi9D,EAAAh0C,UAAAg0C,EAAAt1C,YAAA,GAAAs1C,EAAAzvD,eAEA4vD,EAAA73C,EAAA,GAAA4M,KAAA3kB,cAAA+X,EAAA,GAAAgB,gBAAA/Y,aACAzN,KAAAC,MAAAoK,EAAAmf,YAAAnf,EAAAizD,WAAA,GAAAD,GAEAX,GAAAM,EAAA,SAAA,OAGAO,EAAAV,EAAAU,MACAC,EAAAX,EAAAW,gBACAC,EAAAtgE,KAAAA,EAEA4B,EAAA,EAAAA,EAAAw+D,EAAAv+D,OAAAD,CAAA,IAEA0C,GADAw7D,EAAAM,EAAAx+D,IACA2+D,kBAAA,IACAT,EAAA7rD,WAEAsrD,GAAAM,GAAAv7D,EAAAmnB,IAAAq0C,EAAAt0C,OAAAw0C,EAAA,KAAAZ,GAAA,CAAA,EAAA96D,EAAAmnB,IAAAu0C,GAAA17D,EAAA+L,UAEA,CAAAiwD,GAAAA,EAAAL,GAAA37D,EAAA27D,OACAK,EAAA,CACAR,IAAAA,CACA,GACAG,GAAA37D,EAAA27D,IAQAI,KAHAC,EAAAA,GACAA,EAAAR,MAEAV,GAAA,CAAAkB,IACAD,GAAAA,EAAApsD,WACAosD,EAAApsD,SAAAzD,YAAAgvD,CAAA,EACAhyD,EAAA+W,WACA,6BACA87C,EAAApsD,SACAlU,QAAAsP,QAAAgxD,EAAAG,iBAAA,CAAA,CACA,GAEAF,IACAA,EAAArsD,SAAAxD,SAAA+uD,CAAA,EACAhyD,EAAA+W,WACA,2BACA+7C,EAAArsD,SACAlU,QAAAsP,QAAAixD,EAAAE,iBAAA,CAAA,CACA,GAEAd,EAAAW,gBAAAC,EACA,CA3DA,IAAAG,EAAA,CAAA,EAAAb,EAAA,CAAA,EA6DA,OAAAP,EAKA,WACAoB,EASAb,EAAA,CAAA,GARAD,EAAA,EACAc,EAAAtsD,EAAA,WACAssD,EAAA,CAAA,EACAb,GACAD,EAAA,CAEA,EAAAN,EAAA,CAAA,CAAA,EAIA,EAhBAM,CAiBA,CAIA,SAAAe,EAAA5uD,GACA,IAAAzD,EAAAyD,EAAAvD,IACAmxD,EAAA,CACAU,MAAA,EACA,EASA,OAPAV,EAAAC,QAAAF,EAAAC,CAAA,EACAiB,EAAAtyD,GAAAqxD,EAEA5tD,EAAAnD,IAAA,WAAA,WACAiyD,EAAA9uD,CAAA,CACA,CAAA,EAEAzD,CACA,CAEA,SAAAuyD,EAAA9uD,GACA,IAAAzD,EAAAyD,EAAAvD,IACAmxD,EAAAiB,EAAAtyD,GAAA48C,EAAAyU,EAAAzU,UACAyU,EAAAmB,iBACA7qD,EAAAY,OAAA8oD,EAAAmB,eAAA,EAEA5V,GACAA,EAAA9yC,IAAA,SAAAunD,EAAAC,OAAA,EAEA,OAAAgB,EAAAtyD,EACA,CAcA,SAAAyyD,EAAAhB,GACA,IAAAJ,EAAAqB,EAAAryD,EAAAoxD,EAAAhuD,OACA,GAAApD,EACA,OAAAsyD,EAAAtyD,CAAA,EAGA,IAAAqyD,KAAAJ,EAEA,GAAA,CAAA,KADAjB,EAAAiB,EAAAI,IACAX,MAAA7+D,QAAAu+D,CAAA,EACA,OAAAJ,CAGA,CAxIA,IAkFAiB,EAAA,GA8BAM,EAAAP,EAAAlzD,CAAA,EAEAwzD,EAAA,SAAAtyD,GACA,OAAAiyD,EAAAjyD,EAAAH,OAGAG,EAAA6F,QACAysD,EAAAtyD,EAAA6F,OAAA,EAEAosD,EAAAM,GACA,EAuDA,MAAA,CACAC,OA9BA,SAAApB,GACA,IAAAJ,EAAAoB,EAAAhB,CAAA,EACAJ,IACAA,EAAAU,MAAA17D,KAAAo7D,CAAA,EACAJ,EAAAzU,YAdA57C,IACA,KAAAA,EAAAgoC,YAEA,IADAhoC,EAAAA,EAAAgoC,cACAnpC,SACA,MAAA,CAAA,EAGA,MAAA,CAAA,CACA,GAMAwxD,EAAAzU,SAAA,IACAyU,EAAAzU,WACAyU,EAAAzU,UAAA9yC,IAAA,SAAAunD,EAAAC,OAAA,EAEAD,EAAAzU,UAAAkU,EAAAgC,aAAArB,EAAAhuD,MAAA,EACAwtD,GAAA,CAAAI,EAAAmB,kBACAnB,EAAAmB,gBAAA7qD,EAAA0pD,EAAAC,QAAAL,EAAA,EAAA,CAAA,CAAA,GAEAI,EAAAzU,UAAA51C,GAAA,SAAAqqD,EAAAC,OAAA,EAAAhR,eAAA,QAAA,GAEA,EAiBAyS,UAfA,SAAAtB,GACA,IAAAJ,EAAAoB,EAAAhB,CAAA,EAKAl+D,GAJAk+D,IAAAJ,EAAAW,kBACA7yD,EAAA+W,WAAA,6BAAAm7C,EAAAW,gBAAApsD,QAAA,EACAyrD,EAAAW,gBAAA,MAEAX,EAAAU,MAAA7+D,QAAAu+D,CAAA,GACA,CAAA,IAAAl+D,GACA89D,EAAAU,MAAAxzD,OAAAhL,EAAA,CAAA,EAEAk+D,EAAA7rD,SAAA,IACA,EAKAysD,cAAAA,EACAE,eAAAA,EACAI,mBAAAA,CACA,CACA,EAAA,EAGAjhE,QAAAwF,OAAA,8BAAA,EAAA,EACA6iB,QAAA,qBAAA,CAAA,YAAA,SAAAC,GAWA,SAAAg5C,EAAA3yD,GACA,OAAA4yD,EAAA5yD,EAAAH,KACAG,EAAAH,IAEAG,EAAA6F,QACA8sD,EAAA3yD,EAAA6F,OAAA,EADA,KAAA,CAIA,CAhBA,IAAA+sD,EAAA,GA8BA,MAAA,CACAD,eAAAA,EACAF,aAdA,SAAAzyD,GACAL,EAAAgzD,EAAA3yD,CAAA,EACA,OAAAL,EAAAizD,EAAAjzD,GAAAga,CACA,EAYAk5C,aA/BA,SAAA7yD,EAAAW,GACAhB,EAAAK,EAAAH,IAEA,OADA+yD,EAAAjzD,GAAAgB,EACAhB,CACA,EA4BAmzD,gBAXA,SAAA9yD,GACAL,EAAAgzD,EAAA3yD,CAAA,EACAL,GACA,OAAAizD,EAAAjzD,EAEA,CAOA,CACA,EAAA,EAGAtO,QAAAwF,OAAA,wBAAA,CAAA,yBAAA,8BAAA,EACAuJ,UAAA,iBAAA,CAAA,mBAAA,iBAAA,qBAAA,SAAA4tD,EAAAC,EAAAwC,GAGA,MAAA,CACA/vD,KAAA,SAAA0C,EAAAmC,EAAAwtD,GACAxtD,EAAAoB,GAAA,QAAA,SAAA8K,GACA,IAIA4Q,EAOA0pB,GAXAgnB,EAAAC,MAAA,CAAA,IAAAD,EAAAC,KAAAngE,QAAA,GAAA,GAAA,KAAAkgE,EAAAE,kBAEAtzD,EAAAozD,EAAAC,KAAAD,EAAAC,KAAAx5D,QAAA,iBAAA,EAAA,EAAAnD,UAAA,CAAA,EAAA08D,EAAAE,eAEA5wC,EAAA7iB,SAAA0zD,eAAAvzD,CAAA,GAAAH,SAAA2zD,kBAAAxzD,CAAA,EAAA,KACA0iB,EAAA3E,wBAEAjM,EAAA0F,iBAAA1F,EAAA0F,gBAAA,EACA1F,EAAAyF,gBAAAzF,EAAAyF,eAAA,EAEA4F,EAAAi2C,EAAAj2C,OAAAtiB,SAAAu4D,EAAAj2C,OAAA,EAAA,EAAAmxC,EACAliB,EAAAgnB,EAAAhnB,SAAAvxC,SAAAu4D,EAAAhnB,SAAA,EAAA,EAAAiiB,EACAyC,EAAAgC,aAAArvD,CAAA,EAEA2rD,kBACA19D,QAAAsP,QAAA0hB,CAAA,EACAlmB,MAAA2gB,CAAA,EAAA,EAAAA,EACA3gB,MAAA4vC,CAAA,EAAA,EAAAA,CACA,EACA,CAAA,CACA,CACA,CACA,EAAA,EAGA16C,QAAAwF,OAAA,sBAAA,CAAA,kBAAA,EACAuJ,UAAA,eAAA,CAAA,SAAA,SAAAgzD,GAGA,MAAA,CACAxwD,SAAA,IACA5C,MAAA,CAAA,EACAoQ,QAAA,SAAAC,EAAAC,EAAAtM,GACA,MAAA,CACAqvD,IAAA,SAAAjwD,EAAAkwD,EAAAC,EAAApwD,GACAiwD,EAAApB,cAAA5uD,CAAA,CACA,CACA,CACA,CACA,CACA,EAAA,EAGA/R,QAAAwF,OAAA,2BAAA,CAAA,8BAAA,EACAuJ,UAAA,oBAAA,CAAA,qBAAA,SAAAqwD,GAGA,MAAA,CACA7tD,SAAA,IACA5C,MAAA,CAAA,EACAoQ,QAAA,SAAAC,EAAAC,EAAAtM,GACA,MAAA,CACAqvD,IAAA,SAAAjwD,EAAAkwD,EAAAC,EAAApwD,GACAowD,EAAAzwD,SAAA,oBAAA,SAAAnC,GACAtP,QAAAK,SAAAiP,CAAA,IACAA,EAAAnB,SAAA0zD,eAAAvyD,CAAA,GAGAA,EAAAtP,QAAAk9D,UAAA5tD,CAAA,EAAAtP,QAAAsP,QAAAA,CAAA,EAAA2yD,EACA7C,EAAAoC,aAAAzvD,EAAAzC,CAAA,EACAyC,EAAAnD,IAAA,WAAA,WACAwwD,EAAAqC,gBAAA1vD,CAAA,CACA,CAAA,CACA,CAAA,CACA,CACA,CACA,CACA,CACA,EAAA,EAGA/R,QAAAwF,OAAA,qBAAA,CAAA,kBAAA,EACAuJ,UAAA,cAAA,CAAA,SAAA,iBAAA,WAAA,aAAA,SAAAgzD,EAAAnF,EAAAxoD,EAAA3G,GAGA,SAAA00D,EAAAC,EAAArwD,EAAAmC,EAAAuX,GACAzrB,QAAAk9D,UAAAkF,CAAA,EACA98D,KAAA0rB,OAAAoxC,EACApiE,QAAAK,SAAA+hE,CAAA,IACA98D,KAAA+8D,SAAAD,GAEA98D,KAAAyM,OAAAA,EACAzM,KAAA4O,SAAAA,EACA5O,KAAAmmB,OAAAA,CACA,CAsBA,OApBA02C,EAAAh9D,UAAAs7D,iBAAA,WAIA,MAHA,CAAAn7D,KAAA0rB,QAAA1rB,KAAA+8D,WACA/8D,KAAA0rB,OAAA7iB,SAAA0zD,eAAAv8D,KAAA+8D,QAAA,GAAAl0D,SAAA2zD,kBAAAx8D,KAAA+8D,QAAA,EAAA,IAEA/8D,KAAA0rB,MACA,EAEAmxC,EAAAh9D,UAAAq7D,kBAAA,WACA,IAAAxvC,EAAA1rB,KAAAm7D,iBAAA,EACA,GAAAzvC,EACA,OAAAA,EAAA3E,sBAAA,CAEA,EAEA81C,EAAAh9D,UAAAm9D,iBAAA,WACAh9D,KAAA+8D,WACA/8D,KAAA0rB,OAAA/wB,KAAAA,EAEA,EAEA,CACAoP,KAAA,SAAA0C,EAAAmC,EAAAwtD,GACA,IACAW,EAaA5vC,EAdAkvC,EAAAD,EAAAa,QAAAb,EAAAC,KAGAA,GAAA,CAAA,IAAAA,EAAAngE,QAAA,GAAA,EACA6gE,EAAAV,EAAAx5D,QAAA,iBAAA,EAAA,EAAAnD,UAAA,CAAA,EACA08D,EAAAc,YACAH,EAAAX,EAAAc,YACAd,EAAAE,iBACAS,EAAAX,EAAAE,gBAEAS,IAIA5vC,EAAAre,EAAA,WACA,IAAA2rD,EAAA,IAAAoC,EAAAE,EAAAtwD,EAAAmC,EAAA,EAAAwtD,EAAAj2C,OAAAtiB,SAAAu4D,EAAAj2C,OAAA,EAAA,EAAAmxC,EAAA,EAIA6F,GAHAV,EAAAZ,OAAApB,CAAA,EAEAhuD,EAAAnD,IAAA,yBAAAmxD,EAAAuC,iBAAAlpD,KAAA2mD,CAAA,CAAA,EACAtyD,EAAAmB,IAAA,sBAAAmxD,EAAAuC,iBAAAlpD,KAAA2mD,CAAA,CAAA,GACAhuD,EAAAnD,IAAA,WAAA,WACAmzD,EAAAV,UAAAtB,CAAA,EACA0C,EAAA,CACA,CAAA,CACA,EAAA,EAAA,CAAA,CAAA,EACA1wD,EAAAnD,IAAA,WAAA,WAAAwF,EAAAyC,OAAA4b,CAAA,CAAA,CAAA,EACA,CACA,CACA,EAAA","file":"angular-extensions.min.js","sourcesContent":["/**\r\n * Bunch of useful filters for angularJS(with no external dependencies!)\r\n * @version v0.5.17 - 2017-09-22 * @link https://github.com/a8m/angular-filter\r\n * @author Ariel Mashraki \r\n * @license MIT License, http://www.opensource.org/licenses/MIT\r\n */\r\n(function ( window, angular, undefined ) {\r\n/*jshint globalstrict:true*/\r\n'use strict';\r\n\r\nvar isDefined = angular.isDefined,\r\n isUndefined = angular.isUndefined,\r\n isFunction = angular.isFunction,\r\n isString = angular.isString,\r\n isNumber = angular.isNumber,\r\n isObject = angular.isObject,\r\n isArray = angular.isArray,\r\n forEach = angular.forEach,\r\n extend = angular.extend,\r\n copy = angular.copy,\r\n equals = angular.equals;\r\n\r\n\r\n/**\r\n * @description\r\n * get an object and return array of values\r\n * @param object\r\n * @returns {Array}\r\n */\r\nfunction toArray(object) {\r\n return isArray(object) \r\n ? object \r\n : Object.keys(object).map(function(key) {\r\n return object[key];\r\n });\r\n}\r\n\r\n/**\r\n * @param value\r\n * @returns {boolean}\r\n */\r\nfunction isNull(value) {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * @description\r\n * return if object contains partial object\r\n * @param partial{object}\r\n * @param object{object}\r\n * @returns {boolean}\r\n */\r\nfunction objectContains(partial, object) {\r\n var keys = Object.keys(partial);\r\n\r\n return keys.map(function(el) {\r\n return (object[el] !== undefined) && (object[el] == partial[el]);\r\n }).indexOf(false) == -1;\r\n\r\n}\r\n\r\n/**\r\n * @description\r\n * search for approximate pattern in string\r\n * @param word\r\n * @param pattern\r\n * @returns {*}\r\n */\r\nfunction hasApproxPattern(word, pattern) {\r\n // cheaper version of indexOf; instead of creating each\r\n // iteration new str.\r\n function indexOf(word, p, c) {\r\n var j = 0;\r\n while ((p + j) <= word.length) {\r\n if (word.charAt(p + j) == c) return j;\r\n j++;\r\n }\r\n return -1;\r\n }\r\n var p = 0;\r\n for (var i = 0; i <= pattern.length; i++) {\r\n var index = indexOf(word, p, pattern.charAt(i));\r\n if (index == -1) return false;\r\n p += index + 1;\r\n }\r\n return true\r\n}\r\n\r\n/**\r\n * @description\r\n * return the first n element of an array,\r\n * if expression provided, is returns as long the expression return truthy\r\n * @param array\r\n * @param n {number}\r\n * @param expression {$parse}\r\n * @return array or single object\r\n */\r\nfunction getFirstMatches(array, n, expression) {\r\n var count = 0;\r\n\r\n return array.filter(function(elm) {\r\n var rest = isDefined(expression) ? (count < n && expression(elm)) : count < n;\r\n count = rest ? count+1 : count;\r\n\r\n return rest;\r\n });\r\n}\r\n/**\r\n * Polyfill to ECMA6 String.prototype.contains\r\n */\r\nif (!String.prototype.contains) {\r\n String.prototype.contains = function() {\r\n return String.prototype.indexOf.apply(this, arguments) !== -1;\r\n };\r\n}\r\n\r\n/**\r\n * @param num {Number}\r\n * @param decimal {Number}\r\n * @returns {Number}\r\n */\r\nfunction convertToDecimal(num, decimal){\r\n return Math.round(num * Math.pow(10,decimal)) / (Math.pow(10, decimal));\r\n}\r\n\r\n/**\r\n * @description\r\n * Get an object, and return an array composed of it's properties names(nested too).\r\n * @param obj {Object}\r\n * @param stack {Array}\r\n * @param parent {String}\r\n * @returns {Array}\r\n * @example\r\n * parseKeys({ a:1, b: { c:2, d: { e: 3 } } }) ==> [\"a\", \"b.c\", \"b.d.e\"]\r\n */\r\nfunction deepKeys(obj, stack, parent) {\r\n stack = stack || [];\r\n var keys = Object.keys(obj);\r\n\r\n keys.forEach(function(el) {\r\n //if it's a nested object\r\n if(isObject(obj[el]) && !isArray(obj[el])) {\r\n //concatenate the new parent if exist\r\n var p = parent ? parent + '.' + el : parent;\r\n deepKeys(obj[el], stack, p || el);\r\n } else {\r\n //create and save the key\r\n var key = parent ? parent + '.' + el : el;\r\n stack.push(key)\r\n }\r\n });\r\n return stack\r\n}\r\n\r\n/**\r\n * @description\r\n * Test if given object is a Scope instance\r\n * @param obj\r\n * @returns {Boolean}\r\n */\r\nfunction isScope(obj) {\r\n return obj && obj.$evalAsync && obj.$watch;\r\n}\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name a8m.angular\r\n * @kind function\r\n *\r\n * @description\r\n * reference to angular function\r\n */\r\n\r\nangular.module('a8m.angular', [])\r\n\r\n .filter('isUndefined', function () {\r\n return function (input) {\r\n return angular.isUndefined(input);\r\n }\r\n })\r\n .filter('isDefined', function() {\r\n return function (input) {\r\n return angular.isDefined(input);\r\n }\r\n })\r\n .filter('isFunction', function() {\r\n return function (input) {\r\n return angular.isFunction(input);\r\n }\r\n })\r\n .filter('isString', function() {\r\n return function (input) {\r\n return angular.isString(input)\r\n }\r\n })\r\n .filter('isNumber', function() {\r\n return function (input) {\r\n return angular.isNumber(input);\r\n }\r\n })\r\n .filter('isArray', function() {\r\n return function (input) {\r\n return angular.isArray(input);\r\n }\r\n })\r\n .filter('isObject', function() {\r\n return function (input) {\r\n return angular.isObject(input);\r\n }\r\n })\r\n .filter('isEqual', function() {\r\n return function (o1, o2) {\r\n return angular.equals(o1, o2);\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name a8m.conditions\r\n * @kind function\r\n *\r\n * @description\r\n * reference to math conditions\r\n */\r\n angular.module('a8m.conditions', [])\r\n\r\n .filter({\r\n isGreaterThan : isGreaterThanFilter,\r\n '>' : isGreaterThanFilter,\r\n\r\n isGreaterThanOrEqualTo : isGreaterThanOrEqualToFilter,\r\n '>=' : isGreaterThanOrEqualToFilter,\r\n\r\n isLessThan : isLessThanFilter,\r\n '<' : isLessThanFilter,\r\n\r\n isLessThanOrEqualTo : isLessThanOrEqualToFilter,\r\n '<=' : isLessThanOrEqualToFilter,\r\n\r\n isEqualTo : isEqualToFilter,\r\n '==' : isEqualToFilter,\r\n\r\n isNotEqualTo : isNotEqualToFilter,\r\n '!=' : isNotEqualToFilter,\r\n\r\n isIdenticalTo : isIdenticalToFilter,\r\n '===' : isIdenticalToFilter,\r\n\r\n isNotIdenticalTo : isNotIdenticalToFilter,\r\n '!==' : isNotIdenticalToFilter\r\n });\r\n\r\n function isGreaterThanFilter() {\r\n return function (input, check) {\r\n return input > check;\r\n };\r\n }\r\n\r\n function isGreaterThanOrEqualToFilter() {\r\n return function (input, check) {\r\n return input >= check;\r\n };\r\n }\r\n\r\n function isLessThanFilter() {\r\n return function (input, check) {\r\n return input < check;\r\n };\r\n }\r\n\r\n function isLessThanOrEqualToFilter() {\r\n return function (input, check) {\r\n return input <= check;\r\n };\r\n }\r\n\r\n function isEqualToFilter() {\r\n return function (input, check) {\r\n return input == check;\r\n };\r\n }\r\n\r\n function isNotEqualToFilter() {\r\n return function (input, check) {\r\n return input != check;\r\n };\r\n }\r\n\r\n function isIdenticalToFilter() {\r\n return function (input, check) {\r\n return input === check;\r\n };\r\n }\r\n\r\n function isNotIdenticalToFilter() {\r\n return function (input, check) {\r\n return input !== check;\r\n };\r\n }\r\n/**\r\n * @ngdoc filter\r\n * @name isNull\r\n * @kind function\r\n *\r\n * @description\r\n * checks if value is null or not\r\n * @return Boolean\r\n */\r\nangular.module('a8m.is-null', [])\r\n .filter('isNull', function () {\r\n return function(input) {\r\n return isNull(input);\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name after-where\r\n * @kind function\r\n *\r\n * @description\r\n * get a collection and properties object, and returns all of the items\r\n * in the collection after the first that found with the given properties.\r\n *\r\n */\r\nangular.module('a8m.after-where', [])\r\n .filter('afterWhere', function() {\r\n return function (collection, object) {\r\n\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n if(!isArray(collection) || isUndefined(object)) return collection;\r\n\r\n var index = collection.map( function( elm ) {\r\n return objectContains(object, elm);\r\n }).indexOf( true );\r\n\r\n return collection.slice((index === -1) ? 0 : index);\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name after\r\n * @kind function\r\n *\r\n * @description\r\n * get a collection and specified count, and returns all of the items\r\n * in the collection after the specified count.\r\n *\r\n */\r\n\r\nangular.module('a8m.after', [])\r\n .filter('after', function() {\r\n return function (collection, count) {\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n return (isArray(collection))\r\n ? collection.slice(count)\r\n : collection;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name before-where\r\n * @kind function\r\n *\r\n * @description\r\n * get a collection and properties object, and returns all of the items\r\n * in the collection before the first that found with the given properties.\r\n */\r\nangular.module('a8m.before-where', [])\r\n .filter('beforeWhere', function() {\r\n return function (collection, object) {\r\n\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n if(!isArray(collection) || isUndefined(object)) return collection;\r\n\r\n var index = collection.map( function( elm ) {\r\n return objectContains(object, elm);\r\n }).indexOf( true );\r\n\r\n return collection.slice(0, (index === -1) ? collection.length : ++index);\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name before\r\n * @kind function\r\n *\r\n * @description\r\n * get a collection and specified count, and returns all of the items\r\n * in the collection before the specified count.\r\n */\r\nangular.module('a8m.before', [])\r\n .filter('before', function() {\r\n return function (collection, count) {\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n return (isArray(collection))\r\n ? collection.slice(0, (!count) ? count : --count)\r\n : collection;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name chunkBy\r\n * @kind function\r\n *\r\n * @description\r\n * Collect data into fixed-length chunks or blocks\r\n */\r\n\r\nangular.module('a8m.chunk-by', ['a8m.filter-watcher'])\r\n .filter('chunkBy', ['filterWatcher', function (filterWatcher) {\r\n return function (array, n, fillVal) {\r\n\r\n return filterWatcher.isMemoized('chunkBy', arguments) ||\r\n filterWatcher.memoize('chunkBy', arguments, this,\r\n _chunkBy(array, n, fillVal));\r\n /**\r\n * @description\r\n * Get array with size `n` in `val` inside it.\r\n * @param n\r\n * @param val\r\n * @returns {Array}\r\n */\r\n function fill(n, val) {\r\n var ret = [];\r\n while (n--) ret[n] = val;\r\n return ret;\r\n }\r\n\r\n function _chunkBy(array, n, fillVal) {\r\n if (!isArray(array)) return array;\r\n return array.map(function (el, i, self) {\r\n i = i * n;\r\n el = self.slice(i, i + n);\r\n return !isUndefined(fillVal) && el.length < n\r\n ? el.concat(fill(n - el.length, fillVal))\r\n : el;\r\n }).slice(0, Math.ceil(array.length / n));\r\n }\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name concat\r\n * @kind function\r\n *\r\n * @description\r\n * get (array/object, object/array) and return merged collection\r\n */\r\nangular.module('a8m.concat', [])\r\n .filter('concat', [function () {\r\n return function (collection, joined) {\r\n\r\n if (isUndefined(joined)) return collection;\r\n\r\n if (isArray(collection)) {\r\n return isObject(joined)\r\n ? collection.concat(toArray(joined))\r\n : collection.concat(joined);\r\n }\r\n\r\n if (isObject(collection)) {\r\n var array = toArray(collection);\r\n return (isObject(joined))\r\n ? array.concat(toArray(joined))\r\n : array.concat(joined);\r\n }\r\n return collection;\r\n };\r\n }\r\n]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name contains\r\n * @kind function\r\n *\r\n * @description\r\n * Checks if given expression is present in one or more object in the collection\r\n */\r\nangular.module('a8m.contains', [])\r\n .filter({\r\n contains: ['$parse', containsFilter],\r\n some: ['$parse', containsFilter]\r\n });\r\n\r\nfunction containsFilter($parse) {\r\n return function (collection, expression) {\r\n\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n if(!isArray(collection) || isUndefined(expression)) {\r\n return false;\r\n }\r\n\r\n return collection.some(function(elm) {\r\n return ((isString(expression) && isObject(elm)) || isFunction(expression))\r\n ? $parse(expression)(elm)\r\n : elm === expression;\r\n });\r\n\r\n }\r\n }\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name countBy\r\n * @kind function\r\n *\r\n * @description\r\n * Sorts a list into groups and returns a count for the number of objects in each group.\r\n */\r\n\r\nangular.module('a8m.count-by', [])\r\n\r\n .filter('countBy', [ '$parse', function ( $parse ) {\r\n return function (collection, property) {\r\n\r\n var result = {},\r\n get = $parse(property),\r\n prop;\r\n\r\n collection = (isObject(collection)) ? toArray(collection) : collection;\r\n\r\n if(!isArray(collection) || isUndefined(property)) {\r\n return collection;\r\n }\r\n\r\n collection.forEach( function( elm ) {\r\n prop = get(elm);\r\n\r\n if(!result[prop]) {\r\n result[prop] = 0;\r\n }\r\n\r\n result[prop]++;\r\n });\r\n\r\n return result;\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name defaults\r\n * @kind function\r\n *\r\n * @description\r\n * defaultsFilter allows to specify a default fallback value for properties that resolve to undefined.\r\n */\r\nangular.module('a8m.defaults', [])\r\n .filter('defaults', ['$parse', function( $parse ) {\r\n return function(collection, defaults) {\r\n\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n if(!isArray(collection) || !isObject(defaults)) {\r\n return collection;\r\n }\r\n\r\n var keys = deepKeys(defaults);\r\n\r\n collection.forEach(function(elm) {\r\n //loop through all the keys\r\n keys.forEach(function(key) {\r\n var getter = $parse(key);\r\n var setter = getter.assign;\r\n //if it's not exist\r\n if(isUndefined(getter(elm))) {\r\n //get from defaults, and set to the returned object\r\n setter(elm, getter(defaults))\r\n }\r\n });\r\n });\r\n\r\n return collection;\r\n }\r\n }]);\r\n/**\r\n * @ngdoc filter\r\n * @name every\r\n * @kind function\r\n *\r\n * @description\r\n * Checks if given expression is present in all members in the collection\r\n *\r\n */\r\nangular.module('a8m.every', [])\r\n .filter('every', ['$parse', function($parse) {\r\n return function (collection, expression) {\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n if(!isArray(collection) || isUndefined(expression)) {\r\n return true;\r\n }\r\n\r\n return collection.every( function(elm) {\r\n return (isObject(elm) || isFunction(expression))\r\n ? $parse(expression)(elm)\r\n : elm === expression;\r\n });\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name filterBy\r\n * @kind function\r\n *\r\n * @description\r\n * filter by specific properties, avoid the rest\r\n */\r\nangular.module('a8m.filter-by', [])\r\n .filter('filterBy', ['$parse', function( $parse ) {\r\n return function(collection, properties, search, strict) {\r\n var comparator;\r\n\r\n search = (isString(search) || isNumber(search)) ?\r\n String(search).toLowerCase() : undefined;\r\n\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n if(!isArray(collection) || isUndefined(search)) {\r\n return collection;\r\n }\r\n\r\n return collection.filter(function(elm) {\r\n return properties.some(function(prop) {\r\n\r\n /**\r\n * check if there is concatenate properties\r\n * example:\r\n * object: { first: 'foo', last:'bar' }\r\n * filterBy: ['first + last'] => search by full name(i.e 'foo bar')\r\n */\r\n if(!~prop.indexOf('+')) {\r\n comparator = $parse(prop)(elm)\r\n } else {\r\n var propList = prop.replace(/\\s+/g, '').split('+');\r\n comparator = propList\r\n .map(function(prop) { return $parse(prop)(elm); })\r\n .join(' ');\r\n }\r\n\r\n if (!isString(comparator) && !isNumber(comparator)) {\r\n return false;\r\n }\r\n\r\n comparator = String(comparator).toLowerCase();\r\n\r\n return strict ? comparator === search : comparator.contains(search);\r\n });\r\n });\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name first\r\n * @kind function\r\n *\r\n * @description\r\n * Gets the first element or first n elements of an array\r\n * if callback is provided, is returns as long the callback return truthy\r\n */\r\nangular.module('a8m.first', [])\r\n .filter('first', ['$parse', function( $parse ) {\r\n return function(collection) {\r\n var n\r\n , getter\r\n , args;\r\n\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n if(!isArray(collection)) {\r\n return collection;\r\n }\r\n\r\n args = Array.prototype.slice.call(arguments, 1);\r\n n = (isNumber(args[0])) ? args[0] : 1;\r\n getter = (!isNumber(args[0])) ? args[0] : (!isNumber(args[1])) ? args[1] : undefined;\r\n\r\n return (args.length) ? getFirstMatches(collection, n,(getter) ? $parse(getter) : getter) :\r\n collection[0];\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name flatten\r\n * @kind function\r\n *\r\n * @description\r\n * Flattens a nested array (the nesting can be to any depth).\r\n * If you pass shallow, the array will only be flattened a single level\r\n */\r\nangular.module('a8m.flatten', [])\r\n .filter('flatten', function () {\r\n return function(collection, shallow) {\r\n\r\n shallow = shallow || false;\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n if(!isArray(collection)) {\r\n return collection;\r\n }\r\n\r\n return !shallow\r\n ? flatten(collection, 0)\r\n : [].concat.apply([], collection);\r\n }\r\n });\r\n\r\n/**\r\n * flatten nested array (the nesting can be to any depth).\r\n * @param array {Array}\r\n * @param i {int}\r\n * @returns {Array}\r\n * @private\r\n */\r\nfunction flatten(array, i) {\r\n i = i || 0;\r\n\r\n if(i >= array.length)\r\n return array;\r\n\r\n if(isArray(array[i])) {\r\n return flatten(array.slice(0,i)\r\n .concat(array[i], array.slice(i+1)), i);\r\n }\r\n return flatten(array, i+1);\r\n}\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name fuzzyByKey\r\n * @kind function\r\n *\r\n * @description\r\n * fuzzy string searching by key\r\n */\r\nangular.module('a8m.fuzzy-by', [])\r\n .filter('fuzzyBy', ['$parse', function ( $parse ) {\r\n return function (collection, property, search, csensitive) {\r\n\r\n var sensitive = csensitive || false,\r\n prop, getter;\r\n\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n if(!isArray(collection) || isUndefined(property)\r\n || isUndefined(search)) {\r\n return collection;\r\n }\r\n\r\n getter = $parse(property);\r\n\r\n return collection.filter(function(elm) {\r\n\r\n prop = getter(elm);\r\n if(!isString(prop)) {\r\n return false;\r\n }\r\n\r\n prop = (sensitive) ? prop : prop.toLowerCase();\r\n search = (sensitive) ? search : search.toLowerCase();\r\n\r\n return hasApproxPattern(prop, search) !== false\r\n })\r\n }\r\n\r\n }]);\r\n/**\r\n * @ngdoc filter\r\n * @name fuzzy\r\n * @kind function\r\n *\r\n * @description\r\n * fuzzy string searching for array of strings, objects\r\n */\r\nangular.module('a8m.fuzzy', [])\r\n .filter('fuzzy', function () {\r\n return function (collection, search, csensitive) {\r\n var sensitive = csensitive || false;\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n if(!isArray(collection) || isUndefined(search)) {\r\n return collection;\r\n }\r\n\r\n search = (sensitive) ? search : search.toLowerCase();\r\n\r\n return collection.filter(function(elm) {\r\n if(isString(elm)) {\r\n elm = (sensitive) ? elm : elm.toLowerCase();\r\n return hasApproxPattern(elm, search) !== false\r\n }\r\n return (isObject(elm)) ? _hasApproximateKey(elm, search) : false;\r\n });\r\n\r\n /**\r\n * checks if object has key{string} that match\r\n * to fuzzy search pattern\r\n * @param object\r\n * @param search\r\n * @returns {boolean}\r\n * @private\r\n */\r\n function _hasApproximateKey(object, search) {\r\n var properties = Object.keys(object),\r\n prop, flag;\r\n return 0 < properties.filter(function (elm) {\r\n prop = object[elm];\r\n\r\n //avoid iteration if we found some key that equal[performance]\r\n if(flag) return true;\r\n\r\n if (isString(prop)) {\r\n prop = (sensitive) ? prop : prop.toLowerCase();\r\n return flag = (hasApproxPattern(prop, search) !== false);\r\n }\r\n\r\n return false;\r\n\r\n }).length;\r\n }\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name groupBy\r\n * @kind function\r\n *\r\n * @description\r\n * Create an object composed of keys generated from the result of running each element of a collection,\r\n * each key is an array of the elements.\r\n */\r\n\r\nangular.module('a8m.group-by', [ 'a8m.filter-watcher' ])\r\n .filter('groupBy', [ '$parse', 'filterWatcher', function ( $parse, filterWatcher ) {\r\n return function (collection, property) {\r\n\r\n if(!isObject(collection) || isUndefined(property)) {\r\n return collection;\r\n }\r\n\r\n return filterWatcher.isMemoized('groupBy', arguments) ||\r\n filterWatcher.memoize('groupBy', arguments, this,\r\n _groupBy(collection, $parse(property)));\r\n\r\n /**\r\n * groupBy function\r\n * @param collection\r\n * @param getter\r\n * @returns {{}}\r\n */\r\n function _groupBy(collection, getter) {\r\n var result = {};\r\n var prop;\r\n\r\n forEach( collection, function( elm ) {\r\n prop = getter(elm);\r\n\r\n if(!result[prop]) {\r\n result[prop] = [];\r\n }\r\n result[prop].push(elm);\r\n });\r\n return result;\r\n }\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name isEmpty\r\n * @kind function\r\n *\r\n * @description\r\n * get collection or string and return if it empty\r\n */\r\nangular.module('a8m.is-empty', [])\r\n .filter('isEmpty', function () {\r\n return function(collection) {\r\n return isObject(collection)\r\n ? !toArray(collection).length\r\n : !collection.length;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name join\r\n * @kind function\r\n *\r\n * @description\r\n * join a collection by a provided delimiter (space by default)\r\n */\r\nangular.module('a8m.join', [])\r\n .filter('join', function () {\r\n return function (input, delimiter) {\r\n if (isUndefined(input) || !isArray(input)) {\r\n return input;\r\n }\r\n if (isUndefined(delimiter)) delimiter = ' ';\r\n\r\n return input.join(delimiter);\r\n };\r\n })\r\n;\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name last\r\n * @kind function\r\n *\r\n * @description\r\n * Gets the last element or last n elements of an array\r\n * if callback is provided, is returns as long the callback return truthy\r\n */\r\nangular.module('a8m.last', [])\r\n .filter('last', ['$parse', function( $parse ) {\r\n return function(collection) {\r\n var n\r\n , getter\r\n , args\r\n //cuz reverse change our src collection\r\n //and we don't want side effects\r\n , reversed = copy(collection);\r\n\r\n reversed = isObject(reversed)\r\n ? toArray(reversed)\r\n : reversed;\r\n\r\n if(!isArray(reversed)) {\r\n return reversed;\r\n }\r\n\r\n args = Array.prototype.slice.call(arguments, 1);\r\n n = (isNumber(args[0])) ? args[0] : 1;\r\n getter = (!isNumber(args[0])) ? args[0] : (!isNumber(args[1])) ? args[1] : undefined;\r\n\r\n return (args.length)\r\n //send reversed collection as arguments, and reverse it back as result\r\n ? getFirstMatches(reversed.reverse(), n,(getter) ? $parse(getter) : getter).reverse()\r\n //get the last element\r\n : reversed[reversed.length-1];\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name map\r\n * @kind function\r\n *\r\n * @description\r\n * Returns a new collection of the results of each expression execution.\r\n */\r\nangular.module('a8m.map', [])\r\n .filter('map', ['$parse', function($parse) {\r\n return function (collection, expression) {\r\n\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n if(!isArray(collection) || isUndefined(expression)) {\r\n return collection;\r\n }\r\n\r\n return collection.map(function (elm) {\r\n return $parse(expression)(elm);\r\n });\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name omit\r\n * @kind function\r\n *\r\n * @description\r\n * filter collection by expression\r\n */\r\n\r\nangular.module('a8m.omit', [])\r\n\r\n .filter('omit', ['$parse', function($parse) {\r\n return function (collection, expression) {\r\n\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n if(!isArray(collection) || isUndefined(expression)) {\r\n return collection;\r\n }\r\n\r\n return collection.filter(function (elm) {\r\n return !($parse(expression)(elm));\r\n });\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name pick\r\n * @kind function\r\n *\r\n * @description\r\n * filter collection by expression\r\n */\r\n\r\nangular.module('a8m.pick', [])\r\n\r\n .filter('pick', ['$parse', function($parse) {\r\n return function (collection, expression) {\r\n\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n if(!isArray(collection) || isUndefined(expression)) {\r\n return collection;\r\n }\r\n\r\n return collection.filter(function (elm) {\r\n return $parse(expression)(elm);\r\n });\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name range\r\n * @kind function\r\n *\r\n * @description\r\n * rangeFilter provides some support for a for loop using numbers\r\n */\r\nangular.module('a8m.range', [])\r\n .filter('range', function () {\r\n return function (input, total, start, increment, cb) {\r\n start = start || 0;\r\n increment = increment || 1;\r\n for (var i = 0; i < parseInt(total); i++) {\r\n var j = start + i * increment;\r\n input.push(isFunction(cb) ? cb(j) : j);\r\n }\r\n return input;\r\n };\r\n });\r\n/**\r\n * @ngdoc filter\r\n * @name removeWith\r\n * @kind function\r\n *\r\n * @description\r\n * get collection and properties object, and removed elements\r\n * with this properties\r\n */\r\n\r\nangular.module('a8m.remove-with', [])\r\n .filter('removeWith', function() {\r\n return function (collection, object) {\r\n\r\n if(isUndefined(object)) {\r\n return collection;\r\n }\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n return collection.filter(function (elm) {\r\n return !objectContains(object, elm);\r\n });\r\n }\r\n });\r\n\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name remove\r\n * @kind function\r\n *\r\n * @description\r\n * remove specific members from collection\r\n */\r\n\r\nangular.module('a8m.remove', [])\r\n\r\n .filter('remove', function () {\r\n return function (collection) {\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if(!isArray(collection)) {\r\n return collection;\r\n }\r\n\r\n return collection.filter( function( member ) {\r\n return !args.some(function(nest) {\r\n return equals(nest, member);\r\n })\r\n });\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name reverse\r\n * @kind function\r\n *\r\n * @description\r\n * Reverses a string or collection\r\n */\r\nangular.module('a8m.reverse', [])\r\n .filter('reverse',[ function () {\r\n return function (input) {\r\n input = isObject(input) ? toArray(input) : input;\r\n\r\n if(isString(input)) {\r\n return input.split('').reverse().join('');\r\n }\r\n\r\n return isArray(input)\r\n ? input.slice().reverse()\r\n : input;\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name searchField\r\n * @kind function\r\n *\r\n * @description\r\n * for each member, join several strings field and add them to\r\n * new field called 'searchField' (use for search filtering)\r\n */\r\nangular.module('a8m.search-field', [])\r\n .filter('searchField', ['$parse', function ($parse) {\r\n return function (collection) {\r\n\r\n var get, field;\r\n\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if(!isArray(collection) || !args.length) {\r\n return collection;\r\n }\r\n\r\n return collection.map(function(member) {\r\n\r\n field = args.map(function(field) {\r\n get = $parse(field);\r\n return get(member);\r\n }).join(' ');\r\n\r\n return extend(member, { searchField: field });\r\n });\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name toArray\r\n * @kind function\r\n *\r\n * @description\r\n * Convert objects into stable arrays.\r\n * if addKey set to true,the filter also attaches a new property\r\n * $key to the value containing the original key that was used in\r\n * the object we are iterating over to reference the property\r\n */\r\nangular.module('a8m.to-array', [])\r\n .filter('toArray', function() {\r\n return function (collection, addKey) {\r\n\r\n if(!isObject(collection)) {\r\n return collection;\r\n }\r\n\r\n return !addKey\r\n ? toArray(collection)\r\n : Object.keys(collection).map(function (key) {\r\n return extend(collection[key], { $key: key });\r\n });\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name unique/uniq\r\n * @kind function\r\n *\r\n * @description\r\n * get collection and filter duplicate members\r\n * if uniqueFilter get a property(nested to) as argument it's\r\n * filter by this property as unique identifier\r\n */\r\n\r\nangular.module('a8m.unique', [])\r\n .filter({\r\n unique: ['$parse', uniqFilter],\r\n uniq: ['$parse', uniqFilter]\r\n });\r\n\r\nfunction uniqFilter($parse) {\r\n return function (collection, property) {\r\n\r\n collection = isObject(collection) ? toArray(collection) : collection;\r\n\r\n if (!isArray(collection)) {\r\n return collection;\r\n }\r\n\r\n //store all unique identifiers\r\n var uniqueItems = [],\r\n get = $parse(property);\r\n\r\n return (isUndefined(property))\r\n //if it's kind of primitive array\r\n ? collection.filter(function (elm, pos, self) {\r\n return self.indexOf(elm) === pos;\r\n })\r\n //else compare with equals\r\n : collection.filter(function (elm) {\r\n var prop = get(elm);\r\n if(some(uniqueItems, prop)) {\r\n return false;\r\n }\r\n uniqueItems.push(prop);\r\n return true;\r\n });\r\n\r\n //checked if the unique identifier is already exist\r\n function some(array, member) {\r\n if(isUndefined(member)) {\r\n return false;\r\n }\r\n return array.some(function(el) {\r\n return equals(el, member);\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name where\r\n * @kind function\r\n *\r\n * @description\r\n * of each element in a collection to the given properties object,\r\n * returning an array of all elements that have equivalent property values.\r\n *\r\n */\r\nangular.module('a8m.where', [])\r\n .filter('where', function() {\r\n return function (collection, object) {\r\n if(isUndefined(object)) return collection;\r\n collection = isObject(collection)\r\n ? toArray(collection)\r\n : collection;\r\n\r\n return collection.filter(function (elm) {\r\n return objectContains(object, elm);\r\n });\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name xor\r\n * @kind function\r\n *\r\n * @description\r\n * Exclusive or filter by expression\r\n */\r\n\r\nangular.module('a8m.xor', [])\r\n\r\n .filter('xor', ['$parse', function($parse) {\r\n return function (col1, col2, expression) {\r\n\r\n expression = expression || false;\r\n\r\n col1 = isObject(col1) ? toArray(col1) : col1;\r\n col2 = isObject(col2) ? toArray(col2) : col2;\r\n\r\n if(!isArray(col1) || !isArray(col2)) return col1;\r\n\r\n return col1.concat(col2)\r\n .filter(function(elm) {\r\n return !(some(elm, col1) && some(elm, col2));\r\n });\r\n\r\n function some(el, col) {\r\n var getter = $parse(expression);\r\n return col.some(function(dElm) {\r\n return expression\r\n ? equals(getter(dElm), getter(el))\r\n : equals(dElm, el);\r\n });\r\n }\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name abs\r\n * @kind function\r\n *\r\n * @description\r\n * Will return the absolute value of a number\r\n */\r\nangular.module('a8m.math.abs', [])\r\n .filter('abs', function () {\r\n return function (input) {\r\n return Math.abs(input);\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name formatBytes\r\n * @kind function\r\n *\r\n * @description\r\n * Convert bytes into appropriate display \r\n * 1024 bytes => 1 KB\r\n */\r\nangular.module('a8m.math.byteFmt', [])\r\n .filter('byteFmt', function () {\r\n var compared = [{str: 'B', val: 1024}];\r\n ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'].forEach(function(el, i) {\r\n compared.push({str: el, val: compared[i].val * 1024 });\r\n });\r\n return function (bytes, decimal) {\r\n if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&\r\n isNumber(bytes) && isFinite(bytes)) {\r\n var i = 0;\r\n while (i < compared.length-1 && bytes >= compared[i].val) i++;\r\n bytes /= i > 0 ? compared[i-1].val : 1;\r\n return convertToDecimal(bytes, decimal) + ' ' + compared[i].str;\r\n }\r\n return 'NaN';\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name degrees\r\n * @kind function\r\n *\r\n * @description\r\n * Convert angle from radians to degrees\r\n */\r\nangular.module('a8m.math.degrees', [])\r\n .filter('degrees', function () {\r\n return function (radians, decimal) {\r\n // if decimal is not an integer greater than -1, we cannot do. quit with error \"NaN\"\r\n // if degrees is not a real number, we cannot do also. quit with error \"NaN\"\r\n if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&\r\n isNumber(radians) && isFinite(radians)) {\r\n var degrees = (radians * 180) / Math.PI;\r\n return Math.round(degrees * Math.pow(10,decimal)) / (Math.pow(10,decimal));\r\n } else {\r\n return 'NaN';\r\n }\r\n }\r\n });\r\n\r\n \r\n \r\n/**\r\n * @ngdoc filter\r\n * @name formatBytes\r\n * @kind function\r\n *\r\n * @description\r\n * Convert bytes into appropriate display \r\n * 1024 kilobytes => 1 MB\r\n */\r\nangular.module('a8m.math.kbFmt', [])\r\n .filter('kbFmt', function () {\r\n var compared = [{str: 'KB', val: 1024}];\r\n ['MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'].forEach(function(el, i) {\r\n compared.push({str: el, val: compared[i].val * 1024 });\r\n });\r\n return function (bytes, decimal) {\r\n if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&\r\n isNumber(bytes) && isFinite(bytes)) {\r\n var i = 0;\r\n while (i < compared.length-1 && bytes >= compared[i].val) i++;\r\n bytes /= i > 0 ? compared[i-1].val : 1;\r\n return convertToDecimal(bytes, decimal) + ' ' + compared[i].str;\r\n }\r\n return 'NaN';\r\n }\r\n });\r\n/**\r\n * @ngdoc filter\r\n * @name max\r\n * @kind function\r\n *\r\n * @description\r\n * Math.max will get an array and return the max value. if an expression\r\n * is provided, will return max value by expression.\r\n */\r\nangular.module('a8m.math.max', [])\r\n .filter('max', ['$parse', function ($parse) {\r\n return function (input, expression) {\r\n\r\n if(!isArray(input)) {\r\n return input;\r\n }\r\n return isUndefined(expression)\r\n ? Math.max.apply(Math, input)\r\n : input[indexByMax(input, expression)];\r\n };\r\n\r\n /**\r\n * @private\r\n * @param array\r\n * @param exp\r\n * @returns {number|*|Number}\r\n */\r\n function indexByMax(array, exp) {\r\n var mappedArray = array.map(function(elm){\r\n return $parse(exp)(elm);\r\n });\r\n return mappedArray.indexOf(Math.max.apply(Math, mappedArray));\r\n }\r\n }]);\r\n/**\r\n * @ngdoc filter\r\n * @name min\r\n * @kind function\r\n *\r\n * @description\r\n * Math.min will get an array and return the min value. if an expression\r\n * is provided, will return min value by expression.\r\n */\r\nangular.module('a8m.math.min', [])\r\n .filter('min', ['$parse', function ($parse) {\r\n return function (input, expression) {\r\n\r\n if(!isArray(input)) {\r\n return input;\r\n }\r\n return isUndefined(expression)\r\n ? Math.min.apply(Math, input)\r\n : input[indexByMin(input, expression)];\r\n };\r\n\r\n /**\r\n * @private\r\n * @param array\r\n * @param exp\r\n * @returns {number|*|Number}\r\n */\r\n function indexByMin(array, exp) {\r\n var mappedArray = array.map(function(elm){\r\n return $parse(exp)(elm);\r\n });\r\n return mappedArray.indexOf(Math.min.apply(Math, mappedArray));\r\n }\r\n }]);\r\n/**\r\n * @ngdoc filter\r\n * @name Percent\r\n * @kind function\r\n *\r\n * @description\r\n * percentage between two numbers\r\n */\r\nangular.module('a8m.math.percent', [])\r\n .filter('percent', function () {\r\n return function (input, divided, round) {\r\n\r\n var divider = isString(input) ? Number(input) : input;\r\n divided = divided || 100;\r\n round = round || false;\r\n\r\n if (!isNumber(divider) || isNaN(divider)) return input;\r\n\r\n return round\r\n ? Math.round((divider / divided) * 100)\r\n : (divider / divided) * 100;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name toRadians\r\n * @kind function\r\n *\r\n * @description\r\n * Convert angle from degrees to radians\r\n */\r\nangular.module('a8m.math.radians', [])\r\n .filter('radians', function() {\r\n return function (degrees, decimal) {\r\n // if decimal is not an integer greater than -1, we cannot do. quit with error \"NaN\"\r\n // if degrees is not a real number, we cannot do also. quit with error \"NaN\"\r\n if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&\r\n isNumber(degrees) && isFinite(degrees)) {\r\n var radians = (degrees * 3.14159265359) / 180;\r\n return Math.round(radians * Math.pow(10,decimal)) / (Math.pow(10,decimal));\r\n }\r\n return 'NaN';\r\n }\r\n });\r\n\r\n \r\n \r\n/**\r\n * @ngdoc filter\r\n * @name Radix\r\n * @kind function\r\n *\r\n * @description\r\n * converting decimal numbers to different bases(radix)\r\n */\r\nangular.module('a8m.math.radix', [])\r\n .filter('radix', function () {\r\n return function (input, radix) {\r\n var RANGE = /^[2-9]$|^[1-2]\\d$|^3[0-6]$/;\r\n\r\n if(!isNumber(input) || !RANGE.test(radix)) {\r\n return input;\r\n }\r\n\r\n return input.toString(radix).toUpperCase();\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name formatBytes\r\n * @kind function\r\n *\r\n * @description\r\n * Convert number into abbreviations.\r\n * i.e: K for one thousand, M for Million, B for billion\r\n * e.g: number of users:235,221, decimal:1 => 235.2 K\r\n */\r\nangular.module('a8m.math.shortFmt', [])\r\n .filter('shortFmt', function () {\r\n return function (number, decimal) {\r\n if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&\r\n isNumber(number) && isFinite(number)){\r\n if(number < 1e3) {\r\n return '' + number; // Coerce to string\r\n } else if(number < 1e6) {\r\n return convertToDecimal((number / 1e3), decimal) + ' K';\r\n } else if(number < 1e9){\r\n return convertToDecimal((number / 1e6), decimal) + ' M';\r\n } else {\r\n return convertToDecimal((number / 1e9), decimal) + ' B';\r\n }\r\n\r\n }\r\n return 'NaN';\r\n }\r\n });\r\n/**\r\n * @ngdoc filter\r\n * @name sum\r\n * @kind function\r\n *\r\n * @description\r\n * Sum up all values within an array\r\n */\r\nangular.module('a8m.math.sum', [])\r\n .filter('sum', function () {\r\n return function (input, initial) {\r\n return !isArray(input)\r\n ? input\r\n : input.reduce(function(prev, curr) {\r\n return prev + curr;\r\n }, initial || 0);\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name endsWith\r\n * @kind function\r\n *\r\n * @description\r\n * checks whether string ends with the ends parameter.\r\n */\r\nangular.module('a8m.ends-with', [])\r\n\r\n .filter('endsWith', function () {\r\n return function (input, ends, csensitive) {\r\n\r\n var sensitive = csensitive || false,\r\n position;\r\n\r\n if(!isString(input) || isUndefined(ends)) {\r\n return input;\r\n }\r\n\r\n input = (sensitive) ? input : input.toLowerCase();\r\n position = input.length - ends.length;\r\n\r\n return input.indexOf((sensitive) ? ends : ends.toLowerCase(), position) !== -1;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name latinize\r\n * @kind function\r\n *\r\n * @description\r\n * remove accents/diacritics from a string\r\n */\r\nangular.module('a8m.latinize', [])\r\n .filter('latinize',[ function () {\r\n var defaultDiacriticsRemovalap = [\r\n {'base':'A', 'letters':'\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F'},\r\n {'base':'AA','letters':'\\uA732'},\r\n {'base':'AE','letters':'\\u00C6\\u01FC\\u01E2'},\r\n {'base':'AO','letters':'\\uA734'},\r\n {'base':'AU','letters':'\\uA736'},\r\n {'base':'AV','letters':'\\uA738\\uA73A'},\r\n {'base':'AY','letters':'\\uA73C'},\r\n {'base':'B', 'letters':'\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181'},\r\n {'base':'C', 'letters':'\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E'},\r\n {'base':'D', 'letters':'\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779'},\r\n {'base':'DZ','letters':'\\u01F1\\u01C4'},\r\n {'base':'Dz','letters':'\\u01F2\\u01C5'},\r\n {'base':'E', 'letters':'\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E'},\r\n {'base':'F', 'letters':'\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B'},\r\n {'base':'G', 'letters':'\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E'},\r\n {'base':'H', 'letters':'\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D'},\r\n {'base':'I', 'letters':'\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197'},\r\n {'base':'J', 'letters':'\\u004A\\u24BF\\uFF2A\\u0134\\u0248'},\r\n {'base':'K', 'letters':'\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2'},\r\n {'base':'L', 'letters':'\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780'},\r\n {'base':'LJ','letters':'\\u01C7'},\r\n {'base':'Lj','letters':'\\u01C8'},\r\n {'base':'M', 'letters':'\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C'},\r\n {'base':'N', 'letters':'\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4'},\r\n {'base':'NJ','letters':'\\u01CA'},\r\n {'base':'Nj','letters':'\\u01CB'},\r\n {'base':'O', 'letters':'\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C'},\r\n {'base':'OI','letters':'\\u01A2'},\r\n {'base':'OO','letters':'\\uA74E'},\r\n {'base':'OU','letters':'\\u0222'},\r\n {'base':'OE','letters':'\\u008C\\u0152'},\r\n {'base':'oe','letters':'\\u009C\\u0153'},\r\n {'base':'P', 'letters':'\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754'},\r\n {'base':'Q', 'letters':'\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A'},\r\n {'base':'R', 'letters':'\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782'},\r\n {'base':'S', 'letters':'\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784'},\r\n {'base':'T', 'letters':'\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786'},\r\n {'base':'TZ','letters':'\\uA728'},\r\n {'base':'U', 'letters':'\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244'},\r\n {'base':'V', 'letters':'\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245'},\r\n {'base':'VY','letters':'\\uA760'},\r\n {'base':'W', 'letters':'\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72'},\r\n {'base':'X', 'letters':'\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C'},\r\n {'base':'Y', 'letters':'\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE'},\r\n {'base':'Z', 'letters':'\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762'},\r\n {'base':'a', 'letters':'\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250'},\r\n {'base':'aa','letters':'\\uA733'},\r\n {'base':'ae','letters':'\\u00E6\\u01FD\\u01E3'},\r\n {'base':'ao','letters':'\\uA735'},\r\n {'base':'au','letters':'\\uA737'},\r\n {'base':'av','letters':'\\uA739\\uA73B'},\r\n {'base':'ay','letters':'\\uA73D'},\r\n {'base':'b', 'letters':'\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253'},\r\n {'base':'c', 'letters':'\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184'},\r\n {'base':'d', 'letters':'\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A'},\r\n {'base':'dz','letters':'\\u01F3\\u01C6'},\r\n {'base':'e', 'letters':'\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD'},\r\n {'base':'f', 'letters':'\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C'},\r\n {'base':'g', 'letters':'\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F'},\r\n {'base':'h', 'letters':'\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265'},\r\n {'base':'hv','letters':'\\u0195'},\r\n {'base':'i', 'letters':'\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131'},\r\n {'base':'j', 'letters':'\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249'},\r\n {'base':'k', 'letters':'\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3'},\r\n {'base':'l', 'letters':'\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747'},\r\n {'base':'lj','letters':'\\u01C9'},\r\n {'base':'m', 'letters':'\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F'},\r\n {'base':'n', 'letters':'\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5'},\r\n {'base':'nj','letters':'\\u01CC'},\r\n {'base':'o', 'letters':'\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275'},\r\n {'base':'oi','letters':'\\u01A3'},\r\n {'base':'ou','letters':'\\u0223'},\r\n {'base':'oo','letters':'\\uA74F'},\r\n {'base':'p','letters':'\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755'},\r\n {'base':'q','letters':'\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759'},\r\n {'base':'r','letters':'\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783'},\r\n {'base':'s','letters':'\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B'},\r\n {'base':'t','letters':'\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787'},\r\n {'base':'tz','letters':'\\uA729'},\r\n {'base':'u','letters': '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289'},\r\n {'base':'v','letters':'\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C'},\r\n {'base':'vy','letters':'\\uA761'},\r\n {'base':'w','letters':'\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73'},\r\n {'base':'x','letters':'\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D'},\r\n {'base':'y','letters':'\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF'},\r\n {'base':'z','letters':'\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763'}\r\n ];\r\n\r\n var diacriticsMap = {};\r\n for (var i = 0; i < defaultDiacriticsRemovalap.length; i++) {\r\n var letters = defaultDiacriticsRemovalap[i].letters.split(\"\");\r\n for (var j = 0; j < letters.length ; j++){\r\n diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;\r\n }\r\n }\r\n\r\n // \"what?\" version ... http://jsperf.com/diacritics/12\r\n function removeDiacritics (str) {\r\n return str.replace(/[^\\u0000-\\u007E]/g, function(a){\r\n return diacriticsMap[a] || a;\r\n });\r\n }\r\n\r\n return function (input) {\r\n\r\n return isString(input)\r\n ? removeDiacritics(input)\r\n : input;\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name ltrim\r\n * @kind function\r\n *\r\n * @description\r\n * Left trim. Similar to trimFilter, but only for left side.\r\n */\r\nangular.module('a8m.ltrim', [])\r\n .filter('ltrim', function () {\r\n return function(input, chars) {\r\n\r\n var trim = chars || '\\\\s';\r\n\r\n return isString(input)\r\n ? input.replace(new RegExp('^' + trim + '+'), '')\r\n : input;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name match\r\n * @kind function\r\n *\r\n * @description\r\n * Return the matched pattern in a string.\r\n */\r\nangular.module('a8m.match', [])\r\n .filter('match', function () {\r\n return function (input, pattern, flag) {\r\n\r\n var reg = new RegExp(pattern, flag);\r\n\r\n return isString(input)\r\n ? input.match(reg)\r\n : null;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name phone-us\r\n * @kind function\r\n *\r\n * @description\r\n * format a string or a number into a us-style\r\n * phone number in the form (***) ***-****\r\n */\r\nangular.module('a8m.phoneUS', [])\r\n .filter('phoneUS', function () {\r\n return function(num) {\r\n num += '';\r\n return '(' + num.slice(0, 3) + ') ' + num.slice(3, 6) + '-' + num.slice(6);\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name repeat\r\n * @kind function\r\n *\r\n * @description\r\n * Repeats a string n times\r\n */\r\nangular.module('a8m.repeat', [])\r\n .filter('repeat',[ function () {\r\n return function (input, n, separator) {\r\n\r\n var times = ~~n;\r\n\r\n if(!isString(input)) {\r\n return input;\r\n }\r\n\r\n return !times\r\n ? input\r\n : strRepeat(input, --n, separator || '');\r\n }\r\n }]);\r\n\r\n/**\r\n * Repeats a string n times with given separator\r\n * @param str string to repeat\r\n * @param n number of times\r\n * @param sep separator\r\n * @returns {*}\r\n */\r\nfunction strRepeat(str, n, sep) {\r\n if(!n) {\r\n return str;\r\n }\r\n return str + sep + strRepeat(str, --n, sep);\r\n}\r\n/**\r\n* @ngdoc filter\r\n* @name rtrim\r\n* @kind function\r\n*\r\n* @description\r\n* Right trim. Similar to trimFilter, but only for right side.\r\n*/\r\nangular.module('a8m.rtrim', [])\r\n .filter('rtrim', function () {\r\n return function(input, chars) {\r\n\r\n var trim = chars || '\\\\s';\r\n\r\n return isString(input)\r\n ? input.replace(new RegExp(trim + '+$'), '')\r\n : input;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name slugify\r\n * @kind function\r\n *\r\n * @description\r\n * remove spaces from string, replace with \"-\" or given argument\r\n */\r\nangular.module('a8m.slugify', [])\r\n .filter('slugify',[ function () {\r\n return function (input, sub) {\r\n\r\n var replace = (isUndefined(sub)) ? '-' : sub;\r\n\r\n return isString(input)\r\n ? input.toLowerCase().replace(/\\s+/g, replace)\r\n : input;\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name split\r\n * @kind function\r\n *\r\n * @description\r\n * split a string by a provided delimiter (none '' by default) and skip first n-delimiters\r\n */\r\nangular.module('a8m.split', [])\r\n .filter('split', function () {\r\n function escapeRegExp(str) {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n }\r\n\r\n return function (input, delimiter, skip) {\r\n var _regexp, _matches, _splitted, _temp;\r\n\r\n if (isUndefined(input) || !isString(input)) {\r\n return null;\r\n }\r\n if (isUndefined(delimiter)) delimiter = '';\r\n if (isNaN(skip)) skip = 0;\r\n\r\n _regexp = new RegExp(escapeRegExp(delimiter), 'g');\r\n _matches = input.match(_regexp);\r\n \r\n if (isNull(_matches) || skip >= _matches.length) {\r\n return [input];\r\n }\r\n\r\n if (skip === 0) return input.split(delimiter);\r\n \r\n _splitted = input.split(delimiter);\r\n _temp = _splitted.splice(0, skip + 1);\r\n _splitted.unshift(_temp.join(delimiter));\r\n \r\n return _splitted;\r\n };\r\n })\r\n;\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name startWith\r\n * @kind function\r\n *\r\n * @description\r\n * checks whether string starts with the starts parameter.\r\n */\r\nangular.module('a8m.starts-with', [])\r\n .filter('startsWith', function () {\r\n return function (input, start, csensitive) {\r\n\r\n var sensitive = csensitive || false;\r\n\r\n if(!isString(input) || isUndefined(start)) {\r\n return input;\r\n }\r\n\r\n input = (sensitive) ? input : input.toLowerCase();\r\n\r\n return !input.indexOf((sensitive) ? start : start.toLowerCase());\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name stringular\r\n * @kind function\r\n *\r\n * @description\r\n * get string with {n} and replace match with enumeration values\r\n */\r\nangular.module('a8m.stringular', [])\r\n .filter('stringular', function () {\r\n return function(input) {\r\n\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n return input.replace(/{(\\d+)}/g, function (match, number) {\r\n return isUndefined(args[number]) ? match : args[number];\r\n });\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name stripTags\r\n * @kind function\r\n *\r\n * @description\r\n * strip html tags from string\r\n */\r\nangular.module('a8m.strip-tags', [])\r\n .filter('stripTags', function () {\r\n return function(input) {\r\n return isString(input)\r\n ? input.replace(/<\\S[^><]*>/g, '')\r\n : input;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name test\r\n * @kind function\r\n *\r\n * @description\r\n * test if a string match a pattern.\r\n */\r\nangular.module('a8m.test', [])\r\n .filter('test', function () {\r\n return function (input, pattern, flag) {\r\n\r\n var reg = new RegExp(pattern, flag);\r\n\r\n return isString(input)\r\n ? reg.test(input)\r\n : input;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name trim\r\n * @kind function\r\n *\r\n * @description\r\n * Strip whitespace (or other characters) from the beginning and end of a string\r\n */\r\nangular.module('a8m.trim', [])\r\n .filter('trim', function () {\r\n return function(input, chars) {\r\n\r\n var trim = chars || '\\\\s';\r\n\r\n return isString(input)\r\n ? input.replace(new RegExp('^' + trim + '+|' + trim + '+$', 'g'), '')\r\n : input;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name truncate\r\n * @kind function\r\n *\r\n * @description\r\n * truncates a string given a specified length, providing a custom string to denote an omission.\r\n */\r\nangular.module('a8m.truncate', [])\r\n .filter('truncate', function () {\r\n return function(input, length, suffix, preserve) {\r\n\r\n length = isUndefined(length) ? input.length : length;\r\n preserve = preserve || false;\r\n suffix = suffix || '';\r\n\r\n if(!isString(input) || (input.length <= length)) return input;\r\n\r\n return input.substring(0, (preserve)\r\n ? ((input.indexOf(' ', length) === -1) ? input.length : input.indexOf(' ', length))\r\n : length) + suffix;\r\n };\r\n });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name ucfirst\r\n * @kind function\r\n *\r\n * @description\r\n * ucfirst\r\n */\r\nangular.module('a8m.ucfirst', [])\r\n .filter({\r\n ucfirst: ucfirstFilter,\r\n titleize: ucfirstFilter\r\n });\r\n\r\nfunction ucfirstFilter() {\r\n return function (input) {\r\n return isString(input)\r\n ? input\r\n .split(' ')\r\n .map(function (ch) {\r\n return ch.charAt(0).toUpperCase() + ch.substring(1);\r\n })\r\n .join(' ')\r\n : input;\r\n }\r\n}\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name uriComponentEncode\r\n * @kind function\r\n *\r\n * @description\r\n * get string as parameter and return encoded string\r\n */\r\nangular.module('a8m.uri-component-encode', [])\r\n .filter('uriComponentEncode',['$window', function ($window) {\r\n return function (input) {\r\n return isString(input)\r\n ? $window.encodeURIComponent(input)\r\n : input;\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name uriEncode\r\n * @kind function\r\n *\r\n * @description\r\n * get string as parameter and return encoded string\r\n */\r\nangular.module('a8m.uri-encode', [])\r\n .filter('uriEncode',['$window', function ($window) {\r\n return function (input) {\r\n return isString(input)\r\n ? $window.encodeURI(input)\r\n : input;\r\n }\r\n }]);\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name wrap\r\n * @kind function\r\n *\r\n * @description\r\n * Wrap a string with another string\r\n */\r\nangular.module('a8m.wrap', [])\r\n .filter('wrap', function () {\r\n return function(input, wrap, ends) {\r\n return isString(input) && isDefined(wrap)\r\n ? [wrap, input, ends || wrap].join('')\r\n : input;\r\n }\r\n });\r\n\r\n/**\r\n * @ngdoc provider\r\n * @name filterWatcher\r\n * @kind function\r\n *\r\n * @description\r\n * store specific filters result in $$cache, based on scope life time(avoid memory leak).\r\n * on scope.$destroy remove it's cache from $$cache container\r\n */\r\n\r\nangular.module('a8m.filter-watcher', [])\r\n .provider('filterWatcher', function() {\r\n\r\n this.$get = ['$window', '$rootScope', function($window, $rootScope) {\r\n\r\n /**\r\n * Cache storing\r\n * @type {Object}\r\n */\r\n var $$cache = {};\r\n\r\n /**\r\n * Scope listeners container\r\n * scope.$destroy => remove all cache keys\r\n * bind to current scope.\r\n * @type {Object}\r\n */\r\n var $$listeners = {};\r\n\r\n /**\r\n * $timeout without triggering the digest cycle\r\n * @type {function}\r\n */\r\n var $$timeout = $window.setTimeout;\r\n\r\n /**\r\n * @description\r\n * get `HashKey` string based on the given arguments.\r\n * @param fName\r\n * @param args\r\n * @returns {string}\r\n */\r\n function getHashKey(fName, args) {\r\n function replacerFactory() {\r\n var cache = [];\r\n return function(key, val) {\r\n if(isObject(val) && !isNull(val)) {\r\n if (~cache.indexOf(val)) return '[Circular]';\r\n cache.push(val)\r\n }\r\n if($window == val) return '$WINDOW';\r\n if($window.document == val) return '$DOCUMENT';\r\n if(isScope(val)) return '$SCOPE';\r\n return val;\r\n }\r\n }\r\n return [fName, JSON.stringify(args, replacerFactory())]\r\n .join('#')\r\n .replace(/\"/g,'');\r\n }\r\n\r\n /**\r\n * @description\r\n * fir on $scope.$destroy,\r\n * remove cache based scope from `$$cache`,\r\n * and remove itself from `$$listeners`\r\n * @param event\r\n */\r\n function removeCache(event) {\r\n var id = event.targetScope.$id;\r\n forEach($$listeners[id], function(key) {\r\n delete $$cache[key];\r\n });\r\n delete $$listeners[id];\r\n }\r\n\r\n /**\r\n * @description\r\n * for angular version that greater than v.1.3.0\r\n * it clear cache when the digest cycle is end.\r\n */\r\n function cleanStateless() {\r\n $$timeout(function() {\r\n if(!$rootScope.$$phase)\r\n $$cache = {};\r\n }, 2000);\r\n }\r\n\r\n /**\r\n * @description\r\n * Store hashKeys in $$listeners container\r\n * on scope.$destroy, remove them all(bind an event).\r\n * @param scope\r\n * @param hashKey\r\n * @returns {*}\r\n */\r\n function addListener(scope, hashKey) {\r\n var id = scope.$id;\r\n if(isUndefined($$listeners[id])) {\r\n scope.$on('$destroy', removeCache);\r\n $$listeners[id] = [];\r\n }\r\n return $$listeners[id].push(hashKey);\r\n }\r\n\r\n /**\r\n * @description\r\n * return the `cacheKey` or undefined.\r\n * @param filterName\r\n * @param args\r\n * @returns {*}\r\n */\r\n function $$isMemoized(filterName, args) {\r\n var hashKey = getHashKey(filterName, args);\r\n return $$cache[hashKey];\r\n }\r\n\r\n /**\r\n * @description\r\n * store `result` in `$$cache` container, based on the hashKey.\r\n * add $destroy listener and return result\r\n * @param filterName\r\n * @param args\r\n * @param scope\r\n * @param result\r\n * @returns {*}\r\n */\r\n function $$memoize(filterName, args, scope, result) {\r\n var hashKey = getHashKey(filterName, args);\r\n //store result in `$$cache` container\r\n $$cache[hashKey] = result;\r\n // for angular versions that less than 1.3\r\n // add to `$destroy` listener, a cleaner callback\r\n if(isScope(scope)) {\r\n addListener(scope, hashKey);\r\n } else {\r\n cleanStateless();\r\n }\r\n return result;\r\n }\r\n\r\n return {\r\n isMemoized: $$isMemoized,\r\n memoize: $$memoize\r\n }\r\n }];\r\n });\r\n \r\n\r\n/**\r\n * @ngdoc module\r\n * @name angular.filters\r\n * @description\r\n * Bunch of useful filters for angularJS\r\n */\r\n\r\nangular.module('angular.filter', [\r\n\r\n 'a8m.ucfirst',\r\n 'a8m.uri-encode',\r\n 'a8m.uri-component-encode',\r\n 'a8m.slugify',\r\n 'a8m.latinize',\r\n 'a8m.strip-tags',\r\n 'a8m.stringular',\r\n 'a8m.truncate',\r\n 'a8m.starts-with',\r\n 'a8m.ends-with',\r\n 'a8m.wrap',\r\n 'a8m.trim',\r\n 'a8m.ltrim',\r\n 'a8m.rtrim',\r\n 'a8m.repeat',\r\n 'a8m.test',\r\n 'a8m.match',\r\n 'a8m.split',\r\n 'a8m.phoneUS',\r\n\r\n 'a8m.to-array',\r\n 'a8m.concat',\r\n 'a8m.contains',\r\n 'a8m.unique',\r\n 'a8m.is-empty',\r\n 'a8m.after',\r\n 'a8m.after-where',\r\n 'a8m.before',\r\n 'a8m.before-where',\r\n 'a8m.defaults',\r\n 'a8m.where',\r\n 'a8m.reverse',\r\n 'a8m.remove',\r\n 'a8m.remove-with',\r\n 'a8m.group-by',\r\n 'a8m.count-by',\r\n 'a8m.chunk-by',\r\n 'a8m.search-field',\r\n 'a8m.fuzzy-by',\r\n 'a8m.fuzzy',\r\n 'a8m.omit',\r\n 'a8m.pick',\r\n 'a8m.every',\r\n 'a8m.filter-by',\r\n 'a8m.xor',\r\n 'a8m.map',\r\n 'a8m.first',\r\n 'a8m.last',\r\n 'a8m.flatten',\r\n 'a8m.join',\r\n 'a8m.range',\r\n\r\n 'a8m.math.max',\r\n 'a8m.math.min',\r\n 'a8m.math.abs',\r\n 'a8m.math.percent',\r\n 'a8m.math.radix',\r\n 'a8m.math.sum',\r\n 'a8m.math.degrees',\r\n 'a8m.math.radians',\r\n 'a8m.math.byteFmt',\r\n 'a8m.math.kbFmt',\r\n 'a8m.math.shortFmt',\r\n\r\n 'a8m.angular',\r\n 'a8m.conditions',\r\n 'a8m.is-null',\r\n\r\n 'a8m.filter-watcher'\r\n]);\r\n})( window, window.angular );","/*\r\n * angular-ui-bootstrap\r\n * http://angular-ui.github.io/bootstrap/\r\n\r\n * Version: 2.5.0 - 2017-01-28\r\n * License: MIT\r\n */angular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\", \"ui.bootstrap.collapse\",\"ui.bootstrap.tabindex\",\"ui.bootstrap.accordion\",\"ui.bootstrap.alert\",\"ui.bootstrap.buttons\",\"ui.bootstrap.carousel\",\"ui.bootstrap.dateparser\",\"ui.bootstrap.isClass\",\"ui.bootstrap.datepicker\",\"ui.bootstrap.position\",\"ui.bootstrap.datepickerPopup\",\"ui.bootstrap.debounce\",\"ui.bootstrap.multiMap\",\"ui.bootstrap.dropdown\",\"ui.bootstrap.stackedMap\",\"ui.bootstrap.modal\",\"ui.bootstrap.paging\",\"ui.bootstrap.pager\",\"ui.bootstrap.pagination\",\"ui.bootstrap.tooltip\",\"ui.bootstrap.popover\",\"ui.bootstrap.progressbar\",\"ui.bootstrap.rating\",\"ui.bootstrap.tabs\",\"ui.bootstrap.timepicker\",\"ui.bootstrap.typeahead\"]);\r\nangular.module(\"ui.bootstrap.tpls\", [\"uib/template/accordion/accordion-group.html\",\"uib/template/accordion/accordion.html\",\"uib/template/alert/alert.html\",\"uib/template/carousel/carousel.html\",\"uib/template/carousel/slide.html\",\"uib/template/datepicker/datepicker.html\",\"uib/template/datepicker/day.html\",\"uib/template/datepicker/month.html\",\"uib/template/datepicker/year.html\",\"uib/template/datepickerPopup/popup.html\",\"uib/template/modal/window.html\",\"uib/template/pager/pager.html\",\"uib/template/pagination/pagination.html\",\"uib/template/tooltip/tooltip-html-popup.html\",\"uib/template/tooltip/tooltip-popup.html\",\"uib/template/tooltip/tooltip-template-popup.html\",\"uib/template/popover/popover-html.html\",\"uib/template/popover/popover-template.html\",\"uib/template/popover/popover.html\",\"uib/template/progressbar/bar.html\",\"uib/template/progressbar/progress.html\",\"uib/template/progressbar/progressbar.html\",\"uib/template/rating/rating.html\",\"uib/template/tabs/tab.html\",\"uib/template/tabs/tabset.html\",\"uib/template/timepicker/timepicker.html\",\"uib/template/typeahead/typeahead-match.html\",\"uib/template/typeahead/typeahead-popup.html\"]);\r\nangular.module('ui.bootstrap.collapse', [])\r\n\r\n .directive('uibCollapse', ['$animate', '$q', '$parse', '$injector', function($animate, $q, $parse, $injector) {\r\n var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;\r\n return {\r\n link: function(scope, element, attrs) {\r\n var expandingExpr = $parse(attrs.expanding),\r\n expandedExpr = $parse(attrs.expanded),\r\n collapsingExpr = $parse(attrs.collapsing),\r\n collapsedExpr = $parse(attrs.collapsed),\r\n horizontal = false,\r\n css = {},\r\n cssTo = {};\r\n\r\n init();\r\n\r\n function init() {\r\n horizontal = !!('horizontal' in attrs);\r\n if (horizontal) {\r\n css = {\r\n width: ''\r\n };\r\n cssTo = {width: '0'};\r\n } else {\r\n css = {\r\n height: ''\r\n };\r\n cssTo = {height: '0'};\r\n }\r\n if (!scope.$eval(attrs.uibCollapse)) {\r\n element.addClass('in')\r\n .addClass('collapse')\r\n .attr('aria-expanded', true)\r\n .attr('aria-hidden', false)\r\n .css(css);\r\n }\r\n }\r\n\r\n function getScrollFromElement(element) {\r\n if (horizontal) {\r\n return {width: element.scrollWidth + 'px'};\r\n }\r\n return {height: element.scrollHeight + 'px'};\r\n }\r\n\r\n function expand() {\r\n if (element.hasClass('collapse') && element.hasClass('in')) {\r\n return;\r\n }\r\n\r\n $q.resolve(expandingExpr(scope))\r\n .then(function() {\r\n element.removeClass('collapse')\r\n .addClass('collapsing')\r\n .attr('aria-expanded', true)\r\n .attr('aria-hidden', false);\r\n\r\n if ($animateCss) {\r\n $animateCss(element, {\r\n addClass: 'in',\r\n easing: 'ease',\r\n css: {\r\n overflow: 'hidden'\r\n },\r\n to: getScrollFromElement(element[0])\r\n }).start()['finally'](expandDone);\r\n } else {\r\n $animate.addClass(element, 'in', {\r\n css: {\r\n overflow: 'hidden'\r\n },\r\n to: getScrollFromElement(element[0])\r\n }).then(expandDone);\r\n }\r\n }, angular.noop);\r\n }\r\n\r\n function expandDone() {\r\n element.removeClass('collapsing')\r\n .addClass('collapse')\r\n .css(css);\r\n expandedExpr(scope);\r\n }\r\n\r\n function collapse() {\r\n if (!element.hasClass('collapse') && !element.hasClass('in')) {\r\n return collapseDone();\r\n }\r\n\r\n $q.resolve(collapsingExpr(scope))\r\n .then(function() {\r\n element\r\n // IMPORTANT: The width must be set before adding \"collapsing\" class.\r\n // Otherwise, the browser attempts to animate from width 0 (in\r\n // collapsing class) to the given width here.\r\n .css(getScrollFromElement(element[0]))\r\n // initially all panel collapse have the collapse class, this removal\r\n // prevents the animation from jumping to collapsed state\r\n .removeClass('collapse')\r\n .addClass('collapsing')\r\n .attr('aria-expanded', false)\r\n .attr('aria-hidden', true);\r\n\r\n if ($animateCss) {\r\n $animateCss(element, {\r\n removeClass: 'in',\r\n to: cssTo\r\n }).start()['finally'](collapseDone);\r\n } else {\r\n $animate.removeClass(element, 'in', {\r\n to: cssTo\r\n }).then(collapseDone);\r\n }\r\n }, angular.noop);\r\n }\r\n\r\n function collapseDone() {\r\n element.css(cssTo); // Required so that collapse works when animation is disabled\r\n element.removeClass('collapsing')\r\n .addClass('collapse');\r\n collapsedExpr(scope);\r\n }\r\n\r\n scope.$watch(attrs.uibCollapse, 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\r\nangular.module('ui.bootstrap.tabindex', [])\r\n\r\n.directive('uibTabindexToggle', function() {\r\n return {\r\n restrict: 'A',\r\n link: function(scope, elem, attrs) {\r\n attrs.$observe('disabled', function(disabled) {\r\n attrs.$set('tabindex', disabled ? -1 : null);\r\n });\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap.tabindex'])\r\n\r\n.constant('uibAccordionConfig', {\r\n closeOthers: true\r\n})\r\n\r\n.controller('UibAccordionController', ['$scope', '$attrs', 'uibAccordionConfig', function($scope, $attrs, accordionConfig) {\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) ?\r\n $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(index, 1);\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('uibAccordion', function() {\r\n return {\r\n controller: 'UibAccordionController',\r\n controllerAs: 'accordion',\r\n transclude: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/accordion/accordion.html';\r\n }\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('uibAccordionGroup', function() {\r\n return {\r\n require: '^uibAccordion', // We need this directive to be inside an accordion\r\n transclude: true, // It transcludes the contents of the directive into the template\r\n restrict: 'A',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/accordion/accordion-group.html';\r\n },\r\n scope: {\r\n heading: '@', // Interpolate the heading attribute onto this scope\r\n panelClass: '@?', // Ditto with panelClass\r\n isOpen: '=?',\r\n isDisabled: '=?'\r\n },\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 element.addClass('panel');\r\n accordionCtrl.addGroup(scope);\r\n\r\n scope.openClass = attrs.openClass || 'panel-open';\r\n scope.panelClass = attrs.panelClass || 'panel-default';\r\n scope.$watch('isOpen', function(value) {\r\n element.toggleClass(scope.openClass, !!value);\r\n if (value) {\r\n accordionCtrl.closeOthers(scope);\r\n }\r\n });\r\n\r\n scope.toggleOpen = function($event) {\r\n if (!scope.isDisabled) {\r\n if (!$event || $event.which === 32) {\r\n scope.isOpen = !scope.isOpen;\r\n }\r\n }\r\n };\r\n\r\n var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\r\n scope.headingId = id + '-tab';\r\n scope.panelId = id + '-panel';\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.directive('uibAccordionHeading', function() {\r\n return {\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: '^uibAccordionGroup',\r\n link: function(scope, element, attrs, accordionGroupCtrl, transclude) {\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, angular.noop));\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.directive('uibAccordionTransclude', function() {\r\n return {\r\n require: '^uibAccordionGroup',\r\n link: function(scope, element, attrs, controller) {\r\n scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {\r\n if (heading) {\r\n var elem = angular.element(element[0].querySelector(getHeaderSelectors()));\r\n elem.html('');\r\n elem.append(heading);\r\n }\r\n });\r\n }\r\n };\r\n\r\n function getHeaderSelectors() {\r\n return 'uib-accordion-header,' +\r\n 'data-uib-accordion-header,' +\r\n 'x-uib-accordion-header,' +\r\n 'uib\\\\:accordion-header,' +\r\n '[uib-accordion-header],' +\r\n '[data-uib-accordion-header],' +\r\n '[x-uib-accordion-header]';\r\n }\r\n});\r\n\r\nangular.module('ui.bootstrap.alert', [])\r\n\r\n.controller('UibAlertController', ['$scope', '$element', '$attrs', '$interpolate', '$timeout', function($scope, $element, $attrs, $interpolate, $timeout) {\r\n $scope.closeable = !!$attrs.close;\r\n $element.addClass('alert');\r\n $attrs.$set('role', 'alert');\r\n if ($scope.closeable) {\r\n $element.addClass('alert-dismissible');\r\n }\r\n\r\n var dismissOnTimeout = angular.isDefined($attrs.dismissOnTimeout) ?\r\n $interpolate($attrs.dismissOnTimeout)($scope.$parent) : null;\r\n\r\n if (dismissOnTimeout) {\r\n $timeout(function() {\r\n $scope.close();\r\n }, parseInt(dismissOnTimeout, 10));\r\n }\r\n}])\r\n\r\n.directive('uibAlert', function() {\r\n return {\r\n controller: 'UibAlertController',\r\n controllerAs: 'alert',\r\n restrict: 'A',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/alert/alert.html';\r\n },\r\n transclude: true,\r\n scope: {\r\n close: '&'\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.buttons', [])\r\n\r\n.constant('uibButtonConfig', {\r\n activeClass: 'active',\r\n toggleEvent: 'click'\r\n})\r\n\r\n.controller('UibButtonsController', ['uibButtonConfig', function(buttonConfig) {\r\n this.activeClass = buttonConfig.activeClass || 'active';\r\n this.toggleEvent = buttonConfig.toggleEvent || 'click';\r\n}])\r\n\r\n.directive('uibBtnRadio', ['$parse', function($parse) {\r\n return {\r\n require: ['uibBtnRadio', 'ngModel'],\r\n controller: 'UibButtonsController',\r\n controllerAs: 'buttons',\r\n link: function(scope, element, attrs, ctrls) {\r\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n var uncheckableExpr = $parse(attrs.uibUncheckable);\r\n\r\n element.find('input').css({display: 'none'});\r\n\r\n //model -> UI\r\n ngModelCtrl.$render = function() {\r\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio)));\r\n };\r\n\r\n //ui->model\r\n element.on(buttonsCtrl.toggleEvent, function() {\r\n if (attrs.disabled) {\r\n return;\r\n }\r\n\r\n var isActive = element.hasClass(buttonsCtrl.activeClass);\r\n\r\n if (!isActive || angular.isDefined(attrs.uncheckable)) {\r\n scope.$apply(function() {\r\n ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio));\r\n ngModelCtrl.$render();\r\n });\r\n }\r\n });\r\n\r\n if (attrs.uibUncheckable) {\r\n scope.$watch(uncheckableExpr, function(uncheckable) {\r\n attrs.$set('uncheckable', uncheckable ? '' : undefined);\r\n });\r\n }\r\n }\r\n };\r\n}])\r\n\r\n.directive('uibBtnCheckbox', function() {\r\n return {\r\n require: ['uibBtnCheckbox', 'ngModel'],\r\n controller: 'UibButtonsController',\r\n controllerAs: 'button',\r\n link: function(scope, element, attrs, ctrls) {\r\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n element.find('input').css({display: 'none'});\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(attribute, defaultValue) {\r\n return angular.isDefined(attribute) ? scope.$eval(attribute) : 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.on(buttonsCtrl.toggleEvent, function() {\r\n if (attrs.disabled) {\r\n return;\r\n }\r\n\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\nangular.module('ui.bootstrap.carousel', [])\r\n\r\n.controller('UibCarouselController', ['$scope', '$element', '$interval', '$timeout', '$animate', function($scope, $element, $interval, $timeout, $animate) {\r\n var self = this,\r\n slides = self.slides = $scope.slides = [],\r\n SLIDE_DIRECTION = 'uib-slideDirection',\r\n currentIndex = $scope.active,\r\n currentInterval, isPlaying;\r\n\r\n var destroyed = false;\r\n $element.addClass('carousel');\r\n\r\n self.addSlide = function(slide, element) {\r\n slides.push({\r\n slide: slide,\r\n element: element\r\n });\r\n slides.sort(function(a, b) {\r\n return +a.slide.index - +b.slide.index;\r\n });\r\n //if this is the first slide or the slide is set to active, select it\r\n if (slide.index === $scope.active || slides.length === 1 && !angular.isNumber($scope.active)) {\r\n if ($scope.$currentTransition) {\r\n $scope.$currentTransition = null;\r\n }\r\n\r\n currentIndex = slide.index;\r\n $scope.active = slide.index;\r\n setActive(currentIndex);\r\n self.select(slides[findSlideIndex(slide)]);\r\n if (slides.length === 1) {\r\n $scope.play();\r\n }\r\n }\r\n };\r\n\r\n self.getCurrentIndex = function() {\r\n for (var i = 0; i < slides.length; i++) {\r\n if (slides[i].slide.index === currentIndex) {\r\n return i;\r\n }\r\n }\r\n };\r\n\r\n self.next = $scope.next = function() {\r\n var newIndex = (self.getCurrentIndex() + 1) % slides.length;\r\n\r\n if (newIndex === 0 && $scope.noWrap()) {\r\n $scope.pause();\r\n return;\r\n }\r\n\r\n return self.select(slides[newIndex], 'next');\r\n };\r\n\r\n self.prev = $scope.prev = function() {\r\n var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;\r\n\r\n if ($scope.noWrap() && newIndex === slides.length - 1) {\r\n $scope.pause();\r\n return;\r\n }\r\n\r\n return self.select(slides[newIndex], 'prev');\r\n };\r\n\r\n self.removeSlide = function(slide) {\r\n var index = findSlideIndex(slide);\r\n\r\n //get the index of the slide inside the carousel\r\n slides.splice(index, 1);\r\n if (slides.length > 0 && currentIndex === index) {\r\n if (index >= slides.length) {\r\n currentIndex = slides.length - 1;\r\n $scope.active = currentIndex;\r\n setActive(currentIndex);\r\n self.select(slides[slides.length - 1]);\r\n } else {\r\n currentIndex = index;\r\n $scope.active = currentIndex;\r\n setActive(currentIndex);\r\n self.select(slides[index]);\r\n }\r\n } else if (currentIndex > index) {\r\n currentIndex--;\r\n $scope.active = currentIndex;\r\n }\r\n\r\n //clean the active value when no more slide\r\n if (slides.length === 0) {\r\n currentIndex = null;\r\n $scope.active = null;\r\n }\r\n };\r\n\r\n /* direction: \"prev\" or \"next\" */\r\n self.select = $scope.select = function(nextSlide, direction) {\r\n var nextIndex = findSlideIndex(nextSlide.slide);\r\n //Decide direction if it's not given\r\n if (direction === undefined) {\r\n direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';\r\n }\r\n //Prevent this user-triggered transition from occurring if there is already one in progress\r\n if (nextSlide.slide.index !== currentIndex &&\r\n !$scope.$currentTransition) {\r\n goNext(nextSlide.slide, nextIndex, direction);\r\n }\r\n };\r\n\r\n /* Allow outside people to call indexOf on slides array */\r\n $scope.indexOfSlide = function(slide) {\r\n return +slide.slide.index;\r\n };\r\n\r\n $scope.isActive = function(slide) {\r\n return $scope.active === slide.slide.index;\r\n };\r\n\r\n $scope.isPrevDisabled = function() {\r\n return $scope.active === 0 && $scope.noWrap();\r\n };\r\n\r\n $scope.isNextDisabled = function() {\r\n return $scope.active === slides.length - 1 && $scope.noWrap();\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 $scope.play = function() {\r\n if (!isPlaying) {\r\n isPlaying = true;\r\n restartTimer();\r\n }\r\n };\r\n\r\n $element.on('mouseenter', $scope.pause);\r\n $element.on('mouseleave', $scope.play);\r\n\r\n $scope.$on('$destroy', function() {\r\n destroyed = true;\r\n resetTimer();\r\n });\r\n\r\n $scope.$watch('noTransition', function(noTransition) {\r\n $animate.enabled($element, !noTransition);\r\n });\r\n\r\n $scope.$watch('interval', restartTimer);\r\n\r\n $scope.$watchCollection('slides', resetTransition);\r\n\r\n $scope.$watch('active', function(index) {\r\n if (angular.isNumber(index) && currentIndex !== index) {\r\n for (var i = 0; i < slides.length; i++) {\r\n if (slides[i].slide.index === index) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n var slide = slides[index];\r\n if (slide) {\r\n setActive(index);\r\n self.select(slides[index]);\r\n currentIndex = index;\r\n }\r\n }\r\n });\r\n\r\n function getSlideByIndex(index) {\r\n for (var i = 0, l = slides.length; i < l; ++i) {\r\n if (slides[i].index === index) {\r\n return slides[i];\r\n }\r\n }\r\n }\r\n\r\n function setActive(index) {\r\n for (var i = 0; i < slides.length; i++) {\r\n slides[i].slide.active = i === index;\r\n }\r\n }\r\n\r\n function goNext(slide, index, direction) {\r\n if (destroyed) {\r\n return;\r\n }\r\n\r\n angular.extend(slide, {direction: direction});\r\n angular.extend(slides[currentIndex].slide || {}, {direction: direction});\r\n if ($animate.enabled($element) && !$scope.$currentTransition &&\r\n slides[index].element && self.slides.length > 1) {\r\n slides[index].element.data(SLIDE_DIRECTION, slide.direction);\r\n var currentIdx = self.getCurrentIndex();\r\n\r\n if (angular.isNumber(currentIdx) && slides[currentIdx].element) {\r\n slides[currentIdx].element.data(SLIDE_DIRECTION, slide.direction);\r\n }\r\n\r\n $scope.$currentTransition = true;\r\n $animate.on('addClass', slides[index].element, function(element, phase) {\r\n if (phase === 'close') {\r\n $scope.$currentTransition = null;\r\n $animate.off('addClass', element);\r\n }\r\n });\r\n }\r\n\r\n $scope.active = slide.index;\r\n currentIndex = slide.index;\r\n setActive(index);\r\n\r\n //every time you change slides, reset the timer\r\n restartTimer();\r\n }\r\n\r\n function findSlideIndex(slide) {\r\n for (var i = 0; i < slides.length; i++) {\r\n if (slides[i].slide === slide) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n function resetTimer() {\r\n if (currentInterval) {\r\n $interval.cancel(currentInterval);\r\n currentInterval = null;\r\n }\r\n }\r\n\r\n function resetTransition(slides) {\r\n if (!slides.length) {\r\n $scope.$currentTransition = null;\r\n }\r\n }\r\n\r\n function restartTimer() {\r\n resetTimer();\r\n var interval = +$scope.interval;\r\n if (!isNaN(interval) && interval > 0) {\r\n currentInterval = $interval(timerFn, interval);\r\n }\r\n }\r\n\r\n function timerFn() {\r\n var interval = +$scope.interval;\r\n if (isPlaying && !isNaN(interval) && interval > 0 && slides.length) {\r\n $scope.next();\r\n } else {\r\n $scope.pause();\r\n }\r\n }\r\n}])\r\n\r\n.directive('uibCarousel', function() {\r\n return {\r\n transclude: true,\r\n controller: 'UibCarouselController',\r\n controllerAs: 'carousel',\r\n restrict: 'A',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/carousel/carousel.html';\r\n },\r\n scope: {\r\n active: '=',\r\n interval: '=',\r\n noTransition: '=',\r\n noPause: '=',\r\n noWrap: '&'\r\n }\r\n };\r\n})\r\n\r\n.directive('uibSlide', ['$animate', function($animate) {\r\n return {\r\n require: '^uibCarousel',\r\n restrict: 'A',\r\n transclude: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/carousel/slide.html';\r\n },\r\n scope: {\r\n actual: '=?',\r\n index: '=?'\r\n },\r\n link: function (scope, element, attrs, carouselCtrl) {\r\n element.addClass('item');\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 $animate[active ? 'addClass' : 'removeClass'](element, 'active');\r\n });\r\n }\r\n };\r\n}])\r\n\r\n.animation('.item', ['$animateCss',\r\nfunction($animateCss) {\r\n var SLIDE_DIRECTION = 'uib-slideDirection';\r\n\r\n function removeClass(element, className, callback) {\r\n element.removeClass(className);\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n\r\n return {\r\n beforeAddClass: function(element, className, done) {\r\n if (className === 'active') {\r\n var stopped = false;\r\n var direction = element.data(SLIDE_DIRECTION);\r\n var directionClass = direction === 'next' ? 'left' : 'right';\r\n var removeClassFn = removeClass.bind(this, element,\r\n directionClass + ' ' + direction, done);\r\n element.addClass(direction);\r\n\r\n $animateCss(element, {addClass: directionClass})\r\n .start()\r\n .done(removeClassFn);\r\n\r\n return function() {\r\n stopped = true;\r\n };\r\n }\r\n done();\r\n },\r\n beforeRemoveClass: function (element, className, done) {\r\n if (className === 'active') {\r\n var stopped = false;\r\n var direction = element.data(SLIDE_DIRECTION);\r\n var directionClass = direction === 'next' ? 'left' : 'right';\r\n var removeClassFn = removeClass.bind(this, element, directionClass, done);\r\n\r\n $animateCss(element, {addClass: directionClass})\r\n .start()\r\n .done(removeClassFn);\r\n\r\n return function() {\r\n stopped = true;\r\n };\r\n }\r\n done();\r\n }\r\n };\r\n}]);\r\n\r\nangular.module('ui.bootstrap.dateparser', [])\r\n\r\n.service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', 'filterFilter', function($log, $locale, dateFilter, orderByFilter, filterFilter) {\r\n // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js\r\n var SPECIAL_CHARACTERS_REGEXP = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\r\n\r\n var localeId;\r\n var formatCodeToRegex;\r\n\r\n this.init = function() {\r\n localeId = $locale.id;\r\n\r\n this.parsers = {};\r\n this.formatters = {};\r\n\r\n formatCodeToRegex = [\r\n {\r\n key: 'yyyy',\r\n regex: '\\\\d{4}',\r\n apply: function(value) { this.year = +value; },\r\n formatter: function(date) {\r\n var _date = new Date();\r\n _date.setFullYear(Math.abs(date.getFullYear()));\r\n return dateFilter(_date, 'yyyy');\r\n }\r\n },\r\n {\r\n key: 'yy',\r\n regex: '\\\\d{2}',\r\n apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },\r\n formatter: function(date) {\r\n var _date = new Date();\r\n _date.setFullYear(Math.abs(date.getFullYear()));\r\n return dateFilter(_date, 'yy');\r\n }\r\n },\r\n {\r\n key: 'y',\r\n regex: '\\\\d{1,4}',\r\n apply: function(value) { this.year = +value; },\r\n formatter: function(date) {\r\n var _date = new Date();\r\n _date.setFullYear(Math.abs(date.getFullYear()));\r\n return dateFilter(_date, 'y');\r\n }\r\n },\r\n {\r\n key: 'M!',\r\n regex: '0?[1-9]|1[0-2]',\r\n apply: function(value) { this.month = value - 1; },\r\n formatter: function(date) {\r\n var value = date.getMonth();\r\n if (/^[0-9]$/.test(value)) {\r\n return dateFilter(date, 'MM');\r\n }\r\n\r\n return dateFilter(date, 'M');\r\n }\r\n },\r\n {\r\n key: 'MMMM',\r\n regex: $locale.DATETIME_FORMATS.MONTH.join('|'),\r\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },\r\n formatter: function(date) { return dateFilter(date, 'MMMM'); }\r\n },\r\n {\r\n key: 'MMM',\r\n regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\r\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },\r\n formatter: function(date) { return dateFilter(date, 'MMM'); }\r\n },\r\n {\r\n key: 'MM',\r\n regex: '0[1-9]|1[0-2]',\r\n apply: function(value) { this.month = value - 1; },\r\n formatter: function(date) { return dateFilter(date, 'MM'); }\r\n },\r\n {\r\n key: 'M',\r\n regex: '[1-9]|1[0-2]',\r\n apply: function(value) { this.month = value - 1; },\r\n formatter: function(date) { return dateFilter(date, 'M'); }\r\n },\r\n {\r\n key: 'd!',\r\n regex: '[0-2]?[0-9]{1}|3[0-1]{1}',\r\n apply: function(value) { this.date = +value; },\r\n formatter: function(date) {\r\n var value = date.getDate();\r\n if (/^[1-9]$/.test(value)) {\r\n return dateFilter(date, 'dd');\r\n }\r\n\r\n return dateFilter(date, 'd');\r\n }\r\n },\r\n {\r\n key: 'dd',\r\n regex: '[0-2][0-9]{1}|3[0-1]{1}',\r\n apply: function(value) { this.date = +value; },\r\n formatter: function(date) { return dateFilter(date, 'dd'); }\r\n },\r\n {\r\n key: 'd',\r\n regex: '[1-2]?[0-9]{1}|3[0-1]{1}',\r\n apply: function(value) { this.date = +value; },\r\n formatter: function(date) { return dateFilter(date, 'd'); }\r\n },\r\n {\r\n key: 'EEEE',\r\n regex: $locale.DATETIME_FORMATS.DAY.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'EEEE'); }\r\n },\r\n {\r\n key: 'EEE',\r\n regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'EEE'); }\r\n },\r\n {\r\n key: 'HH',\r\n regex: '(?:0|1)[0-9]|2[0-3]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'HH'); }\r\n },\r\n {\r\n key: 'hh',\r\n regex: '0[0-9]|1[0-2]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'hh'); }\r\n },\r\n {\r\n key: 'H',\r\n regex: '1?[0-9]|2[0-3]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'H'); }\r\n },\r\n {\r\n key: 'h',\r\n regex: '[0-9]|1[0-2]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'h'); }\r\n },\r\n {\r\n key: 'mm',\r\n regex: '[0-5][0-9]',\r\n apply: function(value) { this.minutes = +value; },\r\n formatter: function(date) { return dateFilter(date, 'mm'); }\r\n },\r\n {\r\n key: 'm',\r\n regex: '[0-9]|[1-5][0-9]',\r\n apply: function(value) { this.minutes = +value; },\r\n formatter: function(date) { return dateFilter(date, 'm'); }\r\n },\r\n {\r\n key: 'sss',\r\n regex: '[0-9][0-9][0-9]',\r\n apply: function(value) { this.milliseconds = +value; },\r\n formatter: function(date) { return dateFilter(date, 'sss'); }\r\n },\r\n {\r\n key: 'ss',\r\n regex: '[0-5][0-9]',\r\n apply: function(value) { this.seconds = +value; },\r\n formatter: function(date) { return dateFilter(date, 'ss'); }\r\n },\r\n {\r\n key: 's',\r\n regex: '[0-9]|[1-5][0-9]',\r\n apply: function(value) { this.seconds = +value; },\r\n formatter: function(date) { return dateFilter(date, 's'); }\r\n },\r\n {\r\n key: 'a',\r\n regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),\r\n apply: function(value) {\r\n if (this.hours === 12) {\r\n this.hours = 0;\r\n }\r\n\r\n if (value === 'PM') {\r\n this.hours += 12;\r\n }\r\n },\r\n formatter: function(date) { return dateFilter(date, 'a'); }\r\n },\r\n {\r\n key: 'Z',\r\n regex: '[+-]\\\\d{4}',\r\n apply: function(value) {\r\n var matches = value.match(/([+-])(\\d{2})(\\d{2})/),\r\n sign = matches[1],\r\n hours = matches[2],\r\n minutes = matches[3];\r\n this.hours += toInt(sign + hours);\r\n this.minutes += toInt(sign + minutes);\r\n },\r\n formatter: function(date) {\r\n return dateFilter(date, 'Z');\r\n }\r\n },\r\n {\r\n key: 'ww',\r\n regex: '[0-4][0-9]|5[0-3]',\r\n formatter: function(date) { return dateFilter(date, 'ww'); }\r\n },\r\n {\r\n key: 'w',\r\n regex: '[0-9]|[1-4][0-9]|5[0-3]',\r\n formatter: function(date) { return dateFilter(date, 'w'); }\r\n },\r\n {\r\n key: 'GGGG',\r\n regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\\s/g, '\\\\s'),\r\n formatter: function(date) { return dateFilter(date, 'GGGG'); }\r\n },\r\n {\r\n key: 'GGG',\r\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'GGG'); }\r\n },\r\n {\r\n key: 'GG',\r\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'GG'); }\r\n },\r\n {\r\n key: 'G',\r\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'G'); }\r\n }\r\n ];\r\n\r\n if (angular.version.major >= 1 && angular.version.minor > 4) {\r\n formatCodeToRegex.push({\r\n key: 'LLLL',\r\n regex: $locale.DATETIME_FORMATS.STANDALONEMONTH.join('|'),\r\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.STANDALONEMONTH.indexOf(value); },\r\n formatter: function(date) { return dateFilter(date, 'LLLL'); }\r\n });\r\n }\r\n };\r\n\r\n this.init();\r\n\r\n function getFormatCodeToRegex(key) {\r\n return filterFilter(formatCodeToRegex, {key: key}, true)[0];\r\n }\r\n\r\n this.getParser = function (key) {\r\n var f = getFormatCodeToRegex(key);\r\n return f && f.apply || null;\r\n };\r\n\r\n this.overrideParser = function (key, parser) {\r\n var f = getFormatCodeToRegex(key);\r\n if (f && angular.isFunction(parser)) {\r\n this.parsers = {};\r\n f.apply = parser;\r\n }\r\n }.bind(this);\r\n\r\n function createParser(format) {\r\n var map = [], regex = format.split('');\r\n\r\n // check for literal values\r\n var quoteIndex = format.indexOf('\\'');\r\n if (quoteIndex > -1) {\r\n var inLiteral = false;\r\n format = format.split('');\r\n for (var i = quoteIndex; i < format.length; i++) {\r\n if (inLiteral) {\r\n if (format[i] === '\\'') {\r\n if (i + 1 < format.length && format[i+1] === '\\'') { // escaped single quote\r\n format[i+1] = '$';\r\n regex[i+1] = '';\r\n } else { // end of literal\r\n regex[i] = '';\r\n inLiteral = false;\r\n }\r\n }\r\n format[i] = '$';\r\n } else {\r\n if (format[i] === '\\'') { // start of literal\r\n format[i] = '$';\r\n regex[i] = '';\r\n inLiteral = true;\r\n }\r\n }\r\n }\r\n\r\n format = format.join('');\r\n }\r\n\r\n angular.forEach(formatCodeToRegex, function(data) {\r\n var index = format.indexOf(data.key);\r\n\r\n if (index > -1) {\r\n format = format.split('');\r\n\r\n regex[index] = '(' + data.regex + ')';\r\n format[index] = '$'; // Custom symbol to define consumed part of format\r\n for (var i = index + 1, n = index + data.key.length; i < n; i++) {\r\n regex[i] = '';\r\n format[i] = '$';\r\n }\r\n format = format.join('');\r\n\r\n map.push({\r\n index: index,\r\n key: data.key,\r\n apply: data.apply,\r\n matcher: data.regex\r\n });\r\n }\r\n });\r\n\r\n return {\r\n regex: new RegExp('^' + regex.join('') + '$'),\r\n map: orderByFilter(map, 'index')\r\n };\r\n }\r\n\r\n function createFormatter(format) {\r\n var formatters = [];\r\n var i = 0;\r\n var formatter, literalIdx;\r\n while (i < format.length) {\r\n if (angular.isNumber(literalIdx)) {\r\n if (format.charAt(i) === '\\'') {\r\n if (i + 1 >= format.length || format.charAt(i + 1) !== '\\'') {\r\n formatters.push(constructLiteralFormatter(format, literalIdx, i));\r\n literalIdx = null;\r\n }\r\n } else if (i === format.length) {\r\n while (literalIdx < format.length) {\r\n formatter = constructFormatterFromIdx(format, literalIdx);\r\n formatters.push(formatter);\r\n literalIdx = formatter.endIdx;\r\n }\r\n }\r\n\r\n i++;\r\n continue;\r\n }\r\n\r\n if (format.charAt(i) === '\\'') {\r\n literalIdx = i;\r\n i++;\r\n continue;\r\n }\r\n\r\n formatter = constructFormatterFromIdx(format, i);\r\n\r\n formatters.push(formatter.parser);\r\n i = formatter.endIdx;\r\n }\r\n\r\n return formatters;\r\n }\r\n\r\n function constructLiteralFormatter(format, literalIdx, endIdx) {\r\n return function() {\r\n return format.substr(literalIdx + 1, endIdx - literalIdx - 1);\r\n };\r\n }\r\n\r\n function constructFormatterFromIdx(format, i) {\r\n var currentPosStr = format.substr(i);\r\n for (var j = 0; j < formatCodeToRegex.length; j++) {\r\n if (new RegExp('^' + formatCodeToRegex[j].key).test(currentPosStr)) {\r\n var data = formatCodeToRegex[j];\r\n return {\r\n endIdx: i + data.key.length,\r\n parser: data.formatter\r\n };\r\n }\r\n }\r\n\r\n return {\r\n endIdx: i + 1,\r\n parser: function() {\r\n return currentPosStr.charAt(0);\r\n }\r\n };\r\n }\r\n\r\n this.filter = function(date, format) {\r\n if (!angular.isDate(date) || isNaN(date) || !format) {\r\n return '';\r\n }\r\n\r\n format = $locale.DATETIME_FORMATS[format] || format;\r\n\r\n if ($locale.id !== localeId) {\r\n this.init();\r\n }\r\n\r\n if (!this.formatters[format]) {\r\n this.formatters[format] = createFormatter(format);\r\n }\r\n\r\n var formatters = this.formatters[format];\r\n\r\n return formatters.reduce(function(str, formatter) {\r\n return str + formatter(date);\r\n }, '');\r\n };\r\n\r\n this.parse = function(input, format, baseDate) {\r\n if (!angular.isString(input) || !format) {\r\n return input;\r\n }\r\n\r\n format = $locale.DATETIME_FORMATS[format] || format;\r\n format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\\\$&');\r\n\r\n if ($locale.id !== localeId) {\r\n this.init();\r\n }\r\n\r\n if (!this.parsers[format]) {\r\n this.parsers[format] = createParser(format, 'apply');\r\n }\r\n\r\n var parser = this.parsers[format],\r\n regex = parser.regex,\r\n map = parser.map,\r\n results = input.match(regex),\r\n tzOffset = false;\r\n if (results && results.length) {\r\n var fields, dt;\r\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {\r\n fields = {\r\n year: baseDate.getFullYear(),\r\n month: baseDate.getMonth(),\r\n date: baseDate.getDate(),\r\n hours: baseDate.getHours(),\r\n minutes: baseDate.getMinutes(),\r\n seconds: baseDate.getSeconds(),\r\n milliseconds: baseDate.getMilliseconds()\r\n };\r\n } else {\r\n if (baseDate) {\r\n $log.warn('dateparser:', 'baseDate is not a valid date');\r\n }\r\n fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };\r\n }\r\n\r\n for (var i = 1, n = results.length; i < n; i++) {\r\n var mapper = map[i - 1];\r\n if (mapper.matcher === 'Z') {\r\n tzOffset = true;\r\n }\r\n\r\n if (mapper.apply) {\r\n mapper.apply.call(fields, results[i]);\r\n }\r\n }\r\n\r\n var datesetter = tzOffset ? Date.prototype.setUTCFullYear :\r\n Date.prototype.setFullYear;\r\n var timesetter = tzOffset ? Date.prototype.setUTCHours :\r\n Date.prototype.setHours;\r\n\r\n if (isValid(fields.year, fields.month, fields.date)) {\r\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime()) && !tzOffset) {\r\n dt = new Date(baseDate);\r\n datesetter.call(dt, fields.year, fields.month, fields.date);\r\n timesetter.call(dt, fields.hours, fields.minutes,\r\n fields.seconds, fields.milliseconds);\r\n } else {\r\n dt = new Date(0);\r\n datesetter.call(dt, fields.year, fields.month, fields.date);\r\n timesetter.call(dt, fields.hours || 0, fields.minutes || 0,\r\n fields.seconds || 0, fields.milliseconds || 0);\r\n }\r\n }\r\n\r\n return dt;\r\n }\r\n };\r\n\r\n // Check if date is valid for specific month (and year for February).\r\n // Month: 0 = Jan, 1 = Feb, etc\r\n function isValid(year, month, date) {\r\n if (date < 1) {\r\n return false;\r\n }\r\n\r\n if (month === 1 && date > 28) {\r\n return date === 29 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);\r\n }\r\n\r\n if (month === 3 || month === 5 || month === 8 || month === 10) {\r\n return date < 31;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function toInt(str) {\r\n return parseInt(str, 10);\r\n }\r\n\r\n this.toTimezone = toTimezone;\r\n this.fromTimezone = fromTimezone;\r\n this.timezoneToOffset = timezoneToOffset;\r\n this.addDateMinutes = addDateMinutes;\r\n this.convertTimezoneToLocal = convertTimezoneToLocal;\r\n\r\n function toTimezone(date, timezone) {\r\n return date && timezone ? convertTimezoneToLocal(date, timezone) : date;\r\n }\r\n\r\n function fromTimezone(date, timezone) {\r\n return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;\r\n }\r\n\r\n //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207\r\n function timezoneToOffset(timezone, fallback) {\r\n timezone = timezone.replace(/:/g, '');\r\n var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\r\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\r\n }\r\n\r\n function addDateMinutes(date, minutes) {\r\n date = new Date(date.getTime());\r\n date.setMinutes(date.getMinutes() + minutes);\r\n return date;\r\n }\r\n\r\n function convertTimezoneToLocal(date, timezone, reverse) {\r\n reverse = reverse ? -1 : 1;\r\n var dateTimezoneOffset = date.getTimezoneOffset();\r\n var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\r\n return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));\r\n }\r\n}]);\r\n\r\n// Avoiding use of ng-class as it creates a lot of watchers when a class is to be applied to\r\n// at most one element.\r\nangular.module('ui.bootstrap.isClass', [])\r\n.directive('uibIsClass', [\r\n '$animate',\r\nfunction ($animate) {\r\n // 11111111 22222222\r\n var ON_REGEXP = /^\\s*([\\s\\S]+?)\\s+on\\s+([\\s\\S]+?)\\s*$/;\r\n // 11111111 22222222\r\n var IS_REGEXP = /^\\s*([\\s\\S]+?)\\s+for\\s+([\\s\\S]+?)\\s*$/;\r\n\r\n var dataPerTracked = {};\r\n\r\n return {\r\n restrict: 'A',\r\n compile: function(tElement, tAttrs) {\r\n var linkedScopes = [];\r\n var instances = [];\r\n var expToData = {};\r\n var lastActivated = null;\r\n var onExpMatches = tAttrs.uibIsClass.match(ON_REGEXP);\r\n var onExp = onExpMatches[2];\r\n var expsStr = onExpMatches[1];\r\n var exps = expsStr.split(',');\r\n\r\n return linkFn;\r\n\r\n function linkFn(scope, element, attrs) {\r\n linkedScopes.push(scope);\r\n instances.push({\r\n scope: scope,\r\n element: element\r\n });\r\n\r\n exps.forEach(function(exp, k) {\r\n addForExp(exp, scope);\r\n });\r\n\r\n scope.$on('$destroy', removeScope);\r\n }\r\n\r\n function addForExp(exp, scope) {\r\n var matches = exp.match(IS_REGEXP);\r\n var clazz = scope.$eval(matches[1]);\r\n var compareWithExp = matches[2];\r\n var data = expToData[exp];\r\n if (!data) {\r\n var watchFn = function(compareWithVal) {\r\n var newActivated = null;\r\n instances.some(function(instance) {\r\n var thisVal = instance.scope.$eval(onExp);\r\n if (thisVal === compareWithVal) {\r\n newActivated = instance;\r\n return true;\r\n }\r\n });\r\n if (data.lastActivated !== newActivated) {\r\n if (data.lastActivated) {\r\n $animate.removeClass(data.lastActivated.element, clazz);\r\n }\r\n if (newActivated) {\r\n $animate.addClass(newActivated.element, clazz);\r\n }\r\n data.lastActivated = newActivated;\r\n }\r\n };\r\n expToData[exp] = data = {\r\n lastActivated: null,\r\n scope: scope,\r\n watchFn: watchFn,\r\n compareWithExp: compareWithExp,\r\n watcher: scope.$watch(compareWithExp, watchFn)\r\n };\r\n }\r\n data.watchFn(scope.$eval(compareWithExp));\r\n }\r\n\r\n function removeScope(e) {\r\n var removedScope = e.targetScope;\r\n var index = linkedScopes.indexOf(removedScope);\r\n linkedScopes.splice(index, 1);\r\n instances.splice(index, 1);\r\n if (linkedScopes.length) {\r\n var newWatchScope = linkedScopes[0];\r\n angular.forEach(expToData, function(data) {\r\n if (data.scope === removedScope) {\r\n data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);\r\n data.scope = newWatchScope;\r\n }\r\n });\r\n } else {\r\n expToData = {};\r\n }\r\n }\r\n }\r\n };\r\n}]);\r\nangular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])\r\n\r\n.value('$datepickerSuppressError', false)\r\n\r\n.value('$datepickerLiteralWarning', true)\r\n\r\n.constant('uibDatepickerConfig', {\r\n datepickerMode: 'day',\r\n formatDay: 'dd',\r\n formatMonth: 'MMMM',\r\n formatYear: 'yyyy',\r\n formatDayHeader: 'EEE',\r\n formatDayTitle: 'MMMM yyyy',\r\n formatMonthTitle: 'yyyy',\r\n maxDate: null,\r\n maxMode: 'year',\r\n minDate: null,\r\n minMode: 'day',\r\n monthColumns: 3,\r\n ngModelOptions: {},\r\n shortcutPropagation: false,\r\n showWeeks: true,\r\n yearColumns: 5,\r\n yearRows: 4\r\n})\r\n\r\n.controller('UibDatepickerController', ['$scope', '$element', '$attrs', '$parse', '$interpolate', '$locale', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerLiteralWarning', '$datepickerSuppressError', 'uibDateParser',\r\n function($scope, $element, $attrs, $parse, $interpolate, $locale, $log, dateFilter, datepickerConfig, $datepickerLiteralWarning, $datepickerSuppressError, dateParser) {\r\n var self = this,\r\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;\r\n ngModelOptions = {},\r\n watchListeners = [];\r\n\r\n $element.addClass('uib-datepicker');\r\n $attrs.$set('role', 'application');\r\n\r\n if (!$scope.datepickerOptions) {\r\n $scope.datepickerOptions = {};\r\n }\r\n\r\n // Modes chain\r\n this.modes = ['day', 'month', 'year'];\r\n\r\n [\r\n 'customClass',\r\n 'dateDisabled',\r\n 'datepickerMode',\r\n 'formatDay',\r\n 'formatDayHeader',\r\n 'formatDayTitle',\r\n 'formatMonth',\r\n 'formatMonthTitle',\r\n 'formatYear',\r\n 'maxDate',\r\n 'maxMode',\r\n 'minDate',\r\n 'minMode',\r\n 'monthColumns',\r\n 'showWeeks',\r\n 'shortcutPropagation',\r\n 'startingDay',\r\n 'yearColumns',\r\n 'yearRows'\r\n ].forEach(function(key) {\r\n switch (key) {\r\n case 'customClass':\r\n case 'dateDisabled':\r\n $scope[key] = $scope.datepickerOptions[key] || angular.noop;\r\n break;\r\n case 'datepickerMode':\r\n $scope.datepickerMode = angular.isDefined($scope.datepickerOptions.datepickerMode) ?\r\n $scope.datepickerOptions.datepickerMode : datepickerConfig.datepickerMode;\r\n break;\r\n case 'formatDay':\r\n case 'formatDayHeader':\r\n case 'formatDayTitle':\r\n case 'formatMonth':\r\n case 'formatMonthTitle':\r\n case 'formatYear':\r\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\r\n $interpolate($scope.datepickerOptions[key])($scope.$parent) :\r\n datepickerConfig[key];\r\n break;\r\n case 'monthColumns':\r\n case 'showWeeks':\r\n case 'shortcutPropagation':\r\n case 'yearColumns':\r\n case 'yearRows':\r\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\r\n $scope.datepickerOptions[key] : datepickerConfig[key];\r\n break;\r\n case 'startingDay':\r\n if (angular.isDefined($scope.datepickerOptions.startingDay)) {\r\n self.startingDay = $scope.datepickerOptions.startingDay;\r\n } else if (angular.isNumber(datepickerConfig.startingDay)) {\r\n self.startingDay = datepickerConfig.startingDay;\r\n } else {\r\n self.startingDay = ($locale.DATETIME_FORMATS.FIRSTDAYOFWEEK + 8) % 7;\r\n }\r\n\r\n break;\r\n case 'maxDate':\r\n case 'minDate':\r\n $scope.$watch('datepickerOptions.' + key, function(value) {\r\n if (value) {\r\n if (angular.isDate(value)) {\r\n self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.getOption('timezone'));\r\n } else {\r\n if ($datepickerLiteralWarning) {\r\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\r\n }\r\n\r\n self[key] = new Date(dateFilter(value, 'medium'));\r\n }\r\n } else {\r\n self[key] = datepickerConfig[key] ?\r\n dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.getOption('timezone')) :\r\n null;\r\n }\r\n\r\n self.refreshView();\r\n });\r\n\r\n break;\r\n case 'maxMode':\r\n case 'minMode':\r\n if ($scope.datepickerOptions[key]) {\r\n $scope.$watch(function() { return $scope.datepickerOptions[key]; }, function(value) {\r\n self[key] = $scope[key] = angular.isDefined(value) ? value : $scope.datepickerOptions[key];\r\n if (key === 'minMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) < self.modes.indexOf(self[key]) ||\r\n key === 'maxMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) > self.modes.indexOf(self[key])) {\r\n $scope.datepickerMode = self[key];\r\n $scope.datepickerOptions.datepickerMode = self[key];\r\n }\r\n });\r\n } else {\r\n self[key] = $scope[key] = datepickerConfig[key] || null;\r\n }\r\n\r\n break;\r\n }\r\n });\r\n\r\n $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);\r\n\r\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\r\n if (angular.isDefined($attrs.ngDisabled)) {\r\n watchListeners.push($scope.$parent.$watch($attrs.ngDisabled, function(disabled) {\r\n $scope.disabled = disabled;\r\n self.refreshView();\r\n }));\r\n }\r\n\r\n $scope.isActive = function(dateObject) {\r\n if (self.compare(dateObject.date, self.activeDate) === 0) {\r\n $scope.activeDateId = dateObject.uid;\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n this.init = function(ngModelCtrl_) {\r\n ngModelCtrl = ngModelCtrl_;\r\n ngModelOptions = extractOptions(ngModelCtrl);\r\n\r\n if ($scope.datepickerOptions.initDate) {\r\n self.activeDate = dateParser.fromTimezone($scope.datepickerOptions.initDate, ngModelOptions.getOption('timezone')) || new Date();\r\n $scope.$watch('datepickerOptions.initDate', function(initDate) {\r\n if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {\r\n self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.getOption('timezone'));\r\n self.refreshView();\r\n }\r\n });\r\n } else {\r\n self.activeDate = new Date();\r\n }\r\n\r\n var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date();\r\n this.activeDate = !isNaN(date) ?\r\n dateParser.fromTimezone(date, ngModelOptions.getOption('timezone')) :\r\n dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));\r\n\r\n ngModelCtrl.$render = function() {\r\n self.render();\r\n };\r\n };\r\n\r\n this.render = function() {\r\n if (ngModelCtrl.$viewValue) {\r\n var date = new Date(ngModelCtrl.$viewValue),\r\n isValid = !isNaN(date);\r\n\r\n if (isValid) {\r\n this.activeDate = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\r\n } else if (!$datepickerSuppressError) {\r\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object');\r\n }\r\n }\r\n this.refreshView();\r\n };\r\n\r\n this.refreshView = function() {\r\n if (this.element) {\r\n $scope.selectedDt = null;\r\n this._refreshView();\r\n if ($scope.activeDt) {\r\n $scope.activeDateId = $scope.activeDt.uid;\r\n }\r\n\r\n var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\r\n date = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\r\n ngModelCtrl.$setValidity('dateDisabled', !date ||\r\n this.element && !this.isDisabled(date));\r\n }\r\n };\r\n\r\n this.createDateObject = function(date, format) {\r\n var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\r\n model = dateParser.fromTimezone(model, ngModelOptions.getOption('timezone'));\r\n var today = new Date();\r\n today = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\r\n var time = this.compare(date, today);\r\n var dt = {\r\n date: date,\r\n label: dateParser.filter(date, format),\r\n selected: model && this.compare(date, model) === 0,\r\n disabled: this.isDisabled(date),\r\n past: time < 0,\r\n current: time === 0,\r\n future: time > 0,\r\n customClass: this.customClass(date) || null\r\n };\r\n\r\n if (model && this.compare(date, model) === 0) {\r\n $scope.selectedDt = dt;\r\n }\r\n\r\n if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {\r\n $scope.activeDt = dt;\r\n }\r\n\r\n return dt;\r\n };\r\n\r\n this.isDisabled = function(date) {\r\n return $scope.disabled ||\r\n this.minDate && this.compare(date, this.minDate) < 0 ||\r\n this.maxDate && this.compare(date, this.maxDate) > 0 ||\r\n $scope.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});\r\n };\r\n\r\n this.customClass = function(date) {\r\n return $scope.customClass({date: date, mode: $scope.datepickerMode});\r\n };\r\n\r\n // Split array into smaller arrays\r\n this.split = function(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 $scope.select = function(date) {\r\n if ($scope.datepickerMode === self.minMode) {\r\n var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.getOption('timezone')) : new Date(0, 0, 0, 0, 0, 0, 0);\r\n dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\r\n dt = dateParser.toTimezone(dt, ngModelOptions.getOption('timezone'));\r\n ngModelCtrl.$setViewValue(dt);\r\n ngModelCtrl.$render();\r\n } else {\r\n self.activeDate = date;\r\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);\r\n\r\n $scope.$emit('uib:datepicker.mode');\r\n }\r\n\r\n $scope.$broadcast('uib:datepicker.focus');\r\n };\r\n\r\n $scope.move = function(direction) {\r\n var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),\r\n month = self.activeDate.getMonth() + direction * (self.step.months || 0);\r\n self.activeDate.setFullYear(year, month, 1);\r\n self.refreshView();\r\n };\r\n\r\n $scope.toggleMode = function(direction) {\r\n direction = direction || 1;\r\n\r\n if ($scope.datepickerMode === self.maxMode && direction === 1 ||\r\n $scope.datepickerMode === self.minMode && direction === -1) {\r\n return;\r\n }\r\n\r\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);\r\n\r\n $scope.$emit('uib:datepicker.mode');\r\n };\r\n\r\n // Key event mapper\r\n $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };\r\n\r\n var focusElement = function() {\r\n self.element[0].focus();\r\n };\r\n\r\n // Listen for focus requests from popup directive\r\n $scope.$on('uib:datepicker.focus', focusElement);\r\n\r\n $scope.keydown = function(evt) {\r\n var key = $scope.keys[evt.which];\r\n\r\n if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {\r\n return;\r\n }\r\n\r\n evt.preventDefault();\r\n if (!self.shortcutPropagation) {\r\n evt.stopPropagation();\r\n }\r\n\r\n if (key === 'enter' || key === 'space') {\r\n if (self.isDisabled(self.activeDate)) {\r\n return; // do nothing\r\n }\r\n $scope.select(self.activeDate);\r\n } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {\r\n $scope.toggleMode(key === 'up' ? 1 : -1);\r\n } else {\r\n self.handleKeyDown(key, evt);\r\n self.refreshView();\r\n }\r\n };\r\n\r\n $element.on('keydown', function(evt) {\r\n $scope.$apply(function() {\r\n $scope.keydown(evt);\r\n });\r\n });\r\n\r\n $scope.$on('$destroy', function() {\r\n //Clear all watch listeners on destroy\r\n while (watchListeners.length) {\r\n watchListeners.shift()();\r\n }\r\n });\r\n\r\n function setMode(mode) {\r\n $scope.datepickerMode = mode;\r\n $scope.datepickerOptions.datepickerMode = mode;\r\n }\r\n\r\n function extractOptions(ngModelCtrl) {\r\n var ngModelOptions;\r\n\r\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\r\n // guarantee a value\r\n ngModelOptions = ngModelCtrl.$options ||\r\n $scope.datepickerOptions.ngModelOptions ||\r\n datepickerConfig.ngModelOptions ||\r\n {};\r\n\r\n // mimic 1.6+ api\r\n ngModelOptions.getOption = function (key) {\r\n return ngModelOptions[key];\r\n };\r\n } else { // in angular >=1.6 $options is always present\r\n // ng-model-options defaults timezone to null; don't let its precedence squash a non-null value\r\n var timezone = ngModelCtrl.$options.getOption('timezone') ||\r\n ($scope.datepickerOptions.ngModelOptions ? $scope.datepickerOptions.ngModelOptions.timezone : null) ||\r\n (datepickerConfig.ngModelOptions ? datepickerConfig.ngModelOptions.timezone : null);\r\n\r\n // values passed to createChild override existing values\r\n ngModelOptions = ngModelCtrl.$options // start with a ModelOptions instance\r\n .createChild(datepickerConfig.ngModelOptions) // lowest precedence\r\n .createChild($scope.datepickerOptions.ngModelOptions)\r\n .createChild(ngModelCtrl.$options) // highest precedence\r\n .createChild({timezone: timezone}); // to keep from squashing a non-null value\r\n }\r\n\r\n return ngModelOptions;\r\n }\r\n}])\r\n\r\n.controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\r\n var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n\r\n this.step = { months: 1 };\r\n this.element = $element;\r\n function getDaysInMonth(year, month) {\r\n return month === 1 && year % 4 === 0 &&\r\n (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];\r\n }\r\n\r\n this.init = function(ctrl) {\r\n angular.extend(ctrl, this);\r\n scope.showWeeks = ctrl.showWeeks;\r\n ctrl.refreshView();\r\n };\r\n\r\n this.getDates = function(startDate, n) {\r\n var dates = new Array(n), current = new Date(startDate), i = 0, date;\r\n while (i < n) {\r\n date = new Date(current);\r\n dates[i++] = date;\r\n current.setDate(current.getDate() + 1);\r\n }\r\n return dates;\r\n };\r\n\r\n this._refreshView = function() {\r\n var year = this.activeDate.getFullYear(),\r\n month = this.activeDate.getMonth(),\r\n firstDayOfMonth = new Date(this.activeDate);\r\n\r\n firstDayOfMonth.setFullYear(year, month, 1);\r\n\r\n var difference = this.startingDay - firstDayOfMonth.getDay(),\r\n numDisplayedFromPreviousMonth = difference > 0 ?\r\n 7 - difference : - difference,\r\n firstDate = new Date(firstDayOfMonth);\r\n\r\n if (numDisplayedFromPreviousMonth > 0) {\r\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\r\n }\r\n\r\n // 42 is the number of days on a six-week calendar\r\n var days = this.getDates(firstDate, 42);\r\n for (var i = 0; i < 42; i ++) {\r\n days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {\r\n secondary: days[i].getMonth() !== month,\r\n uid: scope.uniqueId + '-' + i\r\n });\r\n }\r\n\r\n scope.labels = new Array(7);\r\n for (var j = 0; j < 7; j++) {\r\n scope.labels[j] = {\r\n abbr: dateFilter(days[j].date, this.formatDayHeader),\r\n full: dateFilter(days[j].date, 'EEEE')\r\n };\r\n }\r\n\r\n scope.title = dateFilter(this.activeDate, this.formatDayTitle);\r\n scope.rows = this.split(days, 7);\r\n\r\n if (scope.showWeeks) {\r\n scope.weekNumbers = [];\r\n var thursdayIndex = (4 + 7 - this.startingDay) % 7,\r\n numWeeks = scope.rows.length;\r\n for (var curWeek = 0; curWeek < numWeeks; curWeek++) {\r\n scope.weekNumbers.push(\r\n getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));\r\n }\r\n }\r\n };\r\n\r\n this.compare = function(date1, date2) {\r\n var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\r\n var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\r\n _date1.setFullYear(date1.getFullYear());\r\n _date2.setFullYear(date2.getFullYear());\r\n return _date1 - _date2;\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 this.handleKeyDown = function(key, evt) {\r\n var date = this.activeDate.getDate();\r\n\r\n if (key === 'left') {\r\n date = date - 1;\r\n } else if (key === 'up') {\r\n date = date - 7;\r\n } else if (key === 'right') {\r\n date = date + 1;\r\n } else if (key === 'down') {\r\n date = date + 7;\r\n } else if (key === 'pageup' || key === 'pagedown') {\r\n var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);\r\n this.activeDate.setMonth(month, 1);\r\n date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);\r\n } else if (key === 'home') {\r\n date = 1;\r\n } else if (key === 'end') {\r\n date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());\r\n }\r\n this.activeDate.setDate(date);\r\n };\r\n}])\r\n\r\n.controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\r\n this.step = { years: 1 };\r\n this.element = $element;\r\n\r\n this.init = function(ctrl) {\r\n angular.extend(ctrl, this);\r\n ctrl.refreshView();\r\n };\r\n\r\n this._refreshView = function() {\r\n var months = new Array(12),\r\n year = this.activeDate.getFullYear(),\r\n date;\r\n\r\n for (var i = 0; i < 12; i++) {\r\n date = new Date(this.activeDate);\r\n date.setFullYear(year, i, 1);\r\n months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {\r\n uid: scope.uniqueId + '-' + i\r\n });\r\n }\r\n\r\n scope.title = dateFilter(this.activeDate, this.formatMonthTitle);\r\n scope.rows = this.split(months, this.monthColumns);\r\n scope.yearHeaderColspan = this.monthColumns > 3 ? this.monthColumns - 2 : 1;\r\n };\r\n\r\n this.compare = function(date1, date2) {\r\n var _date1 = new Date(date1.getFullYear(), date1.getMonth());\r\n var _date2 = new Date(date2.getFullYear(), date2.getMonth());\r\n _date1.setFullYear(date1.getFullYear());\r\n _date2.setFullYear(date2.getFullYear());\r\n return _date1 - _date2;\r\n };\r\n\r\n this.handleKeyDown = function(key, evt) {\r\n var date = this.activeDate.getMonth();\r\n\r\n if (key === 'left') {\r\n date = date - 1;\r\n } else if (key === 'up') {\r\n date = date - this.monthColumns;\r\n } else if (key === 'right') {\r\n date = date + 1;\r\n } else if (key === 'down') {\r\n date = date + this.monthColumns;\r\n } else if (key === 'pageup' || key === 'pagedown') {\r\n var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);\r\n this.activeDate.setFullYear(year);\r\n } else if (key === 'home') {\r\n date = 0;\r\n } else if (key === 'end') {\r\n date = 11;\r\n }\r\n this.activeDate.setMonth(date);\r\n };\r\n}])\r\n\r\n.controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\r\n var columns, range;\r\n this.element = $element;\r\n\r\n function getStartingYear(year) {\r\n return parseInt((year - 1) / range, 10) * range + 1;\r\n }\r\n\r\n this.yearpickerInit = function() {\r\n columns = this.yearColumns;\r\n range = this.yearRows * columns;\r\n this.step = { years: range };\r\n };\r\n\r\n this._refreshView = function() {\r\n var years = new Array(range), date;\r\n\r\n for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {\r\n date = new Date(this.activeDate);\r\n date.setFullYear(start + i, 0, 1);\r\n years[i] = angular.extend(this.createDateObject(date, this.formatYear), {\r\n uid: scope.uniqueId + '-' + i\r\n });\r\n }\r\n\r\n scope.title = [years[0].label, years[range - 1].label].join(' - ');\r\n scope.rows = this.split(years, columns);\r\n scope.columns = columns;\r\n };\r\n\r\n this.compare = function(date1, date2) {\r\n return date1.getFullYear() - date2.getFullYear();\r\n };\r\n\r\n this.handleKeyDown = function(key, evt) {\r\n var date = this.activeDate.getFullYear();\r\n\r\n if (key === 'left') {\r\n date = date - 1;\r\n } else if (key === 'up') {\r\n date = date - columns;\r\n } else if (key === 'right') {\r\n date = date + 1;\r\n } else if (key === 'down') {\r\n date = date + columns;\r\n } else if (key === 'pageup' || key === 'pagedown') {\r\n date += (key === 'pageup' ? - 1 : 1) * range;\r\n } else if (key === 'home') {\r\n date = getStartingYear(this.activeDate.getFullYear());\r\n } else if (key === 'end') {\r\n date = getStartingYear(this.activeDate.getFullYear()) + range - 1;\r\n }\r\n this.activeDate.setFullYear(date);\r\n };\r\n}])\r\n\r\n.directive('uibDatepicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';\r\n },\r\n scope: {\r\n datepickerOptions: '=?'\r\n },\r\n require: ['uibDatepicker', '^ngModel'],\r\n restrict: 'A',\r\n controller: 'UibDatepickerController',\r\n controllerAs: 'datepicker',\r\n link: function(scope, element, attrs, ctrls) {\r\n var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n datepickerCtrl.init(ngModelCtrl);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDaypicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/day.html';\r\n },\r\n require: ['^uibDatepicker', 'uibDaypicker'],\r\n restrict: 'A',\r\n controller: 'UibDaypickerController',\r\n link: function(scope, element, attrs, ctrls) {\r\n var datepickerCtrl = ctrls[0],\r\n daypickerCtrl = ctrls[1];\r\n\r\n daypickerCtrl.init(datepickerCtrl);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibMonthpicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/month.html';\r\n },\r\n require: ['^uibDatepicker', 'uibMonthpicker'],\r\n restrict: 'A',\r\n controller: 'UibMonthpickerController',\r\n link: function(scope, element, attrs, ctrls) {\r\n var datepickerCtrl = ctrls[0],\r\n monthpickerCtrl = ctrls[1];\r\n\r\n monthpickerCtrl.init(datepickerCtrl);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibYearpicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/year.html';\r\n },\r\n require: ['^uibDatepicker', 'uibYearpicker'],\r\n restrict: 'A',\r\n controller: 'UibYearpickerController',\r\n link: function(scope, element, attrs, ctrls) {\r\n var ctrl = ctrls[0];\r\n angular.extend(ctrl, ctrls[1]);\r\n ctrl.yearpickerInit();\r\n\r\n ctrl.refreshView();\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.position', [])\r\n\r\n/**\r\n * A set of utility methods for working with the DOM.\r\n * It is meant to be used where we need to absolute-position elements in\r\n * relation to another element (this is the case for tooltips, popovers,\r\n * typeahead suggestions etc.).\r\n */\r\n .factory('$uibPosition', ['$document', '$window', function($document, $window) {\r\n /**\r\n * Used by scrollbarWidth() function to cache scrollbar's width.\r\n * Do not access this variable directly, use scrollbarWidth() instead.\r\n */\r\n var SCROLLBAR_WIDTH;\r\n /**\r\n * scrollbar on body and html element in IE and Edge overlay\r\n * content and should be considered 0 width.\r\n */\r\n var BODY_SCROLLBAR_WIDTH;\r\n var OVERFLOW_REGEX = {\r\n normal: /(auto|scroll)/,\r\n hidden: /(auto|scroll|hidden)/\r\n };\r\n var PLACEMENT_REGEX = {\r\n auto: /\\s?auto?\\s?/i,\r\n primary: /^(top|bottom|left|right)$/,\r\n secondary: /^(top|bottom|left|right|center)$/,\r\n vertical: /^(top|bottom)$/\r\n };\r\n var BODY_REGEX = /(HTML|BODY)/;\r\n\r\n return {\r\n\r\n /**\r\n * Provides a raw DOM element from a jQuery/jQLite element.\r\n *\r\n * @param {element} elem - The element to convert.\r\n *\r\n * @returns {element} A HTML element.\r\n */\r\n getRawNode: function(elem) {\r\n return elem.nodeName ? elem : elem[0] || elem;\r\n },\r\n\r\n /**\r\n * Provides a parsed number for a style property. Strips\r\n * units and casts invalid numbers to 0.\r\n *\r\n * @param {string} value - The style value to parse.\r\n *\r\n * @returns {number} A valid number.\r\n */\r\n parseStyle: function(value) {\r\n value = parseFloat(value);\r\n return isFinite(value) ? value : 0;\r\n },\r\n\r\n /**\r\n * Provides the closest positioned ancestor.\r\n *\r\n * @param {element} element - The element to get the offest parent for.\r\n *\r\n * @returns {element} The closest positioned ancestor.\r\n */\r\n offsetParent: function(elem) {\r\n elem = this.getRawNode(elem);\r\n\r\n var offsetParent = elem.offsetParent || $document[0].documentElement;\r\n\r\n function isStaticPositioned(el) {\r\n return ($window.getComputedStyle(el).position || 'static') === 'static';\r\n }\r\n\r\n while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\r\n offsetParent = offsetParent.offsetParent;\r\n }\r\n\r\n return offsetParent || $document[0].documentElement;\r\n },\r\n\r\n /**\r\n * Provides the scrollbar width, concept from TWBS measureScrollbar()\r\n * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\r\n * In IE and Edge, scollbar on body and html element overlay and should\r\n * return a width of 0.\r\n *\r\n * @returns {number} The width of the browser scollbar.\r\n */\r\n scrollbarWidth: function(isBody) {\r\n if (isBody) {\r\n if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\r\n var bodyElem = $document.find('body');\r\n bodyElem.addClass('uib-position-body-scrollbar-measure');\r\n BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\r\n BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\r\n bodyElem.removeClass('uib-position-body-scrollbar-measure');\r\n }\r\n return BODY_SCROLLBAR_WIDTH;\r\n }\r\n\r\n if (angular.isUndefined(SCROLLBAR_WIDTH)) {\r\n var scrollElem = angular.element('
');\r\n $document.find('body').append(scrollElem);\r\n SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\r\n SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\r\n scrollElem.remove();\r\n }\r\n\r\n return SCROLLBAR_WIDTH;\r\n },\r\n\r\n /**\r\n * Provides the padding required on an element to replace the scrollbar.\r\n *\r\n * @returns {object} An object with the following properties:\r\n * \r\n */\r\n scrollbarPadding: function(elem) {\r\n elem = this.getRawNode(elem);\r\n\r\n var elemStyle = $window.getComputedStyle(elem);\r\n var paddingRight = this.parseStyle(elemStyle.paddingRight);\r\n var paddingBottom = this.parseStyle(elemStyle.paddingBottom);\r\n var scrollParent = this.scrollParent(elem, false, true);\r\n var scrollbarWidth = this.scrollbarWidth(BODY_REGEX.test(scrollParent.tagName));\r\n\r\n return {\r\n scrollbarWidth: scrollbarWidth,\r\n widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\r\n right: paddingRight + scrollbarWidth,\r\n originalRight: paddingRight,\r\n heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\r\n bottom: paddingBottom + scrollbarWidth,\r\n originalBottom: paddingBottom\r\n };\r\n },\r\n\r\n /**\r\n * Checks to see if the element is scrollable.\r\n *\r\n * @param {element} elem - The element to check.\r\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n * default is false.\r\n *\r\n * @returns {boolean} Whether the element is scrollable.\r\n */\r\n isScrollable: function(elem, includeHidden) {\r\n elem = this.getRawNode(elem);\r\n\r\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n var elemStyle = $window.getComputedStyle(elem);\r\n return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\r\n },\r\n\r\n /**\r\n * Provides the closest scrollable ancestor.\r\n * A port of the jQuery UI scrollParent method:\r\n * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\r\n *\r\n * @param {element} elem - The element to find the scroll parent of.\r\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n * default is false.\r\n * @param {boolean=} [includeSelf=false] - Should the element being passed be\r\n * included in the scrollable llokup.\r\n *\r\n * @returns {element} A HTML element.\r\n */\r\n scrollParent: function(elem, includeHidden, includeSelf) {\r\n elem = this.getRawNode(elem);\r\n\r\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n var documentEl = $document[0].documentElement;\r\n var elemStyle = $window.getComputedStyle(elem);\r\n if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\r\n return elem;\r\n }\r\n var excludeStatic = elemStyle.position === 'absolute';\r\n var scrollParent = elem.parentElement || documentEl;\r\n\r\n if (scrollParent === documentEl || elemStyle.position === 'fixed') {\r\n return documentEl;\r\n }\r\n\r\n while (scrollParent.parentElement && scrollParent !== documentEl) {\r\n var spStyle = $window.getComputedStyle(scrollParent);\r\n if (excludeStatic && spStyle.position !== 'static') {\r\n excludeStatic = false;\r\n }\r\n\r\n if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\r\n break;\r\n }\r\n scrollParent = scrollParent.parentElement;\r\n }\r\n\r\n return scrollParent;\r\n },\r\n\r\n /**\r\n * Provides read-only equivalent of jQuery's position function:\r\n * http://api.jquery.com/position/ - distance to closest positioned\r\n * ancestor. Does not account for margins by default like jQuery position.\r\n *\r\n * @param {element} elem - The element to caclulate the position on.\r\n * @param {boolean=} [includeMargins=false] - Should margins be accounted\r\n * for, default is false.\r\n *\r\n * @returns {object} An object with the following properties:\r\n * \r\n */\r\n position: function(elem, includeMagins) {\r\n elem = this.getRawNode(elem);\r\n\r\n var elemOffset = this.offset(elem);\r\n if (includeMagins) {\r\n var elemStyle = $window.getComputedStyle(elem);\r\n elemOffset.top -= this.parseStyle(elemStyle.marginTop);\r\n elemOffset.left -= this.parseStyle(elemStyle.marginLeft);\r\n }\r\n var parent = this.offsetParent(elem);\r\n var parentOffset = {top: 0, left: 0};\r\n\r\n if (parent !== $document[0].documentElement) {\r\n parentOffset = this.offset(parent);\r\n parentOffset.top += parent.clientTop - parent.scrollTop;\r\n parentOffset.left += parent.clientLeft - parent.scrollLeft;\r\n }\r\n\r\n return {\r\n width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\r\n height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\r\n top: Math.round(elemOffset.top - parentOffset.top),\r\n left: Math.round(elemOffset.left - parentOffset.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/ - distance to viewport. Does\r\n * not account for borders, margins, or padding on the body\r\n * element.\r\n *\r\n * @param {element} elem - The element to calculate the offset on.\r\n *\r\n * @returns {object} An object with the following properties:\r\n * \r\n */\r\n offset: function(elem) {\r\n elem = this.getRawNode(elem);\r\n\r\n var elemBCR = elem.getBoundingClientRect();\r\n return {\r\n width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\r\n height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\r\n top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\r\n left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\r\n };\r\n },\r\n\r\n /**\r\n * Provides offset distance to the closest scrollable ancestor\r\n * or viewport. Accounts for border and scrollbar width.\r\n *\r\n * Right and bottom dimensions represent the distance to the\r\n * respective edge of the viewport element. If the element\r\n * edge extends beyond the viewport, a negative value will be\r\n * reported.\r\n *\r\n * @param {element} elem - The element to get the viewport offset for.\r\n * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\r\n * of the first scrollable element, default is false.\r\n * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\r\n * be accounted for, default is true.\r\n *\r\n * @returns {object} An object with the following properties:\r\n * \r\n */\r\n viewportOffset: function(elem, useDocument, includePadding) {\r\n elem = this.getRawNode(elem);\r\n includePadding = includePadding !== false ? true : false;\r\n\r\n var elemBCR = elem.getBoundingClientRect();\r\n var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\r\n\r\n var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\r\n var offsetParentBCR = offsetParent.getBoundingClientRect();\r\n\r\n offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\r\n offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\r\n if (offsetParent === $document[0].documentElement) {\r\n offsetBCR.top += $window.pageYOffset;\r\n offsetBCR.left += $window.pageXOffset;\r\n }\r\n offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\r\n offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\r\n\r\n if (includePadding) {\r\n var offsetParentStyle = $window.getComputedStyle(offsetParent);\r\n offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\r\n offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\r\n offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\r\n offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\r\n }\r\n\r\n return {\r\n top: Math.round(elemBCR.top - offsetBCR.top),\r\n bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\r\n left: Math.round(elemBCR.left - offsetBCR.left),\r\n right: Math.round(offsetBCR.right - elemBCR.right)\r\n };\r\n },\r\n\r\n /**\r\n * Provides an array of placement values parsed from a placement string.\r\n * Along with the 'auto' indicator, supported placement strings are:\r\n * \r\n * A placement string with an 'auto' indicator is expected to be\r\n * space separated from the placement, i.e: 'auto bottom-left' If\r\n * the primary and secondary placement values do not match 'top,\r\n * bottom, left, right' then 'top' will be the primary placement and\r\n * 'center' will be the secondary placement. If 'auto' is passed, true\r\n * will be returned as the 3rd value of the array.\r\n *\r\n * @param {string} placement - The placement string to parse.\r\n *\r\n * @returns {array} An array with the following values\r\n * \r\n */\r\n parsePlacement: function(placement) {\r\n var autoPlace = PLACEMENT_REGEX.auto.test(placement);\r\n if (autoPlace) {\r\n placement = placement.replace(PLACEMENT_REGEX.auto, '');\r\n }\r\n\r\n placement = placement.split('-');\r\n\r\n placement[0] = placement[0] || 'top';\r\n if (!PLACEMENT_REGEX.primary.test(placement[0])) {\r\n placement[0] = 'top';\r\n }\r\n\r\n placement[1] = placement[1] || 'center';\r\n if (!PLACEMENT_REGEX.secondary.test(placement[1])) {\r\n placement[1] = 'center';\r\n }\r\n\r\n if (autoPlace) {\r\n placement[2] = true;\r\n } else {\r\n placement[2] = false;\r\n }\r\n\r\n return placement;\r\n },\r\n\r\n /**\r\n * Provides coordinates for an element to be positioned relative to\r\n * another element. Passing 'auto' as part of the placement parameter\r\n * will enable smart placement - where the element fits. i.e:\r\n * 'auto left-top' will check to see if there is enough space to the left\r\n * of the hostElem to fit the targetElem, if not place right (same for secondary\r\n * top placement). Available space is calculated using the viewportOffset\r\n * function.\r\n *\r\n * @param {element} hostElem - The element to position against.\r\n * @param {element} targetElem - The element to position.\r\n * @param {string=} [placement=top] - The placement for the targetElem,\r\n * default is 'top'. 'center' is assumed as secondary placement for\r\n * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\r\n * \r\n * @param {boolean=} [appendToBody=false] - Should the top and left values returned\r\n * be calculated from the body element, default is false.\r\n *\r\n * @returns {object} An object with the following properties:\r\n * \r\n */\r\n positionElements: function(hostElem, targetElem, placement, appendToBody) {\r\n hostElem = this.getRawNode(hostElem);\r\n targetElem = this.getRawNode(targetElem);\r\n\r\n // need to read from prop to support tests.\r\n var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\r\n var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\r\n\r\n placement = this.parsePlacement(placement);\r\n\r\n var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\r\n var targetElemPos = {top: 0, left: 0, placement: ''};\r\n\r\n if (placement[2]) {\r\n var viewportOffset = this.viewportOffset(hostElem, appendToBody);\r\n\r\n var targetElemStyle = $window.getComputedStyle(targetElem);\r\n var adjustedSize = {\r\n width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\r\n height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\r\n };\r\n\r\n placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\r\n placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\r\n placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\r\n placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\r\n placement[0];\r\n\r\n placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\r\n placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\r\n placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\r\n placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\r\n placement[1];\r\n\r\n if (placement[1] === 'center') {\r\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n var xOverflow = hostElemPos.width / 2 - targetWidth / 2;\r\n if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\r\n placement[1] = 'left';\r\n } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\r\n placement[1] = 'right';\r\n }\r\n } else {\r\n var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\r\n if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\r\n placement[1] = 'top';\r\n } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\r\n placement[1] = 'bottom';\r\n }\r\n }\r\n }\r\n }\r\n\r\n switch (placement[0]) {\r\n case 'top':\r\n targetElemPos.top = hostElemPos.top - targetHeight;\r\n break;\r\n case 'bottom':\r\n targetElemPos.top = hostElemPos.top + hostElemPos.height;\r\n break;\r\n case 'left':\r\n targetElemPos.left = hostElemPos.left - targetWidth;\r\n break;\r\n case 'right':\r\n targetElemPos.left = hostElemPos.left + hostElemPos.width;\r\n break;\r\n }\r\n\r\n switch (placement[1]) {\r\n case 'top':\r\n targetElemPos.top = hostElemPos.top;\r\n break;\r\n case 'bottom':\r\n targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\r\n break;\r\n case 'left':\r\n targetElemPos.left = hostElemPos.left;\r\n break;\r\n case 'right':\r\n targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\r\n break;\r\n case 'center':\r\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\r\n } else {\r\n targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\r\n }\r\n break;\r\n }\r\n\r\n targetElemPos.top = Math.round(targetElemPos.top);\r\n targetElemPos.left = Math.round(targetElemPos.left);\r\n targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\r\n\r\n return targetElemPos;\r\n },\r\n\r\n /**\r\n * Provides a way to adjust the top positioning after first\r\n * render to correctly align element to top after content\r\n * rendering causes resized element height\r\n *\r\n * @param {array} placementClasses - The array of strings of classes\r\n * element should have.\r\n * @param {object} containerPosition - The object with container\r\n * position information\r\n * @param {number} initialHeight - The initial height for the elem.\r\n * @param {number} currentHeight - The current height for the elem.\r\n */\r\n adjustTop: function(placementClasses, containerPosition, initialHeight, currentHeight) {\r\n if (placementClasses.indexOf('top') !== -1 && initialHeight !== currentHeight) {\r\n return {\r\n top: containerPosition.top - currentHeight + 'px'\r\n };\r\n }\r\n },\r\n\r\n /**\r\n * Provides a way for positioning tooltip & dropdown\r\n * arrows when using placement options beyond the standard\r\n * left, right, top, or bottom.\r\n *\r\n * @param {element} elem - The tooltip/dropdown element.\r\n * @param {string} placement - The placement for the elem.\r\n */\r\n positionArrow: function(elem, placement) {\r\n elem = this.getRawNode(elem);\r\n\r\n var innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\r\n if (!innerElem) {\r\n return;\r\n }\r\n\r\n var isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\r\n\r\n var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\r\n if (!arrowElem) {\r\n return;\r\n }\r\n\r\n var arrowCss = {\r\n top: '',\r\n bottom: '',\r\n left: '',\r\n right: ''\r\n };\r\n\r\n placement = this.parsePlacement(placement);\r\n if (placement[1] === 'center') {\r\n // no adjustment necessary - just reset styles\r\n angular.element(arrowElem).css(arrowCss);\r\n return;\r\n }\r\n\r\n var borderProp = 'border-' + placement[0] + '-width';\r\n var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\r\n\r\n var borderRadiusProp = 'border-';\r\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n borderRadiusProp += placement[0] + '-' + placement[1];\r\n } else {\r\n borderRadiusProp += placement[1] + '-' + placement[0];\r\n }\r\n borderRadiusProp += '-radius';\r\n var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\r\n\r\n switch (placement[0]) {\r\n case 'top':\r\n arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n case 'bottom':\r\n arrowCss.top = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n case 'left':\r\n arrowCss.right = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n case 'right':\r\n arrowCss.left = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n }\r\n\r\n arrowCss[placement[1]] = borderRadius;\r\n\r\n angular.element(arrowElem).css(arrowCss);\r\n }\r\n };\r\n }]);\r\n\r\nangular.module('ui.bootstrap.datepickerPopup', ['ui.bootstrap.datepicker', 'ui.bootstrap.position'])\r\n\r\n.value('$datepickerPopupLiteralWarning', true)\r\n\r\n.constant('uibDatepickerPopupConfig', {\r\n altInputFormats: [],\r\n appendToBody: false,\r\n clearText: 'Clear',\r\n closeOnDateSelection: true,\r\n closeText: 'Done',\r\n currentText: 'Today',\r\n datepickerPopup: 'yyyy-MM-dd',\r\n datepickerPopupTemplateUrl: 'uib/template/datepickerPopup/popup.html',\r\n datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',\r\n html5Types: {\r\n date: 'yyyy-MM-dd',\r\n 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',\r\n 'month': 'yyyy-MM'\r\n },\r\n onOpenFocus: true,\r\n showButtonBar: true,\r\n placement: 'auto bottom-left'\r\n})\r\n\r\n.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$log', '$parse', '$window', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig', '$datepickerPopupLiteralWarning',\r\nfunction($scope, $element, $attrs, $compile, $log, $parse, $window, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig, $datepickerPopupLiteralWarning) {\r\n var cache = {},\r\n isHtml5DateInput = false;\r\n var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,\r\n datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl, scrollParentEl,\r\n ngModel, ngModelOptions, $popup, altInputFormats, watchListeners = [];\r\n\r\n this.init = function(_ngModel_) {\r\n ngModel = _ngModel_;\r\n ngModelOptions = extractOptions(ngModel);\r\n closeOnDateSelection = angular.isDefined($attrs.closeOnDateSelection) ?\r\n $scope.$parent.$eval($attrs.closeOnDateSelection) :\r\n datepickerPopupConfig.closeOnDateSelection;\r\n appendToBody = angular.isDefined($attrs.datepickerAppendToBody) ?\r\n $scope.$parent.$eval($attrs.datepickerAppendToBody) :\r\n datepickerPopupConfig.appendToBody;\r\n onOpenFocus = angular.isDefined($attrs.onOpenFocus) ?\r\n $scope.$parent.$eval($attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;\r\n datepickerPopupTemplateUrl = angular.isDefined($attrs.datepickerPopupTemplateUrl) ?\r\n $attrs.datepickerPopupTemplateUrl :\r\n datepickerPopupConfig.datepickerPopupTemplateUrl;\r\n datepickerTemplateUrl = angular.isDefined($attrs.datepickerTemplateUrl) ?\r\n $attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;\r\n altInputFormats = angular.isDefined($attrs.altInputFormats) ?\r\n $scope.$parent.$eval($attrs.altInputFormats) :\r\n datepickerPopupConfig.altInputFormats;\r\n\r\n $scope.showButtonBar = angular.isDefined($attrs.showButtonBar) ?\r\n $scope.$parent.$eval($attrs.showButtonBar) :\r\n datepickerPopupConfig.showButtonBar;\r\n\r\n if (datepickerPopupConfig.html5Types[$attrs.type]) {\r\n dateFormat = datepickerPopupConfig.html5Types[$attrs.type];\r\n isHtml5DateInput = true;\r\n } else {\r\n dateFormat = $attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;\r\n $attrs.$observe('uibDatepickerPopup', function(value, oldValue) {\r\n var newDateFormat = value || datepickerPopupConfig.datepickerPopup;\r\n // Invalidate the $modelValue to ensure that formatters re-run\r\n // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764\r\n if (newDateFormat !== dateFormat) {\r\n dateFormat = newDateFormat;\r\n ngModel.$modelValue = null;\r\n\r\n if (!dateFormat) {\r\n throw new Error('uibDatepickerPopup must have a date format specified.');\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (!dateFormat) {\r\n throw new Error('uibDatepickerPopup must have a date format specified.');\r\n }\r\n\r\n if (isHtml5DateInput && $attrs.uibDatepickerPopup) {\r\n throw new Error('HTML5 date input types do not support custom formats.');\r\n }\r\n\r\n // popup element used to display calendar\r\n popupEl = angular.element('
');\r\n\r\n popupEl.attr({\r\n 'ng-model': 'date',\r\n 'ng-change': 'dateSelection(date)',\r\n 'template-url': datepickerPopupTemplateUrl\r\n });\r\n\r\n // datepicker element\r\n datepickerEl = angular.element(popupEl.children()[0]);\r\n datepickerEl.attr('template-url', datepickerTemplateUrl);\r\n\r\n if (!$scope.datepickerOptions) {\r\n $scope.datepickerOptions = {};\r\n }\r\n\r\n if (isHtml5DateInput) {\r\n if ($attrs.type === 'month') {\r\n $scope.datepickerOptions.datepickerMode = 'month';\r\n $scope.datepickerOptions.minMode = 'month';\r\n }\r\n }\r\n\r\n datepickerEl.attr('datepicker-options', 'datepickerOptions');\r\n\r\n if (!isHtml5DateInput) {\r\n // Internal API to maintain the correct ng-invalid-[key] class\r\n ngModel.$$parserName = 'date';\r\n ngModel.$validators.date = validator;\r\n ngModel.$parsers.unshift(parseDate);\r\n ngModel.$formatters.push(function(value) {\r\n if (ngModel.$isEmpty(value)) {\r\n $scope.date = value;\r\n return value;\r\n }\r\n\r\n if (angular.isNumber(value)) {\r\n value = new Date(value);\r\n }\r\n\r\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\r\n\r\n return dateParser.filter($scope.date, dateFormat);\r\n });\r\n } else {\r\n ngModel.$formatters.push(function(value) {\r\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\r\n return value;\r\n });\r\n }\r\n\r\n // Detect changes in the view from the text box\r\n ngModel.$viewChangeListeners.push(function() {\r\n $scope.date = parseDateString(ngModel.$viewValue);\r\n });\r\n\r\n $element.on('keydown', inputKeydownBind);\r\n\r\n $popup = $compile(popupEl)($scope);\r\n // Prevent jQuery cache memory leak (template is now redundant after linking)\r\n popupEl.remove();\r\n\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 $scope.$on('$destroy', function() {\r\n if ($scope.isOpen === true) {\r\n if (!$rootScope.$$phase) {\r\n $scope.$apply(function() {\r\n $scope.isOpen = false;\r\n });\r\n }\r\n }\r\n\r\n $popup.remove();\r\n $element.off('keydown', inputKeydownBind);\r\n $document.off('click', documentClickBind);\r\n if (scrollParentEl) {\r\n scrollParentEl.off('scroll', positionPopup);\r\n }\r\n angular.element($window).off('resize', positionPopup);\r\n\r\n //Clear all watch listeners on destroy\r\n while (watchListeners.length) {\r\n watchListeners.shift()();\r\n }\r\n });\r\n };\r\n\r\n $scope.getText = function(key) {\r\n return $scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];\r\n };\r\n\r\n $scope.isDisabled = function(date) {\r\n if (date === 'today') {\r\n date = dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));\r\n }\r\n\r\n var dates = {};\r\n angular.forEach(['minDate', 'maxDate'], function(key) {\r\n if (!$scope.datepickerOptions[key]) {\r\n dates[key] = null;\r\n } else if (angular.isDate($scope.datepickerOptions[key])) {\r\n dates[key] = new Date($scope.datepickerOptions[key]);\r\n } else {\r\n if ($datepickerPopupLiteralWarning) {\r\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\r\n }\r\n\r\n dates[key] = new Date(dateFilter($scope.datepickerOptions[key], 'medium'));\r\n }\r\n });\r\n\r\n return $scope.datepickerOptions &&\r\n dates.minDate && $scope.compare(date, dates.minDate) < 0 ||\r\n dates.maxDate && $scope.compare(date, dates.maxDate) > 0;\r\n };\r\n\r\n $scope.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\r\n // Inner change\r\n $scope.dateSelection = function(dt) {\r\n $scope.date = dt;\r\n var date = $scope.date ? dateParser.filter($scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function\r\n $element.val(date);\r\n ngModel.$setViewValue(date);\r\n\r\n if (closeOnDateSelection) {\r\n $scope.isOpen = false;\r\n $element[0].focus();\r\n }\r\n };\r\n\r\n $scope.keydown = function(evt) {\r\n if (evt.which === 27) {\r\n evt.stopPropagation();\r\n $scope.isOpen = false;\r\n $element[0].focus();\r\n }\r\n };\r\n\r\n $scope.select = function(date, evt) {\r\n evt.stopPropagation();\r\n\r\n if (date === 'today') {\r\n var today = new Date();\r\n if (angular.isDate($scope.date)) {\r\n date = new Date($scope.date);\r\n date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());\r\n } else {\r\n date = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\r\n date.setHours(0, 0, 0, 0);\r\n }\r\n }\r\n $scope.dateSelection(date);\r\n };\r\n\r\n $scope.close = function(evt) {\r\n evt.stopPropagation();\r\n\r\n $scope.isOpen = false;\r\n $element[0].focus();\r\n };\r\n\r\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\r\n if ($attrs.ngDisabled) {\r\n watchListeners.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(disabled) {\r\n $scope.disabled = disabled;\r\n }));\r\n }\r\n\r\n $scope.$watch('isOpen', function(value) {\r\n if (value) {\r\n if (!$scope.disabled) {\r\n $timeout(function() {\r\n positionPopup();\r\n\r\n if (onOpenFocus) {\r\n $scope.$broadcast('uib:datepicker.focus');\r\n }\r\n\r\n $document.on('click', documentClickBind);\r\n\r\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\r\n if (appendToBody || $position.parsePlacement(placement)[2]) {\r\n scrollParentEl = scrollParentEl || angular.element($position.scrollParent($element));\r\n if (scrollParentEl) {\r\n scrollParentEl.on('scroll', positionPopup);\r\n }\r\n } else {\r\n scrollParentEl = null;\r\n }\r\n\r\n angular.element($window).on('resize', positionPopup);\r\n }, 0, false);\r\n } else {\r\n $scope.isOpen = false;\r\n }\r\n } else {\r\n $document.off('click', documentClickBind);\r\n if (scrollParentEl) {\r\n scrollParentEl.off('scroll', positionPopup);\r\n }\r\n angular.element($window).off('resize', positionPopup);\r\n }\r\n });\r\n\r\n function cameltoDash(string) {\r\n return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });\r\n }\r\n\r\n function parseDateString(viewValue) {\r\n var date = dateParser.parse(viewValue, dateFormat, $scope.date);\r\n if (isNaN(date)) {\r\n for (var i = 0; i < altInputFormats.length; i++) {\r\n date = dateParser.parse(viewValue, altInputFormats[i], $scope.date);\r\n if (!isNaN(date)) {\r\n return date;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n function parseDate(viewValue) {\r\n if (angular.isNumber(viewValue)) {\r\n // presumably timestamp to date object\r\n viewValue = new Date(viewValue);\r\n }\r\n\r\n if (!viewValue) {\r\n return null;\r\n }\r\n\r\n if (angular.isDate(viewValue) && !isNaN(viewValue)) {\r\n return viewValue;\r\n }\r\n\r\n if (angular.isString(viewValue)) {\r\n var date = parseDateString(viewValue);\r\n if (!isNaN(date)) {\r\n return dateParser.toTimezone(date, ngModelOptions.getOption('timezone'));\r\n }\r\n }\r\n\r\n return ngModelOptions.getOption('allowInvalid') ? viewValue : undefined;\r\n }\r\n\r\n function validator(modelValue, viewValue) {\r\n var value = modelValue || viewValue;\r\n\r\n if (!$attrs.ngRequired && !value) {\r\n return true;\r\n }\r\n\r\n if (angular.isNumber(value)) {\r\n value = new Date(value);\r\n }\r\n\r\n if (!value) {\r\n return true;\r\n }\r\n\r\n if (angular.isDate(value) && !isNaN(value)) {\r\n return true;\r\n }\r\n\r\n if (angular.isString(value)) {\r\n return !isNaN(parseDateString(value));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function documentClickBind(event) {\r\n if (!$scope.isOpen && $scope.disabled) {\r\n return;\r\n }\r\n\r\n var popup = $popup[0];\r\n var dpContainsTarget = $element[0].contains(event.target);\r\n // The popup node may not be an element node\r\n // In some browsers (IE) only element nodes have the 'contains' function\r\n var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);\r\n if ($scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {\r\n $scope.$apply(function() {\r\n $scope.isOpen = false;\r\n });\r\n }\r\n }\r\n\r\n function inputKeydownBind(evt) {\r\n if (evt.which === 27 && $scope.isOpen) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $scope.$apply(function() {\r\n $scope.isOpen = false;\r\n });\r\n $element[0].focus();\r\n } else if (evt.which === 40 && !$scope.isOpen) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $scope.$apply(function() {\r\n $scope.isOpen = true;\r\n });\r\n }\r\n }\r\n\r\n function positionPopup() {\r\n if ($scope.isOpen) {\r\n var dpElement = angular.element($popup[0].querySelector('.uib-datepicker-popup'));\r\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\r\n var position = $position.positionElements($element, dpElement, placement, appendToBody);\r\n dpElement.css({top: position.top + 'px', left: position.left + 'px'});\r\n if (dpElement.hasClass('uib-position-measure')) {\r\n dpElement.removeClass('uib-position-measure');\r\n }\r\n }\r\n }\r\n\r\n function extractOptions(ngModelCtrl) {\r\n var ngModelOptions;\r\n\r\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\r\n // guarantee a value\r\n ngModelOptions = angular.isObject(ngModelCtrl.$options) ?\r\n ngModelCtrl.$options :\r\n {\r\n timezone: null\r\n };\r\n\r\n // mimic 1.6+ api\r\n ngModelOptions.getOption = function (key) {\r\n return ngModelOptions[key];\r\n };\r\n } else { // in angular >=1.6 $options is always present\r\n ngModelOptions = ngModelCtrl.$options;\r\n }\r\n\r\n return ngModelOptions;\r\n }\r\n\r\n $scope.$on('uib:datepicker.mode', function() {\r\n $timeout(positionPopup, 0, false);\r\n });\r\n}])\r\n\r\n.directive('uibDatepickerPopup', function() {\r\n return {\r\n require: ['ngModel', 'uibDatepickerPopup'],\r\n controller: 'UibDatepickerPopupController',\r\n scope: {\r\n datepickerOptions: '=?',\r\n isOpen: '=?',\r\n currentText: '@',\r\n clearText: '@',\r\n closeText: '@'\r\n },\r\n link: function(scope, element, attrs, ctrls) {\r\n var ngModel = ctrls[0],\r\n ctrl = ctrls[1];\r\n\r\n ctrl.init(ngModel);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDatepickerPopupWrap', function() {\r\n return {\r\n restrict: 'A',\r\n transclude: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.debounce', [])\r\n/**\r\n * A helper, internal service that debounces a function\r\n */\r\n .factory('$$debounce', ['$timeout', function($timeout) {\r\n return function(callback, debounceTime) {\r\n var timeoutPromise;\r\n\r\n return function() {\r\n var self = this;\r\n var args = Array.prototype.slice.call(arguments);\r\n if (timeoutPromise) {\r\n $timeout.cancel(timeoutPromise);\r\n }\r\n\r\n timeoutPromise = $timeout(function() {\r\n callback.apply(self, args);\r\n }, debounceTime);\r\n };\r\n };\r\n }]);\r\n\r\nangular.module('ui.bootstrap.multiMap', [])\r\n/**\r\n * A helper, internal data structure that stores all references attached to key\r\n */\r\n .factory('$$multiMap', function() {\r\n return {\r\n createNew: function() {\r\n var map = {};\r\n\r\n return {\r\n entries: function() {\r\n return Object.keys(map).map(function(key) {\r\n return {\r\n key: key,\r\n value: map[key]\r\n };\r\n });\r\n },\r\n get: function(key) {\r\n return map[key];\r\n },\r\n hasKey: function(key) {\r\n return !!map[key];\r\n },\r\n keys: function() {\r\n return Object.keys(map);\r\n },\r\n put: function(key, value) {\r\n if (!map[key]) {\r\n map[key] = [];\r\n }\r\n\r\n map[key].push(value);\r\n },\r\n remove: function(key, value) {\r\n var values = map[key];\r\n\r\n if (!values) {\r\n return;\r\n }\r\n\r\n var idx = values.indexOf(value);\r\n\r\n if (idx !== -1) {\r\n values.splice(idx, 1);\r\n }\r\n\r\n if (!values.length) {\r\n delete map[key];\r\n }\r\n }\r\n };\r\n }\r\n };\r\n });\r\n\r\nangular.module('ui.bootstrap.dropdown', ['ui.bootstrap.multiMap', 'ui.bootstrap.position'])\r\n\r\n.constant('uibDropdownConfig', {\r\n appendToOpenClass: 'uib-dropdown-open',\r\n openClass: 'open'\r\n})\r\n\r\n.service('uibDropdownService', ['$document', '$rootScope', '$$multiMap', function($document, $rootScope, $$multiMap) {\r\n var openScope = null;\r\n var openedContainers = $$multiMap.createNew();\r\n\r\n this.isOnlyOpen = function(dropdownScope, appendTo) {\r\n var openedDropdowns = openedContainers.get(appendTo);\r\n if (openedDropdowns) {\r\n var openDropdown = openedDropdowns.reduce(function(toClose, dropdown) {\r\n if (dropdown.scope === dropdownScope) {\r\n return dropdown;\r\n }\r\n\r\n return toClose;\r\n }, {});\r\n if (openDropdown) {\r\n return openedDropdowns.length === 1;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n this.open = function(dropdownScope, element, appendTo) {\r\n if (!openScope) {\r\n $document.on('click', closeDropdown);\r\n }\r\n\r\n if (openScope && openScope !== dropdownScope) {\r\n openScope.isOpen = false;\r\n }\r\n\r\n openScope = dropdownScope;\r\n\r\n if (!appendTo) {\r\n return;\r\n }\r\n\r\n var openedDropdowns = openedContainers.get(appendTo);\r\n if (openedDropdowns) {\r\n var openedScopes = openedDropdowns.map(function(dropdown) {\r\n return dropdown.scope;\r\n });\r\n if (openedScopes.indexOf(dropdownScope) === -1) {\r\n openedContainers.put(appendTo, {\r\n scope: dropdownScope\r\n });\r\n }\r\n } else {\r\n openedContainers.put(appendTo, {\r\n scope: dropdownScope\r\n });\r\n }\r\n };\r\n\r\n this.close = function(dropdownScope, element, appendTo) {\r\n if (openScope === dropdownScope) {\r\n $document.off('click', closeDropdown);\r\n $document.off('keydown', this.keybindFilter);\r\n openScope = null;\r\n }\r\n\r\n if (!appendTo) {\r\n return;\r\n }\r\n\r\n var openedDropdowns = openedContainers.get(appendTo);\r\n if (openedDropdowns) {\r\n var dropdownToClose = openedDropdowns.reduce(function(toClose, dropdown) {\r\n if (dropdown.scope === dropdownScope) {\r\n return dropdown;\r\n }\r\n\r\n return toClose;\r\n }, {});\r\n if (dropdownToClose) {\r\n openedContainers.remove(appendTo, dropdownToClose);\r\n }\r\n }\r\n };\r\n\r\n var closeDropdown = function(evt) {\r\n // This method may still be called during the same mouse event that\r\n // unbound this event handler. So check openScope before proceeding.\r\n if (!openScope || !openScope.isOpen) { return; }\r\n\r\n if (evt && openScope.getAutoClose() === 'disabled') { return; }\r\n\r\n if (evt && evt.which === 3) { return; }\r\n\r\n var toggleElement = openScope.getToggleElement();\r\n if (evt && toggleElement && toggleElement[0].contains(evt.target)) {\r\n return;\r\n }\r\n\r\n var dropdownElement = openScope.getDropdownElement();\r\n if (evt && openScope.getAutoClose() === 'outsideClick' &&\r\n dropdownElement && dropdownElement[0].contains(evt.target)) {\r\n return;\r\n }\r\n\r\n openScope.focusToggleElement();\r\n openScope.isOpen = false;\r\n\r\n if (!$rootScope.$$phase) {\r\n openScope.$apply();\r\n }\r\n };\r\n\r\n this.keybindFilter = function(evt) {\r\n if (!openScope) {\r\n // see this.close as ESC could have been pressed which kills the scope so we can not proceed\r\n return;\r\n }\r\n\r\n var dropdownElement = openScope.getDropdownElement();\r\n var toggleElement = openScope.getToggleElement();\r\n var dropdownElementTargeted = dropdownElement && dropdownElement[0].contains(evt.target);\r\n var toggleElementTargeted = toggleElement && toggleElement[0].contains(evt.target);\r\n if (evt.which === 27) {\r\n evt.stopPropagation();\r\n openScope.focusToggleElement();\r\n closeDropdown();\r\n } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen && (dropdownElementTargeted || toggleElementTargeted)) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n openScope.focusDropdownEntry(evt.which);\r\n }\r\n };\r\n}])\r\n\r\n.controller('UibDropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest) {\r\n var self = this,\r\n scope = $scope.$new(), // create a child scope so we are not polluting original one\r\n templateScope,\r\n appendToOpenClass = dropdownConfig.appendToOpenClass,\r\n openClass = dropdownConfig.openClass,\r\n getIsOpen,\r\n setIsOpen = angular.noop,\r\n toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,\r\n keynavEnabled = false,\r\n selectedOption = null,\r\n body = $document.find('body');\r\n\r\n $element.addClass('dropdown');\r\n\r\n this.init = function() {\r\n if ($attrs.isOpen) {\r\n getIsOpen = $parse($attrs.isOpen);\r\n setIsOpen = getIsOpen.assign;\r\n\r\n $scope.$watch(getIsOpen, function(value) {\r\n scope.isOpen = !!value;\r\n });\r\n }\r\n\r\n keynavEnabled = angular.isDefined($attrs.keyboardNav);\r\n };\r\n\r\n this.toggle = function(open) {\r\n scope.isOpen = arguments.length ? !!open : !scope.isOpen;\r\n if (angular.isFunction(setIsOpen)) {\r\n setIsOpen(scope, scope.isOpen);\r\n }\r\n\r\n return scope.isOpen;\r\n };\r\n\r\n // Allow other directives to watch status\r\n this.isOpen = function() {\r\n return scope.isOpen;\r\n };\r\n\r\n scope.getToggleElement = function() {\r\n return self.toggleElement;\r\n };\r\n\r\n scope.getAutoClose = function() {\r\n return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'\r\n };\r\n\r\n scope.getElement = function() {\r\n return $element;\r\n };\r\n\r\n scope.isKeynavEnabled = function() {\r\n return keynavEnabled;\r\n };\r\n\r\n scope.focusDropdownEntry = function(keyCode) {\r\n var elems = self.dropdownMenu ? //If append to body is used.\r\n angular.element(self.dropdownMenu).find('a') :\r\n $element.find('ul').eq(0).find('a');\r\n\r\n switch (keyCode) {\r\n case 40: {\r\n if (!angular.isNumber(self.selectedOption)) {\r\n self.selectedOption = 0;\r\n } else {\r\n self.selectedOption = self.selectedOption === elems.length - 1 ?\r\n self.selectedOption :\r\n self.selectedOption + 1;\r\n }\r\n break;\r\n }\r\n case 38: {\r\n if (!angular.isNumber(self.selectedOption)) {\r\n self.selectedOption = elems.length - 1;\r\n } else {\r\n self.selectedOption = self.selectedOption === 0 ?\r\n 0 : self.selectedOption - 1;\r\n }\r\n break;\r\n }\r\n }\r\n elems[self.selectedOption].focus();\r\n };\r\n\r\n scope.getDropdownElement = function() {\r\n return self.dropdownMenu;\r\n };\r\n\r\n scope.focusToggleElement = function() {\r\n if (self.toggleElement) {\r\n self.toggleElement[0].focus();\r\n }\r\n };\r\n\r\n function removeDropdownMenu() {\r\n $element.append(self.dropdownMenu);\r\n }\r\n\r\n scope.$watch('isOpen', function(isOpen, wasOpen) {\r\n var appendTo = null,\r\n appendToBody = false;\r\n\r\n if (angular.isDefined($attrs.dropdownAppendTo)) {\r\n var appendToEl = $parse($attrs.dropdownAppendTo)(scope);\r\n if (appendToEl) {\r\n appendTo = angular.element(appendToEl);\r\n }\r\n }\r\n\r\n if (angular.isDefined($attrs.dropdownAppendToBody)) {\r\n var appendToBodyValue = $parse($attrs.dropdownAppendToBody)(scope);\r\n if (appendToBodyValue !== false) {\r\n appendToBody = true;\r\n }\r\n }\r\n\r\n if (appendToBody && !appendTo) {\r\n appendTo = body;\r\n }\r\n\r\n if (appendTo && self.dropdownMenu) {\r\n if (isOpen) {\r\n appendTo.append(self.dropdownMenu);\r\n $element.on('$destroy', removeDropdownMenu);\r\n } else {\r\n $element.off('$destroy', removeDropdownMenu);\r\n removeDropdownMenu();\r\n }\r\n }\r\n\r\n if (appendTo && self.dropdownMenu) {\r\n var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),\r\n css,\r\n rightalign,\r\n scrollbarPadding,\r\n scrollbarWidth = 0;\r\n\r\n css = {\r\n top: pos.top + 'px',\r\n display: isOpen ? 'block' : 'none'\r\n };\r\n\r\n rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');\r\n if (!rightalign) {\r\n css.left = pos.left + 'px';\r\n css.right = 'auto';\r\n } else {\r\n css.left = 'auto';\r\n scrollbarPadding = $position.scrollbarPadding(appendTo);\r\n\r\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\r\n scrollbarWidth = scrollbarPadding.scrollbarWidth;\r\n }\r\n\r\n css.right = window.innerWidth - scrollbarWidth -\r\n (pos.left + $element.prop('offsetWidth')) + 'px';\r\n }\r\n\r\n // Need to adjust our positioning to be relative to the appendTo container\r\n // if it's not the body element\r\n if (!appendToBody) {\r\n var appendOffset = $position.offset(appendTo);\r\n\r\n css.top = pos.top - appendOffset.top + 'px';\r\n\r\n if (!rightalign) {\r\n css.left = pos.left - appendOffset.left + 'px';\r\n } else {\r\n css.right = window.innerWidth -\r\n (pos.left - appendOffset.left + $element.prop('offsetWidth')) + 'px';\r\n }\r\n }\r\n\r\n self.dropdownMenu.css(css);\r\n }\r\n\r\n var openContainer = appendTo ? appendTo : $element;\r\n var dropdownOpenClass = appendTo ? appendToOpenClass : openClass;\r\n var hasOpenClass = openContainer.hasClass(dropdownOpenClass);\r\n var isOnlyOpen = uibDropdownService.isOnlyOpen($scope, appendTo);\r\n\r\n if (hasOpenClass === !isOpen) {\r\n var toggleClass;\r\n if (appendTo) {\r\n toggleClass = !isOnlyOpen ? 'addClass' : 'removeClass';\r\n } else {\r\n toggleClass = isOpen ? 'addClass' : 'removeClass';\r\n }\r\n $animate[toggleClass](openContainer, dropdownOpenClass).then(function() {\r\n if (angular.isDefined(isOpen) && isOpen !== wasOpen) {\r\n toggleInvoker($scope, { open: !!isOpen });\r\n }\r\n });\r\n }\r\n\r\n if (isOpen) {\r\n if (self.dropdownMenuTemplateUrl) {\r\n $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {\r\n templateScope = scope.$new();\r\n $compile(tplContent.trim())(templateScope, function(dropdownElement) {\r\n var newEl = dropdownElement;\r\n self.dropdownMenu.replaceWith(newEl);\r\n self.dropdownMenu = newEl;\r\n $document.on('keydown', uibDropdownService.keybindFilter);\r\n });\r\n });\r\n } else {\r\n $document.on('keydown', uibDropdownService.keybindFilter);\r\n }\r\n\r\n scope.focusToggleElement();\r\n uibDropdownService.open(scope, $element, appendTo);\r\n } else {\r\n uibDropdownService.close(scope, $element, appendTo);\r\n if (self.dropdownMenuTemplateUrl) {\r\n if (templateScope) {\r\n templateScope.$destroy();\r\n }\r\n var newEl = angular.element('');\r\n self.dropdownMenu.replaceWith(newEl);\r\n self.dropdownMenu = newEl;\r\n }\r\n\r\n self.selectedOption = null;\r\n }\r\n\r\n if (angular.isFunction(setIsOpen)) {\r\n setIsOpen($scope, isOpen);\r\n }\r\n });\r\n}])\r\n\r\n.directive('uibDropdown', function() {\r\n return {\r\n controller: 'UibDropdownController',\r\n link: function(scope, element, attrs, dropdownCtrl) {\r\n dropdownCtrl.init();\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDropdownMenu', function() {\r\n return {\r\n restrict: 'A',\r\n require: '?^uibDropdown',\r\n link: function(scope, element, attrs, dropdownCtrl) {\r\n if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {\r\n return;\r\n }\r\n\r\n element.addClass('dropdown-menu');\r\n\r\n var tplUrl = attrs.templateUrl;\r\n if (tplUrl) {\r\n dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;\r\n }\r\n\r\n if (!dropdownCtrl.dropdownMenu) {\r\n dropdownCtrl.dropdownMenu = element;\r\n }\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDropdownToggle', function() {\r\n return {\r\n require: '?^uibDropdown',\r\n link: function(scope, element, attrs, dropdownCtrl) {\r\n if (!dropdownCtrl) {\r\n return;\r\n }\r\n\r\n element.addClass('dropdown-toggle');\r\n\r\n dropdownCtrl.toggleElement = element;\r\n\r\n var toggleDropdown = function(event) {\r\n event.preventDefault();\r\n\r\n if (!element.hasClass('disabled') && !attrs.disabled) {\r\n scope.$apply(function() {\r\n dropdownCtrl.toggle();\r\n });\r\n }\r\n };\r\n\r\n element.on('click', toggleDropdown);\r\n\r\n // WAI-ARIA\r\n element.attr({ 'aria-haspopup': true, 'aria-expanded': false });\r\n scope.$watch(dropdownCtrl.isOpen, function(isOpen) {\r\n element.attr('aria-expanded', !!isOpen);\r\n });\r\n\r\n scope.$on('$destroy', function() {\r\n element.off('click', toggleDropdown);\r\n });\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.stackedMap', [])\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.pop();\r\n },\r\n length: function() {\r\n return stack.length;\r\n }\r\n };\r\n }\r\n };\r\n });\r\nangular.module('ui.bootstrap.modal', ['ui.bootstrap.multiMap', 'ui.bootstrap.stackedMap', 'ui.bootstrap.position'])\r\n/**\r\n * Pluggable resolve mechanism for the modal resolve resolution\r\n * Supports UI Router's $resolve service\r\n */\r\n .provider('$uibResolve', function() {\r\n var resolve = this;\r\n this.resolver = null;\r\n\r\n this.setResolver = function(resolver) {\r\n this.resolver = resolver;\r\n };\r\n\r\n this.$get = ['$injector', '$q', function($injector, $q) {\r\n var resolver = resolve.resolver ? $injector.get(resolve.resolver) : null;\r\n return {\r\n resolve: function(invocables, locals, parent, self) {\r\n if (resolver) {\r\n return resolver.resolve(invocables, locals, parent, self);\r\n }\r\n\r\n var promises = [];\r\n\r\n angular.forEach(invocables, function(value) {\r\n if (angular.isFunction(value) || angular.isArray(value)) {\r\n promises.push($q.resolve($injector.invoke(value)));\r\n } else if (angular.isString(value)) {\r\n promises.push($q.resolve($injector.get(value)));\r\n } else {\r\n promises.push($q.resolve(value));\r\n }\r\n });\r\n\r\n return $q.all(promises).then(function(resolves) {\r\n var resolveObj = {};\r\n var resolveIter = 0;\r\n angular.forEach(invocables, function(value, key) {\r\n resolveObj[key] = resolves[resolveIter++];\r\n });\r\n\r\n return resolveObj;\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('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',\r\n function($animate, $injector, $modalStack) {\r\n return {\r\n restrict: 'A',\r\n compile: function(tElement, tAttrs) {\r\n tElement.addClass(tAttrs.backdropClass);\r\n return linkFn;\r\n }\r\n };\r\n\r\n function linkFn(scope, element, attrs) {\r\n if (attrs.modalInClass) {\r\n $animate.addClass(element, attrs.modalInClass);\r\n\r\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\r\n var done = setIsAsync();\r\n if (scope.modalOptions.animation) {\r\n $animate.removeClass(element, attrs.modalInClass).then(done);\r\n } else {\r\n done();\r\n }\r\n });\r\n }\r\n }\r\n }])\r\n\r\n .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',\r\n function($modalStack, $q, $animateCss, $document) {\r\n return {\r\n scope: {\r\n index: '@'\r\n },\r\n restrict: 'A',\r\n transclude: true,\r\n templateUrl: function(tElement, tAttrs) {\r\n return tAttrs.templateUrl || 'uib/template/modal/window.html';\r\n },\r\n link: function(scope, element, attrs) {\r\n element.addClass(attrs.windowTopClass || '');\r\n scope.size = attrs.size;\r\n\r\n scope.close = function(evt) {\r\n var modal = $modalStack.getTop();\r\n if (modal && modal.value.backdrop &&\r\n modal.value.backdrop !== 'static' &&\r\n 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 // moved from template to fix issue #2280\r\n element.on('click', scope.close);\r\n\r\n // This property is only added to the scope for the purpose of detecting when this directive is rendered.\r\n // We can detect that by using this property in the template associated with this directive and then use\r\n // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.\r\n scope.$isRendered = true;\r\n\r\n // Deferred object that will be resolved when this modal is rendered.\r\n var modalRenderDeferObj = $q.defer();\r\n // Resolve render promise post-digest\r\n scope.$$postDigest(function() {\r\n modalRenderDeferObj.resolve();\r\n });\r\n\r\n modalRenderDeferObj.promise.then(function() {\r\n var animationPromise = null;\r\n\r\n if (attrs.modalInClass) {\r\n animationPromise = $animateCss(element, {\r\n addClass: attrs.modalInClass\r\n }).start();\r\n\r\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\r\n var done = setIsAsync();\r\n $animateCss(element, {\r\n removeClass: attrs.modalInClass\r\n }).start().then(done);\r\n });\r\n }\r\n\r\n\r\n $q.when(animationPromise).then(function() {\r\n // Notify {@link $modalStack} that modal is rendered.\r\n var modal = $modalStack.getTop();\r\n if (modal) {\r\n $modalStack.modalRendered(modal.key);\r\n }\r\n\r\n /**\r\n * If something within the freshly-opened modal already has focus (perhaps via a\r\n * directive that causes focus) then there's no need to try to focus anything.\r\n */\r\n if (!($document[0].activeElement && element[0].contains($document[0].activeElement))) {\r\n var inputWithAutofocus = element[0].querySelector('[autofocus]');\r\n /**\r\n * Auto-focusing of a freshly-opened modal element causes any child elements\r\n * with the autofocus attribute to lose focus. This is an issue on touch\r\n * based devices which will show and then hide the onscreen keyboard.\r\n * Attempts to refocus the autofocus element via JavaScript will not reopen\r\n * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus\r\n * the modal element if the modal does not contain an autofocus element.\r\n */\r\n if (inputWithAutofocus) {\r\n inputWithAutofocus.focus();\r\n } else {\r\n element[0].focus();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n }])\r\n\r\n .directive('uibModalAnimationClass', function() {\r\n return {\r\n compile: function(tElement, tAttrs) {\r\n if (tAttrs.modalAnimation) {\r\n tElement.addClass(tAttrs.uibModalAnimationClass);\r\n }\r\n }\r\n };\r\n })\r\n\r\n .directive('uibModalTransclude', ['$animate', function($animate) {\r\n return {\r\n link: function(scope, element, attrs, controller, transclude) {\r\n transclude(scope.$parent, function(clone) {\r\n element.empty();\r\n $animate.enter(clone, element);\r\n });\r\n }\r\n };\r\n }])\r\n\r\n .factory('$uibModalStack', ['$animate', '$animateCss', '$document',\r\n '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',\r\n function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {\r\n var OPENED_MODAL_CLASS = 'modal-open';\r\n\r\n var backdropDomEl, backdropScope;\r\n var openedWindows = $$stackedMap.createNew();\r\n var openedClasses = $$multiMap.createNew();\r\n var $modalStack = {\r\n NOW_CLOSING_EVENT: 'modal.stack.now-closing'\r\n };\r\n var topModalIndex = 0;\r\n var previousTopOpenedModal = null;\r\n var ARIA_HIDDEN_ATTRIBUTE_NAME = 'data-bootstrap-modal-aria-hidden-count';\r\n\r\n //Modal focus behavior\r\n var tabbableSelector = 'a[href], area[href], input:not([disabled]):not([tabindex=\\'-1\\']), ' +\r\n 'button:not([disabled]):not([tabindex=\\'-1\\']),select:not([disabled]):not([tabindex=\\'-1\\']), textarea:not([disabled]):not([tabindex=\\'-1\\']), ' +\r\n 'iframe, object, embed, *[tabindex]:not([tabindex=\\'-1\\']), *[contenteditable=true]';\r\n var scrollbarPadding;\r\n var SNAKE_CASE_REGEXP = /[A-Z]/g;\r\n\r\n // TODO: extract into common dependency with tooltip\r\n function snake_case(name) {\r\n var separator = '-';\r\n return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\r\n return (pos ? separator : '') + letter.toLowerCase();\r\n });\r\n }\r\n\r\n function isVisible(element) {\r\n return !!(element.offsetWidth ||\r\n element.offsetHeight ||\r\n element.getClientRects().length);\r\n }\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\r\n // If any backdrop exist, ensure that it's index is always\r\n // right below the top modal\r\n if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {\r\n topBackdropIndex = topModalIndex;\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, elementToReceiveFocus) {\r\n var modalWindow = openedWindows.get(modalInstance).value;\r\n var appendToElement = modalWindow.appendTo;\r\n\r\n //clean up the stack\r\n openedWindows.remove(modalInstance);\r\n previousTopOpenedModal = openedWindows.top();\r\n if (previousTopOpenedModal) {\r\n topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);\r\n }\r\n\r\n removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {\r\n var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;\r\n openedClasses.remove(modalBodyClass, modalInstance);\r\n var areAnyOpen = openedClasses.hasKey(modalBodyClass);\r\n appendToElement.toggleClass(modalBodyClass, areAnyOpen);\r\n if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\r\n if (scrollbarPadding.originalRight) {\r\n appendToElement.css({paddingRight: scrollbarPadding.originalRight + 'px'});\r\n } else {\r\n appendToElement.css({paddingRight: ''});\r\n }\r\n scrollbarPadding = null;\r\n }\r\n toggleTopWindowClass(true);\r\n }, modalWindow.closedDeferred);\r\n checkRemoveBackdrop();\r\n\r\n //move focus to specified element if available, or else to body\r\n if (elementToReceiveFocus && elementToReceiveFocus.focus) {\r\n elementToReceiveFocus.focus();\r\n } else if (appendToElement.focus) {\r\n appendToElement.focus();\r\n }\r\n }\r\n\r\n // Add or remove \"windowTopClass\" from the top window in the stack\r\n function toggleTopWindowClass(toggleSwitch) {\r\n var modalWindow;\r\n\r\n if (openedWindows.length() > 0) {\r\n modalWindow = openedWindows.top().value;\r\n modalWindow.modalDomEl.toggleClass(modalWindow.windowTopClass || '', toggleSwitch);\r\n }\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, function() {\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, done, closedDeferred) {\r\n var asyncDeferred;\r\n var asyncPromise = null;\r\n var setIsAsync = function() {\r\n if (!asyncDeferred) {\r\n asyncDeferred = $q.defer();\r\n asyncPromise = asyncDeferred.promise;\r\n }\r\n\r\n return function asyncDone() {\r\n asyncDeferred.resolve();\r\n };\r\n };\r\n scope.$broadcast($modalStack.NOW_CLOSING_EVENT, setIsAsync);\r\n\r\n // Note that it's intentional that asyncPromise might be null.\r\n // That's when setIsAsync has not been called during the\r\n // NOW_CLOSING_EVENT broadcast.\r\n return $q.when(asyncPromise).then(afterAnimating);\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 $animate.leave(domEl).then(function() {\r\n if (done) {\r\n done();\r\n }\r\n\r\n domEl.remove();\r\n if (closedDeferred) {\r\n closedDeferred.resolve();\r\n }\r\n });\r\n\r\n scope.$destroy();\r\n }\r\n }\r\n\r\n $document.on('keydown', keydownListener);\r\n\r\n $rootScope.$on('$destroy', function() {\r\n $document.off('keydown', keydownListener);\r\n });\r\n\r\n function keydownListener(evt) {\r\n if (evt.isDefaultPrevented()) {\r\n return evt;\r\n }\r\n\r\n var modal = openedWindows.top();\r\n if (modal) {\r\n switch (evt.which) {\r\n case 27: {\r\n if (modal.value.keyboard) {\r\n evt.preventDefault();\r\n $rootScope.$apply(function() {\r\n $modalStack.dismiss(modal.key, 'escape key press');\r\n });\r\n }\r\n break;\r\n }\r\n case 9: {\r\n var list = $modalStack.loadFocusElementList(modal);\r\n var focusChanged = false;\r\n if (evt.shiftKey) {\r\n if ($modalStack.isFocusInFirstItem(evt, list) || $modalStack.isModalFocused(evt, modal)) {\r\n focusChanged = $modalStack.focusLastFocusableElement(list);\r\n }\r\n } else {\r\n if ($modalStack.isFocusInLastItem(evt, list)) {\r\n focusChanged = $modalStack.focusFirstFocusableElement(list);\r\n }\r\n }\r\n\r\n if (focusChanged) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $modalStack.open = function(modalInstance, modal) {\r\n var modalOpener = $document[0].activeElement,\r\n modalBodyClass = modal.openedClass || OPENED_MODAL_CLASS;\r\n\r\n toggleTopWindowClass(false);\r\n\r\n // Store the current top first, to determine what index we ought to use\r\n // for the current top modal\r\n previousTopOpenedModal = openedWindows.top();\r\n\r\n openedWindows.add(modalInstance, {\r\n deferred: modal.deferred,\r\n renderDeferred: modal.renderDeferred,\r\n closedDeferred: modal.closedDeferred,\r\n modalScope: modal.scope,\r\n backdrop: modal.backdrop,\r\n keyboard: modal.keyboard,\r\n openedClass: modal.openedClass,\r\n windowTopClass: modal.windowTopClass,\r\n animation: modal.animation,\r\n appendTo: modal.appendTo\r\n });\r\n\r\n openedClasses.put(modalBodyClass, modalInstance);\r\n\r\n var appendToElement = modal.appendTo,\r\n currBackdropIndex = backdropIndex();\r\n\r\n if (currBackdropIndex >= 0 && !backdropDomEl) {\r\n backdropScope = $rootScope.$new(true);\r\n backdropScope.modalOptions = modal;\r\n backdropScope.index = currBackdropIndex;\r\n backdropDomEl = angular.element('
');\r\n backdropDomEl.attr({\r\n 'class': 'modal-backdrop',\r\n 'ng-style': '{\\'z-index\\': 1040 + (index && 1 || 0) + index*10}',\r\n 'uib-modal-animation-class': 'fade',\r\n 'modal-in-class': 'in'\r\n });\r\n if (modal.backdropClass) {\r\n backdropDomEl.addClass(modal.backdropClass);\r\n }\r\n\r\n if (modal.animation) {\r\n backdropDomEl.attr('modal-animation', 'true');\r\n }\r\n $compile(backdropDomEl)(backdropScope);\r\n $animate.enter(backdropDomEl, appendToElement);\r\n if ($uibPosition.isScrollable(appendToElement)) {\r\n scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);\r\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\r\n appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});\r\n }\r\n }\r\n }\r\n\r\n var content;\r\n if (modal.component) {\r\n content = document.createElement(snake_case(modal.component.name));\r\n content = angular.element(content);\r\n content.attr({\r\n resolve: '$resolve',\r\n 'modal-instance': '$uibModalInstance',\r\n close: '$close($value)',\r\n dismiss: '$dismiss($value)'\r\n });\r\n } else {\r\n content = modal.content;\r\n }\r\n\r\n // Set the top modal index based on the index of the previous top modal\r\n topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;\r\n var angularDomEl = angular.element('
');\r\n angularDomEl.attr({\r\n 'class': 'modal',\r\n 'template-url': modal.windowTemplateUrl,\r\n 'window-top-class': modal.windowTopClass,\r\n 'role': 'dialog',\r\n 'aria-labelledby': modal.ariaLabelledBy,\r\n 'aria-describedby': modal.ariaDescribedBy,\r\n 'size': modal.size,\r\n 'index': topModalIndex,\r\n 'animate': 'animate',\r\n 'ng-style': '{\\'z-index\\': 1050 + $$topModalIndex*10, display: \\'block\\'}',\r\n 'tabindex': -1,\r\n 'uib-modal-animation-class': 'fade',\r\n 'modal-in-class': 'in'\r\n }).append(content);\r\n if (modal.windowClass) {\r\n angularDomEl.addClass(modal.windowClass);\r\n }\r\n\r\n if (modal.animation) {\r\n angularDomEl.attr('modal-animation', 'true');\r\n }\r\n\r\n appendToElement.addClass(modalBodyClass);\r\n if (modal.scope) {\r\n // we need to explicitly add the modal index to the modal scope\r\n // because it is needed by ngStyle to compute the zIndex property.\r\n modal.scope.$$topModalIndex = topModalIndex;\r\n }\r\n $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);\r\n\r\n openedWindows.top().value.modalDomEl = angularDomEl;\r\n openedWindows.top().value.modalOpener = modalOpener;\r\n\r\n applyAriaHidden(angularDomEl);\r\n\r\n function applyAriaHidden(el) {\r\n if (!el || el[0].tagName === 'BODY') {\r\n return;\r\n }\r\n\r\n getSiblings(el).forEach(function(sibling) {\r\n var elemIsAlreadyHidden = sibling.getAttribute('aria-hidden') === 'true',\r\n ariaHiddenCount = parseInt(sibling.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10);\r\n\r\n if (!ariaHiddenCount) {\r\n ariaHiddenCount = elemIsAlreadyHidden ? 1 : 0;\r\n }\r\n\r\n sibling.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, ariaHiddenCount + 1);\r\n sibling.setAttribute('aria-hidden', 'true');\r\n });\r\n\r\n return applyAriaHidden(el.parent());\r\n\r\n function getSiblings(el) {\r\n var children = el.parent() ? el.parent().children() : [];\r\n\r\n return Array.prototype.filter.call(children, function(child) {\r\n return child !== el[0];\r\n });\r\n }\r\n }\r\n };\r\n\r\n function broadcastClosing(modalWindow, resultOrReason, closing) {\r\n return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;\r\n }\r\n\r\n function unhideBackgroundElements() {\r\n Array.prototype.forEach.call(\r\n document.querySelectorAll('[' + ARIA_HIDDEN_ATTRIBUTE_NAME + ']'),\r\n function(hiddenEl) {\r\n var ariaHiddenCount = parseInt(hiddenEl.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10),\r\n newHiddenCount = ariaHiddenCount - 1;\r\n hiddenEl.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, newHiddenCount);\r\n\r\n if (!newHiddenCount) {\r\n hiddenEl.removeAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME);\r\n hiddenEl.removeAttribute('aria-hidden');\r\n }\r\n }\r\n );\r\n }\r\n\r\n $modalStack.close = function(modalInstance, result) {\r\n var modalWindow = openedWindows.get(modalInstance);\r\n unhideBackgroundElements();\r\n if (modalWindow && broadcastClosing(modalWindow, result, true)) {\r\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\r\n modalWindow.value.deferred.resolve(result);\r\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\r\n return true;\r\n }\r\n\r\n return !modalWindow;\r\n };\r\n\r\n $modalStack.dismiss = function(modalInstance, reason) {\r\n var modalWindow = openedWindows.get(modalInstance);\r\n unhideBackgroundElements();\r\n if (modalWindow && broadcastClosing(modalWindow, reason, false)) {\r\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\r\n modalWindow.value.deferred.reject(reason);\r\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\r\n return true;\r\n }\r\n return !modalWindow;\r\n };\r\n\r\n $modalStack.dismissAll = function(reason) {\r\n var topModal = this.getTop();\r\n while (topModal && 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 $modalStack.modalRendered = function(modalInstance) {\r\n var modalWindow = openedWindows.get(modalInstance);\r\n if (modalWindow) {\r\n modalWindow.value.renderDeferred.resolve();\r\n }\r\n };\r\n\r\n $modalStack.focusFirstFocusableElement = function(list) {\r\n if (list.length > 0) {\r\n list[0].focus();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.focusLastFocusableElement = function(list) {\r\n if (list.length > 0) {\r\n list[list.length - 1].focus();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.isModalFocused = function(evt, modalWindow) {\r\n if (evt && modalWindow) {\r\n var modalDomEl = modalWindow.value.modalDomEl;\r\n if (modalDomEl && modalDomEl.length) {\r\n return (evt.target || evt.srcElement) === modalDomEl[0];\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.isFocusInFirstItem = function(evt, list) {\r\n if (list.length > 0) {\r\n return (evt.target || evt.srcElement) === list[0];\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.isFocusInLastItem = function(evt, list) {\r\n if (list.length > 0) {\r\n return (evt.target || evt.srcElement) === list[list.length - 1];\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.loadFocusElementList = function(modalWindow) {\r\n if (modalWindow) {\r\n var modalDomE1 = modalWindow.value.modalDomEl;\r\n if (modalDomE1 && modalDomE1.length) {\r\n var elements = modalDomE1[0].querySelectorAll(tabbableSelector);\r\n return elements ?\r\n Array.prototype.filter.call(elements, function(element) {\r\n return isVisible(element);\r\n }) : elements;\r\n }\r\n }\r\n };\r\n\r\n return $modalStack;\r\n }])\r\n\r\n .provider('$uibModal', function() {\r\n var $modalProvider = {\r\n options: {\r\n animation: true,\r\n backdrop: true, //can also be false or 'static'\r\n keyboard: true\r\n },\r\n $get: ['$rootScope', '$q', '$document', '$templateRequest', '$controller', '$uibResolve', '$uibModalStack',\r\n function ($rootScope, $q, $document, $templateRequest, $controller, $uibResolve, $modalStack) {\r\n var $modal = {};\r\n\r\n function getTemplatePromise(options) {\r\n return options.template ? $q.when(options.template) :\r\n $templateRequest(angular.isFunction(options.templateUrl) ?\r\n options.templateUrl() : options.templateUrl);\r\n }\r\n\r\n var promiseChain = null;\r\n $modal.getPromiseChain = function() {\r\n return promiseChain;\r\n };\r\n\r\n $modal.open = function(modalOptions) {\r\n var modalResultDeferred = $q.defer();\r\n var modalOpenedDeferred = $q.defer();\r\n var modalClosedDeferred = $q.defer();\r\n var modalRenderDeferred = $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 closed: modalClosedDeferred.promise,\r\n rendered: modalRenderDeferred.promise,\r\n close: function (result) {\r\n return $modalStack.close(modalInstance, result);\r\n },\r\n dismiss: function (reason) {\r\n return $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 modalOptions.appendTo = modalOptions.appendTo || $document.find('body').eq(0);\r\n\r\n if (!modalOptions.appendTo.length) {\r\n throw new Error('appendTo element not found. Make sure that the element passed is in DOM.');\r\n }\r\n\r\n //verify options\r\n if (!modalOptions.component && !modalOptions.template && !modalOptions.templateUrl) {\r\n throw new Error('One of component or template or templateUrl options is required.');\r\n }\r\n\r\n var templateAndResolvePromise;\r\n if (modalOptions.component) {\r\n templateAndResolvePromise = $q.when($uibResolve.resolve(modalOptions.resolve, {}, null, null));\r\n } else {\r\n templateAndResolvePromise =\r\n $q.all([getTemplatePromise(modalOptions), $uibResolve.resolve(modalOptions.resolve, {}, null, null)]);\r\n }\r\n\r\n function resolveWithTemplate() {\r\n return templateAndResolvePromise;\r\n }\r\n\r\n // Wait for the resolution of the existing promise chain.\r\n // Then switch to our own combined promise dependency (regardless of how the previous modal fared).\r\n // Then add to $modalStack and resolve opened.\r\n // Finally clean up the chain variable if no subsequent modal has overwritten it.\r\n var samePromise;\r\n samePromise = promiseChain = $q.all([promiseChain])\r\n .then(resolveWithTemplate, resolveWithTemplate)\r\n .then(function resolveSuccess(tplAndVars) {\r\n var providedScope = modalOptions.scope || $rootScope;\r\n\r\n var modalScope = providedScope.$new();\r\n modalScope.$close = modalInstance.close;\r\n modalScope.$dismiss = modalInstance.dismiss;\r\n\r\n modalScope.$on('$destroy', function() {\r\n if (!modalScope.$$uibDestructionScheduled) {\r\n modalScope.$dismiss('$uibUnscheduledDestruction');\r\n }\r\n });\r\n\r\n var modal = {\r\n scope: modalScope,\r\n deferred: modalResultDeferred,\r\n renderDeferred: modalRenderDeferred,\r\n closedDeferred: modalClosedDeferred,\r\n animation: modalOptions.animation,\r\n backdrop: modalOptions.backdrop,\r\n keyboard: modalOptions.keyboard,\r\n backdropClass: modalOptions.backdropClass,\r\n windowTopClass: modalOptions.windowTopClass,\r\n windowClass: modalOptions.windowClass,\r\n windowTemplateUrl: modalOptions.windowTemplateUrl,\r\n ariaLabelledBy: modalOptions.ariaLabelledBy,\r\n ariaDescribedBy: modalOptions.ariaDescribedBy,\r\n size: modalOptions.size,\r\n openedClass: modalOptions.openedClass,\r\n appendTo: modalOptions.appendTo\r\n };\r\n\r\n var component = {};\r\n var ctrlInstance, ctrlInstantiate, ctrlLocals = {};\r\n\r\n if (modalOptions.component) {\r\n constructLocals(component, false, true, false);\r\n component.name = modalOptions.component;\r\n modal.component = component;\r\n } else if (modalOptions.controller) {\r\n constructLocals(ctrlLocals, true, false, true);\r\n\r\n // the third param will make the controller instantiate later,private api\r\n // @see https://github.com/angular/angular.js/blob/master/src/ng/controller.js#L126\r\n ctrlInstantiate = $controller(modalOptions.controller, ctrlLocals, true, modalOptions.controllerAs);\r\n if (modalOptions.controllerAs && modalOptions.bindToController) {\r\n ctrlInstance = ctrlInstantiate.instance;\r\n ctrlInstance.$close = modalScope.$close;\r\n ctrlInstance.$dismiss = modalScope.$dismiss;\r\n angular.extend(ctrlInstance, {\r\n $resolve: ctrlLocals.$scope.$resolve\r\n }, providedScope);\r\n }\r\n\r\n ctrlInstance = ctrlInstantiate();\r\n\r\n if (angular.isFunction(ctrlInstance.$onInit)) {\r\n ctrlInstance.$onInit();\r\n }\r\n }\r\n\r\n if (!modalOptions.component) {\r\n modal.content = tplAndVars[0];\r\n }\r\n\r\n $modalStack.open(modalInstance, modal);\r\n modalOpenedDeferred.resolve(true);\r\n\r\n function constructLocals(obj, template, instanceOnScope, injectable) {\r\n obj.$scope = modalScope;\r\n obj.$scope.$resolve = {};\r\n if (instanceOnScope) {\r\n obj.$scope.$uibModalInstance = modalInstance;\r\n } else {\r\n obj.$uibModalInstance = modalInstance;\r\n }\r\n\r\n var resolves = template ? tplAndVars[1] : tplAndVars;\r\n angular.forEach(resolves, function(value, key) {\r\n if (injectable) {\r\n obj[key] = value;\r\n }\r\n\r\n obj.$scope.$resolve[key] = value;\r\n });\r\n }\r\n }, function resolveError(reason) {\r\n modalOpenedDeferred.reject(reason);\r\n modalResultDeferred.reject(reason);\r\n })['finally'](function() {\r\n if (promiseChain === samePromise) {\r\n promiseChain = null;\r\n }\r\n });\r\n\r\n return modalInstance;\r\n };\r\n\r\n return $modal;\r\n }\r\n ]\r\n };\r\n\r\n return $modalProvider;\r\n });\r\n\r\nangular.module('ui.bootstrap.paging', [])\r\n/**\r\n * Helper internal service for generating common controller code between the\r\n * pager and pagination components\r\n */\r\n.factory('uibPaging', ['$parse', function($parse) {\r\n return {\r\n create: function(ctrl, $scope, $attrs) {\r\n ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;\r\n ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl\r\n ctrl._watchers = [];\r\n\r\n ctrl.init = function(ngModelCtrl, config) {\r\n ctrl.ngModelCtrl = ngModelCtrl;\r\n ctrl.config = config;\r\n\r\n ngModelCtrl.$render = function() {\r\n ctrl.render();\r\n };\r\n\r\n if ($attrs.itemsPerPage) {\r\n ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {\r\n ctrl.itemsPerPage = parseInt(value, 10);\r\n $scope.totalPages = ctrl.calculateTotalPages();\r\n ctrl.updatePage();\r\n }));\r\n } else {\r\n ctrl.itemsPerPage = config.itemsPerPage;\r\n }\r\n\r\n $scope.$watch('totalItems', function(newTotal, oldTotal) {\r\n if (angular.isDefined(newTotal) || newTotal !== oldTotal) {\r\n $scope.totalPages = ctrl.calculateTotalPages();\r\n ctrl.updatePage();\r\n }\r\n });\r\n };\r\n\r\n ctrl.calculateTotalPages = function() {\r\n var totalPages = ctrl.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / ctrl.itemsPerPage);\r\n return Math.max(totalPages || 0, 1);\r\n };\r\n\r\n ctrl.render = function() {\r\n $scope.page = parseInt(ctrl.ngModelCtrl.$viewValue, 10) || 1;\r\n };\r\n\r\n $scope.selectPage = function(page, evt) {\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n\r\n var clickAllowed = !$scope.ngDisabled || !evt;\r\n if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {\r\n if (evt && evt.target) {\r\n evt.target.blur();\r\n }\r\n ctrl.ngModelCtrl.$setViewValue(page);\r\n ctrl.ngModelCtrl.$render();\r\n }\r\n };\r\n\r\n $scope.getText = function(key) {\r\n return $scope[key + 'Text'] || ctrl.config[key + 'Text'];\r\n };\r\n\r\n $scope.noPrevious = function() {\r\n return $scope.page === 1;\r\n };\r\n\r\n $scope.noNext = function() {\r\n return $scope.page === $scope.totalPages;\r\n };\r\n\r\n ctrl.updatePage = function() {\r\n ctrl.setNumPages($scope.$parent, $scope.totalPages); // Readonly variable\r\n\r\n if ($scope.page > $scope.totalPages) {\r\n $scope.selectPage($scope.totalPages);\r\n } else {\r\n ctrl.ngModelCtrl.$render();\r\n }\r\n };\r\n\r\n $scope.$on('$destroy', function() {\r\n while (ctrl._watchers.length) {\r\n ctrl._watchers.shift()();\r\n }\r\n });\r\n }\r\n };\r\n}]);\r\n\r\nangular.module('ui.bootstrap.pager', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\r\n\r\n.controller('UibPagerController', ['$scope', '$attrs', 'uibPaging', 'uibPagerConfig', function($scope, $attrs, uibPaging, uibPagerConfig) {\r\n $scope.align = angular.isDefined($attrs.align) ? $scope.$parent.$eval($attrs.align) : uibPagerConfig.align;\r\n\r\n uibPaging.create(this, $scope, $attrs);\r\n}])\r\n\r\n.constant('uibPagerConfig', {\r\n itemsPerPage: 10,\r\n previousText: '« Previous',\r\n nextText: 'Next »',\r\n align: true\r\n})\r\n\r\n.directive('uibPager', ['uibPagerConfig', function(uibPagerConfig) {\r\n return {\r\n scope: {\r\n totalItems: '=',\r\n previousText: '@',\r\n nextText: '@',\r\n ngDisabled: '='\r\n },\r\n require: ['uibPager', '?ngModel'],\r\n restrict: 'A',\r\n controller: 'UibPagerController',\r\n controllerAs: 'pager',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/pager/pager.html';\r\n },\r\n link: function(scope, element, attrs, ctrls) {\r\n element.addClass('pager');\r\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n if (!ngModelCtrl) {\r\n return; // do nothing if no ng-model\r\n }\r\n\r\n paginationCtrl.init(ngModelCtrl, uibPagerConfig);\r\n }\r\n };\r\n}]);\r\n\r\nangular.module('ui.bootstrap.pagination', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\r\n.controller('UibPaginationController', ['$scope', '$attrs', '$parse', 'uibPaging', 'uibPaginationConfig', function($scope, $attrs, $parse, uibPaging, uibPaginationConfig) {\r\n var ctrl = this;\r\n // Setup configuration parameters\r\n var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,\r\n rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,\r\n forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,\r\n boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,\r\n pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;\r\n $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;\r\n $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;\r\n $attrs.$set('role', 'menu');\r\n\r\n uibPaging.create(this, $scope, $attrs);\r\n\r\n if ($attrs.maxSize) {\r\n ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {\r\n maxSize = parseInt(value, 10);\r\n ctrl.render();\r\n }));\r\n }\r\n\r\n // Create page object used in template\r\n function makePage(number, text, isActive) {\r\n return {\r\n number: number,\r\n text: text,\r\n active: isActive\r\n };\r\n }\r\n\r\n function getPages(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, pageLabel(number), number === currentPage);\r\n pages.push(page);\r\n }\r\n\r\n // Add links to move between page sets\r\n if (isMaxSized && maxSize > 0 && (!rotate || forceEllipses || boundaryLinkNumbers)) {\r\n if (startPage > 1) {\r\n if (!boundaryLinkNumbers || startPage > 3) { //need ellipsis for all options unless range is too close to beginning\r\n var previousPageSet = makePage(startPage - 1, '...', false);\r\n pages.unshift(previousPageSet);\r\n }\r\n if (boundaryLinkNumbers) {\r\n if (startPage === 3) { //need to replace ellipsis when the buttons would be sequential\r\n var secondPageLink = makePage(2, '2', false);\r\n pages.unshift(secondPageLink);\r\n }\r\n //add the first page\r\n var firstPageLink = makePage(1, '1', false);\r\n pages.unshift(firstPageLink);\r\n }\r\n }\r\n\r\n if (endPage < totalPages) {\r\n if (!boundaryLinkNumbers || endPage < totalPages - 2) { //need ellipsis for all options unless range is too close to end\r\n var nextPageSet = makePage(endPage + 1, '...', false);\r\n pages.push(nextPageSet);\r\n }\r\n if (boundaryLinkNumbers) {\r\n if (endPage === totalPages - 2) { //need to replace ellipsis when the buttons would be sequential\r\n var secondToLastPageLink = makePage(totalPages - 1, totalPages - 1, false);\r\n pages.push(secondToLastPageLink);\r\n }\r\n //add the last page\r\n var lastPageLink = makePage(totalPages, totalPages, false);\r\n pages.push(lastPageLink);\r\n }\r\n }\r\n }\r\n return pages;\r\n }\r\n\r\n var originalRender = this.render;\r\n this.render = function() {\r\n originalRender();\r\n if ($scope.page > 0 && $scope.page <= $scope.totalPages) {\r\n $scope.pages = getPages($scope.page, $scope.totalPages);\r\n }\r\n };\r\n}])\r\n\r\n.constant('uibPaginationConfig', {\r\n itemsPerPage: 10,\r\n boundaryLinks: false,\r\n boundaryLinkNumbers: 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 forceEllipses: false\r\n})\r\n\r\n.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, uibPaginationConfig) {\r\n return {\r\n scope: {\r\n totalItems: '=',\r\n firstText: '@',\r\n previousText: '@',\r\n nextText: '@',\r\n lastText: '@',\r\n ngDisabled:'='\r\n },\r\n require: ['uibPagination', '?ngModel'],\r\n restrict: 'A',\r\n controller: 'UibPaginationController',\r\n controllerAs: 'pagination',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/pagination/pagination.html';\r\n },\r\n link: function(scope, element, attrs, ctrls) {\r\n element.addClass('pagination');\r\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n if (!ngModelCtrl) {\r\n return; // do nothing if no ng-model\r\n }\r\n\r\n paginationCtrl.init(ngModelCtrl, uibPaginationConfig);\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.stackedMap'])\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('$uibTooltip', function() {\r\n // The default options tooltip and popover.\r\n var defaultOptions = {\r\n placement: 'top',\r\n placementClassPrefix: '',\r\n animation: true,\r\n popupDelay: 0,\r\n popupCloseDelay: 0,\r\n useContentExp: false\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 'outsideClick': 'outsideClick',\r\n 'focus': 'blur',\r\n 'none': ''\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', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {\r\n var openedTooltips = $$stackedMap.createNew();\r\n $document.on('keyup', keypressListener);\r\n\r\n $rootScope.$on('$destroy', function() {\r\n $document.off('keyup', keypressListener);\r\n });\r\n\r\n function keypressListener(e) {\r\n if (e.which === 27) {\r\n var last = openedTooltips.top();\r\n if (last) {\r\n last.value.close();\r\n last = null;\r\n }\r\n }\r\n }\r\n\r\n return function $tooltip(ttType, prefix, defaultTriggerShow, options) {\r\n options = angular.extend({}, defaultOptions, globalOptions, options);\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).split(' ');\r\n var hide = show.map(function(trigger) {\r\n return triggerMap[trigger] || trigger;\r\n });\r\n return {\r\n show: show,\r\n hide: hide\r\n };\r\n }\r\n\r\n var directiveName = snake_case(ttType);\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 compile: function(tElem, tAttrs) {\r\n var tooltipLinker = $compile(template);\r\n\r\n return function link(scope, element, attrs, tooltipCtrl) {\r\n var tooltip;\r\n var tooltipLinkedScope;\r\n var transitionTimeout;\r\n var showTimeout;\r\n var hideTimeout;\r\n var positionTimeout;\r\n var adjustmentTimeout;\r\n var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;\r\n var triggers = getTriggers(undefined);\r\n var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);\r\n var ttScope = scope.$new(true);\r\n var repositionScheduled = false;\r\n var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;\r\n var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;\r\n var observers = [];\r\n var lastPlacement;\r\n\r\n var positionTooltip = function() {\r\n // check if tooltip exists and is not empty\r\n if (!tooltip || !tooltip.html()) { return; }\r\n\r\n if (!positionTimeout) {\r\n positionTimeout = $timeout(function() {\r\n var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);\r\n var initialHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\r\n var elementPos = appendToBody ? $position.offset(element) : $position.position(element);\r\n tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });\r\n var placementClasses = ttPosition.placement.split('-');\r\n\r\n if (!tooltip.hasClass(placementClasses[0])) {\r\n tooltip.removeClass(lastPlacement.split('-')[0]);\r\n tooltip.addClass(placementClasses[0]);\r\n }\r\n\r\n if (!tooltip.hasClass(options.placementClassPrefix + ttPosition.placement)) {\r\n tooltip.removeClass(options.placementClassPrefix + lastPlacement);\r\n tooltip.addClass(options.placementClassPrefix + ttPosition.placement);\r\n }\r\n\r\n adjustmentTimeout = $timeout(function() {\r\n var currentHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\r\n var adjustment = $position.adjustTop(placementClasses, elementPos, initialHeight, currentHeight);\r\n if (adjustment) {\r\n tooltip.css(adjustment);\r\n }\r\n adjustmentTimeout = null;\r\n }, 0, false);\r\n\r\n // first time through tt element will have the\r\n // uib-position-measure class or if the placement\r\n // has changed we need to position the arrow.\r\n if (tooltip.hasClass('uib-position-measure')) {\r\n $position.positionArrow(tooltip, ttPosition.placement);\r\n tooltip.removeClass('uib-position-measure');\r\n } else if (lastPlacement !== ttPosition.placement) {\r\n $position.positionArrow(tooltip, ttPosition.placement);\r\n }\r\n lastPlacement = ttPosition.placement;\r\n\r\n positionTimeout = null;\r\n }, 0, false);\r\n }\r\n };\r\n\r\n // Set up the correct scope to allow transclusion later\r\n ttScope.origScope = scope;\r\n\r\n // By default, the tooltip is not open.\r\n // TODO add ability to start tooltip opened\r\n ttScope.isOpen = false;\r\n\r\n function toggleTooltipBind() {\r\n if (!ttScope.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\r\n cancelHide();\r\n prepareTooltip();\r\n\r\n if (ttScope.popupDelay) {\r\n // Do nothing if the tooltip was already scheduled to pop-up.\r\n // This happens if show is triggered multiple times before any hide is triggered.\r\n if (!showTimeout) {\r\n showTimeout = $timeout(show, ttScope.popupDelay, false);\r\n }\r\n } else {\r\n show();\r\n }\r\n }\r\n\r\n function hideTooltipBind() {\r\n cancelShow();\r\n\r\n if (ttScope.popupCloseDelay) {\r\n if (!hideTimeout) {\r\n hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);\r\n }\r\n } else {\r\n hide();\r\n }\r\n }\r\n\r\n // Show the tooltip popup element.\r\n function show() {\r\n cancelShow();\r\n cancelHide();\r\n\r\n // Don't show empty tooltips.\r\n if (!ttScope.content) {\r\n return angular.noop;\r\n }\r\n\r\n createTooltip();\r\n\r\n // And show the tooltip.\r\n ttScope.$evalAsync(function() {\r\n ttScope.isOpen = true;\r\n assignIsOpen(true);\r\n positionTooltip();\r\n });\r\n }\r\n\r\n function cancelShow() {\r\n if (showTimeout) {\r\n $timeout.cancel(showTimeout);\r\n showTimeout = null;\r\n }\r\n\r\n if (positionTimeout) {\r\n $timeout.cancel(positionTimeout);\r\n positionTimeout = null;\r\n }\r\n }\r\n\r\n // Hide the tooltip popup element.\r\n function hide() {\r\n if (!ttScope) {\r\n return;\r\n }\r\n\r\n // First things first: we don't show it anymore.\r\n ttScope.$evalAsync(function() {\r\n if (ttScope) {\r\n ttScope.isOpen = false;\r\n assignIsOpen(false);\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 // The fade transition in TWBS is 150ms.\r\n if (ttScope.animation) {\r\n if (!transitionTimeout) {\r\n transitionTimeout = $timeout(removeTooltip, 150, false);\r\n }\r\n } else {\r\n removeTooltip();\r\n }\r\n }\r\n });\r\n }\r\n\r\n function cancelHide() {\r\n if (hideTimeout) {\r\n $timeout.cancel(hideTimeout);\r\n hideTimeout = null;\r\n }\r\n\r\n if (transitionTimeout) {\r\n $timeout.cancel(transitionTimeout);\r\n transitionTimeout = null;\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 return;\r\n }\r\n\r\n tooltipLinkedScope = ttScope.$new();\r\n tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {\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\r\n openedTooltips.add(ttScope, {\r\n close: hide\r\n });\r\n\r\n prepObservers();\r\n }\r\n\r\n function removeTooltip() {\r\n cancelShow();\r\n cancelHide();\r\n unregisterObservers();\r\n\r\n if (tooltip) {\r\n tooltip.remove();\r\n \r\n tooltip = null;\r\n if (adjustmentTimeout) {\r\n $timeout.cancel(adjustmentTimeout);\r\n }\r\n }\r\n\r\n openedTooltips.remove(ttScope);\r\n \r\n if (tooltipLinkedScope) {\r\n tooltipLinkedScope.$destroy();\r\n tooltipLinkedScope = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the initial scope values. Once\r\n * the tooltip is created, the observers\r\n * will be added to keep things in sync.\r\n */\r\n function prepareTooltip() {\r\n ttScope.title = attrs[prefix + 'Title'];\r\n if (contentParse) {\r\n ttScope.content = contentParse(scope);\r\n } else {\r\n ttScope.content = attrs[ttType];\r\n }\r\n\r\n ttScope.popupClass = attrs[prefix + 'Class'];\r\n ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;\r\n var placement = $position.parsePlacement(ttScope.placement);\r\n lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];\r\n\r\n var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);\r\n var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);\r\n ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;\r\n ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;\r\n }\r\n\r\n function assignIsOpen(isOpen) {\r\n if (isOpenParse && angular.isFunction(isOpenParse.assign)) {\r\n isOpenParse.assign(scope, isOpen);\r\n }\r\n }\r\n\r\n ttScope.contentExp = function() {\r\n return ttScope.content;\r\n };\r\n\r\n /**\r\n * Observe the relevant attributes.\r\n */\r\n attrs.$observe('disabled', function(val) {\r\n if (val) {\r\n cancelShow();\r\n }\r\n\r\n if (val && ttScope.isOpen) {\r\n hide();\r\n }\r\n });\r\n\r\n if (isOpenParse) {\r\n scope.$watch(isOpenParse, function(val) {\r\n if (ttScope && !val === ttScope.isOpen) {\r\n toggleTooltipBind();\r\n }\r\n });\r\n }\r\n\r\n function prepObservers() {\r\n observers.length = 0;\r\n\r\n if (contentParse) {\r\n observers.push(\r\n scope.$watch(contentParse, function(val) {\r\n ttScope.content = val;\r\n if (!val && ttScope.isOpen) {\r\n hide();\r\n }\r\n })\r\n );\r\n\r\n observers.push(\r\n tooltipLinkedScope.$watch(function() {\r\n if (!repositionScheduled) {\r\n repositionScheduled = true;\r\n tooltipLinkedScope.$$postDigest(function() {\r\n repositionScheduled = false;\r\n if (ttScope && ttScope.isOpen) {\r\n positionTooltip();\r\n }\r\n });\r\n }\r\n })\r\n );\r\n } else {\r\n observers.push(\r\n attrs.$observe(ttType, function(val) {\r\n ttScope.content = val;\r\n if (!val && ttScope.isOpen) {\r\n hide();\r\n } else {\r\n positionTooltip();\r\n }\r\n })\r\n );\r\n }\r\n\r\n observers.push(\r\n attrs.$observe(prefix + 'Title', function(val) {\r\n ttScope.title = val;\r\n if (ttScope.isOpen) {\r\n positionTooltip();\r\n }\r\n })\r\n );\r\n\r\n observers.push(\r\n attrs.$observe(prefix + 'Placement', function(val) {\r\n ttScope.placement = val ? val : options.placement;\r\n if (ttScope.isOpen) {\r\n positionTooltip();\r\n }\r\n })\r\n );\r\n }\r\n\r\n function unregisterObservers() {\r\n if (observers.length) {\r\n angular.forEach(observers, function(observer) {\r\n observer();\r\n });\r\n observers.length = 0;\r\n }\r\n }\r\n\r\n // hide tooltips/popovers for outsideClick trigger\r\n function bodyHideTooltipBind(e) {\r\n if (!ttScope || !ttScope.isOpen || !tooltip) {\r\n return;\r\n }\r\n // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked\r\n if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {\r\n hideTooltipBind();\r\n }\r\n }\r\n\r\n // KeyboardEvent handler to hide the tooltip on Escape key press\r\n function hideOnEscapeKey(e) {\r\n if (e.which === 27) {\r\n hideTooltipBind();\r\n }\r\n }\r\n\r\n var unregisterTriggers = function() {\r\n triggers.show.forEach(function(trigger) {\r\n if (trigger === 'outsideClick') {\r\n element.off('click', toggleTooltipBind);\r\n } else {\r\n element.off(trigger, showTooltipBind);\r\n element.off(trigger, toggleTooltipBind);\r\n }\r\n element.off('keypress', hideOnEscapeKey);\r\n });\r\n triggers.hide.forEach(function(trigger) {\r\n if (trigger === 'outsideClick') {\r\n $document.off('click', bodyHideTooltipBind);\r\n } else {\r\n element.off(trigger, hideTooltipBind);\r\n }\r\n });\r\n };\r\n\r\n function prepTriggers() {\r\n var showTriggers = [], hideTriggers = [];\r\n var val = scope.$eval(attrs[prefix + 'Trigger']);\r\n unregisterTriggers();\r\n\r\n if (angular.isObject(val)) {\r\n Object.keys(val).forEach(function(key) {\r\n showTriggers.push(key);\r\n hideTriggers.push(val[key]);\r\n });\r\n triggers = {\r\n show: showTriggers,\r\n hide: hideTriggers\r\n };\r\n } else {\r\n triggers = getTriggers(val);\r\n }\r\n\r\n if (triggers.show !== 'none') {\r\n triggers.show.forEach(function(trigger, idx) {\r\n if (trigger === 'outsideClick') {\r\n element.on('click', toggleTooltipBind);\r\n $document.on('click', bodyHideTooltipBind);\r\n } else if (trigger === triggers.hide[idx]) {\r\n element.on(trigger, toggleTooltipBind);\r\n } else if (trigger) {\r\n element.on(trigger, showTooltipBind);\r\n element.on(triggers.hide[idx], hideTooltipBind);\r\n }\r\n element.on('keypress', hideOnEscapeKey);\r\n });\r\n }\r\n }\r\n\r\n prepTriggers();\r\n\r\n var animation = scope.$eval(attrs[prefix + 'Animation']);\r\n ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;\r\n\r\n var appendToBodyVal;\r\n var appendKey = prefix + 'AppendToBody';\r\n if (appendKey in attrs && attrs[appendKey] === undefined) {\r\n appendToBodyVal = true;\r\n } else {\r\n appendToBodyVal = scope.$eval(attrs[appendKey]);\r\n }\r\n\r\n appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;\r\n\r\n // Make sure tooltip is destroyed and removed.\r\n scope.$on('$destroy', function onDestroyTooltip() {\r\n unregisterTriggers();\r\n removeTooltip();\r\n ttScope = null;\r\n });\r\n };\r\n }\r\n };\r\n };\r\n }];\r\n})\r\n\r\n// This is mostly ngInclude code but with a custom scope\r\n.directive('uibTooltipTemplateTransclude', [\r\n '$animate', '$sce', '$compile', '$templateRequest',\r\nfunction ($animate, $sce, $compile, $templateRequest) {\r\n return {\r\n link: function(scope, elem, attrs) {\r\n var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);\r\n\r\n var changeCounter = 0,\r\n currentScope,\r\n previousElement,\r\n currentElement;\r\n\r\n var cleanupLastIncludeContent = function() {\r\n if (previousElement) {\r\n previousElement.remove();\r\n previousElement = null;\r\n }\r\n\r\n if (currentScope) {\r\n currentScope.$destroy();\r\n currentScope = null;\r\n }\r\n\r\n if (currentElement) {\r\n $animate.leave(currentElement).then(function() {\r\n previousElement = null;\r\n });\r\n previousElement = currentElement;\r\n currentElement = null;\r\n }\r\n };\r\n\r\n scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {\r\n var thisChangeId = ++changeCounter;\r\n\r\n if (src) {\r\n //set the 2nd param to true to ignore the template request error so that the inner\r\n //contents and scope can be cleaned up.\r\n $templateRequest(src, true).then(function(response) {\r\n if (thisChangeId !== changeCounter) { return; }\r\n var newScope = origScope.$new();\r\n var template = response;\r\n\r\n var clone = $compile(template)(newScope, function(clone) {\r\n cleanupLastIncludeContent();\r\n $animate.enter(clone, elem);\r\n });\r\n\r\n currentScope = newScope;\r\n currentElement = clone;\r\n\r\n currentScope.$emit('$includeContentLoaded', src);\r\n }, function() {\r\n if (thisChangeId === changeCounter) {\r\n cleanupLastIncludeContent();\r\n scope.$emit('$includeContentError', src);\r\n }\r\n });\r\n scope.$emit('$includeContentRequested', src);\r\n } else {\r\n cleanupLastIncludeContent();\r\n }\r\n });\r\n\r\n scope.$on('$destroy', cleanupLastIncludeContent);\r\n }\r\n };\r\n}])\r\n\r\n/**\r\n * Note that it's intentional that these classes are *not* applied through $animate.\r\n * They must not be animated as they're expected to be present on the tooltip on\r\n * initialization.\r\n */\r\n.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {\r\n return {\r\n restrict: 'A',\r\n link: function(scope, element, attrs) {\r\n // need to set the primary position so the\r\n // arrow has space during position measure.\r\n // tooltip.positionTooltip()\r\n if (scope.placement) {\r\n // // There are no top-left etc... classes\r\n // // in TWBS, so we need the primary position.\r\n var position = $uibPosition.parsePlacement(scope.placement);\r\n element.addClass(position[0]);\r\n }\r\n\r\n if (scope.popupClass) {\r\n element.addClass(scope.popupClass);\r\n }\r\n\r\n if (scope.animation) {\r\n element.addClass(attrs.tooltipAnimationClass);\r\n }\r\n }\r\n };\r\n}])\r\n\r\n.directive('uibTooltipPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { content: '@' },\r\n templateUrl: 'uib/template/tooltip/tooltip-popup.html'\r\n };\r\n})\r\n\r\n.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');\r\n}])\r\n\r\n.directive('uibTooltipTemplatePopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { contentExp: '&', originScope: '&' },\r\n templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'\r\n };\r\n})\r\n\r\n.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {\r\n useContentExp: true\r\n });\r\n}])\r\n\r\n.directive('uibTooltipHtmlPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { contentExp: '&' },\r\n templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'\r\n };\r\n})\r\n\r\n.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {\r\n useContentExp: true\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, and selector delegatation.\r\n */\r\nangular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])\r\n\r\n.directive('uibPopoverTemplatePopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { uibTitle: '@', contentExp: '&', originScope: '&' },\r\n templateUrl: 'uib/template/popover/popover-template.html'\r\n };\r\n})\r\n\r\n.directive('uibPopoverTemplate', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibPopoverTemplate', 'popover', 'click', {\r\n useContentExp: true\r\n });\r\n}])\r\n\r\n.directive('uibPopoverHtmlPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { contentExp: '&', uibTitle: '@' },\r\n templateUrl: 'uib/template/popover/popover-html.html'\r\n };\r\n})\r\n\r\n.directive('uibPopoverHtml', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibPopoverHtml', 'popover', 'click', {\r\n useContentExp: true\r\n });\r\n}])\r\n\r\n.directive('uibPopoverPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { uibTitle: '@', content: '@' },\r\n templateUrl: 'uib/template/popover/popover.html'\r\n };\r\n})\r\n\r\n.directive('uibPopover', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibPopover', 'popover', 'click');\r\n}]);\r\n\r\nangular.module('ui.bootstrap.progressbar', [])\r\n\r\n.constant('uibProgressConfig', {\r\n animate: true,\r\n max: 100\r\n})\r\n\r\n.controller('UibProgressController', ['$scope', '$attrs', 'uibProgressConfig', function($scope, $attrs, progressConfig) {\r\n var self = this,\r\n animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;\r\n\r\n this.bars = [];\r\n $scope.max = getMaxOrDefault();\r\n\r\n this.addBar = function(bar, element, attrs) {\r\n if (!animate) {\r\n element.css({'transition': 'none'});\r\n }\r\n\r\n this.bars.push(bar);\r\n\r\n bar.max = getMaxOrDefault();\r\n bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';\r\n\r\n bar.$watch('value', function(value) {\r\n bar.recalculatePercentage();\r\n });\r\n\r\n bar.recalculatePercentage = function() {\r\n var totalPercentage = self.bars.reduce(function(total, bar) {\r\n bar.percent = +(100 * bar.value / bar.max).toFixed(2);\r\n return total + bar.percent;\r\n }, 0);\r\n\r\n if (totalPercentage > 100) {\r\n bar.percent -= totalPercentage - 100;\r\n }\r\n };\r\n\r\n bar.$on('$destroy', function() {\r\n element = null;\r\n self.removeBar(bar);\r\n });\r\n };\r\n\r\n this.removeBar = function(bar) {\r\n this.bars.splice(this.bars.indexOf(bar), 1);\r\n this.bars.forEach(function (bar) {\r\n bar.recalculatePercentage();\r\n });\r\n };\r\n\r\n //$attrs.$observe('maxParam', function(maxParam) {\r\n $scope.$watch('maxParam', function(maxParam) {\r\n self.bars.forEach(function(bar) {\r\n bar.max = getMaxOrDefault();\r\n bar.recalculatePercentage();\r\n });\r\n });\r\n\r\n function getMaxOrDefault () {\r\n return angular.isDefined($scope.maxParam) ? $scope.maxParam : progressConfig.max;\r\n }\r\n}])\r\n\r\n.directive('uibProgress', function() {\r\n return {\r\n replace: true,\r\n transclude: true,\r\n controller: 'UibProgressController',\r\n require: 'uibProgress',\r\n scope: {\r\n maxParam: '=?max'\r\n },\r\n templateUrl: 'uib/template/progressbar/progress.html'\r\n };\r\n})\r\n\r\n.directive('uibBar', function() {\r\n return {\r\n replace: true,\r\n transclude: true,\r\n require: '^uibProgress',\r\n scope: {\r\n value: '=',\r\n type: '@'\r\n },\r\n templateUrl: 'uib/template/progressbar/bar.html',\r\n link: function(scope, element, attrs, progressCtrl) {\r\n progressCtrl.addBar(scope, element, attrs);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibProgressbar', function() {\r\n return {\r\n replace: true,\r\n transclude: true,\r\n controller: 'UibProgressController',\r\n scope: {\r\n value: '=',\r\n maxParam: '=?max',\r\n type: '@'\r\n },\r\n templateUrl: 'uib/template/progressbar/progressbar.html',\r\n link: function(scope, element, attrs, progressCtrl) {\r\n progressCtrl.addBar(scope, angular.element(element.children()[0]), {title: attrs.title});\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.rating', [])\r\n\r\n.constant('uibRatingConfig', {\r\n max: 5,\r\n stateOn: null,\r\n stateOff: null,\r\n enableReset: true,\r\n titles: ['one', 'two', 'three', 'four', 'five']\r\n})\r\n\r\n.controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {\r\n var ngModelCtrl = { $setViewValue: angular.noop },\r\n self = this;\r\n\r\n this.init = function(ngModelCtrl_) {\r\n ngModelCtrl = ngModelCtrl_;\r\n ngModelCtrl.$render = this.render;\r\n\r\n ngModelCtrl.$formatters.push(function(value) {\r\n if (angular.isNumber(value) && value << 0 !== value) {\r\n value = Math.round(value);\r\n }\r\n\r\n return value;\r\n });\r\n\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 this.enableReset = angular.isDefined($attrs.enableReset) ?\r\n $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;\r\n var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;\r\n this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?\r\n tmpTitles : ratingConfig.titles;\r\n\r\n var ratingStates = angular.isDefined($attrs.ratingStates) ?\r\n $scope.$parent.$eval($attrs.ratingStates) :\r\n new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);\r\n $scope.range = this.buildTemplateObjects(ratingStates);\r\n };\r\n\r\n this.buildTemplateObjects = function(states) {\r\n for (var i = 0, n = states.length; i < n; i++) {\r\n states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(i) }, states[i]);\r\n }\r\n return states;\r\n };\r\n\r\n this.getTitle = function(index) {\r\n if (index >= this.titles.length) {\r\n return index + 1;\r\n }\r\n\r\n return this.titles[index];\r\n };\r\n\r\n $scope.rate = function(value) {\r\n if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {\r\n var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;\r\n ngModelCtrl.$setViewValue(newViewValue);\r\n ngModelCtrl.$render();\r\n }\r\n };\r\n\r\n $scope.enter = function(value) {\r\n if (!$scope.readonly) {\r\n $scope.value = value;\r\n }\r\n $scope.onHover({value: value});\r\n };\r\n\r\n $scope.reset = function() {\r\n $scope.value = ngModelCtrl.$viewValue;\r\n $scope.onLeave();\r\n };\r\n\r\n $scope.onKeydown = function(evt) {\r\n if (/(37|38|39|40)/.test(evt.which)) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));\r\n }\r\n };\r\n\r\n this.render = function() {\r\n $scope.value = ngModelCtrl.$viewValue;\r\n $scope.title = self.getTitle($scope.value - 1);\r\n };\r\n}])\r\n\r\n.directive('uibRating', function() {\r\n return {\r\n require: ['uibRating', 'ngModel'],\r\n restrict: 'A',\r\n scope: {\r\n readonly: '=?readOnly',\r\n onHover: '&',\r\n onLeave: '&'\r\n },\r\n controller: 'UibRatingController',\r\n templateUrl: 'uib/template/rating/rating.html',\r\n link: function(scope, element, attrs, ctrls) {\r\n var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n ratingCtrl.init(ngModelCtrl);\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.tabs', [])\r\n\r\n.controller('UibTabsetController', ['$scope', '$timeout', function ($scope, $timeout) {\r\n var ctrl = this,\r\n oldIndex;\r\n ctrl.tabs = [];\r\n\r\n ctrl.$postLink = function () {\r\n $timeout(function () {\r\n if (ctrl.tabs.length > 0 && angular.isDefined(ctrl.active) && ctrl.active < 0 || ctrl.active >= ctrl.tabs.length) {\r\n ctrl.select(0);\r\n }\r\n }, 200);\r\n }\r\n\r\n ctrl.select = function(index, evt) {\r\n if (!destroyed) {\r\n var previousIndex = findTabIndex(oldIndex);\r\n var previousSelected = ctrl.tabs[previousIndex];\r\n if (previousSelected) {\r\n previousSelected.tab.onDeselect({\r\n $event: evt,\r\n $selectedIndex: index\r\n });\r\n if (evt && evt.isDefaultPrevented()) {\r\n return;\r\n }\r\n previousSelected.tab.active = false;\r\n }\r\n\r\n var selected = ctrl.tabs[index];\r\n if (selected) {\r\n selected.tab.onSelect({\r\n $event: evt,\r\n index: selected.index\r\n });\r\n selected.tab.active = true;\r\n ctrl.active = selected.index;\r\n oldIndex = selected.index;\r\n } else if (!selected && angular.isDefined(oldIndex)) {\r\n ctrl.active = null;\r\n oldIndex = null;\r\n }\r\n }\r\n };\r\n\r\n ctrl.addTab = function addTab(tab) {\r\n ctrl.tabs.push({\r\n tab: tab,\r\n index: tab.index\r\n });\r\n ctrl.tabs.sort(function(t1, t2) {\r\n if (t1.index > t2.index) {\r\n return 1;\r\n }\r\n\r\n if (t1.index < t2.index) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {\r\n var newActiveIndex = findTabIndex(tab.index);\r\n ctrl.select(newActiveIndex);\r\n }\r\n };\r\n\r\n ctrl.removeTab = function removeTab(tab) {\r\n var index;\r\n for (var i = 0; i < ctrl.tabs.length; i++) {\r\n if (ctrl.tabs[i].tab === tab) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (ctrl.tabs[index].index === ctrl.active) {\r\n var newActiveTabIndex = index === ctrl.tabs.length - 1 ?\r\n index - 1 : index + 1 % ctrl.tabs.length;\r\n ctrl.select(newActiveTabIndex);\r\n }\r\n\r\n ctrl.tabs.splice(index, 1);\r\n };\r\n\r\n $scope.$watch('tabset.active', function(val) {\r\n if (angular.isDefined(val) && val !== oldIndex) {\r\n ctrl.select(findTabIndex(val));\r\n }\r\n });\r\n\r\n var destroyed;\r\n $scope.$on('$destroy', function() {\r\n destroyed = true;\r\n });\r\n\r\n function findTabIndex(index) {\r\n for (var i = 0; i < ctrl.tabs.length; i++) {\r\n if (ctrl.tabs[i].index === index) {\r\n return i;\r\n }\r\n }\r\n }\r\n}])\r\n\r\n.directive('uibTabset', function() {\r\n return {\r\n transclude: true,\r\n replace: true,\r\n scope: {},\r\n bindToController: {\r\n active: '=?',\r\n type: '@',\r\n id: '@'\r\n },\r\n controller: 'UibTabsetController',\r\n controllerAs: 'tabset',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/tabs/tabset.html';\r\n },\r\n link: function(scope, element, attrs) {\r\n scope.vertical = angular.isDefined(attrs.vertical) ?\r\n scope.$parent.$eval(attrs.vertical) : false;\r\n scope.justified = angular.isDefined(attrs.justified) ?\r\n scope.$parent.$eval(attrs.justified) : false;\r\n }\r\n };\r\n})\r\n\r\n.directive('uibTab', ['$parse', function($parse) {\r\n return {\r\n require: '^uibTabset',\r\n replace: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/tabs/tab.html';\r\n },\r\n transclude: true,\r\n scope: {\r\n heading: '@',\r\n index: '=?',\r\n classes: '@?',\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 controllerAs: 'tab',\r\n link: function(scope, elm, attrs, tabsetCtrl, transclude) {\r\n scope.disabled = false;\r\n if (attrs.disable) {\r\n scope.$parent.$watch($parse(attrs.disable), function(value) {\r\n scope.disabled = !! value;\r\n });\r\n }\r\n\r\n if (angular.isUndefined(attrs.index)) {\r\n if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {\r\n scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;\r\n } else {\r\n scope.index = 0;\r\n }\r\n }\r\n\r\n if (angular.isUndefined(attrs.classes)) {\r\n scope.classes = '';\r\n }\r\n\r\n scope.select = function(evt) {\r\n if (!scope.disabled) {\r\n var index;\r\n for (var i = 0; i < tabsetCtrl.tabs.length; i++) {\r\n if (tabsetCtrl.tabs[i].tab === scope) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n tabsetCtrl.select(index, evt);\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 //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.directive('uibTabHeadingTransclude', function() {\r\n return {\r\n restrict: 'A',\r\n require: '^uibTab',\r\n link: function(scope, elm) {\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('uibTabContentTransclude', function() {\r\n return {\r\n restrict: 'A',\r\n require: '^uibTabset',\r\n link: function(scope, elm, attrs) {\r\n var tab = scope.$eval(attrs.uibTabContentTransclude).tab;\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\r\n function isTabHeading(node) {\r\n return node.tagName && (\r\n node.hasAttribute('uib-tab-heading') ||\r\n node.hasAttribute('data-uib-tab-heading') ||\r\n node.hasAttribute('x-uib-tab-heading') ||\r\n node.tagName.toLowerCase() === 'uib-tab-heading' ||\r\n node.tagName.toLowerCase() === 'data-uib-tab-heading' ||\r\n node.tagName.toLowerCase() === 'x-uib-tab-heading' ||\r\n node.tagName.toLowerCase() === 'uib:tab-heading'\r\n );\r\n }\r\n});\r\n\r\nangular.module('ui.bootstrap.timepicker', [])\r\n\r\n.constant('uibTimepickerConfig', {\r\n hourStep: 1,\r\n minuteStep: 1,\r\n secondStep: 1,\r\n showMeridian: true,\r\n showSeconds: false,\r\n meridians: null,\r\n readonlyInput: false,\r\n mousewheel: true,\r\n arrowkeys: true,\r\n showSpinners: true,\r\n templateUrl: 'uib/template/timepicker/timepicker.html'\r\n})\r\n\r\n.controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {\r\n var hoursModelCtrl, minutesModelCtrl, secondsModelCtrl;\r\n var selected = new Date(),\r\n watchers = [],\r\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl\r\n meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS,\r\n padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;\r\n\r\n $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;\r\n $element.removeAttr('tabindex');\r\n\r\n this.init = function(ngModelCtrl_, inputs) {\r\n ngModelCtrl = ngModelCtrl_;\r\n ngModelCtrl.$render = this.render;\r\n\r\n ngModelCtrl.$formatters.unshift(function(modelValue) {\r\n return modelValue ? new Date(modelValue) : null;\r\n });\r\n\r\n var hoursInputEl = inputs.eq(0),\r\n minutesInputEl = inputs.eq(1),\r\n secondsInputEl = inputs.eq(2);\r\n\r\n hoursModelCtrl = hoursInputEl.controller('ngModel');\r\n minutesModelCtrl = minutesInputEl.controller('ngModel');\r\n secondsModelCtrl = secondsInputEl.controller('ngModel');\r\n\r\n var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;\r\n\r\n if (mousewheel) {\r\n this.setupMousewheelEvents(hoursInputEl, minutesInputEl, secondsInputEl);\r\n }\r\n\r\n var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;\r\n if (arrowkeys) {\r\n this.setupArrowkeyEvents(hoursInputEl, minutesInputEl, secondsInputEl);\r\n }\r\n\r\n $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;\r\n this.setupInputEvents(hoursInputEl, minutesInputEl, secondsInputEl);\r\n };\r\n\r\n var hourStep = timepickerConfig.hourStep;\r\n if ($attrs.hourStep) {\r\n watchers.push($scope.$parent.$watch($parse($attrs.hourStep), function(value) {\r\n hourStep = +value;\r\n }));\r\n }\r\n\r\n var minuteStep = timepickerConfig.minuteStep;\r\n if ($attrs.minuteStep) {\r\n watchers.push($scope.$parent.$watch($parse($attrs.minuteStep), function(value) {\r\n minuteStep = +value;\r\n }));\r\n }\r\n\r\n var min;\r\n watchers.push($scope.$parent.$watch($parse($attrs.min), function(value) {\r\n var dt = new Date(value);\r\n min = isNaN(dt) ? undefined : dt;\r\n }));\r\n\r\n var max;\r\n watchers.push($scope.$parent.$watch($parse($attrs.max), function(value) {\r\n var dt = new Date(value);\r\n max = isNaN(dt) ? undefined : dt;\r\n }));\r\n\r\n var disabled = false;\r\n if ($attrs.ngDisabled) {\r\n watchers.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {\r\n disabled = value;\r\n }));\r\n }\r\n\r\n $scope.noIncrementHours = function() {\r\n var incrementedSelected = addMinutes(selected, hourStep * 60);\r\n return disabled || incrementedSelected > max ||\r\n incrementedSelected < selected && incrementedSelected < min;\r\n };\r\n\r\n $scope.noDecrementHours = function() {\r\n var decrementedSelected = addMinutes(selected, -hourStep * 60);\r\n return disabled || decrementedSelected < min ||\r\n decrementedSelected > selected && decrementedSelected > max;\r\n };\r\n\r\n $scope.noIncrementMinutes = function() {\r\n var incrementedSelected = addMinutes(selected, minuteStep);\r\n return disabled || incrementedSelected > max ||\r\n incrementedSelected < selected && incrementedSelected < min;\r\n };\r\n\r\n $scope.noDecrementMinutes = function() {\r\n var decrementedSelected = addMinutes(selected, -minuteStep);\r\n return disabled || decrementedSelected < min ||\r\n decrementedSelected > selected && decrementedSelected > max;\r\n };\r\n\r\n $scope.noIncrementSeconds = function() {\r\n var incrementedSelected = addSeconds(selected, secondStep);\r\n return disabled || incrementedSelected > max ||\r\n incrementedSelected < selected && incrementedSelected < min;\r\n };\r\n\r\n $scope.noDecrementSeconds = function() {\r\n var decrementedSelected = addSeconds(selected, -secondStep);\r\n return disabled || decrementedSelected < min ||\r\n decrementedSelected > selected && decrementedSelected > max;\r\n };\r\n\r\n $scope.noToggleMeridian = function() {\r\n if (selected.getHours() < 12) {\r\n return disabled || addMinutes(selected, 12 * 60) > max;\r\n }\r\n\r\n return disabled || addMinutes(selected, -12 * 60) < min;\r\n };\r\n\r\n var secondStep = timepickerConfig.secondStep;\r\n if ($attrs.secondStep) {\r\n watchers.push($scope.$parent.$watch($parse($attrs.secondStep), function(value) {\r\n secondStep = +value;\r\n }));\r\n }\r\n\r\n $scope.showSeconds = timepickerConfig.showSeconds;\r\n if ($attrs.showSeconds) {\r\n watchers.push($scope.$parent.$watch($parse($attrs.showSeconds), function(value) {\r\n $scope.showSeconds = !!value;\r\n }));\r\n }\r\n\r\n // 12H / 24H mode\r\n $scope.showMeridian = timepickerConfig.showMeridian;\r\n if ($attrs.showMeridian) {\r\n watchers.push($scope.$parent.$watch($parse($attrs.showMeridian), function(value) {\r\n $scope.showMeridian = !!value;\r\n\r\n if (ngModelCtrl.$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 = +$scope.hours;\r\n var valid = $scope.showMeridian ? hours > 0 && hours < 13 :\r\n hours >= 0 && hours < 24;\r\n if (!valid || $scope.hours === '') {\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 = +$scope.minutes;\r\n var valid = minutes >= 0 && minutes < 60;\r\n if (!valid || $scope.minutes === '') {\r\n return undefined;\r\n }\r\n return minutes;\r\n }\r\n\r\n function getSecondsFromTemplate() {\r\n var seconds = +$scope.seconds;\r\n return seconds >= 0 && seconds < 60 ? seconds : undefined;\r\n }\r\n\r\n function pad(value, noPad) {\r\n if (value === null) {\r\n return '';\r\n }\r\n\r\n return angular.isDefined(value) && value.toString().length < 2 && !noPad ?\r\n '0' + value : value.toString();\r\n }\r\n\r\n // Respond on mousewheel spin\r\n this.setupMousewheelEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\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.on('mousewheel wheel', function(e) {\r\n if (!disabled) {\r\n $scope.$apply(isScrollingUp(e) ? $scope.incrementHours() : $scope.decrementHours());\r\n }\r\n e.preventDefault();\r\n });\r\n\r\n minutesInputEl.on('mousewheel wheel', function(e) {\r\n if (!disabled) {\r\n $scope.$apply(isScrollingUp(e) ? $scope.incrementMinutes() : $scope.decrementMinutes());\r\n }\r\n e.preventDefault();\r\n });\r\n\r\n secondsInputEl.on('mousewheel wheel', function(e) {\r\n if (!disabled) {\r\n $scope.$apply(isScrollingUp(e) ? $scope.incrementSeconds() : $scope.decrementSeconds());\r\n }\r\n e.preventDefault();\r\n });\r\n };\r\n\r\n // Respond on up/down arrowkeys\r\n this.setupArrowkeyEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\r\n hoursInputEl.on('keydown', function(e) {\r\n if (!disabled) {\r\n if (e.which === 38) { // up\r\n e.preventDefault();\r\n $scope.incrementHours();\r\n $scope.$apply();\r\n } else if (e.which === 40) { // down\r\n e.preventDefault();\r\n $scope.decrementHours();\r\n $scope.$apply();\r\n }\r\n }\r\n });\r\n\r\n minutesInputEl.on('keydown', function(e) {\r\n if (!disabled) {\r\n if (e.which === 38) { // up\r\n e.preventDefault();\r\n $scope.incrementMinutes();\r\n $scope.$apply();\r\n } else if (e.which === 40) { // down\r\n e.preventDefault();\r\n $scope.decrementMinutes();\r\n $scope.$apply();\r\n }\r\n }\r\n });\r\n\r\n secondsInputEl.on('keydown', function(e) {\r\n if (!disabled) {\r\n if (e.which === 38) { // up\r\n e.preventDefault();\r\n $scope.incrementSeconds();\r\n $scope.$apply();\r\n } else if (e.which === 40) { // down\r\n e.preventDefault();\r\n $scope.decrementSeconds();\r\n $scope.$apply();\r\n }\r\n }\r\n });\r\n };\r\n\r\n this.setupInputEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\r\n if ($scope.readonlyInput) {\r\n $scope.updateHours = angular.noop;\r\n $scope.updateMinutes = angular.noop;\r\n $scope.updateSeconds = angular.noop;\r\n return;\r\n }\r\n\r\n var invalidate = function(invalidHours, invalidMinutes, invalidSeconds) {\r\n ngModelCtrl.$setViewValue(null);\r\n ngModelCtrl.$setValidity('time', false);\r\n if (angular.isDefined(invalidHours)) {\r\n $scope.invalidHours = invalidHours;\r\n if (hoursModelCtrl) {\r\n hoursModelCtrl.$setValidity('hours', false);\r\n }\r\n }\r\n\r\n if (angular.isDefined(invalidMinutes)) {\r\n $scope.invalidMinutes = invalidMinutes;\r\n if (minutesModelCtrl) {\r\n minutesModelCtrl.$setValidity('minutes', false);\r\n }\r\n }\r\n\r\n if (angular.isDefined(invalidSeconds)) {\r\n $scope.invalidSeconds = invalidSeconds;\r\n if (secondsModelCtrl) {\r\n secondsModelCtrl.$setValidity('seconds', false);\r\n }\r\n }\r\n };\r\n\r\n $scope.updateHours = function() {\r\n var hours = getHoursFromTemplate(),\r\n minutes = getMinutesFromTemplate();\r\n\r\n ngModelCtrl.$setDirty();\r\n\r\n if (angular.isDefined(hours) && angular.isDefined(minutes)) {\r\n selected.setHours(hours);\r\n selected.setMinutes(minutes);\r\n if (selected < min || selected > max) {\r\n invalidate(true);\r\n } else {\r\n refresh('h');\r\n }\r\n } else {\r\n invalidate(true);\r\n }\r\n };\r\n\r\n hoursInputEl.on('blur', function(e) {\r\n ngModelCtrl.$setTouched();\r\n if (modelIsEmpty()) {\r\n makeValid();\r\n } else if ($scope.hours === null || $scope.hours === '') {\r\n invalidate(true);\r\n } else if (!$scope.invalidHours && $scope.hours < 10) {\r\n $scope.$apply(function() {\r\n $scope.hours = pad($scope.hours, !padHours);\r\n });\r\n }\r\n });\r\n\r\n $scope.updateMinutes = function() {\r\n var minutes = getMinutesFromTemplate(),\r\n hours = getHoursFromTemplate();\r\n\r\n ngModelCtrl.$setDirty();\r\n\r\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\r\n selected.setHours(hours);\r\n selected.setMinutes(minutes);\r\n if (selected < min || selected > max) {\r\n invalidate(undefined, true);\r\n } else {\r\n refresh('m');\r\n }\r\n } else {\r\n invalidate(undefined, true);\r\n }\r\n };\r\n\r\n minutesInputEl.on('blur', function(e) {\r\n ngModelCtrl.$setTouched();\r\n if (modelIsEmpty()) {\r\n makeValid();\r\n } else if ($scope.minutes === null) {\r\n invalidate(undefined, true);\r\n } else 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\r\n $scope.updateSeconds = function() {\r\n var seconds = getSecondsFromTemplate();\r\n\r\n ngModelCtrl.$setDirty();\r\n\r\n if (angular.isDefined(seconds)) {\r\n selected.setSeconds(seconds);\r\n refresh('s');\r\n } else {\r\n invalidate(undefined, undefined, true);\r\n }\r\n };\r\n\r\n secondsInputEl.on('blur', function(e) {\r\n if (modelIsEmpty()) {\r\n makeValid();\r\n } else if (!$scope.invalidSeconds && $scope.seconds < 10) {\r\n $scope.$apply( function() {\r\n $scope.seconds = pad($scope.seconds);\r\n });\r\n }\r\n });\r\n\r\n };\r\n\r\n this.render = function() {\r\n var date = ngModelCtrl.$viewValue;\r\n\r\n if (isNaN(date)) {\r\n ngModelCtrl.$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\r\n if (selected < min || selected > max) {\r\n ngModelCtrl.$setValidity('time', false);\r\n $scope.invalidHours = true;\r\n $scope.invalidMinutes = true;\r\n } else {\r\n makeValid();\r\n }\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 ngModelCtrl.$setViewValue(new Date(selected));\r\n updateTemplate(keyboardChange);\r\n }\r\n\r\n function makeValid() {\r\n if (hoursModelCtrl) {\r\n hoursModelCtrl.$setValidity('hours', true);\r\n }\r\n\r\n if (minutesModelCtrl) {\r\n minutesModelCtrl.$setValidity('minutes', true);\r\n }\r\n\r\n if (secondsModelCtrl) {\r\n secondsModelCtrl.$setValidity('seconds', true);\r\n }\r\n\r\n ngModelCtrl.$setValidity('time', true);\r\n $scope.invalidHours = false;\r\n $scope.invalidMinutes = false;\r\n $scope.invalidSeconds = false;\r\n }\r\n\r\n function updateTemplate(keyboardChange) {\r\n if (!ngModelCtrl.$modelValue) {\r\n $scope.hours = null;\r\n $scope.minutes = null;\r\n $scope.seconds = null;\r\n $scope.meridian = meridians[0];\r\n } else {\r\n var hours = selected.getHours(),\r\n minutes = selected.getMinutes(),\r\n seconds = selected.getSeconds();\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\r\n $scope.hours = keyboardChange === 'h' ? hours : pad(hours, !padHours);\r\n if (keyboardChange !== 'm') {\r\n $scope.minutes = pad(minutes);\r\n }\r\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\r\n\r\n if (keyboardChange !== 's') {\r\n $scope.seconds = pad(seconds);\r\n }\r\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\r\n }\r\n }\r\n\r\n function addSecondsToSelected(seconds) {\r\n selected = addSeconds(selected, seconds);\r\n refresh();\r\n }\r\n\r\n function addMinutes(selected, minutes) {\r\n return addSeconds(selected, minutes*60);\r\n }\r\n\r\n function addSeconds(date, seconds) {\r\n var dt = new Date(date.getTime() + seconds * 1000);\r\n var newDate = new Date(date);\r\n newDate.setHours(dt.getHours(), dt.getMinutes(), dt.getSeconds());\r\n return newDate;\r\n }\r\n\r\n function modelIsEmpty() {\r\n return ($scope.hours === null || $scope.hours === '') &&\r\n ($scope.minutes === null || $scope.minutes === '') &&\r\n (!$scope.showSeconds || $scope.showSeconds && ($scope.seconds === null || $scope.seconds === ''));\r\n }\r\n\r\n $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?\r\n $scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;\r\n\r\n $scope.incrementHours = function() {\r\n if (!$scope.noIncrementHours()) {\r\n addSecondsToSelected(hourStep * 60 * 60);\r\n }\r\n };\r\n\r\n $scope.decrementHours = function() {\r\n if (!$scope.noDecrementHours()) {\r\n addSecondsToSelected(-hourStep * 60 * 60);\r\n }\r\n };\r\n\r\n $scope.incrementMinutes = function() {\r\n if (!$scope.noIncrementMinutes()) {\r\n addSecondsToSelected(minuteStep * 60);\r\n }\r\n };\r\n\r\n $scope.decrementMinutes = function() {\r\n if (!$scope.noDecrementMinutes()) {\r\n addSecondsToSelected(-minuteStep * 60);\r\n }\r\n };\r\n\r\n $scope.incrementSeconds = function() {\r\n if (!$scope.noIncrementSeconds()) {\r\n addSecondsToSelected(secondStep);\r\n }\r\n };\r\n\r\n $scope.decrementSeconds = function() {\r\n if (!$scope.noDecrementSeconds()) {\r\n addSecondsToSelected(-secondStep);\r\n }\r\n };\r\n\r\n $scope.toggleMeridian = function() {\r\n var minutes = getMinutesFromTemplate(),\r\n hours = getHoursFromTemplate();\r\n\r\n if (!$scope.noToggleMeridian()) {\r\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\r\n addSecondsToSelected(12 * 60 * (selected.getHours() < 12 ? 60 : -60));\r\n } else {\r\n $scope.meridian = $scope.meridian === meridians[0] ? meridians[1] : meridians[0];\r\n }\r\n }\r\n };\r\n\r\n $scope.blur = function() {\r\n ngModelCtrl.$setTouched();\r\n };\r\n\r\n $scope.$on('$destroy', function() {\r\n while (watchers.length) {\r\n watchers.shift()();\r\n }\r\n });\r\n}])\r\n\r\n.directive('uibTimepicker', ['uibTimepickerConfig', function(uibTimepickerConfig) {\r\n return {\r\n require: ['uibTimepicker', '?^ngModel'],\r\n restrict: 'A',\r\n controller: 'UibTimepickerController',\r\n controllerAs: 'timepicker',\r\n scope: {},\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || uibTimepickerConfig.templateUrl;\r\n },\r\n link: function(scope, element, attrs, ctrls) {\r\n var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n if (ngModelCtrl) {\r\n timepickerCtrl.init(ngModelCtrl, element.find('input'));\r\n }\r\n }\r\n };\r\n}]);\r\n\r\nangular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])\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('uibTypeaheadParser', ['$parse', function($parse) {\r\n // 000001111111100000000000002222222200000000000000003333333333333330000000000044444444000\r\n var TYPEAHEAD_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;\r\n return {\r\n parse: function(input) {\r\n var match = input.match(TYPEAHEAD_REGEXP);\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 .controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$$debounce', '$uibPosition', 'uibTypeaheadParser',\r\n function(originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $$debounce, $position, typeaheadParser) {\r\n var HOT_KEYS = [9, 13, 27, 38, 40];\r\n var eventDebounceTime = 200;\r\n var modelCtrl, ngModelOptions;\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 minLength = originalScope.$eval(attrs.typeaheadMinLength);\r\n if (!minLength && minLength !== 0) {\r\n minLength = 1;\r\n }\r\n\r\n originalScope.$watch(attrs.typeaheadMinLength, function (newVal) {\r\n minLength = !newVal && newVal !== 0 ? 1 : newVal;\r\n });\r\n\r\n //minimal wait time after last character typed before typeahead 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 originalScope.$watch(attrs.typeaheadEditable, function (newVal) {\r\n isEditable = newVal !== false;\r\n });\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 function to determine if an event should cause selection\r\n var isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function(scope, vals) {\r\n var evt = vals.$event;\r\n return evt.which === 13 || evt.which === 9;\r\n };\r\n\r\n //a callback executed when a match is selected\r\n var onSelectCallback = $parse(attrs.typeaheadOnSelect);\r\n\r\n //should it select highlighted popup value when losing focus?\r\n var isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;\r\n\r\n //binding to a variable that indicates if there were no results after the query is completed\r\n var isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;\r\n\r\n var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\r\n\r\n var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;\r\n\r\n var appendTo = attrs.typeaheadAppendTo ?\r\n originalScope.$eval(attrs.typeaheadAppendTo) : null;\r\n\r\n var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;\r\n\r\n //If input matches an item of the list exactly, select it automatically\r\n var selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;\r\n\r\n //binding to a variable that indicates if dropdown is open\r\n var isOpenSetter = $parse(attrs.typeaheadIsOpen).assign || angular.noop;\r\n\r\n var showHint = originalScope.$eval(attrs.typeaheadShowHint) || false;\r\n\r\n //INTERNAL VARIABLES\r\n\r\n //model setter executed upon match selection\r\n var parsedModel = $parse(attrs.ngModel);\r\n var invokeModelSetter = $parse(attrs.ngModel + '($$$p)');\r\n var $setModelValue = function(scope, newValue) {\r\n if (angular.isFunction(parsedModel(originalScope)) &&\r\n ngModelOptions.getOption('getterSetter')) {\r\n return invokeModelSetter(scope, {$$$p: newValue});\r\n }\r\n\r\n return parsedModel.assign(scope, newValue);\r\n };\r\n\r\n //expressions used by typeahead\r\n var parserResult = typeaheadParser.parse(attrs.uibTypeahead);\r\n\r\n var hasFocus;\r\n\r\n //Used to avoid bug in iOS webview where iOS keyboard does not fire\r\n //mousedown & mouseup events\r\n //Issue #3699\r\n var selected;\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 var offDestroy = originalScope.$on('$destroy', function() {\r\n scope.$destroy();\r\n });\r\n scope.$on('$destroy', offDestroy);\r\n\r\n // WAI-ARIA\r\n var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\r\n element.attr({\r\n 'aria-autocomplete': 'list',\r\n 'aria-expanded': false,\r\n 'aria-owns': popupId\r\n });\r\n\r\n var inputsContainer, hintInputElem;\r\n //add read-only input to show hint\r\n if (showHint) {\r\n inputsContainer = angular.element('
');\r\n inputsContainer.css('position', 'relative');\r\n element.after(inputsContainer);\r\n hintInputElem = element.clone();\r\n hintInputElem.attr('placeholder', '');\r\n hintInputElem.attr('tabindex', '-1');\r\n hintInputElem.val('');\r\n hintInputElem.css({\r\n 'position': 'absolute',\r\n 'top': '0px',\r\n 'left': '0px',\r\n 'border-color': 'transparent',\r\n 'box-shadow': 'none',\r\n 'opacity': 1,\r\n 'background': 'none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)',\r\n 'color': '#999'\r\n });\r\n element.css({\r\n 'position': 'relative',\r\n 'vertical-align': 'top',\r\n 'background-color': 'transparent'\r\n });\r\n\r\n if (hintInputElem.attr('id')) {\r\n hintInputElem.removeAttr('id'); // remove duplicate id if present.\r\n }\r\n inputsContainer.append(hintInputElem);\r\n hintInputElem.after(element);\r\n }\r\n\r\n //pop-up element used to display matches\r\n var popUpEl = angular.element('
');\r\n popUpEl.attr({\r\n id: popupId,\r\n matches: 'matches',\r\n active: 'activeIdx',\r\n select: 'select(activeIdx, evt)',\r\n 'move-in-progress': 'moveInProgress',\r\n query: 'query',\r\n position: 'position',\r\n 'assign-is-open': 'assignIsOpen(isOpen)',\r\n debounce: 'debounceUpdate'\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 if (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {\r\n popUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);\r\n }\r\n\r\n var resetHint = function() {\r\n if (showHint) {\r\n hintInputElem.val('');\r\n }\r\n };\r\n\r\n var resetMatches = function() {\r\n scope.matches = [];\r\n scope.activeIdx = -1;\r\n element.attr('aria-expanded', false);\r\n resetHint();\r\n };\r\n\r\n var getMatchId = function(index) {\r\n return popupId + '-option-' + index;\r\n };\r\n\r\n // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.\r\n // This attribute is added or removed automatically when the `activeIdx` changes.\r\n scope.$watch('activeIdx', function(index) {\r\n if (index < 0) {\r\n element.removeAttr('aria-activedescendant');\r\n } else {\r\n element.attr('aria-activedescendant', getMatchId(index));\r\n }\r\n });\r\n\r\n var inputIsExactMatch = function(inputValue, index) {\r\n if (scope.matches.length > index && inputValue) {\r\n return inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var getMatchesAsync = function(inputValue, evt) {\r\n var locals = {$viewValue: inputValue};\r\n isLoadingSetter(originalScope, true);\r\n isNoResultsSetter(originalScope, false);\r\n $q.when(parserResult.source(originalScope, locals)).then(function(matches) {\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 var onCurrentRequest = inputValue === modelCtrl.$viewValue;\r\n if (onCurrentRequest && hasFocus) {\r\n if (matches && matches.length > 0) {\r\n scope.activeIdx = focusFirst ? 0 : -1;\r\n isNoResultsSetter(originalScope, false);\r\n scope.matches.length = 0;\r\n\r\n //transform labels\r\n for (var i = 0; i < matches.length; i++) {\r\n locals[parserResult.itemName] = matches[i];\r\n scope.matches.push({\r\n id: getMatchId(i),\r\n label: parserResult.viewMapper(scope, locals),\r\n model: matches[i]\r\n });\r\n }\r\n\r\n scope.query = inputValue;\r\n //position pop-up with matches - we need to re-calculate its position each time we are opening a window\r\n //with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page\r\n //due to other elements being rendered\r\n recalculatePosition();\r\n\r\n element.attr('aria-expanded', true);\r\n\r\n //Select the single remaining option if user input matches\r\n if (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {\r\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\r\n $$debounce(function() {\r\n scope.select(0, evt);\r\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\r\n } else {\r\n scope.select(0, evt);\r\n }\r\n }\r\n\r\n if (showHint) {\r\n var firstLabel = scope.matches[0].label;\r\n if (angular.isString(inputValue) &&\r\n inputValue.length > 0 &&\r\n firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {\r\n hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));\r\n } else {\r\n hintInputElem.val('');\r\n }\r\n }\r\n } else {\r\n resetMatches();\r\n isNoResultsSetter(originalScope, true);\r\n }\r\n }\r\n if (onCurrentRequest) {\r\n isLoadingSetter(originalScope, false);\r\n }\r\n }, function() {\r\n resetMatches();\r\n isLoadingSetter(originalScope, false);\r\n isNoResultsSetter(originalScope, true);\r\n });\r\n };\r\n\r\n // bind events only if appendToBody params exist - performance feature\r\n if (appendToBody) {\r\n angular.element($window).on('resize', fireRecalculating);\r\n $document.find('body').on('scroll', fireRecalculating);\r\n }\r\n\r\n // Declare the debounced function outside recalculating for\r\n // proper debouncing\r\n var debouncedRecalculate = $$debounce(function() {\r\n // if popup is visible\r\n if (scope.matches.length) {\r\n recalculatePosition();\r\n }\r\n\r\n scope.moveInProgress = false;\r\n }, eventDebounceTime);\r\n\r\n // Default progress type\r\n scope.moveInProgress = false;\r\n\r\n function fireRecalculating() {\r\n if (!scope.moveInProgress) {\r\n scope.moveInProgress = true;\r\n scope.$digest();\r\n }\r\n\r\n debouncedRecalculate();\r\n }\r\n\r\n // recalculate actual position and set new values to scope\r\n // after digest loop is popup in right position\r\n function recalculatePosition() {\r\n scope.position = appendToBody ? $position.offset(element) : $position.position(element);\r\n scope.position.top += element.prop('offsetHeight');\r\n }\r\n\r\n //we need to propagate user's query so we can higlight matches\r\n scope.query = undefined;\r\n\r\n //Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later\r\n var timeoutPromise;\r\n\r\n var scheduleSearchWithTimeout = function(inputValue) {\r\n timeoutPromise = $timeout(function() {\r\n getMatchesAsync(inputValue);\r\n }, waitTime);\r\n };\r\n\r\n var cancelPreviousTimeout = function() {\r\n if (timeoutPromise) {\r\n $timeout.cancel(timeoutPromise);\r\n }\r\n };\r\n\r\n resetMatches();\r\n\r\n scope.assignIsOpen = function (isOpen) {\r\n isOpenSetter(originalScope, isOpen);\r\n };\r\n\r\n scope.select = function(activeIdx, evt) {\r\n //called from within the $digest() cycle\r\n var locals = {};\r\n var model, item;\r\n\r\n selected = true;\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 modelCtrl.$setValidity('parse', true);\r\n\r\n onSelectCallback(originalScope, {\r\n $item: item,\r\n $model: model,\r\n $label: parserResult.viewMapper(originalScope, locals),\r\n $event: evt\r\n });\r\n\r\n resetMatches();\r\n\r\n //return focus to the input element if a match was selected via a mouse click event\r\n // use timeout to avoid $rootScope:inprog error\r\n if (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {\r\n $timeout(function() { element[0].focus(); }, 0, false);\r\n }\r\n };\r\n\r\n //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\r\n element.on('keydown', function(evt) {\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 var shouldSelect = isSelectEvent(originalScope, {$event: evt});\r\n\r\n /**\r\n * if there's nothing selected (i.e. focusFirst) and enter or tab is hit\r\n * or\r\n * shift + tab is pressed to bring focus to the previous element\r\n * then clear the results\r\n */\r\n if (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {\r\n resetMatches();\r\n scope.$digest();\r\n return;\r\n }\r\n\r\n evt.preventDefault();\r\n var target;\r\n switch (evt.which) {\r\n case 27: // escape\r\n evt.stopPropagation();\r\n\r\n resetMatches();\r\n originalScope.$digest();\r\n break;\r\n case 38: // up arrow\r\n scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;\r\n scope.$digest();\r\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\r\n target.parentNode.scrollTop = target.offsetTop;\r\n break;\r\n case 40: // down arrow\r\n scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\r\n scope.$digest();\r\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\r\n target.parentNode.scrollTop = target.offsetTop;\r\n break;\r\n default:\r\n if (shouldSelect) {\r\n scope.$apply(function() {\r\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\r\n $$debounce(function() {\r\n scope.select(scope.activeIdx, evt);\r\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\r\n } else {\r\n scope.select(scope.activeIdx, evt);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n element.on('focus', function (evt) {\r\n hasFocus = true;\r\n if (minLength === 0 && !modelCtrl.$viewValue) {\r\n $timeout(function() {\r\n getMatchesAsync(modelCtrl.$viewValue, evt);\r\n }, 0);\r\n }\r\n });\r\n\r\n element.on('blur', function(evt) {\r\n if (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {\r\n selected = true;\r\n scope.$apply(function() {\r\n if (angular.isObject(scope.debounceUpdate) && angular.isNumber(scope.debounceUpdate.blur)) {\r\n $$debounce(function() {\r\n scope.select(scope.activeIdx, evt);\r\n }, scope.debounceUpdate.blur);\r\n } else {\r\n scope.select(scope.activeIdx, evt);\r\n }\r\n });\r\n }\r\n if (!isEditable && modelCtrl.$error.editable) {\r\n modelCtrl.$setViewValue();\r\n scope.$apply(function() {\r\n // Reset validity as we are clearing\r\n modelCtrl.$setValidity('editable', true);\r\n modelCtrl.$setValidity('parse', true);\r\n });\r\n element.val('');\r\n }\r\n hasFocus = false;\r\n selected = false;\r\n });\r\n\r\n // Keep reference to click handler to unbind it.\r\n var dismissClickHandler = function(evt) {\r\n // Issue #3973\r\n // Firefox treats right click as a click on document\r\n if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {\r\n resetMatches();\r\n if (!$rootScope.$$phase) {\r\n originalScope.$digest();\r\n }\r\n }\r\n };\r\n\r\n $document.on('click', dismissClickHandler);\r\n\r\n originalScope.$on('$destroy', function() {\r\n $document.off('click', dismissClickHandler);\r\n if (appendToBody || appendTo) {\r\n $popup.remove();\r\n }\r\n\r\n if (appendToBody) {\r\n angular.element($window).off('resize', fireRecalculating);\r\n $document.find('body').off('scroll', fireRecalculating);\r\n }\r\n // Prevent jQuery cache memory leak\r\n popUpEl.remove();\r\n\r\n if (showHint) {\r\n inputsContainer.remove();\r\n }\r\n });\r\n\r\n var $popup = $compile(popUpEl)(scope);\r\n\r\n if (appendToBody) {\r\n $document.find('body').append($popup);\r\n } else if (appendTo) {\r\n angular.element(appendTo).eq(0).append($popup);\r\n } else {\r\n element.after($popup);\r\n }\r\n\r\n this.init = function(_modelCtrl) {\r\n modelCtrl = _modelCtrl;\r\n ngModelOptions = extractOptions(modelCtrl);\r\n\r\n scope.debounceUpdate = $parse(ngModelOptions.getOption('debounce'))(originalScope);\r\n\r\n //plug into $parsers pipeline to open a typeahead on view changes initiated from DOM\r\n //$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue\r\n modelCtrl.$parsers.unshift(function(inputValue) {\r\n hasFocus = true;\r\n\r\n if (minLength === 0 || inputValue && inputValue.length >= minLength) {\r\n if (waitTime > 0) {\r\n cancelPreviousTimeout();\r\n scheduleSearchWithTimeout(inputValue);\r\n } else {\r\n getMatchesAsync(inputValue);\r\n }\r\n } else {\r\n isLoadingSetter(originalScope, false);\r\n cancelPreviousTimeout();\r\n resetMatches();\r\n }\r\n\r\n if (isEditable) {\r\n return inputValue;\r\n }\r\n\r\n if (!inputValue) {\r\n // Reset in case user had typed something previously.\r\n modelCtrl.$setValidity('editable', true);\r\n return null;\r\n }\r\n\r\n modelCtrl.$setValidity('editable', false);\r\n return undefined;\r\n });\r\n\r\n modelCtrl.$formatters.push(function(modelValue) {\r\n var candidateViewValue, emptyViewValue;\r\n var locals = {};\r\n\r\n // The validity may be set to false via $parsers (see above) if\r\n // the model is restricted to selected values. If the model\r\n // is set manually it is considered to be valid.\r\n if (!isEditable) {\r\n modelCtrl.$setValidity('editable', true);\r\n }\r\n\r\n if (inputFormatter) {\r\n locals.$model = modelValue;\r\n return inputFormatter(originalScope, locals);\r\n }\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 function extractOptions(ngModelCtrl) {\r\n var ngModelOptions;\r\n\r\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\r\n // guarantee a value\r\n ngModelOptions = ngModelCtrl.$options || {};\r\n\r\n // mimic 1.6+ api\r\n ngModelOptions.getOption = function (key) {\r\n return ngModelOptions[key];\r\n };\r\n } else { // in angular >=1.6 $options is always present\r\n ngModelOptions = ngModelCtrl.$options;\r\n }\r\n\r\n return ngModelOptions;\r\n }\r\n }])\r\n\r\n .directive('uibTypeahead', function() {\r\n return {\r\n controller: 'UibTypeaheadController',\r\n require: ['ngModel', 'uibTypeahead'],\r\n link: function(originalScope, element, attrs, ctrls) {\r\n ctrls[1].init(ctrls[0]);\r\n }\r\n };\r\n })\r\n\r\n .directive('uibTypeaheadPopup', ['$$debounce', function($$debounce) {\r\n return {\r\n scope: {\r\n matches: '=',\r\n query: '=',\r\n active: '=',\r\n position: '&',\r\n moveInProgress: '=',\r\n select: '&',\r\n assignIsOpen: '&',\r\n debounce: '&'\r\n },\r\n replace: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';\r\n },\r\n link: function(scope, element, attrs) {\r\n scope.templateUrl = attrs.templateUrl;\r\n\r\n scope.isOpen = function() {\r\n var isDropdownOpen = scope.matches.length > 0;\r\n scope.assignIsOpen({ isOpen: isDropdownOpen });\r\n return isDropdownOpen;\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, evt) {\r\n var debounce = scope.debounce();\r\n if (angular.isNumber(debounce) || angular.isObject(debounce)) {\r\n $$debounce(function() {\r\n scope.select({activeIdx: activeIdx, evt: evt});\r\n }, angular.isNumber(debounce) ? debounce : debounce['default']);\r\n } else {\r\n scope.select({activeIdx: activeIdx, evt: evt});\r\n }\r\n };\r\n }\r\n };\r\n }])\r\n\r\n .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {\r\n return {\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) || 'uib/template/typeahead/typeahead-match.html';\r\n $templateRequest(tplUrl).then(function(tplContent) {\r\n var tplEl = angular.element(tplContent.trim());\r\n element.replaceWith(tplEl);\r\n $compile(tplEl)(scope);\r\n });\r\n }\r\n };\r\n }])\r\n\r\n .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {\r\n var isSanitizePresent;\r\n isSanitizePresent = $injector.has('$sanitize');\r\n\r\n function escapeRegexp(queryToEscape) {\r\n // Regex: capture the whole query string and replace it with the string that will be used to match\r\n // the results, for example if the capture is \"a\" the result will be \\a\r\n return queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\r\n }\r\n\r\n function containsHtml(matchItem) {\r\n return /<.*>/g.test(matchItem);\r\n }\r\n\r\n return function(matchItem, query) {\r\n if (!isSanitizePresent && containsHtml(matchItem)) {\r\n $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger\r\n }\r\n matchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; // Replaces the capture string with a the same string inside of a \"strong\" tag\r\n if (!isSanitizePresent) {\r\n matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive\r\n }\r\n return matchItem;\r\n };\r\n }]);\r\n\r\nangular.module(\"uib/template/accordion/accordion-group.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/accordion/accordion-group.html\",\r\n \"
\\n\" +\r\n \"

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

\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/accordion/accordion.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/accordion/accordion.html\",\r\n \"
\");\r\n}]);\r\n\r\nangular.module(\"uib/template/alert/alert.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/alert/alert.html\",\r\n \"\\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/carousel/carousel.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/carousel/carousel.html\",\r\n \"
\\n\" +\r\n \" 1\\\">\\n\" +\r\n \" \\n\" +\r\n \" previous\\n\" +\r\n \"\\n\" +\r\n \" 1\\\">\\n\" +\r\n \" \\n\" +\r\n \" next\\n\" +\r\n \"\\n\" +\r\n \"
    1\\\">\\n\" +\r\n \"
  1. \\n\" +\r\n \" slide {{ $index + 1 }} of {{ slides.length }}, currently active\\n\" +\r\n \"
  2. \\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/carousel/slide.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/carousel/slide.html\",\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/datepicker.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/datepicker.html\",\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/day.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/day.html\",\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 \" \\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.abbr}}
{{ weekNumbers[$index] }}\\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/month.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/month.html\",\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 \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/year.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/year.html\",\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 \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepickerPopup/popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepickerPopup/popup.html\",\r\n \"\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/modal/window.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/modal/window.html\",\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/pager/pager.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/pager/pager.html\",\r\n \"
  • {{::getText('previous')}}
  • \\n\" +\r\n \"
  • {{::getText('next')}}
  • \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/pagination/pagination.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/pagination/pagination.html\",\r\n \"
  • {{::getText('first')}}
  • \\n\" +\r\n \"
  • {{::getText('previous')}}
  • \\n\" +\r\n \"
  • {{page.text}}
  • \\n\" +\r\n \"
  • {{::getText('next')}}
  • \\n\" +\r\n \"
  • {{::getText('last')}}
  • \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tooltip/tooltip-html-popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tooltip/tooltip-html-popup.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tooltip/tooltip-popup.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tooltip/tooltip-template-popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tooltip/tooltip-template-popup.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/popover/popover-html.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/popover/popover-html.html\",\r\n \"
    \\n\" +\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/popover/popover-template.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/popover/popover-template.html\",\r\n \"
    \\n\" +\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/popover/popover.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/popover/popover.html\",\r\n \"
    \\n\" +\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/progressbar/bar.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/progressbar/bar.html\",\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/progressbar/progress.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/progressbar/progress.html\",\r\n \"
    \");\r\n}]);\r\n\r\nangular.module(\"uib/template/progressbar/progressbar.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/progressbar/progressbar.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/rating/rating.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/rating/rating.html\",\r\n \"\\n\" +\r\n \" ({{ $index < value ? '*' : ' ' }})\\n\" +\r\n \" \\n\" +\r\n \"\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tabs/tab.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tabs/tab.html\",\r\n \"
  • \\n\" +\r\n \" {{heading}}\\n\" +\r\n \"
  • \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tabs/tabset.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tabs/tabset.html\",\r\n \"
    \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/timepicker/timepicker.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/timepicker/timepicker.html\",\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 \" \\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 \" \\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 \" \\n\" +\r\n \"
      
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/typeahead/typeahead-match.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/typeahead/typeahead-match.html\",\r\n \"\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/typeahead/typeahead-popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/typeahead/typeahead-popup.html\",\r\n \"\\n\" +\r\n \"\");\r\n}]);\r\nangular.module('ui.bootstrap.carousel').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibCarouselCss && angular.element(document).find('head').prepend(''); angular.$$uibCarouselCss = true; });\r\nangular.module('ui.bootstrap.datepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerCss = true; });\r\nangular.module('ui.bootstrap.position').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibPositionCss && angular.element(document).find('head').prepend(''); angular.$$uibPositionCss = true; });\r\nangular.module('ui.bootstrap.datepickerPopup').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerpopupCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerpopupCss = true; });\r\nangular.module('ui.bootstrap.tooltip').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTooltipCss && angular.element(document).find('head').prepend(''); angular.$$uibTooltipCss = true; });\r\nangular.module('ui.bootstrap.timepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTimepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibTimepickerCss = true; });\r\nangular.module('ui.bootstrap.typeahead').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTypeaheadCss && angular.element(document).find('head').prepend(''); angular.$$uibTypeaheadCss = true; });","/* angular-moment.js / v0.6.2 / (c) 2013, 2014 Uri Shaked / MIT Licence */\r\n\r\n/* global define */\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n /**\r\n\t * Apply a timezone onto a given moment object - if moment-timezone.js is included\r\n\t * Otherwise, it'll not apply any timezone shift.\r\n\t * @param {Moment} aMoment\r\n\t * @param {string} timezone\r\n\t * @returns {Moment}\r\n\t */\r\n function applyTimezone(aMoment, timezone, $log) {\r\n if (aMoment && timezone) {\r\n if (aMoment.tz) {\r\n aMoment = aMoment.tz(timezone);\r\n } else {\r\n $log.warn('angular-moment: timezone specified but moment.tz() is undefined. Did you forget to include moment-timezone.js?');\r\n }\r\n }\r\n return aMoment;\r\n }\r\n\r\n function angularMoment(angular, moment) {\r\n\r\n return angular.module('angularMoment', [])\r\n\r\n\t\t/**\r\n\t\t * Common configuration of the angularMoment module\r\n\t\t */\r\n\t\t\t.constant('angularMomentConfig', {\r\n\t\t\t timezone: '' // e.g. 'Europe/London'\r\n\t\t\t})\r\n\r\n\t\t/**\r\n\t\t * moment.js global\r\n\t\t */\r\n\t\t\t.constant('moment', moment)\r\n\r\n\t\t/**\r\n\t\t * configuration specific to the amTimeAgo directive\r\n\t\t */\r\n\t\t\t.constant('amTimeAgoConfig', { withoutSuffix: false })\r\n\r\n\t\t/**\r\n\t\t * amTimeAgo directive\r\n\t\t */\r\n\t\t\t.directive('amTimeAgo', ['$window', 'moment', 'amTimeAgoConfig', function ($window, moment, amTimeAgoConfig) {\r\n\r\n\t\t\t return function (scope, element, attr) {\r\n\t\t\t var activeTimeout = null;\r\n\t\t\t var currentValue;\r\n\t\t\t var currentFormat;\r\n\t\t\t var withoutSuffix = amTimeAgoConfig.withoutSuffix;\r\n\r\n\t\t\t function cancelTimer() {\r\n\t\t\t if (activeTimeout) {\r\n\t\t\t $window.clearTimeout(activeTimeout);\r\n\t\t\t activeTimeout = null;\r\n\t\t\t }\r\n\t\t\t }\r\n\r\n\t\t\t function updateTime(momentInstance) {\r\n\t\t\t element.text(momentInstance.fromNow(withoutSuffix));\r\n\t\t\t var howOld = moment().diff(momentInstance, 'minute');\r\n\t\t\t var secondsUntilUpdate = 3600;\r\n\t\t\t if (howOld < 1) {\r\n\t\t\t secondsUntilUpdate = 1;\r\n\t\t\t } else if (howOld < 60) {\r\n\t\t\t secondsUntilUpdate = 30;\r\n\t\t\t } else if (howOld < 180) {\r\n\t\t\t secondsUntilUpdate = 300;\r\n\t\t\t }\r\n\r\n\t\t\t activeTimeout = $window.setTimeout(function () {\r\n\t\t\t updateTime(momentInstance);\r\n\t\t\t }, secondsUntilUpdate * 1000);\r\n\t\t\t }\r\n\r\n\t\t\t function updateMoment() {\r\n\t\t\t cancelTimer();\r\n\t\t\t updateTime(moment(currentValue, currentFormat));\r\n\t\t\t }\r\n\r\n\t\t\t scope.$watch(attr.amTimeAgo, function (value) {\r\n\t\t\t if ((typeof value === 'undefined') || (value === null) || (value === '')) {\r\n\t\t\t cancelTimer();\r\n\t\t\t if (currentValue) {\r\n\t\t\t element.text('');\r\n\t\t\t currentValue = null;\r\n\t\t\t }\r\n\t\t\t return;\r\n\t\t\t }\r\n\r\n\t\t\t if (angular.isNumber(value)) {\r\n\t\t\t // Milliseconds since the epoch\r\n\t\t\t value = new Date(value);\r\n\t\t\t }\r\n\t\t\t // else assume the given value is already a date\r\n\r\n\t\t\t currentValue = value;\r\n\t\t\t updateMoment();\r\n\t\t\t });\r\n\r\n\t\t\t if (angular.isDefined(attr.amWithoutSuffix)) {\r\n\t\t\t scope.$watch(attr.amWithoutSuffix, function (value) {\r\n\t\t\t if (typeof value === 'boolean') {\r\n\t\t\t withoutSuffix = value;\r\n\t\t\t updateMoment();\r\n\t\t\t } else {\r\n\t\t\t withoutSuffix = amTimeAgoConfig.withoutSuffix;\r\n\t\t\t }\r\n\t\t\t });\r\n\t\t\t }\r\n\r\n\t\t\t attr.$observe('amFormat', function (format) {\r\n\t\t\t currentFormat = format;\r\n\t\t\t if (currentValue) {\r\n\t\t\t updateMoment();\r\n\t\t\t }\r\n\t\t\t });\r\n\r\n\t\t\t scope.$on('$destroy', function () {\r\n\t\t\t cancelTimer();\r\n\t\t\t });\r\n\r\n\t\t\t scope.$on('amMoment:languageChange', function () {\r\n\t\t\t updateMoment();\r\n\t\t\t });\r\n\t\t\t };\r\n\t\t\t}])\r\n\r\n\t\t\t.service('amMoment', ['moment', '$rootScope', function (moment, $rootScope) {\r\n\t\t\t this.changeLanguage = function (lang) {\r\n\t\t\t var result = moment.lang(lang);\r\n\t\t\t if (angular.isDefined(lang)) {\r\n\t\t\t $rootScope.$broadcast('amMoment:languageChange');\r\n\t\t\t }\r\n\t\t\t return result;\r\n\t\t\t };\r\n\t\t\t}])\r\n\r\n\t\t\t.filter('amCalendar', ['moment', '$log', 'angularMomentConfig', function (moment, $log, angularMomentConfig) {\r\n\t\t\t return function (value) {\r\n\t\t\t if (typeof value === 'undefined' || value === null) {\r\n\t\t\t return '';\r\n\t\t\t }\r\n\r\n\t\t\t if (!isNaN(parseFloat(value)) && isFinite(value)) {\r\n\t\t\t // Milliseconds since the epoch\r\n\t\t\t value = new Date(parseInt(value, 10));\r\n\t\t\t }\r\n\r\n\t\t\t var date = moment(value);\r\n\t\t\t if (!date.isValid()) {\r\n\t\t\t return '';\r\n\t\t\t }\r\n\r\n\t\t\t return applyTimezone(date, angularMomentConfig.timezone, $log).calendar();\r\n\t\t\t };\r\n\t\t\t}])\r\n\r\n\t\t\t.filter('amDateFormat', ['moment', '$log', 'angularMomentConfig', function (moment, $log, angularMomentConfig) {\r\n\t\t\t return function (value, format) {\r\n\t\t\t if (typeof value === 'undefined' || value === null) {\r\n\t\t\t return '';\r\n\t\t\t }\r\n\r\n\t\t\t if (!isNaN(parseFloat(value)) && isFinite(value)) {\r\n\t\t\t // Milliseconds since the epoch\r\n\t\t\t value = new Date(parseInt(value, 10));\r\n\t\t\t }\r\n\r\n\t\t\t var date = moment(value);\r\n\t\t\t if (!date.isValid()) {\r\n\t\t\t return '';\r\n\t\t\t }\r\n\r\n\t\t\t return applyTimezone(date, angularMomentConfig.timezone, $log).format(format);\r\n\t\t\t };\r\n\t\t\t}])\r\n\r\n\t\t\t.filter('amDurationFormat', ['moment', function (moment) {\r\n\t\t\t return function (value, format, suffix) {\r\n\t\t\t if (typeof value === 'undefined' || value === null) {\r\n\t\t\t return '';\r\n\t\t\t }\r\n\r\n\t\t\t // else assume the given value is already a duration in a format (miliseconds, etc)\r\n\t\t\t return moment.duration(value, format).humanize(suffix);\r\n\t\t\t };\r\n\t\t\t}]);\r\n }\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n define('angular-moment', ['angular', 'moment'], angularMoment);\r\n } else {\r\n angularMoment(angular, window.moment);\r\n }\r\n})();","/*\r\n * jQuery File Upload AngularJS Plugin 2.2.0\r\n * https://github.com/blueimp/jQuery-File-Upload\r\n *\r\n * Copyright 2013, Sebastian Tschan\r\n * https://blueimp.net\r\n *\r\n * Licensed under the MIT license:\r\n * http://www.opensource.org/licenses/MIT\r\n */\r\n\r\n/* jshint nomen:false */\r\n/* global define, angular */\r\n\r\n(function (factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n // Register as an anonymous AMD module:\r\n define([\r\n 'jquery',\r\n 'angular',\r\n './jquery.fileupload-image',\r\n './jquery.fileupload-audio',\r\n './jquery.fileupload-video',\r\n './jquery.fileupload-validate'\r\n ], factory);\r\n } else {\r\n factory();\r\n }\r\n}(function () {\r\n 'use strict';\r\n\r\n angular.module('blueimp.fileupload', [])\r\n\r\n // The fileUpload service provides configuration options\r\n // for the fileUpload directive and default handlers for\r\n // File Upload events:\r\n .provider('fileUpload', function () {\r\n\r\n var scopeEvalAsync = function (expression) {\r\n var scope = angular.element(this)\r\n .fileupload('option', 'scope');\r\n // Schedule a new $digest cycle if not already inside of one\r\n // and evaluate the given expression:\r\n scope.$evalAsync(expression);\r\n },\r\n addFileMethods = function (scope, data) {\r\n var files = data.files,\r\n file = files[0];\r\n angular.forEach(files, function (file, index) {\r\n file._index = index;\r\n file.$state = function () {\r\n return data.state();\r\n };\r\n file.$processing = function () {\r\n return data.processing();\r\n };\r\n file.$progress = function () {\r\n return data.progress();\r\n };\r\n file.$response = function () {\r\n return data.response();\r\n };\r\n });\r\n file.$submit = function () {\r\n if (!file.error) {\r\n return data.submit();\r\n }\r\n };\r\n file.$cancel = function () {\r\n return data.abort();\r\n };\r\n },\r\n $config;\r\n $config = this.defaults = {\r\n handleResponse: function (e, data) {\r\n var files = data.result && data.result.files;\r\n if (files) {\r\n data.scope.replace(data.files, files);\r\n } else if (data.errorThrown ||\r\n data.textStatus === 'error') {\r\n data.files[0].error = data.errorThrown ||\r\n data.textStatus;\r\n }\r\n },\r\n add: function (e, data) {\r\n if (e.isDefaultPrevented()) {\r\n return false;\r\n }\r\n var scope = data.scope,\r\n filesCopy = [];\r\n angular.forEach(data.files, function (file) {\r\n filesCopy.push(file);\r\n });\r\n scope.$apply(function () {\r\n addFileMethods(scope, data);\r\n var method = scope.option('prependFiles') ?\r\n 'unshift' : 'push';\r\n Array.prototype[method].apply(scope.queue, data.files);\r\n });\r\n data.process(function () {\r\n return scope.process(data);\r\n }).always(function () {\r\n scope.$apply(function () {\r\n addFileMethods(scope, data);\r\n scope.replace(filesCopy, data.files);\r\n });\r\n }).then(function () {\r\n if ((scope.option('autoUpload') ||\r\n data.autoUpload) &&\r\n data.autoUpload !== false) {\r\n data.submit();\r\n }\r\n });\r\n },\r\n progress: function (e, data) {\r\n if (e.isDefaultPrevented()) {\r\n return false;\r\n }\r\n data.scope.$apply();\r\n },\r\n done: function (e, data) {\r\n if (e.isDefaultPrevented()) {\r\n return false;\r\n }\r\n var that = this;\r\n data.scope.$apply(function () {\r\n data.handleResponse.call(that, e, data);\r\n });\r\n },\r\n fail: function (e, data) {\r\n if (e.isDefaultPrevented()) {\r\n return false;\r\n }\r\n var that = this,\r\n scope = data.scope;\r\n if (data.errorThrown === 'abort') {\r\n scope.clear(data.files);\r\n return;\r\n }\r\n scope.$apply(function () {\r\n data.handleResponse.call(that, e, data);\r\n });\r\n },\r\n stop: scopeEvalAsync,\r\n processstart: scopeEvalAsync,\r\n processstop: scopeEvalAsync,\r\n getNumberOfFiles: function () {\r\n var scope = this.scope;\r\n return scope.queue.length - scope.processing();\r\n },\r\n dataType: 'json',\r\n autoUpload: false\r\n };\r\n\r\n /**\r\n * Create field data object\r\n * @type {{}}\r\n */\r\n var fieldData = {};\r\n\r\n /**\r\n * Add field Data to field data object with fieldname\r\n * @param fieldName\r\n * @param fileData\r\n */\r\n var addFieldData = function addFieldData(fieldName, fileData) {\r\n fieldData[fieldName].push(fileData);\r\n };\r\n\r\n /**\r\n * Remove field data\r\n * @param fieldName\r\n * @param fileId\r\n */\r\n var removeFieldData = function removeFieldData(fieldName, fileId) {\r\n angular.forEach(fieldData[fieldName], function (value, key) {\r\n if (value && value._id) {\r\n if (value._id === fileId) {\r\n fieldData[fieldName].splice(key, 1);\r\n }\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Register the field\r\n * @param fieldName\r\n * @param fieldData\r\n * @todo prefill with existing data\r\n */\r\n var registerField = function registerField(fieldName) {\r\n if (!fieldData[fieldName]) {\r\n fieldData[fieldName] = [];\r\n }\r\n };\r\n\r\n this.$get = [\r\n function () {\r\n return {\r\n fieldData: fieldData,\r\n defaults: $config,\r\n addFieldData: addFieldData,\r\n removeFieldData: removeFieldData,\r\n registerField: registerField\r\n };\r\n }\r\n ];\r\n })\r\n\r\n // Format byte numbers to readable presentations:\r\n .provider('formatFileSizeFilter', function () {\r\n var $config = {\r\n // Byte units following the IEC format\r\n // http://en.wikipedia.org/wiki/Kilobyte\r\n units: [\r\n { size: 1000000000, suffix: ' GB' },\r\n { size: 1000000, suffix: ' MB' },\r\n { size: 1000, suffix: ' KB' }\r\n ]\r\n };\r\n this.defaults = $config;\r\n this.$get = function () {\r\n return function (bytes) {\r\n if (!angular.isNumber(bytes)) {\r\n return '';\r\n }\r\n var unit = true,\r\n i = 0,\r\n prefix,\r\n suffix;\r\n while (unit) {\r\n unit = $config.units[i];\r\n prefix = unit.prefix || '';\r\n suffix = unit.suffix || '';\r\n if (i === $config.units.length - 1 || bytes >= unit.size) {\r\n return prefix + (bytes / unit.size).toFixed(2) + suffix;\r\n }\r\n i += 1;\r\n }\r\n };\r\n };\r\n })\r\n\r\n // The FileUploadController initializes the fileupload widget and\r\n // provides scope methods to control the File Upload functionality:\r\n .controller('FileUploadController', [\r\n '$scope', '$element', '$attrs', '$window', 'fileUpload',\r\n function ($scope, $element, $attrs, $window, fileUpload) {\r\n var uploadMethods = {\r\n progress: function () {\r\n return $element.fileupload('progress');\r\n },\r\n active: function () {\r\n return $element.fileupload('active');\r\n },\r\n option: function (option, data) {\r\n if (arguments.length === 1) {\r\n return $element.fileupload('option', option);\r\n }\r\n $element.fileupload('option', option, data);\r\n },\r\n add: function (data) {\r\n return $element.fileupload('add', data);\r\n },\r\n send: function (data) {\r\n return $element.fileupload('send', data);\r\n },\r\n process: function (data) {\r\n return $element.fileupload('process', data);\r\n },\r\n processing: function (data) {\r\n return $element.fileupload('processing', data);\r\n }\r\n };\r\n $scope.disabled = !$window.jQuery.support.fileInput;\r\n $scope.queue = $scope.queue || [];\r\n $scope.clear = function (files) {\r\n var queue = this.queue,\r\n i = queue.length,\r\n file = files,\r\n length = 1;\r\n if (angular.isArray(files)) {\r\n file = files[0];\r\n length = files.length;\r\n }\r\n while (i) {\r\n i -= 1;\r\n if (queue[i] === file) {\r\n return queue.splice(i, length);\r\n }\r\n }\r\n };\r\n $scope.replace = function (oldFiles, newFiles) {\r\n var queue = this.queue,\r\n file = oldFiles[0],\r\n i,\r\n j;\r\n for (i = 0; i < queue.length; i += 1) {\r\n if (queue[i] === file) {\r\n for (j = 0; j < newFiles.length; j += 1) {\r\n queue[i + j] = newFiles[j];\r\n }\r\n return;\r\n }\r\n }\r\n };\r\n $scope.applyOnQueue = function (method) {\r\n var list = this.queue.slice(0),\r\n i,\r\n file;\r\n for (i = 0; i < list.length; i += 1) {\r\n file = list[i];\r\n if (file[method]) {\r\n file[method]();\r\n }\r\n }\r\n };\r\n $scope.submit = function () {\r\n this.applyOnQueue('$submit');\r\n };\r\n $scope.cancel = function () {\r\n this.applyOnQueue('$cancel');\r\n };\r\n // Add upload methods to the scope:\r\n angular.extend($scope, uploadMethods);\r\n // The fileupload widget will initialize with\r\n // the options provided via \"data-\"-parameters,\r\n // as well as those given via options object:\r\n $element.fileupload(angular.extend(\r\n { scope: $scope },\r\n fileUpload.defaults\r\n )).on('fileuploadadd', function (e, data) {\r\n data.scope = $scope;\r\n }).on('fileuploadfail', function (e, data) {\r\n if (data.errorThrown === 'abort') {\r\n return;\r\n }\r\n if (data.dataType &&\r\n data.dataType.indexOf('json') === data.dataType.length - 4) {\r\n try {\r\n data.result = angular.fromJson(data.jqXHR.responseText);\r\n } catch (ignore) {\r\n }\r\n }\r\n }).on([\r\n 'fileuploadadd',\r\n 'fileuploadsubmit',\r\n 'fileuploadsend',\r\n 'fileuploaddone',\r\n 'fileuploadfail',\r\n 'fileuploadalways',\r\n 'fileuploadprogress',\r\n 'fileuploadprogressall',\r\n 'fileuploadstart',\r\n 'fileuploadstop',\r\n 'fileuploadchange',\r\n 'fileuploadpaste',\r\n 'fileuploaddrop',\r\n 'fileuploaddragover',\r\n 'fileuploadchunksend',\r\n 'fileuploadchunkdone',\r\n 'fileuploadchunkfail',\r\n 'fileuploadchunkalways',\r\n 'fileuploadprocessstart',\r\n 'fileuploadprocess',\r\n 'fileuploadprocessdone',\r\n 'fileuploadprocessfail',\r\n 'fileuploadprocessalways',\r\n 'fileuploadprocessstop'\r\n ].join(' '), function (e, data) {\r\n if ($scope.$emit(e.type, data).defaultPrevented) {\r\n e.preventDefault();\r\n }\r\n }).on('remove', function () {\r\n // Remove upload methods from the scope,\r\n // when the widget is removed:\r\n var method;\r\n for (method in uploadMethods) {\r\n if (uploadMethods.hasOwnProperty(method)) {\r\n delete $scope[method];\r\n }\r\n }\r\n });\r\n // Observe option changes:\r\n $scope.$watch(\r\n $attrs.fileUpload,\r\n function (newOptions) {\r\n if (newOptions) {\r\n $element.fileupload('option', newOptions);\r\n }\r\n }\r\n );\r\n }\r\n ])\r\n\r\n // Provide File Upload progress feedback:\r\n .controller('FileUploadProgressController', [\r\n '$scope', '$attrs', '$parse',\r\n function ($scope, $attrs, $parse) {\r\n var fn = $parse($attrs.fileUploadProgress),\r\n update = function () {\r\n var progress = fn($scope);\r\n\r\n if (!progress || !progress.total) {\r\n return;\r\n }\r\n $scope.num = Math.floor(\r\n progress.loaded / progress.total * 100\r\n );\r\n };\r\n update();\r\n $scope.$watch(\r\n $attrs.fileUploadProgress + '.loaded',\r\n function (newValue, oldValue) {\r\n if (newValue !== oldValue) {\r\n update();\r\n }\r\n }\r\n );\r\n }\r\n ])\r\n\r\n // Display File Upload previews:\r\n .controller('FileUploadPreviewController', [\r\n '$scope', '$element', '$attrs',\r\n function ($scope, $element, $attrs) {\r\n $scope.$watch(\r\n $attrs.fileUploadPreview + '.preview',\r\n function (preview) {\r\n $element.empty();\r\n if (preview) {\r\n $element.append(preview);\r\n }\r\n }\r\n );\r\n }\r\n ])\r\n\r\n .directive('fileUpload', function () {\r\n return {\r\n controller: 'FileUploadController',\r\n scope: true\r\n };\r\n })\r\n\r\n .directive('fileUploadProgress', function () {\r\n return {\r\n controller: 'FileUploadProgressController',\r\n scope: true\r\n };\r\n })\r\n\r\n .directive('fileUploadPreview', function () {\r\n return {\r\n controller: 'FileUploadPreviewController'\r\n };\r\n })\r\n\r\n // Enhance the HTML5 download attribute to\r\n // allow drag&drop of files to the desktop:\r\n .directive('download', function () {\r\n return function (scope, elm) {\r\n elm.on('dragstart', function (e) {\r\n try {\r\n e.originalEvent.dataTransfer.setData(\r\n 'DownloadURL',\r\n [\r\n 'application/octet-stream',\r\n elm.prop('download'),\r\n elm.prop('href')\r\n ].join(':')\r\n );\r\n } catch (ignore) {\r\n }\r\n });\r\n };\r\n });\r\n\r\n}));","/*!\r\n * ui-select\r\n * http://github.com/angular-ui/ui-select\r\n * Version: 0.19.7 - 2017-04-15T14:28:36.649Z\r\n * License: MIT\r\n */\r\n\r\n\r\n(function () { \r\n\"use strict\";\r\nvar KEY = {\r\n TAB: 9,\r\n ENTER: 13,\r\n ESC: 27,\r\n SPACE: 32,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n SHIFT: 16,\r\n CTRL: 17,\r\n ALT: 18,\r\n PAGE_UP: 33,\r\n PAGE_DOWN: 34,\r\n HOME: 36,\r\n END: 35,\r\n BACKSPACE: 8,\r\n DELETE: 46,\r\n COMMAND: 91,\r\n\r\n MAP: { 91 : \"COMMAND\", 8 : \"BACKSPACE\" , 9 : \"TAB\" , 13 : \"ENTER\" , 16 : \"SHIFT\" , 17 : \"CTRL\" , 18 : \"ALT\" , 19 : \"PAUSEBREAK\" , 20 : \"CAPSLOCK\" , 27 : \"ESC\" , 32 : \"SPACE\" , 33 : \"PAGE_UP\", 34 : \"PAGE_DOWN\" , 35 : \"END\" , 36 : \"HOME\" , 37 : \"LEFT\" , 38 : \"UP\" , 39 : \"RIGHT\" , 40 : \"DOWN\" , 43 : \"+\" , 44 : \"PRINTSCREEN\" , 45 : \"INSERT\" , 46 : \"DELETE\", 48 : \"0\" , 49 : \"1\" , 50 : \"2\" , 51 : \"3\" , 52 : \"4\" , 53 : \"5\" , 54 : \"6\" , 55 : \"7\" , 56 : \"8\" , 57 : \"9\" , 59 : \";\", 61 : \"=\" , 65 : \"A\" , 66 : \"B\" , 67 : \"C\" , 68 : \"D\" , 69 : \"E\" , 70 : \"F\" , 71 : \"G\" , 72 : \"H\" , 73 : \"I\" , 74 : \"J\" , 75 : \"K\" , 76 : \"L\", 77 : \"M\" , 78 : \"N\" , 79 : \"O\" , 80 : \"P\" , 81 : \"Q\" , 82 : \"R\" , 83 : \"S\" , 84 : \"T\" , 85 : \"U\" , 86 : \"V\" , 87 : \"W\" , 88 : \"X\" , 89 : \"Y\" , 90 : \"Z\", 96 : \"0\" , 97 : \"1\" , 98 : \"2\" , 99 : \"3\" , 100 : \"4\" , 101 : \"5\" , 102 : \"6\" , 103 : \"7\" , 104 : \"8\" , 105 : \"9\", 106 : \"*\" , 107 : \"+\" , 109 : \"-\" , 110 : \".\" , 111 : \"/\", 112 : \"F1\" , 113 : \"F2\" , 114 : \"F3\" , 115 : \"F4\" , 116 : \"F5\" , 117 : \"F6\" , 118 : \"F7\" , 119 : \"F8\" , 120 : \"F9\" , 121 : \"F10\" , 122 : \"F11\" , 123 : \"F12\", 144 : \"NUMLOCK\" , 145 : \"SCROLLLOCK\" , 186 : \";\" , 187 : \"=\" , 188 : \",\" , 189 : \"-\" , 190 : \".\" , 191 : \"/\" , 192 : \"`\" , 219 : \"[\" , 220 : \"\\\\\" , 221 : \"]\" , 222 : \"'\"\r\n },\r\n\r\n isControl: function (e) {\r\n var k = e.which;\r\n switch (k) {\r\n case KEY.COMMAND:\r\n case KEY.SHIFT:\r\n case KEY.CTRL:\r\n case KEY.ALT:\r\n return true;\r\n }\r\n\r\n if (e.metaKey || e.ctrlKey || e.altKey) return true;\r\n\r\n return false;\r\n },\r\n isFunctionKey: function (k) {\r\n k = k.which ? k.which : k;\r\n return k >= 112 && k <= 123;\r\n },\r\n isVerticalMovement: function (k){\r\n return ~[KEY.UP, KEY.DOWN].indexOf(k);\r\n },\r\n isHorizontalMovement: function (k){\r\n return ~[KEY.LEFT,KEY.RIGHT,KEY.BACKSPACE,KEY.DELETE].indexOf(k);\r\n },\r\n toSeparator: function (k) {\r\n var sep = {ENTER:\"\\n\",TAB:\"\\t\",SPACE:\" \"}[k];\r\n if (sep) return sep;\r\n // return undefined for special keys other than enter, tab or space.\r\n // no way to use them to cut strings.\r\n return KEY[k] ? undefined : k;\r\n }\r\n };\r\n\r\nfunction isNil(value) {\r\n return angular.isUndefined(value) || value === null;\r\n}\r\n\r\n/**\r\n * Add querySelectorAll() to jqLite.\r\n *\r\n * jqLite find() is limited to lookups by tag name.\r\n * TODO This will change with future versions of AngularJS, to be removed when this happens\r\n *\r\n * See jqLite.find - why not use querySelectorAll? https://github.com/angular/angular.js/issues/3586\r\n * See feat(jqLite): use querySelectorAll instead of getElementsByTagName in jqLite.find https://github.com/angular/angular.js/pull/3598\r\n */\r\nif (angular.element.prototype.querySelectorAll === undefined) {\r\n angular.element.prototype.querySelectorAll = function(selector) {\r\n return angular.element(this[0].querySelectorAll(selector));\r\n };\r\n}\r\n\r\n/**\r\n * Add closest() to jqLite.\r\n */\r\nif (angular.element.prototype.closest === undefined) {\r\n angular.element.prototype.closest = function( selector) {\r\n var elem = this[0];\r\n var matchesSelector = elem.matches || elem.webkitMatchesSelector || elem.mozMatchesSelector || elem.msMatchesSelector;\r\n\r\n while (elem) {\r\n if (matchesSelector.bind(elem)(selector)) {\r\n return elem;\r\n } else {\r\n elem = elem.parentElement;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n\r\nvar latestId = 0;\r\n\r\nvar uis = angular.module('ui.select', [])\r\n\r\n.constant('uiSelectConfig', {\r\n theme: 'bootstrap',\r\n searchEnabled: true,\r\n sortable: false,\r\n placeholder: '', // Empty by default, like HTML tag \");\r\n $compile(focusser)(scope);\r\n $select.focusser = focusser;\r\n\r\n //Input that will handle focus\r\n $select.focusInput = focusser;\r\n\r\n element.parent().append(focusser);\r\n focusser.bind(\"focus\", function(){\r\n scope.$evalAsync(function(){\r\n $select.focus = true;\r\n });\r\n });\r\n focusser.bind(\"blur\", function(){\r\n scope.$evalAsync(function(){\r\n $select.focus = false;\r\n });\r\n });\r\n focusser.bind(\"keydown\", function(e){\r\n\r\n if (e.which === KEY.BACKSPACE && $select.backspaceReset !== false) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n $select.select(undefined);\r\n scope.$apply();\r\n return;\r\n }\r\n\r\n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {\r\n return;\r\n }\r\n\r\n if (e.which == KEY.DOWN || e.which == KEY.UP || e.which == KEY.ENTER || e.which == KEY.SPACE){\r\n e.preventDefault();\r\n e.stopPropagation();\r\n $select.activate();\r\n }\r\n\r\n scope.$digest();\r\n });\r\n\r\n focusser.bind(\"keyup input\", function(e){\r\n\r\n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC || e.which == KEY.ENTER || e.which === KEY.BACKSPACE) {\r\n return;\r\n }\r\n\r\n $select.activate(focusser.val()); //User pressed some regular key, so we pass it to the search input\r\n focusser.val('');\r\n scope.$digest();\r\n\r\n });\r\n\r\n\r\n }\r\n };\r\n}]);\r\n\r\n// Make multiple matches sortable\r\nuis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', function($timeout, uiSelectConfig, uiSelectMinErr) {\r\n return {\r\n require: ['^^uiSelect', '^ngModel'],\r\n link: function(scope, element, attrs, ctrls) {\r\n if (scope[attrs.uiSelectSort] === null) {\r\n throw uiSelectMinErr('sort', 'Expected a list to sort');\r\n }\r\n\r\n var $select = ctrls[0];\r\n var $ngModel = ctrls[1];\r\n\r\n var options = angular.extend({\r\n axis: 'horizontal'\r\n },\r\n scope.$eval(attrs.uiSelectSortOptions));\r\n\r\n var axis = options.axis;\r\n var draggingClassName = 'dragging';\r\n var droppingClassName = 'dropping';\r\n var droppingBeforeClassName = 'dropping-before';\r\n var droppingAfterClassName = 'dropping-after';\r\n\r\n scope.$watch(function(){\r\n return $select.sortable;\r\n }, function(newValue){\r\n if (newValue) {\r\n element.attr('draggable', true);\r\n } else {\r\n element.removeAttr('draggable');\r\n }\r\n });\r\n\r\n element.on('dragstart', function(event) {\r\n element.addClass(draggingClassName);\r\n\r\n (event.dataTransfer || event.originalEvent.dataTransfer).setData('text', scope.$index.toString());\r\n });\r\n\r\n element.on('dragend', function() {\r\n removeClass(draggingClassName);\r\n });\r\n\r\n var move = function(from, to) {\r\n /*jshint validthis: true */\r\n this.splice(to, 0, this.splice(from, 1)[0]);\r\n };\r\n\r\n var removeClass = function(className) {\r\n angular.forEach($select.$element.querySelectorAll('.' + className), function(el){\r\n angular.element(el).removeClass(className);\r\n });\r\n };\r\n\r\n var dragOverHandler = function(event) {\r\n event.preventDefault();\r\n\r\n var offset = axis === 'vertical' ? event.offsetY || event.layerY || (event.originalEvent ? event.originalEvent.offsetY : 0) : event.offsetX || event.layerX || (event.originalEvent ? event.originalEvent.offsetX : 0);\r\n\r\n if (offset < (this[axis === 'vertical' ? 'offsetHeight' : 'offsetWidth'] / 2)) {\r\n removeClass(droppingAfterClassName);\r\n element.addClass(droppingBeforeClassName);\r\n\r\n } else {\r\n removeClass(droppingBeforeClassName);\r\n element.addClass(droppingAfterClassName);\r\n }\r\n };\r\n\r\n var dropTimeout;\r\n\r\n var dropHandler = function(event) {\r\n event.preventDefault();\r\n\r\n var droppedItemIndex = parseInt((event.dataTransfer || event.originalEvent.dataTransfer).getData('text'), 10);\r\n\r\n // prevent event firing multiple times in firefox\r\n $timeout.cancel(dropTimeout);\r\n dropTimeout = $timeout(function() {\r\n _dropHandler(droppedItemIndex);\r\n }, 20);\r\n };\r\n\r\n var _dropHandler = function(droppedItemIndex) {\r\n var theList = scope.$eval(attrs.uiSelectSort);\r\n var itemToMove = theList[droppedItemIndex];\r\n var newIndex = null;\r\n\r\n if (element.hasClass(droppingBeforeClassName)) {\r\n if (droppedItemIndex < scope.$index) {\r\n newIndex = scope.$index - 1;\r\n } else {\r\n newIndex = scope.$index;\r\n }\r\n } else {\r\n if (droppedItemIndex < scope.$index) {\r\n newIndex = scope.$index;\r\n } else {\r\n newIndex = scope.$index + 1;\r\n }\r\n }\r\n\r\n move.apply(theList, [droppedItemIndex, newIndex]);\r\n\r\n $ngModel.$setViewValue(Date.now());\r\n\r\n scope.$apply(function() {\r\n scope.$emit('uiSelectSort:change', {\r\n array: theList,\r\n item: itemToMove,\r\n from: droppedItemIndex,\r\n to: newIndex\r\n });\r\n });\r\n\r\n removeClass(droppingClassName);\r\n removeClass(droppingBeforeClassName);\r\n removeClass(droppingAfterClassName);\r\n\r\n element.off('drop', dropHandler);\r\n };\r\n\r\n element.on('dragenter', function() {\r\n if (element.hasClass(draggingClassName)) {\r\n return;\r\n }\r\n\r\n element.addClass(droppingClassName);\r\n\r\n element.on('dragover', dragOverHandler);\r\n element.on('drop', dropHandler);\r\n });\r\n\r\n element.on('dragleave', function(event) {\r\n if (event.target != element) {\r\n return;\r\n }\r\n\r\n removeClass(droppingClassName);\r\n removeClass(droppingBeforeClassName);\r\n removeClass(droppingAfterClassName);\r\n\r\n element.off('dragover', dragOverHandler);\r\n element.off('drop', dropHandler);\r\n });\r\n }\r\n };\r\n}]);\r\n\r\nuis.directive('uisOpenClose', ['$parse', '$timeout', function ($parse, $timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'uiSelect',\r\n link: function (scope, element, attrs, $select) {\r\n $select.onOpenCloseCallback = $parse(attrs.uisOpenClose);\r\n\r\n scope.$watch('$select.open', function (isOpen, previousState) {\r\n if (isOpen !== previousState) {\r\n $timeout(function () {\r\n $select.onOpenCloseCallback(scope, {\r\n isOpen: isOpen\r\n });\r\n });\r\n }\r\n });\r\n }\r\n };\r\n}]);\r\n\r\n/**\r\n * Parses \"repeat\" attribute.\r\n *\r\n * Taken from AngularJS ngRepeat source code\r\n * See https://github.com/angular/angular.js/blob/v1.2.15/src/ng/directive/ngRepeat.js#L211\r\n *\r\n * Original discussion about parsing \"repeat\" attribute instead of fully relying on ng-repeat:\r\n * https://github.com/angular-ui/ui-select/commit/5dd63ad#commitcomment-5504697\r\n */\r\n\r\nuis.service('uisRepeatParser', ['uiSelectMinErr','$parse', function(uiSelectMinErr, $parse) {\r\n var self = this;\r\n\r\n /**\r\n * Example:\r\n * expression = \"address in addresses | filter: {street: $select.search} track by $index\"\r\n * itemName = \"address\",\r\n * source = \"addresses | filter: {street: $select.search}\",\r\n * trackByExp = \"$index\",\r\n */\r\n self.parse = function(expression) {\r\n\r\n\r\n var match;\r\n //var isObjectCollection = /\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)/.test(expression);\r\n // If an array is used as collection\r\n\r\n // if (isObjectCollection){\r\n // 000000000000000000000000000000111111111000000000000000222222222222220033333333333333333333330000444444444444444444000000000000000055555555555000000000000000000000066666666600000000\r\n match = expression.match(/^\\s*(?:([\\s\\S]+?)\\s+as\\s+)?(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+(\\s*[\\s\\S]+?)?(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/);\r\n\r\n // 1 Alias\r\n // 2 Item\r\n // 3 Key on (key,value)\r\n // 4 Value on (key,value)\r\n // 5 Source expression (including filters)\r\n // 6 Track by\r\n\r\n if (!match) {\r\n throw uiSelectMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\r\n expression);\r\n }\r\n \r\n var source = match[5], \r\n filters = '';\r\n\r\n // When using (key,value) ui-select requires filters to be extracted, since the object\r\n // is converted to an array for $select.items \r\n // (in which case the filters need to be reapplied)\r\n if (match[3]) {\r\n // Remove any enclosing parenthesis\r\n source = match[5].replace(/(^\\()|(\\)$)/g, '');\r\n // match all after | but not after ||\r\n var filterMatch = match[5].match(/^\\s*(?:[\\s\\S]+?)(?:[^\\|]|\\|\\|)+([\\s\\S]*)\\s*$/);\r\n if(filterMatch && filterMatch[1].trim()) {\r\n filters = filterMatch[1];\r\n source = source.replace(filters, '');\r\n } \r\n }\r\n\r\n return {\r\n itemName: match[4] || match[2], // (lhs) Left-hand side,\r\n keyName: match[3], //for (key, value) syntax\r\n source: $parse(source),\r\n filters: filters,\r\n trackByExp: match[6],\r\n modelMapper: $parse(match[1] || match[4] || match[2]),\r\n repeatExpression: function (grouped) {\r\n var expression = this.itemName + ' in ' + (grouped ? '$group.items' : '$select.items');\r\n if (this.trackByExp) {\r\n expression += ' track by ' + this.trackByExp;\r\n }\r\n return expression;\r\n } \r\n };\r\n\r\n };\r\n\r\n self.getGroupNgRepeatExpression = function() {\r\n return '$group in $select.groups track by $group.name';\r\n };\r\n\r\n}]);\r\n\r\n}());\r\nangular.module(\"ui.select\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"bootstrap/choices.tpl.html\",\"\");\r\n$templateCache.put(\"bootstrap/match-multiple.tpl.html\",\" × \");\r\n$templateCache.put(\"bootstrap/match.tpl.html\",\"
    {{$select.placeholder}}
    \");\r\n$templateCache.put(\"bootstrap/no-choice.tpl.html\",\"\");\r\n$templateCache.put(\"bootstrap/select-multiple.tpl.html\",\"
    \");\r\n$templateCache.put(\"bootstrap/select.tpl.html\",\"
    \");\r\n$templateCache.put(\"select2/choices.tpl.html\",\"\");\r\n$templateCache.put(\"select2/match-multiple.tpl.html\",\"
  • \");\r\n$templateCache.put(\"select2/match.tpl.html\",\"{{$select.placeholder}} \");\r\n$templateCache.put(\"select2/no-choice.tpl.html\",\"
    \");\r\n$templateCache.put(\"select2/select-multiple.tpl.html\",\"
    \");\r\n$templateCache.put(\"select2/select.tpl.html\",\"
    \");\r\n$templateCache.put(\"selectize/choices.tpl.html\",\"
    \");\r\n$templateCache.put(\"selectize/match-multiple.tpl.html\",\"
    ×
    \");\r\n$templateCache.put(\"selectize/match.tpl.html\",\"
    {{$select.placeholder}}
    \");\r\n$templateCache.put(\"selectize/no-choice.tpl.html\",\"
    \");\r\n$templateCache.put(\"selectize/select-multiple.tpl.html\",\"
    \");\r\n$templateCache.put(\"selectize/select.tpl.html\",\"
    \");}]);","/* global window */\r\n/* global angular */\r\n/* global module */\r\n\r\n(function (module, window, angular) {\r\n \"use strict\";\r\n\r\n function test(string, regex) {\r\n if (typeof regex === 'string' || regex instanceof String) {\r\n regex=new RegExp(regex);\r\n }\r\n\r\n if (regex instanceof RegExp) {\r\n return regex.test(string);\r\n }\r\n else if (regex && Array.isArray(regex.and)) {\r\n return regex.and.every(function (item) {\r\n return test(string, item);\r\n });\r\n }\r\n else if (regex && Array.isArray(regex.or)) {\r\n return regex.or.some(function (item) {\r\n return test(string, item);\r\n });\r\n }\r\n else if (regex && regex.not) {\r\n return !test(string, regex.not);\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n function exec(string, regex) {\r\n if (typeof regex === 'string' || regex instanceof String) {\r\n regex=new RegExp(regex);\r\n }\r\n\r\n if (regex instanceof RegExp) {\r\n return regex.exec(string);\r\n }\r\n else if (regex && Array.isArray(regex)) {\r\n return regex.reduce(function (res, item) {\r\n return (!!res) ? res : exec(string, item);\r\n }, null);\r\n }\r\n else if (regex && Array.isArray(regex.and)) {\r\n if(test(string,regex))\r\n {\r\n return exec(string,regex.and);\r\n }\r\n else\r\n {\r\n return null;\r\n }\r\n }\r\n else if (regex && Array.isArray(regex.or)) {\r\n return exec(string,regex.or);\r\n }\r\n else if (regex && regex.not) {\r\n return !exec(string, regex.not)?[]:null;\r\n } \r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n if (!!angular) {\r\n angular.module(\"reTree\", []).factory(\"reTree\", [function () {\r\n return {\r\n test: test,\r\n exec: exec\r\n };\r\n }]);\r\n }\r\n\r\n if (!!window) {\r\n window.reTree = {\r\n test: test,\r\n exec: exec\r\n };\r\n }\r\n\r\n if (!!module && !!(module.exports)) {\r\n module.exports = {\r\n test: test,\r\n exec: exec\r\n };\r\n }\r\n})(typeof module === 'undefined' ? null : module, typeof window === 'undefined' ? null : window, typeof angular === 'undefined' ? null : angular);\r\n","/* global window */\r\n/* global angular */\r\n/* global module */\r\n\r\n(function (module, require, window, angular) {\r\n \"use strict\";\r\n\r\n var BROWSERS = {\r\n CHROME: \"chrome\",\r\n FIREFOX: \"firefox\",\r\n SAFARI: \"safari\",\r\n OPERA: \"opera\",\r\n IE: \"ie\",\r\n MS_EDGE: \"ms-edge\",\r\n MS_EDGE_BETA: \"ms-edge-beta\",\r\n FB_MESSENGER: \"fb-messenger\",\r\n CORDOVA: \"cordova\",\r\n UNKNOWN: \"unknown\"\r\n };\r\n\r\n var DEVICES = {\r\n ANDROID: \"android\",\r\n I_PAD: \"ipad\",\r\n IPHONE: \"iphone\",\r\n I_POD: \"ipod\",\r\n BLACKBERRY: \"blackberry\",\r\n FIREFOX_OS: \"firefox-os\",\r\n CHROME_BOOK: \"chrome-book\",\r\n WINDOWS_PHONE: \"windows-phone\",\r\n PS4: \"ps4\",\r\n VITA: \"vita\",\r\n CHROMECAST: \"chromecast\",\r\n APPLE_TV: \"apple-tv\",\r\n GOOGLE_TV: \"google-tv\",\r\n MACINTOSH: \"mac\",\r\n UNKNOWN: \"unknown\"\r\n };\r\n\r\n var OS = {\r\n WINDOWS: \"windows\",\r\n MAC: \"mac\",\r\n IOS: \"ios\",\r\n ANDROID: \"android\",\r\n LINUX: \"linux\",\r\n UNIX: \"unix\",\r\n FIREFOX_OS: \"firefox-os\",\r\n CHROME_OS: \"chrome-os\",\r\n WINDOWS_PHONE: \"windows-phone\",\r\n UNKNOWN: \"unknown\"\r\n };\r\n\r\n /**\r\n * @deprecated Will be deleted in future versions. OS versions will not be list-hardcoded.\r\n */\r\n var OS_VERSIONS = {\r\n WINDOWS_3_11: \"windows-3-11\",\r\n WINDOWS_95: \"windows-95\",\r\n WINDOWS_ME: \"windows-me\",\r\n WINDOWS_98: \"windows-98\",\r\n WINDOWS_CE: \"windows-ce\",\r\n WINDOWS_2000: \"windows-2000\",\r\n WINDOWS_XP: \"windows-xp\",\r\n WINDOWS_SERVER_2003: \"windows-server-2003\",\r\n WINDOWS_VISTA: \"windows-vista\",\r\n WINDOWS_7: \"windows-7\",\r\n WINDOWS_8_1: \"windows-8-1\",\r\n WINDOWS_8: \"windows-8\",\r\n WINDOWS_10: \"windows-10\",\r\n WINDOWS_PHONE_7_5: \"windows-phone-7-5\",\r\n WINDOWS_PHONE_8_1: \"windows-phone-8-1\",\r\n WINDOWS_PHONE_10: \"windows-phone-10\",\r\n WINDOWS_NT_4_0: \"windows-nt-4-0\",\r\n MACOSX_15: \"mac-os-x-15\",\r\n MACOSX_14: \"mac-os-x-14\",\r\n MACOSX_13: \"mac-os-x-13\",\r\n MACOSX_12: \"mac-os-x-12\",\r\n MACOSX_11: \"mac-os-x-11\",\r\n MACOSX_10: \"mac-os-x-10\",\r\n MACOSX_9: \"mac-os-x-9\",\r\n MACOSX_8: \"mac-os-x-8\",\r\n MACOSX_7: \"mac-os-x-7\",\r\n MACOSX_6: \"mac-os-x-6\",\r\n MACOSX_5: \"mac-os-x-5\",\r\n MACOSX_4: \"mac-os-x-4\",\r\n MACOSX_3: \"mac-os-x-3\",\r\n MACOSX_2: \"mac-os-x-2\",\r\n MACOSX: \"mac-os-x\",\r\n UNKNOWN: \"unknown\"\r\n };\r\n\r\n var OS_RE = {\r\n WINDOWS: {\r\n and: [{\r\n or: [/\\bWindows|(Win\\d\\d)\\b/, /\\bWin 9x\\b/]\r\n }, {\r\n not: /\\bWindows Phone\\b/\r\n }]\r\n },\r\n MAC: {\r\n and: [/\\bMac OS\\b/, {\r\n not: /Windows Phone/\r\n }]\r\n },\r\n IOS: {\r\n and: [{\r\n or: [/\\biPad\\b/, /\\biPhone\\b/, /\\biPod\\b/]\r\n }, {\r\n not: /Windows Phone/\r\n }]\r\n },\r\n ANDROID: {\r\n and: [/\\bAndroid\\b/, {\r\n not: /Windows Phone/\r\n }]\r\n },\r\n LINUX: /\\bLinux\\b/,\r\n UNIX: /\\bUNIX\\b/,\r\n FIREFOX_OS: {\r\n and: [/\\bFirefox\\b/, /Mobile\\b/]\r\n },\r\n CHROME_OS: /\\bCrOS\\b/,\r\n WINDOWS_PHONE: {\r\n or: [/\\bIEMobile\\b/, /\\bWindows Phone\\b/]\r\n },\r\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\r\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/\r\n };\r\n\r\n var BROWSERS_RE = {\r\n CHROME: {\r\n and: [{\r\n or: [/\\bChrome\\b/, /\\bCriOS\\b/, /\\bHeadlessChrome\\b/]\r\n }, {\r\n not: {\r\n or: [/\\bOPR\\b/, /\\bEdge\\b/, /\\bEdg\\b/, /\\bCordova\\b/]\r\n }\r\n }]\r\n },\r\n FIREFOX: {\r\n and: [{\r\n or: [/\\bFirefox\\b/, /\\bFxiOS\\b/]\r\n }, {\r\n not: /\\bCordova\\b/\r\n }]\r\n },\r\n SAFARI: {\r\n and: [/^((?!CriOS).)*\\Safari\\b.*$/, {\r\n not: {\r\n or: [/\\bOPR\\b/, /\\bEdge\\b/, /\\bEdg\\b/, /Windows Phone/, /\\bCordova\\b/, /\\bChrome\\b/]\r\n }\r\n }]\r\n },\r\n OPERA: {\r\n or: [/Opera\\b/, /\\bOPR\\b/]\r\n },\r\n IE: {\r\n or: [/\\bMSIE\\b/, /\\bTrident\\b/, /^Mozilla\\/5\\.0 \\(Windows NT 10\\.0; Win64; x64\\)$/]\r\n },\r\n MS_EDGE: {\r\n or: [/\\bEdge\\b/]\r\n },\r\n MS_EDGE_BETA: {\r\n or: [/\\bEdg\\b/]\r\n },\r\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\r\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/,\r\n CORDOVA: /\\bCordova\\b/,\r\n FB_MESSENGER: /\\bFBAN\\/MessengerForiOS\\b/\r\n };\r\n\r\n var DEVICES_RE = {\r\n ANDROID: {\r\n and: [/\\bAndroid\\b/, {\r\n not: /Windows Phone/\r\n }]\r\n },\r\n I_PAD: /\\biPad\\b/,\r\n IPHONE: {\r\n and: [/\\biPhone\\b/, {\r\n not: /Windows Phone/\r\n }]\r\n },\r\n I_POD: /\\biPod\\b/,\r\n BLACKBERRY: /\\bblackberry\\b/,\r\n FIREFOX_OS: {\r\n and: [/\\bFirefox\\b/, /\\bMobile\\b/]\r\n },\r\n CHROME_BOOK: /\\bCrOS\\b/,\r\n WINDOWS_PHONE: {\r\n or: [/\\bIEMobile\\b/, /\\bWindows Phone\\b/]\r\n },\r\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\r\n CHROMECAST: /\\bCrKey\\b/,\r\n APPLE_TV: /^iTunes-AppleTV\\/4.1$/,\r\n GOOGLE_TV: /\\bGoogleTV\\b/,\r\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/,\r\n MACINTOSH: /\\bMacintosh\\b/,\r\n };\r\n\r\n /**\r\n * @deprecated Will be deleted in future versions. OS versions will not be list-hardcoded.\r\n */\r\n var OS_VERSIONS_RE_OLD = {\r\n WINDOWS_3_11: /Win16/,\r\n WINDOWS_95: /(Windows 95|Win95|Windows_95)/,\r\n WINDOWS_ME: /(Win 9x 4.90|Windows ME)/,\r\n WINDOWS_98: /(Windows 98|Win98)/,\r\n WINDOWS_CE: /Windows CE/,\r\n WINDOWS_2000: /(Windows NT 5.0|Windows 2000)/,\r\n WINDOWS_XP: /(Windows NT 5.1|Windows XP)/,\r\n WINDOWS_SERVER_2003: /Windows NT 5.2/,\r\n WINDOWS_VISTA: /Windows NT 6.0/,\r\n WINDOWS_7: /(Windows 7|Windows NT 6.1)/,\r\n WINDOWS_8_1: /(Windows 8.1|Windows NT 6.3)/,\r\n WINDOWS_8: /(Windows 8|Windows NT 6.2)/,\r\n WINDOWS_10: /(Windows NT 10.0)/,\r\n WINDOWS_PHONE_7_5: /(Windows Phone OS 7.5)/,\r\n WINDOWS_PHONE_8_1: /(Windows Phone 8.1)/,\r\n WINDOWS_PHONE_10: /(Windows Phone 10)/,\r\n WINDOWS_NT_4_0: {\r\n and: [/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/, {\r\n not: /Windows NT 10.0/\r\n }]\r\n },\r\n MACOSX: /(MAC OS X\\s*[^ 0-9])/,\r\n MACOSX_3: /(Darwin 10.3|Mac OS X 10.3)/,\r\n MACOSX_4: /(Darwin 10.4|Mac OS X 10.4)/,\r\n MACOSX_5: /(Mac OS X 10.5)/,\r\n MACOSX_6: /(Mac OS X 10.6)/,\r\n MACOSX_7: /(Mac OS X 10.7)/,\r\n MACOSX_8: /(Mac OS X 10.8)/,\r\n MACOSX_9: /(Mac OS X 10.9)/,\r\n MACOSX_10: /(Mac OS X 10.10)/,\r\n MACOSX_11: /(Mac OS X 10.11)/,\r\n MACOSX_12: /(Mac OS X 10.12)/,\r\n MACOSX_13: /(Mac OS X 10.13)/,\r\n MACOSX_14: /(Mac OS X 10.14)/,\r\n MACOSX_15: /(Mac OS X 10.15)/\r\n };\r\n\r\n var OS_VERSIONS_RE_MAP = {\r\n WINDOWS: [{\r\n re: /Win16/,\r\n map: \"windows-3-11\"\r\n },\r\n {\r\n re: /(Windows 95|Win95|Windows_95)/,\r\n map: \"windows-95\"\r\n },\r\n {\r\n re: /(Win 9x 4.90|Windows ME)/,\r\n map: \"windows-me\"\r\n },\r\n {\r\n re: /(Windows 98|Win98)/,\r\n map: \"windows-98\"\r\n },\r\n {\r\n re: /Windows CE/,\r\n map: \"windows-ce\"\r\n },\r\n {\r\n re: /(Windows NT 5.0|Windows 2000)/,\r\n map: \"windows-2000\"\r\n },\r\n {\r\n re: /(Windows NT 5.1|Windows XP)/,\r\n map: \"windows-xp\"\r\n },\r\n {\r\n re: /Windows NT 5.2/,\r\n map: \"windows-server-2003\"\r\n },\r\n {\r\n re: /Windows NT 6.0/,\r\n map: \"windows-vista\"\r\n },\r\n {\r\n re: /(Windows 7|Windows NT 6.1)/,\r\n map: \"windows-7\"\r\n },\r\n {\r\n re: /(Windows 8.1|Windows NT 6.3)/,\r\n map: \"windows-8-1\"\r\n },\r\n {\r\n re: /(Windows 8|Windows NT 6.2)/,\r\n map: \"windows-8\"\r\n },\r\n {\r\n re: /(Windows NT 10.0)/,\r\n map: \"windows-10\"\r\n },\r\n {\r\n re: {\r\n and: [/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/, {\r\n not: /Windows NT 10.0/\r\n }]\r\n },\r\n map: \"windows-nt-4-0\"\r\n },\r\n ],\r\n WINDOWS_PHONE: [{\r\n re: /(Windows Phone OS 7.5)/,\r\n map: \"windows-phone-7-5\"\r\n },\r\n {\r\n re: /(Windows Phone 8.1)/,\r\n map: \"windows-phone-8-1\"\r\n },\r\n {\r\n re: /(Windows Phone 10)/,\r\n map: \"windows-phone-10\"\r\n },\r\n ],\r\n MAC: [{\r\n re: /(MAC OS X\\s*[^ 0-9])/,\r\n map: 'mac-os-x'\r\n },\r\n {\r\n re: /(Darwin 10.3|Mac OS X 10.3)/,\r\n map: 'mac-os-x-3'\r\n },\r\n {\r\n re: /(Darwin 10.4|Mac OS X 10.4)/,\r\n map: 'mac-os-x-4'\r\n },\r\n {\r\n re: /(Mac OS X 10.5)/,\r\n map: 'mac-os-x-5'\r\n },\r\n {\r\n re: /(Mac OS X 10.6)/,\r\n map: 'mac-os-x-6'\r\n },\r\n {\r\n re: /(Mac OS X 10.7)/,\r\n map: 'mac-os-x-7'\r\n },\r\n {\r\n re: /(Mac OS X 10.8)/,\r\n map: 'mac-os-x-8'\r\n },\r\n {\r\n re: /(Mac OS X 10.9)/,\r\n map: 'mac-os-x-9'\r\n },\r\n {\r\n re: /(Mac OS X 10.10)/,\r\n map: 'mac-os-x-10'\r\n },\r\n {\r\n re: /(Mac OS X 10.11)/,\r\n map: 'mac-os-x-11'\r\n },\r\n {\r\n re: /(Mac OS X 10.12)/,\r\n map: 'mac-os-x-12'\r\n },\r\n {\r\n re: /(Mac OS X 10.13)/,\r\n map: 'mac-os-x-13'\r\n },\r\n {\r\n re: /(Mac OS X 10.14)/,\r\n map: 'mac-os-x-14'\r\n },\r\n {\r\n re: /(Mac OS X 10.15)/,\r\n map: 'mac-os-x-15'\r\n }\r\n ],\r\n IOS: [{\r\n re: /OS ([\\d_\\-.]+)/,\r\n map: function (match) {\r\n return match.replace(/_/g, '.');\r\n }\r\n }],\r\n ANDROID: [{\r\n re: /Android ([\\d.]+)/,\r\n map: function (match) {\r\n return match;\r\n }\r\n }]\r\n };\r\n\r\n var OS_VERSIONS_RE = Object.keys(OS_VERSIONS_RE_MAP).reduce(function (obj, key) {\r\n obj[OS[key]] = OS_VERSIONS_RE_MAP[key];\r\n return obj;\r\n }, {});\r\n\r\n var BROWSER_VERSIONS_RE_MAP = {\r\n CHROME: [/\\bChrome\\/([\\d\\.]+)\\b/, /\\bCriOS\\/([\\d\\.]+)\\b/, /\\bHeadlessChrome Safari\\/([\\d\\.]+)\\b/],\r\n FIREFOX: [/\\bFirefox\\/([\\d\\.]+)\\b/, /\\bFxiOS\\/([\\d\\.]+)\\b/],\r\n SAFARI: /\\bVersion\\/([\\d\\.]+)\\b/,\r\n OPERA: [/\\bVersion\\/([\\d\\.]+)\\b/, /\\bOPR\\/([\\d\\.]+)\\b/],\r\n IE: [/\\bMSIE ([\\d\\.]+\\w?)\\b/, /\\brv:([\\d\\.]+\\w?)\\b/],\r\n CORDOVA: /\\bCordova\\/([\\d\\.]+)\\b/,\r\n MS_EDGE: /\\bEdge\\/([\\d\\.]+)\\b/,\r\n MS_EDGE_BETA: /\\bEdg\\/([\\d\\.]+)\\b/\r\n };\r\n\r\n var BROWSER_VERSIONS_RE = Object.keys(BROWSER_VERSIONS_RE_MAP).reduce(function (obj, key) {\r\n obj[BROWSERS[key]] = BROWSER_VERSIONS_RE_MAP[key];\r\n return obj;\r\n }, {});\r\n\r\n /* ES5 polyfills Start*/\r\n\r\n // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\r\n if (!Object.keys) {\r\n Object.keys = (function () {\r\n 'use strict';\r\n var hasOwnProperty = Object.prototype.hasOwnProperty,\r\n hasDontEnumBug = !({\r\n toString: null\r\n }).propertyIsEnumerable('toString'),\r\n dontEnums = [\r\n 'toString',\r\n 'toLocaleString',\r\n 'valueOf',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'constructor'\r\n ],\r\n dontEnumsLength = dontEnums.length;\r\n\r\n return function (obj) {\r\n if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {\r\n throw new TypeError('Object.keys called on non-object');\r\n }\r\n\r\n var result = [],\r\n prop, i;\r\n\r\n for (prop in obj) {\r\n if (hasOwnProperty.call(obj, prop)) {\r\n result.push(prop);\r\n }\r\n }\r\n\r\n if (hasDontEnumBug) {\r\n for (i = 0; i < dontEnumsLength; i++) {\r\n if (hasOwnProperty.call(obj, dontEnums[i])) {\r\n result.push(dontEnums[i]);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n }());\r\n }\r\n\r\n // Production steps of ECMA-262, Edition 5, 15.4.4.21\r\n // Reference: http://es5.github.io/#x15.4.4.21\r\n if (!Array.prototype.reduce) {\r\n Array.prototype.reduce = function (callback /*, initialValue*/) {\r\n 'use strict';\r\n if (this == null) {\r\n throw new TypeError('Array.prototype.reduce called on null or undefined');\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new TypeError(callback + ' is not a function');\r\n }\r\n var t = Object(this),\r\n len = t.length >>> 0,\r\n k = 0,\r\n value;\r\n if (arguments.length == 2) {\r\n value = arguments[1];\r\n } else {\r\n while (k < len && !(k in t)) {\r\n k++;\r\n }\r\n if (k >= len) {\r\n throw new TypeError('Reduce of empty array with no initial value');\r\n }\r\n value = t[k++];\r\n }\r\n for (; k < len; k++) {\r\n if (k in t) {\r\n value = callback(value, t[k], k, t);\r\n }\r\n }\r\n return value;\r\n };\r\n }\r\n\r\n // https://tc39.github.io/ecma262/#sec-array.prototype.find\r\n if (!Array.prototype.find) {\r\n Object.defineProperty(Array.prototype, \"find\", {\r\n value: function (predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== \"function\") {\r\n throw new TypeError(\"predicate must be a function\");\r\n }\r\n\r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n\r\n // 5. Let k be 0.\r\n var k = 0;\r\n\r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n\r\n // 7. Return undefined.\r\n return undefined;\r\n }\r\n });\r\n }\r\n /* ES5 polyfills End*/\r\n\r\n function parseUserAgent(options) {\r\n var reTree = !!options ? options.reTree : {};\r\n var customDetectors = !!options ? options.customDetectors : [];\r\n var ua = !!options ? options.userAgent : \"\";\r\n var modifiers = {\r\n platform: !!options ? options.platform : \"\",\r\n maxTouchPoints: !!options ? options.maxTouchPoints : \"\"\r\n };\r\n\r\n var deviceInfo = {\r\n raw: {\r\n userAgent: ua,\r\n modifiers: modifiers,\r\n os: {},\r\n browser: {},\r\n device: {}\r\n }\r\n };\r\n\r\n deviceInfo.raw.os = Object.keys(OS).reduce(function (obj, item) {\r\n obj[OS[item]] = reTree.test(ua, OS_RE[item]);\r\n return obj;\r\n }, {});\r\n\r\n deviceInfo.raw.browser = Object.keys(BROWSERS).reduce(function (obj, item) {\r\n obj[BROWSERS[item]] = reTree.test(ua, BROWSERS_RE[item]);\r\n return obj;\r\n }, {});\r\n\r\n deviceInfo.raw.device = Object.keys(DEVICES).reduce(function (obj, item) {\r\n obj[DEVICES[item]] = reTree.test(ua, DEVICES_RE[item]);\r\n return obj;\r\n }, {});\r\n\r\n deviceInfo.raw.os_version = Object.keys(OS_VERSIONS).reduce(function (obj, item) {\r\n obj[OS_VERSIONS[item]] = reTree.test(ua, OS_VERSIONS_RE_OLD[item]);\r\n return obj;\r\n }, {});\r\n\r\n deviceInfo.os = [\r\n OS.WINDOWS,\r\n OS.IOS,\r\n OS.MAC,\r\n OS.ANDROID,\r\n OS.LINUX,\r\n OS.UNIX,\r\n OS.FIREFOX_OS,\r\n OS.CHROME_OS,\r\n OS.WINDOWS_PHONE\r\n ].reduce(function (previousValue, currentValue) {\r\n return (previousValue === OS.UNKNOWN && deviceInfo.raw.os[currentValue]) ? currentValue : previousValue;\r\n }, OS.UNKNOWN);\r\n\r\n deviceInfo.browser = [\r\n BROWSERS.CHROME,\r\n BROWSERS.FIREFOX,\r\n BROWSERS.SAFARI,\r\n BROWSERS.OPERA,\r\n BROWSERS.IE,\r\n BROWSERS.MS_EDGE,\r\n BROWSERS.MS_EDGE_BETA,\r\n BROWSERS.CORDOVA,\r\n BROWSERS.FB_MESSENGER\r\n ].reduce(function (previousValue, currentValue) {\r\n return (previousValue === BROWSERS.UNKNOWN && deviceInfo.raw.browser[currentValue]) ? currentValue : previousValue;\r\n }, BROWSERS.UNKNOWN);\r\n\r\n deviceInfo.device = [\r\n DEVICES.ANDROID,\r\n DEVICES.I_PAD,\r\n DEVICES.IPHONE,\r\n DEVICES.I_POD,\r\n DEVICES.BLACKBERRY,\r\n DEVICES.FIREFOX_OS,\r\n DEVICES.CHROME_BOOK,\r\n DEVICES.WINDOWS_PHONE,\r\n DEVICES.PS4,\r\n DEVICES.CHROMECAST,\r\n DEVICES.APPLE_TV,\r\n DEVICES.GOOGLE_TV,\r\n DEVICES.VITA,\r\n DEVICES.MACINTOSH,\r\n ].reduce(function (previousValue, currentValue) {\r\n return (previousValue === DEVICES.UNKNOWN && deviceInfo.raw.device[currentValue]) ? currentValue : previousValue;\r\n }, DEVICES.UNKNOWN);\r\n\r\n deviceInfo.os_version = \"unknown\";\r\n if (deviceInfo.os !== OS.UNKNOWN) {\r\n var version = (OS_VERSIONS_RE[deviceInfo.os] || [])\r\n .map(function (reMap) {\r\n var res = reTree.exec(ua, reMap.re);\r\n if (!!res) {\r\n if (typeof reMap.map === 'string' || reMap.map instanceof String) {\r\n return reMap.map;\r\n } else {\r\n return reMap.map.call(null, res[1]);\r\n }\r\n } else {\r\n return null;\r\n }\r\n })\r\n .find(function (element) {\r\n return !!element;\r\n });\r\n if (!!version) {\r\n deviceInfo.os_version = version;\r\n }\r\n }\r\n\r\n deviceInfo.browser_version = \"0\";\r\n if (deviceInfo.browser !== BROWSERS.UNKNOWN) {\r\n var re = BROWSER_VERSIONS_RE[deviceInfo.browser];\r\n var res = reTree.exec(ua, re);\r\n if (!!res) {\r\n deviceInfo.browser_version = res[1];\r\n }\r\n }\r\n\r\n deviceInfo.isMobile = function () {\r\n return [\r\n DEVICES.ANDROID,\r\n DEVICES.I_PAD,\r\n DEVICES.IPHONE,\r\n DEVICES.I_POD,\r\n DEVICES.BLACKBERRY,\r\n DEVICES.FIREFOX_OS,\r\n DEVICES.WINDOWS_PHONE,\r\n DEVICES.VITA\r\n ].some(function (item) {\r\n return deviceInfo.device == item;\r\n });\r\n };\r\n\r\n deviceInfo.isTablet = function () {\r\n return [\r\n DEVICES.I_PAD,\r\n DEVICES.FIREFOX_OS\r\n ].some(function (item) {\r\n return deviceInfo.device == item;\r\n });\r\n };\r\n\r\n deviceInfo.isDesktop = function () {\r\n return [\r\n DEVICES.PS4,\r\n DEVICES.CHROME_BOOK,\r\n DEVICES.MACINTOSH,\r\n DEVICES.UNKNOWN\r\n ].some(function (item) {\r\n return deviceInfo.device == item;\r\n });\r\n };\r\n\r\n deviceInfo.custom = customDetectors.reduce(function (custom, customDetector) {\r\n custom[customDetector.name] = reTree.test(ua, customDetector.re);\r\n return custom;\r\n }, {});\r\n\r\n applyModifiers(deviceInfo, modifiers);\r\n\r\n return deviceInfo;\r\n }\r\n\r\n function applyModifiers(deviceInfo, modifiers) {\r\n /* https://github.com/srfrnk/ua-device-detector/issues/17 */\r\n if (deviceInfo.os === OS.MAC && modifiers.platform === 'MacIntel' && modifiers.maxTouchPoints > 1) {\r\n deviceInfo.os = OS.IOS;\r\n deviceInfo.os_version = \"13.0\";\r\n deviceInfo.device = DEVICES.IPHONE;\r\n }\r\n }\r\n\r\n if (!!angular) {\r\n angular.module(\"uaDeviceDetector\", [\"reTree\"])\r\n .constant(\"OS_RE\", OS_RE)\r\n .constant(\"BROWSERS_RE\", BROWSERS_RE)\r\n .constant(\"DEVICES_RE\", DEVICES_RE)\r\n .constant(\"OS_VERSIONS_RE\", OS_VERSIONS_RE_OLD)\r\n .constant(\"BROWSER_VERSIONS_RE_MAP\", BROWSER_VERSIONS_RE_MAP)\r\n .constant(\"BROWSER_VERSIONS_RE\", BROWSER_VERSIONS_RE)\r\n .constant(\"BROWSERS\", BROWSERS)\r\n .constant(\"DEVICES\", DEVICES)\r\n .constant(\"OS\", OS)\r\n .constant(\"OS_VERSIONS\", OS_VERSIONS)\r\n .factory(\"uaDeviceDetector\", [\"reTree\", function (reTree) {\r\n return {\r\n parseUserAgent: function (ua, customDetectors, platform, maxTouchPoints) {\r\n return parseUserAgent({\r\n reTree: reTree || {},\r\n customDetectors: customDetectors || [],\r\n userAgent: ua || \"\",\r\n platform: platform,\r\n maxTouchPoints: maxTouchPoints\r\n });\r\n },\r\n BROWSERS: BROWSERS,\r\n DEVICES: DEVICES,\r\n OS: OS\r\n };\r\n }]);\r\n }\r\n\r\n if (!!window) {\r\n window.uaDeviceDetector = {\r\n parseUserAgent: function (ua, customDetectors, platform, maxTouchPoints) {\r\n return parseUserAgent({\r\n reTree: window.reTree || {},\r\n customDetectors: customDetectors || [],\r\n userAgent: ua || \"\",\r\n platform: platform,\r\n maxTouchPoints: maxTouchPoints\r\n });\r\n },\r\n BROWSERS: BROWSERS,\r\n DEVICES: DEVICES,\r\n OS: OS\r\n };\r\n }\r\n\r\n if (!!module) {\r\n var reTree = (window && window.reTree) || require(\"re-tree\");\r\n module.exports = {\r\n parseUserAgent: function (ua, customDetectors, platform, maxTouchPoints) {\r\n return parseUserAgent({\r\n reTree: reTree || {},\r\n customDetectors: customDetectors || [],\r\n userAgent: ua || \"\",\r\n platform: platform,\r\n maxTouchPoints: maxTouchPoints\r\n });\r\n },\r\n BROWSERS: BROWSERS,\r\n DEVICES: DEVICES,\r\n OS: OS\r\n };\r\n }\r\n})(typeof module === 'undefined' ? null : module, typeof require === 'undefined' ? null : require, typeof window === 'undefined' ? null : window, typeof angular === 'undefined' ? null : angular);","(function (angular) {\r\n \"use strict\";\r\n\r\n angular.module(\"ng.deviceDetector\", [\"reTree\", \"uaDeviceDetector\"])\r\n .service(\"detectUtils\", [\"deviceDetector\", \"uaDeviceDetector\",\r\n function (deviceDetector, uaDeviceDetector) {\r\n var deviceInfo = deviceDetector;\r\n\r\n this.isMobile = function () {\r\n return deviceInfo.device !== 'unknown';\r\n };\r\n\r\n this.isAndroid = function () {\r\n return (deviceInfo.device === uaDeviceDetector.DEVICES.ANDROID || deviceInfo.OS === uaDeviceDetector.OS.ANDROID);\r\n };\r\n\r\n this.isIOS = function () {\r\n return (deviceInfo.os === uaDeviceDetector.OS.IOS || deviceInfo.device === uaDeviceDetector.DEVICES.I_POD ||\r\n deviceInfo.device === uaDeviceDetector.DEVICES.IPHONE);\r\n };\r\n }\r\n ])\r\n .provider(\"deviceDetector\", function () {\r\n var customDetectors = [];\r\n this.addCustom = function (customDetectorName, customDetectorRE) {\r\n customDetectors.push({ name: customDetectorName, re: customDetectorRE });\r\n };\r\n this.$get = [\r\n \"$window\",\r\n \"uaDeviceDetector\",\r\n \"reTree\",\r\n function (\r\n $window,\r\n uaDeviceDetector,\r\n reTree\r\n ) {\r\n var ua = $window.navigator.userAgent;\r\n var platform = $window.navigator.platform;\r\n var maxTouchPoints= $window.navigator.maxTouchPoints;\r\n var deviceInfo = uaDeviceDetector.parseUserAgent(ua, customDetectors, platform, maxTouchPoints );\r\n deviceInfo.parseUserAgent = function (ua, platform, maxTouchPoints) { return uaDeviceDetector.parseUserAgent(ua, customDetectors, platform, maxTouchPoints) };\r\n return deviceInfo;\r\n }];\r\n }\r\n )\r\n .directive('deviceDetector', [\"deviceDetector\", function (deviceDetector) {\r\n function customClassName(name) {\r\n return 'is-' + name.toLowerCase().replace(/[^0-9a-z]+/g, '-');\r\n }\r\n\r\n return {\r\n restrict: \"A\",\r\n link: function (scope, elm/*, attrs*/) {\r\n elm.addClass('os-' + deviceDetector.os);\r\n elm.addClass('browser-' + deviceDetector.browser);\r\n elm.addClass('device-' + deviceDetector.device);\r\n elm.toggleClass('is-mobile', deviceDetector.isMobile());\r\n elm.toggleClass('is-tablet', deviceDetector.isTablet());\r\n elm.toggleClass('is-desktop', deviceDetector.isDesktop());\r\n Object.keys(deviceDetector.custom).forEach(function (customKey) {\r\n elm.toggleClass(customClassName(customKey), deviceDetector.custom[customKey]);\r\n });\r\n }\r\n };\r\n }]);\r\n})(angular);\r\n","/**\r\n * x is a value between 0 and 1, indicating where in the animation you are.\r\n */\r\nvar duScrollDefaultEasing = function (x) {\r\n 'use strict';\r\n\r\n if(x < 0.5) {\r\n return Math.pow(x*2, 2)/2;\r\n }\r\n return 1-Math.pow((1-x)*2, 2)/2;\r\n};\r\n\r\nvar duScroll = angular.module('duScroll', [\r\n 'duScroll.scrollspy',\r\n 'duScroll.smoothScroll',\r\n 'duScroll.scrollContainer',\r\n 'duScroll.spyContext',\r\n 'duScroll.scrollHelpers'\r\n])\r\n //Default animation duration for smoothScroll directive\r\n .value('duScrollDuration', 350)\r\n //Scrollspy debounce interval, set to 0 to disable\r\n .value('duScrollSpyWait', 100)\r\n //Scrollspy forced refresh interval, use if your content changes or reflows without scrolling.\r\n //0 to disable\r\n .value('duScrollSpyRefreshInterval', 0)\r\n //Wether or not multiple scrollspies can be active at once\r\n .value('duScrollGreedy', false)\r\n //Default offset for smoothScroll directive\r\n .value('duScrollOffset', 0)\r\n //Default easing function for scroll animation\r\n .value('duScrollEasing', duScrollDefaultEasing)\r\n //Which events on the container (such as body) should cancel scroll animations\r\n .value('duScrollCancelOnEvents', 'scroll mousedown mousewheel touchmove keydown')\r\n //Whether or not to activate the last scrollspy, when page/container bottom is reached\r\n .value('duScrollBottomSpy', false)\r\n //Active class name\r\n .value('duScrollActiveClass', 'active');\r\n\r\nif (typeof module !== 'undefined' && module && module.exports) {\r\n module.exports = duScroll;\r\n}\r\n\r\n\r\nangular.module('duScroll.scrollHelpers', ['duScroll.requestAnimation'])\r\n.run([\"$window\", \"$q\", \"cancelAnimation\", \"requestAnimation\", \"duScrollEasing\", \"duScrollDuration\", \"duScrollOffset\", \"duScrollCancelOnEvents\", function($window, $q, cancelAnimation, requestAnimation, duScrollEasing, duScrollDuration, duScrollOffset, duScrollCancelOnEvents) {\r\n 'use strict';\r\n\r\n var proto = {};\r\n\r\n var isDocument = function(el) {\r\n return (typeof HTMLDocument !== 'undefined' && el instanceof HTMLDocument) || (el.nodeType && el.nodeType === el.DOCUMENT_NODE);\r\n };\r\n\r\n var isElement = function(el) {\r\n return (typeof HTMLElement !== 'undefined' && el instanceof HTMLElement) || (el.nodeType && el.nodeType === el.ELEMENT_NODE);\r\n };\r\n\r\n var unwrap = function(el) {\r\n return isElement(el) || isDocument(el) ? el : el[0];\r\n };\r\n\r\n proto.duScrollTo = function(left, top, duration, easing) {\r\n var aliasFn;\r\n if(angular.isElement(left)) {\r\n aliasFn = this.duScrollToElement;\r\n } else if(angular.isDefined(duration)) {\r\n aliasFn = this.duScrollToAnimated;\r\n }\r\n if(aliasFn) {\r\n return aliasFn.apply(this, arguments);\r\n }\r\n var el = unwrap(this);\r\n if(isDocument(el)) {\r\n return $window.scrollTo(left, top);\r\n }\r\n el.scrollLeft = left;\r\n el.scrollTop = top;\r\n };\r\n\r\n var scrollAnimation, deferred;\r\n proto.duScrollToAnimated = function(left, top, duration, easing) {\r\n if(duration && !easing) {\r\n easing = duScrollEasing;\r\n }\r\n var startLeft = this.duScrollLeft(),\r\n startTop = this.duScrollTop(),\r\n deltaLeft = Math.round(left - startLeft),\r\n deltaTop = Math.round(top - startTop);\r\n\r\n var startTime = null, progress = 0;\r\n var el = this;\r\n\r\n var cancelScrollAnimation = function($event) {\r\n if (!$event || (progress && $event.which > 0)) {\r\n if(duScrollCancelOnEvents) {\r\n el.unbind(duScrollCancelOnEvents, cancelScrollAnimation);\r\n }\r\n cancelAnimation(scrollAnimation);\r\n deferred.reject();\r\n scrollAnimation = null;\r\n }\r\n };\r\n\r\n if(scrollAnimation) {\r\n cancelScrollAnimation();\r\n }\r\n deferred = $q.defer();\r\n\r\n if(duration === 0 || (!deltaLeft && !deltaTop)) {\r\n if(duration === 0) {\r\n el.duScrollTo(left, top);\r\n }\r\n deferred.resolve();\r\n return deferred.promise;\r\n }\r\n\r\n var animationStep = function(timestamp) {\r\n if (startTime === null) {\r\n startTime = timestamp;\r\n }\r\n\r\n progress = timestamp - startTime;\r\n var percent = (progress >= duration ? 1 : easing(progress/duration));\r\n\r\n el.scrollTo(\r\n startLeft + Math.ceil(deltaLeft * percent),\r\n startTop + Math.ceil(deltaTop * percent)\r\n );\r\n if(percent < 1) {\r\n scrollAnimation = requestAnimation(animationStep);\r\n } else {\r\n if(duScrollCancelOnEvents) {\r\n el.unbind(duScrollCancelOnEvents, cancelScrollAnimation);\r\n }\r\n scrollAnimation = null;\r\n deferred.resolve();\r\n }\r\n };\r\n\r\n //Fix random mobile safari bug when scrolling to top by hitting status bar\r\n el.duScrollTo(startLeft, startTop);\r\n\r\n if(duScrollCancelOnEvents) {\r\n el.bind(duScrollCancelOnEvents, cancelScrollAnimation);\r\n }\r\n\r\n scrollAnimation = requestAnimation(animationStep);\r\n return deferred.promise;\r\n };\r\n\r\n proto.duScrollToElement = function(target, offset, duration, easing) {\r\n var el = unwrap(this);\r\n if(!angular.isNumber(offset) || isNaN(offset)) {\r\n offset = duScrollOffset;\r\n }\r\n var top = this.duScrollTop() + unwrap(target).getBoundingClientRect().top - offset;\r\n if(isElement(el)) {\r\n top -= el.getBoundingClientRect().top;\r\n }\r\n return this.duScrollTo(0, top, duration, easing);\r\n };\r\n\r\n proto.duScrollLeft = function(value, duration, easing) {\r\n if(angular.isNumber(value)) {\r\n return this.duScrollTo(value, this.duScrollTop(), duration, easing);\r\n }\r\n var el = unwrap(this);\r\n if(isDocument(el)) {\r\n return $window.scrollX || document.documentElement.scrollLeft || document.body.scrollLeft;\r\n }\r\n return el.scrollLeft;\r\n };\r\n proto.duScrollTop = function(value, duration, easing) {\r\n if(angular.isNumber(value)) {\r\n return this.duScrollTo(this.duScrollLeft(), value, duration, easing);\r\n }\r\n var el = unwrap(this);\r\n if(isDocument(el)) {\r\n return $window.scrollY || document.documentElement.scrollTop || document.body.scrollTop;\r\n }\r\n return el.scrollTop;\r\n };\r\n\r\n proto.duScrollToElementAnimated = function(target, offset, duration, easing) {\r\n return this.duScrollToElement(target, offset, duration || duScrollDuration, easing);\r\n };\r\n\r\n proto.duScrollTopAnimated = function(top, duration, easing) {\r\n return this.duScrollTop(top, duration || duScrollDuration, easing);\r\n };\r\n\r\n proto.duScrollLeftAnimated = function(left, duration, easing) {\r\n return this.duScrollLeft(left, duration || duScrollDuration, easing);\r\n };\r\n\r\n angular.forEach(proto, function(fn, key) {\r\n angular.element.prototype[key] = fn;\r\n\r\n //Remove prefix if not already claimed by jQuery / ui.utils\r\n var unprefixed = key.replace(/^duScroll/, 'scroll');\r\n if(angular.isUndefined(angular.element.prototype[unprefixed])) {\r\n angular.element.prototype[unprefixed] = fn;\r\n }\r\n });\r\n\r\n}]);\r\n\r\n\r\n//Adapted from https://gist.github.com/paulirish/1579671\r\nangular.module('duScroll.polyfill', [])\r\n.factory('polyfill', [\"$window\", function($window) {\r\n 'use strict';\r\n\r\n var vendors = ['webkit', 'moz', 'o', 'ms'];\r\n\r\n return function(fnName, fallback) {\r\n if($window[fnName]) {\r\n return $window[fnName];\r\n }\r\n var suffix = fnName.substr(0, 1).toUpperCase() + fnName.substr(1);\r\n for(var key, i = 0; i < vendors.length; i++) {\r\n key = vendors[i]+suffix;\r\n if($window[key]) {\r\n return $window[key];\r\n }\r\n }\r\n return fallback;\r\n };\r\n}]);\r\n\r\nangular.module('duScroll.requestAnimation', ['duScroll.polyfill'])\r\n.factory('requestAnimation', [\"polyfill\", \"$timeout\", function(polyfill, $timeout) {\r\n 'use strict';\r\n\r\n var lastTime = 0;\r\n var fallback = function(callback, element) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = $timeout(function() { callback(currTime + timeToCall); },\r\n timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n\r\n return polyfill('requestAnimationFrame', fallback);\r\n}])\r\n.factory('cancelAnimation', [\"polyfill\", \"$timeout\", function(polyfill, $timeout) {\r\n 'use strict';\r\n\r\n var fallback = function(promise) {\r\n $timeout.cancel(promise);\r\n };\r\n\r\n return polyfill('cancelAnimationFrame', fallback);\r\n}]);\r\n\r\n\r\nangular.module('duScroll.spyAPI', ['duScroll.scrollContainerAPI'])\r\n.factory('spyAPI', [\"$rootScope\", \"$timeout\", \"$interval\", \"$window\", \"$document\", \"scrollContainerAPI\", \"duScrollGreedy\", \"duScrollSpyWait\", \"duScrollSpyRefreshInterval\", \"duScrollBottomSpy\", \"duScrollActiveClass\", function($rootScope, $timeout, $interval, $window, $document, scrollContainerAPI, duScrollGreedy, duScrollSpyWait, duScrollSpyRefreshInterval, duScrollBottomSpy, duScrollActiveClass) {\r\n 'use strict';\r\n\r\n var createScrollHandler = function(context) {\r\n var timer = false, queued = false;\r\n var handler = function() {\r\n queued = false;\r\n var container = context.container,\r\n containerEl = container[0],\r\n containerOffset = 0,\r\n bottomReached;\r\n\r\n if (typeof HTMLElement !== 'undefined' && containerEl instanceof HTMLElement || containerEl.nodeType && containerEl.nodeType === containerEl.ELEMENT_NODE) {\r\n containerOffset = containerEl.getBoundingClientRect().top;\r\n bottomReached = Math.round(containerEl.scrollTop + containerEl.clientHeight) >= containerEl.scrollHeight;\r\n } else {\r\n var documentScrollHeight = $document[0].body.scrollHeight || $document[0].documentElement.scrollHeight; // documentElement for IE11\r\n bottomReached = Math.round($window.pageYOffset + $window.innerHeight) >= documentScrollHeight;\r\n }\r\n var compareProperty = (duScrollBottomSpy && bottomReached ? 'bottom' : 'top');\r\n\r\n var i, currentlyActive, toBeActive, spies, spy, pos;\r\n spies = context.spies;\r\n currentlyActive = context.currentlyActive;\r\n toBeActive = undefined;\r\n\r\n for(i = 0; i < spies.length; i++) {\r\n spy = spies[i];\r\n pos = spy.getTargetPosition();\r\n if (!pos || !spy.$element) continue;\r\n\r\n if((duScrollBottomSpy && bottomReached) || (pos.top + spy.offset - containerOffset < 20 && (duScrollGreedy || pos.top*-1 + containerOffset) < pos.height)) {\r\n //Find the one closest the viewport top or the page bottom if it's reached\r\n if(!toBeActive || toBeActive[compareProperty] < pos[compareProperty]) {\r\n toBeActive = {\r\n spy: spy\r\n };\r\n toBeActive[compareProperty] = pos[compareProperty];\r\n }\r\n }\r\n }\r\n\r\n if(toBeActive) {\r\n toBeActive = toBeActive.spy;\r\n }\r\n if(currentlyActive === toBeActive || (duScrollGreedy && !toBeActive)) return;\r\n if(currentlyActive && currentlyActive.$element) {\r\n currentlyActive.$element.removeClass(duScrollActiveClass);\r\n $rootScope.$broadcast(\r\n 'duScrollspy:becameInactive',\r\n currentlyActive.$element,\r\n angular.element(currentlyActive.getTargetElement())\r\n );\r\n }\r\n if(toBeActive) {\r\n toBeActive.$element.addClass(duScrollActiveClass);\r\n $rootScope.$broadcast(\r\n 'duScrollspy:becameActive',\r\n toBeActive.$element,\r\n angular.element(toBeActive.getTargetElement())\r\n );\r\n }\r\n context.currentlyActive = toBeActive;\r\n };\r\n\r\n if(!duScrollSpyWait) {\r\n return handler;\r\n }\r\n\r\n //Debounce for potential performance savings\r\n return function() {\r\n if(!timer) {\r\n handler();\r\n timer = $timeout(function() {\r\n timer = false;\r\n if(queued) {\r\n handler();\r\n }\r\n }, duScrollSpyWait, false);\r\n } else {\r\n queued = true;\r\n }\r\n };\r\n };\r\n\r\n var contexts = {};\r\n\r\n var createContext = function($scope) {\r\n var id = $scope.$id;\r\n var context = {\r\n spies: []\r\n };\r\n\r\n context.handler = createScrollHandler(context);\r\n contexts[id] = context;\r\n\r\n $scope.$on('$destroy', function() {\r\n destroyContext($scope);\r\n });\r\n\r\n return id;\r\n };\r\n\r\n var destroyContext = function($scope) {\r\n var id = $scope.$id;\r\n var context = contexts[id], container = context.container;\r\n if(context.intervalPromise) {\r\n $interval.cancel(context.intervalPromise);\r\n }\r\n if(container) {\r\n container.off('scroll', context.handler);\r\n }\r\n delete contexts[id];\r\n };\r\n\r\n var defaultContextId = createContext($rootScope);\r\n\r\n var getContextForScope = function(scope) {\r\n if(contexts[scope.$id]) {\r\n return contexts[scope.$id];\r\n }\r\n if(scope.$parent) {\r\n return getContextForScope(scope.$parent);\r\n }\r\n return contexts[defaultContextId];\r\n };\r\n\r\n var getContextForSpy = function(spy) {\r\n var context, contextId, scope = spy.$scope;\r\n if(scope) {\r\n return getContextForScope(scope);\r\n }\r\n //No scope, most likely destroyed\r\n for(contextId in contexts) {\r\n context = contexts[contextId];\r\n if(context.spies.indexOf(spy) !== -1) {\r\n return context;\r\n }\r\n }\r\n };\r\n\r\n var isElementInDocument = function(element) {\r\n while (element.parentNode) {\r\n element = element.parentNode;\r\n if (element === document) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n var addSpy = function(spy) {\r\n var context = getContextForSpy(spy);\r\n if (!context) return;\r\n context.spies.push(spy);\r\n if (!context.container || !isElementInDocument(context.container)) {\r\n if(context.container) {\r\n context.container.off('scroll', context.handler);\r\n }\r\n context.container = scrollContainerAPI.getContainer(spy.$scope);\r\n if (duScrollSpyRefreshInterval && !context.intervalPromise) {\r\n context.intervalPromise = $interval(context.handler, duScrollSpyRefreshInterval, 0, false);\r\n }\r\n context.container.on('scroll', context.handler).triggerHandler('scroll');\r\n }\r\n };\r\n\r\n var removeSpy = function(spy) {\r\n var context = getContextForSpy(spy);\r\n if(spy === context.currentlyActive) {\r\n $rootScope.$broadcast('duScrollspy:becameInactive', context.currentlyActive.$element);\r\n context.currentlyActive = null;\r\n }\r\n var i = context.spies.indexOf(spy);\r\n if(i !== -1) {\r\n context.spies.splice(i, 1);\r\n }\r\n\t\tspy.$element = null;\r\n };\r\n\r\n return {\r\n addSpy: addSpy,\r\n removeSpy: removeSpy,\r\n createContext: createContext,\r\n destroyContext: destroyContext,\r\n getContextForScope: getContextForScope\r\n };\r\n}]);\r\n\r\n\r\nangular.module('duScroll.scrollContainerAPI', [])\r\n.factory('scrollContainerAPI', [\"$document\", function($document) {\r\n 'use strict';\r\n\r\n var containers = {};\r\n\r\n var setContainer = function(scope, element) {\r\n var id = scope.$id;\r\n containers[id] = element;\r\n return id;\r\n };\r\n\r\n var getContainerId = function(scope) {\r\n if(containers[scope.$id]) {\r\n return scope.$id;\r\n }\r\n if(scope.$parent) {\r\n return getContainerId(scope.$parent);\r\n }\r\n return;\r\n };\r\n\r\n var getContainer = function(scope) {\r\n var id = getContainerId(scope);\r\n return id ? containers[id] : $document;\r\n };\r\n\r\n var removeContainer = function(scope) {\r\n var id = getContainerId(scope);\r\n if(id) {\r\n delete containers[id];\r\n }\r\n };\r\n\r\n return {\r\n getContainerId: getContainerId,\r\n getContainer: getContainer,\r\n setContainer: setContainer,\r\n removeContainer: removeContainer\r\n };\r\n}]);\r\n\r\n\r\nangular.module('duScroll.smoothScroll', ['duScroll.scrollHelpers', 'duScroll.scrollContainerAPI'])\r\n.directive('duSmoothScroll', [\"duScrollDuration\", \"duScrollOffset\", \"scrollContainerAPI\", function(duScrollDuration, duScrollOffset, scrollContainerAPI) {\r\n 'use strict';\r\n\r\n return {\r\n link : function($scope, $element, $attr) {\r\n $element.on('click', function(e) {\r\n if((!$attr.href || $attr.href.indexOf('#') === -1) && $attr.duSmoothScroll === '') return;\r\n\r\n var id = $attr.href ? $attr.href.replace(/.*(?=#[^\\s]+$)/, '').substring(1) : $attr.duSmoothScroll;\r\n\r\n var target = document.getElementById(id) || document.getElementsByName(id)[0];\r\n if(!target || !target.getBoundingClientRect) return;\r\n\r\n if (e.stopPropagation) e.stopPropagation();\r\n if (e.preventDefault) e.preventDefault();\r\n\r\n var offset = $attr.offset ? parseInt($attr.offset, 10) : duScrollOffset;\r\n var duration = $attr.duration ? parseInt($attr.duration, 10) : duScrollDuration;\r\n var container = scrollContainerAPI.getContainer($scope);\r\n\r\n container.duScrollToElement(\r\n angular.element(target),\r\n isNaN(offset) ? 0 : offset,\r\n isNaN(duration) ? 0 : duration\r\n );\r\n });\r\n }\r\n };\r\n}]);\r\n\r\n\r\nangular.module('duScroll.spyContext', ['duScroll.spyAPI'])\r\n.directive('duSpyContext', [\"spyAPI\", function(spyAPI) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n scope: true,\r\n compile: function compile(tElement, tAttrs, transclude) {\r\n return {\r\n pre: function preLink($scope, iElement, iAttrs, controller) {\r\n spyAPI.createContext($scope);\r\n }\r\n };\r\n }\r\n };\r\n}]);\r\n\r\n\r\nangular.module('duScroll.scrollContainer', ['duScroll.scrollContainerAPI'])\r\n.directive('duScrollContainer', [\"scrollContainerAPI\", function(scrollContainerAPI){\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n scope: true,\r\n compile: function compile(tElement, tAttrs, transclude) {\r\n return {\r\n pre: function preLink($scope, iElement, iAttrs, controller) {\r\n iAttrs.$observe('duScrollContainer', function(element) {\r\n if(angular.isString(element)) {\r\n element = document.getElementById(element);\r\n }\r\n\r\n element = (angular.isElement(element) ? angular.element(element) : iElement);\r\n scrollContainerAPI.setContainer($scope, element);\r\n $scope.$on('$destroy', function() {\r\n scrollContainerAPI.removeContainer($scope);\r\n });\r\n });\r\n }\r\n };\r\n }\r\n };\r\n}]);\r\n\r\n\r\nangular.module('duScroll.scrollspy', ['duScroll.spyAPI'])\r\n.directive('duScrollspy', [\"spyAPI\", \"duScrollOffset\", \"$timeout\", \"$rootScope\", function(spyAPI, duScrollOffset, $timeout, $rootScope) {\r\n 'use strict';\r\n\r\n var Spy = function(targetElementOrId, $scope, $element, offset) {\r\n if(angular.isElement(targetElementOrId)) {\r\n this.target = targetElementOrId;\r\n } else if(angular.isString(targetElementOrId)) {\r\n this.targetId = targetElementOrId;\r\n }\r\n this.$scope = $scope;\r\n this.$element = $element;\r\n this.offset = offset;\r\n };\r\n\r\n Spy.prototype.getTargetElement = function() {\r\n if (!this.target && this.targetId) {\r\n this.target = document.getElementById(this.targetId) || document.getElementsByName(this.targetId)[0];\r\n }\r\n return this.target;\r\n };\r\n\r\n Spy.prototype.getTargetPosition = function() {\r\n var target = this.getTargetElement();\r\n if(target) {\r\n return target.getBoundingClientRect();\r\n }\r\n };\r\n\r\n Spy.prototype.flushTargetCache = function() {\r\n if(this.targetId) {\r\n this.target = undefined;\r\n }\r\n };\r\n\r\n return {\r\n link: function ($scope, $element, $attr) {\r\n var href = $attr.ngHref || $attr.href;\r\n var targetId;\r\n\r\n if (href && href.indexOf('#') !== -1) {\r\n targetId = href.replace(/.*(?=#[^\\s]+$)/, '').substring(1);\r\n } else if($attr.duScrollspy) {\r\n targetId = $attr.duScrollspy;\r\n } else if($attr.duSmoothScroll) {\r\n targetId = $attr.duSmoothScroll;\r\n }\r\n if(!targetId) return;\r\n\r\n // Run this in the next execution loop so that the scroll context has a chance\r\n // to initialize\r\n var timeoutPromise = $timeout(function() {\r\n var spy = new Spy(targetId, $scope, $element, -($attr.offset ? parseInt($attr.offset, 10) : duScrollOffset));\r\n spyAPI.addSpy(spy);\r\n\r\n $scope.$on('$locationChangeSuccess', spy.flushTargetCache.bind(spy));\r\n var deregisterOnStateChange = $rootScope.$on('$stateChangeSuccess', spy.flushTargetCache.bind(spy));\r\n $scope.$on('$destroy', function() {\r\n spyAPI.removeSpy(spy);\r\n deregisterOnStateChange();\r\n });\r\n }, 0, false);\r\n $scope.$on('$destroy', function() {$timeout.cancel(timeoutPromise);});\r\n }\r\n };\r\n}]);\r\n"]}