{"version":3,"sources":["webpack://catalog-machine/./client/lib/fork/ng-infinite-scroll.js","webpack://catalog-machine/./node_modules/angular-animate/angular-animate.js","webpack://catalog-machine/./node_modules/angular-animate/index.js","webpack://catalog-machine/./node_modules/angular-cookies/angular-cookies.js","webpack://catalog-machine/./node_modules/angular-cookies/index.js","webpack://catalog-machine/./node_modules/angular-local-storage/dist/angular-local-storage.js","webpack://catalog-machine/./node_modules/angular-local-storage/index.js","webpack://catalog-machine/./node_modules/angular-resource/angular-resource.js","webpack://catalog-machine/./node_modules/angular-resource/index.js","webpack://catalog-machine/./node_modules/angular-route/angular-route.js","webpack://catalog-machine/./node_modules/angular-route/index.js","webpack://catalog-machine/./node_modules/angular-sanitize/angular-sanitize.js","webpack://catalog-machine/./node_modules/angular-sanitize/index.js","webpack://catalog-machine/./node_modules/bootstrap4-toggle/js/bootstrap4-toggle.min.js","webpack://catalog-machine/./node_modules/bootstrap/dist/js/bootstrap.js","webpack://catalog-machine/./node_modules/nouislider/distribute/nouislider.js-exposed","webpack://catalog-machine/./node_modules/nouislider/distribute/nouislider.js","webpack://catalog-machine/./node_modules/popper.js/dist/esm/popper.js","webpack://catalog-machine/external var \"jQuery\"","webpack://catalog-machine/webpack/bootstrap","webpack://catalog-machine/webpack/runtime/compat get default export","webpack://catalog-machine/webpack/runtime/define property getters","webpack://catalog-machine/webpack/runtime/global","webpack://catalog-machine/webpack/runtime/hasOwnProperty shorthand","webpack://catalog-machine/webpack/runtime/make namespace object"],"names":["angular","module","value","directive","$rootScope","$window","$interval","THROTTLE_MILLISECONDS","scope","infiniteScroll","infiniteScrollContainer","infiniteScrollDistance","infiniteScrollDisabled","infiniteScrollUseDocumentBottom","infiniteScrollListenForEvent","link","elem","attrs","changeContainer","handleInfiniteScrollUseDocumentBottom","windowElement","element","scrollDistance","scrollEnabled","checkWhenEnabled","container","immediateCheck","useDocumentBottom","unregisterEventListener","checkInterval","height","getBoundingClientRect","isNaN","offsetHeight","document","documentElement","clientHeight","offsetTop","css","top","pageYOffset","window","scrollTop","ownerDocument","defaultView","handler","containerBottom","elementBottom","containerTopOffset","$$phase","$apply","cancel","func","wait","timeout","previous","later","Date","getTime","call","now","remaining","throttle","$on","unbind","handleInfiniteScrollDistance","v","parseFloat","$watch","handleInfiniteScrollDisabled","newContainer","bind","handleInfiniteScrollContainer","length","nodeType","append","querySelector","Error","infiniteScrollParent","parent","infiniteScrollImmediateCheck","$eval","exports","TRANSITION_PROP","ANIMATION_PROP","ELEMENT_NODE","ADD_CLASS_SUFFIX","REMOVE_CLASS_SUFFIX","EVENT_CLASS_PREFIX","NG_ANIMATE_CLASSNAME","NG_ANIMATE_CHILDREN_DATA","TRANSITIONEND_EVENT","undefined","ontransitionend","onwebkittransitionend","ANIMATIONEND_EVENT","onanimationend","onwebkitanimationend","DURATION_KEY","PROPERTY_KEY","TIMING_KEY","ANIMATION_PLAYSTATE_KEY","ANIMATION_DELAY_PROP","ANIMATION_DURATION_PROP","TRANSITION_DELAY_PROP","TRANSITION_DURATION_PROP","ngMinErr","$$minErr","assertArg","arg","name","reason","mergeClasses","a","b","isArray","join","pendClasses","classes","fix","isPrefix","className","isString","split","forEach","klass","i","stripCommentsFromElement","jqLite","extractElementNode","elm","applyAnimationClassesFactory","$$jqLite","options","addClass","removeClass","prepareAnimationOptions","domOperation","$$prepared","noop","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","from","to","mergeAnimationDetails","oldAnimation","newAnimation","target","newOptions","toAdd","toRemove","existing","flags","splitClassesToLookup","key","obj","val","prop","allow","resolveElementClasses","attr","preparationClasses","concatWithSpace","realDomOperation","extend","getDomNode","blockKeyframeAnimations","node","applyBlock","applyInlineStyle","styleTuple","style","helpers","duration","$$AnimateChildrenDirective","$interpolate","ngAnimateChildren","setData","data","$observe","ANIMATE_TIMER_KEY","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","animationDuration","animationDelay","animationIterationCount","DETECT_STAGGER_CSS_PROPERTIES","getCssDelayStyle","delay","isKeyframeAnimation","computeCssStyles","properties","styles","Object","create","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","maxValue","c","charAt","values","str","substring","Math","max","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","registerRestorableStyles","backup","isDefined","getPropertyValue","copy","isElement","isFunction","isObject","isUndefined","$AnimateCssProvider","$animateProvider","this","$get","$$AnimateRunner","$timeout","$$animateCache","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue","applyAnimationClasses","rafWaitQueue","waitUntilQuiet","callback","push","flush","pageWidth","computeTimings","cacheKey","allowNoDuration","timings","get","hasDuration","put","aD","tD","maxDelay","maxDuration","initialOptions","restoreStyles","parentNode","enabled","closeAndReturnNoopAnimator","animationClosed","animationPaused","animationCompleted","runner","runnerHost","maxDelayTime","maxDurationTime","startTime","temporaryStyles","events","animations","transitions","method","event","isStructural","structural","structuralClassName","addRemoveClassName","applyClassesEarly","trim","hasToStyles","keys","keyframeStyle","stagger","staggerCacheKey","durationStyle","containsCachedAnimationWithoutDuration","staggerVal","count","staggerClassName","$$skipPreparationClasses","transitionStyle","itemIndex","staggerIndex","isFirst","skipBlocking","fullClassName","relativeDelay","hasTransitions","hasAnimations","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","applyAnimationDelay","recalculateTimingStyles","delayStyle","activeClasses","blockTransition","blockKeyframeAnimation","cleanupStyles","applyBlocking","$$willAnimate","end","endFn","start","cancelFn","resume","pause","close","rejected","animationTimerData","entry","setProperty","removeProperty","onDone","off","onAnimationProgress","timer","removeData","complete","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","elapsedTime","toFixed","playPause","maxStagger","triggerAnimationStart","getAttribute","easing","easeVal","easeProp","currentTimerData","timerTime","endTime","animationsData","setupFallbackTimer","expectedEndTime","onAnimationExpired","on","playAnimation","index","arr","indexOf","splice","floor","$$AnimateCssDriverProvider","$$animationProvider","drivers","NG_ANIMATE_SHIM_CLASS_NAME","NG_OUT_ANCHOR_CLASS_NAME","$animateCss","$rootElement","$document","bodyNode","body","rootNode","rootBodyElement","contains","animationDetails","anchors","fromAnimation","prepareRegularAnimation","toAnimation","anchorAnimations","anchor","outElement","inElement","animator","prepareAnchoredAnimation","animationRunners","animation","all","status","prepareFromToAnchorAnimation","filterCssClasses","replace","getUniqueValues","filter","outAnchor","inAnchor","clone","cloneNode","startingClasses","getClassVal","animatorIn","animatorOut","calculateAnchorStyles","prepareInAnimation","startingAnimator","currentAnimation","done","coords","scrollLeft","endingClasses","NG_IN_ANCHOR_CLASS_NAME","remove","$$AnimateJsProvider","$injector","arguments","before","after","beforeFn","classesToAdd","classesToRemove","matches","flagMap","animationFactory","$$registeredAnimations","lookupAnimations","afterFn","toUpperCase","substr","packageAnimations","closeActiveAnimations","chain","fn","applyOptions","setHost","endAnimations","onComplete","success","cancelled","groupEventedAnimations","fnName","operations","ani","onAnimationComplete","resolved","endProgressCb","args","apply","executeAnimationFn","result","concat","runners","animateFn","reject","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory","NG_ANIMATE_ATTR_NAME","NG_ANIMATE_PIN_DATA","$$AnimateQueueProvider","ONE_SPACE","rules","skip","getEventData","hasMatchingClasses","newClassString","currentClassString","currentClassMap","classString","map","makeTruthyCssClassMap","some","isAllowed","ruleType","previousAnimation","hasAnimationClasses","and","state","nA","nR","cA","cR","$$rAF","$$Map","$$animation","$templateRequest","$$isDocumentHidden","activeAnimationsLookup","disabledElementsLookup","animationsEnabled","removeFromDisabledElementsLookup","evt","delete","deregisterWatch","totalPendingRequests","isEmpty","$$postDigest","callbackRegistry","customFilter","classNameFilter","returnTrue","isAnimatableByFilter","isAnimatableClassName","test","normalizeAnimationDetails","Node","prototype","compareDocumentPosition","filterFromRegistry","list","matchContainer","matchCallback","containerNode","cleanupEventListeners","phase","$animate","entries","eventType","pin","parentElement","originalElement","runInNextPostDigestOrNow","postDigestCalled","postDigestTaskFactory","documentHidden","skipAnimations","existingAnimation","hasExistingAnimation","animateChildren","bodyNodeDetected","nodeName","rootNodeDetected","parentAnimationDetected","elementDisabled","parentHost","details","parentNodeDisabled","areAnimationsAllowed","notifyProgress","children","querySelectorAll","child","parseInt","closeChildAnimations","cancelAnimationFlag","applyGeneratedPreparationClasses","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationCancelled","realRunner","targetParentNode","targetNode","callbacks","progress","queueAnimation","bool","argCount","has","set","removeAttribute","setAttribute","oldValue","newValue","$$AnimationProvider","NG_ANIMATE_REF_ATTR","RUNNER_STORAGE_KEY","PREPARE_CLASSES_KEY","getRunner","animationQueue","sortAnimations","tree","lookup","domNode","processNode","processed","elementNode","parentEntry","queue","remainingLevelEntries","nextLevelEntries","row","childEntry","flatten","tempClasses","beforeStart","prepareClassName","handleDestroyedElement","groupedAnimations","preparedAnimations","refLookup","direction","enterOrMove","anchorNodes","items","hasAttribute","animationID","usedIndicesLookup","anchorGroups","lookupKey","toString","group","aa","j","cssClassesIntersection","indexKey","groupAnimations","toBeSortedAnimations","animationEntry","extraClasses","startAnimationFn","newRunner","closeFn","update","operation","driverName","driver","factory","invokeFirstDriver","animationRunner","finalAnimations","innerArray","info","angularVersion","restrict","transclude","terminal","priority","$element","ctrl","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","leave","$destroy","childScope","enter","scheduler","tasks","nextTick","shift","provider","KEY","parentCounter","cache","parts","isValid","total","$$CookieWriter","$log","$browser","cookiePath","baseHref","rawDocument","cookie","expires","path","encodeURIComponent","domain","toUTCString","secure","cookieLength","samesite","warn","defaults","calcOptions","$$cookieReader","$$cookieWriter","getObject","fromJson","getAll","putObject","toJson","$inject","isNumber","prefix","storageType","expiry","defaultToCookie","notify","setItem","removeItem","setPrefix","setStorageType","setDefaultToCookie","shouldDefault","setStorageCookie","exp","setStorageCookieDomain","setNotify","itemSet","itemRemove","$parse","webStorage","self","deriveQualifiedKey","underiveQualifiedKey","RegExp","isKeyPrefixOurs","checkSupport","supported","round","random","e","$broadcast","message","browserSupportsLocalStorage","addToLocalStorage","type","previousType","getStorageType","newvalue","addToCookies","getFromLocalStorage","getFromCookies","item","getItem","JSON","parse","removeFromLocalStorage","consumed","removeFromCookies","browserSupportsCookies","navigator","cookieEnabled","daysToExpiry","expiryDate","cookieDomain","setTime","toGMTString","cookies","thisCookie","storedValues","decodeURIComponent","parsedValue","clearAllFromCookies","prefixLength","handleStorageChangeCallback","addEventListener","removeEventListener","attachEvent","detachEvent","isSupported","localStoragePrefix","add","Description","clearAll","regularExpression","prefixRegex","testRegex","def","lsKey","assign","newVal","deriveKey","underiveKey","storage","$resourceMinErr","MEMBER_NAME_REGEX","lookupDottedPath","ii","shallowClearAndCopy","src","dst","hasOwnProperty","PROTOCOL_AND_IPV6_REGEX","stripTrailingSlashes","cancellable","actions","$http","$q","encodeUriQuery","$$encodeUriQuery","encodeUriSegment","$$encodeUriSegment","Route","template","urlParams","setUrlParams","config","params","actionUrl","encodedVal","url","protocolAndIpv6","param","isQueryParamValue","match","paramInfo","urlParam","p1","leadingSlashes","tail","paramDefaults","route","defaultResponseInterceptor","response","resource","Resource","toJSON","$promise","$resolved","$cancelRequest","action","hasBody","numericTimeout","debug","a1","a2","a3","a4","onSuccess","onError","timeoutDeferred","numericTimeoutPromise","actionParams","ids","isInstanceCall","httpConfig","requestInterceptor","interceptor","request","requestErrorInterceptor","requestError","responseInterceptor","responseErrorInterceptor","responseError","successCallback","headers","statusText","errorCallback","defer","promise","resolve","then","catch","resp","rejectionOrResponse","error","routeToRegExp","opts","pattern","_","slash","option","optional","star","ignoreTrailingSlashes","regexp","caseInsensitiveMatch","isEagerInstantiationEnabled","ngRouteModule","inherit","extra","routes","when","routeCopy","shallowCopy","reloadOnUrl","reloadOnSearch","originalPath","redirectPath","redirectTo","otherwise","eagerInstantiationEnabled","$location","$routeParams","$sce","preparedRoute","preparedRouteIsUpdateOnly","forceReload","$route","reload","fakeLocationEvent","defaultPrevented","preventDefault","$evalAsync","prepareRoute","commitRoute","updateParams","newParams","current","$$route","$routeMinErr","interpolate","search","$locationEvent","newRoute","oldRoute","lastRoute","m","exec","len","switchRouteMatcher","pathParams","equals","nextRoutePromise","nextRoute","$$incOutstandingRequestCount","getRedirectionData","handlePossibleRedirection","keepProcessingRoute","resolveLocals","locals","finally","$$completeOutstandingRequest","oldPath","newUrl","hasRedirection","oldSearch","resolveRedirectTo","invoke","oldUrl","templateUrl","loadedTemplateUrl","valueOf","getTemplateFor","string","segment","segmentMatch","run","instantiateRoute","ngViewFactory","$anchorScroll","currentScope","currentElement","previousLeaveAnimation","autoScrollExp","autoscroll","onloadExp","onload","cleanupLastView","newScope","$template","$new","$emit","ngViewFillContentFactory","$compile","$controller","html","controller","contents","$scope","controllerAs","resolveAs","lowercase","nodeContains","htmlParser","htmlSanitizeWriter","$sanitizeMinErr","hasBeenInstantiated","svgEnabled","$$sanitizeUri","validElements","svgElements","buf","uri","isImage","enableSvg","addValidElements","elements","htmlElements","addElementsTo","voidElements","htmlVoidElements","addValidAttrs","validAttrs","arrayToMap","$$lowercase","inertBodyElement","getInertBodyElement","mXSSAttempts","innerHTML","nextNode","firstChild","toLowerCase","attrToMap","attributes","chars","textContent","getNonDescendant","removeChild","uriValidator","ignoreCurrentElement","out","tag","blockedElements","lkey","uriAttrs","encodeEntities","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","stringToMap","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","lowercaseKeys","elementsMap","newElements","getInertBodyElement_DOMParser","isDOMParserAvailable","implementation","inertDocument","createHTMLDocument","getDocumentElement","documentMode","stripCustomNsAttrs","l","attrNode","attrName","lastIndexOf","removeAttributeNode","DOMParser","parseFromString","charCodeAt","propName","outerHTML","outerText","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","text","attributesFn","raw","addText","linkAttributes","addLink","t","render","VERSION","DEFAULTS","onstyle","offstyle","size","width","_onstyle","_offstyle","s","o","wrap","$toggle","$toggleOn","$toggleOff","$toggleGroup","n","outerWidth","h","outerHeight","trigger","toggle","enable","removeAttr","disable","change","proxy","destroy","unwrap","bootstrapToggle","Array","slice","each","Constructor","noConflict","find","jQuery","$","Popper","_interopDefaultLegacy","$__default","Popper__default","_defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","_createClass","protoProps","staticProps","_extends","source","_inheritsLoose","subClass","superClass","constructor","__proto__","TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","getSpecialTransitionEndEvent","bindType","delegateType","handle","is","handleObj","transitionEndEmulator","_this","called","one","Util","setTimeout","triggerTransitionEnd","setTransitionEndSupport","emulateTransitionEnd","special","getUID","getElementById","getSelectorFromElement","selector","hrefAttr","getTransitionDurationFromElement","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","typeCheckConfig","componentName","configTypes","property","expectedTypes","valueType","findShadowRoot","attachShadow","getRootNode","root","ShadowRoot","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor","NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","_element","_proto","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","closest","closeEvent","Event","hasClass","_destroyElement","detach","_jQueryInterface","_handleDismiss","alertInstance","NAME$1","VERSION$1","DATA_KEY$1","EVENT_KEY$1","DATA_API_KEY$1","JQUERY_NO_CONFLICT$1","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_CLICK_DATA_API$1","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","shouldAvoidTriggerChange","triggerChangeEvent","addAriaPressed","input","checked","classList","activeElement","focus","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","buttons","_i","_len","_button","NAME$2","VERSION$2","DATA_KEY$2","EVENT_KEY$2","DATA_API_KEY$2","JQUERY_NO_CONFLICT$2","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","interval","keyboard","slide","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API$1","EVENT_CLICK_DATA_API$2","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE$1","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE$1","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","activeIndex","_getItemIndex","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","pointerType","clientX","touches","move","clearTimeout","which","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","delta","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","_setActiveIndicatorElement","indicators","nextIndicator","elementInterval","defaultInterval","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","slidEvent","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$3","VERSION$3","DATA_KEY$3","EVENT_KEY$3","DATA_API_KEY$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API$3","CLASS_NAME_SHOW$1","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE$1","Collapse","_isTransitioning","_triggerArray","id","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","setTransitioning","capitalizedDimension","scrollSize","triggerArrayLength","$elem","isTransitioning","hasWidth","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","NAME$4","VERSION$4","DATA_KEY$4","EVENT_KEY$4","DATA_API_KEY$4","JQUERY_NO_CONFLICT$4","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK","EVENT_CLICK_DATA_API$4","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_SHOW$2","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_DATA_TOGGLE$2","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$2","offset","flip","boundary","reference","display","popperConfig","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","scheduleUpdate","_getPlacement","$parentDropdown","placement","_getOffset","offsets","modifiers","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","NAME$5","VERSION$5","DATA_KEY$5","EVENT_KEY$5","DATA_API_KEY$5","JQUERY_NO_CONFLICT$5","ESCAPE_KEYCODE$1","Default$3","backdrop","DefaultType$3","EVENT_HIDE$2","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$2","EVENT_SHOW$2","EVENT_SHOWN$2","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API$5","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$3","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE$3","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","overflowY","modalTransitionDuration","modalBody","appendChild","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","createElement","appendTo","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","paddingLeft","paddingRight","rect","left","right","innerWidth","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","margin","scrollDiv","scrollbarWidth","clientWidth","_this11","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","domParser","createdDocument","whitelistKeys","_loop","el","elName","attributeList","whitelistedAttributes","_ret","NAME$6","VERSION$6","DATA_KEY$6","EVENT_KEY$6","JQUERY_NO_CONFLICT$6","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType$4","title","fallbackPlacement","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$4","HOVER_STATE_SHOW","HOVER_STATE_OUT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$4","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","content","empty","defaultBsConfig","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","triggers","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","$tip","tabClass","popperData","instance","popper","initConfigAnimation","NAME$7","VERSION$7","DATA_KEY$7","EVENT_KEY$7","JQUERY_NO_CONFLICT$7","CLASS_PREFIX$1","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","CLASS_NAME_FADE$3","CLASS_NAME_SHOW$5","SELECTOR_TITLE","SELECTOR_CONTENT","Event$1","Popover","_Tooltip","_getContent","NAME$8","VERSION$8","DATA_KEY$8","EVENT_KEY$8","DATA_API_KEY$6","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API$2","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE$2","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","targetSelector","targetBCR","sort","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","isActiveTarget","queries","$link","parents","scrollSpys","scrollSpysLength","$spy","NAME$9","VERSION$9","DATA_KEY$9","EVENT_KEY$9","DATA_API_KEY$7","JQUERY_NO_CONFLICT$9","EVENT_HIDE$3","EVENT_HIDDEN$3","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_CLICK_DATA_API$6","CLASS_NAME_DROPDOWN_MENU","CLASS_NAME_ACTIVE$3","CLASS_NAME_DISABLED$1","CLASS_NAME_FADE$4","CLASS_NAME_SHOW$6","SELECTOR_DROPDOWN$1","SELECTOR_NAV_LIST_GROUP$1","SELECTOR_ACTIVE$2","SELECTOR_ACTIVE_UL","SELECTOR_DATA_TOGGLE$4","SELECTOR_DROPDOWN_TOGGLE$1","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","listElement","itemSelector","makeArray","hiddenEvent","activeElements","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","NAME$a","VERSION$a","DATA_KEY$a","EVENT_KEY$a","JQUERY_NO_CONFLICT$a","EVENT_CLICK_DISMISS$1","EVENT_HIDE$4","EVENT_HIDDEN$4","EVENT_SHOW$4","EVENT_SHOWN$4","CLASS_NAME_FADE$5","CLASS_NAME_HIDE","CLASS_NAME_SHOW$7","CLASS_NAME_SHOWING","DefaultType$7","autohide","Default$7","SELECTOR_DATA_DISMISS$1","Toast","_clearTimeout","_close","Scrollspy","g","isValidFormatter","removeElement","isSet","unique","array","orientation","doc","docElem","pageOffset","getPageOffset","userAgent","x","y","clientTop","clientLeft","isNumeric","isFinite","addClassFor","limit","min","asArray","countDecimals","numStr","String","pieces","supportPageOffset","pageXOffset","isCSS1Compat","compatMode","getActions","pointerEnabled","msPointerEnabled","getSupportsPassive","supportsPassive","getSupportsTouchActionNone","CSS","supports","subRangeRatio","pa","pb","fromPercentage","range","startRange","toPercentage","isPercentage","getJ","toStepping","xVal","xPct","va","vb","fromStepping","getStep","xSteps","snap","handleEntryPoint","that","percentage","xHighestCompleteStep","handleStepPoint","totalSteps","xNumSteps","highestStep","ceil","Number","step","Spectrum","singleStep","ordered","getDistance","distances","getAbsoluteDistance","xPct_index","start_factor","rest_factor","rest_rel_distance","range_pct","rel_range_distance","abs_distance_counter","range_counter","getDefaultStep","isDown","getNearbySteps","stepBefore","startValue","thisStep","stepAfter","countStepDecimals","stepDecimals","convert","defaultFormatter","cssClasses","base","origin","handleLower","handleUpper","touchArea","horizontal","vertical","background","connect","connects","ltr","rtl","textDirectionLtr","textDirectionRtl","draggable","drag","tap","tooltip","pips","pipsHorizontal","pipsVertical","marker","markerHorizontal","markerVertical","markerNormal","markerLarge","markerSub","valueHorizontal","valueVertical","valueNormal","valueLarge","valueSub","INTERNAL_EVENT_NS","tooltips","aria","validateFormat","testStep","parsed","testKeyboardPageMultiplier","keyboardPageMultiplier","testKeyboardDefaultStep","keyboardDefaultStep","testRange","spectrum","testStart","handles","testSnap","testAnimate","testAnimationDuration","testConnect","testOrientation","ort","testMargin","testLimit","testPadding","totalPadding","firstValue","lastValue","testDirection","dir","testBehaviour","fixed","hover","unconstrained","testTooltips","formatter","testAriaFormat","ariaFormat","testFormat","format","testKeyboardSupport","keyboardSupport","testDocumentElement","testCssPrefix","cssPrefix","testCssClasses","testOptions","tests","r","behaviour","d","msPrefix","msTransform","noPrefix","transform","transformRule","originalOptions","supportsTouchActionNone","scope_Target","scope_Base","scope_Handles","scope_Connects","scope_Pips","scope_Tooltips","scope_Spectrum","scope_Values","scope_Locations","scope_HandleNumbers","scope_ActiveHandlesCount","scope_Events","scope_Self","scope_Document","scope_DocumentElement","scope_Body","PIPS_NONE","PIPS_NO_VALUE","PIPS_LARGE_VALUE","PIPS_SMALL_VALUE","scope_DirOffset","addNodeTo","addTarget","addOrigin","handleNumber","eventKeydown","addConnect","addElements","connectOptions","connectBase","addSlider","textDirection","addTooltip","isSliderDisabled","isHandleDisabled","handleOrigin","removeTooltips","removeEvent","bindEvent","unencoded","formattedValue","positions","checkHandlePosition","getGroup","mode","stepped","spread","generateSpread","density","safeIncrement","increment","indexes","firstInRange","lastInRange","ignoreFirst","ignoreLast","prevPct","unshift","q","low","high","newPct","pctDifference","pctPos","steps","realSteps","stepSize","isSteps","addMarking","filterFunc","valueSizeClasses","markerSizeClasses","valueOrientationClasses","markerOrientationClasses","getClasses","orientationClasses","sizeClasses","addSpread","removePips","grid","baseSize","alt","fixEvent","doNotReject","calcPoint","points","methods","eventName","passive","eventTarget","mouse","pointer","isTouchOnTarget","checkTouch","targetTouches","pageX","pageY","targetTouch","changedTouches","clientY","cursor","calcPointToPercentage","location","proposal","getClosestHandle","clickedPosition","smallestDifference","handlePosition","differenceWithThisHandle","clickAtEdge","isCloser","isCloserAfter","documentLeave","eventEnd","eventMove","appVersion","buttonsProperty","movement","startCalcPoint","moveHandles","locations","handleNumbers","listeners","setZindex","fireEvent","eventStart","moveEvent","endEvent","outEvent","eventTap","setHandle","eventHover","targetEvent","horizontalKeys","verticalKeys","largeStepKeys","edgeKeys","reverse","isLargeDown","isLargeUp","isUp","isMin","isMax","multiplier","getNextStepsForHandle","bindSliderEvents","handleBefore","handleAfter","eventHolders","eventHolder","namespacedEvent","isInternalNamespace","namespace","tEvent","tNamespace","lookBackward","lookForward","getValue","distance","inRuleOrder","upward","proposals","f","transformDirection","updateHandlePosition","translation","translateRule","updateConnect","zIndex","exactInput","connectWidth","scaleRule","resolveToValue","valueSet","fireSetEvent","isInit","valueReset","valueSetHandle","valueGet","noUiSlider","nearbySteps","decrement","getNextSteps","updateOptions","optionsToUpdate","updateAble","setupSlider","reset","__moveHandles","getTooltips","getOrigins","initialize","api","__spectrum","isBrowser","timeoutDuration","longerTimeoutBrowsers","debounce","Promise","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","getReferenceNode","referenceNode","isIE11","MSInputMethodContext","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","DOCUMENT_POSITION_FOLLOWING","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","createClass","defineProperties","getClientRect","bottom","sizes","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","getBoundaries","boundaries","excludeScroll","relativeOffset","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","_ref","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","runModifiers","ends","findIndex","cur","console","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","getWindow","setupEventListeners","updateBound","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","disableEventListeners","cancelAnimationFrame","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","placements","validPlacements","clockwise","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","op","mergeWithPrevious","reduce","index2","Defaults","positionFixed","removeOnDestroy","side","shiftvariation","_data$offsets","isVertical","shiftOffsets","transformProp","popperStyles","primary","escapeWithReference","secondary","keepTogether","opSide","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","_data$offsets$arrow","flipped","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","popperWidth","offsetParentRect","position","shouldRound","devicePixelRatio","noRound","referenceWidth","isVariation","horizontalToInteger","verticalToInteger","prefixedProperty","willChange","invertLeft","arrowStyles","onLoad","modifierOptions","isDestroyed","isCreated","classCallCheck","requestAnimationFrame","enableEventListeners","Utils","PopperUtils","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","globalThis","Function","Symbol","toStringTag"],"mappings":"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","file":"core-lib.js","sourcesContent":["/* ng-infinite-scroll - v1.3.0 - 2016-06-30 */\nangular.module('infinite-scroll', []).value('THROTTLE_MILLISECONDS', null).directive('infiniteScroll', [\n '$rootScope', '$window', '$interval', 'THROTTLE_MILLISECONDS', function ($rootScope, $window, $interval, THROTTLE_MILLISECONDS) {\n return {\n scope: {\n infiniteScroll: '&',\n infiniteScrollContainer: '=',\n infiniteScrollDistance: '=',\n infiniteScrollDisabled: '=',\n infiniteScrollUseDocumentBottom: '=',\n infiniteScrollListenForEvent: '@'\n },\n link: function (scope, elem, attrs) {\n var changeContainer, checkInterval, checkWhenEnabled, container, handleInfiniteScrollContainer, handleInfiniteScrollDisabled, handleInfiniteScrollDistance, handleInfiniteScrollUseDocumentBottom, handler, height, immediateCheck, offsetTop, pageYOffset, scrollDistance, scrollEnabled, throttle, unregisterEventListener, useDocumentBottom, windowElement;\n windowElement = angular.element($window);\n scrollDistance = null;\n scrollEnabled = null;\n checkWhenEnabled = null;\n container = null;\n immediateCheck = true;\n useDocumentBottom = false;\n unregisterEventListener = null;\n checkInterval = false;\n height = function (elem) {\n elem = elem[0] || elem;\n if (elem.getBoundingClientRect) {\n var b = elem.getBoundingClientRect();\n return b.height;\n }\n if (isNaN(elem.offsetHeight)) {\n return elem.document.documentElement.clientHeight;\n } else {\n return elem.offsetHeight;\n }\n };\n offsetTop = function (elem) {\n if (!elem[0].getBoundingClientRect || elem.css('none')) {\n return;\n }\n return elem[0].getBoundingClientRect().top + pageYOffset(elem);\n };\n pageYOffset = function (elem) {\n elem = elem[0] || elem;\n if (isNaN(window.pageYOffset)) {\n return elem.document.documentElement.scrollTop;\n } else {\n return elem.ownerDocument.defaultView.pageYOffset;\n }\n };\n handler = function () {\n var containerBottom, containerTopOffset, elementBottom, remaining, shouldScroll;\n if (container === windowElement) {\n containerBottom = height(container) + pageYOffset(container[0].document.documentElement);\n elementBottom = offsetTop(elem) + height(elem);\n } else {\n containerBottom = height(container);\n containerTopOffset = 0;\n if (offsetTop(container) !== void 0) {\n containerTopOffset = offsetTop(container);\n }\n elementBottom = offsetTop(elem) - containerTopOffset + height(elem);\n }\n if (useDocumentBottom) {\n elementBottom = height((elem[0].ownerDocument || elem[0].document).documentElement);\n }\n remaining = elementBottom - containerBottom;\n shouldScroll = remaining <= height(container) * scrollDistance + 1;\n if (shouldScroll) {\n checkWhenEnabled = true;\n if (scrollEnabled) {\n if (scope.$$phase || $rootScope.$$phase) {\n return scope.infiniteScroll();\n } else {\n return scope.$apply(scope.infiniteScroll);\n }\n }\n } else {\n if (checkInterval) {\n $interval.cancel(checkInterval);\n }\n return checkWhenEnabled = false;\n }\n };\n throttle = function (func, wait) {\n var later, previous, timeout;\n timeout = null;\n previous = 0;\n later = function () {\n previous = new Date().getTime();\n $interval.cancel(timeout);\n timeout = null;\n return func.call();\n };\n return function () {\n var now, remaining;\n now = new Date().getTime();\n remaining = wait - (now - previous);\n if (remaining <= 0) {\n $interval.cancel(timeout);\n timeout = null;\n previous = now;\n return func.call();\n } else {\n if (!timeout) {\n return timeout = $interval(later, remaining, 1);\n }\n }\n };\n };\n if (THROTTLE_MILLISECONDS != null) {\n handler = throttle(handler, THROTTLE_MILLISECONDS);\n }\n scope.$on('$destroy', function () {\n container.unbind('scroll', handler);\n if (unregisterEventListener != null) {\n unregisterEventListener();\n unregisterEventListener = null;\n }\n if (checkInterval) {\n return $interval.cancel(checkInterval);\n }\n });\n handleInfiniteScrollDistance = function (v) {\n return scrollDistance = parseFloat(v) || 0;\n };\n scope.$watch('infiniteScrollDistance', handleInfiniteScrollDistance);\n handleInfiniteScrollDistance(scope.infiniteScrollDistance);\n handleInfiniteScrollDisabled = function (v) {\n scrollEnabled = !v;\n if (scrollEnabled && checkWhenEnabled) {\n checkWhenEnabled = false;\n return handler();\n }\n };\n scope.$watch('infiniteScrollDisabled', handleInfiniteScrollDisabled);\n handleInfiniteScrollDisabled(scope.infiniteScrollDisabled);\n handleInfiniteScrollUseDocumentBottom = function (v) {\n return useDocumentBottom = v;\n };\n scope.$watch('infiniteScrollUseDocumentBottom', handleInfiniteScrollUseDocumentBottom);\n handleInfiniteScrollUseDocumentBottom(scope.infiniteScrollUseDocumentBottom);\n changeContainer = function (newContainer) {\n if (container != null) {\n container.unbind('scroll', handler);\n }\n container = newContainer;\n if (newContainer != null) {\n return container.bind('scroll', handler);\n }\n };\n changeContainer(windowElement);\n if (scope.infiniteScrollListenForEvent) {\n unregisterEventListener = $rootScope.$on(scope.infiniteScrollListenForEvent, handler);\n }\n handleInfiniteScrollContainer = function (newContainer) {\n if ((newContainer == null) || newContainer.length === 0) {\n return;\n }\n if (newContainer.nodeType && newContainer.nodeType === 1) {\n newContainer = angular.element(newContainer);\n } else if (typeof newContainer.append === 'function') {\n newContainer = angular.element(newContainer[newContainer.length - 1]);\n } else if (typeof newContainer === 'string') {\n newContainer = angular.element(document.querySelector(newContainer));\n }\n if (newContainer != null) {\n return changeContainer(newContainer);\n } else {\n throw new Error(\"invalid infinite-scroll-container attribute.\");\n }\n };\n scope.$watch('infiniteScrollContainer', handleInfiniteScrollContainer);\n handleInfiniteScrollContainer(scope.infiniteScrollContainer || []);\n if (attrs.infiniteScrollParent != null) {\n changeContainer(angular.element(elem.parent()));\n }\n if (attrs.infiniteScrollImmediateCheck != null) {\n immediateCheck = scope.$eval(attrs.infiniteScrollImmediateCheck);\n }\n return checkInterval = $interval((function () {\n if (immediateCheck) {\n handler();\n }\n return $interval.cancel(checkInterval);\n }));\n }\n };\n }\n]);\n\nif (typeof module !== \"undefined\" && typeof exports !== \"undefined\" && module.exports === exports) {\n module.exports = 'infinite-scroll';\n}\n","/**\n * @license AngularJS v1.8.2\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\nvar ELEMENT_NODE = 1;\nvar COMMENT_NODE = 8;\n\nvar ADD_CLASS_SUFFIX = '-add';\nvar REMOVE_CLASS_SUFFIX = '-remove';\nvar EVENT_CLASS_PREFIX = 'ng-';\nvar ACTIVE_CLASS_SUFFIX = '-active';\nvar PREPARE_CLASS_SUFFIX = '-prepare';\n\nvar NG_ANIMATE_CLASSNAME = 'ng-animate';\nvar NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';\n\n// Detect proper transitionend/animationend event names.\nvar CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\n\n// If unprefixed events are not supported but webkit-prefixed are, use the latter.\n// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\n// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\n// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\n// Register both events in case `window.onanimationend` is not supported because of that,\n// do the same for `transitionend` as Safari is likely to exhibit similar behavior.\n// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\n// therefore there is no reason to test anymore for other vendor prefixes:\n// http://caniuse.com/#search=transition\nif ((window.ontransitionend === undefined) && (window.onwebkittransitionend !== undefined)) {\n CSS_PREFIX = '-webkit-';\n TRANSITION_PROP = 'WebkitTransition';\n TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\n} else {\n TRANSITION_PROP = 'transition';\n TRANSITIONEND_EVENT = 'transitionend';\n}\n\nif ((window.onanimationend === undefined) && (window.onwebkitanimationend !== undefined)) {\n CSS_PREFIX = '-webkit-';\n ANIMATION_PROP = 'WebkitAnimation';\n ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\n} else {\n ANIMATION_PROP = 'animation';\n ANIMATIONEND_EVENT = 'animationend';\n}\n\nvar DURATION_KEY = 'Duration';\nvar PROPERTY_KEY = 'Property';\nvar DELAY_KEY = 'Delay';\nvar TIMING_KEY = 'TimingFunction';\nvar ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\nvar ANIMATION_PLAYSTATE_KEY = 'PlayState';\nvar SAFE_FAST_FORWARD_DURATION_VALUE = 9999;\n\nvar ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;\nvar ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;\nvar TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;\nvar TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;\n\nvar ngMinErr = angular.$$minErr('ng');\nfunction assertArg(arg, name, reason) {\n if (!arg) {\n throw ngMinErr('areq', 'Argument \\'{0}\\' is {1}', (name || '?'), (reason || 'required'));\n }\n return arg;\n}\n\nfunction mergeClasses(a,b) {\n if (!a && !b) return '';\n if (!a) return b;\n if (!b) return a;\n if (isArray(a)) a = a.join(' ');\n if (isArray(b)) b = b.join(' ');\n return a + ' ' + b;\n}\n\nfunction packageStyles(options) {\n var styles = {};\n if (options && (options.to || options.from)) {\n styles.to = options.to;\n styles.from = options.from;\n }\n return styles;\n}\n\nfunction pendClasses(classes, fix, isPrefix) {\n var className = '';\n classes = isArray(classes)\n ? classes\n : classes && isString(classes) && classes.length\n ? classes.split(/\\s+/)\n : [];\n forEach(classes, function(klass, i) {\n if (klass && klass.length > 0) {\n className += (i > 0) ? ' ' : '';\n className += isPrefix ? fix + klass\n : klass + fix;\n }\n });\n return className;\n}\n\nfunction removeFromArray(arr, val) {\n var index = arr.indexOf(val);\n if (val >= 0) {\n arr.splice(index, 1);\n }\n}\n\nfunction stripCommentsFromElement(element) {\n if (element instanceof jqLite) {\n switch (element.length) {\n case 0:\n return element;\n\n case 1:\n // there is no point of stripping anything if the element\n // is the only element within the jqLite wrapper.\n // (it's important that we retain the element instance.)\n if (element[0].nodeType === ELEMENT_NODE) {\n return element;\n }\n break;\n\n default:\n return jqLite(extractElementNode(element));\n }\n }\n\n if (element.nodeType === ELEMENT_NODE) {\n return jqLite(element);\n }\n}\n\nfunction extractElementNode(element) {\n if (!element[0]) return element;\n for (var i = 0; i < element.length; i++) {\n var elm = element[i];\n if (elm.nodeType === ELEMENT_NODE) {\n return elm;\n }\n }\n}\n\nfunction $$addClass($$jqLite, element, className) {\n forEach(element, function(elm) {\n $$jqLite.addClass(elm, className);\n });\n}\n\nfunction $$removeClass($$jqLite, element, className) {\n forEach(element, function(elm) {\n $$jqLite.removeClass(elm, className);\n });\n}\n\nfunction applyAnimationClassesFactory($$jqLite) {\n return function(element, options) {\n if (options.addClass) {\n $$addClass($$jqLite, element, options.addClass);\n options.addClass = null;\n }\n if (options.removeClass) {\n $$removeClass($$jqLite, element, options.removeClass);\n options.removeClass = null;\n }\n };\n}\n\nfunction prepareAnimationOptions(options) {\n options = options || {};\n if (!options.$$prepared) {\n var domOperation = options.domOperation || noop;\n options.domOperation = function() {\n options.$$domOperationFired = true;\n domOperation();\n domOperation = noop;\n };\n options.$$prepared = true;\n }\n return options;\n}\n\nfunction applyAnimationStyles(element, options) {\n applyAnimationFromStyles(element, options);\n applyAnimationToStyles(element, options);\n}\n\nfunction applyAnimationFromStyles(element, options) {\n if (options.from) {\n element.css(options.from);\n options.from = null;\n }\n}\n\nfunction applyAnimationToStyles(element, options) {\n if (options.to) {\n element.css(options.to);\n options.to = null;\n }\n}\n\nfunction mergeAnimationDetails(element, oldAnimation, newAnimation) {\n var target = oldAnimation.options || {};\n var newOptions = newAnimation.options || {};\n\n var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');\n var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');\n var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);\n\n if (newOptions.preparationClasses) {\n target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);\n delete newOptions.preparationClasses;\n }\n\n // noop is basically when there is no callback; otherwise something has been set\n var realDomOperation = target.domOperation !== noop ? target.domOperation : null;\n\n extend(target, newOptions);\n\n // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this.\n if (realDomOperation) {\n target.domOperation = realDomOperation;\n }\n\n if (classes.addClass) {\n target.addClass = classes.addClass;\n } else {\n target.addClass = null;\n }\n\n if (classes.removeClass) {\n target.removeClass = classes.removeClass;\n } else {\n target.removeClass = null;\n }\n\n oldAnimation.addClass = target.addClass;\n oldAnimation.removeClass = target.removeClass;\n\n return target;\n}\n\nfunction resolveElementClasses(existing, toAdd, toRemove) {\n var ADD_CLASS = 1;\n var REMOVE_CLASS = -1;\n\n var flags = {};\n existing = splitClassesToLookup(existing);\n\n toAdd = splitClassesToLookup(toAdd);\n forEach(toAdd, function(value, key) {\n flags[key] = ADD_CLASS;\n });\n\n toRemove = splitClassesToLookup(toRemove);\n forEach(toRemove, function(value, key) {\n flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;\n });\n\n var classes = {\n addClass: '',\n removeClass: ''\n };\n\n forEach(flags, function(val, klass) {\n var prop, allow;\n if (val === ADD_CLASS) {\n prop = 'addClass';\n allow = !existing[klass] || existing[klass + REMOVE_CLASS_SUFFIX];\n } else if (val === REMOVE_CLASS) {\n prop = 'removeClass';\n allow = existing[klass] || existing[klass + ADD_CLASS_SUFFIX];\n }\n if (allow) {\n if (classes[prop].length) {\n classes[prop] += ' ';\n }\n classes[prop] += klass;\n }\n });\n\n function splitClassesToLookup(classes) {\n if (isString(classes)) {\n classes = classes.split(' ');\n }\n\n var obj = {};\n forEach(classes, function(klass) {\n // sometimes the split leaves empty string values\n // incase extra spaces were applied to the options\n if (klass.length) {\n obj[klass] = true;\n }\n });\n return obj;\n }\n\n return classes;\n}\n\nfunction getDomNode(element) {\n return (element instanceof jqLite) ? element[0] : element;\n}\n\nfunction applyGeneratedPreparationClasses($$jqLite, element, event, options) {\n var classes = '';\n if (event) {\n classes = pendClasses(event, EVENT_CLASS_PREFIX, true);\n }\n if (options.addClass) {\n classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));\n }\n if (options.removeClass) {\n classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));\n }\n if (classes.length) {\n options.preparationClasses = classes;\n element.addClass(classes);\n }\n}\n\nfunction clearGeneratedClasses(element, options) {\n if (options.preparationClasses) {\n element.removeClass(options.preparationClasses);\n options.preparationClasses = null;\n }\n if (options.activeClasses) {\n element.removeClass(options.activeClasses);\n options.activeClasses = null;\n }\n}\n\nfunction blockKeyframeAnimations(node, applyBlock) {\n var value = applyBlock ? 'paused' : '';\n var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;\n applyInlineStyle(node, [key, value]);\n return [key, value];\n}\n\nfunction applyInlineStyle(node, styleTuple) {\n var prop = styleTuple[0];\n var value = styleTuple[1];\n node.style[prop] = value;\n}\n\nfunction concatWithSpace(a,b) {\n if (!a) return b;\n if (!b) return a;\n return a + ' ' + b;\n}\n\nvar helpers = {\n blockTransitions: function(node, duration) {\n // we use a negative delay value since it performs blocking\n // yet it doesn't kill any existing transitions running on the\n // same element which makes this safe for class-based animations\n var value = duration ? '-' + duration + 's' : '';\n applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);\n return [TRANSITION_DELAY_PROP, value];\n }\n};\n\nvar $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {\n var queue, cancelFn;\n\n function scheduler(tasks) {\n // we make a copy since RAFScheduler mutates the state\n // of the passed in array variable and this would be difficult\n // to track down on the outside code\n queue = queue.concat(tasks);\n nextTick();\n }\n\n queue = scheduler.queue = [];\n\n /* waitUntilQuiet does two things:\n * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through\n * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.\n *\n * The motivation here is that animation code can request more time from the scheduler\n * before the next wave runs. This allows for certain DOM properties such as classes to\n * be resolved in time for the next animation to run.\n */\n scheduler.waitUntilQuiet = function(fn) {\n if (cancelFn) cancelFn();\n\n cancelFn = $$rAF(function() {\n cancelFn = null;\n fn();\n nextTick();\n });\n };\n\n return scheduler;\n\n function nextTick() {\n if (!queue.length) return;\n\n var items = queue.shift();\n for (var i = 0; i < items.length; i++) {\n items[i]();\n }\n\n if (!cancelFn) {\n $$rAF(function() {\n if (!cancelFn) nextTick();\n });\n }\n }\n}];\n\n/**\n * @ngdoc directive\n * @name ngAnimateChildren\n * @restrict AE\n * @element ANY\n *\n * @description\n *\n * ngAnimateChildren allows you to specify that children of this element should animate even if any\n * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move`\n * (structural) animation, child elements that also have an active structural animation are not animated.\n *\n * Note that even if `ngAnimateChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).\n *\n *\n * @param {string} ngAnimateChildren If the value is empty, `true` or `on`,\n * then child animations are allowed. If the value is `false`, child animations are not allowed.\n *\n * @example\n * \n \n
\n \n \n
\n
\n
\n List of items:\n
Item {{item}}
\n
\n
\n
\n
\n \n\n .container.ng-enter,\n .container.ng-leave {\n transition: all ease 1.5s;\n }\n\n .container.ng-enter,\n .container.ng-leave-active {\n opacity: 0;\n }\n\n .container.ng-leave,\n .container.ng-enter-active {\n opacity: 1;\n }\n\n .item {\n background: firebrick;\n color: #FFF;\n margin-bottom: 10px;\n }\n\n .item.ng-enter,\n .item.ng-leave {\n transition: transform 1.5s ease;\n }\n\n .item.ng-enter {\n transform: translateX(50px);\n }\n\n .item.ng-enter-active {\n transform: translateX(0);\n }\n \n \n angular.module('ngAnimateChildren', ['ngAnimate'])\n .controller('MainController', function MainController() {\n this.animateChildren = false;\n this.enterElement = false;\n });\n \n
\n */\nvar $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {\n return {\n link: function(scope, element, attrs) {\n var val = attrs.ngAnimateChildren;\n if (isString(val) && val.length === 0) { //empty attribute\n element.data(NG_ANIMATE_CHILDREN_DATA, true);\n } else {\n // Interpolate and set the value, so that it is available to\n // animations that run right after compilation\n setData($interpolate(val)(scope));\n attrs.$observe('ngAnimateChildren', setData);\n }\n\n function setData(value) {\n value = value === 'on' || value === 'true';\n element.data(NG_ANIMATE_CHILDREN_DATA, value);\n }\n }\n };\n}];\n\n/* exported $AnimateCssProvider */\n\nvar ANIMATE_TIMER_KEY = '$$animateCss';\n\n/**\n * @ngdoc service\n * @name $animateCss\n * @kind object\n *\n * @description\n * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes\n * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT\n * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or\n * directives to create more complex animations that can be purely driven using CSS code.\n *\n * Note that only browsers that support CSS transitions and/or keyframe animations are capable of\n * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).\n *\n * ## General Use\n * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that\n * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,\n * any automatic control over cancelling animations and/or preventing animations from being run on\n * child elements will not be handled by AngularJS. For this to work as expected, please use `$animate` to\n * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger\n * the CSS animation.\n *\n * The example below shows how we can create a folding animation on an element using `ng-if`:\n *\n * ```html\n * \n *
\n * This element will go BOOM\n *
\n * \n * ```\n *\n * Now we create the **JavaScript animation** that will trigger the CSS transition:\n *\n * ```js\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element, doneFn) {\n * var height = element[0].offsetHeight;\n * return $animateCss(element, {\n * from: { height:'0px' },\n * to: { height:height + 'px' },\n * duration: 1 // one second\n * });\n * }\n * }\n * }]);\n * ```\n *\n * ## More Advanced Uses\n *\n * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks\n * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.\n *\n * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,\n * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with\n * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order\n * to provide a working animation that will run in CSS.\n *\n * The example below showcases a more advanced version of the `.fold-animation` from the example above:\n *\n * ```js\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element, doneFn) {\n * var height = element[0].offsetHeight;\n * return $animateCss(element, {\n * addClass: 'red large-text pulse-twice',\n * easing: 'ease-out',\n * from: { height:'0px' },\n * to: { height:height + 'px' },\n * duration: 1 // one second\n * });\n * }\n * }\n * }]);\n * ```\n *\n * Since we're adding/removing CSS classes then the CSS transition will also pick those up:\n *\n * ```css\n * /* since a hardcoded duration value of 1 was provided in the JavaScript animation code,\n * the CSS classes below will be transitioned despite them being defined as regular CSS classes */\n * .red { background:red; }\n * .large-text { font-size:20px; }\n *\n * /* we can also use a keyframe animation and $animateCss will make it work alongside the transition */\n * .pulse-twice {\n * animation: 0.5s pulse linear 2;\n * -webkit-animation: 0.5s pulse linear 2;\n * }\n *\n * @keyframes pulse {\n * from { transform: scale(0.5); }\n * to { transform: scale(1.5); }\n * }\n *\n * @-webkit-keyframes pulse {\n * from { -webkit-transform: scale(0.5); }\n * to { -webkit-transform: scale(1.5); }\n * }\n * ```\n *\n * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.\n *\n * ## How the Options are handled\n *\n * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation\n * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline\n * styles using the `from` and `to` properties.\n *\n * ```js\n * var animator = $animateCss(element, {\n * from: { background:'red' },\n * to: { background:'blue' }\n * });\n * animator.start();\n * ```\n *\n * ```css\n * .rotating-animation {\n * animation:0.5s rotate linear;\n * -webkit-animation:0.5s rotate linear;\n * }\n *\n * @keyframes rotate {\n * from { transform: rotate(0deg); }\n * to { transform: rotate(360deg); }\n * }\n *\n * @-webkit-keyframes rotate {\n * from { -webkit-transform: rotate(0deg); }\n * to { -webkit-transform: rotate(360deg); }\n * }\n * ```\n *\n * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is\n * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition\n * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition\n * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied\n * and spread across the transition and keyframe animation.\n *\n * ## What is returned\n *\n * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually\n * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are\n * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:\n *\n * ```js\n * var animator = $animateCss(element, { ... });\n * ```\n *\n * Now what do the contents of our `animator` variable look like:\n *\n * ```js\n * {\n * // starts the animation\n * start: Function,\n *\n * // ends (aborts) the animation\n * end: Function\n * }\n * ```\n *\n * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.\n * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and styles may have been\n * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties\n * and that changing them will not reconfigure the parameters of the animation.\n *\n * ### runner.done() vs runner.then()\n * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the\n * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.\n * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`\n * unless you really need a digest to kick off afterwards.\n *\n * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss\n * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code).\n * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works.\n *\n * @param {DOMElement} element the element that will be animated\n * @param {object} options the animation-related options that will be applied during the animation\n *\n * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied\n * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)\n * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and\n * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted.\n * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).\n * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).\n * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).\n * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.\n * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.\n * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.\n * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.\n * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0`\n * is provided then the animation will be skipped entirely.\n * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is\n * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value\n * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same\n * CSS delay value.\n * * `stagger` - A numeric time value representing the delay between successively animated elements\n * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})\n * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a\n * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)\n * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occurring on the classes being added and removed.)\n * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once\n * the animation is closed. This is useful for when the styles are used purely for the sake of\n * the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation).\n * By default this value is set to `false`.\n *\n * @return {object} an object with start and end methods and details about the animation.\n *\n * * `start` - The method to start the animation. This will return a `Promise` when called.\n * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.\n */\nvar ONE_SECOND = 1000;\n\nvar ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\nvar CLOSING_TIME_BUFFER = 1.5;\n\nvar DETECT_CSS_PROPERTIES = {\n transitionDuration: TRANSITION_DURATION_PROP,\n transitionDelay: TRANSITION_DELAY_PROP,\n transitionProperty: TRANSITION_PROP + PROPERTY_KEY,\n animationDuration: ANIMATION_DURATION_PROP,\n animationDelay: ANIMATION_DELAY_PROP,\n animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY\n};\n\nvar DETECT_STAGGER_CSS_PROPERTIES = {\n transitionDuration: TRANSITION_DURATION_PROP,\n transitionDelay: TRANSITION_DELAY_PROP,\n animationDuration: ANIMATION_DURATION_PROP,\n animationDelay: ANIMATION_DELAY_PROP\n};\n\nfunction getCssKeyframeDurationStyle(duration) {\n return [ANIMATION_DURATION_PROP, duration + 's'];\n}\n\nfunction getCssDelayStyle(delay, isKeyframeAnimation) {\n var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;\n return [prop, delay + 's'];\n}\n\nfunction computeCssStyles($window, element, properties) {\n var styles = Object.create(null);\n var detectedStyles = $window.getComputedStyle(element) || {};\n forEach(properties, function(formalStyleName, actualStyleName) {\n var val = detectedStyles[formalStyleName];\n if (val) {\n var c = val.charAt(0);\n\n // only numerical-based values have a negative sign or digit as the first value\n if (c === '-' || c === '+' || c >= 0) {\n val = parseMaxTime(val);\n }\n\n // by setting this to null in the event that the delay is not set or is set directly as 0\n // then we can still allow for negative values to be used later on and not mistake this\n // value for being greater than any other negative value.\n if (val === 0) {\n val = null;\n }\n styles[actualStyleName] = val;\n }\n });\n\n return styles;\n}\n\nfunction parseMaxTime(str) {\n var maxValue = 0;\n var values = str.split(/\\s*,\\s*/);\n forEach(values, function(value) {\n // it's always safe to consider only second values and omit `ms` values since\n // getComputedStyle will always handle the conversion for us\n if (value.charAt(value.length - 1) === 's') {\n value = value.substring(0, value.length - 1);\n }\n value = parseFloat(value) || 0;\n maxValue = maxValue ? Math.max(value, maxValue) : value;\n });\n return maxValue;\n}\n\nfunction truthyTimingValue(val) {\n return val === 0 || val != null;\n}\n\nfunction getCssTransitionDurationStyle(duration, applyOnlyDuration) {\n var style = TRANSITION_PROP;\n var value = duration + 's';\n if (applyOnlyDuration) {\n style += DURATION_KEY;\n } else {\n value += ' linear all';\n }\n return [style, value];\n}\n\n// we do not reassign an already present style value since\n// if we detect the style property value again we may be\n// detecting styles that were added via the `from` styles.\n// We make use of `isDefined` here since an empty string\n// or null value (which is what getPropertyValue will return\n// for a non-existing style) will still be marked as a valid\n// value for the style (a falsy value implies that the style\n// is to be removed at the end of the animation). If we had a simple\n// \"OR\" statement then it would not be enough to catch that.\nfunction registerRestorableStyles(backup, node, properties) {\n forEach(properties, function(prop) {\n backup[prop] = isDefined(backup[prop])\n ? backup[prop]\n : node.style.getPropertyValue(prop);\n });\n}\n\nvar $AnimateCssProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n\n this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout', '$$animateCache',\n '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue',\n function($window, $$jqLite, $$AnimateRunner, $timeout, $$animateCache,\n $$forceReflow, $sniffer, $$rAFScheduler, $$animateQueue) {\n\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n function computeCachedCssStyles(node, className, cacheKey, allowNoDuration, properties) {\n var timings = $$animateCache.get(cacheKey);\n\n if (!timings) {\n timings = computeCssStyles($window, node, properties);\n if (timings.animationIterationCount === 'infinite') {\n timings.animationIterationCount = 1;\n }\n }\n\n // if a css animation has no duration we\n // should mark that so that repeated addClass/removeClass calls are skipped\n var hasDuration = allowNoDuration || (timings.transitionDuration > 0 || timings.animationDuration > 0);\n\n // we keep putting this in multiple times even though the value and the cacheKey are the same\n // because we're keeping an internal tally of how many duplicate animations are detected.\n $$animateCache.put(cacheKey, timings, hasDuration);\n\n return timings;\n }\n\n function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {\n var stagger;\n var staggerCacheKey = 'stagger-' + cacheKey;\n\n // if we have one or more existing matches of matching elements\n // containing the same parent + CSS styles (which is how cacheKey works)\n // then staggering is possible\n if ($$animateCache.count(cacheKey) > 0) {\n stagger = $$animateCache.get(staggerCacheKey);\n\n if (!stagger) {\n var staggerClassName = pendClasses(className, '-stagger');\n\n $$jqLite.addClass(node, staggerClassName);\n\n stagger = computeCssStyles($window, node, properties);\n\n // force the conversion of a null value to zero incase not set\n stagger.animationDuration = Math.max(stagger.animationDuration, 0);\n stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);\n\n $$jqLite.removeClass(node, staggerClassName);\n\n $$animateCache.put(staggerCacheKey, stagger, true);\n }\n }\n\n return stagger || {};\n }\n\n var rafWaitQueue = [];\n function waitUntilQuiet(callback) {\n rafWaitQueue.push(callback);\n $$rAFScheduler.waitUntilQuiet(function() {\n $$animateCache.flush();\n\n // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.\n // PLEASE EXAMINE THE `$$forceReflow` service to understand why.\n var pageWidth = $$forceReflow();\n\n // we use a for loop to ensure that if the queue is changed\n // during this looping then it will consider new requests\n for (var i = 0; i < rafWaitQueue.length; i++) {\n rafWaitQueue[i](pageWidth);\n }\n rafWaitQueue.length = 0;\n });\n }\n\n function computeTimings(node, className, cacheKey, allowNoDuration) {\n var timings = computeCachedCssStyles(node, className, cacheKey, allowNoDuration, DETECT_CSS_PROPERTIES);\n var aD = timings.animationDelay;\n var tD = timings.transitionDelay;\n timings.maxDelay = aD && tD\n ? Math.max(aD, tD)\n : (aD || tD);\n timings.maxDuration = Math.max(\n timings.animationDuration * timings.animationIterationCount,\n timings.transitionDuration);\n\n return timings;\n }\n\n return function init(element, initialOptions) {\n // all of the animation functions should create\n // a copy of the options data, however, if a\n // parent service has already created a copy then\n // we should stick to using that\n var options = initialOptions || {};\n if (!options.$$prepared) {\n options = prepareAnimationOptions(copy(options));\n }\n\n var restoreStyles = {};\n var node = getDomNode(element);\n if (!node\n || !node.parentNode\n || !$$animateQueue.enabled()) {\n return closeAndReturnNoopAnimator();\n }\n\n var temporaryStyles = [];\n var classes = element.attr('class');\n var styles = packageStyles(options);\n var animationClosed;\n var animationPaused;\n var animationCompleted;\n var runner;\n var runnerHost;\n var maxDelay;\n var maxDelayTime;\n var maxDuration;\n var maxDurationTime;\n var startTime;\n var events = [];\n\n if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {\n return closeAndReturnNoopAnimator();\n }\n\n var method = options.event && isArray(options.event)\n ? options.event.join(' ')\n : options.event;\n\n var isStructural = method && options.structural;\n var structuralClassName = '';\n var addRemoveClassName = '';\n\n if (isStructural) {\n structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);\n } else if (method) {\n structuralClassName = method;\n }\n\n if (options.addClass) {\n addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);\n }\n\n if (options.removeClass) {\n if (addRemoveClassName.length) {\n addRemoveClassName += ' ';\n }\n addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);\n }\n\n // there may be a situation where a structural animation is combined together\n // with CSS classes that need to resolve before the animation is computed.\n // However this means that there is no explicit CSS code to block the animation\n // from happening (by setting 0s none in the class name). If this is the case\n // we need to apply the classes before the first rAF so we know to continue if\n // there actually is a detected transition or keyframe animation\n if (options.applyClassesEarly && addRemoveClassName.length) {\n applyAnimationClasses(element, options);\n }\n\n var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();\n var fullClassName = classes + ' ' + preparationClasses;\n var hasToStyles = styles.to && Object.keys(styles.to).length > 0;\n var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;\n\n // there is no way we can trigger an animation if no styles and\n // no classes are being applied which would then trigger a transition,\n // unless there a is raw keyframe value that is applied to the element.\n if (!containsKeyframeAnimation\n && !hasToStyles\n && !preparationClasses) {\n return closeAndReturnNoopAnimator();\n }\n\n var stagger, cacheKey = $$animateCache.cacheKey(node, method, options.addClass, options.removeClass);\n if ($$animateCache.containsCachedAnimationWithoutDuration(cacheKey)) {\n preparationClasses = null;\n return closeAndReturnNoopAnimator();\n }\n\n if (options.stagger > 0) {\n var staggerVal = parseFloat(options.stagger);\n stagger = {\n transitionDelay: staggerVal,\n animationDelay: staggerVal,\n transitionDuration: 0,\n animationDuration: 0\n };\n } else {\n stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);\n }\n\n if (!options.$$skipPreparationClasses) {\n $$jqLite.addClass(element, preparationClasses);\n }\n\n var applyOnlyDuration;\n\n if (options.transitionStyle) {\n var transitionStyle = [TRANSITION_PROP, options.transitionStyle];\n applyInlineStyle(node, transitionStyle);\n temporaryStyles.push(transitionStyle);\n }\n\n if (options.duration >= 0) {\n applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;\n var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);\n\n // we set the duration so that it will be picked up by getComputedStyle later\n applyInlineStyle(node, durationStyle);\n temporaryStyles.push(durationStyle);\n }\n\n if (options.keyframeStyle) {\n var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];\n applyInlineStyle(node, keyframeStyle);\n temporaryStyles.push(keyframeStyle);\n }\n\n var itemIndex = stagger\n ? options.staggerIndex >= 0\n ? options.staggerIndex\n : $$animateCache.count(cacheKey)\n : 0;\n\n var isFirst = itemIndex === 0;\n\n // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY\n // without causing any combination of transitions to kick in. By adding a negative delay value\n // it forces the setup class' transition to end immediately. We later then remove the negative\n // transition delay to allow for the transition to naturally do it's thing. The beauty here is\n // that if there is no transition defined then nothing will happen and this will also allow\n // other transitions to be stacked on top of each other without any chopping them out.\n if (isFirst && !options.skipBlocking) {\n helpers.blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);\n }\n\n var timings = computeTimings(node, fullClassName, cacheKey, !isStructural);\n var relativeDelay = timings.maxDelay;\n maxDelay = Math.max(relativeDelay, 0);\n maxDuration = timings.maxDuration;\n\n var flags = {};\n flags.hasTransitions = timings.transitionDuration > 0;\n flags.hasAnimations = timings.animationDuration > 0;\n flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty === 'all';\n flags.applyTransitionDuration = hasToStyles && (\n (flags.hasTransitions && !flags.hasTransitionAll)\n || (flags.hasAnimations && !flags.hasTransitions));\n flags.applyAnimationDuration = options.duration && flags.hasAnimations;\n flags.applyTransitionDelay = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);\n flags.applyAnimationDelay = truthyTimingValue(options.delay) && flags.hasAnimations;\n flags.recalculateTimingStyles = addRemoveClassName.length > 0;\n\n if (flags.applyTransitionDuration || flags.applyAnimationDuration) {\n maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;\n\n if (flags.applyTransitionDuration) {\n flags.hasTransitions = true;\n timings.transitionDuration = maxDuration;\n applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;\n temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));\n }\n\n if (flags.applyAnimationDuration) {\n flags.hasAnimations = true;\n timings.animationDuration = maxDuration;\n temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));\n }\n }\n\n if (maxDuration === 0 && !flags.recalculateTimingStyles) {\n return closeAndReturnNoopAnimator();\n }\n\n var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);\n\n if (options.delay != null) {\n var delayStyle;\n if (typeof options.delay !== 'boolean') {\n delayStyle = parseFloat(options.delay);\n // number in options.delay means we have to recalculate the delay for the closing timeout\n maxDelay = Math.max(delayStyle, 0);\n }\n\n if (flags.applyTransitionDelay) {\n temporaryStyles.push(getCssDelayStyle(delayStyle));\n }\n\n if (flags.applyAnimationDelay) {\n temporaryStyles.push(getCssDelayStyle(delayStyle, true));\n }\n }\n\n // we need to recalculate the delay value since we used a pre-emptive negative\n // delay value and the delay value is required for the final event checking. This\n // property will ensure that this will happen after the RAF phase has passed.\n if (options.duration == null && timings.transitionDuration > 0) {\n flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;\n }\n\n maxDelayTime = maxDelay * ONE_SECOND;\n maxDurationTime = maxDuration * ONE_SECOND;\n if (!options.skipBlocking) {\n flags.blockTransition = timings.transitionDuration > 0;\n flags.blockKeyframeAnimation = timings.animationDuration > 0 &&\n stagger.animationDelay > 0 &&\n stagger.animationDuration === 0;\n }\n\n if (options.from) {\n if (options.cleanupStyles) {\n registerRestorableStyles(restoreStyles, node, Object.keys(options.from));\n }\n applyAnimationFromStyles(element, options);\n }\n\n if (flags.blockTransition || flags.blockKeyframeAnimation) {\n applyBlocking(maxDuration);\n } else if (!options.skipBlocking) {\n helpers.blockTransitions(node, false);\n }\n\n // TODO(matsko): for 1.5 change this code to have an animator object for better debugging\n return {\n $$willAnimate: true,\n end: endFn,\n start: function() {\n if (animationClosed) return;\n\n runnerHost = {\n end: endFn,\n cancel: cancelFn,\n resume: null, //this will be set during the start() phase\n pause: null\n };\n\n runner = new $$AnimateRunner(runnerHost);\n\n waitUntilQuiet(start);\n\n // we don't have access to pause/resume the animation\n // since it hasn't run yet. AnimateRunner will therefore\n // set noop functions for resume and pause and they will\n // later be overridden once the animation is triggered\n return runner;\n }\n };\n\n function endFn() {\n close();\n }\n\n function cancelFn() {\n close(true);\n }\n\n function close(rejected) {\n // if the promise has been called already then we shouldn't close\n // the animation again\n if (animationClosed || (animationCompleted && animationPaused)) return;\n animationClosed = true;\n animationPaused = false;\n\n if (preparationClasses && !options.$$skipPreparationClasses) {\n $$jqLite.removeClass(element, preparationClasses);\n }\n\n if (activeClasses) {\n $$jqLite.removeClass(element, activeClasses);\n }\n\n blockKeyframeAnimations(node, false);\n helpers.blockTransitions(node, false);\n\n forEach(temporaryStyles, function(entry) {\n // There is only one way to remove inline style properties entirely from elements.\n // By using `removeProperty` this works, but we need to convert camel-cased CSS\n // styles down to hyphenated values.\n node.style[entry[0]] = '';\n });\n\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n\n if (Object.keys(restoreStyles).length) {\n forEach(restoreStyles, function(value, prop) {\n if (value) {\n node.style.setProperty(prop, value);\n } else {\n node.style.removeProperty(prop);\n }\n });\n }\n\n // the reason why we have this option is to allow a synchronous closing callback\n // that is fired as SOON as the animation ends (when the CSS is removed) or if\n // the animation never takes off at all. A good example is a leave animation since\n // the element must be removed just after the animation is over or else the element\n // will appear on screen for one animation frame causing an overbearing flicker.\n if (options.onDone) {\n options.onDone();\n }\n\n if (events && events.length) {\n // Remove the transitionend / animationend listener(s)\n element.off(events.join(' '), onAnimationProgress);\n }\n\n //Cancel the fallback closing timeout and remove the timer data\n var animationTimerData = element.data(ANIMATE_TIMER_KEY);\n if (animationTimerData) {\n $timeout.cancel(animationTimerData[0].timer);\n element.removeData(ANIMATE_TIMER_KEY);\n }\n\n // if the preparation function fails then the promise is not setup\n if (runner) {\n runner.complete(!rejected);\n }\n }\n\n function applyBlocking(duration) {\n if (flags.blockTransition) {\n helpers.blockTransitions(node, duration);\n }\n\n if (flags.blockKeyframeAnimation) {\n blockKeyframeAnimations(node, !!duration);\n }\n }\n\n function closeAndReturnNoopAnimator() {\n runner = new $$AnimateRunner({\n end: endFn,\n cancel: cancelFn\n });\n\n // should flush the cache animation\n waitUntilQuiet(noop);\n close();\n\n return {\n $$willAnimate: false,\n start: function() {\n return runner;\n },\n end: endFn\n };\n }\n\n function onAnimationProgress(event) {\n event.stopPropagation();\n var ev = event.originalEvent || event;\n\n if (ev.target !== node) {\n // Since TransitionEvent / AnimationEvent bubble up,\n // we have to ignore events by finished child animations\n return;\n }\n\n // we now always use `Date.now()` due to the recent changes with\n // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info)\n var timeStamp = ev.$manualTimeStamp || Date.now();\n\n /* Firefox (or possibly just Gecko) likes to not round values up\n * when a ms measurement is used for the animation */\n var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\n\n /* $manualTimeStamp is a mocked timeStamp value which is set\n * within browserTrigger(). This is only here so that tests can\n * mock animations properly. Real events fallback to event.timeStamp,\n * or, if they don't, then a timeStamp is automatically created for them.\n * We're checking to see if the timeStamp surpasses the expected delay,\n * but we're using elapsedTime instead of the timeStamp on the 2nd\n * pre-condition since animationPauseds sometimes close off early */\n if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n // we set this flag to ensure that if the transition is paused then, when resumed,\n // the animation will automatically close itself since transitions cannot be paused.\n animationCompleted = true;\n close();\n }\n }\n\n function start() {\n if (animationClosed) return;\n if (!node.parentNode) {\n close();\n return;\n }\n\n // even though we only pause keyframe animations here the pause flag\n // will still happen when transitions are used. Only the transition will\n // not be paused since that is not possible. If the animation ends when\n // paused then it will not complete until unpaused or cancelled.\n var playPause = function(playAnimation) {\n if (!animationCompleted) {\n animationPaused = !playAnimation;\n if (timings.animationDuration) {\n var value = blockKeyframeAnimations(node, animationPaused);\n if (animationPaused) {\n temporaryStyles.push(value);\n } else {\n removeFromArray(temporaryStyles, value);\n }\n }\n } else if (animationPaused && playAnimation) {\n animationPaused = false;\n close();\n }\n };\n\n // checking the stagger duration prevents an accidentally cascade of the CSS delay style\n // being inherited from the parent. If the transition duration is zero then we can safely\n // rely that the delay value is an intentional stagger delay style.\n var maxStagger = itemIndex > 0\n && ((timings.transitionDuration && stagger.transitionDuration === 0) ||\n (timings.animationDuration && stagger.animationDuration === 0))\n && Math.max(stagger.animationDelay, stagger.transitionDelay);\n if (maxStagger) {\n $timeout(triggerAnimationStart,\n Math.floor(maxStagger * itemIndex * ONE_SECOND),\n false);\n } else {\n triggerAnimationStart();\n }\n\n // this will decorate the existing promise runner with pause/resume methods\n runnerHost.resume = function() {\n playPause(true);\n };\n\n runnerHost.pause = function() {\n playPause(false);\n };\n\n function triggerAnimationStart() {\n // just incase a stagger animation kicks in when the animation\n // itself was cancelled entirely\n if (animationClosed) return;\n\n applyBlocking(false);\n\n forEach(temporaryStyles, function(entry) {\n var key = entry[0];\n var value = entry[1];\n node.style[key] = value;\n });\n\n applyAnimationClasses(element, options);\n $$jqLite.addClass(element, activeClasses);\n\n if (flags.recalculateTimingStyles) {\n fullClassName = node.getAttribute('class') + ' ' + preparationClasses;\n cacheKey = $$animateCache.cacheKey(node, method, options.addClass, options.removeClass);\n\n timings = computeTimings(node, fullClassName, cacheKey, false);\n relativeDelay = timings.maxDelay;\n maxDelay = Math.max(relativeDelay, 0);\n maxDuration = timings.maxDuration;\n\n if (maxDuration === 0) {\n close();\n return;\n }\n\n flags.hasTransitions = timings.transitionDuration > 0;\n flags.hasAnimations = timings.animationDuration > 0;\n }\n\n if (flags.applyAnimationDelay) {\n relativeDelay = typeof options.delay !== 'boolean' && truthyTimingValue(options.delay)\n ? parseFloat(options.delay)\n : relativeDelay;\n\n maxDelay = Math.max(relativeDelay, 0);\n timings.animationDelay = relativeDelay;\n delayStyle = getCssDelayStyle(relativeDelay, true);\n temporaryStyles.push(delayStyle);\n node.style[delayStyle[0]] = delayStyle[1];\n }\n\n maxDelayTime = maxDelay * ONE_SECOND;\n maxDurationTime = maxDuration * ONE_SECOND;\n\n if (options.easing) {\n var easeProp, easeVal = options.easing;\n if (flags.hasTransitions) {\n easeProp = TRANSITION_PROP + TIMING_KEY;\n temporaryStyles.push([easeProp, easeVal]);\n node.style[easeProp] = easeVal;\n }\n if (flags.hasAnimations) {\n easeProp = ANIMATION_PROP + TIMING_KEY;\n temporaryStyles.push([easeProp, easeVal]);\n node.style[easeProp] = easeVal;\n }\n }\n\n if (timings.transitionDuration) {\n events.push(TRANSITIONEND_EVENT);\n }\n\n if (timings.animationDuration) {\n events.push(ANIMATIONEND_EVENT);\n }\n\n startTime = Date.now();\n var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;\n var endTime = startTime + timerTime;\n\n var animationsData = element.data(ANIMATE_TIMER_KEY) || [];\n var setupFallbackTimer = true;\n if (animationsData.length) {\n var currentTimerData = animationsData[0];\n setupFallbackTimer = endTime > currentTimerData.expectedEndTime;\n if (setupFallbackTimer) {\n $timeout.cancel(currentTimerData.timer);\n } else {\n animationsData.push(close);\n }\n }\n\n if (setupFallbackTimer) {\n var timer = $timeout(onAnimationExpired, timerTime, false);\n animationsData[0] = {\n timer: timer,\n expectedEndTime: endTime\n };\n animationsData.push(close);\n element.data(ANIMATE_TIMER_KEY, animationsData);\n }\n\n if (events.length) {\n element.on(events.join(' '), onAnimationProgress);\n }\n\n if (options.to) {\n if (options.cleanupStyles) {\n registerRestorableStyles(restoreStyles, node, Object.keys(options.to));\n }\n applyAnimationToStyles(element, options);\n }\n }\n\n function onAnimationExpired() {\n var animationsData = element.data(ANIMATE_TIMER_KEY);\n\n // this will be false in the event that the element was\n // removed from the DOM (via a leave animation or something\n // similar)\n if (animationsData) {\n for (var i = 1; i < animationsData.length; i++) {\n animationsData[i]();\n }\n element.removeData(ANIMATE_TIMER_KEY);\n }\n }\n }\n };\n }];\n}];\n\nvar $$AnimateCssDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {\n $$animationProvider.drivers.push('$$animateCssDriver');\n\n var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';\n var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';\n\n var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';\n var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';\n\n function isDocumentFragment(node) {\n return node.parentNode && node.parentNode.nodeType === 11;\n }\n\n this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',\n function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) {\n\n // only browsers that support these properties can render animations\n if (!$sniffer.animations && !$sniffer.transitions) return noop;\n\n var bodyNode = $document[0].body;\n var rootNode = getDomNode($rootElement);\n\n var rootBodyElement = jqLite(\n // this is to avoid using something that exists outside of the body\n // we also special case the doc fragment case because our unit test code\n // appends the $rootElement to the body after the app has been bootstrapped\n isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode\n );\n\n return function initDriverFn(animationDetails) {\n return animationDetails.from && animationDetails.to\n ? prepareFromToAnchorAnimation(animationDetails.from,\n animationDetails.to,\n animationDetails.classes,\n animationDetails.anchors)\n : prepareRegularAnimation(animationDetails);\n };\n\n function filterCssClasses(classes) {\n //remove all the `ng-` stuff\n return classes.replace(/\\bng-\\S+\\b/g, '');\n }\n\n function getUniqueValues(a, b) {\n if (isString(a)) a = a.split(' ');\n if (isString(b)) b = b.split(' ');\n return a.filter(function(val) {\n return b.indexOf(val) === -1;\n }).join(' ');\n }\n\n function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {\n var clone = jqLite(getDomNode(outAnchor).cloneNode(true));\n var startingClasses = filterCssClasses(getClassVal(clone));\n\n outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n\n clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);\n\n rootBodyElement.append(clone);\n\n var animatorIn, animatorOut = prepareOutAnimation();\n\n // the user may not end up using the `out` animation and\n // only making use of the `in` animation or vice-versa.\n // In either case we should allow this and not assume the\n // animation is over unless both animations are not used.\n if (!animatorOut) {\n animatorIn = prepareInAnimation();\n if (!animatorIn) {\n return end();\n }\n }\n\n var startingAnimator = animatorOut || animatorIn;\n\n return {\n start: function() {\n var runner;\n\n var currentAnimation = startingAnimator.start();\n currentAnimation.done(function() {\n currentAnimation = null;\n if (!animatorIn) {\n animatorIn = prepareInAnimation();\n if (animatorIn) {\n currentAnimation = animatorIn.start();\n currentAnimation.done(function() {\n currentAnimation = null;\n end();\n runner.complete();\n });\n return currentAnimation;\n }\n }\n // in the event that there is no `in` animation\n end();\n runner.complete();\n });\n\n runner = new $$AnimateRunner({\n end: endFn,\n cancel: endFn\n });\n\n return runner;\n\n function endFn() {\n if (currentAnimation) {\n currentAnimation.end();\n }\n }\n }\n };\n\n function calculateAnchorStyles(anchor) {\n var styles = {};\n\n var coords = getDomNode(anchor).getBoundingClientRect();\n\n // we iterate directly since safari messes up and doesn't return\n // all the keys for the coords object when iterated\n forEach(['width','height','top','left'], function(key) {\n var value = coords[key];\n switch (key) {\n case 'top':\n value += bodyNode.scrollTop;\n break;\n case 'left':\n value += bodyNode.scrollLeft;\n break;\n }\n styles[key] = Math.floor(value) + 'px';\n });\n return styles;\n }\n\n function prepareOutAnimation() {\n var animator = $animateCss(clone, {\n addClass: NG_OUT_ANCHOR_CLASS_NAME,\n delay: true,\n from: calculateAnchorStyles(outAnchor)\n });\n\n // read the comment within `prepareRegularAnimation` to understand\n // why this check is necessary\n return animator.$$willAnimate ? animator : null;\n }\n\n function getClassVal(element) {\n return element.attr('class') || '';\n }\n\n function prepareInAnimation() {\n var endingClasses = filterCssClasses(getClassVal(inAnchor));\n var toAdd = getUniqueValues(endingClasses, startingClasses);\n var toRemove = getUniqueValues(startingClasses, endingClasses);\n\n var animator = $animateCss(clone, {\n to: calculateAnchorStyles(inAnchor),\n addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,\n removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,\n delay: true\n });\n\n // read the comment within `prepareRegularAnimation` to understand\n // why this check is necessary\n return animator.$$willAnimate ? animator : null;\n }\n\n function end() {\n clone.remove();\n outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n }\n }\n\n function prepareFromToAnchorAnimation(from, to, classes, anchors) {\n var fromAnimation = prepareRegularAnimation(from, noop);\n var toAnimation = prepareRegularAnimation(to, noop);\n\n var anchorAnimations = [];\n forEach(anchors, function(anchor) {\n var outElement = anchor['out'];\n var inElement = anchor['in'];\n var animator = prepareAnchoredAnimation(classes, outElement, inElement);\n if (animator) {\n anchorAnimations.push(animator);\n }\n });\n\n // no point in doing anything when there are no elements to animate\n if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;\n\n return {\n start: function() {\n var animationRunners = [];\n\n if (fromAnimation) {\n animationRunners.push(fromAnimation.start());\n }\n\n if (toAnimation) {\n animationRunners.push(toAnimation.start());\n }\n\n forEach(anchorAnimations, function(animation) {\n animationRunners.push(animation.start());\n });\n\n var runner = new $$AnimateRunner({\n end: endFn,\n cancel: endFn // CSS-driven animations cannot be cancelled, only ended\n });\n\n $$AnimateRunner.all(animationRunners, function(status) {\n runner.complete(status);\n });\n\n return runner;\n\n function endFn() {\n forEach(animationRunners, function(runner) {\n runner.end();\n });\n }\n }\n };\n }\n\n function prepareRegularAnimation(animationDetails) {\n var element = animationDetails.element;\n var options = animationDetails.options || {};\n\n if (animationDetails.structural) {\n options.event = animationDetails.event;\n options.structural = true;\n options.applyClassesEarly = true;\n\n // we special case the leave animation since we want to ensure that\n // the element is removed as soon as the animation is over. Otherwise\n // a flicker might appear or the element may not be removed at all\n if (animationDetails.event === 'leave') {\n options.onDone = options.domOperation;\n }\n }\n\n // We assign the preparationClasses as the actual animation event since\n // the internals of $animateCss will just suffix the event token values\n // with `-active` to trigger the animation.\n if (options.preparationClasses) {\n options.event = concatWithSpace(options.event, options.preparationClasses);\n }\n\n var animator = $animateCss(element, options);\n\n // the driver lookup code inside of $$animation attempts to spawn a\n // driver one by one until a driver returns a.$$willAnimate animator object.\n // $animateCss will always return an object, however, it will pass in\n // a flag as a hint as to whether an animation was detected or not\n return animator.$$willAnimate ? animator : null;\n }\n }];\n}];\n\n// TODO(matsko): use caching here to speed things up for detection\n// TODO(matsko): add documentation\n// by the time...\n\nvar $$AnimateJsProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',\n function($injector, $$AnimateRunner, $$jqLite) {\n\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n // $animateJs(element, 'enter');\n return function(element, event, classes, options) {\n var animationClosed = false;\n\n // the `classes` argument is optional and if it is not used\n // then the classes will be resolved from the element's className\n // property as well as options.addClass/options.removeClass.\n if (arguments.length === 3 && isObject(classes)) {\n options = classes;\n classes = null;\n }\n\n options = prepareAnimationOptions(options);\n if (!classes) {\n classes = element.attr('class') || '';\n if (options.addClass) {\n classes += ' ' + options.addClass;\n }\n if (options.removeClass) {\n classes += ' ' + options.removeClass;\n }\n }\n\n var classesToAdd = options.addClass;\n var classesToRemove = options.removeClass;\n\n // the lookupAnimations function returns a series of animation objects that are\n // matched up with one or more of the CSS classes. These animation objects are\n // defined via the module.animation factory function. If nothing is detected then\n // we don't return anything which then makes $animation query the next driver.\n var animations = lookupAnimations(classes);\n var before, after;\n if (animations.length) {\n var afterFn, beforeFn;\n if (event === 'leave') {\n beforeFn = 'leave';\n afterFn = 'afterLeave'; // TODO(matsko): get rid of this\n } else {\n beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);\n afterFn = event;\n }\n\n if (event !== 'enter' && event !== 'move') {\n before = packageAnimations(element, event, options, animations, beforeFn);\n }\n after = packageAnimations(element, event, options, animations, afterFn);\n }\n\n // no matching animations\n if (!before && !after) return;\n\n function applyOptions() {\n options.domOperation();\n applyAnimationClasses(element, options);\n }\n\n function close() {\n animationClosed = true;\n applyOptions();\n applyAnimationStyles(element, options);\n }\n\n var runner;\n\n return {\n $$willAnimate: true,\n end: function() {\n if (runner) {\n runner.end();\n } else {\n close();\n runner = new $$AnimateRunner();\n runner.complete(true);\n }\n return runner;\n },\n start: function() {\n if (runner) {\n return runner;\n }\n\n runner = new $$AnimateRunner();\n var closeActiveAnimations;\n var chain = [];\n\n if (before) {\n chain.push(function(fn) {\n closeActiveAnimations = before(fn);\n });\n }\n\n if (chain.length) {\n chain.push(function(fn) {\n applyOptions();\n fn(true);\n });\n } else {\n applyOptions();\n }\n\n if (after) {\n chain.push(function(fn) {\n closeActiveAnimations = after(fn);\n });\n }\n\n runner.setHost({\n end: function() {\n endAnimations();\n },\n cancel: function() {\n endAnimations(true);\n }\n });\n\n $$AnimateRunner.chain(chain, onComplete);\n return runner;\n\n function onComplete(success) {\n close(success);\n runner.complete(success);\n }\n\n function endAnimations(cancelled) {\n if (!animationClosed) {\n (closeActiveAnimations || noop)(cancelled);\n onComplete(cancelled);\n }\n }\n }\n };\n\n function executeAnimationFn(fn, element, event, options, onDone) {\n var args;\n switch (event) {\n case 'animate':\n args = [element, options.from, options.to, onDone];\n break;\n\n case 'setClass':\n args = [element, classesToAdd, classesToRemove, onDone];\n break;\n\n case 'addClass':\n args = [element, classesToAdd, onDone];\n break;\n\n case 'removeClass':\n args = [element, classesToRemove, onDone];\n break;\n\n default:\n args = [element, onDone];\n break;\n }\n\n args.push(options);\n\n var value = fn.apply(fn, args);\n if (value) {\n if (isFunction(value.start)) {\n value = value.start();\n }\n\n if (value instanceof $$AnimateRunner) {\n value.done(onDone);\n } else if (isFunction(value)) {\n // optional onEnd / onCancel callback\n return value;\n }\n }\n\n return noop;\n }\n\n function groupEventedAnimations(element, event, options, animations, fnName) {\n var operations = [];\n forEach(animations, function(ani) {\n var animation = ani[fnName];\n if (!animation) return;\n\n // note that all of these animations will run in parallel\n operations.push(function() {\n var runner;\n var endProgressCb;\n\n var resolved = false;\n var onAnimationComplete = function(rejected) {\n if (!resolved) {\n resolved = true;\n (endProgressCb || noop)(rejected);\n runner.complete(!rejected);\n }\n };\n\n runner = new $$AnimateRunner({\n end: function() {\n onAnimationComplete();\n },\n cancel: function() {\n onAnimationComplete(true);\n }\n });\n\n endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {\n var cancelled = result === false;\n onAnimationComplete(cancelled);\n });\n\n return runner;\n });\n });\n\n return operations;\n }\n\n function packageAnimations(element, event, options, animations, fnName) {\n var operations = groupEventedAnimations(element, event, options, animations, fnName);\n if (operations.length === 0) {\n var a, b;\n if (fnName === 'beforeSetClass') {\n a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');\n b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');\n } else if (fnName === 'setClass') {\n a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');\n b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');\n }\n\n if (a) {\n operations = operations.concat(a);\n }\n if (b) {\n operations = operations.concat(b);\n }\n }\n\n if (operations.length === 0) return;\n\n // TODO(matsko): add documentation\n return function startAnimation(callback) {\n var runners = [];\n if (operations.length) {\n forEach(operations, function(animateFn) {\n runners.push(animateFn());\n });\n }\n\n if (runners.length) {\n $$AnimateRunner.all(runners, callback);\n } else {\n callback();\n }\n\n return function endFn(reject) {\n forEach(runners, function(runner) {\n if (reject) {\n runner.cancel();\n } else {\n runner.end();\n }\n });\n };\n };\n }\n };\n\n function lookupAnimations(classes) {\n classes = isArray(classes) ? classes : classes.split(' ');\n var matches = [], flagMap = {};\n for (var i = 0; i < classes.length; i++) {\n var klass = classes[i],\n animationFactory = $animateProvider.$$registeredAnimations[klass];\n if (animationFactory && !flagMap[klass]) {\n matches.push($injector.get(animationFactory));\n flagMap[klass] = true;\n }\n }\n return matches;\n }\n }];\n}];\n\nvar $$AnimateJsDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {\n $$animationProvider.drivers.push('$$animateJsDriver');\n this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {\n return function initDriverFn(animationDetails) {\n if (animationDetails.from && animationDetails.to) {\n var fromAnimation = prepareAnimation(animationDetails.from);\n var toAnimation = prepareAnimation(animationDetails.to);\n if (!fromAnimation && !toAnimation) return;\n\n return {\n start: function() {\n var animationRunners = [];\n\n if (fromAnimation) {\n animationRunners.push(fromAnimation.start());\n }\n\n if (toAnimation) {\n animationRunners.push(toAnimation.start());\n }\n\n $$AnimateRunner.all(animationRunners, done);\n\n var runner = new $$AnimateRunner({\n end: endFnFactory(),\n cancel: endFnFactory()\n });\n\n return runner;\n\n function endFnFactory() {\n return function() {\n forEach(animationRunners, function(runner) {\n // at this point we cannot cancel animations for groups just yet. 1.5+\n runner.end();\n });\n };\n }\n\n function done(status) {\n runner.complete(status);\n }\n }\n };\n } else {\n return prepareAnimation(animationDetails);\n }\n };\n\n function prepareAnimation(animationDetails) {\n // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations\n var element = animationDetails.element;\n var event = animationDetails.event;\n var options = animationDetails.options;\n var classes = animationDetails.classes;\n return $$animateJs(element, event, classes, options);\n }\n }];\n}];\n\nvar NG_ANIMATE_ATTR_NAME = 'data-ng-animate';\nvar NG_ANIMATE_PIN_DATA = '$ngAnimatePin';\nvar $$AnimateQueueProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n var PRE_DIGEST_STATE = 1;\n var RUNNING_STATE = 2;\n var ONE_SPACE = ' ';\n\n var rules = this.rules = {\n skip: [],\n cancel: [],\n join: []\n };\n\n function getEventData(options) {\n return {\n addClass: options.addClass,\n removeClass: options.removeClass,\n from: options.from,\n to: options.to\n };\n }\n\n function makeTruthyCssClassMap(classString) {\n if (!classString) {\n return null;\n }\n\n var keys = classString.split(ONE_SPACE);\n var map = Object.create(null);\n\n forEach(keys, function(key) {\n map[key] = true;\n });\n return map;\n }\n\n function hasMatchingClasses(newClassString, currentClassString) {\n if (newClassString && currentClassString) {\n var currentClassMap = makeTruthyCssClassMap(currentClassString);\n return newClassString.split(ONE_SPACE).some(function(className) {\n return currentClassMap[className];\n });\n }\n }\n\n function isAllowed(ruleType, currentAnimation, previousAnimation) {\n return rules[ruleType].some(function(fn) {\n return fn(currentAnimation, previousAnimation);\n });\n }\n\n function hasAnimationClasses(animation, and) {\n var a = (animation.addClass || '').length > 0;\n var b = (animation.removeClass || '').length > 0;\n return and ? a && b : a || b;\n }\n\n rules.join.push(function(newAnimation, currentAnimation) {\n // if the new animation is class-based then we can just tack that on\n return !newAnimation.structural && hasAnimationClasses(newAnimation);\n });\n\n rules.skip.push(function(newAnimation, currentAnimation) {\n // there is no need to animate anything if no classes are being added and\n // there is no structural animation that will be triggered\n return !newAnimation.structural && !hasAnimationClasses(newAnimation);\n });\n\n rules.skip.push(function(newAnimation, currentAnimation) {\n // why should we trigger a new structural animation if the element will\n // be removed from the DOM anyway?\n return currentAnimation.event === 'leave' && newAnimation.structural;\n });\n\n rules.skip.push(function(newAnimation, currentAnimation) {\n // if there is an ongoing current animation then don't even bother running the class-based animation\n return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;\n });\n\n rules.cancel.push(function(newAnimation, currentAnimation) {\n // there can never be two structural animations running at the same time\n return currentAnimation.structural && newAnimation.structural;\n });\n\n rules.cancel.push(function(newAnimation, currentAnimation) {\n // if the previous animation is already running, but the new animation will\n // be triggered, but the new animation is structural\n return currentAnimation.state === RUNNING_STATE && newAnimation.structural;\n });\n\n rules.cancel.push(function(newAnimation, currentAnimation) {\n // cancel the animation if classes added / removed in both animation cancel each other out,\n // but only if the current animation isn't structural\n\n if (currentAnimation.structural) return false;\n\n var nA = newAnimation.addClass;\n var nR = newAnimation.removeClass;\n var cA = currentAnimation.addClass;\n var cR = currentAnimation.removeClass;\n\n // early detection to save the global CPU shortage :)\n if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) {\n return false;\n }\n\n return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA);\n });\n\n this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$Map',\n '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',\n '$$isDocumentHidden',\n function($$rAF, $rootScope, $rootElement, $document, $$Map,\n $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow,\n $$isDocumentHidden) {\n\n var activeAnimationsLookup = new $$Map();\n var disabledElementsLookup = new $$Map();\n var animationsEnabled = null;\n\n function removeFromDisabledElementsLookup(evt) {\n disabledElementsLookup.delete(evt.target);\n }\n\n function postDigestTaskFactory() {\n var postDigestCalled = false;\n return function(fn) {\n // we only issue a call to postDigest before\n // it has first passed. This prevents any callbacks\n // from not firing once the animation has completed\n // since it will be out of the digest cycle.\n if (postDigestCalled) {\n fn();\n } else {\n $rootScope.$$postDigest(function() {\n postDigestCalled = true;\n fn();\n });\n }\n };\n }\n\n // Wait until all directive and route-related templates are downloaded and\n // compiled. The $templateRequest.totalPendingRequests variable keeps track of\n // all of the remote templates being currently downloaded. If there are no\n // templates currently downloading then the watcher will still fire anyway.\n var deregisterWatch = $rootScope.$watch(\n function() { return $templateRequest.totalPendingRequests === 0; },\n function(isEmpty) {\n if (!isEmpty) return;\n deregisterWatch();\n\n // Now that all templates have been downloaded, $animate will wait until\n // the post digest queue is empty before enabling animations. By having two\n // calls to $postDigest calls we can ensure that the flag is enabled at the\n // very end of the post digest queue. Since all of the animations in $animate\n // use $postDigest, it's important that the code below executes at the end.\n // This basically means that the page is fully downloaded and compiled before\n // any animations are triggered.\n $rootScope.$$postDigest(function() {\n $rootScope.$$postDigest(function() {\n // we check for null directly in the event that the application already called\n // .enabled() with whatever arguments that it provided it with\n if (animationsEnabled === null) {\n animationsEnabled = true;\n }\n });\n });\n }\n );\n\n var callbackRegistry = Object.create(null);\n\n // remember that the `customFilter`/`classNameFilter` are set during the\n // provider/config stage therefore we can optimize here and setup helper functions\n var customFilter = $animateProvider.customFilter();\n var classNameFilter = $animateProvider.classNameFilter();\n var returnTrue = function() { return true; };\n\n var isAnimatableByFilter = customFilter || returnTrue;\n var isAnimatableClassName = !classNameFilter ? returnTrue : function(node, options) {\n var className = [node.getAttribute('class'), options.addClass, options.removeClass].join(' ');\n return classNameFilter.test(className);\n };\n\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n function normalizeAnimationDetails(element, animation) {\n return mergeAnimationDetails(element, animation, {});\n }\n\n // IE9-11 has no method \"contains\" in SVG element and in Node.prototype. Bug #10259.\n var contains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return this === arg || !!(this.compareDocumentPosition(arg) & 16);\n };\n\n function findCallbacks(targetParentNode, targetNode, event) {\n var matches = [];\n var entries = callbackRegistry[event];\n if (entries) {\n forEach(entries, function(entry) {\n if (contains.call(entry.node, targetNode)) {\n matches.push(entry.callback);\n } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) {\n matches.push(entry.callback);\n }\n });\n }\n\n return matches;\n }\n\n function filterFromRegistry(list, matchContainer, matchCallback) {\n var containerNode = extractElementNode(matchContainer);\n return list.filter(function(entry) {\n var isMatch = entry.node === containerNode &&\n (!matchCallback || entry.callback === matchCallback);\n return !isMatch;\n });\n }\n\n function cleanupEventListeners(phase, node) {\n if (phase === 'close' && !node.parentNode) {\n // If the element is not attached to a parentNode, it has been removed by\n // the domOperation, and we can safely remove the event callbacks\n $animate.off(node);\n }\n }\n\n var $animate = {\n on: function(event, container, callback) {\n var node = extractElementNode(container);\n callbackRegistry[event] = callbackRegistry[event] || [];\n callbackRegistry[event].push({\n node: node,\n callback: callback\n });\n\n // Remove the callback when the element is removed from the DOM\n jqLite(container).on('$destroy', function() {\n var animationDetails = activeAnimationsLookup.get(node);\n\n if (!animationDetails) {\n // If there's an animation ongoing, the callback calling code will remove\n // the event listeners. If we'd remove here, the callbacks would be removed\n // before the animation ends\n $animate.off(event, container, callback);\n }\n });\n },\n\n off: function(event, container, callback) {\n if (arguments.length === 1 && !isString(arguments[0])) {\n container = arguments[0];\n for (var eventType in callbackRegistry) {\n callbackRegistry[eventType] = filterFromRegistry(callbackRegistry[eventType], container);\n }\n\n return;\n }\n\n var entries = callbackRegistry[event];\n if (!entries) return;\n\n callbackRegistry[event] = arguments.length === 1\n ? null\n : filterFromRegistry(entries, container, callback);\n },\n\n pin: function(element, parentElement) {\n assertArg(isElement(element), 'element', 'not an element');\n assertArg(isElement(parentElement), 'parentElement', 'not an element');\n element.data(NG_ANIMATE_PIN_DATA, parentElement);\n },\n\n push: function(element, event, options, domOperation) {\n options = options || {};\n options.domOperation = domOperation;\n return queueAnimation(element, event, options);\n },\n\n // this method has four signatures:\n // () - global getter\n // (bool) - global setter\n // (element) - element getter\n // (element, bool) - element setter\n enabled: function(element, bool) {\n var argCount = arguments.length;\n\n if (argCount === 0) {\n // () - Global getter\n bool = !!animationsEnabled;\n } else {\n var hasElement = isElement(element);\n\n if (!hasElement) {\n // (bool) - Global setter\n bool = animationsEnabled = !!element;\n } else {\n var node = getDomNode(element);\n\n if (argCount === 1) {\n // (element) - Element getter\n bool = !disabledElementsLookup.get(node);\n } else {\n // (element, bool) - Element setter\n if (!disabledElementsLookup.has(node)) {\n // The element is added to the map for the first time.\n // Create a listener to remove it on `$destroy` (to avoid memory leak).\n jqLite(element).on('$destroy', removeFromDisabledElementsLookup);\n }\n disabledElementsLookup.set(node, !bool);\n }\n }\n }\n\n return bool;\n }\n };\n\n return $animate;\n\n function queueAnimation(originalElement, event, initialOptions) {\n // we always make a copy of the options since\n // there should never be any side effects on\n // the input data when running `$animateCss`.\n var options = copy(initialOptions);\n\n var element = stripCommentsFromElement(originalElement);\n var node = getDomNode(element);\n var parentNode = node && node.parentNode;\n\n options = prepareAnimationOptions(options);\n\n // we create a fake runner with a working promise.\n // These methods will become available after the digest has passed\n var runner = new $$AnimateRunner();\n\n // this is used to trigger callbacks in postDigest mode\n var runInNextPostDigestOrNow = postDigestTaskFactory();\n\n if (isArray(options.addClass)) {\n options.addClass = options.addClass.join(' ');\n }\n\n if (options.addClass && !isString(options.addClass)) {\n options.addClass = null;\n }\n\n if (isArray(options.removeClass)) {\n options.removeClass = options.removeClass.join(' ');\n }\n\n if (options.removeClass && !isString(options.removeClass)) {\n options.removeClass = null;\n }\n\n if (options.from && !isObject(options.from)) {\n options.from = null;\n }\n\n if (options.to && !isObject(options.to)) {\n options.to = null;\n }\n\n // If animations are hard-disabled for the whole application there is no need to continue.\n // There are also situations where a directive issues an animation for a jqLite wrapper that\n // contains only comment nodes. In this case, there is no way we can perform an animation.\n if (!animationsEnabled ||\n !node ||\n !isAnimatableByFilter(node, event, initialOptions) ||\n !isAnimatableClassName(node, options)) {\n close();\n return runner;\n }\n\n var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\n var documentHidden = $$isDocumentHidden();\n\n // This is a hard disable of all animations the element itself, therefore there is no need to\n // continue further past this point if not enabled\n // Animations are also disabled if the document is currently hidden (page is not visible\n // to the user), because browsers slow down or do not flush calls to requestAnimationFrame\n var skipAnimations = documentHidden || disabledElementsLookup.get(node);\n var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};\n var hasExistingAnimation = !!existingAnimation.state;\n\n // there is no point in traversing the same collection of parent ancestors if a followup\n // animation will be run on the same element that already did all that checking work\n if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state !== PRE_DIGEST_STATE)) {\n skipAnimations = !areAnimationsAllowed(node, parentNode, event);\n }\n\n if (skipAnimations) {\n // Callbacks should fire even if the document is hidden (regression fix for issue #14120)\n if (documentHidden) notifyProgress(runner, event, 'start', getEventData(options));\n close();\n if (documentHidden) notifyProgress(runner, event, 'close', getEventData(options));\n return runner;\n }\n\n if (isStructural) {\n closeChildAnimations(node);\n }\n\n var newAnimation = {\n structural: isStructural,\n element: element,\n event: event,\n addClass: options.addClass,\n removeClass: options.removeClass,\n close: close,\n options: options,\n runner: runner\n };\n\n if (hasExistingAnimation) {\n var skipAnimationFlag = isAllowed('skip', newAnimation, existingAnimation);\n if (skipAnimationFlag) {\n if (existingAnimation.state === RUNNING_STATE) {\n close();\n return runner;\n } else {\n mergeAnimationDetails(element, existingAnimation, newAnimation);\n return existingAnimation.runner;\n }\n }\n var cancelAnimationFlag = isAllowed('cancel', newAnimation, existingAnimation);\n if (cancelAnimationFlag) {\n if (existingAnimation.state === RUNNING_STATE) {\n // this will end the animation right away and it is safe\n // to do so since the animation is already running and the\n // runner callback code will run in async\n existingAnimation.runner.end();\n } else if (existingAnimation.structural) {\n // this means that the animation is queued into a digest, but\n // hasn't started yet. Therefore it is safe to run the close\n // method which will call the runner methods in async.\n existingAnimation.close();\n } else {\n // this will merge the new animation options into existing animation options\n mergeAnimationDetails(element, existingAnimation, newAnimation);\n\n return existingAnimation.runner;\n }\n } else {\n // a joined animation means that this animation will take over the existing one\n // so an example would involve a leave animation taking over an enter. Then when\n // the postDigest kicks in the enter will be ignored.\n var joinAnimationFlag = isAllowed('join', newAnimation, existingAnimation);\n if (joinAnimationFlag) {\n if (existingAnimation.state === RUNNING_STATE) {\n normalizeAnimationDetails(element, newAnimation);\n } else {\n applyGeneratedPreparationClasses($$jqLite, element, isStructural ? event : null, options);\n\n event = newAnimation.event = existingAnimation.event;\n options = mergeAnimationDetails(element, existingAnimation, newAnimation);\n\n //we return the same runner since only the option values of this animation will\n //be fed into the `existingAnimation`.\n return existingAnimation.runner;\n }\n }\n }\n } else {\n // normalization in this case means that it removes redundant CSS classes that\n // already exist (addClass) or do not exist (removeClass) on the element\n normalizeAnimationDetails(element, newAnimation);\n }\n\n // when the options are merged and cleaned up we may end up not having to do\n // an animation at all, therefore we should check this before issuing a post\n // digest callback. Structural animations will always run no matter what.\n var isValidAnimation = newAnimation.structural;\n if (!isValidAnimation) {\n // animate (from/to) can be quickly checked first, otherwise we check if any classes are present\n isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0)\n || hasAnimationClasses(newAnimation);\n }\n\n if (!isValidAnimation) {\n close();\n clearElementAnimationState(node);\n return runner;\n }\n\n // the counter keeps track of cancelled animations\n var counter = (existingAnimation.counter || 0) + 1;\n newAnimation.counter = counter;\n\n markElementAnimationState(node, PRE_DIGEST_STATE, newAnimation);\n\n $rootScope.$$postDigest(function() {\n // It is possible that the DOM nodes inside `originalElement` have been replaced. This can\n // happen if the animated element is a transcluded clone and also has a `templateUrl`\n // directive on it. Therefore, we must recreate `element` in order to interact with the\n // actual DOM nodes.\n // Note: We still need to use the old `node` for certain things, such as looking up in\n // HashMaps where it was used as the key.\n\n element = stripCommentsFromElement(originalElement);\n\n var animationDetails = activeAnimationsLookup.get(node);\n var animationCancelled = !animationDetails;\n animationDetails = animationDetails || {};\n\n // if addClass/removeClass is called before something like enter then the\n // registered parent element may not be present. The code below will ensure\n // that a final value for parent element is obtained\n var parentElement = element.parent() || [];\n\n // animate/structural/class-based animations all have requirements. Otherwise there\n // is no point in performing an animation. The parent node must also be set.\n var isValidAnimation = parentElement.length > 0\n && (animationDetails.event === 'animate'\n || animationDetails.structural\n || hasAnimationClasses(animationDetails));\n\n // this means that the previous animation was cancelled\n // even if the follow-up animation is the same event\n if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) {\n // if another animation did not take over then we need\n // to make sure that the domOperation and options are\n // handled accordingly\n if (animationCancelled) {\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n }\n\n // if the event changed from something like enter to leave then we do\n // it, otherwise if it's the same then the end result will be the same too\n if (animationCancelled || (isStructural && animationDetails.event !== event)) {\n options.domOperation();\n runner.end();\n }\n\n // in the event that the element animation was not cancelled or a follow-up animation\n // isn't allowed to animate from here then we need to clear the state of the element\n // so that any future animations won't read the expired animation data.\n if (!isValidAnimation) {\n clearElementAnimationState(node);\n }\n\n return;\n }\n\n // this combined multiple class to addClass / removeClass into a setClass event\n // so long as a structural event did not take over the animation\n event = !animationDetails.structural && hasAnimationClasses(animationDetails, true)\n ? 'setClass'\n : animationDetails.event;\n\n markElementAnimationState(node, RUNNING_STATE);\n var realRunner = $$animation(element, event, animationDetails.options);\n\n // this will update the runner's flow-control events based on\n // the `realRunner` object.\n runner.setHost(realRunner);\n notifyProgress(runner, event, 'start', getEventData(options));\n\n realRunner.done(function(status) {\n close(!status);\n var animationDetails = activeAnimationsLookup.get(node);\n if (animationDetails && animationDetails.counter === counter) {\n clearElementAnimationState(node);\n }\n notifyProgress(runner, event, 'close', getEventData(options));\n });\n });\n\n return runner;\n\n function notifyProgress(runner, event, phase, data) {\n runInNextPostDigestOrNow(function() {\n var callbacks = findCallbacks(parentNode, node, event);\n if (callbacks.length) {\n // do not optimize this call here to RAF because\n // we don't know how heavy the callback code here will\n // be and if this code is buffered then this can\n // lead to a performance regression.\n $$rAF(function() {\n forEach(callbacks, function(callback) {\n callback(element, phase, data);\n });\n cleanupEventListeners(phase, node);\n });\n } else {\n cleanupEventListeners(phase, node);\n }\n });\n runner.progress(event, phase, data);\n }\n\n function close(reject) {\n clearGeneratedClasses(element, options);\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n options.domOperation();\n runner.complete(!reject);\n }\n }\n\n function closeChildAnimations(node) {\n var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');\n forEach(children, function(child) {\n var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME), 10);\n var animationDetails = activeAnimationsLookup.get(child);\n if (animationDetails) {\n switch (state) {\n case RUNNING_STATE:\n animationDetails.runner.end();\n /* falls through */\n case PRE_DIGEST_STATE:\n activeAnimationsLookup.delete(child);\n break;\n }\n }\n });\n }\n\n function clearElementAnimationState(node) {\n node.removeAttribute(NG_ANIMATE_ATTR_NAME);\n activeAnimationsLookup.delete(node);\n }\n\n /**\n * This fn returns false if any of the following is true:\n * a) animations on any parent element are disabled, and animations on the element aren't explicitly allowed\n * b) a parent element has an ongoing structural animation, and animateChildren is false\n * c) the element is not a child of the body\n * d) the element is not a child of the $rootElement\n */\n function areAnimationsAllowed(node, parentNode, event) {\n var bodyNode = $document[0].body;\n var rootNode = getDomNode($rootElement);\n\n var bodyNodeDetected = (node === bodyNode) || node.nodeName === 'HTML';\n var rootNodeDetected = (node === rootNode);\n var parentAnimationDetected = false;\n var elementDisabled = disabledElementsLookup.get(node);\n var animateChildren;\n\n var parentHost = jqLite.data(node, NG_ANIMATE_PIN_DATA);\n if (parentHost) {\n parentNode = getDomNode(parentHost);\n }\n\n while (parentNode) {\n if (!rootNodeDetected) {\n // AngularJS doesn't want to attempt to animate elements outside of the application\n // therefore we need to ensure that the rootElement is an ancestor of the current element\n rootNodeDetected = (parentNode === rootNode);\n }\n\n if (parentNode.nodeType !== ELEMENT_NODE) {\n // no point in inspecting the #document element\n break;\n }\n\n var details = activeAnimationsLookup.get(parentNode) || {};\n // either an enter, leave or move animation will commence\n // therefore we can't allow any animations to take place\n // but if a parent animation is class-based then that's ok\n if (!parentAnimationDetected) {\n var parentNodeDisabled = disabledElementsLookup.get(parentNode);\n\n if (parentNodeDisabled === true && elementDisabled !== false) {\n // disable animations if the user hasn't explicitly enabled animations on the\n // current element\n elementDisabled = true;\n // element is disabled via parent element, no need to check anything else\n break;\n } else if (parentNodeDisabled === false) {\n elementDisabled = false;\n }\n parentAnimationDetected = details.structural;\n }\n\n if (isUndefined(animateChildren) || animateChildren === true) {\n var value = jqLite.data(parentNode, NG_ANIMATE_CHILDREN_DATA);\n if (isDefined(value)) {\n animateChildren = value;\n }\n }\n\n // there is no need to continue traversing at this point\n if (parentAnimationDetected && animateChildren === false) break;\n\n if (!bodyNodeDetected) {\n // we also need to ensure that the element is or will be a part of the body element\n // otherwise it is pointless to even issue an animation to be rendered\n bodyNodeDetected = (parentNode === bodyNode);\n }\n\n if (bodyNodeDetected && rootNodeDetected) {\n // If both body and root have been found, any other checks are pointless,\n // as no animation data should live outside the application\n break;\n }\n\n if (!rootNodeDetected) {\n // If `rootNode` is not detected, check if `parentNode` is pinned to another element\n parentHost = jqLite.data(parentNode, NG_ANIMATE_PIN_DATA);\n if (parentHost) {\n // The pin target element becomes the next parent element\n parentNode = getDomNode(parentHost);\n continue;\n }\n }\n\n parentNode = parentNode.parentNode;\n }\n\n var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true;\n return allowAnimation && rootNodeDetected && bodyNodeDetected;\n }\n\n function markElementAnimationState(node, state, details) {\n details = details || {};\n details.state = state;\n\n node.setAttribute(NG_ANIMATE_ATTR_NAME, state);\n\n var oldValue = activeAnimationsLookup.get(node);\n var newValue = oldValue\n ? extend(oldValue, details)\n : details;\n activeAnimationsLookup.set(node, newValue);\n }\n }];\n}];\n\n/** @this */\nvar $$AnimateCacheProvider = function() {\n\n var KEY = '$$ngAnimateParentKey';\n var parentCounter = 0;\n var cache = Object.create(null);\n\n this.$get = [function() {\n return {\n cacheKey: function(node, method, addClass, removeClass) {\n var parentNode = node.parentNode;\n var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);\n var parts = [parentID, method, node.getAttribute('class')];\n if (addClass) {\n parts.push(addClass);\n }\n if (removeClass) {\n parts.push(removeClass);\n }\n return parts.join(' ');\n },\n\n containsCachedAnimationWithoutDuration: function(key) {\n var entry = cache[key];\n\n // nothing cached, so go ahead and animate\n // otherwise it should be a valid animation\n return (entry && !entry.isValid) || false;\n },\n\n flush: function() {\n cache = Object.create(null);\n },\n\n count: function(key) {\n var entry = cache[key];\n return entry ? entry.total : 0;\n },\n\n get: function(key) {\n var entry = cache[key];\n return entry && entry.value;\n },\n\n put: function(key, value, isValid) {\n if (!cache[key]) {\n cache[key] = { total: 1, value: value, isValid: isValid };\n } else {\n cache[key].total++;\n cache[key].value = value;\n }\n }\n };\n }];\n};\n\n/* exported $$AnimationProvider */\n\nvar $$AnimationProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';\n\n var drivers = this.drivers = [];\n\n var RUNNER_STORAGE_KEY = '$$animationRunner';\n var PREPARE_CLASSES_KEY = '$$animatePrepareClasses';\n\n function setRunner(element, runner) {\n element.data(RUNNER_STORAGE_KEY, runner);\n }\n\n function removeRunner(element) {\n element.removeData(RUNNER_STORAGE_KEY);\n }\n\n function getRunner(element) {\n return element.data(RUNNER_STORAGE_KEY);\n }\n\n this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$Map', '$$rAFScheduler', '$$animateCache',\n function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$Map, $$rAFScheduler, $$animateCache) {\n\n var animationQueue = [];\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n function sortAnimations(animations) {\n var tree = { children: [] };\n var i, lookup = new $$Map();\n\n // this is done first beforehand so that the map\n // is filled with a list of the elements that will be animated\n for (i = 0; i < animations.length; i++) {\n var animation = animations[i];\n lookup.set(animation.domNode, animations[i] = {\n domNode: animation.domNode,\n element: animation.element,\n fn: animation.fn,\n children: []\n });\n }\n\n for (i = 0; i < animations.length; i++) {\n processNode(animations[i]);\n }\n\n return flatten(tree);\n\n function processNode(entry) {\n if (entry.processed) return entry;\n entry.processed = true;\n\n var elementNode = entry.domNode;\n var parentNode = elementNode.parentNode;\n lookup.set(elementNode, entry);\n\n var parentEntry;\n while (parentNode) {\n parentEntry = lookup.get(parentNode);\n if (parentEntry) {\n if (!parentEntry.processed) {\n parentEntry = processNode(parentEntry);\n }\n break;\n }\n parentNode = parentNode.parentNode;\n }\n\n (parentEntry || tree).children.push(entry);\n return entry;\n }\n\n function flatten(tree) {\n var result = [];\n var queue = [];\n var i;\n\n for (i = 0; i < tree.children.length; i++) {\n queue.push(tree.children[i]);\n }\n\n var remainingLevelEntries = queue.length;\n var nextLevelEntries = 0;\n var row = [];\n\n for (i = 0; i < queue.length; i++) {\n var entry = queue[i];\n if (remainingLevelEntries <= 0) {\n remainingLevelEntries = nextLevelEntries;\n nextLevelEntries = 0;\n result.push(row);\n row = [];\n }\n row.push(entry);\n entry.children.forEach(function(childEntry) {\n nextLevelEntries++;\n queue.push(childEntry);\n });\n remainingLevelEntries--;\n }\n\n if (row.length) {\n result.push(row);\n }\n\n return result;\n }\n }\n\n // TODO(matsko): document the signature in a better way\n return function(element, event, options) {\n options = prepareAnimationOptions(options);\n var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\n // there is no animation at the current moment, however\n // these runner methods will get later updated with the\n // methods leading into the driver's end/cancel methods\n // for now they just stop the animation from starting\n var runner = new $$AnimateRunner({\n end: function() { close(); },\n cancel: function() { close(true); }\n });\n\n if (!drivers.length) {\n close();\n return runner;\n }\n\n var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass));\n var tempClasses = options.tempClasses;\n if (tempClasses) {\n classes += ' ' + tempClasses;\n options.tempClasses = null;\n }\n\n if (isStructural) {\n element.data(PREPARE_CLASSES_KEY, 'ng-' + event + PREPARE_CLASS_SUFFIX);\n }\n\n setRunner(element, runner);\n\n animationQueue.push({\n // this data is used by the postDigest code and passed into\n // the driver step function\n element: element,\n classes: classes,\n event: event,\n structural: isStructural,\n options: options,\n beforeStart: beforeStart,\n close: close\n });\n\n element.on('$destroy', handleDestroyedElement);\n\n // we only want there to be one function called within the post digest\n // block. This way we can group animations for all the animations that\n // were apart of the same postDigest flush call.\n if (animationQueue.length > 1) return runner;\n\n $rootScope.$$postDigest(function() {\n var animations = [];\n forEach(animationQueue, function(entry) {\n // the element was destroyed early on which removed the runner\n // form its storage. This means we can't animate this element\n // at all and it already has been closed due to destruction.\n if (getRunner(entry.element)) {\n animations.push(entry);\n } else {\n entry.close();\n }\n });\n\n // now any future animations will be in another postDigest\n animationQueue.length = 0;\n\n var groupedAnimations = groupAnimations(animations);\n var toBeSortedAnimations = [];\n\n forEach(groupedAnimations, function(animationEntry) {\n var element = animationEntry.from ? animationEntry.from.element : animationEntry.element;\n var extraClasses = options.addClass;\n\n extraClasses = (extraClasses ? (extraClasses + ' ') : '') + NG_ANIMATE_CLASSNAME;\n var cacheKey = $$animateCache.cacheKey(element[0], animationEntry.event, extraClasses, options.removeClass);\n\n toBeSortedAnimations.push({\n element: element,\n domNode: getDomNode(element),\n fn: function triggerAnimationStart() {\n var startAnimationFn, closeFn = animationEntry.close;\n\n // in the event that we've cached the animation status for this element\n // and it's in fact an invalid animation (something that has duration = 0)\n // then we should skip all the heavy work from here on\n if ($$animateCache.containsCachedAnimationWithoutDuration(cacheKey)) {\n closeFn();\n return;\n }\n\n // it's important that we apply the `ng-animate` CSS class and the\n // temporary classes before we do any driver invoking since these\n // CSS classes may be required for proper CSS detection.\n animationEntry.beforeStart();\n\n // in the event that the element was removed before the digest runs or\n // during the RAF sequencing then we should not trigger the animation.\n var targetElement = animationEntry.anchors\n ? (animationEntry.from.element || animationEntry.to.element)\n : animationEntry.element;\n\n if (getRunner(targetElement)) {\n var operation = invokeFirstDriver(animationEntry);\n if (operation) {\n startAnimationFn = operation.start;\n }\n }\n\n if (!startAnimationFn) {\n closeFn();\n } else {\n var animationRunner = startAnimationFn();\n animationRunner.done(function(status) {\n closeFn(!status);\n });\n updateAnimationRunners(animationEntry, animationRunner);\n }\n }\n });\n });\n\n // we need to sort each of the animations in order of parent to child\n // relationships. This ensures that the child classes are applied at the\n // right time.\n var finalAnimations = sortAnimations(toBeSortedAnimations);\n for (var i = 0; i < finalAnimations.length; i++) {\n var innerArray = finalAnimations[i];\n for (var j = 0; j < innerArray.length; j++) {\n var entry = innerArray[j];\n var element = entry.element;\n\n // the RAFScheduler code only uses functions\n finalAnimations[i][j] = entry.fn;\n\n // the first row of elements shouldn't have a prepare-class added to them\n // since the elements are at the top of the animation hierarchy and they\n // will be applied without a RAF having to pass...\n if (i === 0) {\n element.removeData(PREPARE_CLASSES_KEY);\n continue;\n }\n\n var prepareClassName = element.data(PREPARE_CLASSES_KEY);\n if (prepareClassName) {\n $$jqLite.addClass(element, prepareClassName);\n }\n }\n }\n\n $$rAFScheduler(finalAnimations);\n });\n\n return runner;\n\n // TODO(matsko): change to reference nodes\n function getAnchorNodes(node) {\n var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']';\n var items = node.hasAttribute(NG_ANIMATE_REF_ATTR)\n ? [node]\n : node.querySelectorAll(SELECTOR);\n var anchors = [];\n forEach(items, function(node) {\n var attr = node.getAttribute(NG_ANIMATE_REF_ATTR);\n if (attr && attr.length) {\n anchors.push(node);\n }\n });\n return anchors;\n }\n\n function groupAnimations(animations) {\n var preparedAnimations = [];\n var refLookup = {};\n forEach(animations, function(animation, index) {\n var element = animation.element;\n var node = getDomNode(element);\n var event = animation.event;\n var enterOrMove = ['enter', 'move'].indexOf(event) >= 0;\n var anchorNodes = animation.structural ? getAnchorNodes(node) : [];\n\n if (anchorNodes.length) {\n var direction = enterOrMove ? 'to' : 'from';\n\n forEach(anchorNodes, function(anchor) {\n var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR);\n refLookup[key] = refLookup[key] || {};\n refLookup[key][direction] = {\n animationID: index,\n element: jqLite(anchor)\n };\n });\n } else {\n preparedAnimations.push(animation);\n }\n });\n\n var usedIndicesLookup = {};\n var anchorGroups = {};\n forEach(refLookup, function(operations, key) {\n var from = operations.from;\n var to = operations.to;\n\n if (!from || !to) {\n // only one of these is set therefore we can't have an\n // anchor animation since all three pieces are required\n var index = from ? from.animationID : to.animationID;\n var indexKey = index.toString();\n if (!usedIndicesLookup[indexKey]) {\n usedIndicesLookup[indexKey] = true;\n preparedAnimations.push(animations[index]);\n }\n return;\n }\n\n var fromAnimation = animations[from.animationID];\n var toAnimation = animations[to.animationID];\n var lookupKey = from.animationID.toString();\n if (!anchorGroups[lookupKey]) {\n var group = anchorGroups[lookupKey] = {\n structural: true,\n beforeStart: function() {\n fromAnimation.beforeStart();\n toAnimation.beforeStart();\n },\n close: function() {\n fromAnimation.close();\n toAnimation.close();\n },\n classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes),\n from: fromAnimation,\n to: toAnimation,\n anchors: [] // TODO(matsko): change to reference nodes\n };\n\n // the anchor animations require that the from and to elements both have at least\n // one shared CSS class which effectively marries the two elements together to use\n // the same animation driver and to properly sequence the anchor animation.\n if (group.classes.length) {\n preparedAnimations.push(group);\n } else {\n preparedAnimations.push(fromAnimation);\n preparedAnimations.push(toAnimation);\n }\n }\n\n anchorGroups[lookupKey].anchors.push({\n 'out': from.element, 'in': to.element\n });\n });\n\n return preparedAnimations;\n }\n\n function cssClassesIntersection(a,b) {\n a = a.split(' ');\n b = b.split(' ');\n var matches = [];\n\n for (var i = 0; i < a.length; i++) {\n var aa = a[i];\n if (aa.substring(0,3) === 'ng-') continue;\n\n for (var j = 0; j < b.length; j++) {\n if (aa === b[j]) {\n matches.push(aa);\n break;\n }\n }\n }\n\n return matches.join(' ');\n }\n\n function invokeFirstDriver(animationDetails) {\n // we loop in reverse order since the more general drivers (like CSS and JS)\n // may attempt more elements, but custom drivers are more particular\n for (var i = drivers.length - 1; i >= 0; i--) {\n var driverName = drivers[i];\n var factory = $injector.get(driverName);\n var driver = factory(animationDetails);\n if (driver) {\n return driver;\n }\n }\n }\n\n function beforeStart() {\n tempClasses = (tempClasses ? (tempClasses + ' ') : '') + NG_ANIMATE_CLASSNAME;\n $$jqLite.addClass(element, tempClasses);\n\n var prepareClassName = element.data(PREPARE_CLASSES_KEY);\n if (prepareClassName) {\n $$jqLite.removeClass(element, prepareClassName);\n prepareClassName = null;\n }\n }\n\n function updateAnimationRunners(animation, newRunner) {\n if (animation.from && animation.to) {\n update(animation.from.element);\n update(animation.to.element);\n } else {\n update(animation.element);\n }\n\n function update(element) {\n var runner = getRunner(element);\n if (runner) runner.setHost(newRunner);\n }\n }\n\n function handleDestroyedElement() {\n var runner = getRunner(element);\n if (runner && (event !== 'leave' || !options.$$domOperationFired)) {\n runner.end();\n }\n }\n\n function close(rejected) {\n element.off('$destroy', handleDestroyedElement);\n removeRunner(element);\n\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n options.domOperation();\n\n if (tempClasses) {\n $$jqLite.removeClass(element, tempClasses);\n }\n\n runner.complete(!rejected);\n }\n };\n }];\n}];\n\n/**\n * @ngdoc directive\n * @name ngAnimateSwap\n * @restrict A\n * @scope\n *\n * @description\n *\n * ngAnimateSwap is a animation-oriented directive that allows for the container to\n * be removed and entered in whenever the associated expression changes. A\n * common usecase for this directive is a rotating banner or slider component which\n * contains one image being present at a time. When the active image changes\n * then the old image will perform a `leave` animation and the new element\n * will be inserted via an `enter` animation.\n *\n * @animations\n * | Animation | Occurs |\n * |----------------------------------|--------------------------------------|\n * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |\n * | {@link ng.$animate#leave leave} | when the old element is removed from the DOM |\n *\n * @example\n * \n * \n *
\n *
\n * {{ number }}\n *
\n *
\n *
\n * \n * angular.module('ngAnimateSwapExample', ['ngAnimate'])\n * .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) {\n * $scope.number = 0;\n * $interval(function() {\n * $scope.number++;\n * }, 1000);\n *\n * var colors = ['red','blue','green','yellow','orange'];\n * $scope.colorClass = function(number) {\n * return colors[number % colors.length];\n * };\n * }]);\n * \n * \n * .container {\n * height:250px;\n * width:250px;\n * position:relative;\n * overflow:hidden;\n * border:2px solid black;\n * }\n * .container .cell {\n * font-size:150px;\n * text-align:center;\n * line-height:250px;\n * position:absolute;\n * top:0;\n * left:0;\n * right:0;\n * border-bottom:2px solid black;\n * }\n * .swap-animation.ng-enter, .swap-animation.ng-leave {\n * transition:0.5s linear all;\n * }\n * .swap-animation.ng-enter {\n * top:-250px;\n * }\n * .swap-animation.ng-enter-active {\n * top:0px;\n * }\n * .swap-animation.ng-leave {\n * top:0px;\n * }\n * .swap-animation.ng-leave-active {\n * top:250px;\n * }\n * .red { background:red; }\n * .green { background:green; }\n * .blue { background:blue; }\n * .yellow { background:yellow; }\n * .orange { background:orange; }\n * \n *
\n */\nvar ngAnimateSwapDirective = ['$animate', function($animate) {\n return {\n restrict: 'A',\n transclude: 'element',\n terminal: true,\n priority: 550, // We use 550 here to ensure that the directive is caught before others,\n // but after `ngIf` (at priority 600).\n link: function(scope, $element, attrs, ctrl, $transclude) {\n var previousElement, previousScope;\n scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) {\n if (previousElement) {\n $animate.leave(previousElement);\n }\n if (previousScope) {\n previousScope.$destroy();\n previousScope = null;\n }\n if (value || value === 0) {\n $transclude(function(clone, childScope) {\n previousElement = clone;\n previousScope = childScope;\n $animate.enter(clone, null, $element);\n });\n }\n });\n }\n };\n}];\n\n/**\n * @ngdoc module\n * @name ngAnimate\n * @description\n *\n * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via\n * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an AngularJS app.\n *\n * ## Usage\n * Simply put, there are two ways to make use of animations when ngAnimate is used: by using **CSS** and **JavaScript**. The former works purely based\n * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For\n * both CSS and JS animations the sole requirement is to have a matching `CSS class` that exists both in the registered animation and within\n * the HTML element that the animation will be triggered on.\n *\n * ## Directive Support\n * The following directives are \"animation aware\":\n *\n * | Directive | Supported Animations |\n * |-------------------------------------------------------------------------------|---------------------------------------------------------------------------|\n * | {@link ng.directive:form#animations form / ngForm} | add and remove ({@link ng.directive:form#css-classes various classes}) |\n * | {@link ngAnimate.directive:ngAnimateSwap#animations ngAnimateSwap} | enter and leave |\n * | {@link ng.directive:ngClass#animations ngClass / {{class}​}} | add and remove |\n * | {@link ng.directive:ngClassEven#animations ngClassEven} | add and remove |\n * | {@link ng.directive:ngClassOdd#animations ngClassOdd} | add and remove |\n * | {@link ng.directive:ngHide#animations ngHide} | add and remove (the `ng-hide` class) |\n * | {@link ng.directive:ngIf#animations ngIf} | enter and leave |\n * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave |\n * | {@link module:ngMessages#animations ngMessage / ngMessageExp} | enter and leave |\n * | {@link module:ngMessages#animations ngMessages} | add and remove (the `ng-active`/`ng-inactive` classes) |\n * | {@link ng.directive:ngModel#animations ngModel} | add and remove ({@link ng.directive:ngModel#css-classes various classes}) |\n * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave, and move |\n * | {@link ng.directive:ngShow#animations ngShow} | add and remove (the `ng-hide` class) |\n * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave |\n * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave |\n *\n * (More information can be found by visiting the documentation associated with each directive.)\n *\n * For a full breakdown of the steps involved during each animation event, refer to the\n * {@link ng.$animate `$animate` API docs}.\n *\n * ## CSS-based Animations\n *\n * CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML\n * and CSS code we can create an animation that will be picked up by AngularJS when an underlying directive performs an operation.\n *\n * The example below shows how an `enter` animation can be made possible on an element using `ng-if`:\n *\n * ```html\n *
\n * Fade me in out\n *
\n * \n * \n * ```\n *\n * Notice the CSS class **fade**? We can now create the CSS transition code that references this class:\n *\n * ```css\n * /* The starting CSS styles for the enter animation */\n * .fade.ng-enter {\n * transition:0.5s linear all;\n * opacity:0;\n * }\n *\n * /* The finishing CSS styles for the enter animation */\n * .fade.ng-enter.ng-enter-active {\n * opacity:1;\n * }\n * ```\n *\n * The key thing to remember here is that, depending on the animation event (which each of the directives above trigger depending on what's going on) two\n * generated CSS classes will be applied to the element; in the example above we have `.ng-enter` and `.ng-enter-active`. For CSS transitions, the transition\n * code **must** be defined within the starting CSS class (in this case `.ng-enter`). The destination class is what the transition will animate towards.\n *\n * If for example we wanted to create animations for `leave` and `move` (ngRepeat triggers move) then we can do so using the same CSS naming conventions:\n *\n * ```css\n * /* now the element will fade out before it is removed from the DOM */\n * .fade.ng-leave {\n * transition:0.5s linear all;\n * opacity:1;\n * }\n * .fade.ng-leave.ng-leave-active {\n * opacity:0;\n * }\n * ```\n *\n * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class:\n *\n * ```css\n * /* there is no need to define anything inside of the destination\n * CSS class since the keyframe will take charge of the animation */\n * .fade.ng-leave {\n * animation: my_fade_animation 0.5s linear;\n * -webkit-animation: my_fade_animation 0.5s linear;\n * }\n *\n * @keyframes my_fade_animation {\n * from { opacity:1; }\n * to { opacity:0; }\n * }\n *\n * @-webkit-keyframes my_fade_animation {\n * from { opacity:1; }\n * to { opacity:0; }\n * }\n * ```\n *\n * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element.\n *\n * ### CSS Class-based Animations\n *\n * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different\n * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added\n * and removed.\n *\n * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class:\n *\n * ```html\n *
\n * Show and hide me\n *
\n * \n *\n * \n * ```\n *\n * All that is going on here with ngShow/ngHide behind the scenes is the `.ng-hide` class is added/removed (when the hidden state is valid). Since\n * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest.\n *\n * In addition the addition and removal of the CSS class, ngAnimate also provides two helper methods that we can use to further decorate the animation\n * with CSS styles.\n *\n * ```html\n *
\n * Highlight this box\n *
\n * \n *\n * \n * ```\n *\n * We can also make use of CSS keyframes by placing them within the CSS classes.\n *\n *\n * ### CSS Staggering Animations\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n *\n * ```css\n * .my-animation.ng-enter {\n * /* standard transition code */\n * transition: 1s linear all;\n * opacity:0;\n * }\n * .my-animation.ng-enter-stagger {\n * /* this will have a 100ms delay between each successive leave animation */\n * transition-delay: 0.1s;\n *\n * /* As of 1.4.4, this must always be set: it signals ngAnimate\n * to not accidentally inherit a delay property from another CSS class */\n * transition-duration: 0s;\n *\n * /* if you are using animations instead of transitions you should configure as follows:\n * animation-delay: 0.1s;\n * animation-duration: 0s; */\n * }\n * .my-animation.ng-enter.ng-enter-active {\n * /* standard transition styles */\n * opacity:1;\n * }\n * ```\n *\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired.\n *\n * The following code will issue the **ng-leave-stagger** event on the element provided:\n *\n * ```js\n * var kids = parent.children();\n *\n * $animate.leave(kids[0]); //stagger index=0\n * $animate.leave(kids[1]); //stagger index=1\n * $animate.leave(kids[2]); //stagger index=2\n * $animate.leave(kids[3]); //stagger index=3\n * $animate.leave(kids[4]); //stagger index=4\n *\n * window.requestAnimationFrame(function() {\n * //stagger has reset itself\n * $animate.leave(kids[5]); //stagger index=0\n * $animate.leave(kids[6]); //stagger index=1\n *\n * $scope.$digest();\n * });\n * ```\n *\n * Stagger animations are currently only supported within CSS-defined animations.\n *\n * ### The `ng-animate` CSS class\n *\n * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation.\n * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations).\n *\n * Therefore, animations can be applied to an element using this temporary class directly via CSS.\n *\n * ```css\n * .zipper.ng-animate {\n * transition:0.5s linear all;\n * }\n * .zipper.ng-enter {\n * opacity:0;\n * }\n * .zipper.ng-enter.ng-enter-active {\n * opacity:1;\n * }\n * .zipper.ng-leave {\n * opacity:1;\n * }\n * .zipper.ng-leave.ng-leave-active {\n * opacity:0;\n * }\n * ```\n *\n * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove\n * the CSS class once an animation has completed.)\n *\n *\n * ### The `ng-[event]-prepare` class\n *\n * This is a special class that can be used to prevent unwanted flickering / flash of content before\n * the actual animation starts. The class is added as soon as an animation is initialized, but removed\n * before the actual animation starts (after waiting for a $digest).\n * It is also only added for *structural* animations (`enter`, `move`, and `leave`).\n *\n * In practice, flickering can appear when nesting elements with structural animations such as `ngIf`\n * into elements that have class-based animations such as `ngClass`.\n *\n * ```html\n *
\n *
\n *
\n *
\n *
\n * ```\n *\n * It is possible that during the `enter` animation, the `.message` div will be briefly visible before it starts animating.\n * In that case, you can add styles to the CSS that make sure the element stays hidden before the animation starts:\n *\n * ```css\n * .message.ng-enter-prepare {\n * opacity: 0;\n * }\n * ```\n *\n * ### Animating between value changes\n *\n * Sometimes you need to animate between different expression states, whose values\n * don't necessary need to be known or referenced in CSS styles.\n * Unless possible with another {@link ngAnimate#directive-support \"animation aware\" directive},\n * that specific use case can always be covered with {@link ngAnimate.directive:ngAnimateSwap} as\n * can be seen in {@link ngAnimate.directive:ngAnimateSwap#examples this example}.\n *\n * Note that {@link ngAnimate.directive:ngAnimateSwap} is a *structural directive*, which means it\n * creates a new instance of the element (including any other/child directives it may have) and\n * links it to a new scope every time *swap* happens. In some cases this might not be desirable\n * (e.g. for performance reasons, or when you wish to retain internal state on the original\n * element instance).\n *\n * ## JavaScript-based Animations\n *\n * ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared\n * CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the\n * `module.animation()` module function we can register the animation.\n *\n * Let's see an example of a enter/leave animation using `ngRepeat`:\n *\n * ```html\n *
\n * {{ item }}\n *
\n * ```\n *\n * See the **slide** CSS class? Let's use that class to define an animation that we'll structure in our module code by using `module.animation`:\n *\n * ```js\n * myModule.animation('.slide', [function() {\n * return {\n * // make note that other events (like addClass/removeClass)\n * // have different function input parameters\n * enter: function(element, doneFn) {\n * jQuery(element).fadeIn(1000, doneFn);\n *\n * // remember to call doneFn so that AngularJS\n * // knows that the animation has concluded\n * },\n *\n * move: function(element, doneFn) {\n * jQuery(element).fadeIn(1000, doneFn);\n * },\n *\n * leave: function(element, doneFn) {\n * jQuery(element).fadeOut(1000, doneFn);\n * }\n * }\n * }]);\n * ```\n *\n * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as\n * greensock.js and velocity.js.\n *\n * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define\n * our animations inside of the same registered animation, however, the function input arguments are a bit different:\n *\n * ```html\n *
\n * this box is moody\n *
\n * \n * \n * \n * ```\n *\n * ```js\n * myModule.animation('.colorful', [function() {\n * return {\n * addClass: function(element, className, doneFn) {\n * // do some cool animation and call the doneFn\n * },\n * removeClass: function(element, className, doneFn) {\n * // do some cool animation and call the doneFn\n * },\n * setClass: function(element, addedClass, removedClass, doneFn) {\n * // do some cool animation and call the doneFn\n * }\n * }\n * }]);\n * ```\n *\n * ## CSS + JS Animations Together\n *\n * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of AngularJS,\n * defining CSS and JS animations to work off of the same CSS class will not work anymore. Therefore the example below will only result in **JS animations taking\n * charge of the animation**:\n *\n * ```html\n *
\n * Slide in and out\n *
\n * ```\n *\n * ```js\n * myModule.animation('.slide', [function() {\n * return {\n * enter: function(element, doneFn) {\n * jQuery(element).slideIn(1000, doneFn);\n * }\n * }\n * }]);\n * ```\n *\n * ```css\n * .slide.ng-enter {\n * transition:0.5s linear all;\n * transform:translateY(-100px);\n * }\n * .slide.ng-enter.ng-enter-active {\n * transform:translateY(0);\n * }\n * ```\n *\n * Does this mean that CSS and JS animations cannot be used together? Do JS-based animations always have higher priority? We can make up for the\n * lack of CSS animations by using the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from\n * our own JS-based animation code:\n *\n * ```js\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element) {\n* // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`.\n * return $animateCss(element, {\n * event: 'enter',\n * structural: true\n * });\n * }\n * }\n * }]);\n * ```\n *\n * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework.\n *\n * The `$animateCss` service is very powerful since we can feed in all kinds of extra properties that will be evaluated and fed into a CSS transition or\n * keyframe animation. For example if we wanted to animate the height of an element while adding and removing classes then we can do so by providing that\n * data into `$animateCss` directly:\n *\n * ```js\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element) {\n * return $animateCss(element, {\n * event: 'enter',\n * structural: true,\n * addClass: 'maroon-setting',\n * from: { height:0 },\n * to: { height: 200 }\n * });\n * }\n * }\n * }]);\n * ```\n *\n * Now we can fill in the rest via our transition CSS code:\n *\n * ```css\n * /* the transition tells ngAnimate to make the animation happen */\n * .slide.ng-enter { transition:0.5s linear all; }\n *\n * /* this extra CSS class will be absorbed into the transition\n * since the $animateCss code is adding the class */\n * .maroon-setting { background:red; }\n * ```\n *\n * And `$animateCss` will figure out the rest. Just make sure to have the `done()` callback fire the `doneFn` function to signal when the animation is over.\n *\n * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}.\n *\n * ## Animation Anchoring (via `ng-animate-ref`)\n *\n * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between\n * structural areas of an application (like views) by pairing up elements using an attribute\n * called `ng-animate-ref`.\n *\n * Let's say for example we have two views that are managed by `ng-view` and we want to show\n * that there is a relationship between two components situated in within these views. By using the\n * `ng-animate-ref` attribute we can identify that the two components are paired together and we\n * can then attach an animation, which is triggered when the view changes.\n *\n * Say for example we have the following template code:\n *\n * ```html\n * \n *
\n *
\n *\n * \n * \n * \n * \n *\n * \n * \n * ```\n *\n * Now, when the view changes (once the link is clicked), ngAnimate will examine the\n * HTML contents to see if there is a match reference between any components in the view\n * that is leaving and the view that is entering. It will scan both the view which is being\n * removed (leave) and inserted (enter) to see if there are any paired DOM elements that\n * contain a matching ref value.\n *\n * The two images match since they share the same ref value. ngAnimate will now create a\n * transport element (which is a clone of the first image element) and it will then attempt\n * to animate to the position of the second image element in the next view. For the animation to\n * work a special CSS class called `ng-anchor` will be added to the transported element.\n *\n * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then\n * ngAnimate will handle the entire transition for us as well as the addition and removal of\n * any changes of CSS classes between the elements:\n *\n * ```css\n * .banner.ng-anchor {\n * /* this animation will last for 1 second since there are\n * two phases to the animation (an `in` and an `out` phase) */\n * transition:0.5s linear all;\n * }\n * ```\n *\n * We also **must** include animations for the views that are being entered and removed\n * (otherwise anchoring wouldn't be possible since the new view would be inserted right away).\n *\n * ```css\n * .view-animation.ng-enter, .view-animation.ng-leave {\n * transition:0.5s linear all;\n * position:fixed;\n * left:0;\n * top:0;\n * width:100%;\n * }\n * .view-animation.ng-enter {\n * transform:translateX(100%);\n * }\n * .view-animation.ng-leave,\n * .view-animation.ng-enter.ng-enter-active {\n * transform:translateX(0%);\n * }\n * .view-animation.ng-leave.ng-leave-active {\n * transform:translateX(-100%);\n * }\n * ```\n *\n * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur:\n * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away\n * from its origin. Once that animation is over then the `in` stage occurs which animates the\n * element to its destination. The reason why there are two animations is to give enough time\n * for the enter animation on the new element to be ready.\n *\n * The example above sets up a transition for both the in and out phases, but we can also target the out or\n * in phases directly via `ng-anchor-out` and `ng-anchor-in`.\n *\n * ```css\n * .banner.ng-anchor-out {\n * transition: 0.5s linear all;\n *\n * /* the scale will be applied during the out animation,\n * but will be animated away when the in animation runs */\n * transform: scale(1.2);\n * }\n *\n * .banner.ng-anchor-in {\n * transition: 1s linear all;\n * }\n * ```\n *\n *\n *\n *\n * ### Anchoring Demo\n *\n \n \n Home\n
\n
\n
\n
\n
\n \n angular.module('anchoringExample', ['ngAnimate', 'ngRoute'])\n .config(['$routeProvider', function($routeProvider) {\n $routeProvider.when('/', {\n templateUrl: 'home.html',\n controller: 'HomeController as home'\n });\n $routeProvider.when('/profile/:id', {\n templateUrl: 'profile.html',\n controller: 'ProfileController as profile'\n });\n }])\n .run(['$rootScope', function($rootScope) {\n $rootScope.records = [\n { id: 1, title: 'Miss Beulah Roob' },\n { id: 2, title: 'Trent Morissette' },\n { id: 3, title: 'Miss Ava Pouros' },\n { id: 4, title: 'Rod Pouros' },\n { id: 5, title: 'Abdul Rice' },\n { id: 6, title: 'Laurie Rutherford Sr.' },\n { id: 7, title: 'Nakia McLaughlin' },\n { id: 8, title: 'Jordon Blanda DVM' },\n { id: 9, title: 'Rhoda Hand' },\n { id: 10, title: 'Alexandrea Sauer' }\n ];\n }])\n .controller('HomeController', [function() {\n //empty\n }])\n .controller('ProfileController', ['$rootScope', '$routeParams',\n function ProfileController($rootScope, $routeParams) {\n var index = parseInt($routeParams.id, 10);\n var record = $rootScope.records[index - 1];\n\n this.title = record.title;\n this.id = record.id;\n }]);\n \n \n

Welcome to the home page

\n

Please click on an element

\n \n {{ record.title }}\n \n
\n \n
\n {{ profile.title }}\n
\n
\n \n .record {\n display:block;\n font-size:20px;\n }\n .profile {\n background:black;\n color:white;\n font-size:100px;\n }\n .view-container {\n position:relative;\n }\n .view-container > .view.ng-animate {\n position:absolute;\n top:0;\n left:0;\n width:100%;\n min-height:500px;\n }\n .view.ng-enter, .view.ng-leave,\n .record.ng-anchor {\n transition:0.5s linear all;\n }\n .view.ng-enter {\n transform:translateX(100%);\n }\n .view.ng-enter.ng-enter-active, .view.ng-leave {\n transform:translateX(0%);\n }\n .view.ng-leave.ng-leave-active {\n transform:translateX(-100%);\n }\n .record.ng-anchor-out {\n background:red;\n }\n \n
\n *\n * ### How is the element transported?\n *\n * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting\n * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element\n * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The\n * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match\n * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied\n * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class\n * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element\n * will become visible since the shim class will be removed.\n *\n * ### How is the morphing handled?\n *\n * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out\n * what CSS classes differ between the starting element and the destination element. These different CSS classes\n * will be added/removed on the anchor element and a transition will be applied (the transition that is provided\n * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will\n * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that\n * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since\n * the cloned element is placed inside of root element which is likely close to the body element).\n *\n * Note that if the root element is on the `` element then the cloned node will be placed inside of body.\n *\n *\n * ## Using $animate in your directive code\n *\n * So far we've explored how to feed in animations into an AngularJS application, but how do we trigger animations within our own directives in our application?\n * By injecting the `$animate` service into our directive code, we can trigger structural and class-based hooks which can then be consumed by animations. Let's\n * imagine we have a greeting box that shows and hides itself when the data changes\n *\n * ```html\n * Hi there\n * ```\n *\n * ```js\n * ngModule.directive('greetingBox', ['$animate', function($animate) {\n * return function(scope, element, attrs) {\n * attrs.$observe('active', function(value) {\n * value ? $animate.addClass(element, 'on') : $animate.removeClass(element, 'on');\n * });\n * });\n * }]);\n * ```\n *\n * Now the `on` CSS class is added and removed on the greeting box component. Now if we add a CSS class on top of the greeting box element\n * in our HTML code then we can trigger a CSS or JS animation to happen.\n *\n * ```css\n * /* normally we would create a CSS class to reference on the element */\n * greeting-box.on { transition:0.5s linear all; background:green; color:white; }\n * ```\n *\n * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's\n * possible be sure to visit the {@link ng.$animate $animate service API page}.\n *\n *\n * ## Callbacks and Promises\n *\n * When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger\n * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has\n * ended by chaining onto the returned promise that animation method returns.\n *\n * ```js\n * // somewhere within the depths of the directive\n * $animate.enter(element, parent).then(function() {\n * //the animation has completed\n * });\n * ```\n *\n * (Note that earlier versions of AngularJS prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case\n * anymore.)\n *\n * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering\n * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view\n * routing controller to hook into that:\n *\n * ```js\n * ngModule.controller('HomePageController', ['$animate', function($animate) {\n * $animate.on('enter', ngViewElement, function(element) {\n * // the animation for this route has completed\n * }]);\n * }])\n * ```\n *\n * (Note that you will need to trigger a digest within the callback to get AngularJS to notice any scope-related changes.)\n */\n\nvar copy;\nvar extend;\nvar forEach;\nvar isArray;\nvar isDefined;\nvar isElement;\nvar isFunction;\nvar isObject;\nvar isString;\nvar isUndefined;\nvar jqLite;\nvar noop;\n\n/**\n * @ngdoc service\n * @name $animate\n * @kind object\n *\n * @description\n * The ngAnimate `$animate` service documentation is the same for the core `$animate` service.\n *\n * Click here {@link ng.$animate to learn more about animations with `$animate`}.\n */\nangular.module('ngAnimate', [], function initAngularHelpers() {\n // Access helpers from AngularJS core.\n // Do it inside a `config` block to ensure `window.angular` is available.\n noop = angular.noop;\n copy = angular.copy;\n extend = angular.extend;\n jqLite = angular.element;\n forEach = angular.forEach;\n isArray = angular.isArray;\n isString = angular.isString;\n isObject = angular.isObject;\n isUndefined = angular.isUndefined;\n isDefined = angular.isDefined;\n isFunction = angular.isFunction;\n isElement = angular.isElement;\n})\n .info({ angularVersion: '1.8.2' })\n .directive('ngAnimateSwap', ngAnimateSwapDirective)\n\n .directive('ngAnimateChildren', $$AnimateChildrenDirective)\n .factory('$$rAFScheduler', $$rAFSchedulerFactory)\n\n .provider('$$animateQueue', $$AnimateQueueProvider)\n .provider('$$animateCache', $$AnimateCacheProvider)\n .provider('$$animation', $$AnimationProvider)\n\n .provider('$animateCss', $AnimateCssProvider)\n .provider('$$animateCssDriver', $$AnimateCssDriverProvider)\n\n .provider('$$animateJs', $$AnimateJsProvider)\n .provider('$$animateJsDriver', $$AnimateJsDriverProvider);\n\n\n})(window, window.angular);\n","require('./angular-animate');\nmodule.exports = 'ngAnimate';\n","/**\n * @license AngularJS v1.8.2\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngCookies\n * @description\n *\n * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.\n *\n * See {@link ngCookies.$cookies `$cookies`} for usage.\n */\n\n\nangular.module('ngCookies', ['ng']).\n info({ angularVersion: '1.8.2' }).\n /**\n * @ngdoc provider\n * @name $cookiesProvider\n * @description\n * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.\n * */\n provider('$cookies', [/** @this */function $CookiesProvider() {\n /**\n * @ngdoc property\n * @name $cookiesProvider#defaults\n * @description\n *\n * Object containing default options to pass when setting cookies.\n *\n * The object may have following properties:\n *\n * - **path** - `{string}` - The cookie will be available only for this path and its\n * sub-paths. By default, this is the URL that appears in your `` tag.\n * - **domain** - `{string}` - The cookie will be available only for this domain and\n * its sub-domains. For security reasons the user agent will not accept the cookie\n * if the current domain is not a sub-domain of this domain or equal to it.\n * - **expires** - `{string|Date}` - String of the form \"Wdy, DD Mon YYYY HH:MM:SS GMT\"\n * or a Date object indicating the exact date/time this cookie will expire.\n * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a\n * secured connection.\n * - **samesite** - `{string}` - prevents the browser from sending the cookie along with cross-site requests.\n * Accepts the values `lax` and `strict`. See the [OWASP Wiki](https://www.owasp.org/index.php/SameSite)\n * for more info. Note that as of May 2018, not all browsers support `SameSite`,\n * so it cannot be used as a single measure against Cross-Site-Request-Forgery (CSRF) attacks.\n *\n * Note: By default, the address that appears in your `` tag will be used as the path.\n * This is important so that cookies will be visible for all routes when html5mode is enabled.\n *\n * @example\n *\n * ```js\n * angular.module('cookiesProviderExample', ['ngCookies'])\n * .config(['$cookiesProvider', function($cookiesProvider) {\n * // Setting default options\n * $cookiesProvider.defaults.domain = 'foo.com';\n * $cookiesProvider.defaults.secure = true;\n * }]);\n * ```\n **/\n var defaults = this.defaults = {};\n\n function calcOptions(options) {\n return options ? angular.extend({}, defaults, options) : defaults;\n }\n\n /**\n * @ngdoc service\n * @name $cookies\n *\n * @description\n * Provides read/write access to browser's cookies.\n *\n *
\n * Up until AngularJS 1.3, `$cookies` exposed properties that represented the\n * current browser cookie values. In version 1.4, this behavior has changed, and\n * `$cookies` now provides a standard api of getters, setters etc.\n *
\n *\n * Requires the {@link ngCookies `ngCookies`} module to be installed.\n *\n * @example\n *\n * ```js\n * angular.module('cookiesExample', ['ngCookies'])\n * .controller('ExampleController', ['$cookies', function($cookies) {\n * // Retrieving a cookie\n * var favoriteCookie = $cookies.get('myFavorite');\n * // Setting a cookie\n * $cookies.put('myFavorite', 'oatmeal');\n * }]);\n * ```\n */\n this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {\n return {\n /**\n * @ngdoc method\n * @name $cookies#get\n *\n * @description\n * Returns the value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {string} Raw cookie value.\n */\n get: function(key) {\n return $$cookieReader()[key];\n },\n\n /**\n * @ngdoc method\n * @name $cookies#getObject\n *\n * @description\n * Returns the deserialized value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {Object} Deserialized cookie value.\n */\n getObject: function(key) {\n var value = this.get(key);\n return value ? angular.fromJson(value) : value;\n },\n\n /**\n * @ngdoc method\n * @name $cookies#getAll\n *\n * @description\n * Returns a key value object with all the cookies\n *\n * @returns {Object} All cookies\n */\n getAll: function() {\n return $$cookieReader();\n },\n\n /**\n * @ngdoc method\n * @name $cookies#put\n *\n * @description\n * Sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {string} value Raw value to be stored.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n put: function(key, value, options) {\n $$cookieWriter(key, value, calcOptions(options));\n },\n\n /**\n * @ngdoc method\n * @name $cookies#putObject\n *\n * @description\n * Serializes and sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {Object} value Value to be stored.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n putObject: function(key, value, options) {\n this.put(key, angular.toJson(value), options);\n },\n\n /**\n * @ngdoc method\n * @name $cookies#remove\n *\n * @description\n * Remove given cookie\n *\n * @param {string} key Id of the key-value pair to delete.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n remove: function(key, options) {\n $$cookieWriter(key, undefined, calcOptions(options));\n }\n };\n }];\n }]);\n\n/**\n * @name $$cookieWriter\n * @requires $document\n *\n * @description\n * This is a private service for writing cookies\n *\n * @param {string} name Cookie name\n * @param {string=} value Cookie value (if undefined, cookie will be deleted)\n * @param {Object=} options Object with options that need to be stored for the cookie.\n */\nfunction $$CookieWriter($document, $log, $browser) {\n var cookiePath = $browser.baseHref();\n var rawDocument = $document[0];\n\n function buildCookieString(name, value, options) {\n var path, expires;\n options = options || {};\n expires = options.expires;\n path = angular.isDefined(options.path) ? options.path : cookiePath;\n if (angular.isUndefined(value)) {\n expires = 'Thu, 01 Jan 1970 00:00:00 GMT';\n value = '';\n }\n if (angular.isString(expires)) {\n expires = new Date(expires);\n }\n\n var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n str += path ? ';path=' + path : '';\n str += options.domain ? ';domain=' + options.domain : '';\n str += expires ? ';expires=' + expires.toUTCString() : '';\n str += options.secure ? ';secure' : '';\n str += options.samesite ? ';samesite=' + options.samesite : '';\n\n // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n // - 300 cookies\n // - 20 cookies per unique domain\n // - 4096 bytes per cookie\n var cookieLength = str.length + 1;\n if (cookieLength > 4096) {\n $log.warn('Cookie \\'' + name +\n '\\' possibly not set or overflowed because it was too large (' +\n cookieLength + ' > 4096 bytes)!');\n }\n\n return str;\n }\n\n return function(name, value, options) {\n rawDocument.cookie = buildCookieString(name, value, options);\n };\n}\n\n$$CookieWriter.$inject = ['$document', '$log', '$browser'];\n\nangular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {\n this.$get = $$CookieWriter;\n});\n\n\n})(window, window.angular);\n","require('./angular-cookies');\nmodule.exports = 'ngCookies';\n","/**\n * An Angular module that gives you access to the browsers local storage\n * @version v0.7.1 - 2017-06-21\n * @link https://github.com/grevory/angular-local-storage\n * @author grevory \n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n(function (window, angular) {\nvar isDefined = angular.isDefined,\n isUndefined = angular.isUndefined,\n isNumber = angular.isNumber,\n isObject = angular.isObject,\n isArray = angular.isArray,\n isString = angular.isString,\n extend = angular.extend,\n toJson = angular.toJson;\n\nangular\n .module('LocalStorageModule', [])\n .provider('localStorageService', function() {\n // You should set a prefix to avoid overwriting any local storage variables from the rest of your app\n // e.g. localStorageServiceProvider.setPrefix('yourAppName');\n // With provider you can use config as this:\n // myApp.config(function (localStorageServiceProvider) {\n // localStorageServiceProvider.prefix = 'yourAppName';\n // });\n this.prefix = 'ls';\n\n // You could change web storage type localstorage or sessionStorage\n this.storageType = 'localStorage';\n\n // Cookie options (usually in case of fallback)\n // expiry = Number of days before cookies expire // 0 = Does not expire\n // path = The web path the cookie represents\n // secure = Wether the cookies should be secure (i.e only sent on HTTPS requests)\n this.cookie = {\n expiry: 30,\n path: '/',\n secure: false\n };\n\n // Decides wether we should default to cookies if localstorage is not supported.\n this.defaultToCookie = true;\n\n // Send signals for each of the following actions?\n this.notify = {\n setItem: true,\n removeItem: false\n };\n\n // Setter for the prefix\n this.setPrefix = function(prefix) {\n this.prefix = prefix;\n return this;\n };\n\n // Setter for the storageType\n this.setStorageType = function(storageType) {\n this.storageType = storageType;\n return this;\n };\n // Setter for defaultToCookie value, default is true.\n this.setDefaultToCookie = function (shouldDefault) {\n this.defaultToCookie = !!shouldDefault; // Double-not to make sure it's a bool value.\n return this;\n };\n // Setter for cookie config\n this.setStorageCookie = function(exp, path, secure) {\n this.cookie.expiry = exp;\n this.cookie.path = path;\n this.cookie.secure = secure;\n return this;\n };\n\n // Setter for cookie domain\n this.setStorageCookieDomain = function(domain) {\n this.cookie.domain = domain;\n return this;\n };\n\n // Setter for notification config\n // itemSet & itemRemove should be booleans\n this.setNotify = function(itemSet, itemRemove) {\n this.notify = {\n setItem: itemSet,\n removeItem: itemRemove\n };\n return this;\n };\n\n this.$get = ['$rootScope', '$window', '$document', '$parse','$timeout', function($rootScope, $window, $document, $parse, $timeout) {\n var self = this;\n var prefix = self.prefix;\n var cookie = self.cookie;\n var notify = self.notify;\n var storageType = self.storageType;\n var webStorage;\n\n // When Angular's $document is not available\n if (!$document) {\n $document = document;\n } else if ($document[0]) {\n $document = $document[0];\n }\n\n // If there is a prefix set in the config lets use that with an appended period for readability\n if (prefix.substr(-1) !== '.') {\n prefix = !!prefix ? prefix + '.' : '';\n }\n var deriveQualifiedKey = function(key) {\n return prefix + key;\n };\n\n // Removes prefix from the key.\n var underiveQualifiedKey = function (key) {\n return key.replace(new RegExp('^' + prefix, 'g'), '');\n };\n\n // Check if the key is within our prefix namespace.\n var isKeyPrefixOurs = function (key) {\n return key.indexOf(prefix) === 0;\n };\n\n // Checks the browser to see if local storage is supported\n var checkSupport = function () {\n try {\n var supported = (storageType in $window && $window[storageType] !== null);\n\n // When Safari (OS X or iOS) is in private browsing mode, it appears as though localStorage\n // is available, but trying to call .setItem throws an exception.\n //\n // \"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage\n // that exceeded the quota.\"\n var key = deriveQualifiedKey('__' + Math.round(Math.random() * 1e7));\n if (supported) {\n webStorage = $window[storageType];\n webStorage.setItem(key, '');\n webStorage.removeItem(key);\n }\n\n return supported;\n } catch (e) {\n // Only change storageType to cookies if defaulting is enabled.\n if (self.defaultToCookie)\n storageType = 'cookie';\n $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);\n return false;\n }\n };\n var browserSupportsLocalStorage = checkSupport();\n\n // Directly adds a value to local storage\n // If local storage is not available in the browser use cookies\n // Example use: localStorageService.add('library','angular');\n var addToLocalStorage = function (key, value, type) {\n var previousType = getStorageType();\n\n try {\n setStorageType(type);\n\n // Let's convert undefined values to null to get the value consistent\n if (isUndefined(value)) {\n value = null;\n } else {\n value = toJson(value);\n }\n\n // If this browser does not support local storage use cookies\n if (!browserSupportsLocalStorage && self.defaultToCookie || self.storageType === 'cookie') {\n if (!browserSupportsLocalStorage) {\n $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');\n }\n\n if (notify.setItem) {\n $rootScope.$broadcast('LocalStorageModule.notification.setitem', {key: key, newvalue: value, storageType: 'cookie'});\n }\n return addToCookies(key, value);\n }\n\n try {\n if (webStorage) {\n webStorage.setItem(deriveQualifiedKey(key), value);\n }\n if (notify.setItem) {\n $rootScope.$broadcast('LocalStorageModule.notification.setitem', {key: key, newvalue: value, storageType: self.storageType});\n }\n } catch (e) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);\n return addToCookies(key, value);\n }\n return true;\n } finally {\n setStorageType(previousType);\n }\n };\n\n // Directly get a value from local storage\n // Example use: localStorageService.get('library'); // returns 'angular'\n var getFromLocalStorage = function (key, type) {\n var previousType = getStorageType();\n\n try {\n setStorageType(type);\n\n if (!browserSupportsLocalStorage && self.defaultToCookie || self.storageType === 'cookie') {\n if (!browserSupportsLocalStorage) {\n $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');\n }\n\n return getFromCookies(key);\n }\n\n var item = webStorage ? webStorage.getItem(deriveQualifiedKey(key)) : null;\n // angular.toJson will convert null to 'null', so a proper conversion is needed\n // FIXME not a perfect solution, since a valid 'null' string can't be stored\n if (!item || item === 'null') {\n return null;\n }\n\n try {\n return JSON.parse(item);\n } catch (e) {\n return item;\n }\n } finally {\n setStorageType(previousType);\n }\n };\n\n // Remove an item from local storage\n // Example use: localStorageService.remove('library'); // removes the key/value pair of library='angular'\n //\n // This is var-arg removal, check the last argument to see if it is a storageType\n // and set type accordingly before removing.\n //\n var removeFromLocalStorage = function () {\n var previousType = getStorageType();\n\n try {\n // can't pop on arguments, so we do this\n var consumed = 0;\n if (arguments.length >= 1 &&\n (arguments[arguments.length - 1] === 'localStorage' ||\n arguments[arguments.length - 1] === 'sessionStorage')) {\n consumed = 1;\n setStorageType(arguments[arguments.length - 1]);\n }\n\n var i, key;\n for (i = 0; i < arguments.length - consumed; i++) {\n key = arguments[i];\n if (!browserSupportsLocalStorage && self.defaultToCookie || self.storageType === 'cookie') {\n if (!browserSupportsLocalStorage) {\n $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');\n }\n\n if (notify.removeItem) {\n $rootScope.$broadcast('LocalStorageModule.notification.removeitem', {key: key, storageType: 'cookie'});\n }\n removeFromCookies(key);\n }\n else {\n try {\n webStorage.removeItem(deriveQualifiedKey(key));\n if (notify.removeItem) {\n $rootScope.$broadcast('LocalStorageModule.notification.removeitem', {\n key: key,\n storageType: self.storageType\n });\n }\n } catch (e) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);\n removeFromCookies(key);\n }\n }\n }\n } finally {\n setStorageType(previousType);\n }\n };\n\n // Return array of keys for local storage\n // Example use: var keys = localStorageService.keys()\n var getKeysForLocalStorage = function (type) {\n var previousType = getStorageType();\n\n try {\n setStorageType(type);\n\n if (!browserSupportsLocalStorage) {\n $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');\n return [];\n }\n\n var prefixLength = prefix.length;\n var keys = [];\n for (var key in webStorage) {\n // Only return keys that are for this app\n if (key.substr(0, prefixLength) === prefix) {\n try {\n keys.push(key.substr(prefixLength));\n } catch (e) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', e.Description);\n return [];\n }\n }\n }\n\n return keys;\n } finally {\n setStorageType(previousType);\n }\n };\n\n // Remove all data for this app from local storage\n // Also optionally takes a regular expression string and removes the matching key-value pairs\n // Example use: localStorageService.clearAll();\n // Should be used mostly for development purposes\n var clearAllFromLocalStorage = function (regularExpression, type) {\n var previousType = getStorageType();\n\n try {\n setStorageType(type);\n\n // Setting both regular expressions independently\n // Empty strings result in catchall RegExp\n var prefixRegex = !!prefix ? new RegExp('^' + prefix) : new RegExp();\n var testRegex = !!regularExpression ? new RegExp(regularExpression) : new RegExp();\n\n if (!browserSupportsLocalStorage && self.defaultToCookie || self.storageType === 'cookie') {\n if (!browserSupportsLocalStorage) {\n $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');\n }\n return clearAllFromCookies();\n }\n if (!browserSupportsLocalStorage && !self.defaultToCookie)\n return false;\n var prefixLength = prefix.length;\n\n for (var key in webStorage) {\n // Only remove items that are for this app and match the regular expression\n if (prefixRegex.test(key) && testRegex.test(key.substr(prefixLength))) {\n try {\n removeFromLocalStorage(key.substr(prefixLength));\n } catch (e) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);\n return clearAllFromCookies();\n }\n }\n }\n\n return true;\n } finally {\n setStorageType(previousType);\n }\n };\n\n // Checks the browser to see if cookies are supported\n var browserSupportsCookies = (function() {\n try {\n return $window.navigator.cookieEnabled ||\n (\"cookie\" in $document && ($document.cookie.length > 0 ||\n ($document.cookie = \"test\").indexOf.call($document.cookie, \"test\") > -1));\n } catch (e) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);\n return false;\n }\n }());\n\n // Directly adds a value to cookies\n // Typically used as a fallback if local storage is not available in the browser\n // Example use: localStorageService.cookie.add('library','angular');\n var addToCookies = function (key, value, daysToExpiry, secure) {\n\n if (isUndefined(value)) {\n return false;\n } else if(isArray(value) || isObject(value)) {\n value = toJson(value);\n }\n\n if (!browserSupportsCookies) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', 'COOKIES_NOT_SUPPORTED');\n return false;\n }\n\n try {\n var expiry = '',\n expiryDate = new Date(),\n cookieDomain = '';\n\n if (value === null) {\n // Mark that the cookie has expired one day ago\n expiryDate.setTime(expiryDate.getTime() + (-1 * 24 * 60 * 60 * 1000));\n expiry = \"; expires=\" + expiryDate.toGMTString();\n value = '';\n } else if (isNumber(daysToExpiry) && daysToExpiry !== 0) {\n expiryDate.setTime(expiryDate.getTime() + (daysToExpiry * 24 * 60 * 60 * 1000));\n expiry = \"; expires=\" + expiryDate.toGMTString();\n } else if (cookie.expiry !== 0) {\n expiryDate.setTime(expiryDate.getTime() + (cookie.expiry * 24 * 60 * 60 * 1000));\n expiry = \"; expires=\" + expiryDate.toGMTString();\n }\n if (!!key) {\n var cookiePath = \"; path=\" + cookie.path;\n if (cookie.domain) {\n cookieDomain = \"; domain=\" + cookie.domain;\n }\n /* Providing the secure parameter always takes precedence over config\n * (allows developer to mix and match secure + non-secure) */\n if (typeof secure === 'boolean') {\n if (secure === true) {\n /* We've explicitly specified secure,\n * add the secure attribute to the cookie (after domain) */\n cookieDomain += \"; secure\";\n }\n // else - secure has been supplied but isn't true - so don't set secure flag, regardless of what config says\n }\n else if (cookie.secure === true) {\n // secure parameter wasn't specified, get default from config\n cookieDomain += \"; secure\";\n }\n $document.cookie = deriveQualifiedKey(key) + \"=\" + encodeURIComponent(value) + expiry + cookiePath + cookieDomain;\n }\n } catch (e) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);\n return false;\n }\n return true;\n };\n\n // Directly get a value from a cookie\n // Example use: localStorageService.cookie.get('library'); // returns 'angular'\n var getFromCookies = function (key) {\n if (!browserSupportsCookies) {\n $rootScope.$broadcast('LocalStorageModule.notification.error', 'COOKIES_NOT_SUPPORTED');\n return false;\n }\n\n var cookies = $document.cookie && $document.cookie.split(';') || [];\n for(var i=0; i < cookies.length; i++) {\n var thisCookie = cookies[i];\n while (thisCookie.charAt(0) === ' ') {\n thisCookie = thisCookie.substring(1,thisCookie.length);\n }\n if (thisCookie.indexOf(deriveQualifiedKey(key) + '=') === 0) {\n var storedValues = decodeURIComponent(thisCookie.substring(prefix.length + key.length + 1, thisCookie.length));\n try {\n var parsedValue = JSON.parse(storedValues);\n return typeof(parsedValue) === 'number' ? storedValues : parsedValue;\n } catch(e) {\n return storedValues;\n }\n }\n }\n return null;\n };\n\n var removeFromCookies = function (key) {\n addToCookies(key,null);\n };\n\n var clearAllFromCookies = function () {\n var thisCookie = null;\n var prefixLength = prefix.length;\n var cookies = $document.cookie.split(';');\n for(var i = 0; i < cookies.length; i++) {\n thisCookie = cookies[i];\n\n while (thisCookie.charAt(0) === ' ') {\n thisCookie = thisCookie.substring(1, thisCookie.length);\n }\n\n var key = thisCookie.substring(prefixLength, thisCookie.indexOf('='));\n removeFromCookies(key);\n }\n };\n\n var getStorageType = function() {\n return storageType;\n };\n\n var setStorageType = function(type) {\n if (type && storageType !== type) {\n storageType = type;\n browserSupportsLocalStorage = checkSupport();\n }\n return browserSupportsLocalStorage;\n };\n\n // Add a listener on scope variable to save its changes to local storage\n // Return a function which when called cancels binding\n var bindToScope = function(scope, key, def, lsKey, type) {\n lsKey = lsKey || key;\n var value = getFromLocalStorage(lsKey, type);\n\n if (value === null && isDefined(def)) {\n value = def;\n } else if (isObject(value) && isObject(def)) {\n value = extend(value, def);\n }\n\n $parse(key).assign(scope, value);\n\n return scope.$watch(key, function(newVal) {\n addToLocalStorage(lsKey, newVal, type);\n }, isObject(scope[key]));\n };\n\n // Add listener to local storage, for update callbacks.\n if (browserSupportsLocalStorage) {\n if ($window.addEventListener) {\n $window.addEventListener(\"storage\", handleStorageChangeCallback, false);\n $rootScope.$on('$destroy', function() {\n $window.removeEventListener(\"storage\", handleStorageChangeCallback);\n });\n } else if($window.attachEvent){\n // attachEvent and detachEvent are proprietary to IE v6-10\n $window.attachEvent(\"onstorage\", handleStorageChangeCallback);\n $rootScope.$on('$destroy', function() {\n $window.detachEvent(\"onstorage\", handleStorageChangeCallback);\n });\n }\n }\n\n // Callback handler for storage changed.\n function handleStorageChangeCallback(e) {\n if (!e) { e = $window.event; }\n if (notify.setItem) {\n if (isString(e.key) && isKeyPrefixOurs(e.key)) {\n var key = underiveQualifiedKey(e.key);\n // Use timeout, to avoid using $rootScope.$apply.\n $timeout(function () {\n $rootScope.$broadcast('LocalStorageModule.notification.changed', { key: key, newvalue: e.newValue, storageType: self.storageType });\n });\n }\n }\n }\n\n // Return localStorageService.length\n // ignore keys that not owned\n var lengthOfLocalStorage = function(type) {\n var previousType = getStorageType();\n\n try {\n setStorageType(type);\n\n var count = 0;\n var storage = $window[storageType];\n for(var i = 0; i < storage.length; i++) {\n if(storage.key(i).indexOf(prefix) === 0 ) {\n count++;\n }\n }\n \n return count;\n } finally {\n setStorageType(previousType);\n }\n };\n\n var changePrefix = function(localStoragePrefix) {\n prefix = localStoragePrefix;\n };\n\n return {\n isSupported: browserSupportsLocalStorage,\n getStorageType: getStorageType,\n setStorageType: setStorageType,\n setPrefix: changePrefix,\n set: addToLocalStorage,\n add: addToLocalStorage, //DEPRECATED\n get: getFromLocalStorage,\n keys: getKeysForLocalStorage,\n remove: removeFromLocalStorage,\n clearAll: clearAllFromLocalStorage,\n bind: bindToScope,\n deriveKey: deriveQualifiedKey,\n underiveKey: underiveQualifiedKey,\n length: lengthOfLocalStorage,\n defaultToCookie: this.defaultToCookie,\n cookie: {\n isSupported: browserSupportsCookies,\n set: addToCookies,\n add: addToCookies, //DEPRECATED\n get: getFromCookies,\n remove: removeFromCookies,\n clearAll: clearAllFromCookies\n }\n };\n }];\n });\n})(window, window.angular);","require('./dist/angular-local-storage.js');\nmodule.exports = 'LocalStorageModule';\n","/**\n * @license AngularJS v1.8.2\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\nvar $resourceMinErr = angular.$$minErr('$resource');\n\n// Helper functions and regex to lookup a dotted path on an object\n// stopping at undefined/null. The path must be composed of ASCII\n// identifiers (just like $parse)\nvar MEMBER_NAME_REGEX = /^(\\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;\n\nfunction isValidDottedPath(path) {\n return (path != null && path !== '' && path !== 'hasOwnProperty' &&\n MEMBER_NAME_REGEX.test('.' + path));\n}\n\nfunction lookupDottedPath(obj, path) {\n if (!isValidDottedPath(path)) {\n throw $resourceMinErr('badmember', 'Dotted member path \"@{0}\" is invalid.', path);\n }\n var keys = path.split('.');\n for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) {\n var key = keys[i];\n obj = (obj !== null) ? obj[key] : undefined;\n }\n return obj;\n}\n\n/**\n * Create a shallow copy of an object and clear other fields from the destination\n */\nfunction shallowClearAndCopy(src, dst) {\n dst = dst || {};\n\n angular.forEach(dst, function(value, key) {\n delete dst[key];\n });\n\n for (var key in src) {\n if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n dst[key] = src[key];\n }\n }\n\n return dst;\n}\n\n/**\n * @ngdoc module\n * @name ngResource\n * @description\n *\n * The `ngResource` module provides interaction support with RESTful services\n * via the $resource service.\n *\n * See {@link ngResource.$resourceProvider} and {@link ngResource.$resource} for usage.\n */\n\n/**\n * @ngdoc provider\n * @name $resourceProvider\n *\n * @description\n *\n * Use `$resourceProvider` to change the default behavior of the {@link ngResource.$resource}\n * service.\n *\n * ## Dependencies\n * Requires the {@link ngResource } module to be installed.\n *\n */\n\n/**\n * @ngdoc service\n * @name $resource\n * @requires $http\n * @requires ng.$log\n * @requires $q\n * @requires ng.$timeout\n *\n * @description\n * A factory which creates a resource object that lets you interact with\n * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.\n *\n * The returned resource object has action methods which provide high-level behaviors without\n * the need to interact with the low level {@link ng.$http $http} service.\n *\n * Requires the {@link ngResource `ngResource`} module to be installed.\n *\n * By default, trailing slashes will be stripped from the calculated URLs,\n * which can pose problems with server backends that do not expect that\n * behavior. This can be disabled by configuring the `$resourceProvider` like\n * this:\n *\n * ```js\n app.config(['$resourceProvider', function($resourceProvider) {\n // Don't strip trailing slashes from calculated URLs\n $resourceProvider.defaults.stripTrailingSlashes = false;\n }]);\n * ```\n *\n * @param {string} url A parameterized URL template with parameters prefixed by `:` as in\n * `/user/:username`. If you are using a URL with a port number (e.g.\n * `http://example.com:8080/api`), it will be respected.\n *\n * If you are using a url with a suffix, just add the suffix, like this:\n * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`\n * or even `$resource('http://example.com/resource/:resource_id.:format')`\n * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be\n * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you\n * can escape it with `/\\.`.\n *\n * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in\n * `actions` methods. If a parameter value is a function, it will be called every time\n * a param value needs to be obtained for a request (unless the param was overridden). The\n * function will be passed the current data value as an argument.\n *\n * Each key value in the parameter object is first bound to url template if present and then any\n * excess keys are appended to the url search query after the `?`.\n *\n * Given a template `/path/:verb` and parameter `{verb: 'greet', salutation: 'Hello'}` results in\n * URL `/path/greet?salutation=Hello`.\n *\n * If the parameter value is prefixed with `@`, then the value for that parameter will be\n * extracted from the corresponding property on the `data` object (provided when calling actions\n * with a request body).\n * For example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of\n * `someParam` will be `data.someProp`.\n * Note that the parameter will be ignored, when calling a \"GET\" action method (i.e. an action\n * method that does not accept a request body).\n *\n * @param {Object.=} actions Hash with declaration of custom actions that will be available\n * in addition to the default set of resource actions (see below). If a custom action has the same\n * key as a default action (e.g. `save`), then the default action will be *overwritten*, and not\n * extended.\n *\n * The declaration should be created in the format of {@link ng.$http#usage $http.config}:\n *\n * {\n * action1: {method:?, params:?, isArray:?, headers:?, ...},\n * action2: {method:?, params:?, isArray:?, headers:?, ...},\n * ...\n * }\n *\n * Where:\n *\n * - **`action`** – {string} – The name of action. This name becomes the name of the method on\n * your resource object.\n * - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,\n * `DELETE`, `JSONP`, etc).\n * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of\n * the parameter value is a function, it will be called every time when a param value needs to\n * be obtained for a request (unless the param was overridden). The function will be passed the\n * current data value as an argument.\n * - **`url`** – {string} – Action specific `url` override. The url templating is supported just\n * like for the resource-level urls.\n * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,\n * see `returns` section.\n * - **`transformRequest`** –\n * `{function(data, headersGetter)|Array.}` –\n * Transform function or an array of such functions. The transform function takes the http\n * request body and headers and returns its transformed (typically serialized) version.\n * By default, transformRequest will contain one function that checks if the request data is\n * an object and serializes it using `angular.toJson`. To prevent this behavior, set\n * `transformRequest` to an empty array: `transformRequest: []`\n * - **`transformResponse`** –\n * `{function(data, headersGetter, status)|Array.}` –\n * Transform function or an array of such functions. The transform function takes the HTTP\n * response body, headers and status and returns its transformed (typically deserialized)\n * version.\n * By default, transformResponse will contain one function that checks if the response looks\n * like a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior,\n * set `transformResponse` to an empty array: `transformResponse: []`\n * - **`cache`** – `{boolean|Cache}` – A boolean value or object created with\n * {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of the HTTP response.\n * See {@link $http#caching $http Caching} for more information.\n * - **`timeout`** – `{number}` – Timeout in milliseconds.
\n * **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are\n * **not** supported in `$resource`, because the same value would be used for multiple requests.\n * If you are looking for a way to cancel requests, you should use the `cancellable` option.\n * - **`cancellable`** – `{boolean}` – If true, the request made by a \"non-instance\" call will be\n * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return\n * value. Calling `$cancelRequest()` for a non-cancellable or an already completed/cancelled\n * request will have no effect.\n * - **`withCredentials`** – `{boolean}` – Whether to set the `withCredentials` flag on the\n * XHR object. See\n * [XMLHttpRequest.withCredentials](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials)\n * for more information.\n * - **`responseType`** – `{string}` – See\n * [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType).\n * - **`interceptor`** – `{Object=}` – The interceptor object has four optional methods -\n * `request`, `requestError`, `response`, and `responseError`. See\n * {@link ng.$http#interceptors $http interceptors} for details. Note that\n * `request`/`requestError` interceptors are applied before calling `$http`, thus before any\n * global `$http` interceptors. Also, rejecting or throwing an error inside the `request`\n * interceptor will result in calling the `responseError` interceptor.\n * The resource instance or collection is available on the `resource` property of the\n * `http response` object passed to `response`/`responseError` interceptors.\n * Keep in mind that the associated promise will be resolved with the value returned by the\n * response interceptors. Make sure you return an appropriate value and not the `response`\n * object passed as input. For reference, the default `response` interceptor (which gets applied\n * if you don't specify a custom one) returns `response.resource`.
\n * See {@link ngResource.$resource#using-interceptors below} for an example of using\n * interceptors in `$resource`.\n * - **`hasBody`** – `{boolean}` – If true, then the request will have a body.\n * If not specified, then only POST, PUT and PATCH requests will have a body. *\n * @param {Object} options Hash with custom settings that should extend the\n * default `$resourceProvider` behavior. The supported options are:\n *\n * - **`stripTrailingSlashes`** – {boolean} – If true then the trailing\n * slashes from any calculated URL will be stripped. (Defaults to true.)\n * - **`cancellable`** – {boolean} – If true, the request made by a \"non-instance\" call will be\n * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return value.\n * This can be overwritten per action. (Defaults to false.)\n *\n * @returns {Object} A resource \"class\" object with methods for the default set of resource actions\n * optionally extended with custom `actions`. The default set contains these actions:\n * ```js\n * {\n * 'get': {method: 'GET'},\n * 'save': {method: 'POST'},\n * 'query': {method: 'GET', isArray: true},\n * 'remove': {method: 'DELETE'},\n * 'delete': {method: 'DELETE'}\n * }\n * ```\n *\n * Calling these methods invoke {@link ng.$http} with the specified http method, destination and\n * parameters. When the data is returned from the server then the object is an instance of the\n * resource class. The actions `save`, `remove` and `delete` are available on it as methods with\n * the `$` prefix. This allows you to easily perform CRUD operations (create, read, update,\n * delete) on server-side data like this:\n * ```js\n * var User = $resource('/user/:userId', {userId: '@id'});\n * User.get({userId: 123}).$promise.then(function(user) {\n * user.abc = true;\n * user.$save();\n * });\n * ```\n *\n * It is important to realize that invoking a `$resource` object method immediately returns an\n * empty reference (object or array depending on `isArray`). Once the data is returned from the\n * server the existing reference is populated with the actual data. This is a useful trick since\n * usually the resource is assigned to a model which is then rendered by the view. Having an empty\n * object results in no rendering, once the data arrives from the server then the object is\n * populated with the data and the view automatically re-renders itself showing the new data. This\n * means that in most cases one never has to write a callback function for the action methods.\n *\n * The action methods on the class object or instance object can be invoked with the following\n * parameters:\n *\n * - \"class\" actions without a body: `Resource.action([parameters], [success], [error])`\n * - \"class\" actions with a body: `Resource.action([parameters], postData, [success], [error])`\n * - instance actions: `instance.$action([parameters], [success], [error])`\n *\n *\n * When calling instance methods, the instance itself is used as the request body (if the action\n * should have a body). By default, only actions using `POST`, `PUT` or `PATCH` have request\n * bodies, but you can use the `hasBody` configuration option to specify whether an action\n * should have a body or not (regardless of its HTTP method).\n *\n *\n * Success callback is called with (value (Object|Array), responseHeaders (Function),\n * status (number), statusText (string)) arguments, where `value` is the populated resource\n * instance or collection object. The error callback is called with (httpResponse) argument.\n *\n * Class actions return an empty instance (with the additional properties listed below).\n * Instance actions return a promise for the operation.\n *\n * The Resource instances and collections have these additional properties:\n *\n * - `$promise`: The {@link ng.$q promise} of the original server interaction that created this\n * instance or collection.\n *\n * On success, the promise is resolved with the same resource instance or collection object,\n * updated with data from server. This makes it easy to use in the\n * {@link ngRoute.$routeProvider `resolve` section of `$routeProvider.when()`} to defer view\n * rendering until the resource(s) are loaded.\n *\n * On failure, the promise is rejected with the {@link ng.$http http response} object.\n *\n * If an interceptor object was provided, the promise will instead be resolved with the value\n * returned by the response interceptor (on success) or responceError interceptor (on failure).\n *\n * - `$resolved`: `true` after first server interaction is completed (either with success or\n * rejection), `false` before that. Knowing if the Resource has been resolved is useful in\n * data-binding. If there is a response/responseError interceptor and it returns a promise,\n * `$resolved` will wait for that too.\n *\n * The Resource instances and collections have these additional methods:\n *\n * - `$cancelRequest`: If there is a cancellable, pending request related to the instance or\n * collection, calling this method will abort the request.\n *\n * The Resource instances have these additional methods:\n *\n * - `toJSON`: It returns a simple object without any of the extra properties added as part of\n * the Resource API. This object can be serialized through {@link angular.toJson} safely\n * without attaching AngularJS-specific fields. Notice that `JSON.stringify` (and\n * `angular.toJson`) automatically use this method when serializing a Resource instance\n * (see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON%28%29_behavior)).\n *\n * @example\n *\n * ### Basic usage\n *\n ```js\n // Define a CreditCard class\n var CreditCard = $resource('/users/:userId/cards/:cardId',\n {userId: 123, cardId: '@id'}, {\n charge: {method: 'POST', params: {charge: true}}\n });\n\n // We can retrieve a collection from the server\n var cards = CreditCard.query();\n // GET: /users/123/cards\n // server returns: [{id: 456, number: '1234', name: 'Smith'}]\n\n // Wait for the request to complete\n cards.$promise.then(function() {\n var card = cards[0];\n\n // Each item is an instance of CreditCard\n expect(card instanceof CreditCard).toEqual(true);\n\n // Non-GET methods are mapped onto the instances\n card.name = 'J. Smith';\n card.$save();\n // POST: /users/123/cards/456 {id: 456, number: '1234', name: 'J. Smith'}\n // server returns: {id: 456, number: '1234', name: 'J. Smith'}\n\n // Our custom method is mapped as well (since it uses POST)\n card.$charge({amount: 9.99});\n // POST: /users/123/cards/456?amount=9.99&charge=true {id: 456, number: '1234', name: 'J. Smith'}\n });\n\n // We can create an instance as well\n var newCard = new CreditCard({number: '0123'});\n newCard.name = 'Mike Smith';\n\n var savePromise = newCard.$save();\n // POST: /users/123/cards {number: '0123', name: 'Mike Smith'}\n // server returns: {id: 789, number: '0123', name: 'Mike Smith'}\n\n savePromise.then(function() {\n // Once the promise is resolved, the created instance\n // is populated with the data returned by the server\n expect(newCard.id).toEqual(789);\n });\n ```\n *\n * The object returned from a call to `$resource` is a resource \"class\" which has one \"static\"\n * method for each action in the definition.\n *\n * Calling these methods invokes `$http` on the `url` template with the given HTTP `method`,\n * `params` and `headers`.\n *\n * @example\n *\n * ### Accessing the response\n *\n * When the data is returned from the server then the object is an instance of the resource type and\n * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD\n * operations (create, read, update, delete) on server-side data.\n *\n ```js\n var User = $resource('/users/:userId', {userId: '@id'});\n User.get({userId: 123}).$promise.then(function(user) {\n user.abc = true;\n user.$save();\n });\n ```\n *\n * It's worth noting that the success callback for `get`, `query` and other methods gets called with\n * the resource instance (populated with the data that came from the server) as well as an `$http`\n * header getter function, the HTTP status code and the response status text. So one could rewrite\n * the above example and get access to HTTP headers as follows:\n *\n ```js\n var User = $resource('/users/:userId', {userId: '@id'});\n User.get({userId: 123}, function(user, getResponseHeaders) {\n user.abc = true;\n user.$save(function(user, putResponseHeaders) {\n // `user` => saved `User` object\n // `putResponseHeaders` => `$http` header getter\n });\n });\n ```\n *\n * @example\n *\n * ### Creating custom actions\n *\n * In this example we create a custom method on our resource to make a PUT request:\n *\n ```js\n var app = angular.module('app', ['ngResource']);\n\n // Some APIs expect a PUT request in the format URL/object/ID\n // Here we are creating an 'update' method\n app.factory('Notes', ['$resource', function($resource) {\n return $resource('/notes/:id', {id: '@id'}, {\n update: {method: 'PUT'}\n });\n }]);\n\n // In our controller we get the ID from the URL using `$location`\n app.controller('NotesCtrl', ['$location', 'Notes', function($location, Notes) {\n // First, retrieve the corresponding `Note` object from the server\n // (Assuming a URL of the form `.../notes?id=XYZ`)\n var noteId = $location.search().id;\n var note = Notes.get({id: noteId});\n\n note.$promise.then(function() {\n note.content = 'Hello, world!';\n\n // Now call `update` to save the changes on the server\n Notes.update(note);\n // This will PUT /notes/ID with the note object as the request payload\n\n // Since `update` is a non-GET method, it will also be available on the instance\n // (prefixed with `$`), so we could replace the `Note.update()` call with:\n //note.$update();\n });\n }]);\n ```\n *\n * @example\n *\n * ### Cancelling requests\n *\n * If an action's configuration specifies that it is cancellable, you can cancel the request related\n * to an instance or collection (as long as it is a result of a \"non-instance\" call):\n *\n ```js\n // ...defining the `Hotel` resource...\n var Hotel = $resource('/api/hotels/:id', {id: '@id'}, {\n // Let's make the `query()` method cancellable\n query: {method: 'get', isArray: true, cancellable: true}\n });\n\n // ...somewhere in the PlanVacationController...\n ...\n this.onDestinationChanged = function onDestinationChanged(destination) {\n // We don't care about any pending request for hotels\n // in a different destination any more\n if (this.availableHotels) {\n this.availableHotels.$cancelRequest();\n }\n\n // Let's query for hotels in `destination`\n // (calls: /api/hotels?location=)\n this.availableHotels = Hotel.query({location: destination});\n };\n ```\n *\n * @example\n *\n * ### Using interceptors\n *\n * You can use interceptors to transform the request or response, perform additional operations, and\n * modify the returned instance/collection. The following example, uses `request` and `response`\n * interceptors to augment the returned instance with additional info:\n *\n ```js\n var Thing = $resource('/api/things/:id', {id: '@id'}, {\n save: {\n method: 'POST',\n interceptor: {\n request: function(config) {\n // Before the request is sent out, store a timestamp on the request config\n config.requestTimestamp = Date.now();\n return config;\n },\n response: function(response) {\n // Get the instance from the response object\n var instance = response.resource;\n\n // Augment the instance with a custom `saveLatency` property, computed as the time\n // between sending the request and receiving the response.\n instance.saveLatency = Date.now() - response.config.requestTimestamp;\n\n // Return the instance\n return instance;\n }\n }\n }\n });\n\n Thing.save({foo: 'bar'}).$promise.then(function(thing) {\n console.log('That thing was saved in ' + thing.saveLatency + 'ms.');\n });\n ```\n *\n */\nangular.module('ngResource', ['ng']).\n info({ angularVersion: '1.8.2' }).\n provider('$resource', function ResourceProvider() {\n var PROTOCOL_AND_IPV6_REGEX = /^https?:\\/\\/\\[[^\\]]*][^/]*/;\n\n var provider = this;\n\n /**\n * @ngdoc property\n * @name $resourceProvider#defaults\n * @description\n * Object containing default options used when creating `$resource` instances.\n *\n * The default values satisfy a wide range of usecases, but you may choose to overwrite any of\n * them to further customize your instances. The available properties are:\n *\n * - **stripTrailingSlashes** – `{boolean}` – If true, then the trailing slashes from any\n * calculated URL will be stripped.
\n * (Defaults to true.)\n * - **cancellable** – `{boolean}` – If true, the request made by a \"non-instance\" call will be\n * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return\n * value. For more details, see {@link ngResource.$resource}. This can be overwritten per\n * resource class or action.
\n * (Defaults to false.)\n * - **actions** - `{Object.}` - A hash with default actions declarations. Actions are\n * high-level methods corresponding to RESTful actions/methods on resources. An action may\n * specify what HTTP method to use, what URL to hit, if the return value will be a single\n * object or a collection (array) of objects etc. For more details, see\n * {@link ngResource.$resource}. The actions can also be enhanced or overwritten per resource\n * class.
\n * The default actions are:\n * ```js\n * {\n * get: {method: 'GET'},\n * save: {method: 'POST'},\n * query: {method: 'GET', isArray: true},\n * remove: {method: 'DELETE'},\n * delete: {method: 'DELETE'}\n * }\n * ```\n *\n * #### Example\n *\n * For example, you can specify a new `update` action that uses the `PUT` HTTP verb:\n *\n * ```js\n * angular.\n * module('myApp').\n * config(['$resourceProvider', function ($resourceProvider) {\n * $resourceProvider.defaults.actions.update = {\n * method: 'PUT'\n * };\n * }]);\n * ```\n *\n * Or you can even overwrite the whole `actions` list and specify your own:\n *\n * ```js\n * angular.\n * module('myApp').\n * config(['$resourceProvider', function ($resourceProvider) {\n * $resourceProvider.defaults.actions = {\n * create: {method: 'POST'},\n * get: {method: 'GET'},\n * getAll: {method: 'GET', isArray:true},\n * update: {method: 'PUT'},\n * delete: {method: 'DELETE'}\n * };\n * });\n * ```\n *\n */\n this.defaults = {\n // Strip slashes by default\n stripTrailingSlashes: true,\n\n // Make non-instance requests cancellable (via `$cancelRequest()`)\n cancellable: false,\n\n // Default actions configuration\n actions: {\n 'get': {method: 'GET'},\n 'save': {method: 'POST'},\n 'query': {method: 'GET', isArray: true},\n 'remove': {method: 'DELETE'},\n 'delete': {method: 'DELETE'}\n }\n };\n\n this.$get = ['$http', '$log', '$q', '$timeout', function($http, $log, $q, $timeout) {\n\n var noop = angular.noop,\n forEach = angular.forEach,\n extend = angular.extend,\n copy = angular.copy,\n isArray = angular.isArray,\n isDefined = angular.isDefined,\n isFunction = angular.isFunction,\n isNumber = angular.isNumber,\n encodeUriQuery = angular.$$encodeUriQuery,\n encodeUriSegment = angular.$$encodeUriSegment;\n\n function Route(template, defaults) {\n this.template = template;\n this.defaults = extend({}, provider.defaults, defaults);\n this.urlParams = {};\n }\n\n Route.prototype = {\n setUrlParams: function(config, params, actionUrl) {\n var self = this,\n url = actionUrl || self.template,\n val,\n encodedVal,\n protocolAndIpv6 = '';\n\n var urlParams = self.urlParams = Object.create(null);\n forEach(url.split(/\\W/), function(param) {\n if (param === 'hasOwnProperty') {\n throw $resourceMinErr('badname', 'hasOwnProperty is not a valid parameter name.');\n }\n if (!(new RegExp('^\\\\d+$').test(param)) && param &&\n (new RegExp('(^|[^\\\\\\\\]):' + param + '(\\\\W|$)').test(url))) {\n urlParams[param] = {\n isQueryParamValue: (new RegExp('\\\\?.*=:' + param + '(?:\\\\W|$)')).test(url)\n };\n }\n });\n url = url.replace(/\\\\:/g, ':');\n url = url.replace(PROTOCOL_AND_IPV6_REGEX, function(match) {\n protocolAndIpv6 = match;\n return '';\n });\n\n params = params || {};\n forEach(self.urlParams, function(paramInfo, urlParam) {\n val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];\n if (isDefined(val) && val !== null) {\n if (paramInfo.isQueryParamValue) {\n encodedVal = encodeUriQuery(val, true);\n } else {\n encodedVal = encodeUriSegment(val);\n }\n url = url.replace(new RegExp(':' + urlParam + '(\\\\W|$)', 'g'), function(match, p1) {\n return encodedVal + p1;\n });\n } else {\n url = url.replace(new RegExp('(/?):' + urlParam + '(\\\\W|$)', 'g'), function(match,\n leadingSlashes, tail) {\n if (tail.charAt(0) === '/') {\n return tail;\n } else {\n return leadingSlashes + tail;\n }\n });\n }\n });\n\n // strip trailing slashes and set the url (unless this behavior is specifically disabled)\n if (self.defaults.stripTrailingSlashes) {\n url = url.replace(/\\/+$/, '') || '/';\n }\n\n // Collapse `/.` if found in the last URL path segment before the query.\n // E.g. `http://url.com/id/.format?q=x` becomes `http://url.com/id.format?q=x`.\n url = url.replace(/\\/\\.(?=\\w+($|\\?))/, '.');\n // Replace escaped `/\\.` with `/.`.\n // (If `\\.` comes from a param value, it will be encoded as `%5C.`.)\n config.url = protocolAndIpv6 + url.replace(/\\/(\\\\|%5C)\\./, '/.');\n\n\n // set params - delegate param encoding to $http\n forEach(params, function(value, key) {\n if (!self.urlParams[key]) {\n config.params = config.params || {};\n config.params[key] = value;\n }\n });\n }\n };\n\n\n function resourceFactory(url, paramDefaults, actions, options) {\n var route = new Route(url, options);\n\n actions = extend({}, provider.defaults.actions, actions);\n\n function extractParams(data, actionParams) {\n var ids = {};\n actionParams = extend({}, paramDefaults, actionParams);\n forEach(actionParams, function(value, key) {\n if (isFunction(value)) { value = value(data); }\n ids[key] = value && value.charAt && value.charAt(0) === '@' ?\n lookupDottedPath(data, value.substr(1)) : value;\n });\n return ids;\n }\n\n function defaultResponseInterceptor(response) {\n return response.resource;\n }\n\n function Resource(value) {\n shallowClearAndCopy(value || {}, this);\n }\n\n Resource.prototype.toJSON = function() {\n var data = extend({}, this);\n delete data.$promise;\n delete data.$resolved;\n delete data.$cancelRequest;\n return data;\n };\n\n forEach(actions, function(action, name) {\n var hasBody = action.hasBody === true || (action.hasBody !== false && /^(POST|PUT|PATCH)$/i.test(action.method));\n var numericTimeout = action.timeout;\n var cancellable = isDefined(action.cancellable) ?\n action.cancellable : route.defaults.cancellable;\n\n if (numericTimeout && !isNumber(numericTimeout)) {\n $log.debug('ngResource:\\n' +\n ' Only numeric values are allowed as `timeout`.\\n' +\n ' Promises are not supported in $resource, because the same value would ' +\n 'be used for multiple requests. If you are looking for a way to cancel ' +\n 'requests, you should use the `cancellable` option.');\n delete action.timeout;\n numericTimeout = null;\n }\n\n Resource[name] = function(a1, a2, a3, a4) {\n var params = {}, data, onSuccess, onError;\n\n switch (arguments.length) {\n case 4:\n onError = a4;\n onSuccess = a3;\n // falls through\n case 3:\n case 2:\n if (isFunction(a2)) {\n if (isFunction(a1)) {\n onSuccess = a1;\n onError = a2;\n break;\n }\n\n onSuccess = a2;\n onError = a3;\n // falls through\n } else {\n params = a1;\n data = a2;\n onSuccess = a3;\n break;\n }\n // falls through\n case 1:\n if (isFunction(a1)) onSuccess = a1;\n else if (hasBody) data = a1;\n else params = a1;\n break;\n case 0: break;\n default:\n throw $resourceMinErr('badargs',\n 'Expected up to 4 arguments [params, data, success, error], got {0} arguments',\n arguments.length);\n }\n\n var isInstanceCall = this instanceof Resource;\n var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));\n var httpConfig = {};\n var requestInterceptor = action.interceptor && action.interceptor.request || undefined;\n var requestErrorInterceptor = action.interceptor && action.interceptor.requestError ||\n undefined;\n var responseInterceptor = action.interceptor && action.interceptor.response ||\n defaultResponseInterceptor;\n var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||\n $q.reject;\n var successCallback = onSuccess ? function(val) {\n onSuccess(val, response.headers, response.status, response.statusText);\n } : undefined;\n var errorCallback = onError || undefined;\n var timeoutDeferred;\n var numericTimeoutPromise;\n var response;\n\n forEach(action, function(value, key) {\n switch (key) {\n default:\n httpConfig[key] = copy(value);\n break;\n case 'params':\n case 'isArray':\n case 'interceptor':\n case 'cancellable':\n break;\n }\n });\n\n if (!isInstanceCall && cancellable) {\n timeoutDeferred = $q.defer();\n httpConfig.timeout = timeoutDeferred.promise;\n\n if (numericTimeout) {\n numericTimeoutPromise = $timeout(timeoutDeferred.resolve, numericTimeout);\n }\n }\n\n if (hasBody) httpConfig.data = data;\n route.setUrlParams(httpConfig,\n extend({}, extractParams(data, action.params || {}), params),\n action.url);\n\n // Start the promise chain\n var promise = $q.\n resolve(httpConfig).\n then(requestInterceptor).\n catch(requestErrorInterceptor).\n then($http);\n\n promise = promise.then(function(resp) {\n var data = resp.data;\n\n if (data) {\n // Need to convert action.isArray to boolean in case it is undefined\n if (isArray(data) !== (!!action.isArray)) {\n throw $resourceMinErr('badcfg',\n 'Error in resource configuration for action `{0}`. Expected response to ' +\n 'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',\n isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);\n }\n if (action.isArray) {\n value.length = 0;\n forEach(data, function(item) {\n if (typeof item === 'object') {\n value.push(new Resource(item));\n } else {\n // Valid JSON values may be string literals, and these should not be converted\n // into objects. These items will not have access to the Resource prototype\n // methods, but unfortunately there\n value.push(item);\n }\n });\n } else {\n var promise = value.$promise; // Save the promise\n shallowClearAndCopy(data, value);\n value.$promise = promise; // Restore the promise\n }\n }\n\n resp.resource = value;\n response = resp;\n return responseInterceptor(resp);\n }, function(rejectionOrResponse) {\n rejectionOrResponse.resource = value;\n response = rejectionOrResponse;\n return responseErrorInterceptor(rejectionOrResponse);\n });\n\n promise = promise['finally'](function() {\n value.$resolved = true;\n if (!isInstanceCall && cancellable) {\n value.$cancelRequest = noop;\n $timeout.cancel(numericTimeoutPromise);\n timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;\n }\n });\n\n // Run the `success`/`error` callbacks, but do not let them affect the returned promise.\n promise.then(successCallback, errorCallback);\n\n if (!isInstanceCall) {\n // we are creating instance / collection\n // - set the initial promise\n // - return the instance / collection\n value.$promise = promise;\n value.$resolved = false;\n if (cancellable) value.$cancelRequest = cancelRequest;\n\n return value;\n }\n\n // instance call\n return promise;\n\n function cancelRequest(value) {\n promise.catch(noop);\n if (timeoutDeferred !== null) {\n timeoutDeferred.resolve(value);\n }\n }\n };\n\n\n Resource.prototype['$' + name] = function(params, success, error) {\n if (isFunction(params)) {\n error = success; success = params; params = {};\n }\n var result = Resource[name].call(this, params, this, success, error);\n return result.$promise || result;\n };\n });\n\n return Resource;\n }\n\n return resourceFactory;\n }];\n });\n\n\n})(window, window.angular);\n","require('./angular-resource');\nmodule.exports = 'ngResource';\n","/**\n * @license AngularJS v1.8.2\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* global shallowCopy: true */\n\n/**\n * Creates a shallow copy of an object, an array or a primitive.\n *\n * Assumes that there are no proto properties for objects.\n */\nfunction shallowCopy(src, dst) {\n if (isArray(src)) {\n dst = dst || [];\n\n for (var i = 0, ii = src.length; i < ii; i++) {\n dst[i] = src[i];\n }\n } else if (isObject(src)) {\n dst = dst || {};\n\n for (var key in src) {\n if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst || src;\n}\n\n/* global routeToRegExp: true */\n\n/**\n * @param {string} path - The path to parse. (It is assumed to have query and hash stripped off.)\n * @param {Object} opts - Options.\n * @return {Object} - An object containing an array of path parameter names (`keys`) and a regular\n * expression (`regexp`) that can be used to identify a matching URL and extract the path\n * parameter values.\n *\n * @description\n * Parses the given path, extracting path parameter names and a regular expression to match URLs.\n *\n * Originally inspired by `pathRexp` in `visionmedia/express/lib/utils.js`.\n */\nfunction routeToRegExp(path, opts) {\n var keys = [];\n\n var pattern = path\n .replace(/([().])/g, '\\\\$1')\n .replace(/(\\/)?:(\\w+)(\\*\\?|[?*])?/g, function(_, slash, key, option) {\n var optional = option === '?' || option === '*?';\n var star = option === '*' || option === '*?';\n keys.push({name: key, optional: optional});\n slash = slash || '';\n return (\n (optional ? '(?:' + slash : slash + '(?:') +\n (star ? '(.+?)' : '([^/]+)') +\n (optional ? '?)?' : ')')\n );\n })\n .replace(/([/$*])/g, '\\\\$1');\n\n if (opts.ignoreTrailingSlashes) {\n pattern = pattern.replace(/\\/+$/, '') + '/*';\n }\n\n return {\n keys: keys,\n regexp: new RegExp(\n '^' + pattern + '(?:[?#]|$)',\n opts.caseInsensitiveMatch ? 'i' : ''\n )\n };\n}\n\n/* global routeToRegExp: false */\n/* global shallowCopy: false */\n\n// `isArray` and `isObject` are necessary for `shallowCopy()` (included via `src/shallowCopy.js`).\n// They are initialized inside the `$RouteProvider`, to ensure `window.angular` is available.\nvar isArray;\nvar isObject;\nvar isDefined;\nvar noop;\n\n/**\n * @ngdoc module\n * @name ngRoute\n * @description\n *\n * The `ngRoute` module provides routing and deeplinking services and directives for AngularJS apps.\n *\n * ## Example\n * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`.\n *\n */\n/* global -ngRouteModule */\nvar ngRouteModule = angular.\n module('ngRoute', []).\n info({ angularVersion: '1.8.2' }).\n provider('$route', $RouteProvider).\n // Ensure `$route` will be instantiated in time to capture the initial `$locationChangeSuccess`\n // event (unless explicitly disabled). This is necessary in case `ngView` is included in an\n // asynchronously loaded template.\n run(instantiateRoute);\nvar $routeMinErr = angular.$$minErr('ngRoute');\nvar isEagerInstantiationEnabled;\n\n\n/**\n * @ngdoc provider\n * @name $routeProvider\n * @this\n *\n * @description\n *\n * Used for configuring routes.\n *\n * ## Example\n * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`.\n *\n * ## Dependencies\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n */\nfunction $RouteProvider() {\n isArray = angular.isArray;\n isObject = angular.isObject;\n isDefined = angular.isDefined;\n noop = angular.noop;\n\n function inherit(parent, extra) {\n return angular.extend(Object.create(parent), extra);\n }\n\n var routes = {};\n\n /**\n * @ngdoc method\n * @name $routeProvider#when\n *\n * @param {string} path Route path (matched against `$location.path`). If `$location.path`\n * contains redundant trailing slash or is missing one, the route will still match and the\n * `$location.path` will be updated to add or drop the trailing slash to exactly match the\n * route definition.\n *\n * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up\n * to the next slash are matched and stored in `$routeParams` under the given `name`\n * when the route matches.\n * * `path` can contain named groups starting with a colon and ending with a star:\n * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`\n * when the route matches.\n * * `path` can contain optional named groups with a question mark: e.g.`:name?`.\n *\n * For example, routes like `/color/:color/largecode/:largecode*\\/edit` will match\n * `/color/brown/largecode/code/with/slashes/edit` and extract:\n *\n * * `color: brown`\n * * `largecode: code/with/slashes`.\n *\n *\n * @param {Object} route Mapping information to be assigned to `$route.current` on route\n * match.\n *\n * Object properties:\n *\n * - `controller` – `{(string|Function)=}` – Controller fn that should be associated with\n * newly created scope or the name of a {@link angular.Module#controller registered\n * controller} if passed as a string.\n * - `controllerAs` – `{string=}` – An identifier name for a reference to the controller.\n * If present, the controller will be published to scope under the `controllerAs` name.\n * - `template` – `{(string|Function)=}` – html template as a string or a function that\n * returns an html template as a string which should be used by {@link\n * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.\n * This property takes precedence over `templateUrl`.\n *\n * If `template` is a function, it will be called with the following parameters:\n *\n * - `{Array.}` - route parameters extracted from the current\n * `$location.path()` by applying the current route\n *\n * One of `template` or `templateUrl` is required.\n *\n * - `templateUrl` – `{(string|Function)=}` – path or function that returns a path to an html\n * template that should be used by {@link ngRoute.directive:ngView ngView}.\n *\n * If `templateUrl` is a function, it will be called with the following parameters:\n *\n * - `{Array.}` - route parameters extracted from the current\n * `$location.path()` by applying the current route\n *\n * One of `templateUrl` or `template` is required.\n *\n * - `resolve` - `{Object.=}` - An optional map of dependencies which should\n * be injected into the controller. If any of these dependencies are promises, the router\n * will wait for them all to be resolved or one to be rejected before the controller is\n * instantiated.\n * If all the promises are resolved successfully, the values of the resolved promises are\n * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is\n * fired. If any of the promises are rejected the\n * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired.\n * For easier access to the resolved dependencies from the template, the `resolve` map will\n * be available on the scope of the route, under `$resolve` (by default) or a custom name\n * specified by the `resolveAs` property (see below). This can be particularly useful, when\n * working with {@link angular.Module#component components} as route templates.
\n *
\n * **Note:** If your scope already contains a property with this name, it will be hidden\n * or overwritten. Make sure, you specify an appropriate name for this property, that\n * does not collide with other properties on the scope.\n *
\n * The map object is:\n *\n * - `key` – `{string}`: a name of a dependency to be injected into the controller.\n * - `factory` - `{string|Function}`: If `string` then it is an alias for a service.\n * Otherwise if function, then it is {@link auto.$injector#invoke injected}\n * and the return value is treated as the dependency. If the result is a promise, it is\n * resolved before its value is injected into the controller. Be aware that\n * `ngRoute.$routeParams` will still refer to the previous route within these resolve\n * functions. Use `$route.current.params` to access the new route parameters, instead.\n *\n * - `resolveAs` - `{string=}` - The name under which the `resolve` map will be available on\n * the scope of the route. If omitted, defaults to `$resolve`.\n *\n * - `redirectTo` – `{(string|Function)=}` – value to update\n * {@link ng.$location $location} path with and trigger route redirection.\n *\n * If `redirectTo` is a function, it will be called with the following parameters:\n *\n * - `{Object.}` - route parameters extracted from the current\n * `$location.path()` by applying the current route templateUrl.\n * - `{string}` - current `$location.path()`\n * - `{Object}` - current `$location.search()`\n *\n * The custom `redirectTo` function is expected to return a string which will be used\n * to update `$location.url()`. If the function throws an error, no further processing will\n * take place and the {@link ngRoute.$route#$routeChangeError $routeChangeError} event will\n * be fired.\n *\n * Routes that specify `redirectTo` will not have their controllers, template functions\n * or resolves called, the `$location` will be changed to the redirect url and route\n * processing will stop. The exception to this is if the `redirectTo` is a function that\n * returns `undefined`. In this case the route transition occurs as though there was no\n * redirection.\n *\n * - `resolveRedirectTo` – `{Function=}` – a function that will (eventually) return the value\n * to update {@link ng.$location $location} URL with and trigger route redirection. In\n * contrast to `redirectTo`, dependencies can be injected into `resolveRedirectTo` and the\n * return value can be either a string or a promise that will be resolved to a string.\n *\n * Similar to `redirectTo`, if the return value is `undefined` (or a promise that gets\n * resolved to `undefined`), no redirection takes place and the route transition occurs as\n * though there was no redirection.\n *\n * If the function throws an error or the returned promise gets rejected, no further\n * processing will take place and the\n * {@link ngRoute.$route#$routeChangeError $routeChangeError} event will be fired.\n *\n * `redirectTo` takes precedence over `resolveRedirectTo`, so specifying both on the same\n * route definition, will cause the latter to be ignored.\n *\n * - `[reloadOnUrl=true]` - `{boolean=}` - reload route when any part of the URL changes\n * (including the path) even if the new URL maps to the same route.\n *\n * If the option is set to `false` and the URL in the browser changes, but the new URL maps\n * to the same route, then a `$routeUpdate` event is broadcasted on the root scope (without\n * reloading the route).\n *\n * - `[reloadOnSearch=true]` - `{boolean=}` - reload route when only `$location.search()`\n * or `$location.hash()` changes.\n *\n * If the option is set to `false` and the URL in the browser changes, then a `$routeUpdate`\n * event is broadcasted on the root scope (without reloading the route).\n *\n *
\n * **Note:** This option has no effect if `reloadOnUrl` is set to `false`.\n *
\n *\n * - `[caseInsensitiveMatch=false]` - `{boolean=}` - match routes without being case sensitive\n *\n * If the option is set to `true`, then the particular route can be matched without being\n * case sensitive\n *\n * @returns {Object} self\n *\n * @description\n * Adds a new route definition to the `$route` service.\n */\n this.when = function(path, route) {\n //copy original route object to preserve params inherited from proto chain\n var routeCopy = shallowCopy(route);\n if (angular.isUndefined(routeCopy.reloadOnUrl)) {\n routeCopy.reloadOnUrl = true;\n }\n if (angular.isUndefined(routeCopy.reloadOnSearch)) {\n routeCopy.reloadOnSearch = true;\n }\n if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {\n routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;\n }\n routes[path] = angular.extend(\n routeCopy,\n {originalPath: path},\n path && routeToRegExp(path, routeCopy)\n );\n\n // create redirection for trailing slashes\n if (path) {\n var redirectPath = (path[path.length - 1] === '/')\n ? path.substr(0, path.length - 1)\n : path + '/';\n\n routes[redirectPath] = angular.extend(\n {originalPath: path, redirectTo: path},\n routeToRegExp(redirectPath, routeCopy)\n );\n }\n\n return this;\n };\n\n /**\n * @ngdoc property\n * @name $routeProvider#caseInsensitiveMatch\n * @description\n *\n * A boolean property indicating if routes defined\n * using this provider should be matched using a case insensitive\n * algorithm. Defaults to `false`.\n */\n this.caseInsensitiveMatch = false;\n\n /**\n * @ngdoc method\n * @name $routeProvider#otherwise\n *\n * @description\n * Sets route definition that will be used on route change when no other route definition\n * is matched.\n *\n * @param {Object|string} params Mapping information to be assigned to `$route.current`.\n * If called with a string, the value maps to `redirectTo`.\n * @returns {Object} self\n */\n this.otherwise = function(params) {\n if (typeof params === 'string') {\n params = {redirectTo: params};\n }\n this.when(null, params);\n return this;\n };\n\n /**\n * @ngdoc method\n * @name $routeProvider#eagerInstantiationEnabled\n * @kind function\n *\n * @description\n * Call this method as a setter to enable/disable eager instantiation of the\n * {@link ngRoute.$route $route} service upon application bootstrap. You can also call it as a\n * getter (i.e. without any arguments) to get the current value of the\n * `eagerInstantiationEnabled` flag.\n *\n * Instantiating `$route` early is necessary for capturing the initial\n * {@link ng.$location#$locationChangeStart $locationChangeStart} event and navigating to the\n * appropriate route. Usually, `$route` is instantiated in time by the\n * {@link ngRoute.ngView ngView} directive. Yet, in cases where `ngView` is included in an\n * asynchronously loaded template (e.g. in another directive's template), the directive factory\n * might not be called soon enough for `$route` to be instantiated _before_ the initial\n * `$locationChangeSuccess` event is fired. Eager instantiation ensures that `$route` is always\n * instantiated in time, regardless of when `ngView` will be loaded.\n *\n * The default value is true.\n *\n * **Note**:
\n * You may want to disable the default behavior when unit-testing modules that depend on\n * `ngRoute`, in order to avoid an unexpected request for the default route's template.\n *\n * @param {boolean=} enabled - If provided, update the internal `eagerInstantiationEnabled` flag.\n *\n * @returns {*} The current value of the `eagerInstantiationEnabled` flag if used as a getter or\n * itself (for chaining) if used as a setter.\n */\n isEagerInstantiationEnabled = true;\n this.eagerInstantiationEnabled = function eagerInstantiationEnabled(enabled) {\n if (isDefined(enabled)) {\n isEagerInstantiationEnabled = enabled;\n return this;\n }\n\n return isEagerInstantiationEnabled;\n };\n\n\n this.$get = ['$rootScope',\n '$location',\n '$routeParams',\n '$q',\n '$injector',\n '$templateRequest',\n '$sce',\n '$browser',\n function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce, $browser) {\n\n /**\n * @ngdoc service\n * @name $route\n * @requires $location\n * @requires $routeParams\n *\n * @property {Object} current Reference to the current route definition.\n * The route definition contains:\n *\n * - `controller`: The controller constructor as defined in the route definition.\n * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for\n * controller instantiation. The `locals` contain\n * the resolved values of the `resolve` map. Additionally the `locals` also contain:\n *\n * - `$scope` - The current route scope.\n * - `$template` - The current route template HTML.\n *\n * The `locals` will be assigned to the route scope's `$resolve` property. You can override\n * the property name, using `resolveAs` in the route definition. See\n * {@link ngRoute.$routeProvider $routeProvider} for more info.\n *\n * @property {Object} routes Object with all route configuration Objects as its properties.\n *\n * @description\n * `$route` is used for deep-linking URLs to controllers and views (HTML partials).\n * It watches `$location.url()` and tries to map the path to an existing route definition.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.\n *\n * The `$route` service is typically used in conjunction with the\n * {@link ngRoute.directive:ngView `ngView`} directive and the\n * {@link ngRoute.$routeParams `$routeParams`} service.\n *\n * @example\n * This example shows how changing the URL hash causes the `$route` to match a route against the\n * URL, and the `ngView` pulls in the partial.\n *\n * \n * \n *
\n * Choose:\n * Moby |\n * Moby: Ch1 |\n * Gatsby |\n * Gatsby: Ch4 |\n * Scarlet Letter
\n *\n *
\n *\n *
\n *\n *
$location.path() = {{$location.path()}}
\n *
$route.current.templateUrl = {{$route.current.templateUrl}}
\n *
$route.current.params = {{$route.current.params}}
\n *
$route.current.scope.name = {{$route.current.scope.name}}
\n *
$routeParams = {{$routeParams}}
\n *
\n *
\n *\n * \n * controller: {{name}}
\n * Book Id: {{params.bookId}}
\n *
\n *\n * \n * controller: {{name}}
\n * Book Id: {{params.bookId}}
\n * Chapter Id: {{params.chapterId}}\n *
\n *\n * \n * angular.module('ngRouteExample', ['ngRoute'])\n *\n * .controller('MainController', function($scope, $route, $routeParams, $location) {\n * $scope.$route = $route;\n * $scope.$location = $location;\n * $scope.$routeParams = $routeParams;\n * })\n *\n * .controller('BookController', function($scope, $routeParams) {\n * $scope.name = 'BookController';\n * $scope.params = $routeParams;\n * })\n *\n * .controller('ChapterController', function($scope, $routeParams) {\n * $scope.name = 'ChapterController';\n * $scope.params = $routeParams;\n * })\n *\n * .config(function($routeProvider, $locationProvider) {\n * $routeProvider\n * .when('/Book/:bookId', {\n * templateUrl: 'book.html',\n * controller: 'BookController',\n * resolve: {\n * // I will cause a 1 second delay\n * delay: function($q, $timeout) {\n * var delay = $q.defer();\n * $timeout(delay.resolve, 1000);\n * return delay.promise;\n * }\n * }\n * })\n * .when('/Book/:bookId/ch/:chapterId', {\n * templateUrl: 'chapter.html',\n * controller: 'ChapterController'\n * });\n *\n * // configure html5 to get links working on jsfiddle\n * $locationProvider.html5Mode(true);\n * });\n *\n * \n *\n * \n * it('should load and compile correct template', function() {\n * element(by.linkText('Moby: Ch1')).click();\n * var content = element(by.css('[ng-view]')).getText();\n * expect(content).toMatch(/controller: ChapterController/);\n * expect(content).toMatch(/Book Id: Moby/);\n * expect(content).toMatch(/Chapter Id: 1/);\n *\n * element(by.partialLinkText('Scarlet')).click();\n *\n * content = element(by.css('[ng-view]')).getText();\n * expect(content).toMatch(/controller: BookController/);\n * expect(content).toMatch(/Book Id: Scarlet/);\n * });\n * \n *
\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeChangeStart\n * @eventType broadcast on root scope\n * @description\n * Broadcasted before a route change. At this point the route services starts\n * resolving all of the dependencies needed for the route change to occur.\n * Typically this involves fetching the view template as well as any dependencies\n * defined in `resolve` route property. Once all of the dependencies are resolved\n * `$routeChangeSuccess` is fired.\n *\n * The route change (and the `$location` change that triggered it) can be prevented\n * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on}\n * for more details about event object.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {Route} next Future route information.\n * @param {Route} current Current route information.\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeChangeSuccess\n * @eventType broadcast on root scope\n * @description\n * Broadcasted after a route change has happened successfully.\n * The `resolve` dependencies are now available in the `current.locals` property.\n *\n * {@link ngRoute.directive:ngView ngView} listens for the directive\n * to instantiate the controller and render the view.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {Route} current Current route information.\n * @param {Route|Undefined} previous Previous route information, or undefined if current is\n * first route entered.\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeChangeError\n * @eventType broadcast on root scope\n * @description\n * Broadcasted if a redirection function fails or any redirection or resolve promises are\n * rejected.\n *\n * @param {Object} angularEvent Synthetic event object\n * @param {Route} current Current route information.\n * @param {Route} previous Previous route information.\n * @param {Route} rejection The thrown error or the rejection reason of the promise. Usually\n * the rejection reason is the error that caused the promise to get rejected.\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeUpdate\n * @eventType broadcast on root scope\n * @description\n * Broadcasted if the same instance of a route (including template, controller instance,\n * resolved dependencies, etc.) is being reused. This can happen if either `reloadOnSearch` or\n * `reloadOnUrl` has been set to `false`.\n *\n * @param {Object} angularEvent Synthetic event object\n * @param {Route} current Current/previous route information.\n */\n\n var forceReload = false,\n preparedRoute,\n preparedRouteIsUpdateOnly,\n $route = {\n routes: routes,\n\n /**\n * @ngdoc method\n * @name $route#reload\n *\n * @description\n * Causes `$route` service to reload the current route even if\n * {@link ng.$location $location} hasn't changed.\n *\n * As a result of that, {@link ngRoute.directive:ngView ngView}\n * creates new scope and reinstantiates the controller.\n */\n reload: function() {\n forceReload = true;\n\n var fakeLocationEvent = {\n defaultPrevented: false,\n preventDefault: function fakePreventDefault() {\n this.defaultPrevented = true;\n forceReload = false;\n }\n };\n\n $rootScope.$evalAsync(function() {\n prepareRoute(fakeLocationEvent);\n if (!fakeLocationEvent.defaultPrevented) commitRoute();\n });\n },\n\n /**\n * @ngdoc method\n * @name $route#updateParams\n *\n * @description\n * Causes `$route` service to update the current URL, replacing\n * current route parameters with those specified in `newParams`.\n * Provided property names that match the route's path segment\n * definitions will be interpolated into the location's path, while\n * remaining properties will be treated as query params.\n *\n * @param {!Object} newParams mapping of URL parameter names to values\n */\n updateParams: function(newParams) {\n if (this.current && this.current.$$route) {\n newParams = angular.extend({}, this.current.params, newParams);\n $location.path(interpolate(this.current.$$route.originalPath, newParams));\n // interpolate modifies newParams, only query params are left\n $location.search(newParams);\n } else {\n throw $routeMinErr('norout', 'Tried updating route with no current route');\n }\n }\n };\n\n $rootScope.$on('$locationChangeStart', prepareRoute);\n $rootScope.$on('$locationChangeSuccess', commitRoute);\n\n return $route;\n\n /////////////////////////////////////////////////////\n\n /**\n * @param on {string} current url\n * @param route {Object} route regexp to match the url against\n * @return {?Object}\n *\n * @description\n * Check if the route matches the current url.\n *\n * Inspired by match in\n * visionmedia/express/lib/router/router.js.\n */\n function switchRouteMatcher(on, route) {\n var keys = route.keys,\n params = {};\n\n if (!route.regexp) return null;\n\n var m = route.regexp.exec(on);\n if (!m) return null;\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = keys[i - 1];\n\n var val = m[i];\n\n if (key && val) {\n params[key.name] = val;\n }\n }\n return params;\n }\n\n function prepareRoute($locationEvent) {\n var lastRoute = $route.current;\n\n preparedRoute = parseRoute();\n preparedRouteIsUpdateOnly = isNavigationUpdateOnly(preparedRoute, lastRoute);\n\n if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) {\n if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) {\n if ($locationEvent) {\n $locationEvent.preventDefault();\n }\n }\n }\n }\n\n function commitRoute() {\n var lastRoute = $route.current;\n var nextRoute = preparedRoute;\n\n if (preparedRouteIsUpdateOnly) {\n lastRoute.params = nextRoute.params;\n angular.copy(lastRoute.params, $routeParams);\n $rootScope.$broadcast('$routeUpdate', lastRoute);\n } else if (nextRoute || lastRoute) {\n forceReload = false;\n $route.current = nextRoute;\n\n var nextRoutePromise = $q.resolve(nextRoute);\n\n $browser.$$incOutstandingRequestCount('$route');\n\n nextRoutePromise.\n then(getRedirectionData).\n then(handlePossibleRedirection).\n then(function(keepProcessingRoute) {\n return keepProcessingRoute && nextRoutePromise.\n then(resolveLocals).\n then(function(locals) {\n // after route change\n if (nextRoute === $route.current) {\n if (nextRoute) {\n nextRoute.locals = locals;\n angular.copy(nextRoute.params, $routeParams);\n }\n $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute);\n }\n });\n }).catch(function(error) {\n if (nextRoute === $route.current) {\n $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error);\n }\n }).finally(function() {\n // Because `commitRoute()` is called from a `$rootScope.$evalAsync` block (see\n // `$locationWatch`), this `$$completeOutstandingRequest()` call will not cause\n // `outstandingRequestCount` to hit zero. This is important in case we are redirecting\n // to a new route which also requires some asynchronous work.\n\n $browser.$$completeOutstandingRequest(noop, '$route');\n });\n }\n }\n\n function getRedirectionData(route) {\n var data = {\n route: route,\n hasRedirection: false\n };\n\n if (route) {\n if (route.redirectTo) {\n if (angular.isString(route.redirectTo)) {\n data.path = interpolate(route.redirectTo, route.params);\n data.search = route.params;\n data.hasRedirection = true;\n } else {\n var oldPath = $location.path();\n var oldSearch = $location.search();\n var newUrl = route.redirectTo(route.pathParams, oldPath, oldSearch);\n\n if (angular.isDefined(newUrl)) {\n data.url = newUrl;\n data.hasRedirection = true;\n }\n }\n } else if (route.resolveRedirectTo) {\n return $q.\n resolve($injector.invoke(route.resolveRedirectTo)).\n then(function(newUrl) {\n if (angular.isDefined(newUrl)) {\n data.url = newUrl;\n data.hasRedirection = true;\n }\n\n return data;\n });\n }\n }\n\n return data;\n }\n\n function handlePossibleRedirection(data) {\n var keepProcessingRoute = true;\n\n if (data.route !== $route.current) {\n keepProcessingRoute = false;\n } else if (data.hasRedirection) {\n var oldUrl = $location.url();\n var newUrl = data.url;\n\n if (newUrl) {\n $location.\n url(newUrl).\n replace();\n } else {\n newUrl = $location.\n path(data.path).\n search(data.search).\n replace().\n url();\n }\n\n if (newUrl !== oldUrl) {\n // Exit out and don't process current next value,\n // wait for next location change from redirect\n keepProcessingRoute = false;\n }\n }\n\n return keepProcessingRoute;\n }\n\n function resolveLocals(route) {\n if (route) {\n var locals = angular.extend({}, route.resolve);\n angular.forEach(locals, function(value, key) {\n locals[key] = angular.isString(value) ?\n $injector.get(value) :\n $injector.invoke(value, null, null, key);\n });\n var template = getTemplateFor(route);\n if (angular.isDefined(template)) {\n locals['$template'] = template;\n }\n return $q.all(locals);\n }\n }\n\n function getTemplateFor(route) {\n var template, templateUrl;\n if (angular.isDefined(template = route.template)) {\n if (angular.isFunction(template)) {\n template = template(route.params);\n }\n } else if (angular.isDefined(templateUrl = route.templateUrl)) {\n if (angular.isFunction(templateUrl)) {\n templateUrl = templateUrl(route.params);\n }\n if (angular.isDefined(templateUrl)) {\n route.loadedTemplateUrl = $sce.valueOf(templateUrl);\n template = $templateRequest(templateUrl);\n }\n }\n return template;\n }\n\n /**\n * @returns {Object} the current active route, by matching it against the URL\n */\n function parseRoute() {\n // Match a route\n var params, match;\n angular.forEach(routes, function(route, path) {\n if (!match && (params = switchRouteMatcher($location.path(), route))) {\n match = inherit(route, {\n params: angular.extend({}, $location.search(), params),\n pathParams: params});\n match.$$route = route;\n }\n });\n // No route matched; fallback to \"otherwise\" route\n return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});\n }\n\n /**\n * @param {Object} newRoute - The new route configuration (as returned by `parseRoute()`).\n * @param {Object} oldRoute - The previous route configuration (as returned by `parseRoute()`).\n * @returns {boolean} Whether this is an \"update-only\" navigation, i.e. the URL maps to the same\n * route and it can be reused (based on the config and the type of change).\n */\n function isNavigationUpdateOnly(newRoute, oldRoute) {\n // IF this is not a forced reload\n return !forceReload\n // AND both `newRoute`/`oldRoute` are defined\n && newRoute && oldRoute\n // AND they map to the same Route Definition Object\n && (newRoute.$$route === oldRoute.$$route)\n // AND `reloadOnUrl` is disabled\n && (!newRoute.reloadOnUrl\n // OR `reloadOnSearch` is disabled\n || (!newRoute.reloadOnSearch\n // AND both routes have the same path params\n && angular.equals(newRoute.pathParams, oldRoute.pathParams)\n )\n );\n }\n\n /**\n * @returns {string} interpolation of the redirect path with the parameters\n */\n function interpolate(string, params) {\n var result = [];\n angular.forEach((string || '').split(':'), function(segment, i) {\n if (i === 0) {\n result.push(segment);\n } else {\n var segmentMatch = segment.match(/(\\w+)(?:[?*])?(.*)/);\n var key = segmentMatch[1];\n result.push(params[key]);\n result.push(segmentMatch[2] || '');\n delete params[key];\n }\n });\n return result.join('');\n }\n }];\n}\n\ninstantiateRoute.$inject = ['$injector'];\nfunction instantiateRoute($injector) {\n if (isEagerInstantiationEnabled) {\n // Instantiate `$route`\n $injector.get('$route');\n }\n}\n\nngRouteModule.provider('$routeParams', $RouteParamsProvider);\n\n\n/**\n * @ngdoc service\n * @name $routeParams\n * @requires $route\n * @this\n *\n * @description\n * The `$routeParams` service allows you to retrieve the current set of route parameters.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * The route parameters are a combination of {@link ng.$location `$location`}'s\n * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.\n * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.\n *\n * In case of parameter name collision, `path` params take precedence over `search` params.\n *\n * The service guarantees that the identity of the `$routeParams` object will remain unchanged\n * (but its properties will likely change) even when a route change occurs.\n *\n * Note that the `$routeParams` are only updated *after* a route change completes successfully.\n * This means that you cannot rely on `$routeParams` being correct in route resolve functions.\n * Instead you can use `$route.current.params` to access the new route's parameters.\n *\n * @example\n * ```js\n * // Given:\n * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby\n * // Route: /Chapter/:chapterId/Section/:sectionId\n * //\n * // Then\n * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}\n * ```\n */\nfunction $RouteParamsProvider() {\n this.$get = function() { return {}; };\n}\n\nngRouteModule.directive('ngView', ngViewFactory);\nngRouteModule.directive('ngView', ngViewFillContentFactory);\n\n\n/**\n * @ngdoc directive\n * @name ngView\n * @restrict ECA\n *\n * @description\n * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by\n * including the rendered template of the current route into the main layout (`index.html`) file.\n * Every time the current route changes, the included view changes with it according to the\n * configuration of the `$route` service.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * @animations\n * | Animation | Occurs |\n * |----------------------------------|-------------------------------------|\n * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |\n * | {@link ng.$animate#leave leave} | when the old element is removed from to the DOM |\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n * @param {string=} onload Expression to evaluate whenever the view updates.\n *\n * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll\n * $anchorScroll} to scroll the viewport after the view is updated.\n *\n * - If the attribute is not set, disable scrolling.\n * - If the attribute is set without value, enable scrolling.\n * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated\n * as an expression yields a truthy value.\n * @example\n \n \n
\n Choose:\n Moby |\n Moby: Ch1 |\n Gatsby |\n Gatsby: Ch4 |\n Scarlet Letter
\n\n
\n
\n
\n
\n\n
$location.path() = {{main.$location.path()}}
\n
$route.current.templateUrl = {{main.$route.current.templateUrl}}
\n
$route.current.params = {{main.$route.current.params}}
\n
$routeParams = {{main.$routeParams}}
\n
\n
\n\n \n
\n controller: {{book.name}}
\n Book Id: {{book.params.bookId}}
\n
\n
\n\n \n
\n controller: {{chapter.name}}
\n Book Id: {{chapter.params.bookId}}
\n Chapter Id: {{chapter.params.chapterId}}\n
\n
\n\n \n .view-animate-container {\n position:relative;\n height:100px!important;\n background:white;\n border:1px solid black;\n height:40px;\n overflow:hidden;\n }\n\n .view-animate {\n padding:10px;\n }\n\n .view-animate.ng-enter, .view-animate.ng-leave {\n transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;\n\n display:block;\n width:100%;\n border-left:1px solid black;\n\n position:absolute;\n top:0;\n left:0;\n right:0;\n bottom:0;\n padding:10px;\n }\n\n .view-animate.ng-enter {\n left:100%;\n }\n .view-animate.ng-enter.ng-enter-active {\n left:0;\n }\n .view-animate.ng-leave.ng-leave-active {\n left:-100%;\n }\n \n\n \n angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])\n .config(['$routeProvider', '$locationProvider',\n function($routeProvider, $locationProvider) {\n $routeProvider\n .when('/Book/:bookId', {\n templateUrl: 'book.html',\n controller: 'BookCtrl',\n controllerAs: 'book'\n })\n .when('/Book/:bookId/ch/:chapterId', {\n templateUrl: 'chapter.html',\n controller: 'ChapterCtrl',\n controllerAs: 'chapter'\n });\n\n $locationProvider.html5Mode(true);\n }])\n .controller('MainCtrl', ['$route', '$routeParams', '$location',\n function MainCtrl($route, $routeParams, $location) {\n this.$route = $route;\n this.$location = $location;\n this.$routeParams = $routeParams;\n }])\n .controller('BookCtrl', ['$routeParams', function BookCtrl($routeParams) {\n this.name = 'BookCtrl';\n this.params = $routeParams;\n }])\n .controller('ChapterCtrl', ['$routeParams', function ChapterCtrl($routeParams) {\n this.name = 'ChapterCtrl';\n this.params = $routeParams;\n }]);\n\n \n\n \n it('should load and compile correct template', function() {\n element(by.linkText('Moby: Ch1')).click();\n var content = element(by.css('[ng-view]')).getText();\n expect(content).toMatch(/controller: ChapterCtrl/);\n expect(content).toMatch(/Book Id: Moby/);\n expect(content).toMatch(/Chapter Id: 1/);\n\n element(by.partialLinkText('Scarlet')).click();\n\n content = element(by.css('[ng-view]')).getText();\n expect(content).toMatch(/controller: BookCtrl/);\n expect(content).toMatch(/Book Id: Scarlet/);\n });\n \n
\n */\n\n\n/**\n * @ngdoc event\n * @name ngView#$viewContentLoaded\n * @eventType emit on the current ngView scope\n * @description\n * Emitted every time the ngView content is reloaded.\n */\nngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];\nfunction ngViewFactory($route, $anchorScroll, $animate) {\n return {\n restrict: 'ECA',\n terminal: true,\n priority: 400,\n transclude: 'element',\n link: function(scope, $element, attr, ctrl, $transclude) {\n var currentScope,\n currentElement,\n previousLeaveAnimation,\n autoScrollExp = attr.autoscroll,\n onloadExp = attr.onload || '';\n\n scope.$on('$routeChangeSuccess', update);\n update();\n\n function cleanupLastView() {\n if (previousLeaveAnimation) {\n $animate.cancel(previousLeaveAnimation);\n previousLeaveAnimation = null;\n }\n\n if (currentScope) {\n currentScope.$destroy();\n currentScope = null;\n }\n if (currentElement) {\n previousLeaveAnimation = $animate.leave(currentElement);\n previousLeaveAnimation.done(function(response) {\n if (response !== false) previousLeaveAnimation = null;\n });\n currentElement = null;\n }\n }\n\n function update() {\n var locals = $route.current && $route.current.locals,\n template = locals && locals.$template;\n\n if (angular.isDefined(template)) {\n var newScope = scope.$new();\n var current = $route.current;\n\n // Note: This will also link all children of ng-view that were contained in the original\n // html. If that content contains controllers, ... they could pollute/change the scope.\n // However, using ng-view on an element with additional content does not make sense...\n // Note: We can't remove them in the cloneAttchFn of $transclude as that\n // function is called before linking the content, which would apply child\n // directives to non existing elements.\n var clone = $transclude(newScope, function(clone) {\n $animate.enter(clone, null, currentElement || $element).done(function onNgViewEnter(response) {\n if (response !== false && angular.isDefined(autoScrollExp)\n && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n $anchorScroll();\n }\n });\n cleanupLastView();\n });\n\n currentElement = clone;\n currentScope = current.scope = newScope;\n currentScope.$emit('$viewContentLoaded');\n currentScope.$eval(onloadExp);\n } else {\n cleanupLastView();\n }\n }\n }\n };\n}\n\n// This directive is called during the $transclude call of the first `ngView` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngView\n// is called.\nngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];\nfunction ngViewFillContentFactory($compile, $controller, $route) {\n return {\n restrict: 'ECA',\n priority: -400,\n link: function(scope, $element) {\n var current = $route.current,\n locals = current.locals;\n\n $element.html(locals.$template);\n\n var link = $compile($element.contents());\n\n if (current.controller) {\n locals.$scope = scope;\n var controller = $controller(current.controller, locals);\n if (current.controllerAs) {\n scope[current.controllerAs] = controller;\n }\n $element.data('$ngControllerController', controller);\n $element.children().data('$ngControllerController', controller);\n }\n scope[current.resolveAs || '$resolve'] = locals;\n\n link(scope);\n }\n };\n}\n\n\n})(window, window.angular);\n","require('./angular-route');\nmodule.exports = 'ngRoute';\n","/**\n * @license AngularJS v1.8.2\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Any commits to this file should be reviewed with security in mind. *\n * Changes to this file can potentially create security vulnerabilities. *\n * An approval from 2 Core members with history of modifying *\n * this file is required. *\n * *\n * Does the change somehow allow for arbitrary javascript to be executed? *\n * Or allows for someone to change the prototype of built-in objects? *\n * Or gives undesired access to variables likes document or window? *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isArray;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar nodeContains;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n * Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a trusted URI list) are\n * then serialized back to a properly escaped HTML string. This means that no unsafe input can make\n * it into the returned string.\n *\n * The trusted URIs for URL sanitization of attribute values is configured using the functions\n * `aHrefSanitizationTrustedUrlList` and `imgSrcSanitizationTrustedUrlList` of {@link $compileProvider}.\n *\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n \n \n \n
\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html=\"snippet\">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value\n
<div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\n</div>
\n
ng-bindAutomatically escapes
<div ng-bind=\"snippet\">
</div>
\n
\n
\n \n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('

an html\\nclick here\\nsnippet

');\n });\n\n it('should inline raw snippet if bound to a trusted value', function() {\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).\n toBe(\"

an html\\n\" +\n \"click here\\n\" +\n \"snippet

\");\n });\n\n it('should escape snippet without any filter', function() {\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new text');\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('new text');\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\n 'new text');\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n
\n
\n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n * @this\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n var hasBeenInstantiated = false;\n var svgEnabled = false;\n\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n hasBeenInstantiated = true;\n if (svgEnabled) {\n extend(validElements, svgElements);\n }\n return function(html) {\n var buf = [];\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n }));\n return buf.join('');\n };\n }];\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#enableSvg\n * @kind function\n *\n * @description\n * Enables a subset of svg to be supported by the sanitizer.\n *\n *
\n *

By enabling this setting without taking other precautions, you might expose your\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\n * link). Such behavior can then result in phishing incidents.

\n *\n *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:

\n *\n *
\n *\n *
\n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   
\n *
\n *\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n * @returns {boolean|$sanitizeProvider} Returns the currently configured value if called\n * without an argument or self for chaining otherwise.\n */\n this.enableSvg = function(enableSvg) {\n if (isDefined(enableSvg)) {\n svgEnabled = enableSvg;\n return this;\n } else {\n return svgEnabled;\n }\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidElements\n * @kind function\n *\n * @description\n * Extends the built-in lists of valid HTML/SVG elements, i.e. elements that are considered safe\n * and are not stripped off during sanitization. You can extend the following lists of elements:\n *\n * - `htmlElements`: A list of elements (tag names) to extend the current list of safe HTML\n * elements. HTML elements considered safe will not be removed during sanitization. All other\n * elements will be stripped off.\n *\n * - `htmlVoidElements`: This is similar to `htmlElements`, but marks the elements as\n * \"void elements\" (similar to HTML\n * [void elements](https://rawgit.com/w3c/html/html5.1-2/single-page.html#void-elements)). These\n * elements have no end tag and cannot have content.\n *\n * - `svgElements`: This is similar to `htmlElements`, but for SVG elements. This list is only\n * taken into account if SVG is {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for\n * `$sanitize`.\n *\n *
\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n *
\n *\n *
\n * Keep in mind that extending the built-in lists of elements may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the elements you add.\n *
\n *\n * @param {Array|Object} elements - A list of valid HTML elements or an object with one or\n * more of the following properties:\n * - **htmlElements** - `{Array}` - A list of elements to extend the current list of\n * HTML elements.\n * - **htmlVoidElements** - `{Array}` - A list of elements to extend the current list of\n * void HTML elements; i.e. elements that do not have an end tag.\n * - **svgElements** - `{Array}` - A list of elements to extend the current list of SVG\n * elements. The list of SVG elements is only taken into account if SVG is\n * {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for `$sanitize`.\n *\n * Passing an array (`[...]`) is equivalent to passing `{htmlElements: [...]}`.\n *\n * @return {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidElements = function(elements) {\n if (!hasBeenInstantiated) {\n if (isArray(elements)) {\n elements = {htmlElements: elements};\n }\n\n addElementsTo(svgElements, elements.svgElements);\n addElementsTo(voidElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlElements);\n }\n\n return this;\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidAttrs\n * @kind function\n *\n * @description\n * Extends the built-in list of valid attributes, i.e. attributes that are considered safe and are\n * not stripped off during sanitization.\n *\n * **Note**:\n * The new attributes will not be treated as URI attributes, which means their values will not be\n * sanitized as URIs using `$compileProvider`'s\n * {@link ng.$compileProvider#aHrefSanitizationTrustedUrlList aHrefSanitizationTrustedUrlList} and\n * {@link ng.$compileProvider#imgSrcSanitizationTrustedUrlList imgSrcSanitizationTrustedUrlList}.\n *\n *
\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n *
\n *\n *
\n * Keep in mind that extending the built-in list of attributes may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the attributes you add.\n *
\n *\n * @param {Array} attrs - A list of valid attributes.\n *\n * @returns {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidAttrs = function(attrs) {\n if (!hasBeenInstantiated) {\n extend(validAttrs, arrayToMap(attrs, true));\n }\n return this;\n };\n\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Private stuff\n //////////////////////////////////////////////////////////////////////////////////////////////////\n\n bind = angular.bind;\n extend = angular.extend;\n forEach = angular.forEach;\n isArray = angular.isArray;\n isDefined = angular.isDefined;\n lowercase = angular.$$lowercase;\n noop = angular.noop;\n\n htmlParser = htmlParserImpl;\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return !!(this.compareDocumentPosition(arg) & 16);\n };\n\n // Regular Expressions for parsing tags and attributes\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n // Match everything outside of normal chars and \" (quote character)\n NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;\n\n\n // Good source of info about elements and attributes\n // http://dev.w3.org/html5/spec/Overview.html#semantics\n // http://simon.html5.org/html-elements\n\n // Safe Void Elements - HTML5\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\n var voidElements = stringToMap('area,br,col,hr,img,wbr');\n\n // Elements that you can, intentionally, leave open (and which close themselves)\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n var optionalEndTagBlockElements = stringToMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),\n optionalEndTagInlineElements = stringToMap('rp,rt'),\n optionalEndTagElements = extend({},\n optionalEndTagInlineElements,\n optionalEndTagBlockElements);\n\n // Safe Block Elements - HTML5\n var blockElements = extend({}, optionalEndTagBlockElements, stringToMap('address,article,' +\n 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));\n\n // Inline Elements - HTML5\n var inlineElements = extend({}, optionalEndTagInlineElements, stringToMap('a,abbr,acronym,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +\n 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));\n\n // SVG Elements\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n // They can potentially allow for arbitrary javascript to be executed. See #11290\n var svgElements = stringToMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +\n 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +\n 'radialGradient,rect,stop,svg,switch,text,title,tspan');\n\n // Blocked Elements (will be stripped)\n var blockedElements = stringToMap('script,style');\n\n var validElements = extend({},\n voidElements,\n blockElements,\n inlineElements,\n optionalEndTagElements);\n\n //Attributes that have href and hence need to be sanitized\n var uriAttrs = stringToMap('background,cite,href,longdesc,src,xlink:href,xml:base');\n\n var htmlAttrs = stringToMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n 'valign,value,vspace,width');\n\n // SVG attributes (without \"id\" and \"name\" attributes)\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n var svgAttrs = stringToMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n var validAttrs = extend({},\n uriAttrs,\n svgAttrs,\n htmlAttrs);\n\n function stringToMap(str, lowercaseKeys) {\n return arrayToMap(str.split(','), lowercaseKeys);\n }\n\n function arrayToMap(items, lowercaseKeys) {\n var obj = {}, i;\n for (i = 0; i < items.length; i++) {\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n }\n return obj;\n }\n\n function addElementsTo(elementsMap, newElements) {\n if (newElements && newElements.length) {\n extend(elementsMap, arrayToMap(newElements));\n }\n }\n\n /**\n * Create an inert document that contains the dirty HTML that needs sanitizing.\n * We use the DOMParser API by default and fall back to createHTMLDocument if DOMParser is not\n * available.\n */\n var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) {\n if (isDOMParserAvailable()) {\n return getInertBodyElement_DOMParser;\n }\n\n if (!document || !document.implementation) {\n throw $sanitizeMinErr('noinert', 'Can\\'t create an inert html document');\n }\n var inertDocument = document.implementation.createHTMLDocument('inert');\n var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body');\n return getInertBodyElement_InertDocument;\n\n function isDOMParserAvailable() {\n try {\n return !!getInertBodyElement_DOMParser('');\n } catch (e) {\n return false;\n }\n }\n\n function getInertBodyElement_DOMParser(html) {\n // We add this dummy element to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\n html = '' + html;\n try {\n var body = new window.DOMParser().parseFromString(html, 'text/html').body;\n body.firstChild.remove();\n return body;\n } catch (e) {\n return undefined;\n }\n }\n\n function getInertBodyElement_InertDocument(html) {\n inertBodyElement.innerHTML = html;\n\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (document.documentMode) {\n stripCustomNsAttrs(inertBodyElement);\n }\n\n return inertBodyElement;\n }\n })(window, window.document);\n\n /**\n * @example\n * htmlParser(htmlString, {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\n function htmlParserImpl(html, handler) {\n if (html === null || html === undefined) {\n html = '';\n } else if (typeof html !== 'string') {\n html = '' + html;\n }\n\n var inertBodyElement = getInertBodyElement(html);\n if (!inertBodyElement) return '';\n\n //mXSS protection\n var mXSSAttempts = 5;\n do {\n if (mXSSAttempts === 0) {\n throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n\n // trigger mXSS if it is going to happen by reading and writing the innerHTML\n html = inertBodyElement.innerHTML;\n inertBodyElement = getInertBodyElement(html);\n } while (html !== inertBodyElement.innerHTML);\n\n var node = inertBodyElement.firstChild;\n while (node) {\n switch (node.nodeType) {\n case 1: // ELEMENT_NODE\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n break;\n case 3: // TEXT NODE\n handler.chars(node.textContent);\n break;\n }\n\n var nextNode;\n if (!(nextNode = node.firstChild)) {\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n nextNode = getNonDescendant('nextSibling', node);\n if (!nextNode) {\n while (nextNode == null) {\n node = getNonDescendant('parentNode', node);\n if (node === inertBodyElement) break;\n nextNode = getNonDescendant('nextSibling', node);\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n }\n }\n }\n node = nextNode;\n }\n\n while ((node = inertBodyElement.firstChild)) {\n inertBodyElement.removeChild(node);\n }\n }\n\n function attrToMap(attrs) {\n var map = {};\n for (var i = 0, ii = attrs.length; i < ii; i++) {\n var attr = attrs[i];\n map[attr.name] = attr.value;\n }\n return map;\n }\n\n\n /**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\n function encodeEntities(value) {\n return value.\n replace(/&/g, '&').\n replace(SURROGATE_PAIR_REGEXP, function(value) {\n var hi = value.charCodeAt(0);\n var low = value.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n }).\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n return '&#' + value.charCodeAt(0) + ';';\n }).\n replace(//g, '>');\n }\n\n /**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.join('') to get out sanitized html string\n * @returns {object} in the form of {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * }\n */\n function htmlSanitizeWriterImpl(buf, uriValidator) {\n var ignoreCurrentElement = false;\n var out = bind(buf, buf.push);\n return {\n start: function(tag, attrs) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && blockedElements[tag]) {\n ignoreCurrentElement = tag;\n }\n if (!ignoreCurrentElement && validElements[tag] === true) {\n out('<');\n out(tag);\n forEach(attrs, function(value, key) {\n var lkey = lowercase(key);\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n if (validAttrs[lkey] === true &&\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n out(' ');\n out(key);\n out('=\"');\n out(encodeEntities(value));\n out('\"');\n }\n });\n out('>');\n }\n },\n end: function(tag) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n out('');\n }\n // eslint-disable-next-line eqeqeq\n if (tag == ignoreCurrentElement) {\n ignoreCurrentElement = false;\n }\n },\n chars: function(chars) {\n if (!ignoreCurrentElement) {\n out(encodeEntities(chars));\n }\n }\n };\n }\n\n\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n * to allow any of these custom attributes. This method strips them all.\n *\n * @param node Root element to process\n */\n function stripCustomNsAttrs(node) {\n while (node) {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n var attrs = node.attributes;\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrNode = attrs[i];\n var attrName = attrNode.name.toLowerCase();\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n node.removeAttributeNode(attrNode);\n i--;\n l--;\n }\n }\n }\n\n var nextNode = node.firstChild;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n\n node = getNonDescendant('nextSibling', node);\n }\n }\n\n function getNonDescendant(propName, node) {\n // An element is clobbered if its `propName` property points to one of its descendants\n var nextNode = node[propName];\n if (nextNode && nodeContains.call(node, nextNode)) {\n throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);\n }\n return nextNode;\n }\n}\n\nfunction sanitizeText(chars) {\n var buf = [];\n var writer = htmlSanitizeWriter(buf, noop);\n writer.chars(chars);\n return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', [])\n .provider('$sanitize', $SanitizeProvider)\n .info({ angularVersion: '1.8.2' });\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n \n *\n * @example\n \n \n
\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FilterSourceRendered
linky filter\n
<div ng-bind-html=\"snippet | linky\">
</div>
\n
\n
\n
linky target\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
</div>
\n
\n
\n
linky custom attributes\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
</div>
\n
\n
\n
no filter
<div ng-bind=\"snippet\">
</div>
\n \n \n angular.module('linkyExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', function($scope) {\n $scope.snippet =\n 'Pretty text with some links:\\n' +\n 'http://angularjs.org/,\\n' +\n 'mailto:us@somewhere.org,\\n' +\n 'another@somewhere.org,\\n' +\n 'and one more: ftp://127.0.0.1/.';\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\n }]);\n \n \n it('should linkify the snippet with urls', function() {\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n });\n\n it('should not linkify snippet without the linky filter', function() {\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new http://link.');\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('new http://link.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n .toBe('new http://link.');\n });\n\n it('should work with the target property', function() {\n expect(element(by.id('linky-target')).\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n });\n\n it('should optionally add custom attributes', function() {\n expect(element(by.id('linky-custom-attributes')).\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n });\n \n \n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n var LINKY_URL_REGEXP =\n /((s?ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n MAILTO_REGEXP = /^mailto:/i;\n\n var linkyMinErr = angular.$$minErr('linky');\n var isDefined = angular.isDefined;\n var isFunction = angular.isFunction;\n var isObject = angular.isObject;\n var isString = angular.isString;\n\n return function(text, target, attributes) {\n if (text == null || text === '') return text;\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n var attributesFn =\n isFunction(attributes) ? attributes :\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\n function getEmptyAttributesObject() {return {};};\n\n var match;\n var raw = text;\n var html = [];\n var url;\n var i;\n while ((match = raw.match(LINKY_URL_REGEXP))) {\n // We can not end in these as they are sometimes found at the end of the sentence\n url = match[0];\n // if we did not match ftp/http/www/mailto then assume mailto\n if (!match[2] && !match[4]) {\n url = (match[3] ? 'http://' : 'mailto:') + url;\n }\n i = match.index;\n addText(raw.substr(0, i));\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n raw = raw.substring(i + match[0].length);\n }\n addText(raw);\n return $sanitize(html.join(''));\n\n function addText(text) {\n if (!text) {\n return;\n }\n html.push(sanitizeText(text));\n }\n\n function addLink(url, text) {\n var key, linkAttributes = attributesFn(url);\n html.push('');\n addText(text);\n html.push('');\n }\n };\n}]);\n\n\n})(window, window.angular);\n","require('./angular-sanitize');\nmodule.exports = 'ngSanitize';\n","/*\\\n|*| ========================================================================\n|*| Bootstrap Toggle: bootstrap4-toggle.js v3.6.1\n|*| https://gitbrent.github.io/bootstrap4-toggle/\n|*| ========================================================================\n|*| Copyright 2018-2019 Brent Ely\n|*| Licensed under MIT\n|*| ========================================================================\n\\*/\n!function(a){\"use strict\";function l(t,e){this.$element=a(t),this.options=a.extend({},this.defaults(),e),this.render()}l.VERSION=\"3.6.0\",l.DEFAULTS={on:\"On\",off:\"Off\",onstyle:\"primary\",offstyle:\"light\",size:\"normal\",style:\"\",width:null,height:null},l.prototype.defaults=function(){return{on:this.$element.attr(\"data-on\")||l.DEFAULTS.on,off:this.$element.attr(\"data-off\")||l.DEFAULTS.off,onstyle:this.$element.attr(\"data-onstyle\")||l.DEFAULTS.onstyle,offstyle:this.$element.attr(\"data-offstyle\")||l.DEFAULTS.offstyle,size:this.$element.attr(\"data-size\")||l.DEFAULTS.size,style:this.$element.attr(\"data-style\")||l.DEFAULTS.style,width:this.$element.attr(\"data-width\")||l.DEFAULTS.width,height:this.$element.attr(\"data-height\")||l.DEFAULTS.height}},l.prototype.render=function(){this._onstyle=\"btn-\"+this.options.onstyle,this._offstyle=\"btn-\"+this.options.offstyle;var t=\"large\"===this.options.size||\"lg\"===this.options.size?\"btn-lg\":\"small\"===this.options.size||\"sm\"===this.options.size?\"btn-sm\":\"mini\"===this.options.size||\"xs\"===this.options.size?\"btn-xs\":\"\",e=a('