{"version":3,"sources":["webpack:///vendor.7d0046.min.js","webpack:///./app/vendor.js","webpack:///./~/angular-animate/angular-animate.js","webpack:///./~/angular-animate/index.js","webpack:///./~/angular-aria/angular-aria.js","webpack:///./~/angular-aria/index.js","webpack:///./~/angular-gettext/dist/angular-gettext.js","webpack:///./~/angular-material/angular-material.js","webpack:///./~/angular-material/index.js","webpack:///./~/angular-messages/angular-messages.js","webpack:///./~/angular-messages/index.js","webpack:///./~/angular-ui-router/release/angular-ui-router.js","webpack:///./~/angular/angular.js","webpack:///./~/angular/index.js","webpack:///./~/clipboard/lib/clipboard-action.js","webpack:///./~/clipboard/lib/clipboard.js","webpack:///./~/css-loader/lib/css-base.js","webpack:///./~/delegate/src/closest.js","webpack:///./~/delegate/src/delegate.js","webpack:///./~/good-listener/src/is.js","webpack:///./~/good-listener/src/listen.js","webpack:///./~/select/src/select.js","webpack:///./~/tiny-emitter/index.js"],"names":["webpackJsonp","0","module","exports","__webpack_require__","7","window","angular","undefined","assertArg","arg","name","reason","ngMinErr","mergeClasses","a","b","isArray","join","packageStyles","options","styles","to","from","pendClasses","classes","fix","isPrefix","className","isString","length","split","forEach","klass","i","removeFromArray","arr","val","index","indexOf","splice","stripCommentsFromElement","element","jqLite","nodeType","ELEMENT_NODE","extractElementNode","elm","$$addClass","$$jqLite","addClass","$$removeClass","removeClass","applyAnimationClassesFactory","prepareAnimationOptions","$$prepared","domOperation","noop","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","css","mergeAnimationDetails","oldAnimation","newAnimation","target","newOptions","toAdd","toRemove","resolveElementClasses","attr","preparationClasses","concatWithSpace","realDomOperation","extend","existing","splitClassesToLookup","obj","ADD_CLASS","REMOVE_CLASS","flags","value","key","prop","allow","getDomNode","applyGeneratedPreparationClasses","event","EVENT_CLASS_PREFIX","ADD_CLASS_SUFFIX","REMOVE_CLASS_SUFFIX","clearGeneratedClasses","activeClasses","blockTransitions","node","duration","applyInlineStyle","TRANSITION_DELAY_PROP","blockKeyframeAnimations","applyBlock","ANIMATION_PROP","ANIMATION_PLAYSTATE_KEY","styleTuple","style","getCssKeyframeDurationStyle","ANIMATION_DURATION_PROP","getCssDelayStyle","delay","isKeyframeAnimation","ANIMATION_DELAY_PROP","computeCssStyles","$window","properties","Object","create","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","c","charAt","parseMaxTime","str","maxValue","values","substring","parseFloat","Math","max","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","TRANSITION_PROP","DURATION_KEY","createLocalCacheLookup","cache","flush","count","entry","total","get","put","registerRestorableStyles","backup","isDefined","getPropertyValue","TRANSITIONEND_EVENT","ANIMATIONEND_EVENT","copy","isObject","isUndefined","isFunction","isElement","ACTIVE_CLASS_SUFFIX","PREPARE_CLASS_SUFFIX","NG_ANIMATE_CLASSNAME","NG_ANIMATE_CHILDREN_DATA","CSS_PREFIX","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","PROPERTY_KEY","DELAY_KEY","TIMING_KEY","ANIMATION_ITERATION_COUNT_KEY","SAFE_FAST_FORWARD_DURATION_VALUE","TRANSITION_DURATION_PROP","$$minErr","$$rAFSchedulerFactory","$$rAF","scheduler","tasks","queue","concat","nextTick","items","shift","cancelFn","waitUntilQuiet","fn","$$AnimateChildrenDirective","$interpolate","link","scope","attrs","setData","data","ngAnimateChildren","$observe","ANIMATE_TIMER_KEY","ONE_SECOND","ELAPSED_TIME_MAX_DECIMAL_PLACES","CLOSING_TIME_BUFFER","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","animationDuration","animationDelay","animationIterationCount","DETECT_STAGGER_CSS_PROPERTIES","$AnimateCssProvider","$animateProvider","gcsLookup","gcsStaggerLookup","this","$get","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue","gcsHashFn","extraClasses","KEY","parentNode","parentID","parentCounter","getAttribute","computeCachedCssStyles","cacheKey","timings","computeCachedCssStaggerStyles","stagger","staggerClassName","callback","rafWaitQueue","push","pageWidth","computeTimings","aD","tD","maxDelay","maxDuration","applyAnimationClasses","initialOptions","endFn","close","rejected","animationClosed","animationCompleted","animationPaused","$$skipPreparationClasses","temporaryStyles","keys","restoreStyles","setProperty","removeProperty","onDone","events","off","onAnimationProgress","animationTimerData","cancel","timer","removeData","runner","complete","applyBlocking","blockTransition","blockKeyframeAnimation","closeAndReturnNoopAnimator","end","$$willAnimate","start","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","elapsedTime","toFixed","startTime","maxDelayTime","triggerAnimationStart","recalculateTimingStyles","fullClassName","relativeDelay","hasTransitions","hasAnimations","applyAnimationDelay","delayStyle","maxDurationTime","easing","easeProp","easeVal","timerTime","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","on","cleanupStyles","playPause","playAnimation","maxStagger","itemIndex","floor","runnerHost","resume","pause","enabled","animations","transitions","method","isStructural","structural","structuralClassName","addRemoveClassName","applyClassesEarly","trim","hasToStyles","containsKeyframeAnimation","keyframeStyle","staggerVal","transitionStyle","durationStyle","staggerIndex","isFirst","skipBlocking","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","$$AnimateCssDriverProvider","$$animationProvider","isDocumentFragment","drivers","NG_ANIMATE_SHIM_CLASS_NAME","NG_ANIMATE_ANCHOR_CLASS_NAME","NG_OUT_ANCHOR_CLASS_NAME","NG_IN_ANCHOR_CLASS_NAME","$animateCss","$rootScope","$rootElement","$document","filterCssClasses","replace","getUniqueValues","filter","prepareAnchoredAnimation","outAnchor","inAnchor","calculateAnchorStyles","anchor","coords","getBoundingClientRect","bodyNode","scrollTop","scrollLeft","prepareOutAnimation","animator","clone","getClassVal","prepareInAnimation","endingClasses","startingClasses","remove","cloneNode","rootBodyElement","append","animatorIn","animatorOut","startingAnimator","currentAnimation","done","prepareFromToAnchorAnimation","anchors","fromAnimation","prepareRegularAnimation","toAnimation","anchorAnimations","outElement","inElement","animationRunners","animation","all","status","animationDetails","body","rootNode","contains","$$AnimateJsProvider","$injector","lookupAnimations","matches","flagMap","animationFactory","$$registeredAnimations","applyOptions","executeAnimationFn","args","classesToAdd","classesToRemove","apply","groupEventedAnimations","fnName","operations","ani","endProgressCb","resolved","onAnimationComplete","result","cancelled","packageAnimations","runners","animateFn","reject","arguments","before","after","afterFn","beforeFn","toUpperCase","substr","onComplete","success","endAnimations","closeActiveAnimations","chain","setHost","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory","NG_ANIMATE_ATTR_NAME","NG_ANIMATE_PIN_DATA","$$AnimateQueueProvider","makeTruthyCssClassMap","classString","ONE_SPACE","map","hasMatchingClasses","newClassString","currentClassString","currentClassMap","some","isAllowed","ruleType","previousAnimation","rules","hasAnimationClasses","and","PRE_DIGEST_STATE","RUNNING_STATE","skip","state","nA","nR","cA","cR","$$HashMap","$$animation","$templateRequest","postDigestTaskFactory","postDigestCalled","$$postDigest","normalizeAnimationDetails","findCallbacks","parent","targetNode","targetParentNode","entries","callbackRegistry","call","queueAnimation","notifyProgress","phase","runInNextPostDigestOrNow","callbacks","progress","isAnimatableClassName","skipAnimations","animationsEnabled","hidden","disabledElementsLookup","existingAnimation","activeAnimationsLookup","hasExistingAnimation","areAnimationsAllowed","closeChildAnimations","skipAnimationFlag","cancelAnimationFlag","joinAnimationFlag","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationCancelled","parentElement","realRunner","children","querySelectorAll","child","parseInt","removeAttribute","isMatchingElement","nodeOrElmA","nodeOrElmB","animateChildren","bodyElement","bodyElementDetected","nodeName","rootElementDetected","parentAnimationDetected","elementDisabled","parentHost","details","parentElementDisabled","allowAnimation","setAttribute","oldValue","newValue","deregisterWatch","$watch","totalPendingRequests","isEmpty","classNameFilter","test","Node","prototype","compareDocumentPosition","container","filterFromRegistry","list","matchContainer","matchCallback","containerNode","isMatch","pin","bool","argCount","hasElement","recordExists","$$AnimationProvider","setRunner","RUNNER_STORAGE_KEY","removeRunner","getRunner","NG_ANIMATE_REF_ATTR","sortAnimations","processNode","processed","elementNode","domNode","lookup","parentEntry","tree","flatten","remainingLevelEntries","nextLevelEntries","row","childEntry","animationQueue","getAnchorNodes","SELECTOR","hasAttribute","groupAnimations","preparedAnimations","refLookup","enterOrMove","anchorNodes","direction","animationID","usedIndicesLookup","anchorGroups","indexKey","toString","lookupKey","group","beforeStart","cssClassesIntersection","out","in","aa","j","invokeFirstDriver","driverName","has","factory","driver","tempClasses","prepareClassName","updateAnimationRunners","newRunner","update","handleDestroyedElement","groupedAnimations","toBeSortedAnimations","animationEntry","startAnimationFn","closeFn","targetElement","operation","animationRunner","ngAnimateSwapDirective","$animate","restrict","transclude","terminal","priority","$element","ctrl","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","leave","$destroy","$new","enter","directive","provider","3","8","$AriaProvider","watchExpr","attrName","ariaAttr","nodeBlackList","negate","elem","ariaCamelName","$normalize","config","isNodeOneOf","boolVal","ariaHidden","ariaChecked","ariaDisabled","ariaRequired","ariaInvalid","ariaValue","tabindex","bindKeypress","bindRoleForClick","newConfig","$$watchExpr","ngAriaModule","nodeTypeArray","$aria","shouldAttachAttr","normalizedAttr","allowBlacklistEls","shouldAttachRole","role","getShape","type","require","compile","shape","pre","ngModel","$isEmpty","post","ngAriaWatchModelValue","$modelValue","getRadioReaction","newVal","$viewValue","getCheckboxReaction","needsTabIndex","needsAriaValuemin","hasOwnProperty","needsAriaValuemax","needsAriaValuenow","$validators","required","$invalid","ngMessages","$parse","ngClick","ngKeypress","$event","keyCode","which","$apply","4","9","constant","gettextPlurals","gettextFallbackLanguage","$http","$cacheFactory","broadcastUpdated","$broadcast","catalog","noContext","isHTMLModified","html","prefixDebug","string","debug","currentLanguage","baseLanguage","debugPrefix","addTranslatedMarkers","showTranslatedMarkers","translatedMarkerPrefix","translatedMarkerSuffix","strings","setCurrentLanguage","lang","getCurrentLanguage","setStrings","language","context","getStringFormFor","n","stringTable","contexts","plurals","getString","fallbackLanguage","getPlural","stringPlural","$count","loadRemote","url","then","response","gettextCatalog","$compile","gettextUtil","getCtxAttr","lcFirst","PARAMS_PREFIX","handleInterpolationContext","attributes","startsWith","interpolationContext","unwatchers","attribute","unwatch","$on","msie","exec","lowercase","navigator","userAgent","assert","translatePlural","translateN","msgid","translateContext","slice","translated","pluralScope","countFn","oldContents","contents","linking","newWrapper","newContents","pattern","langCode","input","$stateful","getLanguageCode","languageCodes","pt_BR","condition","missing","found","Error","query","first","toLowerCase","String","57","10","DetectNgTouch","$log","msg","warn","MdCoreConfigure","$provide","$mdThemingProvider","decorator","rAFDecorator","theme","primaryPalette","accentPalette","warnPalette","backgroundPalette","$delegate","throttle","cb","queuedArgs","alreadyQueued","queueCb","Array","$inject","run","MdAutofocusDirective","postLink","mdAutoFocus","mdAutofocus","mdSidenavFocus","canAutofocus","toggleClass","ColorUtilFactory","hexToRgba","color","hex","dig","red","green","blue","rgbaToHex","match","rgbToRgba","rgbaToRgb","MdConstantFactory","vendorProperty","prefixedName","vendorPrefix","ucPrefix","camelCase","lcPrefix","hasStyleProperty","property","prefixTestEl","SPECIAL_CHARS_REGEXP","separator","letter","offset","isWebkit","document","createElement","self","isInputKey","e","isNumPadKey","location","isNavigationKey","kc","KEY_CODE","NAVIGATION_KEYS","SPACE","ENTER","UP_ARROW","DOWN_ARROW","COMMA","SEMICOLON","ESCAPE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT_ARROW","RIGHT_ARROW","TAB","BACKSPACE","DELETE","CSS","TRANSITIONEND","ANIMATIONEND","TRANSFORM","TRANSFORM_ORIGIN","TRANSITION","TRANSITION_DURATION","ANIMATION_PLAY_STATE","ANIMATION_DURATION","ANIMATION_NAME","ANIMATION_TIMING","ANIMATION_DIRECTION","MEDIA","xs","gt-xs","sm","gt-sm","md","gt-md","lg","gt-lg","xl","landscape","portrait","print","MEDIA_PRIORITY","MdIterator","reloop","getItems","_items","inRange","hasNext","item","hasPrevious","itemAt","findBy","add","isNumber","last","findSubsequentItem","backwards","validate","limit","trueFn","curIndex","nextIndex","foundItem","next","bind","previous","iterator","mdMediaFactory","$mdConstant","$mdMedia","validated","queries","results","mqls","matchMedia","addListener","onQueryChange","media","$evalAsync","getQuery","getResponsiveAttribute","mediaName","normalizedName","getNormalizedName","watchResponsiveAttributes","attrNames","watchFn","unwatchFns","normalizeCache","MdPrefixer","initialAttributes","buildSelector","_buildList","PREFIXES","prefix","_buildSelector","_hasAttribute","_getNativeElement","prefixedAttrs","_removeAttribute","prefixedAttribute","buildList","prefixer","UtilFactory","$$mdAnimate","validateCssValue","hasPx","hasPercent","getNode","el","startSymbol","endSymbol","usesStandardSymbols","hasComputedStyle","expectedVal","hasValue","computedStyles","$mdUtil","dom","performance","getTime","bidi","lValue","rValue","ltr","dir","bidiProperty","lProperty","rProperty","clientRect","offsetParent","isOffsetRect","nodeRect","offsetRect","left","top","width","height","nodesToArray","nodes","abs","findFocusTarget","containerEl","attributeVal","scanForFocusable","selector","elFound","it","isFocusable","hasClass","elToFocus","AUTO_FOCUS","disableScrollAround","disableElementScroll","preventDefault","scrollMask","disableScrollMask","appendChild","removeChild","_enableScrolling","disableBodyScroll","htmlNode","restoreHtmlStyle","cssText","restoreBodyStyle","scrollOffset","clientWidth","scrollHeight","clientHeight","applyStyles","position","overflowY","overflow","_count","restoreBody","restoreElement","enableScrolling","floatingScrollbars","cached","tempNode","z-index","overflow-y","offsetWidth","childNodes","forceFocus","addEventListener","focusOnClick","$focus","focus","stopImmediatePropagation","removeEventListener","newEvent","createEvent","initMouseEvent","$material","dispatchEvent","createBackdrop","supplant","template","p","r","s","fakeNgModel","$fake","$setTouched","$setViewValue","$render","$viewChangeListeners","$parsers","$formatters","debounce","func","wait","invokeApply","recent","time","valueOnUse","getter","params","defineProperty","nextUid","nextUniqueId","disconnectScope","$root","$$destroyed","$parent","$$disconnected","$$childHead","$$nextSibling","$$childTail","$$prevSibling","reconnectScope","getClosest","validateWith","onlyParent","tagName","elementContains","hasContains","findFn","extractElementByName","scanDeep","warnNotFound","scanTree","scanLevel","scanChildren","len","numChild","outerHTML","initOptionalProperties","defaults","$$isolateBindings","binding","optional","attrIsDefined","digest","processQueue","timeout","queueItem","$digest","processTemplate","getParentWithPointerEvents","getNearestContentElement","current","checkStickySupport","stickyProp","testEl","stickyProps","parseAttributeBoolean","negatedCheck","isParentFormSubmitted","form","controller","$submitted","animateScrollTo","scrollEnd","scrollChunk","newPosition","calculateNewPosition","scrollingDown","currentTime","ease","scrollStart","scrollChange","change","ts","tc","blur","MdAriaProvider","disableWarnings","showWarnings","MdAriaService","expect","defaultValue","childHasAttribute","expectAsync","defaultValueGetter","expectWithText","content","getText","hasBinding","expectWithoutText","isAriaHiddenNode","walker","createTreeWalker","NodeFilter","SHOW_TEXT","text","nextNode","textContent","isHidden","currentStyle","display","hasChildren","hasChildNodes","hasAttr","mdCompilerService","$q","$controller","templateUrl","controllerAs","resolve","locals","transformTemplate","identity","bindToController","invoke","$template","when","compiledData","linkFn","$scope","invokeCtrl","instance","service","MdGestureProvider","MdGesture","$$MdGestureHandler","checkDistanceAndEmit","eventName","pointer","distance","maxDistance","register","handlerName","handler","HANDLERS","registerElement","addHandler","definition","getTouchAction","vendorPrefixes","vendor","opera","isIos","isAndroid","touchActionProperty","hasJQuery","jQuery","isHijackingClicks","forceSkipClickHijack","maxClickDistance","onEnd","canFocus","focusableElements","isContentEditable","onStart","onCancel","registeredParent","pos","x","y","onMove","dx","dy","sqrt","minDistance","horizontal","cancelMultiplier","onSetup","oldTouchAction","onCleanup","shouldStartDrag","shouldCancel","dragPointer","dispatchDragMove","distanceX","distanceY","makeStartPointer","updatePointerState","isRunning","minVelocity","eventType","velocityX","directionX","velocityY","directionY","GestureHandler","MdGestureHandler","jQueryDispatchEvent","srcEvent","eventPointer","eventObj","Event","clientX","clientY","screenX","screenY","pageX","pageY","ctrlKey","altKey","shiftKey","metaKey","trigger","nativeDispatchEvent","detail","button","relatedTarget","initCustomEvent","parentTarget","getNearestParent","parentTargetOptions","$mdGesture","move","onDestroy","attachToDocument","mouseInputHijacker","isKeyClick","isIonicTap","isInputEventFromLabelClick","clickHijacker","lastLabelClickPos","runHandlers","handlerEvent","gestureStart","lastPointer","typesMatch","gestureMove","gestureEnd","isInitialized","START_EVENTS","MOVE_EVENTS","END_EVENTS","point","getEventPoint","startPointer","startX","startY","touches","changedTouches","skipClickHijack","InterimElementProvider","createInterimElementProvider","interimFactoryName","setDefaults","providerConfig","optionsFactory","methods","EXPOSED_METHODS","addMethod","customMethods","addPreset","presets","argOption","$$interimElement","showInterimElement","opts","_options","interimElementService","show","defaultOptions","destroyInterimElement","destroy","invokeFactory","defaultVal","publicService","defaultMethods","hide","Preset","presetDefaults","presetMethods","$type","methodName","InterimElementFactory","$$q","$mdCompiler","$mdTheming","interimElement","InterimElement","hideExisting","skipHide","stack","finally","catch","deferred","promise","closeElement","interim","closeAll","reverse","closeTo","pop","cntr","filtered","currNode","SHOW_CANCELLED","createAndTransitionIn","rejectAll","fault","onCompiling","compileElement","linkElement","showAction","showElement","transitionOutAndRemove","isCancelled","resolveAll","cancelAutoHide","triggerHandler","hideElement","configureScopeAndTransitions","preserveScope","isolateScope","onShow","onRemove","compiled","skipCompile","compileData","findParent","themable","querySelector","startAutoHide","autoHideTimer","hideDelay","notifyShowing","onShowing","notifyComplete","message","announceRemoving","onRemoving","action","defer","$injector_","registerLayoutAPI","directiveNormalize","PREFIX_REGEXP","_","BREAKPOINTS","API_WITH_VALUES","API_NO_VALUES","mqb","fullName","attributeWithObserve","attributeWithoutValue","validateAttributeValue","validateAttributeUsage","disableLayouts","isDisabled","disableLayoutDirective","buildCloakInterceptor","warnAttrNotSupported","detectDisabledLayouts","translateWithValueToCssClass","updateFn","updateClassWithValue","getNormalizedAttrValue","_$mdUtil_","_$interpolate_","_$log_","buildUpdateFn","translateToCssClass","lastClass","WHITESPACE","parts","usage","SUFFIXES","origValue","needsInterpolation","findIn","LAYOUT_OPTIONS","FLEX_OPTIONS","isNaN","axis","extractAlignAxis","fallback","replaceWith","attrValue","main","cross","ALIGNMENT_MAIN_AXIS","ALIGNMENT_CROSS_AXIS","breakpoints","mapExistingElement","metaElements","getElementsByName","setMeta","newMeta","head","getMeta","ComponentRegistry","isValidID","handle","instances","pendings","notFoundError","msgContext","error","getInstances","$$mdHandle","deregister","resolveWhen","dfd","MdButtonInkRipple","$mdInkRipple","optionsForElement","isMenuItem","fitRipple","center","dimBackground","attach","MdCheckboxInkRipple","MdListInkRipple","outline","rippleSize","InkRippleDirective","$mdButtonInkRipple","$mdCheckboxInkRipple","InkRippleProvider","disableInkRipple","isDisabledGlobally","instantiate","InkRippleCtrl","rippleOptions","$mdColorUtil","mousedown","ripples","lastRipple","createContainer","createRipple","setColor","bindEvents","autoCleanup","cleanupFn","attrNoDirective","DURATION","getElementColor","colorElement","_color","_parseColor","inkRipple","calculateColor","multiplier","colorUtil","handleMousedown","handleMouseup","handleTouchmove","srcElement","layerRect","layerX","layerY","offsetX","offsetY","clearRipples","deleteRipples","fadeInComplete","clearTimeout","isRippleAllowed","getSize","fit","pow","ripple","size","background","backgroundColor","borderColor","removeRipple","fadeOutComplete","MdTabInkRipple","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastStrongLightColors","pink","purple","deep-purple","indigo","light-blue","contrastLightColors","cyan","teal","light-green","lime","yellow","amber","orange","deep-orange","brown","grey","blue-grey","detectDisabledThemes","disableTheming","ThemingProvider","$mdColorPalette","$$mdMetaProvider","definePalette","PALETTES","checkPaletteValid","themingProvider","extendPalette","missingColors","VALID_HUE_VALUES","field","registerTheme","inheritFrom","THEMES","parentTheme","Theme","colors","colorType","hues","setDark","isDark","foregroundPalette","LIGHT_FOREGROUND","DARK_FOREGROUND","foregroundShadow","DARK_SHADOW","LIGHT_SHADOW","newDefaultHues","DARK_DEFAULT_HUES","LIGHT_DEFAULT_HUES","oldDefaultHues","newDefaults","oldDefaults","hueName","dark","THEME_COLOR_TYPES","defaultHues","paletteName","hueValue","console","ThemingService","registered","themeName","applyTheme","inheritTheme","lookupThemeName","$mdTheme","defaultTheme","updateThemeClass","oldTheme","registerChangeCallback","parentController","registerChanges","attrThemeValue","watchTheme","alwaysWatchTheme","inherit","generateTheme","themeConfig","nonce","setBrowserColor","enableBrowserColor","removeChrome","removeWindows","hue","palette","configuration","registeredStyles","registerStyles","setNonce","nonceValue","generateThemesOnDemand","onDemand","generateOnDemand","setDefaultTheme","alwaysWatch","_LIGHT_DEFAULT_HUES","_DARK_DEFAULT_HUES","_PALETTES","_THEMES","_parseRules","parseRules","_rgba","rgba","ThemingDirective","registeredCallbacks","$setTheme","mdTheme","disableThemesDirective","ThemableDirective","checkValidPalette","generatedRules","themeNameRegex","RegExp","hueRegex","simpleVariableRegex","opacity","contrast","newRule","hueType","themeRuleRegex","suffix","generateAllThemes","sanitizePalette","defaultContrast","lightColors","strongLightColors","darkColors","getContrastColor","DARK_CONTRAST_COLOR","STRONG_LIGHT_CONTRAST_COLOR","LIGHT_CONTRAST_COLOR","rgbValue","colorToRgbaArray","firstChild","firstElementChild","themeCss","rule","ruleMatchRegex","rulesByType","DEFAULT_COLOR_TYPE","GENERATED","styleStrings","styleContent","createTextNode","insertBefore","clr","grn","blu","rgbArray","1","2","accent","default","hue-1","hue-2","hue-3","defaultDefaultHues","AnimateDomUtils","translate3d","reverseTranslate","newFrom","transitionOutClass","transitionInClass","waitTransitionEnd","TIMEOUT","finished","noTransitionFound","transition","cachedTransitionStyles","calculateTransformValues","originator","currentBounds","origin","bounds","originBnds","copyRect","dialogRect","dialogCenterPt","centerPointFor","originCenterPt","centerX","centerY","scaleX","round","min","scaleY","calculateZoomToOrigin","zoomTemplate","buildZoom","calculateSlideToOrigin","slideTemplate","buildSlide","toCss","raw","convertToVendor","lookups","toTransformCss","transform","addTransition","source","destination","right","bottom","isPositiveSizeClientRect","rect","targetRect","version","minor","WEBKIT","documentElement","WebkitAppearance","PREFIX","TRANSITION_EVENTS","ANIMATION_EVENTS","$$ForceReflowFactory","$$rAFMutexFactory","passed","$$AnimateRunnerFactory","$$rAFMutex","AnimateRunner","host","_doneCallbacks","_runInAnimationFrame","_state","INITIAL_STATE","DONE_PENDING_STATE","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","_resolve","onProgress","init","hasCompleteStyles","hasCompleteClasses","hasCompleteAnimation","eventFn","applyClasses","moreStyles","cs","tdr","adr","tdy","ady","cancelLastRAFRequest","resize","viewportHeight","bodyStyles","resizeHandler","ERROR_CSS_POSITION","MdBottomSheetDirective","$mdBottomSheet","MdBottomSheetProvider","$$interimElementProvider","bottomSheetDefaults","disableBackdrop","backdrop","tabIndex","clickOutsideToClose","bottomSheet","BottomSheet","disableParentScroll","restoreScroll","focusable","escapeToClose","rootElementKeyupCallback","cleanup","onDragStart","onDrag","PADDING","onDragEnd","CLOSING_VELOCITY","distanceRemaining","MdAnchorDirective","MdButtonDirective","$mdAria","isAnchor","href","ngHref","ngLink","uiSref","getTemplate","btnType","ngDisabled","disabled","mouseActive","mdCardDirective","MdCheckboxDirective","inputDirective","tElement","tAttrs","ngModelCtrl","expr","htmlAttr","valueOpts","keypressHandler","listener","skipToggle","viewValue","ngChecked","checked","render","isIndeterminate","setIndeterminateState","mdIndeterminate","$eval","true","false","$set","MdColorsService","applyThemeColors","colorExpression","interpolateColors","getThemeColor","expression","extractColorOptions","parseColor","rgbValues","themeColors","rgbColors","hasColorProperty","hasBackground","hasTheme","extractPalette","extractHue","isTwoWord","colorPalettes","scheme","hueNumber","availableThemes","usedTheme","MdColorsDirective","$mdColors","tElem","shouldColorsWatch","rawColorExpression","mdColors","bindOnce","isStatic","STATIC_COLOR_EXPRESSION","hasWatchAttr","mdColorsWatch","shouldWatch","mdThemeController","lastColors","parseColors","cleanElement","equals","unregisterChanges","mdContentDirective","ContentController","iosScrollFix","$materialScrollFixed","offsetHeight","MdDialogDirective","$mdDialog","addOverflowClass","images","getElementsByTagName","MdDialogProvider","advancedDialogOptions","isPrompt","initialValue","abort","keypress","dialogDefaultOptions","beforeCompile","detectTheming","contentElement","restoreContentElement","installContentElement","beforeShow","mdHtmlContent","htmlContent","mdTextContent","warnDeprecatedActions","focusOnOpen","findCloseButton","closeButton","actionButtons","dialogElement","find","captureParentAndFromToElements","configureAria","showBackdrop","activateListeners","dialogPopIn","lockScreenReader","animateRemoval","dialogPopOut","detachAndClean","reverseContainerStretch","deactivateListeners","unlockScreenReader","hideBackdrop","topFocusTrap","bottomFocusTrap","targetEvent","targetEl","createRestoreFn","nextSibling","nextElementSibling","contentEl","restoreFn","orig","hasFn","getDomElement","defaultElement","openFrom","onWindowResize","stretchDialogContainerToViewport","removeListeners","smartClose","keyHandlerFn","sourceElem","mousedownHandler","mouseupHandler","removeFn","hasBackdrop","dialogContent","existingDialogId","dialogContentId","ariaLabel","words","classList","focusHandler","walkDOM","isFixed","ceil","previousStyles","dialogEl","buildTranslateToOrigin","translateOptions","fullscreen","animateReversal","reverseAnimate","clearAnimate","autoWrap","validatedTemplate","MdDividerDirective","MdFabActionsDirective","hasNgRepeat","wrap","MdFabController","setupDefaults","vm","isOpen","resetActionIndex","setupListeners","eventTypes","parseEvents","disableKeyboard","handleItemClick","closeTimeout","currentActionIndex","setupWatchers","newDir","oldDir","actions","getTriggerElement","getActionsElement","enableKeyboard","setClass","fireInitialAnimations","initialAnimationAttempts","keyPressed","checkForOutsideClick","closestTrigger","closestActions","doKeyLeft","doKeyUp","doKeyRight","doKeyDown","doActionPrev","focusAction","doActionNext","resetActionTabIndexes","focusElement","isTrigger","isAction","toggle","open","MdFabSpeedDialDirective","FabSpeedDialLink","prepend","MdFabSpeedDialFlingAnimation","delayDone","cssAnimationDuration","runAnimation","triggerElement","variablesElement","startZIndex","zIndex","webkitTransform","triggerItemHeightOffset","triggerItemWidthOffset","scrollWidth","newTranslate","MdFabSpeedDialScaleAnimation","offsetDelay","MdFabToolbarDirective","MdFabToolbarAnimation","backgroundElement","toolbarElement","iconElement","scale","borderRadius","pointerEvents","GridListDirective","$mdGridLayout","watchMedia","invalidateLayout","layoutIfMediaMatch","unwatchMedia","layoutDelegate","unwatchAttrs","removeListener","tilesInvalidated","tiles","getTileElements","props","tileSpans","getTileSpans","colCount","getColumnCount","rowMode","getRowMode","rowHeight","getRowHeight","gutter","getGutter","lastLayoutProps","tilePositions","rowCount","grid","getGridStyle","ps","getTileStyle","spans","reflow","mdOnLayout","exprStr","hShare","hGutterShare","hUnit","UNIT","share","gutterShare","POSITION","unit","col","DIMENSION","span","paddingTop","marginTop","vShare","vUnit","vGutterShare","paddingBottom","ele","$$mdDestroyed","tileElements","$attrs","applyDefaultUnit","whRatio","GridListController","layoutInvalidated","$timeout_","GridLayoutFactory","GridLayout","layoutInfo","gridStyles","layoutTime","mapTime","reflowTime","calculateGridFor","info","positioning","animatorFn","defaultAnimator","tileCount","totalTime","GridTileAnimator","t","reserveSpace","curCol","nextRow","spaceTracker","findEnd","adjustRow","curRow","cols","by","newSpaceTracker","tracker","animateWith","customAnimator","GridTileDirective","gridCtrl","invalidateTiles","$index","newIdx","oldIdx","GridTileCaptionDirective","layout","mdInputContainerDirective","leftIcon","LEFT_SELECTORS","rightIcon","RIGHT_SELECTORS","ContainerCtrl","isErrorGetter","mdIsError","delegateClick","setFocused","isFocused","setHasValue","setHasPlaceholder","hasPlaceholder","setInvalid","isInvalid","label","hasLabelAndInput","INPUT_TAGS","reduce","selectors","isel","labelDirective","containerCtrl","mdNoFloat","inputTextareaDirective","ctrls","ngModelPipelineCheckValue","setupAttributeWatchers","mdNoAsterisk","inputCheckValue","validity","badInput","setupTextarea","growTextarea","getHeight","lineHeight","originalPadding","padding","minRows","maxRows","maxHeight","removeAttr","line","formattersListener","disableAutogrow","isAutogrowing","scopeResizeListener","hasNgModel","listenerIndex","attachResizeHandle","onMouseDown","isDragging","dragStart","startHeight","dragGestureHandler","rows","NaN","handleHiddenChange","wasHidden","parentForm","isReadonly","readonly","errorsSpacer","placeholder","step","$touched","ngValue","mdMaxlengthDirective","renderCharCount","charCountEl","maxlength","mdMaxlength","modelValue","placeholderDirective","preLink","inputContainer","noFloat","newLabel","mdSelectOnFocusDirective","onFocus","preventMouseUp","select","onMouseUp","ngMessagesDirective","mdAutoHide","hasVisibiltyDirective","visibilityDirectives","ngMessageDirective","isInsideFragment","DOCUMENT_FRAGMENT_NODE","isInsideInputContainer","initMessageElement","mdInputInvalidMessagesAnimation","saveSharedServices","showInputMessages","ngMessagesAnimation","hideInputMessages","ngMessageAnimation","showMessage","hideMessage","animators","messages","getMessagesElement","topMargin","getInputElement","alreadyVisible","margin-top","_$$AnimateRunner_","_$animateCss_","mdListDirective","tEl","mdListItemDirective","proxiedTypes","setupToggleAria","toggleType","toggleTypes","setupProxiedMenu","menuEl","proxyElement","isEndAligned","xAxisPosition","menuOpenButton","eq","hasClickEvent","wrapIn","itemContainer","buttonWrap","copyAttributes","wrapSecondaryItems","secondaryItemsWrapper","secondaryItems","secondaryItem","wrapSecondaryItem","isButton","buttonWrapper","isProxiedElement","extraAttrs","copiedAttrs","$attr","computeProxies","firstElement","hasClick","proxies","computeClickable","attachRipple","isEventFromControl","forbiddenControls","path","maxPath","isButtonWrap","clickChild","proxy","proxyOnBlur","clickChildKeypressListener","click","parentButton","hasProxiedElement","ngDblclick","ngAttrUiSref","MdListController","$mdListInkRipple","MdNavBar","MdNavBarController","mdSelectedNavItem","navBarAriaLabel","_$timeout","_$scope","_$mdConstant","_navBarEl","_inkbar","deregisterTabWatch","newLength","_initTabs","MdNavItem","MdNavItemController","mdNavClick","mdNavHref","mdNavSref","controllers","mdNavItem","mdNavBar","navButton","_$element","_selected","_focused","hasNavClick","hasNavHref","hasNavSref","_updateTabs","tabs","_getTabs","oldIndex","newIndex","newTab","_getTabByName","oldTab","setSelected","_updateInkBarStyles","tab","tabEl","getButtonEl","offsetLeft","linkArray","_findTab","getName","_getSelectedTab","isSelected","getFocusedTab","hasFocus","onBlur","_moveFocus","onKeydown","keyCodes","focusedTab","focusedTabIndex","getNgClassMap","md-active","md-primary","md-unselected","md-focused","MdPanelService","_defaultConfigOptions","propagateContainerEvents","_wrapTemplate","trapFocus","defaultZIndex","_config","_$rootElement","_$rootScope","_$injector","_$window","_trackedPanels","MdPanelAnimation","xPosition","MdPanelPosition","yPosition","MdPanelRef","_$q","_$mdCompiler","_$mdUtil","_$animate","_$mdPanel","_$log","_$$rAF","id","panelContainer","panelEl","isAttached","_removeListeners","_topFocusTrap","_bottomFocusTrap","_backdropRef","_restoreScroll","_isRTL","_absolute","_relativeToEl","_top","_bottom","_left","_right","_translateX","_translateY","_positions","_actualPosition","_openFrom","_closeTo","_animationClass","getElement","queryResult","MD_PANEL_HIDDEN","FOCUS_TRAP_TEMPLATE","attachTo","panelRef","newPanelPosition","newPanelAnimation","origTemplate","_done","_simpleBind","detach","onDomAdded","addListeners","_addEventListeners","_createBackdrop","_createPanel","onDomRemoved","detachFn","_removeEventListeners","animatePromise","_animateOpen","onOpenComplete","_focusOnOpen","focusOnOrigin","hidePanel","_animateClose","newClass","toElement","oldClass","fromElement","onElement","mdPanelRef","_configureTrapFocus","_addStyles","hideAndResolve","positionConfig","_updatePosition","updatePosition","_setPanelPosition","absPosition","TOP","getTop","BOTTOM","getBottom","LEFT","getLeft","RIGHT","getRight","prefixedTransform","getTransform","backdropAnimation","withAnimation","backdropConfig","panelClass","_configureEscapeToClose","_configureClickOutsideToClose","_configureScrollListener","debouncedUpdatePosition","onScroll","animationConfig","warnAndOpen","animateOpen","warnAndClose","animateClose","CENTER","ALIGN_START","ALIGN_END","OFFSET_START","OFFSET_END","ALIGN_TOPS","ALIGN_BOTTOMS","ABOVE","BELOW","absolute","_setPosition","positions","centerHorizontally","centerVertically","relativeTo","addPanelPosition","_validateXPosition","_validateYPosition","positionKeys","positionValues","withOffsetX","withOffsetY","translateX","_reduceTranslateValues","translateY","_isOnscreen","innerHeight","innerWidth","getActualPosition","translateFn","translation","_calculatePanelPosition","_reverseXPosition","_bidi","panelBounds","panelWidth","panelHeight","targetBounds","targetLeft","targetRight","targetWidth","targetTop","targetBottom","targetHeight","SLIDE","SCALE","FADE","_getPanelAnimationTarget","_getBoundingClientRect","cssClass","_fixBounds","animationOptions","panelTransform","openTo","openSlide","openScale","reverseAnimationOptions","closeFrom","closeSlide","closeScale","MdProgressLinearDirective","watchAttributes","percentValue","clamp","mode","MODE_QUERY","animateIndicator","bar2","bar1","DISABLED_CLASS","lastMode","MODE_BUFFER","MODE_DETERMINATE","MODE_INDETERMINATE","validateMode","mdMode","toVendorCSS","mdRadioGroupDirective","linkRadioGroup","setFocus","keydownListener","currentTarget","rgCtrl","selectPrevious","selectNext","RadioGroupController","_radioButtonRenderFns","createRadioGroupControllerProto","_ngModelCtrl","rbRender","setViewValue","getViewValue","changeSelectedButton","setActiveDescendant","radioId","increment","buttons","selected","mdRadioButtonDirective","initialize","markParentAsChecked","CHECKED_CSS","lastChecked","buildAriaID","ariaId","aria-checked","SelectDirective","$mdSelect","valueEl","mdOnOpen","autofillClone","aria-hidden","newEl","innerHTML","isMultiple","multiple","multipleContent","selectTemplate","empty","initAriaLabel","labelText","ariaLabelBase","syncLabelText","selectContainer","selectMenuCtrl","mdSelectCtrl","setLabelText","selectedLabels","syncAriaLabel","ariaLabels","findSelectContainer","selectScope","mdContainerClass","handleKeypress","openSelect","optNodeForKeyboardSearch","optionCtrl","deselect","hashKey","refreshViewValue","_mdSelectIsOpen","selectCtrl","preserveElement","loadingAsync","untouched","formCtrl","disableAsterisk","hasModelValue","$setPristine","originalRender","setIsPlaceholder","mdSelectedText","tmpPlaceholder","isPlaceholder","triggerClose","mdOnClose","deregisterWatcher","parser","prevVal","setMultiple","aria-disabled","ariaAttrs","aria-expanded","aria-multiselectable","ngMultiple","containerId","SelectMenuDirective","keyListener","clickListener","option","optionHashKey","hashGetter","SelectMenuController","renderMultiple","newSelectedValues","oldSelected","newSelectedHashes","deselected","hash","renderSingular","deregisterCollectionWatch","defaultIsEmpty","validateArray","modelBinding","clearSearchTimeout","optNodes","optText","searchStr","CLEAR_SEARCH_AFTER","setTimeout","fromCharCode","search","$options","trackBy","trackByLocals","trackByParsed","valueScope","$value","$$mdSelectId","selectNextId","selectedOptionEls","mapFn","rippleContainer","checkboxContainer","hashedValue","addOption","$validate","removeOption","usingTrackBy","OptionDirective","hasDefinedValue","setOptionValue","prevAttempt","oldHashKey","newHashKey","aria-selected","CHECKBOX_SELECTION_INDICATOR","OptionController","OptgroupDirective","hasSelectHeader","setupLabelElement","labelElement","SelectHeaderDirective","SelectProvider","selectDefaultOptions","announceClosed","restoreFocus","cleanupInteraction","cleanupResizing","showDropDown","positionAndFocusMenu","isRemoved","calculateMenuPositions","dropDown","autoFocus","focusedNode","sanitizeAndConfigure","selectEl","ERROR_TARGET_EXPECTED","optionNodes","activateResizing","debouncedOnResize","updates","watchAsyncLoad","$$loadingAsyncDone","activateInteraction","onBackdropClick","onMenuKeyDown","focusPrevOption","focusNextOption","checkCloseMenu","optNode","focusOption","newOption","optionsArray","mouseOnScrollbar","clickOnScrollbar","hasScrollbar","relPosX","alreadyOpen","mdSelect","menuController","centeredNode","selectNode","contentNode","parentRect","shouldOpenAroundTarget","SELECT_EDGE_MARGIN","spaceAvailable","maxWidth","selectedNode","optgroupNodes","isScrollable","calculateScrollable","loading","isPromiseLike","selectMenuRect","centeredRect","getOffsetRect","centeredStyle","paddingLeft","paddingRight","scrollBuffer","transformOrigin","minWidth","fontSize","containerRect","min-width","font-size","offsetTop","oldDisplay","createDirective","targetValue","multiElement","unregister","SidenavService","$mdComponentRegistry","addLegacyAPI","falseFn","rejectFn","errorMsg","isLockedOpen","onClose","waitForInstance","findInstance","shouldWait","waitFor","enableWait","SidenavFocusDirective","sidenavCtrl","SidenavDirective","updateIsLocked","isLocked","updateIsOpen","focusEl","onKeyDown","restorePositioning","updateContainerPositions","triggeringElement","activeElement","willOpen","drawerEl","previousContainerStyles","positionStyle","lastParentOverFlow","disableScrollTarget","toggleOpen","onCloseCb","isEscape","isLockedOpenParsed","mdIsLockedOpen","$media","mdDisableScrollTarget","$toggleOpen","SidenavController","mdComponentId","SliderContainerDirective","slider","vertical","setDisable","stopDisabledWatch","initialMaxWidth","fitInputWidthToTextLength","computedStyle","newMaxWidth","SliderDirective","wrapper","getElementsByClassName","updateAll","refreshSliderDimensions","ngModelRender","updateMin","updateMax","updateStep","updateRound","minMaxValidator","updateAriaDisabled","redrawTicks","discrete","numSteps","tickCanvas","tickContainer","tickCtx","getContext","dimensions","getSliderDimensions","sliderDimensions","trackTicksStyle","fillStyle","fillRect","clearTicks","clearRect","trackContainer","throttledRefreshDimensions","changeAmount","invert","setModelValue","mouseDownListener","focusListener","blurListener","stepValidator","percent","valueToPercent","setSliderPercent","thumbText","minValue","formattedValue","thumbPosition","activeTrackPercent","thumbContainer","activeTrack","onPressDown","exactVal","percentToValue","positionToPercent","closestVal","onPressUp","setSliderFromEvent","adjustThumbPosition","doSlide","calc","adjustedPercent","thumb","DEFAULT_ROUND","mdVertical","mdDiscrete","mdInvert","debouncedUpdateAll","MdSticky","setupSticky","contentCtrl","stickyClone","debouncedRefreshElements","refreshElements","refreshPosition","sort","currentScrollTop","setCurrentItem","isScrollingDown","prevScrollTop","translate","prev","setStickyState","amount","setupAugmentedScrollEvents","loopScrollEvent","lastScrollTime","SCROLL_END_DELAY","isScrolling","browserStickySupport","$$sticky","cloneElement","MdSubheaderDirective","$mdSticky","getContent","getDirective","DirectiveFactory","directiveName","$applyAsync","MdSwitch","mdCheckboxDirective","mdSwitchCompile","checkboxLink","checkboxDirective","disabledGetter","drag","isChanged","applyModelValue","switchContainer","MdToastDirective","$mdToast","MdToastProvider","updateTextContent","newContent","activeToastContent","toastDefaultOptions","isSmScreen","onSwipe","gesture","swipe","openClass","toastOpenClass","toastClass","SWIPE_EVENTS","shouldAddWrapper","templateRoot","ACTION_RESOLVE","highlightAction","highlightClasses","highlightClass","mdToolbarDirective","setupScrollShrink","onChangeScrollShrink","shrinkWithScroll","closestContent","onMdContentLoad","disableScrollShrink","enableScrollShrink","newContentEl","debouncedContentScroll","onContentScroll","debouncedUpdateHeight","toolbarHeight","shrinkSpeedFactor","hasWhiteFrame","updateToolbarHeight","margin","margin-bottom","mdShrinkSpeedFactor","ngShow","ngHide","mdScrollShrink","MdTooltipDirective","TOOLTIP_SHOW_DELAY","updateContentOrigin","onVisibleChanged","isVisible","showTooltip","hideTooltip","configureWatchers","attributeObserver","MutationObserver","mutations","mutation","attributeName","visibleWatcher","observe","onElementDestroy","one","setVisible","disconnect","addAriaLabel","override","rawText","interpolatedText","manipulateElement","windowScrollHandler","windowBlurHandler","elementFocusedOnWindowBlur","ENTER_EVENTS","enterHandler","LEAVE_EVENTS","leaveHandler","visible","autohide","showTimeout","queued","tooltipParent","SHOW_CLASS","positionTooltip","fitInParent","tipRect","TOOLTIP_WINDOW_EDGE_SPACE","getPosition","tAttr","mdDirection","VirtualRepeatContainerDirective","VirtualRepeatContainerController","virtualRepeatContainerTemplate","scrollSize","repeater","autoShrink","autoShrinkMin","mdAutoShrinkMin","originalSize","offsetSize","mdOffsetSize","oldElementSize","mdTopIndex","bindTopIndex","topIndex","assign","scrollToIndex","scroller","sizer","offsetter","boundUpdateSize","updateSize","debouncedUpdateSize","jWindow","$emit","VirtualRepeatDirective","VirtualRepeatController","mdVirtualRepeat","repeatName","repeatListExpression","extraName","mdExtraName","link_","$browser","mdOnDemand","browserCheckUrlChange","$$checkUrlChange","newStartIndex","newEndIndex","newVisibleEnd","startIndex","endIndex","itemSize","mdItemSize","isFirstRender","isVirtualRepeatUpdating_","itemsLength","unwatchItemSize_","blocks","pooledBlocks","cleanupBlocks_","VirtualRepeatModelArrayLike","model","getItemAtIndex","getLength","MAX_ELEMENT_SIZE","NUM_EXTRA","repeaterCtrl","handleScroll_","isHorizontal","setSize_","dimension","getDimensionName_","unsetSize_","containerUpdated","getScrollSize","sizeScroller_","crossDimension","numChildren","sizerChild","autoShrink_","shrinkSize","getItemSize","currentSize","_originalSize","setScrollSize","itemsSize","getScrollOffset","scrollTo","resetScroll","doc","maxSize","numItems","getItemCount","$$phase","Block","rawRepeatListExpression","sized","repeatListExpression_","block","readItemSize_","getBlock_","poolBlock_","repeatList","virtualList","$$includeIndexes","oldItems","virtualRepeatUpdate_","updateIndexes_","lengthChanged","previousScrollOffset","mdStartIndex","blockIndex","newStartBlocks","newEndBlocks","updateBlock_","maxIndex","domFragmentFromBlocks_","new","updateScope_","fragment","createDocumentFragment","containerLength","MdWhiteframeDirective","elevation","DEFAULT_DP","DISABLE_DP","MAX_DP","MIN_DP","$updateClass","MdAutocompleteCtrl","searchText","selectedItem","gatherElements","moveDropdown","autofocus","focusInputElement","updateModelValidators","requireMatch","inputModelCtrl","$setValidity","positionDropdown","getVerticalOffset","correctHorizontalAlignment","dropdown","elements","scrollContainer","root","MENU_PADDING","hrect","$","vrect","snap","bot","mdFloatingLabel","INPUT_PADDING","MAX_HEIGHT","isRequired","handleSearchText","selectedItemChange","ul","li","getSnapTarget","getAngularElements","oldHidden","enableWrapScroll","disableElementScrollEvents","onListEnter","noBlur","onListLeave","shouldHide","onMouseup","previousSelectedItem","getDisplayValue","handleSelectedItemChange","displayValue","announceItemChange","itemChange","getItemAsNameVal","announceTextChange","textChange","selectedItemWatchers","watcher","registerSelectedItemWatcher","unregisterSelectedItemWatcher","previousSearchText","getDefaultIndex","isMinLengthMet","handleQuery","setLoading","updateMessages","evalAttr","doBlur","forceBlur","isSearchable","keydown","updateScroll","hasSelection","shouldProcessEscape","clearSelectedItem","hasEscapeOption","clearSearchText","getMinLength","minLength","getItemText","itemText","itemName","autoselect","shouldShow","hasMatches","escapeOptions","notFoundVisible","loadingIsVisible","getCurrentDisplayValue","set","clearValue","fetchResults","handleAsyncResults","fetchesInProgress","onResultsRetrieved","term","handleResults","itemExpr","isList","isPromise","getCountMessage","lastCount","hgt","isPromiseFetching","textLength","hasNotFound","noCache","selectOnMatch","selectItemOnMatch","isMatching","matchInsensitive","itemParts","itemsExpr","clear","listEnter","listLeave","mouseUp","ITEM_HEIGHT","MdAutocomplete","$$mdSvgRegistry","inputName","inputMinlength","inputMaxlength","floatingLabel","menuClass","inputId","getItemTemplate","templateTag","getNoItemsTemplate","mdSelectOnFocus","leftover","mdClose","noItemsTemplate","itemTemplate","MdAutocompleteItemScopeDirective","watchVariable","variable","alias","newScope","connectScopes","scopeDigesting","newScopeDigesting","$mdAutocompleteCtrl","MdHighlightCtrl","regex","unsafeTermFn","unsafeContentFn","mdHighlightFlags","unregisterFn","contentText","onRender","prevState","createRegex","applyRegex","tokens","resolveTokens","token","tokenEl","appendToken","targetText","lastIndex","startFlag","endFlag","regexTerm","sanitizeRegex","MdHighlight","termExpr","mdHighlightText","unsafeContentExpr","MdChipCtrl","isEditting","enableChipEdit","chipKeyDown","chipMouseDown","getChipContent","chipContents","getContentElement","getChipIndex","goOutOfEditMode","contentEditable","chipIndex","updateChipContents","selectedChip","focusChip","removeChipAndFocusInput","selectNodeContents","range","selection","createTextRange","moveToElementText","getSelection","createRange","removeAllRanges","addRange","goInEditMode","MdChip","hintTemplate","chipsController","chipController","resetSelectedChip","DELETE_HINT_TEMPLATE","MdChipRemove","removeChip","$$replacedScope","MdChipTransclude","$mdChipsCtrl","$chip","newHtml","mdChipTransclude","MdChipsCtrl","userInputNgModelCtrl","autocompleteCtrl","userInputElement","mdEnableChipEdit","addOnBlur","mdAddOnBlur","deleteHint","deleteButtonLabel","chipBuffer","useTransformChip","useOnAdd","useOnRemove","inputKeydown","getChipBuffer","isDefaultPrevented","getCursorPosition","selectAndFocusChipSafe","separatorKeys","hasMaxChipsReached","appendChip","resetChipBuffer","selectionStart","selectionEnd","$setDirty","isEditingChip","isRemovable","removable","chipKeydown","removeAndSelectAdjacentChip","getPlaceholder","useSecondary","secondaryPlaceholder","selIndex","getAdjacentChipIndex","newChip","transformChip","transformedChip","identical","validateModel","onAdd","useTransformChipExpression","useOnAddExpression","useOnRemoveExpression","useOnSelectExpression","useOnSelect","maxChips","removed","selectChip","onSelect","selectAndFocusChip","configureNgModel","onInputFocus","inputHasFocus","onInputBlur","isModelValid","$valid","configureUserInput","inputElement","scopeApplyFn","configureAutocomplete","MdChips","getTemplateByQuery","userTemplate","chipTemplate","chipRemoveSelector","chipRemoveTemplate","templates","chipContentsTemplate","chipInputTemplate","staticChips","mdChipsCtrl","mdCloseIcon","mdTransformChip","mdOnAppend","useOnAppendExpression","mdOnAdd","mdOnRemove","mdOnSelect","autocompleteEl","compiledStaticChips","getTemplates","chips","MD_CHIPS_TEMPLATE","CHIP_INPUT_TEMPLATE","CHIP_DEFAULT_TEMPLATE","CHIP_REMOVE_TEMPLATE","onAppend","MdContactChipsCtrl","queryContact","contactQuery","$query","filterSelected","filterSelectedContacts","contactName","contact","contacts","MdContactChips","MD_CONTACT_CHIPS_TEMPLATE","contactImage","contactEmail","highlightFlags","calendarDirective","minDate","maxDate","dateFilter","_currentView","CalendarCtrl","mdCalendarCtrl","$$mdDateUtil","$mdDateLocale","dateUtil","today","createDateAtMidnight","currentView","SELECTED_DATE_CLASS","TODAY_CLASS","FOCUSED_DATE_CLASS","displayDate","selectedDate","firstRenderableDate","lastRenderableDate","scrollbarWidth","boundKeyHandler","handleKeyEvent","FALLBACK_WIDTH","setNgModelValue","date","setCurrentView","newView","isDate","isValidDate","previousFocus","cellId","getDateId","cell","getElementById","rootElement","getActionFromKeyEvent","hideVerticalScrollbar","childCtrl","setWidth","calendarScroller","namespace","getFullYear","getMonth","getDate","updateVirtualRepeat","virtualRepeatResizeListener","TBODY_SINGLE_ROW_HEIGHT","TBODY_HEIGHT","CalendarMonthCtrl","calendarCtrl","monthCtrl","dateLocale","isMonthTransitionInProgress","cellClickHandler","timestamp","getTimestampFromNode","headerClickHandler","getMonthDistance","attachScopeListeners","getSelectedMonthIndex","changeSelectedDate","previousSelectedDate","changeDisplayDate","selectedDateClass","prevDateCell","dateCell","buildWeekHeader","animationPromise","animateDateChange","monthDistance","firstDayOfWeek","shortDays","th","incrementDays","incrementMonths","getFirstDateOfMonth","getLastDateOfMonth","clampDate","mdCalendarMonthBodyDirective","ARROW_ICON","mdTabsArrow","CalendarMonthBodyCtrl","monthBodyCtrl","arrowIcon","oldOffset","generateContent","focusAfterAppend","buildCalendarForMonth","buildDateCell","opt_date","longDateFormatter","isSameDay","cellText","dates","isDateEnabled","selectionIndicator","isDateWithinRange","buildDateRow","rowNumber","weekNumberFormatter","opt_dateInMonth","firstDayOfMonth","firstDayOfTheWeek","getLocaleDay_","numberOfDaysInMonth","getNumberOfDaysInMonth","monthBody","isFinalMonth","blankCellOffset","monthLabelCell","monthLabelCellContent","monthHeaderFormatter","monthFormatter","monthLabelRow","dayOfWeek","iterationDate","d","setDate","whitespaceRow","getDay","CalendarYearCtrl","yearCtrl","getYearDistance","getFocusedYearIndex","changeDate","mdCalendarYearDirective","CalendarYearBodyCtrl","yearBodyCtrl","incrementYears","buildCalendarForYear","buildMonthCell","year","month","buildBlankCell","firstOfMonth","isSameMonthAndYear","shortMonths","isMonthWithinRange","yearBody","firstRow","labelCell","secondRow","DateLocaleProvider","months","days","formatDate","parseDate","msgCalendar","msgOpenCalendar","$locale","$filter","defaultFormatDate","localeTime","toLocaleTimeString","getHours","defaultParseDate","dateString","defaultIsDateComplete","re","defaultMonthHeaderFormatter","defaultMonthFormatter","defaultWeekNumberFormatter","number","defaultLongDateFormatter","defaultShortDays","DATETIME_FORMATS","SHORTDAY","day","defaultDates","defaultMsgCalendar","defaultMsgOpenCalendar","defaultFirstRenderableDate","defaultLastRendereableDate","MONTH","SHORTMONTH","DAY","isDateComplete","getDateInNextMonth","getDateInPreviousMonth","d1","d2","isInNextMonth","startDate","endDate","nextMonth","isInPreviousMonth","previousMonth","getDateMidpoint","getWeekOfMonth","numberOfDays","numberOfMonths","dateInTargetMonth","setDateTimeToMidnight","setHours","opt_value","dateAtMidnight","minDateAtMidnight","maxDateAtMidnight","numberOfYears","boundDate","Number","datePickerDirective","hiddenIcons","mdHideIcons","ariaLabelValue","mdPlaceholder","calendarButton","mdCalendar","triangleButton","debounceInterval","DatePickerCtrl","mdDatePickerCtrl","mdInputContainer","spacer","INPUT_CONTAINER_CLASS","HAS_ICON_CLASS","parentSubmittedWatcher","isSubmitted","updateErrorState","ngInputElement","calendarPane","inputMask","setDisabled","isCalendarOpen","openOnFocus","calendarPaneOpenedFrom","bodyClickHandler","handleBodyClick","windowEventName","windowEventHandler","closeCalendarPane","handleWindowBlur","ngDateFilter","leftMargin","installPropertyInterceptors","attachChangeListeners","attachInteractionListeners","detachCalendarPane","mdIsOpen","shouldBeOpen","openCalendarPane","EXTRA_INPUT_SIZE","INVALID_CLASS","OPEN_CLASS","DEFAULT_DEBOUNCE_INTERVAL","CALENDAR_PANE_HEIGHT","CALENDAR_PANE_WIDTH","resizeInputElement","unshift","handleInputEvent","clearErrorState","inputString","parsedDate","isValidInput","attachCalendarPane","elementRect","bodyRect","paneTop","paneLeft","viewportTop","viewportLeft","viewportBottom","viewportRight","inputFocusedOnWindowBlur","focusCalendar","reset","getCalendarCtrl","isInCalendar","mdIconDirective","$mdIcon","$sce","parentsHaveText","prepareForFontIcon","mdSvgIcon","mdSvgSrc","mdFontIcon","lastFontSet","fontIconChanged","lastFontIcon","fontSet","mdFontSet","alt","attrVal","svg","MdIconProvider","ConfigurationItem","viewBoxSize","defaultViewBoxSize","MdIconService","getIcon","getTrustedUrl","iconCache","transformClone","urlRegex","dataUrlRegex","loadByURL","cacheIcon","load","loadByID","loadFromIconSet","findRegisteredFontSet","useDefault","defaultFontSet","fontSets","cacheElement","cacheSuffix","icon","isIcon","Icon","iconConfig","extractFromSet","iconName","lastIndexOf","iconSetConfig","announceIdNotFound","setName","loadByDataUrl","isBase64","atob","loadByHttpUrl","announceAndReject","err","statusText","extractSvg","svgCache","prepare","prepareAndStyle","preserveAspectRatio","viewBox","cloneSVG","mdCancel","mdMenu","mdToggleArrow","mdChecked","iconSet","defaultIconSet","defaultIconSize","iconSize","MenuController","$mdMenu","menuContainer","nestLevel","mdNestLevel","setMenuContainer","isInMenuBar","nestedMenus","onIsOpenChanged","menuContainerId","aria-owns","aria-haspopup","disableHoverListener","openMenuTimeout","menuItems","deregisterScopeListeners","enableHoverListener","currentlyOpenMenu","isAlreadyOpening","registerContainerProxy","triggerContainerProxy","handleMenuItemHover","handleMenuItemMouseLeave","nestedMenu","focusableTarget","mdMenuCtrl","$mdOpenMenu","$mdMenuIsOpen","focusMenuContainer","focusTarget","containerProxy","skipFocus","closeOpts","eventDetails","restoreFocusTo","positionMode","attachment","mdPositionMode","offsets","mdOffset","MenuDirective","templateElement","INVALID_PREFIX","nestingDepth","menuContents","MenuProvider","menuDefaultOptions","detachElement","showMenu","calculateMenuPosition","menuContentEl","startRepositioningOnResize","repositionMenu","handled","focusMenuItem","parentMenu","captureClickListener","hasAnyAttribute","closestMenu","didFocus","currentItem","currentIndex","attemptFocus","toNode","firstVisibleChild","openMenuNode","alignTarget","openMenuNodeRect","boundryNode","boundryNodeRect","menuStyle","originNode","originNodeRect","MENU_EDGE_MARGIN","alignTargetRect","existingOffsets","rtl","willFitRight","MenuBarController","BOUND_MENU_METHODS","deregisterFns","handleKeyDown","parentToolbar","getMenus","enableOpenOnHover","rootMenus","disableOpenOnHover","setKeyboardMode","openOnHoverEnabled","handleParentClick","handleMenuHover","scheduleOpenHoveredMenu","menuCtrl","scheduleOpenMenu","pendingMenuOpen","currentMenu","wasOpen","newMenu","newMenuCtrl","openFocusedMenu","focusMenu","menus","focusedIndex","getFocusedMenuIndex","getOpenMenuIndex","changed","menu","getFocusedMenu","focusedEl","openMenu","MenuBarDirective","templateEl","templateAttrs","ariaRole","contentEls","MenuDividerDirective","MenuItemController","iconEl","buttonEl","initClickListeners","clearNgAria","clearAttrs","handleClick","MenuItemDirective","setDefault","moveAttrToButton","inMenuBarClass","iconTemplate","MdProgressCircularDirective","$mdProgressCircular","$interval","MdProgressCircularLink","renderCircle","animateFrom","animateTo","rotation","lastAnimationId","changeInValue","diameter","mdDiameter","pathDiameter","getStroke","easeFn","getSvgArc","lastDrawFrame","rAF","animateIndeterminate","startIndeterminate","endIndeterminate","easeFnIndeterminate","durationIndeterminate","rotationIndeterminate","temp","startIndeterminateAnimation","interval","INDETERMINATE_CLASS","cleanupIndeterminateAnimation","cAF","$watchGroup","newValues","oldValues","wasDisabled","strokeWidth","largeArcFlag","maximumAngle","startPoint","radius","pathRadius","startAngle","endAngle","polarToCartesian","arcSweep","angleInDegrees","angleInRadians","DEGREE_IN_RADIANS","cos","sin","progressSize","parsed","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","PI","aria-valuemin","aria-valuemax","MdProgressCircularProvider","linearEase","materialEase","progressConfig","easingPresets","configure","MdTab","getTabElementIndex","insertTab","active","getIndex","refreshIndex","updateTabOrder","removeTab","MdTabItem","MdTabLabel","MdTabScroll","mdTabScroll","MdTabsController","$mdTabInkRipple","selectedIndex","compileTemplate","getElements","updateHeightFromContent","adjustOffset","updateInkBarStyles","loaded","updatePagination","$mdTabsTemplate","handleWindowResize","handleSelectedIndexChange","defineOneWayBinding","defineBooleanAttribute","updateValue","destroyed","handleStretchTabs","stretchTabs","shouldStretchTabs","handleCenterTabs","shouldCenterTabs","handleMaxTabWidth","newWidth","oldWidth","handleShouldPaginate","maxTabWidth","getMaxTabWidth","handleHasContent","hasContent","handleOffsetChange","paging","handleFocusIndexChange","redirectFocus","getNearestSafeIndex","lastSelectedIndex","handleResizeWhenVisible","incrementIndex","locked","focusIndex","lastClick","canSkipClick","noSelectClick","scroll","shouldPaginate","fixOffset","wheelDelta","nextPage","viewportWidth","canvas","totalWidth","previousPage","handleInkBar","inkBar","handleDynamicHeight","tabData","hasLoaded","proto","isActive","isLeft","isRight","shouldRender","noDisconnect","updateHasContent","dummies","canPageBack","canPageForward","lastTab","centerTabs","noPagination","canvasWidth","maxOffset","updatePagingWidth","calcPagingWidth","calcTabsWidth","focusItem","inc","dynamicHeight","tabContent","contentHeight","tabsHeight","newHeight","currentHeight","fromHeight","toHeight","tabWidth","updateInkBarClassName","ink","MdTabs","MdTabsDummyWrapper","observer","mutationCallback","childList","subtree","characterData","debounced","MdTabsTemplate","handleScope","reconnect","enableDisconnect","compileScope","connected","ngMaterial","full","11","12","ngMessageDirectiveFactory","collection","ngMessagesCtrl","records","commentNode","staticExp","ngMessage","dynamicExp","ngMessageExp","whenExp","assignRecords","reRender","currentElement","messageCtrl","$$attachId","getAttachId","isAttrTruthy","truthy","ACTIVE_CLASS","INACTIVE_CLASS","findPreviousMessage","comment","prevNode","parentLookup","prevKey","$$ngMessageNode","previousSibling","insertMessageNode","messageNode","removeMessageNode","latestKey","nextAttachId","renderLater","cachedCollection","ngMessagesMultiple","unmatchedMessages","matchedKeys","messageItem","messageFound","totalMessages","messageUsed","nextKey","src","ngMessagesInclude","createComment","13","14","extra","merge","dst","ancestors","second","objectKeys","object","array","inheritParams","currentParams","newParams","$current","$to","parentParams","parents","inherited","inheritList","equalForKeys","k","filterByKeys","pick","omit","$Resolve","VISIT_IN_PROGRESS","VISIT_DONE","NOTHING","NO_DEPENDENCIES","NO_LOCALS","NO_PARENT","$$promises","$$values","study","invocables","visit","visited","cycle","plan","annotate","param","isResolve","invocableKeys","merged","$$inheritedValues","resolution","fail","$$failure","invocable","onfailure","invocation","proceed","waitParams","dep","promises","ii","$TemplateFactory","$templateCache","fromConfig","fromString","fromUrl","templateProvider","fromProvider","headers","Accept","UrlMatcher","parentMatcher","addParameter","paramNames","$$UMFP","Param","quoteRegExp","squash","surroundPattern","matchDetails","m","isSearch","regexp","segment","cfg","caseInsensitive","searchPlaceholder","segments","$$new","ParamSet","isOptional","sourceSearch","sourcePath","strict","$$paramNames","Type","$UrlMatcherFactory","valToString","valFromString","getDefaultConfig","isStrictMode","isCaseInsensitive","isInjectable","flushTypeQueue","typeQueue","$types","injector","def","defaultSquashPolicy","enqueue","defaultTypes","encode","decode","is","int","capture","valueOf","toISOString","json","toJson","fromJson","any","$$getDefaultValue","strictMode","isMatcher","o","definitionFn","unwrapShorthand","isShorthand","$$fn","getType","urlType","getArrayMode","arrayDefaults","arrayParamNomenclature","getSquashPolicy","getReplace","arrayMode","configuredKeys","defaultPolicy","hasReplaceVal","$replace","replacement","$asArray","dynamic","$$parent","$$keys","ignore","paramset","paramValues","$$equals","paramValues1","paramValues2","equal","$$validates","rawVal","normalized","encoded","$UrlRouterProvider","$locationProvider","$urlMatcherFactory","regExpPrefix","interpolate","what","handleIfMatch","$match","$location","appendBasePath","isHtml5","baseHref","evt","check","defaultPrevented","lastPushedUrl","otherwise","listen","interceptDeferred","sync","read","urlMatcher","format","$$avoidResync","validates","html5Mode","history","hashPrefix","slash","port","protocol","redirect","handlerIsString","strategies","matcher","global","sticky","deferIntercept","$StateProvider","$urlRouterProvider","isRelative","stateName","findState","stateOrName","base","isStr","rel","pathLength","states","queueState","parentName","flushQueuedChildren","registerState","stateBuilder","$delegates","abstractKey","$stateParams","$state","navigable","transitionTo","isGlob","doesStateMatchGlob","glob","globSegments","l","MAX_VALUE","$view","$resolve","$urlRouter","handleRedirect","TransitionAborted","retry","$retry","TransitionFailed","retryTransition","TransitionSuperseded","toParams","resolveState","paramsAreFiltered","resolveViews","viewsPromises","views","view","injectables","globals","notify","controllerProvider","injectLocals","$$controller","$$state","$$controllerAs","TransitionPrevented","reload","go","relative","fromParams","fromPath","toState","redirectResult","toPath","keep","toLocals","reloadState","ownParams","shouldSkipReload","entering","exiting","onExit","onEnter","includes","lossy","nav","nonSearchParamsEqual","fromAndToState","notSearchParam","nonQueryParamKeys","nonQueryParams","nonQueryParamSet","reloadOnSearch","compositeName","","abstract","$ViewProvider","$templateFactory","async","$ViewScrollProvider","useAnchorScroll","$anchorScroll","scrollIntoView","$ViewDirective","$uiViewScroll","getService","getRenderer","animEnabled","ngMajorVer","ngMinorVer","$animator","statics","noanimation","animate","cleanupLastView","cleanOld","_previousEl","_currentScope","previousEl","currentScope","_willBeDestroyed","currentEl","renderer","updateView","firstTime","getUiViewName","previousLocals","latestLocals","autoScrollExp","onloadExp","onload","autoscroll","$ViewDirectiveFill","initial","uiView","inheritedData","parseStateRef","ref","preparsed","paramExpr","stateContext","stateData","getTypeInfo","isSvg","isForm","clickable","clickHook","ignorePreventDefaultCount","defaultOpts","$StateRefDirective","uiSrefActive","uiSrefOpts","$$addStateInfo","$StateRefDynamicDirective","runStateRefLink","uiState","uiStateParams","uiStateOpts","watch","$StateRefActiveDirective","addState","stateParams","activeClass","stateHash","createStateHash","anyMatch","exactMatch","activeEqClass","uiSrefActiveEq","newState","$IsStateFilter","isFilter","$IncludedByStateFilter","includesFilter","defaultConfig","searchParams","decodePathArray","reverseString","unquoteDashes","allReversed","paramName","parameters","nTotal","nPath","paramVal","encodeDashes","encodeURIComponent","charCodeAt","isPathParam","isDefaultValue","nextSegment","isFinalPathParam","$subPattern","sub","ArrayType","bindTo","callbackName","arrayWrap","arrayUnwrap","falsey","arrayHandler","allTruthyMode","arrayEqualsHandler","val1","val2","$arrayMode","major","15","minErr","ErrorConstructor","paramPrefix","SKIP_INDEXES","templateArgs","code","shiftedIndex","toDebugString","isArrayLike","isWindow","isPrimitive","isBlankObject","forEachSorted","reverseParams","iteratorFn","uid","setHashKey","h","$$hashKey","baseExtend","objs","deep","jj","isRegExp","toInt","valueFn","hasCustomToString","getPrototypeOf","isScope","isFile","isFormData","isBlob","isBoolean","isTypedArray","TYPED_ARRAY_REGEXP","isArrayBuffer","makeMap","nodeName_","arrayRemove","copyRecurse","copyElement","stackSource","stackDest","needsRecurse","copyType","constructor","buffer","copied","ArrayBuffer","byteLength","Uint8Array","shallowCopy","o1","o2","keySet","t1","t2","createMap","array1","array2","sliceArgs","curryArgs","toJsonReplacer","pretty","JSON","stringify","parse","timezoneToOffset","timezone","ALL_COLONS","requestedTimezoneOffset","addDateMinutes","minutes","setMinutes","getMinutes","convertTimezoneToLocal","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","startingTag","elemHtml","NODE_TYPE_TEXT","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","toKeyValue","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","getNgAttribute","ngAttr","ngAttrPrefixes","angularInit","bootstrap","appElement","candidate","strictDi","modules","doBootstrap","tag","debugInfoEnabled","$compileProvider","createInjector","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","getTestability","snake_case","SNAKE_CASE_REGEXP","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","JQLitePrototype","cleanData","elems","_data","JQLite","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","bindFnToScope","lastInstance","getBlockNodes","blockNodes","endNode","setupModuleLoader","ensure","$injectorMinErr","requires","configFn","invokeLater","insertMethod","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","component","serializeObject","seen","publishExternalAPI","uppercase","$$csp","csp","angularModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","htmlAnchorDirective","textarea","formDirective","script","scriptDirective","selectDirective","styleDirective","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","patternDirective","ngPattern","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlengthDirective","ngMaxlength","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$AnchorScrollProvider","$AnimateProvider","$CoreAnimateCssProvider","$$CoreAnimateJsProvider","$$CoreAnimateQueueProvider","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$BrowserProvider","$CacheFactoryProvider","$ControllerProvider","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$FilterProvider","$$ForceReflowProvider","$InterpolateProvider","$IntervalProvider","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$LocationProvider","$LogProvider","$ParseProvider","$RootScopeProvider","$QProvider","$$QProvider","$SceProvider","$sceDelegate","$SceDelegateProvider","$SnifferProvider","$TemplateCacheProvider","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$TimeoutProvider","$WindowProvider","$$RAFProvider","$$jqLiteProvider","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","jqNextId","jqId","MOZ_HACK_REGEXP","jqLiteIsTextNode","HTML_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteHasData","jqCache","ng339","jqLiteCleanData","jqLiteRemoveData","jqLiteBuildFragment","tmp","TAG_NAME_REGEXP","wrapMap","_default","XHTML_TAG_REGEXP","lastChild","jqLiteParseHTML","SINGLE_TAG_REGEXP","jqLiteWrapNode","replaceChild","argIsString","jqLiteMinErr","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","descendants","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","removeHandler","listenerFns","removeEventListenerFn","MOUSE_EVENT_MAP","expandoId","createIfNecessary","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","jqLiteRemoveClass","cssClasses","jqLiteAddClass","existingClasses","jqLiteController","jqLiteInheritedData","names","NODE_TYPE_DOCUMENT_FRAGMENT","jqLiteEmpty","jqLiteRemove","keepData","jqLiteDocumentLoaded","win","readyState","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","specialMouseHandlerWrapper","related","jqLiteContains","nextUidFn","objType","HashMap","isolatedUid","extractArgs","fnText","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","argDecl","FN_ARG_SPLIT","FN_ARG","underscore","modulesToLoad","supportObject","delegate","provider_","providerInjector","providerCache","providerSuffix","enforceReturnValue","instanceInjector","factoryFn","enforce","instanceCache","serviceName","decorFn","origProvider","orig$get","origInstance","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","createInternalInjector","caller","INSTANTIATING","injectionArgs","$$annotate","isClass","Function","ctor","protoInstanceInjector","autoScrollingEnabled","disableAutoScrolling","getFirstAnchor","getYOffset","yOffset","elemTop","scrollBy","oldVal","splitClasses","prepareAnimateOptions","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","getHash","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","getCurrentState","cachedState","lastCachedState","lastBrowserUrl","lastHistoryState","urlChangeListeners","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","baseElement","sameState","sameBase","stripHash","urlChangeInit","onUrlChange","$$applicationDestroyed","timeoutId","deferId","cacheFactory","cacheId","refresh","freshEnd","staleEnd","nextEntry","prevEntry","caches","stats","capacity","lruHash","lruEntry","removeAll","$$sanitizeUriProvider","parseIsolateBindings","isController","LOCAL_REGEXP","bindings","scopeName","$compileMinErr","parseDirectiveBindings","identifierForController","assertValidDirectiveName","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","registerDirective","directiveFactory","directives","$$bindings","makeInjectable","aHrefSanitizationWhitelist","imgSrcSanitizationWhitelist","setSpecialAttr","specialAttrHolder","removeNamedItem","setNamedItem","safeAddClass","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","NOT_EMPTY","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","cloneConnectFn","needsNewScope","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","detectNamespaceForChildElements","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","nodeLinkFn","childLinkFn","childScope","idx","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","nodeListLength","linkFns","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","nName","ngAttrName","isNgAttr","nAttrs","attrStartName","attrEndName","NG_ATTR_BINDING","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","compilationGenerator","eager","compileNode","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","inheritType","dataName","setupControllers","controllerDirectives","controllerKey","controllerInstance","hasElementTranscludeDirective","linkNode","controllersBoundTransclude","cloneAttachFn","scopeToChild","slotTranscludeFn","controllerScope","removeScopeBindingWatches","removeControllerBindingWatches","newScopeDirective","isSlotFilled","templateDirective","$$originalDirective","initializeDirectiveBindings","controllerDirective","identifier","controllerResult","$onInit","invokeLinkFn","directiveValue","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","replaceDirective","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","$$start","$$end","assertNoDuplicate","$$tlb","candidateDirective","scanningIndex","slots","slotMap","filledSlots","elementSelector","filled","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","linkQueue","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","oldClasses","ignoreChildLinkFn","diff","previousDirective","wrapModuleNameIfDefined","moduleName","interpolateFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","$$addBindingInfo","expressions","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","$$observers","$$inter","$$scope","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","hasData","annotation","removeWatchCollection","lastValue","parentGet","parentSet","compare","removeWatch","literal","parentValueWatch","parentValue","newParentValue","SIMPLE_ATTR_NAME","attributesToCopy","$addClass","classVal","$removeClass","newClasses","tokenDifference","writeAttr","booleanKey","aliasedKey","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","innerIdx","lastTuple","listeners","isolated","noTemplate","str1","str2","tokens1","tokens2","outer","jqNodes","ident","CNTRL_REG","allowGlobals","addIdentifier","later","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","v","serialize","toSerialize","topLevel","defaultHttpResponseTransform","tempData","JSON_PROTECTION_PREFIX","contentType","APPLICATION_JSON","isJsonLike","jsonStart","JSON_START","JSON_ENDS","parseHeaders","fillInParsed","headerVal","headerKey","headersGetter","headersObj","transformData","fns","isSuccess","transformResponse","transformRequest","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","resp","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","defHeaders","reqHeaders","defaultHeadersIteration","serverRequest","reqData","withCredentials","sendReq","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","$httpMinErrLegacyFn","createShortMethods","createShortMethodsWithData","headersString","resolveHttpPromise","resolvePromise","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","responseType","serializedParams","interceptorFactory","XMLHttpRequest","createHttpBackend","createXhr","$browserDefer","rawDocument","jsonpReq","callbackId","called","addEventListenerFn","timeoutRequest","jsonpDone","xhr","completeRequest","setRequestHeader","responseText","urlResolve","getAllResponseHeaders","onerror","onabort","send","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","mustHaveExpression","parseStringifyInterceptor","getValue","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","parseFns","expressionPositions","startSymbolLength","endSymbolLength","throwNoconcat","compute","getTrusted","currValue","hasParams","iteration","setInterval","clearInterval","skipApply","$$intervalId","intervals","encodePath","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","$$hash","beginsWith","begin","whole","trimEmptyHash","stripFile","serverBase","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","pathUrl","$locationMinErr","$$compose","$$url","$$absUrl","$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","removeWindowsDriveName","firstPathSegmentMatch","windowsFilePathExp","withoutHashUrl","withoutBaseUrl","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","requireBase","rewriteLinks","setBrowserUrlWithFallback","oldUrl","oldState","afterLocationChange","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","absHref","initializing","newUrl","currentReplace","$$replace","urlOrStateChanged","debugEnabled","flag","formatError","sourceURL","consoleLog","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","ifDefined","plusFn","isStateless","filterName","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","Literal","toWatch","UnaryExpression","argument","BinaryExpression","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","isConstant","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","interceptorFn","expensiveChecks","parsedExpression","oneTime","runningChecksEnabled","parseOptions","$parseOptionsExpensive","$parseOptions","lexer","Lexer","Parser","oneTimeLiteralWatchDelegate","oneTimeWatchDelegate","inputs","inputsWatchDelegate","expensiveChecksInterceptor","addInterceptor","expensiveCheckFn","expensiveCheckOldValue","expressionInputDirtyCheck","oldValueOfValue","prettyPrintExpression","lastResult","inputExpressions","oldInputValueOf","newInputValue","oldInputValueOfValues","oldInputValues","old","isAllDefined","allDefined","watchDelegate","useInputs","regularWatch","noUnsafeEval","$$runningExpensiveChecks","qFactory","exceptionHandler","Promise","simpleBind","pending","processScheduled","scheduleProcessQueue","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","handleCallback","$$reject","$$resolve","that","rejectPromise","makePromise","isResolved","callbackOutput","errback","$Q","resolver","resolveFn","rafSupported","raf","supported","createChildScopeClass","ChildScope","$$watchers","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","destroyChildScope","cleanUpScope","Scope","beginPhase","clearPhase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","watchExp","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","shouldCall","unwatchFn","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","internalObject","$watchCollectionAction","initRun","veryOldValue","trackVeryOldValue","changeDetector","watchers","dirty","logIdx","asyncTask","ttl","watchLog","asyncQueue","traverseScopesLoop","postDigestQueue","$applyAsyncExpression","namedListeners","indexOfListener","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","uri","isImage","normalizedVal","adjustMatcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","matchUrl","isResourceUrlAllowedByPolicy","allowed","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","trustAs","Constructor","byType","maybeTrusted","trustedValueHolderBase","htmlSanitizer","URL","JS","sce","isEnabled","parseAs","enumValue","lName","eventSupport","android","boxee","vendorRegex","bodyStyle","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","httpOptions","handleRequestFn","tpl","ignoreRequestError","handleError","getTrustedResourceUrl","transformer","testability","findBindings","opt_exactMatch","dataBinding","bindingName","findModels","prefixes","attributeEquals","getLocation","setLocation","whenStable","deferreds","$$timeoutId","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","currencyFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","predicateFn","matchAgainstAnyProp","expressionType","getTypeForFilter","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","matchAnyProperty","actualVal","formats","NUMBER_FORMATS","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","numStr","digits","numberOfIntegerDigits","zeros","exponent","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","roundAt","digit","carry","reduceRight","groupSep","decimalSep","isInfinity","isFinite","isZero","formattedText","integerLen","decimals","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","neg","dateGetter","dateStrGetter","shortForm","timeZoneGetter","zone","paddedZone","getFirstThursdayOfYear","dayOfWeekOnFirst","getThursdayThisWeek","datetime","weekGetter","firstThurs","thisThurs","ampmGetter","AMPMS","eraGetter","ERAS","longEraGetter","ERANAMES","jsonStringToDate","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","ms","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","Infinity","processPredicates","sortPredicate","reverseOrder","predicate","descending","objectValue","getPredicateValue","v1","v2","getComparisonObject","predicateValues","predicates","doComparison","compareValues","ngDirective","nullFormRenameControl","control","$name","FormController","controls","$error","$$success","$pending","$dirty","$pristine","$$parentForm","nullFormCtrl","$rollbackViewValue","$commitViewValue","$addControl","$$renameControl","newName","oldName","$removeControl","addSetValidityMethod","unset","PRISTINE_CLASS","DIRTY_CLASS","SUBMITTED_CLASS","$setUntouched","$setSubmitted","stringBasedInputType","textInputType","baseInputType","composing","ngTrim","$$hasNativeValidators","deferListener","weekParser","isoWeek","existingDate","WEEK_REGEXP","week","hours","seconds","milliseconds","addDays","getSeconds","getMilliseconds","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","mm","ss","sss","part","createDateInputType","parseObservedDateValue","badInputChecker","previousDate","$$parserName","ngModelMinErr","ngMin","minVal","ngMax","maxVal","nativeValidation","VALIDITY_STATE_PROPERTY","typeMismatch","numberInputType","NUMBER_REGEXP","urlInputType","URL_REGEXP","emailInputType","email","EMAIL_REGEXP","radioInputType","parseConstantExpr","parseFn","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","classDirective","arrayDifference","arrayClasses","addClasses","digestClassCounts","removeClasses","classCounts","classesToUpdate","updateClasses","ngClassWatchAction","old$index","mod","setValidity","validationErrorKey","createAndSet","unsetAndCleanup","cachedToggleClass","PENDING_CLASS","toggleValidationCss","isObjectEmpty","combinedState","switchValue","classCache","isValid","VALID_CLASS","chromeHack","optionElement","REGEX_STRING_REGEXP","manualLowercase","manualUppercase","documentMode","ngCspElement","ngCspAttribute","noInlineStyle","name_","NODE_TYPE_ATTRIBUTE","dot","codeName","expando","mouseleave","mouseenter","thead","tr","td","optgroup","tbody","tfoot","colgroup","caption","ready","fired","lowercasedName","getNamedItem","specified","ret","$dv","nodeCount","types","noEventListener","onFn","replaceNode","contentDocument","wrapNode","newElement","classCondition","extraParameters","dummyEvent","eventFnsCopy","handlerArgs","arg3","unbind","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","addRemoveClassesPostDigest","classesAdded","classesRemoved","$$classNameFilter","reservedRegex","domInsert","afterElement","afterNode","previousElementSibling","addclass","waitForTick","waitQueue","rafTick","timeoutTick","_tick","applyAnimationContents","closed","Content-Type","[","{","$httpMinErr","PATH_MATCH","http","https","ftp","locationPrototype","paramValue","Location","OPERATORS","f","'","\"","lex","readString","peek","readNumber","isIdent","readIdent","isWhitespace","ch2","ch3","op1","op2","op3","throwError","chars","isExpOperator","colStr","peekCh","quote","rawString","rep","ExpressionStatement","Property","program","expressionStatement","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","constants","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","null","$locals","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeAssignContext","addEnsureSafeMemberName","addEnsureSafeFunction","member","stringEscapeRegex","stringEscapeFn","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","MMMM","MMM","M","H","hh","EEEE","EEE","Z","ww","w","G","GG","GGG","GGGG","xlinkHref","propName","defaultLinkFn","formDirectiveFactory","isNgForm","getSetter","formElement","nameAttr","handleFormSubmission","parentFormCtrl","setter","DATE_REGEXP","DATETIMELOCAL_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","datetime-local","radio","checkbox","submit","file","CONSTANT_VALUE_REGEXP","tplAttr","ngBindHtmlGetter","ngBindHtmlWatch","getTrustedHtml","forceAsyncEvents","previousElements","srcExp","changeCounter","cleanupLastIncludeContent","afterAnimation","thisChangeId","trimValues","UNTOUCHED_CLASS","TOUCHED_CLASS","EMPTY_CLASS","NOT_EMPTY_CLASS","NgModelController","$$rawModelValue","$asyncValidators","$untouched","parserValid","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","$$updateEmptyClasses","currentValidationRunId","$$lastCommittedViewValue","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","doneCallback","processParseErrors","errorKey","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","$$parseAndValidate","writeToModelIfNeeded","updateOnDefault","$$debounceViewValueCommit","debounceDelay","formatters","modelCtrl","updateOn","DEFAULT_REGEXP","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","selectAsFn","viewValueFn","trackByFn","getTrackByValueFn","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","ngOptionsPostLink","updateOptionElement","addOrReuseElement","removeExcessElements","skipEmptyAndUnknownOptions","emptyOption_","emptyOption","unknownOption_","unknownOption","updateOptions","previousValue","readValue","groupMap","providedEmptyOption","groupElement","optGroupTemplate","currentOptionElement","optionTemplate","nextValue","isNotPrimitive","renderEmptyOption","removeEmptyOption","renderUnknownOption","removeUnknownOption","writeValue","selectedValues","selections","selectedOption","registerOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whens","whensExpFns","braceReplacement","watchRemover","tmpMatch","whenKey","countIsNaN","pluralCat","whenExpFn","NG_REMOVED","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","getBlockStart","getBlockEnd","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","lastBlockMap","collectionLength","trackById","trackByIdFn","collectionKeys","nextBlockOrder","previousNode","nextBlockMap","blockKey","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","newStyles","oldStyles","cases","ngSwitchController","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","selectedTransclude","caseElement","selectedScope","ngTranscludeMinErr","ngTranscludeCloneAttachFn","ngTranscludeSlot","noopNgModelController","SelectController","optionsMap","unknownVal","hasOption","optionScope","optionAttrs","interpolateValueFn","interpolateTextFn","selectPreLink","lastView","lastViewRef","selectPostLink","selectCtrlName","patternExp","intVal","getDecimals","getVF","opt_precision","PLURAL_CATEGORY","ZERO","ONE","TWO","FEW","MANY","OTHER","FIRSTDAYOFWEEK","STANDALONEMONTH","WEEKENDRANGE","fullDate","longDate","medium","mediumDate","mediumTime","short","shortDate","shortTime","minInt","localeID","vf","5","16","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_select","_interopRequireDefault","__esModule","_classCallCheck","_select2","_typeof","Symbol","_createClass","defineProperties","descriptor","enumerable","configurable","writable","protoProps","staticProps","ClipboardAction","resolveOptions","initSelection","emitter","selectedText","selectFake","selectTarget","_this","isRTL","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","border","pageYOffset","copyText","succeeded","execCommand","handleResult","emit","clearSelection","_action","_target","17","_clipboardAction","_tinyEmitter","_goodListener","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","setPrototypeOf","__proto__","getAttributeValue","_clipboardAction2","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","listenClick","defaultAction","defaultTarget","defaultText","_this2","onClick","delegateTarget","clipboardAction","210","mediaQuery","alreadyImportedModules","18","closest","DOCUMENT_NODE_TYPE","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","19","useCapture","listenerFn","60","HTMLElement","61","listenNode","listenNodeList","listenSelector","58","207","isReadOnly","setSelectionRange","209","E","ctx","once","evtArr","evts","liveEvents"],"mappings":"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","file":"vendor.7d0046.min.js","sourcesContent":["webpackJsonp([2],{\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// Angular\n\t__webpack_require__(5);\n\t__webpack_require__(3);\n\t__webpack_require__(13);\n\t__webpack_require__(4);\n\t__webpack_require__(11);\n\t__webpack_require__(14);\n\t\n\t__webpack_require__(9);\n\t\n\t// css\n\t__webpack_require__(57);\n\t__webpack_require__(58);\n\t\n\t__webpack_require__(17);\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports) {\n\n\t/**\n\t * @license AngularJS v1.5.0\n\t * (c) 2010-2016 Google, Inc. http://angularjs.org\n\t * License: MIT\n\t */\n\t(function(window, angular, undefined) {'use strict';\n\t\n\t/* jshint ignore:start */\n\tvar noop = angular.noop;\n\tvar copy = angular.copy;\n\tvar extend = angular.extend;\n\tvar jqLite = angular.element;\n\tvar forEach = angular.forEach;\n\tvar isArray = angular.isArray;\n\tvar isString = angular.isString;\n\tvar isObject = angular.isObject;\n\tvar isUndefined = angular.isUndefined;\n\tvar isDefined = angular.isDefined;\n\tvar isFunction = angular.isFunction;\n\tvar isElement = angular.isElement;\n\t\n\tvar ELEMENT_NODE = 1;\n\tvar COMMENT_NODE = 8;\n\t\n\tvar ADD_CLASS_SUFFIX = '-add';\n\tvar REMOVE_CLASS_SUFFIX = '-remove';\n\tvar EVENT_CLASS_PREFIX = 'ng-';\n\tvar ACTIVE_CLASS_SUFFIX = '-active';\n\tvar PREPARE_CLASS_SUFFIX = '-prepare';\n\t\n\tvar NG_ANIMATE_CLASSNAME = 'ng-animate';\n\tvar NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';\n\t\n\t// Detect proper transitionend/animationend event names.\n\tvar CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\n\t\n\t// If unprefixed events are not supported but webkit-prefixed are, use the latter.\n\t// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\n\t// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\n\t// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\n\t// Register both events in case `window.onanimationend` is not supported because of that,\n\t// do the same for `transitionend` as Safari is likely to exhibit similar behavior.\n\t// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\n\t// therefore there is no reason to test anymore for other vendor prefixes:\n\t// http://caniuse.com/#search=transition\n\tif (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) {\n\t CSS_PREFIX = '-webkit-';\n\t TRANSITION_PROP = 'WebkitTransition';\n\t TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\n\t} else {\n\t TRANSITION_PROP = 'transition';\n\t TRANSITIONEND_EVENT = 'transitionend';\n\t}\n\t\n\tif (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) {\n\t CSS_PREFIX = '-webkit-';\n\t ANIMATION_PROP = 'WebkitAnimation';\n\t ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\n\t} else {\n\t ANIMATION_PROP = 'animation';\n\t ANIMATIONEND_EVENT = 'animationend';\n\t}\n\t\n\tvar DURATION_KEY = 'Duration';\n\tvar PROPERTY_KEY = 'Property';\n\tvar DELAY_KEY = 'Delay';\n\tvar TIMING_KEY = 'TimingFunction';\n\tvar ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\n\tvar ANIMATION_PLAYSTATE_KEY = 'PlayState';\n\tvar SAFE_FAST_FORWARD_DURATION_VALUE = 9999;\n\t\n\tvar ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;\n\tvar ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;\n\tvar TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;\n\tvar TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;\n\t\n\tvar isPromiseLike = function(p) {\n\t return p && p.then ? true : false;\n\t};\n\t\n\tvar ngMinErr = angular.$$minErr('ng');\n\tfunction assertArg(arg, name, reason) {\n\t if (!arg) {\n\t throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n\t }\n\t return arg;\n\t}\n\t\n\tfunction mergeClasses(a,b) {\n\t if (!a && !b) return '';\n\t if (!a) return b;\n\t if (!b) return a;\n\t if (isArray(a)) a = a.join(' ');\n\t if (isArray(b)) b = b.join(' ');\n\t return a + ' ' + b;\n\t}\n\t\n\tfunction packageStyles(options) {\n\t var styles = {};\n\t if (options && (options.to || options.from)) {\n\t styles.to = options.to;\n\t styles.from = options.from;\n\t }\n\t return styles;\n\t}\n\t\n\tfunction pendClasses(classes, fix, isPrefix) {\n\t var className = '';\n\t classes = isArray(classes)\n\t ? classes\n\t : classes && isString(classes) && classes.length\n\t ? classes.split(/\\s+/)\n\t : [];\n\t forEach(classes, function(klass, i) {\n\t if (klass && klass.length > 0) {\n\t className += (i > 0) ? ' ' : '';\n\t className += isPrefix ? fix + klass\n\t : klass + fix;\n\t }\n\t });\n\t return className;\n\t}\n\t\n\tfunction removeFromArray(arr, val) {\n\t var index = arr.indexOf(val);\n\t if (val >= 0) {\n\t arr.splice(index, 1);\n\t }\n\t}\n\t\n\tfunction stripCommentsFromElement(element) {\n\t if (element instanceof jqLite) {\n\t switch (element.length) {\n\t case 0:\n\t return [];\n\t break;\n\t\n\t case 1:\n\t // there is no point of stripping anything if the element\n\t // is the only element within the jqLite wrapper.\n\t // (it's important that we retain the element instance.)\n\t if (element[0].nodeType === ELEMENT_NODE) {\n\t return element;\n\t }\n\t break;\n\t\n\t default:\n\t return jqLite(extractElementNode(element));\n\t break;\n\t }\n\t }\n\t\n\t if (element.nodeType === ELEMENT_NODE) {\n\t return jqLite(element);\n\t }\n\t}\n\t\n\tfunction extractElementNode(element) {\n\t if (!element[0]) return element;\n\t for (var i = 0; i < element.length; i++) {\n\t var elm = element[i];\n\t if (elm.nodeType == ELEMENT_NODE) {\n\t return elm;\n\t }\n\t }\n\t}\n\t\n\tfunction $$addClass($$jqLite, element, className) {\n\t forEach(element, function(elm) {\n\t $$jqLite.addClass(elm, className);\n\t });\n\t}\n\t\n\tfunction $$removeClass($$jqLite, element, className) {\n\t forEach(element, function(elm) {\n\t $$jqLite.removeClass(elm, className);\n\t });\n\t}\n\t\n\tfunction applyAnimationClassesFactory($$jqLite) {\n\t return function(element, options) {\n\t if (options.addClass) {\n\t $$addClass($$jqLite, element, options.addClass);\n\t options.addClass = null;\n\t }\n\t if (options.removeClass) {\n\t $$removeClass($$jqLite, element, options.removeClass);\n\t options.removeClass = null;\n\t }\n\t }\n\t}\n\t\n\tfunction prepareAnimationOptions(options) {\n\t options = options || {};\n\t if (!options.$$prepared) {\n\t var domOperation = options.domOperation || noop;\n\t options.domOperation = function() {\n\t options.$$domOperationFired = true;\n\t domOperation();\n\t domOperation = noop;\n\t };\n\t options.$$prepared = true;\n\t }\n\t return options;\n\t}\n\t\n\tfunction applyAnimationStyles(element, options) {\n\t applyAnimationFromStyles(element, options);\n\t applyAnimationToStyles(element, options);\n\t}\n\t\n\tfunction applyAnimationFromStyles(element, options) {\n\t if (options.from) {\n\t element.css(options.from);\n\t options.from = null;\n\t }\n\t}\n\t\n\tfunction applyAnimationToStyles(element, options) {\n\t if (options.to) {\n\t element.css(options.to);\n\t options.to = null;\n\t }\n\t}\n\t\n\tfunction mergeAnimationDetails(element, oldAnimation, newAnimation) {\n\t var target = oldAnimation.options || {};\n\t var newOptions = newAnimation.options || {};\n\t\n\t var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');\n\t var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');\n\t var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);\n\t\n\t if (newOptions.preparationClasses) {\n\t target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);\n\t delete newOptions.preparationClasses;\n\t }\n\t\n\t // noop is basically when there is no callback; otherwise something has been set\n\t var realDomOperation = target.domOperation !== noop ? target.domOperation : null;\n\t\n\t extend(target, newOptions);\n\t\n\t // 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\t if (realDomOperation) {\n\t target.domOperation = realDomOperation;\n\t }\n\t\n\t if (classes.addClass) {\n\t target.addClass = classes.addClass;\n\t } else {\n\t target.addClass = null;\n\t }\n\t\n\t if (classes.removeClass) {\n\t target.removeClass = classes.removeClass;\n\t } else {\n\t target.removeClass = null;\n\t }\n\t\n\t oldAnimation.addClass = target.addClass;\n\t oldAnimation.removeClass = target.removeClass;\n\t\n\t return target;\n\t}\n\t\n\tfunction resolveElementClasses(existing, toAdd, toRemove) {\n\t var ADD_CLASS = 1;\n\t var REMOVE_CLASS = -1;\n\t\n\t var flags = {};\n\t existing = splitClassesToLookup(existing);\n\t\n\t toAdd = splitClassesToLookup(toAdd);\n\t forEach(toAdd, function(value, key) {\n\t flags[key] = ADD_CLASS;\n\t });\n\t\n\t toRemove = splitClassesToLookup(toRemove);\n\t forEach(toRemove, function(value, key) {\n\t flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;\n\t });\n\t\n\t var classes = {\n\t addClass: '',\n\t removeClass: ''\n\t };\n\t\n\t forEach(flags, function(val, klass) {\n\t var prop, allow;\n\t if (val === ADD_CLASS) {\n\t prop = 'addClass';\n\t allow = !existing[klass];\n\t } else if (val === REMOVE_CLASS) {\n\t prop = 'removeClass';\n\t allow = existing[klass];\n\t }\n\t if (allow) {\n\t if (classes[prop].length) {\n\t classes[prop] += ' ';\n\t }\n\t classes[prop] += klass;\n\t }\n\t });\n\t\n\t function splitClassesToLookup(classes) {\n\t if (isString(classes)) {\n\t classes = classes.split(' ');\n\t }\n\t\n\t var obj = {};\n\t forEach(classes, function(klass) {\n\t // sometimes the split leaves empty string values\n\t // incase extra spaces were applied to the options\n\t if (klass.length) {\n\t obj[klass] = true;\n\t }\n\t });\n\t return obj;\n\t }\n\t\n\t return classes;\n\t}\n\t\n\tfunction getDomNode(element) {\n\t return (element instanceof angular.element) ? element[0] : element;\n\t}\n\t\n\tfunction applyGeneratedPreparationClasses(element, event, options) {\n\t var classes = '';\n\t if (event) {\n\t classes = pendClasses(event, EVENT_CLASS_PREFIX, true);\n\t }\n\t if (options.addClass) {\n\t classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));\n\t }\n\t if (options.removeClass) {\n\t classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));\n\t }\n\t if (classes.length) {\n\t options.preparationClasses = classes;\n\t element.addClass(classes);\n\t }\n\t}\n\t\n\tfunction clearGeneratedClasses(element, options) {\n\t if (options.preparationClasses) {\n\t element.removeClass(options.preparationClasses);\n\t options.preparationClasses = null;\n\t }\n\t if (options.activeClasses) {\n\t element.removeClass(options.activeClasses);\n\t options.activeClasses = null;\n\t }\n\t}\n\t\n\tfunction blockTransitions(node, duration) {\n\t // we use a negative delay value since it performs blocking\n\t // yet it doesn't kill any existing transitions running on the\n\t // same element which makes this safe for class-based animations\n\t var value = duration ? '-' + duration + 's' : '';\n\t applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);\n\t return [TRANSITION_DELAY_PROP, value];\n\t}\n\t\n\tfunction blockKeyframeAnimations(node, applyBlock) {\n\t var value = applyBlock ? 'paused' : '';\n\t var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;\n\t applyInlineStyle(node, [key, value]);\n\t return [key, value];\n\t}\n\t\n\tfunction applyInlineStyle(node, styleTuple) {\n\t var prop = styleTuple[0];\n\t var value = styleTuple[1];\n\t node.style[prop] = value;\n\t}\n\t\n\tfunction concatWithSpace(a,b) {\n\t if (!a) return b;\n\t if (!b) return a;\n\t return a + ' ' + b;\n\t}\n\t\n\tvar $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {\n\t var queue, cancelFn;\n\t\n\t function scheduler(tasks) {\n\t // we make a copy since RAFScheduler mutates the state\n\t // of the passed in array variable and this would be difficult\n\t // to track down on the outside code\n\t queue = queue.concat(tasks);\n\t nextTick();\n\t }\n\t\n\t queue = scheduler.queue = [];\n\t\n\t /* waitUntilQuiet does two things:\n\t * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through\n\t * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.\n\t *\n\t * The motivation here is that animation code can request more time from the scheduler\n\t * before the next wave runs. This allows for certain DOM properties such as classes to\n\t * be resolved in time for the next animation to run.\n\t */\n\t scheduler.waitUntilQuiet = function(fn) {\n\t if (cancelFn) cancelFn();\n\t\n\t cancelFn = $$rAF(function() {\n\t cancelFn = null;\n\t fn();\n\t nextTick();\n\t });\n\t };\n\t\n\t return scheduler;\n\t\n\t function nextTick() {\n\t if (!queue.length) return;\n\t\n\t var items = queue.shift();\n\t for (var i = 0; i < items.length; i++) {\n\t items[i]();\n\t }\n\t\n\t if (!cancelFn) {\n\t $$rAF(function() {\n\t if (!cancelFn) nextTick();\n\t });\n\t }\n\t }\n\t}];\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngAnimateChildren\n\t * @restrict AE\n\t * @element ANY\n\t *\n\t * @description\n\t *\n\t * ngAnimateChildren allows you to specify that children of this element should animate even if any\n\t * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move`\n\t * (structural) animation, child elements that also have an active structural animation are not animated.\n\t *\n\t * Note that even if `ngAnimteChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).\n\t *\n\t *\n\t * @param {string} ngAnimateChildren If the value is empty, `true` or `on`,\n\t * then child animations are allowed. If the value is `false`, child animations are not allowed.\n\t *\n\t * @example\n\t * \n\t \n\t
\n\t \n\t \n\t
\n\t
\n\t
\n\t List of items:\n\t
Item {{item}}
\n\t
\n\t
\n\t
\n\t
\n\t \n\t\n\t .container.ng-enter,\n\t .container.ng-leave {\n\t transition: all ease 1.5s;\n\t }\n\t\n\t .container.ng-enter,\n\t .container.ng-leave-active {\n\t opacity: 0;\n\t }\n\t\n\t .container.ng-leave,\n\t .container.ng-enter-active {\n\t opacity: 1;\n\t }\n\t\n\t .item {\n\t background: firebrick;\n\t color: #FFF;\n\t margin-bottom: 10px;\n\t }\n\t\n\t .item.ng-enter,\n\t .item.ng-leave {\n\t transition: transform 1.5s ease;\n\t }\n\t\n\t .item.ng-enter {\n\t transform: translateX(50px);\n\t }\n\t\n\t .item.ng-enter-active {\n\t transform: translateX(0);\n\t }\n\t \n\t \n\t angular.module('ngAnimateChildren', ['ngAnimate'])\n\t .controller('mainController', function() {\n\t this.animateChildren = false;\n\t this.enterElement = false;\n\t });\n\t \n\t
\n\t */\n\tvar $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {\n\t return {\n\t link: function(scope, element, attrs) {\n\t var val = attrs.ngAnimateChildren;\n\t if (angular.isString(val) && val.length === 0) { //empty attribute\n\t element.data(NG_ANIMATE_CHILDREN_DATA, true);\n\t } else {\n\t // Interpolate and set the value, so that it is available to\n\t // animations that run right after compilation\n\t setData($interpolate(val)(scope));\n\t attrs.$observe('ngAnimateChildren', setData);\n\t }\n\t\n\t function setData(value) {\n\t value = value === 'on' || value === 'true';\n\t element.data(NG_ANIMATE_CHILDREN_DATA, value);\n\t }\n\t }\n\t };\n\t}];\n\t\n\tvar ANIMATE_TIMER_KEY = '$$animateCss';\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $animateCss\n\t * @kind object\n\t *\n\t * @description\n\t * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes\n\t * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT\n\t * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or\n\t * directives to create more complex animations that can be purely driven using CSS code.\n\t *\n\t * Note that only browsers that support CSS transitions and/or keyframe animations are capable of\n\t * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).\n\t *\n\t * ## Usage\n\t * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that\n\t * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,\n\t * any automatic control over cancelling animations and/or preventing animations from being run on\n\t * child elements will not be handled by Angular. For this to work as expected, please use `$animate` to\n\t * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger\n\t * the CSS animation.\n\t *\n\t * The example below shows how we can create a folding animation on an element using `ng-if`:\n\t *\n\t * ```html\n\t * \n\t *
\n\t * This element will go BOOM\n\t *
\n\t * \n\t * ```\n\t *\n\t * Now we create the **JavaScript animation** that will trigger the CSS transition:\n\t *\n\t * ```js\n\t * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n\t * return {\n\t * enter: function(element, doneFn) {\n\t * var height = element[0].offsetHeight;\n\t * return $animateCss(element, {\n\t * from: { height:'0px' },\n\t * to: { height:height + 'px' },\n\t * duration: 1 // one second\n\t * });\n\t * }\n\t * }\n\t * }]);\n\t * ```\n\t *\n\t * ## More Advanced Uses\n\t *\n\t * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks\n\t * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.\n\t *\n\t * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,\n\t * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with\n\t * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order\n\t * to provide a working animation that will run in CSS.\n\t *\n\t * The example below showcases a more advanced version of the `.fold-animation` from the example above:\n\t *\n\t * ```js\n\t * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n\t * return {\n\t * enter: function(element, doneFn) {\n\t * var height = element[0].offsetHeight;\n\t * return $animateCss(element, {\n\t * addClass: 'red large-text pulse-twice',\n\t * easing: 'ease-out',\n\t * from: { height:'0px' },\n\t * to: { height:height + 'px' },\n\t * duration: 1 // one second\n\t * });\n\t * }\n\t * }\n\t * }]);\n\t * ```\n\t *\n\t * Since we're adding/removing CSS classes then the CSS transition will also pick those up:\n\t *\n\t * ```css\n\t * /* since a hardcoded duration value of 1 was provided in the JavaScript animation code,\n\t * the CSS classes below will be transitioned despite them being defined as regular CSS classes */\n\t * .red { background:red; }\n\t * .large-text { font-size:20px; }\n\t *\n\t * /* we can also use a keyframe animation and $animateCss will make it work alongside the transition */\n\t * .pulse-twice {\n\t * animation: 0.5s pulse linear 2;\n\t * -webkit-animation: 0.5s pulse linear 2;\n\t * }\n\t *\n\t * @keyframes pulse {\n\t * from { transform: scale(0.5); }\n\t * to { transform: scale(1.5); }\n\t * }\n\t *\n\t * @-webkit-keyframes pulse {\n\t * from { -webkit-transform: scale(0.5); }\n\t * to { -webkit-transform: scale(1.5); }\n\t * }\n\t * ```\n\t *\n\t * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.\n\t *\n\t * ## How the Options are handled\n\t *\n\t * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation\n\t * 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\t * styles using the `from` and `to` properties.\n\t *\n\t * ```js\n\t * var animator = $animateCss(element, {\n\t * from: { background:'red' },\n\t * to: { background:'blue' }\n\t * });\n\t * animator.start();\n\t * ```\n\t *\n\t * ```css\n\t * .rotating-animation {\n\t * animation:0.5s rotate linear;\n\t * -webkit-animation:0.5s rotate linear;\n\t * }\n\t *\n\t * @keyframes rotate {\n\t * from { transform: rotate(0deg); }\n\t * to { transform: rotate(360deg); }\n\t * }\n\t *\n\t * @-webkit-keyframes rotate {\n\t * from { -webkit-transform: rotate(0deg); }\n\t * to { -webkit-transform: rotate(360deg); }\n\t * }\n\t * ```\n\t *\n\t * 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\t * 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\t * 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\t * 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\t * and spread across the transition and keyframe animation.\n\t *\n\t * ## What is returned\n\t *\n\t * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually\n\t * 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\t * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:\n\t *\n\t * ```js\n\t * var animator = $animateCss(element, { ... });\n\t * ```\n\t *\n\t * Now what do the contents of our `animator` variable look like:\n\t *\n\t * ```js\n\t * {\n\t * // starts the animation\n\t * start: Function,\n\t *\n\t * // ends (aborts) the animation\n\t * end: Function\n\t * }\n\t * ```\n\t *\n\t * 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\t * 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\t * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties\n\t * and that changing them will not reconfigure the parameters of the animation.\n\t *\n\t * ### runner.done() vs runner.then()\n\t * 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\t * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.\n\t * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`\n\t * unless you really need a digest to kick off afterwards.\n\t *\n\t * 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\t * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code).\n\t * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works.\n\t *\n\t * @param {DOMElement} element the element that will be animated\n\t * @param {object} options the animation-related options that will be applied during the animation\n\t *\n\t * * `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\t * 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\t * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and\n\t * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted.\n\t * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).\n\t * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).\n\t * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).\n\t * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.\n\t * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.\n\t * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.\n\t * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.\n\t * * `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\t * is provided then the animation will be skipped entirely.\n\t * * `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\t * 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\t * 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\t * CSS delay value.\n\t * * `stagger` - A numeric time value representing the delay between successively animated elements\n\t * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})\n\t * * `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\t * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)\n\t * * `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\t * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once\n\t * the animation is closed. This is useful for when the styles are used purely for the sake of\n\t * the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation).\n\t * By default this value is set to `false`.\n\t *\n\t * @return {object} an object with start and end methods and details about the animation.\n\t *\n\t * * `start` - The method to start the animation. This will return a `Promise` when called.\n\t * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.\n\t */\n\tvar ONE_SECOND = 1000;\n\tvar BASE_TEN = 10;\n\t\n\tvar ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\n\tvar CLOSING_TIME_BUFFER = 1.5;\n\t\n\tvar DETECT_CSS_PROPERTIES = {\n\t transitionDuration: TRANSITION_DURATION_PROP,\n\t transitionDelay: TRANSITION_DELAY_PROP,\n\t transitionProperty: TRANSITION_PROP + PROPERTY_KEY,\n\t animationDuration: ANIMATION_DURATION_PROP,\n\t animationDelay: ANIMATION_DELAY_PROP,\n\t animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY\n\t};\n\t\n\tvar DETECT_STAGGER_CSS_PROPERTIES = {\n\t transitionDuration: TRANSITION_DURATION_PROP,\n\t transitionDelay: TRANSITION_DELAY_PROP,\n\t animationDuration: ANIMATION_DURATION_PROP,\n\t animationDelay: ANIMATION_DELAY_PROP\n\t};\n\t\n\tfunction getCssKeyframeDurationStyle(duration) {\n\t return [ANIMATION_DURATION_PROP, duration + 's'];\n\t}\n\t\n\tfunction getCssDelayStyle(delay, isKeyframeAnimation) {\n\t var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;\n\t return [prop, delay + 's'];\n\t}\n\t\n\tfunction computeCssStyles($window, element, properties) {\n\t var styles = Object.create(null);\n\t var detectedStyles = $window.getComputedStyle(element) || {};\n\t forEach(properties, function(formalStyleName, actualStyleName) {\n\t var val = detectedStyles[formalStyleName];\n\t if (val) {\n\t var c = val.charAt(0);\n\t\n\t // only numerical-based values have a negative sign or digit as the first value\n\t if (c === '-' || c === '+' || c >= 0) {\n\t val = parseMaxTime(val);\n\t }\n\t\n\t // by setting this to null in the event that the delay is not set or is set directly as 0\n\t // then we can still allow for negative values to be used later on and not mistake this\n\t // value for being greater than any other negative value.\n\t if (val === 0) {\n\t val = null;\n\t }\n\t styles[actualStyleName] = val;\n\t }\n\t });\n\t\n\t return styles;\n\t}\n\t\n\tfunction parseMaxTime(str) {\n\t var maxValue = 0;\n\t var values = str.split(/\\s*,\\s*/);\n\t forEach(values, function(value) {\n\t // it's always safe to consider only second values and omit `ms` values since\n\t // getComputedStyle will always handle the conversion for us\n\t if (value.charAt(value.length - 1) == 's') {\n\t value = value.substring(0, value.length - 1);\n\t }\n\t value = parseFloat(value) || 0;\n\t maxValue = maxValue ? Math.max(value, maxValue) : value;\n\t });\n\t return maxValue;\n\t}\n\t\n\tfunction truthyTimingValue(val) {\n\t return val === 0 || val != null;\n\t}\n\t\n\tfunction getCssTransitionDurationStyle(duration, applyOnlyDuration) {\n\t var style = TRANSITION_PROP;\n\t var value = duration + 's';\n\t if (applyOnlyDuration) {\n\t style += DURATION_KEY;\n\t } else {\n\t value += ' linear all';\n\t }\n\t return [style, value];\n\t}\n\t\n\tfunction createLocalCacheLookup() {\n\t var cache = Object.create(null);\n\t return {\n\t flush: function() {\n\t cache = Object.create(null);\n\t },\n\t\n\t count: function(key) {\n\t var entry = cache[key];\n\t return entry ? entry.total : 0;\n\t },\n\t\n\t get: function(key) {\n\t var entry = cache[key];\n\t return entry && entry.value;\n\t },\n\t\n\t put: function(key, value) {\n\t if (!cache[key]) {\n\t cache[key] = { total: 1, value: value };\n\t } else {\n\t cache[key].total++;\n\t }\n\t }\n\t };\n\t}\n\t\n\t// we do not reassign an already present style value since\n\t// if we detect the style property value again we may be\n\t// detecting styles that were added via the `from` styles.\n\t// We make use of `isDefined` here since an empty string\n\t// or null value (which is what getPropertyValue will return\n\t// for a non-existing style) will still be marked as a valid\n\t// value for the style (a falsy value implies that the style\n\t// is to be removed at the end of the animation). If we had a simple\n\t// \"OR\" statement then it would not be enough to catch that.\n\tfunction registerRestorableStyles(backup, node, properties) {\n\t forEach(properties, function(prop) {\n\t backup[prop] = isDefined(backup[prop])\n\t ? backup[prop]\n\t : node.style.getPropertyValue(prop);\n\t });\n\t}\n\t\n\tvar $AnimateCssProvider = ['$animateProvider', function($animateProvider) {\n\t var gcsLookup = createLocalCacheLookup();\n\t var gcsStaggerLookup = createLocalCacheLookup();\n\t\n\t this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',\n\t '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue',\n\t function($window, $$jqLite, $$AnimateRunner, $timeout,\n\t $$forceReflow, $sniffer, $$rAFScheduler, $$animateQueue) {\n\t\n\t var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\t\n\t var parentCounter = 0;\n\t function gcsHashFn(node, extraClasses) {\n\t var KEY = \"$$ngAnimateParentKey\";\n\t var parentNode = node.parentNode;\n\t var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);\n\t return parentID + '-' + node.getAttribute('class') + '-' + extraClasses;\n\t }\n\t\n\t function computeCachedCssStyles(node, className, cacheKey, properties) {\n\t var timings = gcsLookup.get(cacheKey);\n\t\n\t if (!timings) {\n\t timings = computeCssStyles($window, node, properties);\n\t if (timings.animationIterationCount === 'infinite') {\n\t timings.animationIterationCount = 1;\n\t }\n\t }\n\t\n\t // we keep putting this in multiple times even though the value and the cacheKey are the same\n\t // because we're keeping an internal tally of how many duplicate animations are detected.\n\t gcsLookup.put(cacheKey, timings);\n\t return timings;\n\t }\n\t\n\t function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {\n\t var stagger;\n\t\n\t // if we have one or more existing matches of matching elements\n\t // containing the same parent + CSS styles (which is how cacheKey works)\n\t // then staggering is possible\n\t if (gcsLookup.count(cacheKey) > 0) {\n\t stagger = gcsStaggerLookup.get(cacheKey);\n\t\n\t if (!stagger) {\n\t var staggerClassName = pendClasses(className, '-stagger');\n\t\n\t $$jqLite.addClass(node, staggerClassName);\n\t\n\t stagger = computeCssStyles($window, node, properties);\n\t\n\t // force the conversion of a null value to zero incase not set\n\t stagger.animationDuration = Math.max(stagger.animationDuration, 0);\n\t stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);\n\t\n\t $$jqLite.removeClass(node, staggerClassName);\n\t\n\t gcsStaggerLookup.put(cacheKey, stagger);\n\t }\n\t }\n\t\n\t return stagger || {};\n\t }\n\t\n\t var cancelLastRAFRequest;\n\t var rafWaitQueue = [];\n\t function waitUntilQuiet(callback) {\n\t rafWaitQueue.push(callback);\n\t $$rAFScheduler.waitUntilQuiet(function() {\n\t gcsLookup.flush();\n\t gcsStaggerLookup.flush();\n\t\n\t // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.\n\t // PLEASE EXAMINE THE `$$forceReflow` service to understand why.\n\t var pageWidth = $$forceReflow();\n\t\n\t // we use a for loop to ensure that if the queue is changed\n\t // during this looping then it will consider new requests\n\t for (var i = 0; i < rafWaitQueue.length; i++) {\n\t rafWaitQueue[i](pageWidth);\n\t }\n\t rafWaitQueue.length = 0;\n\t });\n\t }\n\t\n\t function computeTimings(node, className, cacheKey) {\n\t var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);\n\t var aD = timings.animationDelay;\n\t var tD = timings.transitionDelay;\n\t timings.maxDelay = aD && tD\n\t ? Math.max(aD, tD)\n\t : (aD || tD);\n\t timings.maxDuration = Math.max(\n\t timings.animationDuration * timings.animationIterationCount,\n\t timings.transitionDuration);\n\t\n\t return timings;\n\t }\n\t\n\t return function init(element, initialOptions) {\n\t // all of the animation functions should create\n\t // a copy of the options data, however, if a\n\t // parent service has already created a copy then\n\t // we should stick to using that\n\t var options = initialOptions || {};\n\t if (!options.$$prepared) {\n\t options = prepareAnimationOptions(copy(options));\n\t }\n\t\n\t var restoreStyles = {};\n\t var node = getDomNode(element);\n\t if (!node\n\t || !node.parentNode\n\t || !$$animateQueue.enabled()) {\n\t return closeAndReturnNoopAnimator();\n\t }\n\t\n\t var temporaryStyles = [];\n\t var classes = element.attr('class');\n\t var styles = packageStyles(options);\n\t var animationClosed;\n\t var animationPaused;\n\t var animationCompleted;\n\t var runner;\n\t var runnerHost;\n\t var maxDelay;\n\t var maxDelayTime;\n\t var maxDuration;\n\t var maxDurationTime;\n\t var startTime;\n\t var events = [];\n\t\n\t if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {\n\t return closeAndReturnNoopAnimator();\n\t }\n\t\n\t var method = options.event && isArray(options.event)\n\t ? options.event.join(' ')\n\t : options.event;\n\t\n\t var isStructural = method && options.structural;\n\t var structuralClassName = '';\n\t var addRemoveClassName = '';\n\t\n\t if (isStructural) {\n\t structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);\n\t } else if (method) {\n\t structuralClassName = method;\n\t }\n\t\n\t if (options.addClass) {\n\t addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);\n\t }\n\t\n\t if (options.removeClass) {\n\t if (addRemoveClassName.length) {\n\t addRemoveClassName += ' ';\n\t }\n\t addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);\n\t }\n\t\n\t // there may be a situation where a structural animation is combined together\n\t // with CSS classes that need to resolve before the animation is computed.\n\t // However this means that there is no explicit CSS code to block the animation\n\t // from happening (by setting 0s none in the class name). If this is the case\n\t // we need to apply the classes before the first rAF so we know to continue if\n\t // there actually is a detected transition or keyframe animation\n\t if (options.applyClassesEarly && addRemoveClassName.length) {\n\t applyAnimationClasses(element, options);\n\t }\n\t\n\t var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();\n\t var fullClassName = classes + ' ' + preparationClasses;\n\t var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);\n\t var hasToStyles = styles.to && Object.keys(styles.to).length > 0;\n\t var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;\n\t\n\t // there is no way we can trigger an animation if no styles and\n\t // no classes are being applied which would then trigger a transition,\n\t // unless there a is raw keyframe value that is applied to the element.\n\t if (!containsKeyframeAnimation\n\t && !hasToStyles\n\t && !preparationClasses) {\n\t return closeAndReturnNoopAnimator();\n\t }\n\t\n\t var cacheKey, stagger;\n\t if (options.stagger > 0) {\n\t var staggerVal = parseFloat(options.stagger);\n\t stagger = {\n\t transitionDelay: staggerVal,\n\t animationDelay: staggerVal,\n\t transitionDuration: 0,\n\t animationDuration: 0\n\t };\n\t } else {\n\t cacheKey = gcsHashFn(node, fullClassName);\n\t stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);\n\t }\n\t\n\t if (!options.$$skipPreparationClasses) {\n\t $$jqLite.addClass(element, preparationClasses);\n\t }\n\t\n\t var applyOnlyDuration;\n\t\n\t if (options.transitionStyle) {\n\t var transitionStyle = [TRANSITION_PROP, options.transitionStyle];\n\t applyInlineStyle(node, transitionStyle);\n\t temporaryStyles.push(transitionStyle);\n\t }\n\t\n\t if (options.duration >= 0) {\n\t applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;\n\t var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);\n\t\n\t // we set the duration so that it will be picked up by getComputedStyle later\n\t applyInlineStyle(node, durationStyle);\n\t temporaryStyles.push(durationStyle);\n\t }\n\t\n\t if (options.keyframeStyle) {\n\t var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];\n\t applyInlineStyle(node, keyframeStyle);\n\t temporaryStyles.push(keyframeStyle);\n\t }\n\t\n\t var itemIndex = stagger\n\t ? options.staggerIndex >= 0\n\t ? options.staggerIndex\n\t : gcsLookup.count(cacheKey)\n\t : 0;\n\t\n\t var isFirst = itemIndex === 0;\n\t\n\t // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY\n\t // without causing any combination of transitions to kick in. By adding a negative delay value\n\t // it forces the setup class' transition to end immediately. We later then remove the negative\n\t // transition delay to allow for the transition to naturally do it's thing. The beauty here is\n\t // that if there is no transition defined then nothing will happen and this will also allow\n\t // other transitions to be stacked on top of each other without any chopping them out.\n\t if (isFirst && !options.skipBlocking) {\n\t blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);\n\t }\n\t\n\t var timings = computeTimings(node, fullClassName, cacheKey);\n\t var relativeDelay = timings.maxDelay;\n\t maxDelay = Math.max(relativeDelay, 0);\n\t maxDuration = timings.maxDuration;\n\t\n\t var flags = {};\n\t flags.hasTransitions = timings.transitionDuration > 0;\n\t flags.hasAnimations = timings.animationDuration > 0;\n\t flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty == 'all';\n\t flags.applyTransitionDuration = hasToStyles && (\n\t (flags.hasTransitions && !flags.hasTransitionAll)\n\t || (flags.hasAnimations && !flags.hasTransitions));\n\t flags.applyAnimationDuration = options.duration && flags.hasAnimations;\n\t flags.applyTransitionDelay = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);\n\t flags.applyAnimationDelay = truthyTimingValue(options.delay) && flags.hasAnimations;\n\t flags.recalculateTimingStyles = addRemoveClassName.length > 0;\n\t\n\t if (flags.applyTransitionDuration || flags.applyAnimationDuration) {\n\t maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;\n\t\n\t if (flags.applyTransitionDuration) {\n\t flags.hasTransitions = true;\n\t timings.transitionDuration = maxDuration;\n\t applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;\n\t temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));\n\t }\n\t\n\t if (flags.applyAnimationDuration) {\n\t flags.hasAnimations = true;\n\t timings.animationDuration = maxDuration;\n\t temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));\n\t }\n\t }\n\t\n\t if (maxDuration === 0 && !flags.recalculateTimingStyles) {\n\t return closeAndReturnNoopAnimator();\n\t }\n\t\n\t if (options.delay != null) {\n\t var delayStyle;\n\t if (typeof options.delay !== \"boolean\") {\n\t delayStyle = parseFloat(options.delay);\n\t // number in options.delay means we have to recalculate the delay for the closing timeout\n\t maxDelay = Math.max(delayStyle, 0);\n\t }\n\t\n\t if (flags.applyTransitionDelay) {\n\t temporaryStyles.push(getCssDelayStyle(delayStyle));\n\t }\n\t\n\t if (flags.applyAnimationDelay) {\n\t temporaryStyles.push(getCssDelayStyle(delayStyle, true));\n\t }\n\t }\n\t\n\t // we need to recalculate the delay value since we used a pre-emptive negative\n\t // delay value and the delay value is required for the final event checking. This\n\t // property will ensure that this will happen after the RAF phase has passed.\n\t if (options.duration == null && timings.transitionDuration > 0) {\n\t flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;\n\t }\n\t\n\t maxDelayTime = maxDelay * ONE_SECOND;\n\t maxDurationTime = maxDuration * ONE_SECOND;\n\t if (!options.skipBlocking) {\n\t flags.blockTransition = timings.transitionDuration > 0;\n\t flags.blockKeyframeAnimation = timings.animationDuration > 0 &&\n\t stagger.animationDelay > 0 &&\n\t stagger.animationDuration === 0;\n\t }\n\t\n\t if (options.from) {\n\t if (options.cleanupStyles) {\n\t registerRestorableStyles(restoreStyles, node, Object.keys(options.from));\n\t }\n\t applyAnimationFromStyles(element, options);\n\t }\n\t\n\t if (flags.blockTransition || flags.blockKeyframeAnimation) {\n\t applyBlocking(maxDuration);\n\t } else if (!options.skipBlocking) {\n\t blockTransitions(node, false);\n\t }\n\t\n\t // TODO(matsko): for 1.5 change this code to have an animator object for better debugging\n\t return {\n\t $$willAnimate: true,\n\t end: endFn,\n\t start: function() {\n\t if (animationClosed) return;\n\t\n\t runnerHost = {\n\t end: endFn,\n\t cancel: cancelFn,\n\t resume: null, //this will be set during the start() phase\n\t pause: null\n\t };\n\t\n\t runner = new $$AnimateRunner(runnerHost);\n\t\n\t waitUntilQuiet(start);\n\t\n\t // we don't have access to pause/resume the animation\n\t // since it hasn't run yet. AnimateRunner will therefore\n\t // set noop functions for resume and pause and they will\n\t // later be overridden once the animation is triggered\n\t return runner;\n\t }\n\t };\n\t\n\t function endFn() {\n\t close();\n\t }\n\t\n\t function cancelFn() {\n\t close(true);\n\t }\n\t\n\t function close(rejected) { // jshint ignore:line\n\t // if the promise has been called already then we shouldn't close\n\t // the animation again\n\t if (animationClosed || (animationCompleted && animationPaused)) return;\n\t animationClosed = true;\n\t animationPaused = false;\n\t\n\t if (!options.$$skipPreparationClasses) {\n\t $$jqLite.removeClass(element, preparationClasses);\n\t }\n\t $$jqLite.removeClass(element, activeClasses);\n\t\n\t blockKeyframeAnimations(node, false);\n\t blockTransitions(node, false);\n\t\n\t forEach(temporaryStyles, function(entry) {\n\t // There is only one way to remove inline style properties entirely from elements.\n\t // By using `removeProperty` this works, but we need to convert camel-cased CSS\n\t // styles down to hyphenated values.\n\t node.style[entry[0]] = '';\n\t });\n\t\n\t applyAnimationClasses(element, options);\n\t applyAnimationStyles(element, options);\n\t\n\t if (Object.keys(restoreStyles).length) {\n\t forEach(restoreStyles, function(value, prop) {\n\t value ? node.style.setProperty(prop, value)\n\t : node.style.removeProperty(prop);\n\t });\n\t }\n\t\n\t // the reason why we have this option is to allow a synchronous closing callback\n\t // that is fired as SOON as the animation ends (when the CSS is removed) or if\n\t // the animation never takes off at all. A good example is a leave animation since\n\t // the element must be removed just after the animation is over or else the element\n\t // will appear on screen for one animation frame causing an overbearing flicker.\n\t if (options.onDone) {\n\t options.onDone();\n\t }\n\t\n\t if (events && events.length) {\n\t // Remove the transitionend / animationend listener(s)\n\t element.off(events.join(' '), onAnimationProgress);\n\t }\n\t\n\t //Cancel the fallback closing timeout and remove the timer data\n\t var animationTimerData = element.data(ANIMATE_TIMER_KEY);\n\t if (animationTimerData) {\n\t $timeout.cancel(animationTimerData[0].timer);\n\t element.removeData(ANIMATE_TIMER_KEY);\n\t }\n\t\n\t // if the preparation function fails then the promise is not setup\n\t if (runner) {\n\t runner.complete(!rejected);\n\t }\n\t }\n\t\n\t function applyBlocking(duration) {\n\t if (flags.blockTransition) {\n\t blockTransitions(node, duration);\n\t }\n\t\n\t if (flags.blockKeyframeAnimation) {\n\t blockKeyframeAnimations(node, !!duration);\n\t }\n\t }\n\t\n\t function closeAndReturnNoopAnimator() {\n\t runner = new $$AnimateRunner({\n\t end: endFn,\n\t cancel: cancelFn\n\t });\n\t\n\t // should flush the cache animation\n\t waitUntilQuiet(noop);\n\t close();\n\t\n\t return {\n\t $$willAnimate: false,\n\t start: function() {\n\t return runner;\n\t },\n\t end: endFn\n\t };\n\t }\n\t\n\t function onAnimationProgress(event) {\n\t event.stopPropagation();\n\t var ev = event.originalEvent || event;\n\t\n\t // we now always use `Date.now()` due to the recent changes with\n\t // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info)\n\t var timeStamp = ev.$manualTimeStamp || Date.now();\n\t\n\t /* Firefox (or possibly just Gecko) likes to not round values up\n\t * when a ms measurement is used for the animation */\n\t var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\n\t\n\t /* $manualTimeStamp is a mocked timeStamp value which is set\n\t * within browserTrigger(). This is only here so that tests can\n\t * mock animations properly. Real events fallback to event.timeStamp,\n\t * or, if they don't, then a timeStamp is automatically created for them.\n\t * We're checking to see if the timeStamp surpasses the expected delay,\n\t * but we're using elapsedTime instead of the timeStamp on the 2nd\n\t * pre-condition since animationPauseds sometimes close off early */\n\t if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n\t // we set this flag to ensure that if the transition is paused then, when resumed,\n\t // the animation will automatically close itself since transitions cannot be paused.\n\t animationCompleted = true;\n\t close();\n\t }\n\t }\n\t\n\t function start() {\n\t if (animationClosed) return;\n\t if (!node.parentNode) {\n\t close();\n\t return;\n\t }\n\t\n\t // even though we only pause keyframe animations here the pause flag\n\t // will still happen when transitions are used. Only the transition will\n\t // not be paused since that is not possible. If the animation ends when\n\t // paused then it will not complete until unpaused or cancelled.\n\t var playPause = function(playAnimation) {\n\t if (!animationCompleted) {\n\t animationPaused = !playAnimation;\n\t if (timings.animationDuration) {\n\t var value = blockKeyframeAnimations(node, animationPaused);\n\t animationPaused\n\t ? temporaryStyles.push(value)\n\t : removeFromArray(temporaryStyles, value);\n\t }\n\t } else if (animationPaused && playAnimation) {\n\t animationPaused = false;\n\t close();\n\t }\n\t };\n\t\n\t // checking the stagger duration prevents an accidentally cascade of the CSS delay style\n\t // being inherited from the parent. If the transition duration is zero then we can safely\n\t // rely that the delay value is an intentional stagger delay style.\n\t var maxStagger = itemIndex > 0\n\t && ((timings.transitionDuration && stagger.transitionDuration === 0) ||\n\t (timings.animationDuration && stagger.animationDuration === 0))\n\t && Math.max(stagger.animationDelay, stagger.transitionDelay);\n\t if (maxStagger) {\n\t $timeout(triggerAnimationStart,\n\t Math.floor(maxStagger * itemIndex * ONE_SECOND),\n\t false);\n\t } else {\n\t triggerAnimationStart();\n\t }\n\t\n\t // this will decorate the existing promise runner with pause/resume methods\n\t runnerHost.resume = function() {\n\t playPause(true);\n\t };\n\t\n\t runnerHost.pause = function() {\n\t playPause(false);\n\t };\n\t\n\t function triggerAnimationStart() {\n\t // just incase a stagger animation kicks in when the animation\n\t // itself was cancelled entirely\n\t if (animationClosed) return;\n\t\n\t applyBlocking(false);\n\t\n\t forEach(temporaryStyles, function(entry) {\n\t var key = entry[0];\n\t var value = entry[1];\n\t node.style[key] = value;\n\t });\n\t\n\t applyAnimationClasses(element, options);\n\t $$jqLite.addClass(element, activeClasses);\n\t\n\t if (flags.recalculateTimingStyles) {\n\t fullClassName = node.className + ' ' + preparationClasses;\n\t cacheKey = gcsHashFn(node, fullClassName);\n\t\n\t timings = computeTimings(node, fullClassName, cacheKey);\n\t relativeDelay = timings.maxDelay;\n\t maxDelay = Math.max(relativeDelay, 0);\n\t maxDuration = timings.maxDuration;\n\t\n\t if (maxDuration === 0) {\n\t close();\n\t return;\n\t }\n\t\n\t flags.hasTransitions = timings.transitionDuration > 0;\n\t flags.hasAnimations = timings.animationDuration > 0;\n\t }\n\t\n\t if (flags.applyAnimationDelay) {\n\t relativeDelay = typeof options.delay !== \"boolean\" && truthyTimingValue(options.delay)\n\t ? parseFloat(options.delay)\n\t : relativeDelay;\n\t\n\t maxDelay = Math.max(relativeDelay, 0);\n\t timings.animationDelay = relativeDelay;\n\t delayStyle = getCssDelayStyle(relativeDelay, true);\n\t temporaryStyles.push(delayStyle);\n\t node.style[delayStyle[0]] = delayStyle[1];\n\t }\n\t\n\t maxDelayTime = maxDelay * ONE_SECOND;\n\t maxDurationTime = maxDuration * ONE_SECOND;\n\t\n\t if (options.easing) {\n\t var easeProp, easeVal = options.easing;\n\t if (flags.hasTransitions) {\n\t easeProp = TRANSITION_PROP + TIMING_KEY;\n\t temporaryStyles.push([easeProp, easeVal]);\n\t node.style[easeProp] = easeVal;\n\t }\n\t if (flags.hasAnimations) {\n\t easeProp = ANIMATION_PROP + TIMING_KEY;\n\t temporaryStyles.push([easeProp, easeVal]);\n\t node.style[easeProp] = easeVal;\n\t }\n\t }\n\t\n\t if (timings.transitionDuration) {\n\t events.push(TRANSITIONEND_EVENT);\n\t }\n\t\n\t if (timings.animationDuration) {\n\t events.push(ANIMATIONEND_EVENT);\n\t }\n\t\n\t startTime = Date.now();\n\t var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;\n\t var endTime = startTime + timerTime;\n\t\n\t var animationsData = element.data(ANIMATE_TIMER_KEY) || [];\n\t var setupFallbackTimer = true;\n\t if (animationsData.length) {\n\t var currentTimerData = animationsData[0];\n\t setupFallbackTimer = endTime > currentTimerData.expectedEndTime;\n\t if (setupFallbackTimer) {\n\t $timeout.cancel(currentTimerData.timer);\n\t } else {\n\t animationsData.push(close);\n\t }\n\t }\n\t\n\t if (setupFallbackTimer) {\n\t var timer = $timeout(onAnimationExpired, timerTime, false);\n\t animationsData[0] = {\n\t timer: timer,\n\t expectedEndTime: endTime\n\t };\n\t animationsData.push(close);\n\t element.data(ANIMATE_TIMER_KEY, animationsData);\n\t }\n\t\n\t if (events.length) {\n\t element.on(events.join(' '), onAnimationProgress);\n\t }\n\t\n\t if (options.to) {\n\t if (options.cleanupStyles) {\n\t registerRestorableStyles(restoreStyles, node, Object.keys(options.to));\n\t }\n\t applyAnimationToStyles(element, options);\n\t }\n\t }\n\t\n\t function onAnimationExpired() {\n\t var animationsData = element.data(ANIMATE_TIMER_KEY);\n\t\n\t // this will be false in the event that the element was\n\t // removed from the DOM (via a leave animation or something\n\t // similar)\n\t if (animationsData) {\n\t for (var i = 1; i < animationsData.length; i++) {\n\t animationsData[i]();\n\t }\n\t element.removeData(ANIMATE_TIMER_KEY);\n\t }\n\t }\n\t }\n\t };\n\t }];\n\t}];\n\t\n\tvar $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationProvider) {\n\t $$animationProvider.drivers.push('$$animateCssDriver');\n\t\n\t var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';\n\t var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';\n\t\n\t var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';\n\t var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';\n\t\n\t function isDocumentFragment(node) {\n\t return node.parentNode && node.parentNode.nodeType === 11;\n\t }\n\t\n\t this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',\n\t function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) {\n\t\n\t // only browsers that support these properties can render animations\n\t if (!$sniffer.animations && !$sniffer.transitions) return noop;\n\t\n\t var bodyNode = $document[0].body;\n\t var rootNode = getDomNode($rootElement);\n\t\n\t var rootBodyElement = jqLite(\n\t // this is to avoid using something that exists outside of the body\n\t // we also special case the doc fragment case because our unit test code\n\t // appends the $rootElement to the body after the app has been bootstrapped\n\t isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode\n\t );\n\t\n\t var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\t\n\t return function initDriverFn(animationDetails) {\n\t return animationDetails.from && animationDetails.to\n\t ? prepareFromToAnchorAnimation(animationDetails.from,\n\t animationDetails.to,\n\t animationDetails.classes,\n\t animationDetails.anchors)\n\t : prepareRegularAnimation(animationDetails);\n\t };\n\t\n\t function filterCssClasses(classes) {\n\t //remove all the `ng-` stuff\n\t return classes.replace(/\\bng-\\S+\\b/g, '');\n\t }\n\t\n\t function getUniqueValues(a, b) {\n\t if (isString(a)) a = a.split(' ');\n\t if (isString(b)) b = b.split(' ');\n\t return a.filter(function(val) {\n\t return b.indexOf(val) === -1;\n\t }).join(' ');\n\t }\n\t\n\t function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {\n\t var clone = jqLite(getDomNode(outAnchor).cloneNode(true));\n\t var startingClasses = filterCssClasses(getClassVal(clone));\n\t\n\t outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n\t inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n\t\n\t clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);\n\t\n\t rootBodyElement.append(clone);\n\t\n\t var animatorIn, animatorOut = prepareOutAnimation();\n\t\n\t // the user may not end up using the `out` animation and\n\t // only making use of the `in` animation or vice-versa.\n\t // In either case we should allow this and not assume the\n\t // animation is over unless both animations are not used.\n\t if (!animatorOut) {\n\t animatorIn = prepareInAnimation();\n\t if (!animatorIn) {\n\t return end();\n\t }\n\t }\n\t\n\t var startingAnimator = animatorOut || animatorIn;\n\t\n\t return {\n\t start: function() {\n\t var runner;\n\t\n\t var currentAnimation = startingAnimator.start();\n\t currentAnimation.done(function() {\n\t currentAnimation = null;\n\t if (!animatorIn) {\n\t animatorIn = prepareInAnimation();\n\t if (animatorIn) {\n\t currentAnimation = animatorIn.start();\n\t currentAnimation.done(function() {\n\t currentAnimation = null;\n\t end();\n\t runner.complete();\n\t });\n\t return currentAnimation;\n\t }\n\t }\n\t // in the event that there is no `in` animation\n\t end();\n\t runner.complete();\n\t });\n\t\n\t runner = new $$AnimateRunner({\n\t end: endFn,\n\t cancel: endFn\n\t });\n\t\n\t return runner;\n\t\n\t function endFn() {\n\t if (currentAnimation) {\n\t currentAnimation.end();\n\t }\n\t }\n\t }\n\t };\n\t\n\t function calculateAnchorStyles(anchor) {\n\t var styles = {};\n\t\n\t var coords = getDomNode(anchor).getBoundingClientRect();\n\t\n\t // we iterate directly since safari messes up and doesn't return\n\t // all the keys for the coords object when iterated\n\t forEach(['width','height','top','left'], function(key) {\n\t var value = coords[key];\n\t switch (key) {\n\t case 'top':\n\t value += bodyNode.scrollTop;\n\t break;\n\t case 'left':\n\t value += bodyNode.scrollLeft;\n\t break;\n\t }\n\t styles[key] = Math.floor(value) + 'px';\n\t });\n\t return styles;\n\t }\n\t\n\t function prepareOutAnimation() {\n\t var animator = $animateCss(clone, {\n\t addClass: NG_OUT_ANCHOR_CLASS_NAME,\n\t delay: true,\n\t from: calculateAnchorStyles(outAnchor)\n\t });\n\t\n\t // read the comment within `prepareRegularAnimation` to understand\n\t // why this check is necessary\n\t return animator.$$willAnimate ? animator : null;\n\t }\n\t\n\t function getClassVal(element) {\n\t return element.attr('class') || '';\n\t }\n\t\n\t function prepareInAnimation() {\n\t var endingClasses = filterCssClasses(getClassVal(inAnchor));\n\t var toAdd = getUniqueValues(endingClasses, startingClasses);\n\t var toRemove = getUniqueValues(startingClasses, endingClasses);\n\t\n\t var animator = $animateCss(clone, {\n\t to: calculateAnchorStyles(inAnchor),\n\t addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,\n\t removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,\n\t delay: true\n\t });\n\t\n\t // read the comment within `prepareRegularAnimation` to understand\n\t // why this check is necessary\n\t return animator.$$willAnimate ? animator : null;\n\t }\n\t\n\t function end() {\n\t clone.remove();\n\t outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n\t inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n\t }\n\t }\n\t\n\t function prepareFromToAnchorAnimation(from, to, classes, anchors) {\n\t var fromAnimation = prepareRegularAnimation(from, noop);\n\t var toAnimation = prepareRegularAnimation(to, noop);\n\t\n\t var anchorAnimations = [];\n\t forEach(anchors, function(anchor) {\n\t var outElement = anchor['out'];\n\t var inElement = anchor['in'];\n\t var animator = prepareAnchoredAnimation(classes, outElement, inElement);\n\t if (animator) {\n\t anchorAnimations.push(animator);\n\t }\n\t });\n\t\n\t // no point in doing anything when there are no elements to animate\n\t if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;\n\t\n\t return {\n\t start: function() {\n\t var animationRunners = [];\n\t\n\t if (fromAnimation) {\n\t animationRunners.push(fromAnimation.start());\n\t }\n\t\n\t if (toAnimation) {\n\t animationRunners.push(toAnimation.start());\n\t }\n\t\n\t forEach(anchorAnimations, function(animation) {\n\t animationRunners.push(animation.start());\n\t });\n\t\n\t var runner = new $$AnimateRunner({\n\t end: endFn,\n\t cancel: endFn // CSS-driven animations cannot be cancelled, only ended\n\t });\n\t\n\t $$AnimateRunner.all(animationRunners, function(status) {\n\t runner.complete(status);\n\t });\n\t\n\t return runner;\n\t\n\t function endFn() {\n\t forEach(animationRunners, function(runner) {\n\t runner.end();\n\t });\n\t }\n\t }\n\t };\n\t }\n\t\n\t function prepareRegularAnimation(animationDetails) {\n\t var element = animationDetails.element;\n\t var options = animationDetails.options || {};\n\t\n\t if (animationDetails.structural) {\n\t options.event = animationDetails.event;\n\t options.structural = true;\n\t options.applyClassesEarly = true;\n\t\n\t // we special case the leave animation since we want to ensure that\n\t // the element is removed as soon as the animation is over. Otherwise\n\t // a flicker might appear or the element may not be removed at all\n\t if (animationDetails.event === 'leave') {\n\t options.onDone = options.domOperation;\n\t }\n\t }\n\t\n\t // We assign the preparationClasses as the actual animation event since\n\t // the internals of $animateCss will just suffix the event token values\n\t // with `-active` to trigger the animation.\n\t if (options.preparationClasses) {\n\t options.event = concatWithSpace(options.event, options.preparationClasses);\n\t }\n\t\n\t var animator = $animateCss(element, options);\n\t\n\t // the driver lookup code inside of $$animation attempts to spawn a\n\t // driver one by one until a driver returns a.$$willAnimate animator object.\n\t // $animateCss will always return an object, however, it will pass in\n\t // a flag as a hint as to whether an animation was detected or not\n\t return animator.$$willAnimate ? animator : null;\n\t }\n\t }];\n\t}];\n\t\n\t// TODO(matsko): use caching here to speed things up for detection\n\t// TODO(matsko): add documentation\n\t// by the time...\n\t\n\tvar $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {\n\t this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',\n\t function($injector, $$AnimateRunner, $$jqLite) {\n\t\n\t var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\t // $animateJs(element, 'enter');\n\t return function(element, event, classes, options) {\n\t var animationClosed = false;\n\t\n\t // the `classes` argument is optional and if it is not used\n\t // then the classes will be resolved from the element's className\n\t // property as well as options.addClass/options.removeClass.\n\t if (arguments.length === 3 && isObject(classes)) {\n\t options = classes;\n\t classes = null;\n\t }\n\t\n\t options = prepareAnimationOptions(options);\n\t if (!classes) {\n\t classes = element.attr('class') || '';\n\t if (options.addClass) {\n\t classes += ' ' + options.addClass;\n\t }\n\t if (options.removeClass) {\n\t classes += ' ' + options.removeClass;\n\t }\n\t }\n\t\n\t var classesToAdd = options.addClass;\n\t var classesToRemove = options.removeClass;\n\t\n\t // the lookupAnimations function returns a series of animation objects that are\n\t // matched up with one or more of the CSS classes. These animation objects are\n\t // defined via the module.animation factory function. If nothing is detected then\n\t // we don't return anything which then makes $animation query the next driver.\n\t var animations = lookupAnimations(classes);\n\t var before, after;\n\t if (animations.length) {\n\t var afterFn, beforeFn;\n\t if (event == 'leave') {\n\t beforeFn = 'leave';\n\t afterFn = 'afterLeave'; // TODO(matsko): get rid of this\n\t } else {\n\t beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);\n\t afterFn = event;\n\t }\n\t\n\t if (event !== 'enter' && event !== 'move') {\n\t before = packageAnimations(element, event, options, animations, beforeFn);\n\t }\n\t after = packageAnimations(element, event, options, animations, afterFn);\n\t }\n\t\n\t // no matching animations\n\t if (!before && !after) return;\n\t\n\t function applyOptions() {\n\t options.domOperation();\n\t applyAnimationClasses(element, options);\n\t }\n\t\n\t function close() {\n\t animationClosed = true;\n\t applyOptions();\n\t applyAnimationStyles(element, options);\n\t }\n\t\n\t var runner;\n\t\n\t return {\n\t $$willAnimate: true,\n\t end: function() {\n\t if (runner) {\n\t runner.end();\n\t } else {\n\t close();\n\t runner = new $$AnimateRunner();\n\t runner.complete(true);\n\t }\n\t return runner;\n\t },\n\t start: function() {\n\t if (runner) {\n\t return runner;\n\t }\n\t\n\t runner = new $$AnimateRunner();\n\t var closeActiveAnimations;\n\t var chain = [];\n\t\n\t if (before) {\n\t chain.push(function(fn) {\n\t closeActiveAnimations = before(fn);\n\t });\n\t }\n\t\n\t if (chain.length) {\n\t chain.push(function(fn) {\n\t applyOptions();\n\t fn(true);\n\t });\n\t } else {\n\t applyOptions();\n\t }\n\t\n\t if (after) {\n\t chain.push(function(fn) {\n\t closeActiveAnimations = after(fn);\n\t });\n\t }\n\t\n\t runner.setHost({\n\t end: function() {\n\t endAnimations();\n\t },\n\t cancel: function() {\n\t endAnimations(true);\n\t }\n\t });\n\t\n\t $$AnimateRunner.chain(chain, onComplete);\n\t return runner;\n\t\n\t function onComplete(success) {\n\t close(success);\n\t runner.complete(success);\n\t }\n\t\n\t function endAnimations(cancelled) {\n\t if (!animationClosed) {\n\t (closeActiveAnimations || noop)(cancelled);\n\t onComplete(cancelled);\n\t }\n\t }\n\t }\n\t };\n\t\n\t function executeAnimationFn(fn, element, event, options, onDone) {\n\t var args;\n\t switch (event) {\n\t case 'animate':\n\t args = [element, options.from, options.to, onDone];\n\t break;\n\t\n\t case 'setClass':\n\t args = [element, classesToAdd, classesToRemove, onDone];\n\t break;\n\t\n\t case 'addClass':\n\t args = [element, classesToAdd, onDone];\n\t break;\n\t\n\t case 'removeClass':\n\t args = [element, classesToRemove, onDone];\n\t break;\n\t\n\t default:\n\t args = [element, onDone];\n\t break;\n\t }\n\t\n\t args.push(options);\n\t\n\t var value = fn.apply(fn, args);\n\t if (value) {\n\t if (isFunction(value.start)) {\n\t value = value.start();\n\t }\n\t\n\t if (value instanceof $$AnimateRunner) {\n\t value.done(onDone);\n\t } else if (isFunction(value)) {\n\t // optional onEnd / onCancel callback\n\t return value;\n\t }\n\t }\n\t\n\t return noop;\n\t }\n\t\n\t function groupEventedAnimations(element, event, options, animations, fnName) {\n\t var operations = [];\n\t forEach(animations, function(ani) {\n\t var animation = ani[fnName];\n\t if (!animation) return;\n\t\n\t // note that all of these animations will run in parallel\n\t operations.push(function() {\n\t var runner;\n\t var endProgressCb;\n\t\n\t var resolved = false;\n\t var onAnimationComplete = function(rejected) {\n\t if (!resolved) {\n\t resolved = true;\n\t (endProgressCb || noop)(rejected);\n\t runner.complete(!rejected);\n\t }\n\t };\n\t\n\t runner = new $$AnimateRunner({\n\t end: function() {\n\t onAnimationComplete();\n\t },\n\t cancel: function() {\n\t onAnimationComplete(true);\n\t }\n\t });\n\t\n\t endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {\n\t var cancelled = result === false;\n\t onAnimationComplete(cancelled);\n\t });\n\t\n\t return runner;\n\t });\n\t });\n\t\n\t return operations;\n\t }\n\t\n\t function packageAnimations(element, event, options, animations, fnName) {\n\t var operations = groupEventedAnimations(element, event, options, animations, fnName);\n\t if (operations.length === 0) {\n\t var a,b;\n\t if (fnName === 'beforeSetClass') {\n\t a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');\n\t b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');\n\t } else if (fnName === 'setClass') {\n\t a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');\n\t b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');\n\t }\n\t\n\t if (a) {\n\t operations = operations.concat(a);\n\t }\n\t if (b) {\n\t operations = operations.concat(b);\n\t }\n\t }\n\t\n\t if (operations.length === 0) return;\n\t\n\t // TODO(matsko): add documentation\n\t return function startAnimation(callback) {\n\t var runners = [];\n\t if (operations.length) {\n\t forEach(operations, function(animateFn) {\n\t runners.push(animateFn());\n\t });\n\t }\n\t\n\t runners.length ? $$AnimateRunner.all(runners, callback) : callback();\n\t\n\t return function endFn(reject) {\n\t forEach(runners, function(runner) {\n\t reject ? runner.cancel() : runner.end();\n\t });\n\t };\n\t };\n\t }\n\t };\n\t\n\t function lookupAnimations(classes) {\n\t classes = isArray(classes) ? classes : classes.split(' ');\n\t var matches = [], flagMap = {};\n\t for (var i=0; i < classes.length; i++) {\n\t var klass = classes[i],\n\t animationFactory = $animateProvider.$$registeredAnimations[klass];\n\t if (animationFactory && !flagMap[klass]) {\n\t matches.push($injector.get(animationFactory));\n\t flagMap[klass] = true;\n\t }\n\t }\n\t return matches;\n\t }\n\t }];\n\t}];\n\t\n\tvar $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProvider) {\n\t $$animationProvider.drivers.push('$$animateJsDriver');\n\t this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {\n\t return function initDriverFn(animationDetails) {\n\t if (animationDetails.from && animationDetails.to) {\n\t var fromAnimation = prepareAnimation(animationDetails.from);\n\t var toAnimation = prepareAnimation(animationDetails.to);\n\t if (!fromAnimation && !toAnimation) return;\n\t\n\t return {\n\t start: function() {\n\t var animationRunners = [];\n\t\n\t if (fromAnimation) {\n\t animationRunners.push(fromAnimation.start());\n\t }\n\t\n\t if (toAnimation) {\n\t animationRunners.push(toAnimation.start());\n\t }\n\t\n\t $$AnimateRunner.all(animationRunners, done);\n\t\n\t var runner = new $$AnimateRunner({\n\t end: endFnFactory(),\n\t cancel: endFnFactory()\n\t });\n\t\n\t return runner;\n\t\n\t function endFnFactory() {\n\t return function() {\n\t forEach(animationRunners, function(runner) {\n\t // at this point we cannot cancel animations for groups just yet. 1.5+\n\t runner.end();\n\t });\n\t };\n\t }\n\t\n\t function done(status) {\n\t runner.complete(status);\n\t }\n\t }\n\t };\n\t } else {\n\t return prepareAnimation(animationDetails);\n\t }\n\t };\n\t\n\t function prepareAnimation(animationDetails) {\n\t // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations\n\t var element = animationDetails.element;\n\t var event = animationDetails.event;\n\t var options = animationDetails.options;\n\t var classes = animationDetails.classes;\n\t return $$animateJs(element, event, classes, options);\n\t }\n\t }];\n\t}];\n\t\n\tvar NG_ANIMATE_ATTR_NAME = 'data-ng-animate';\n\tvar NG_ANIMATE_PIN_DATA = '$ngAnimatePin';\n\tvar $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {\n\t var PRE_DIGEST_STATE = 1;\n\t var RUNNING_STATE = 2;\n\t var ONE_SPACE = ' ';\n\t\n\t var rules = this.rules = {\n\t skip: [],\n\t cancel: [],\n\t join: []\n\t };\n\t\n\t function makeTruthyCssClassMap(classString) {\n\t if (!classString) {\n\t return null;\n\t }\n\t\n\t var keys = classString.split(ONE_SPACE);\n\t var map = Object.create(null);\n\t\n\t forEach(keys, function(key) {\n\t map[key] = true;\n\t });\n\t return map;\n\t }\n\t\n\t function hasMatchingClasses(newClassString, currentClassString) {\n\t if (newClassString && currentClassString) {\n\t var currentClassMap = makeTruthyCssClassMap(currentClassString);\n\t return newClassString.split(ONE_SPACE).some(function(className) {\n\t return currentClassMap[className];\n\t });\n\t }\n\t }\n\t\n\t function isAllowed(ruleType, element, currentAnimation, previousAnimation) {\n\t return rules[ruleType].some(function(fn) {\n\t return fn(element, currentAnimation, previousAnimation);\n\t });\n\t }\n\t\n\t function hasAnimationClasses(animation, and) {\n\t var a = (animation.addClass || '').length > 0;\n\t var b = (animation.removeClass || '').length > 0;\n\t return and ? a && b : a || b;\n\t }\n\t\n\t rules.join.push(function(element, newAnimation, currentAnimation) {\n\t // if the new animation is class-based then we can just tack that on\n\t return !newAnimation.structural && hasAnimationClasses(newAnimation);\n\t });\n\t\n\t rules.skip.push(function(element, newAnimation, currentAnimation) {\n\t // there is no need to animate anything if no classes are being added and\n\t // there is no structural animation that will be triggered\n\t return !newAnimation.structural && !hasAnimationClasses(newAnimation);\n\t });\n\t\n\t rules.skip.push(function(element, newAnimation, currentAnimation) {\n\t // why should we trigger a new structural animation if the element will\n\t // be removed from the DOM anyway?\n\t return currentAnimation.event == 'leave' && newAnimation.structural;\n\t });\n\t\n\t rules.skip.push(function(element, newAnimation, currentAnimation) {\n\t // if there is an ongoing current animation then don't even bother running the class-based animation\n\t return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;\n\t });\n\t\n\t rules.cancel.push(function(element, newAnimation, currentAnimation) {\n\t // there can never be two structural animations running at the same time\n\t return currentAnimation.structural && newAnimation.structural;\n\t });\n\t\n\t rules.cancel.push(function(element, newAnimation, currentAnimation) {\n\t // if the previous animation is already running, but the new animation will\n\t // be triggered, but the new animation is structural\n\t return currentAnimation.state === RUNNING_STATE && newAnimation.structural;\n\t });\n\t\n\t rules.cancel.push(function(element, newAnimation, currentAnimation) {\n\t var nA = newAnimation.addClass;\n\t var nR = newAnimation.removeClass;\n\t var cA = currentAnimation.addClass;\n\t var cR = currentAnimation.removeClass;\n\t\n\t // early detection to save the global CPU shortage :)\n\t if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) {\n\t return false;\n\t }\n\t\n\t return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA);\n\t });\n\t\n\t this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',\n\t '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',\n\t function($$rAF, $rootScope, $rootElement, $document, $$HashMap,\n\t $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow) {\n\t\n\t var activeAnimationsLookup = new $$HashMap();\n\t var disabledElementsLookup = new $$HashMap();\n\t var animationsEnabled = null;\n\t\n\t function postDigestTaskFactory() {\n\t var postDigestCalled = false;\n\t return function(fn) {\n\t // we only issue a call to postDigest before\n\t // it has first passed. This prevents any callbacks\n\t // from not firing once the animation has completed\n\t // since it will be out of the digest cycle.\n\t if (postDigestCalled) {\n\t fn();\n\t } else {\n\t $rootScope.$$postDigest(function() {\n\t postDigestCalled = true;\n\t fn();\n\t });\n\t }\n\t };\n\t }\n\t\n\t // Wait until all directive and route-related templates are downloaded and\n\t // compiled. The $templateRequest.totalPendingRequests variable keeps track of\n\t // all of the remote templates being currently downloaded. If there are no\n\t // templates currently downloading then the watcher will still fire anyway.\n\t var deregisterWatch = $rootScope.$watch(\n\t function() { return $templateRequest.totalPendingRequests === 0; },\n\t function(isEmpty) {\n\t if (!isEmpty) return;\n\t deregisterWatch();\n\t\n\t // Now that all templates have been downloaded, $animate will wait until\n\t // the post digest queue is empty before enabling animations. By having two\n\t // calls to $postDigest calls we can ensure that the flag is enabled at the\n\t // very end of the post digest queue. Since all of the animations in $animate\n\t // use $postDigest, it's important that the code below executes at the end.\n\t // This basically means that the page is fully downloaded and compiled before\n\t // any animations are triggered.\n\t $rootScope.$$postDigest(function() {\n\t $rootScope.$$postDigest(function() {\n\t // we check for null directly in the event that the application already called\n\t // .enabled() with whatever arguments that it provided it with\n\t if (animationsEnabled === null) {\n\t animationsEnabled = true;\n\t }\n\t });\n\t });\n\t }\n\t );\n\t\n\t var callbackRegistry = {};\n\t\n\t // remember that the classNameFilter is set during the provider/config\n\t // stage therefore we can optimize here and setup a helper function\n\t var classNameFilter = $animateProvider.classNameFilter();\n\t var isAnimatableClassName = !classNameFilter\n\t ? function() { return true; }\n\t : function(className) {\n\t return classNameFilter.test(className);\n\t };\n\t\n\t var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\t\n\t function normalizeAnimationDetails(element, animation) {\n\t return mergeAnimationDetails(element, animation, {});\n\t }\n\t\n\t // IE9-11 has no method \"contains\" in SVG element and in Node.prototype. Bug #10259.\n\t var contains = Node.prototype.contains || function(arg) {\n\t // jshint bitwise: false\n\t return this === arg || !!(this.compareDocumentPosition(arg) & 16);\n\t // jshint bitwise: true\n\t };\n\t\n\t function findCallbacks(parent, element, event) {\n\t var targetNode = getDomNode(element);\n\t var targetParentNode = getDomNode(parent);\n\t\n\t var matches = [];\n\t var entries = callbackRegistry[event];\n\t if (entries) {\n\t forEach(entries, function(entry) {\n\t if (contains.call(entry.node, targetNode)) {\n\t matches.push(entry.callback);\n\t } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) {\n\t matches.push(entry.callback);\n\t }\n\t });\n\t }\n\t\n\t return matches;\n\t }\n\t\n\t return {\n\t on: function(event, container, callback) {\n\t var node = extractElementNode(container);\n\t callbackRegistry[event] = callbackRegistry[event] || [];\n\t callbackRegistry[event].push({\n\t node: node,\n\t callback: callback\n\t });\n\t },\n\t\n\t off: function(event, container, callback) {\n\t var entries = callbackRegistry[event];\n\t if (!entries) return;\n\t\n\t callbackRegistry[event] = arguments.length === 1\n\t ? null\n\t : filterFromRegistry(entries, container, callback);\n\t\n\t function filterFromRegistry(list, matchContainer, matchCallback) {\n\t var containerNode = extractElementNode(matchContainer);\n\t return list.filter(function(entry) {\n\t var isMatch = entry.node === containerNode &&\n\t (!matchCallback || entry.callback === matchCallback);\n\t return !isMatch;\n\t });\n\t }\n\t },\n\t\n\t pin: function(element, parentElement) {\n\t assertArg(isElement(element), 'element', 'not an element');\n\t assertArg(isElement(parentElement), 'parentElement', 'not an element');\n\t element.data(NG_ANIMATE_PIN_DATA, parentElement);\n\t },\n\t\n\t push: function(element, event, options, domOperation) {\n\t options = options || {};\n\t options.domOperation = domOperation;\n\t return queueAnimation(element, event, options);\n\t },\n\t\n\t // this method has four signatures:\n\t // () - global getter\n\t // (bool) - global setter\n\t // (element) - element getter\n\t // (element, bool) - element setter\n\t enabled: function(element, bool) {\n\t var argCount = arguments.length;\n\t\n\t if (argCount === 0) {\n\t // () - Global getter\n\t bool = !!animationsEnabled;\n\t } else {\n\t var hasElement = isElement(element);\n\t\n\t if (!hasElement) {\n\t // (bool) - Global setter\n\t bool = animationsEnabled = !!element;\n\t } else {\n\t var node = getDomNode(element);\n\t var recordExists = disabledElementsLookup.get(node);\n\t\n\t if (argCount === 1) {\n\t // (element) - Element getter\n\t bool = !recordExists;\n\t } else {\n\t // (element, bool) - Element setter\n\t disabledElementsLookup.put(node, !bool);\n\t }\n\t }\n\t }\n\t\n\t return bool;\n\t }\n\t };\n\t\n\t function queueAnimation(element, event, initialOptions) {\n\t // we always make a copy of the options since\n\t // there should never be any side effects on\n\t // the input data when running `$animateCss`.\n\t var options = copy(initialOptions);\n\t\n\t var node, parent;\n\t element = stripCommentsFromElement(element);\n\t if (element) {\n\t node = getDomNode(element);\n\t parent = element.parent();\n\t }\n\t\n\t options = prepareAnimationOptions(options);\n\t\n\t // we create a fake runner with a working promise.\n\t // These methods will become available after the digest has passed\n\t var runner = new $$AnimateRunner();\n\t\n\t // this is used to trigger callbacks in postDigest mode\n\t var runInNextPostDigestOrNow = postDigestTaskFactory();\n\t\n\t if (isArray(options.addClass)) {\n\t options.addClass = options.addClass.join(' ');\n\t }\n\t\n\t if (options.addClass && !isString(options.addClass)) {\n\t options.addClass = null;\n\t }\n\t\n\t if (isArray(options.removeClass)) {\n\t options.removeClass = options.removeClass.join(' ');\n\t }\n\t\n\t if (options.removeClass && !isString(options.removeClass)) {\n\t options.removeClass = null;\n\t }\n\t\n\t if (options.from && !isObject(options.from)) {\n\t options.from = null;\n\t }\n\t\n\t if (options.to && !isObject(options.to)) {\n\t options.to = null;\n\t }\n\t\n\t // there are situations where a directive issues an animation for\n\t // a jqLite wrapper that contains only comment nodes... If this\n\t // happens then there is no way we can perform an animation\n\t if (!node) {\n\t close();\n\t return runner;\n\t }\n\t\n\t var className = [node.className, options.addClass, options.removeClass].join(' ');\n\t if (!isAnimatableClassName(className)) {\n\t close();\n\t return runner;\n\t }\n\t\n\t var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\t\n\t // this is a hard disable of all animations for the application or on\n\t // the element itself, therefore there is no need to continue further\n\t // past this point if not enabled\n\t // Animations are also disabled if the document is currently hidden (page is not visible\n\t // to the user), because browsers slow down or do not flush calls to requestAnimationFrame\n\t var skipAnimations = !animationsEnabled || $document[0].hidden || disabledElementsLookup.get(node);\n\t var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};\n\t var hasExistingAnimation = !!existingAnimation.state;\n\t\n\t // there is no point in traversing the same collection of parent ancestors if a followup\n\t // animation will be run on the same element that already did all that checking work\n\t if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state != PRE_DIGEST_STATE)) {\n\t skipAnimations = !areAnimationsAllowed(element, parent, event);\n\t }\n\t\n\t if (skipAnimations) {\n\t close();\n\t return runner;\n\t }\n\t\n\t if (isStructural) {\n\t closeChildAnimations(element);\n\t }\n\t\n\t var newAnimation = {\n\t structural: isStructural,\n\t element: element,\n\t event: event,\n\t addClass: options.addClass,\n\t removeClass: options.removeClass,\n\t close: close,\n\t options: options,\n\t runner: runner\n\t };\n\t\n\t if (hasExistingAnimation) {\n\t var skipAnimationFlag = isAllowed('skip', element, newAnimation, existingAnimation);\n\t if (skipAnimationFlag) {\n\t if (existingAnimation.state === RUNNING_STATE) {\n\t close();\n\t return runner;\n\t } else {\n\t mergeAnimationDetails(element, existingAnimation, newAnimation);\n\t return existingAnimation.runner;\n\t }\n\t }\n\t var cancelAnimationFlag = isAllowed('cancel', element, newAnimation, existingAnimation);\n\t if (cancelAnimationFlag) {\n\t if (existingAnimation.state === RUNNING_STATE) {\n\t // this will end the animation right away and it is safe\n\t // to do so since the animation is already running and the\n\t // runner callback code will run in async\n\t existingAnimation.runner.end();\n\t } else if (existingAnimation.structural) {\n\t // this means that the animation is queued into a digest, but\n\t // hasn't started yet. Therefore it is safe to run the close\n\t // method which will call the runner methods in async.\n\t existingAnimation.close();\n\t } else {\n\t // this will merge the new animation options into existing animation options\n\t mergeAnimationDetails(element, existingAnimation, newAnimation);\n\t\n\t return existingAnimation.runner;\n\t }\n\t } else {\n\t // a joined animation means that this animation will take over the existing one\n\t // so an example would involve a leave animation taking over an enter. Then when\n\t // the postDigest kicks in the enter will be ignored.\n\t var joinAnimationFlag = isAllowed('join', element, newAnimation, existingAnimation);\n\t if (joinAnimationFlag) {\n\t if (existingAnimation.state === RUNNING_STATE) {\n\t normalizeAnimationDetails(element, newAnimation);\n\t } else {\n\t applyGeneratedPreparationClasses(element, isStructural ? event : null, options);\n\t\n\t event = newAnimation.event = existingAnimation.event;\n\t options = mergeAnimationDetails(element, existingAnimation, newAnimation);\n\t\n\t //we return the same runner since only the option values of this animation will\n\t //be fed into the `existingAnimation`.\n\t return existingAnimation.runner;\n\t }\n\t }\n\t }\n\t } else {\n\t // normalization in this case means that it removes redundant CSS classes that\n\t // already exist (addClass) or do not exist (removeClass) on the element\n\t normalizeAnimationDetails(element, newAnimation);\n\t }\n\t\n\t // when the options are merged and cleaned up we may end up not having to do\n\t // an animation at all, therefore we should check this before issuing a post\n\t // digest callback. Structural animations will always run no matter what.\n\t var isValidAnimation = newAnimation.structural;\n\t if (!isValidAnimation) {\n\t // animate (from/to) can be quickly checked first, otherwise we check if any classes are present\n\t isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0)\n\t || hasAnimationClasses(newAnimation);\n\t }\n\t\n\t if (!isValidAnimation) {\n\t close();\n\t clearElementAnimationState(element);\n\t return runner;\n\t }\n\t\n\t // the counter keeps track of cancelled animations\n\t var counter = (existingAnimation.counter || 0) + 1;\n\t newAnimation.counter = counter;\n\t\n\t markElementAnimationState(element, PRE_DIGEST_STATE, newAnimation);\n\t\n\t $rootScope.$$postDigest(function() {\n\t var animationDetails = activeAnimationsLookup.get(node);\n\t var animationCancelled = !animationDetails;\n\t animationDetails = animationDetails || {};\n\t\n\t // if addClass/removeClass is called before something like enter then the\n\t // registered parent element may not be present. The code below will ensure\n\t // that a final value for parent element is obtained\n\t var parentElement = element.parent() || [];\n\t\n\t // animate/structural/class-based animations all have requirements. Otherwise there\n\t // is no point in performing an animation. The parent node must also be set.\n\t var isValidAnimation = parentElement.length > 0\n\t && (animationDetails.event === 'animate'\n\t || animationDetails.structural\n\t || hasAnimationClasses(animationDetails));\n\t\n\t // this means that the previous animation was cancelled\n\t // even if the follow-up animation is the same event\n\t if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) {\n\t // if another animation did not take over then we need\n\t // to make sure that the domOperation and options are\n\t // handled accordingly\n\t if (animationCancelled) {\n\t applyAnimationClasses(element, options);\n\t applyAnimationStyles(element, options);\n\t }\n\t\n\t // if the event changed from something like enter to leave then we do\n\t // it, otherwise if it's the same then the end result will be the same too\n\t if (animationCancelled || (isStructural && animationDetails.event !== event)) {\n\t options.domOperation();\n\t runner.end();\n\t }\n\t\n\t // in the event that the element animation was not cancelled or a follow-up animation\n\t // isn't allowed to animate from here then we need to clear the state of the element\n\t // so that any future animations won't read the expired animation data.\n\t if (!isValidAnimation) {\n\t clearElementAnimationState(element);\n\t }\n\t\n\t return;\n\t }\n\t\n\t // this combined multiple class to addClass / removeClass into a setClass event\n\t // so long as a structural event did not take over the animation\n\t event = !animationDetails.structural && hasAnimationClasses(animationDetails, true)\n\t ? 'setClass'\n\t : animationDetails.event;\n\t\n\t markElementAnimationState(element, RUNNING_STATE);\n\t var realRunner = $$animation(element, event, animationDetails.options);\n\t\n\t realRunner.done(function(status) {\n\t close(!status);\n\t var animationDetails = activeAnimationsLookup.get(node);\n\t if (animationDetails && animationDetails.counter === counter) {\n\t clearElementAnimationState(getDomNode(element));\n\t }\n\t notifyProgress(runner, event, 'close', {});\n\t });\n\t\n\t // this will update the runner's flow-control events based on\n\t // the `realRunner` object.\n\t runner.setHost(realRunner);\n\t notifyProgress(runner, event, 'start', {});\n\t });\n\t\n\t return runner;\n\t\n\t function notifyProgress(runner, event, phase, data) {\n\t runInNextPostDigestOrNow(function() {\n\t var callbacks = findCallbacks(parent, element, event);\n\t if (callbacks.length) {\n\t // do not optimize this call here to RAF because\n\t // we don't know how heavy the callback code here will\n\t // be and if this code is buffered then this can\n\t // lead to a performance regression.\n\t $$rAF(function() {\n\t forEach(callbacks, function(callback) {\n\t callback(element, phase, data);\n\t });\n\t });\n\t }\n\t });\n\t runner.progress(event, phase, data);\n\t }\n\t\n\t function close(reject) { // jshint ignore:line\n\t clearGeneratedClasses(element, options);\n\t applyAnimationClasses(element, options);\n\t applyAnimationStyles(element, options);\n\t options.domOperation();\n\t runner.complete(!reject);\n\t }\n\t }\n\t\n\t function closeChildAnimations(element) {\n\t var node = getDomNode(element);\n\t var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');\n\t forEach(children, function(child) {\n\t var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME));\n\t var animationDetails = activeAnimationsLookup.get(child);\n\t if (animationDetails) {\n\t switch (state) {\n\t case RUNNING_STATE:\n\t animationDetails.runner.end();\n\t /* falls through */\n\t case PRE_DIGEST_STATE:\n\t activeAnimationsLookup.remove(child);\n\t break;\n\t }\n\t }\n\t });\n\t }\n\t\n\t function clearElementAnimationState(element) {\n\t var node = getDomNode(element);\n\t node.removeAttribute(NG_ANIMATE_ATTR_NAME);\n\t activeAnimationsLookup.remove(node);\n\t }\n\t\n\t function isMatchingElement(nodeOrElmA, nodeOrElmB) {\n\t return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB);\n\t }\n\t\n\t /**\n\t * This fn returns false if any of the following is true:\n\t * a) animations on any parent element are disabled, and animations on the element aren't explicitly allowed\n\t * b) a parent element has an ongoing structural animation, and animateChildren is false\n\t * c) the element is not a child of the body\n\t * d) the element is not a child of the $rootElement\n\t */\n\t function areAnimationsAllowed(element, parentElement, event) {\n\t var bodyElement = jqLite($document[0].body);\n\t var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML';\n\t var rootElementDetected = isMatchingElement(element, $rootElement);\n\t var parentAnimationDetected = false;\n\t var animateChildren;\n\t var elementDisabled = disabledElementsLookup.get(getDomNode(element));\n\t\n\t var parentHost = element.data(NG_ANIMATE_PIN_DATA);\n\t if (parentHost) {\n\t parentElement = parentHost;\n\t }\n\t\n\t while (parentElement && parentElement.length) {\n\t if (!rootElementDetected) {\n\t // angular doesn't want to attempt to animate elements outside of the application\n\t // therefore we need to ensure that the rootElement is an ancestor of the current element\n\t rootElementDetected = isMatchingElement(parentElement, $rootElement);\n\t }\n\t\n\t var parentNode = parentElement[0];\n\t if (parentNode.nodeType !== ELEMENT_NODE) {\n\t // no point in inspecting the #document element\n\t break;\n\t }\n\t\n\t var details = activeAnimationsLookup.get(parentNode) || {};\n\t // either an enter, leave or move animation will commence\n\t // therefore we can't allow any animations to take place\n\t // but if a parent animation is class-based then that's ok\n\t if (!parentAnimationDetected) {\n\t var parentElementDisabled = disabledElementsLookup.get(parentNode);\n\t\n\t if (parentElementDisabled === true && elementDisabled !== false) {\n\t // disable animations if the user hasn't explicitly enabled animations on the\n\t // current element\n\t elementDisabled = true;\n\t // element is disabled via parent element, no need to check anything else\n\t break;\n\t } else if (parentElementDisabled === false) {\n\t elementDisabled = false;\n\t }\n\t parentAnimationDetected = details.structural;\n\t }\n\t\n\t if (isUndefined(animateChildren) || animateChildren === true) {\n\t var value = parentElement.data(NG_ANIMATE_CHILDREN_DATA);\n\t if (isDefined(value)) {\n\t animateChildren = value;\n\t }\n\t }\n\t\n\t // there is no need to continue traversing at this point\n\t if (parentAnimationDetected && animateChildren === false) break;\n\t\n\t if (!bodyElementDetected) {\n\t // we also need to ensure that the element is or will be a part of the body element\n\t // otherwise it is pointless to even issue an animation to be rendered\n\t bodyElementDetected = isMatchingElement(parentElement, bodyElement);\n\t }\n\t\n\t if (bodyElementDetected && rootElementDetected) {\n\t // If both body and root have been found, any other checks are pointless,\n\t // as no animation data should live outside the application\n\t break;\n\t }\n\t\n\t if (!rootElementDetected) {\n\t // If no rootElement is detected, check if the parentElement is pinned to another element\n\t parentHost = parentElement.data(NG_ANIMATE_PIN_DATA);\n\t if (parentHost) {\n\t // The pin target element becomes the next parent element\n\t parentElement = parentHost;\n\t continue;\n\t }\n\t }\n\t\n\t parentElement = parentElement.parent();\n\t }\n\t\n\t var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true;\n\t return allowAnimation && rootElementDetected && bodyElementDetected;\n\t }\n\t\n\t function markElementAnimationState(element, state, details) {\n\t details = details || {};\n\t details.state = state;\n\t\n\t var node = getDomNode(element);\n\t node.setAttribute(NG_ANIMATE_ATTR_NAME, state);\n\t\n\t var oldValue = activeAnimationsLookup.get(node);\n\t var newValue = oldValue\n\t ? extend(oldValue, details)\n\t : details;\n\t activeAnimationsLookup.put(node, newValue);\n\t }\n\t }];\n\t}];\n\t\n\tvar $$AnimationProvider = ['$animateProvider', function($animateProvider) {\n\t var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';\n\t\n\t var drivers = this.drivers = [];\n\t\n\t var RUNNER_STORAGE_KEY = '$$animationRunner';\n\t\n\t function setRunner(element, runner) {\n\t element.data(RUNNER_STORAGE_KEY, runner);\n\t }\n\t\n\t function removeRunner(element) {\n\t element.removeData(RUNNER_STORAGE_KEY);\n\t }\n\t\n\t function getRunner(element) {\n\t return element.data(RUNNER_STORAGE_KEY);\n\t }\n\t\n\t this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler',\n\t function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap, $$rAFScheduler) {\n\t\n\t var animationQueue = [];\n\t var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\t\n\t function sortAnimations(animations) {\n\t var tree = { children: [] };\n\t var i, lookup = new $$HashMap();\n\t\n\t // this is done first beforehand so that the hashmap\n\t // is filled with a list of the elements that will be animated\n\t for (i = 0; i < animations.length; i++) {\n\t var animation = animations[i];\n\t lookup.put(animation.domNode, animations[i] = {\n\t domNode: animation.domNode,\n\t fn: animation.fn,\n\t children: []\n\t });\n\t }\n\t\n\t for (i = 0; i < animations.length; i++) {\n\t processNode(animations[i]);\n\t }\n\t\n\t return flatten(tree);\n\t\n\t function processNode(entry) {\n\t if (entry.processed) return entry;\n\t entry.processed = true;\n\t\n\t var elementNode = entry.domNode;\n\t var parentNode = elementNode.parentNode;\n\t lookup.put(elementNode, entry);\n\t\n\t var parentEntry;\n\t while (parentNode) {\n\t parentEntry = lookup.get(parentNode);\n\t if (parentEntry) {\n\t if (!parentEntry.processed) {\n\t parentEntry = processNode(parentEntry);\n\t }\n\t break;\n\t }\n\t parentNode = parentNode.parentNode;\n\t }\n\t\n\t (parentEntry || tree).children.push(entry);\n\t return entry;\n\t }\n\t\n\t function flatten(tree) {\n\t var result = [];\n\t var queue = [];\n\t var i;\n\t\n\t for (i = 0; i < tree.children.length; i++) {\n\t queue.push(tree.children[i]);\n\t }\n\t\n\t var remainingLevelEntries = queue.length;\n\t var nextLevelEntries = 0;\n\t var row = [];\n\t\n\t for (i = 0; i < queue.length; i++) {\n\t var entry = queue[i];\n\t if (remainingLevelEntries <= 0) {\n\t remainingLevelEntries = nextLevelEntries;\n\t nextLevelEntries = 0;\n\t result.push(row);\n\t row = [];\n\t }\n\t row.push(entry.fn);\n\t entry.children.forEach(function(childEntry) {\n\t nextLevelEntries++;\n\t queue.push(childEntry);\n\t });\n\t remainingLevelEntries--;\n\t }\n\t\n\t if (row.length) {\n\t result.push(row);\n\t }\n\t\n\t return result;\n\t }\n\t }\n\t\n\t // TODO(matsko): document the signature in a better way\n\t return function(element, event, options) {\n\t options = prepareAnimationOptions(options);\n\t var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\t\n\t // there is no animation at the current moment, however\n\t // these runner methods will get later updated with the\n\t // methods leading into the driver's end/cancel methods\n\t // for now they just stop the animation from starting\n\t var runner = new $$AnimateRunner({\n\t end: function() { close(); },\n\t cancel: function() { close(true); }\n\t });\n\t\n\t if (!drivers.length) {\n\t close();\n\t return runner;\n\t }\n\t\n\t setRunner(element, runner);\n\t\n\t var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass));\n\t var tempClasses = options.tempClasses;\n\t if (tempClasses) {\n\t classes += ' ' + tempClasses;\n\t options.tempClasses = null;\n\t }\n\t\n\t var prepareClassName;\n\t if (isStructural) {\n\t prepareClassName = 'ng-' + event + PREPARE_CLASS_SUFFIX;\n\t $$jqLite.addClass(element, prepareClassName);\n\t }\n\t\n\t animationQueue.push({\n\t // this data is used by the postDigest code and passed into\n\t // the driver step function\n\t element: element,\n\t classes: classes,\n\t event: event,\n\t structural: isStructural,\n\t options: options,\n\t beforeStart: beforeStart,\n\t close: close\n\t });\n\t\n\t element.on('$destroy', handleDestroyedElement);\n\t\n\t // we only want there to be one function called within the post digest\n\t // block. This way we can group animations for all the animations that\n\t // were apart of the same postDigest flush call.\n\t if (animationQueue.length > 1) return runner;\n\t\n\t $rootScope.$$postDigest(function() {\n\t var animations = [];\n\t forEach(animationQueue, function(entry) {\n\t // the element was destroyed early on which removed the runner\n\t // form its storage. This means we can't animate this element\n\t // at all and it already has been closed due to destruction.\n\t if (getRunner(entry.element)) {\n\t animations.push(entry);\n\t } else {\n\t entry.close();\n\t }\n\t });\n\t\n\t // now any future animations will be in another postDigest\n\t animationQueue.length = 0;\n\t\n\t var groupedAnimations = groupAnimations(animations);\n\t var toBeSortedAnimations = [];\n\t\n\t forEach(groupedAnimations, function(animationEntry) {\n\t toBeSortedAnimations.push({\n\t domNode: getDomNode(animationEntry.from ? animationEntry.from.element : animationEntry.element),\n\t fn: function triggerAnimationStart() {\n\t // it's important that we apply the `ng-animate` CSS class and the\n\t // temporary classes before we do any driver invoking since these\n\t // CSS classes may be required for proper CSS detection.\n\t animationEntry.beforeStart();\n\t\n\t var startAnimationFn, closeFn = animationEntry.close;\n\t\n\t // in the event that the element was removed before the digest runs or\n\t // during the RAF sequencing then we should not trigger the animation.\n\t var targetElement = animationEntry.anchors\n\t ? (animationEntry.from.element || animationEntry.to.element)\n\t : animationEntry.element;\n\t\n\t if (getRunner(targetElement)) {\n\t var operation = invokeFirstDriver(animationEntry);\n\t if (operation) {\n\t startAnimationFn = operation.start;\n\t }\n\t }\n\t\n\t if (!startAnimationFn) {\n\t closeFn();\n\t } else {\n\t var animationRunner = startAnimationFn();\n\t animationRunner.done(function(status) {\n\t closeFn(!status);\n\t });\n\t updateAnimationRunners(animationEntry, animationRunner);\n\t }\n\t }\n\t });\n\t });\n\t\n\t // we need to sort each of the animations in order of parent to child\n\t // relationships. This ensures that the child classes are applied at the\n\t // right time.\n\t $$rAFScheduler(sortAnimations(toBeSortedAnimations));\n\t });\n\t\n\t return runner;\n\t\n\t // TODO(matsko): change to reference nodes\n\t function getAnchorNodes(node) {\n\t var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']';\n\t var items = node.hasAttribute(NG_ANIMATE_REF_ATTR)\n\t ? [node]\n\t : node.querySelectorAll(SELECTOR);\n\t var anchors = [];\n\t forEach(items, function(node) {\n\t var attr = node.getAttribute(NG_ANIMATE_REF_ATTR);\n\t if (attr && attr.length) {\n\t anchors.push(node);\n\t }\n\t });\n\t return anchors;\n\t }\n\t\n\t function groupAnimations(animations) {\n\t var preparedAnimations = [];\n\t var refLookup = {};\n\t forEach(animations, function(animation, index) {\n\t var element = animation.element;\n\t var node = getDomNode(element);\n\t var event = animation.event;\n\t var enterOrMove = ['enter', 'move'].indexOf(event) >= 0;\n\t var anchorNodes = animation.structural ? getAnchorNodes(node) : [];\n\t\n\t if (anchorNodes.length) {\n\t var direction = enterOrMove ? 'to' : 'from';\n\t\n\t forEach(anchorNodes, function(anchor) {\n\t var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR);\n\t refLookup[key] = refLookup[key] || {};\n\t refLookup[key][direction] = {\n\t animationID: index,\n\t element: jqLite(anchor)\n\t };\n\t });\n\t } else {\n\t preparedAnimations.push(animation);\n\t }\n\t });\n\t\n\t var usedIndicesLookup = {};\n\t var anchorGroups = {};\n\t forEach(refLookup, function(operations, key) {\n\t var from = operations.from;\n\t var to = operations.to;\n\t\n\t if (!from || !to) {\n\t // only one of these is set therefore we can't have an\n\t // anchor animation since all three pieces are required\n\t var index = from ? from.animationID : to.animationID;\n\t var indexKey = index.toString();\n\t if (!usedIndicesLookup[indexKey]) {\n\t usedIndicesLookup[indexKey] = true;\n\t preparedAnimations.push(animations[index]);\n\t }\n\t return;\n\t }\n\t\n\t var fromAnimation = animations[from.animationID];\n\t var toAnimation = animations[to.animationID];\n\t var lookupKey = from.animationID.toString();\n\t if (!anchorGroups[lookupKey]) {\n\t var group = anchorGroups[lookupKey] = {\n\t structural: true,\n\t beforeStart: function() {\n\t fromAnimation.beforeStart();\n\t toAnimation.beforeStart();\n\t },\n\t close: function() {\n\t fromAnimation.close();\n\t toAnimation.close();\n\t },\n\t classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes),\n\t from: fromAnimation,\n\t to: toAnimation,\n\t anchors: [] // TODO(matsko): change to reference nodes\n\t };\n\t\n\t // the anchor animations require that the from and to elements both have at least\n\t // one shared CSS class which effectively marries the two elements together to use\n\t // the same animation driver and to properly sequence the anchor animation.\n\t if (group.classes.length) {\n\t preparedAnimations.push(group);\n\t } else {\n\t preparedAnimations.push(fromAnimation);\n\t preparedAnimations.push(toAnimation);\n\t }\n\t }\n\t\n\t anchorGroups[lookupKey].anchors.push({\n\t 'out': from.element, 'in': to.element\n\t });\n\t });\n\t\n\t return preparedAnimations;\n\t }\n\t\n\t function cssClassesIntersection(a,b) {\n\t a = a.split(' ');\n\t b = b.split(' ');\n\t var matches = [];\n\t\n\t for (var i = 0; i < a.length; i++) {\n\t var aa = a[i];\n\t if (aa.substring(0,3) === 'ng-') continue;\n\t\n\t for (var j = 0; j < b.length; j++) {\n\t if (aa === b[j]) {\n\t matches.push(aa);\n\t break;\n\t }\n\t }\n\t }\n\t\n\t return matches.join(' ');\n\t }\n\t\n\t function invokeFirstDriver(animationDetails) {\n\t // we loop in reverse order since the more general drivers (like CSS and JS)\n\t // may attempt more elements, but custom drivers are more particular\n\t for (var i = drivers.length - 1; i >= 0; i--) {\n\t var driverName = drivers[i];\n\t if (!$injector.has(driverName)) continue; // TODO(matsko): remove this check\n\t\n\t var factory = $injector.get(driverName);\n\t var driver = factory(animationDetails);\n\t if (driver) {\n\t return driver;\n\t }\n\t }\n\t }\n\t\n\t function beforeStart() {\n\t element.addClass(NG_ANIMATE_CLASSNAME);\n\t if (tempClasses) {\n\t $$jqLite.addClass(element, tempClasses);\n\t }\n\t if (prepareClassName) {\n\t $$jqLite.removeClass(element, prepareClassName);\n\t prepareClassName = null;\n\t }\n\t }\n\t\n\t function updateAnimationRunners(animation, newRunner) {\n\t if (animation.from && animation.to) {\n\t update(animation.from.element);\n\t update(animation.to.element);\n\t } else {\n\t update(animation.element);\n\t }\n\t\n\t function update(element) {\n\t getRunner(element).setHost(newRunner);\n\t }\n\t }\n\t\n\t function handleDestroyedElement() {\n\t var runner = getRunner(element);\n\t if (runner && (event !== 'leave' || !options.$$domOperationFired)) {\n\t runner.end();\n\t }\n\t }\n\t\n\t function close(rejected) { // jshint ignore:line\n\t element.off('$destroy', handleDestroyedElement);\n\t removeRunner(element);\n\t\n\t applyAnimationClasses(element, options);\n\t applyAnimationStyles(element, options);\n\t options.domOperation();\n\t\n\t if (tempClasses) {\n\t $$jqLite.removeClass(element, tempClasses);\n\t }\n\t\n\t element.removeClass(NG_ANIMATE_CLASSNAME);\n\t runner.complete(!rejected);\n\t }\n\t };\n\t }];\n\t}];\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngAnimateSwap\n\t * @restrict A\n\t * @scope\n\t *\n\t * @description\n\t *\n\t * ngAnimateSwap is a animation-oriented directive that allows for the container to\n\t * be removed and entered in whenever the associated expression changes. A\n\t * common usecase for this directive is a rotating banner component which\n\t * contains one image being present at a time. When the active image changes\n\t * then the old image will perform a `leave` animation and the new element\n\t * will be inserted via an `enter` animation.\n\t *\n\t * @example\n\t * \n\t * \n\t *
\n\t *
\n\t * {{ number }}\n\t *
\n\t *
\n\t *
\n\t * \n\t * angular.module('ngAnimateSwapExample', ['ngAnimate'])\n\t * .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) {\n\t * $scope.number = 0;\n\t * $interval(function() {\n\t * $scope.number++;\n\t * }, 1000);\n\t *\n\t * var colors = ['red','blue','green','yellow','orange'];\n\t * $scope.colorClass = function(number) {\n\t * return colors[number % colors.length];\n\t * };\n\t * }]);\n\t * \n\t * \n\t * .container {\n\t * height:250px;\n\t * width:250px;\n\t * position:relative;\n\t * overflow:hidden;\n\t * border:2px solid black;\n\t * }\n\t * .container .cell {\n\t * font-size:150px;\n\t * text-align:center;\n\t * line-height:250px;\n\t * position:absolute;\n\t * top:0;\n\t * left:0;\n\t * right:0;\n\t * border-bottom:2px solid black;\n\t * }\n\t * .swap-animation.ng-enter, .swap-animation.ng-leave {\n\t * transition:0.5s linear all;\n\t * }\n\t * .swap-animation.ng-enter {\n\t * top:-250px;\n\t * }\n\t * .swap-animation.ng-enter-active {\n\t * top:0px;\n\t * }\n\t * .swap-animation.ng-leave {\n\t * top:0px;\n\t * }\n\t * .swap-animation.ng-leave-active {\n\t * top:250px;\n\t * }\n\t * .red { background:red; }\n\t * .green { background:green; }\n\t * .blue { background:blue; }\n\t * .yellow { background:yellow; }\n\t * .orange { background:orange; }\n\t * \n\t *
\n\t */\n\tvar ngAnimateSwapDirective = ['$animate', '$rootScope', function($animate, $rootScope) {\n\t return {\n\t restrict: 'A',\n\t transclude: 'element',\n\t terminal: true,\n\t priority: 600, // we use 600 here to ensure that the directive is caught before others\n\t link: function(scope, $element, attrs, ctrl, $transclude) {\n\t var previousElement, previousScope;\n\t scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) {\n\t if (previousElement) {\n\t $animate.leave(previousElement);\n\t }\n\t if (previousScope) {\n\t previousScope.$destroy();\n\t previousScope = null;\n\t }\n\t if (value || value === 0) {\n\t previousScope = scope.$new();\n\t $transclude(previousScope, function(element) {\n\t previousElement = element;\n\t $animate.enter(element, null, $element);\n\t });\n\t }\n\t });\n\t }\n\t };\n\t}];\n\t\n\t/* global angularAnimateModule: true,\n\t\n\t ngAnimateSwapDirective,\n\t $$AnimateAsyncRunFactory,\n\t $$rAFSchedulerFactory,\n\t $$AnimateChildrenDirective,\n\t $$AnimateQueueProvider,\n\t $$AnimationProvider,\n\t $AnimateCssProvider,\n\t $$AnimateCssDriverProvider,\n\t $$AnimateJsProvider,\n\t $$AnimateJsDriverProvider,\n\t*/\n\t\n\t/**\n\t * @ngdoc module\n\t * @name ngAnimate\n\t * @description\n\t *\n\t * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via\n\t * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an Angular app.\n\t *\n\t *
\n\t *\n\t * # Usage\n\t * 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\t * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For\n\t * 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\t * the HTML element that the animation will be triggered on.\n\t *\n\t * ## Directive Support\n\t * The following directives are \"animation aware\":\n\t *\n\t * | Directive | Supported Animations |\n\t * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|\n\t * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move |\n\t * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave |\n\t * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave |\n\t * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave |\n\t * | {@link ng.directive:ngIf#animations ngIf} | enter and leave |\n\t * | {@link ng.directive:ngClass#animations ngClass} | add and remove (the CSS class(es) present) |\n\t * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide} | add and remove (the ng-hide class value) |\n\t * | {@link ng.directive:form#animation-hooks form} & {@link ng.directive:ngModel#animation-hooks ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) |\n\t * | {@link module:ngMessages#animations ngMessages} | add and remove (ng-active & ng-inactive) |\n\t * | {@link module:ngMessages#animations ngMessage} | enter and leave |\n\t *\n\t * (More information can be found by visiting each the documentation associated with each directive.)\n\t *\n\t * ## CSS-based Animations\n\t *\n\t * 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\t * and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation.\n\t *\n\t * The example below shows how an `enter` animation can be made possible on an element using `ng-if`:\n\t *\n\t * ```html\n\t *
\n\t * Fade me in out\n\t *
\n\t * \n\t * \n\t * ```\n\t *\n\t * Notice the CSS class **fade**? We can now create the CSS transition code that references this class:\n\t *\n\t * ```css\n\t * /* The starting CSS styles for the enter animation */\n\t * .fade.ng-enter {\n\t * transition:0.5s linear all;\n\t * opacity:0;\n\t * }\n\t *\n\t * /* The finishing CSS styles for the enter animation */\n\t * .fade.ng-enter.ng-enter-active {\n\t * opacity:1;\n\t * }\n\t * ```\n\t *\n\t * 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\t * 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\t * 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\t *\n\t * 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\t *\n\t * ```css\n\t * /* now the element will fade out before it is removed from the DOM */\n\t * .fade.ng-leave {\n\t * transition:0.5s linear all;\n\t * opacity:1;\n\t * }\n\t * .fade.ng-leave.ng-leave-active {\n\t * opacity:0;\n\t * }\n\t * ```\n\t *\n\t * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class:\n\t *\n\t * ```css\n\t * /* there is no need to define anything inside of the destination\n\t * CSS class since the keyframe will take charge of the animation */\n\t * .fade.ng-leave {\n\t * animation: my_fade_animation 0.5s linear;\n\t * -webkit-animation: my_fade_animation 0.5s linear;\n\t * }\n\t *\n\t * @keyframes my_fade_animation {\n\t * from { opacity:1; }\n\t * to { opacity:0; }\n\t * }\n\t *\n\t * @-webkit-keyframes my_fade_animation {\n\t * from { opacity:1; }\n\t * to { opacity:0; }\n\t * }\n\t * ```\n\t *\n\t * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element.\n\t *\n\t * ### CSS Class-based Animations\n\t *\n\t * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different\n\t * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added\n\t * and removed.\n\t *\n\t * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class:\n\t *\n\t * ```html\n\t *
\n\t * Show and hide me\n\t *
\n\t * \n\t *\n\t * \n\t * ```\n\t *\n\t * 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\t * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest.\n\t *\n\t * 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\t * with CSS styles.\n\t *\n\t * ```html\n\t *
\n\t * Highlight this box\n\t *
\n\t * \n\t *\n\t * \n\t * ```\n\t *\n\t * We can also make use of CSS keyframes by placing them within the CSS classes.\n\t *\n\t *\n\t * ### CSS Staggering Animations\n\t * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n\t * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be\n\t * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n\t * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n\t * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n\t *\n\t * ```css\n\t * .my-animation.ng-enter {\n\t * /* standard transition code */\n\t * transition: 1s linear all;\n\t * opacity:0;\n\t * }\n\t * .my-animation.ng-enter-stagger {\n\t * /* this will have a 100ms delay between each successive leave animation */\n\t * transition-delay: 0.1s;\n\t *\n\t * /* As of 1.4.4, this must always be set: it signals ngAnimate\n\t * to not accidentally inherit a delay property from another CSS class */\n\t * transition-duration: 0s;\n\t * }\n\t * .my-animation.ng-enter.ng-enter-active {\n\t * /* standard transition styles */\n\t * opacity:1;\n\t * }\n\t * ```\n\t *\n\t * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\n\t * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n\t * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n\t * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired.\n\t *\n\t * The following code will issue the **ng-leave-stagger** event on the element provided:\n\t *\n\t * ```js\n\t * var kids = parent.children();\n\t *\n\t * $animate.leave(kids[0]); //stagger index=0\n\t * $animate.leave(kids[1]); //stagger index=1\n\t * $animate.leave(kids[2]); //stagger index=2\n\t * $animate.leave(kids[3]); //stagger index=3\n\t * $animate.leave(kids[4]); //stagger index=4\n\t *\n\t * window.requestAnimationFrame(function() {\n\t * //stagger has reset itself\n\t * $animate.leave(kids[5]); //stagger index=0\n\t * $animate.leave(kids[6]); //stagger index=1\n\t *\n\t * $scope.$digest();\n\t * });\n\t * ```\n\t *\n\t * Stagger animations are currently only supported within CSS-defined animations.\n\t *\n\t * ### The `ng-animate` CSS class\n\t *\n\t * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation.\n\t * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations).\n\t *\n\t * Therefore, animations can be applied to an element using this temporary class directly via CSS.\n\t *\n\t * ```css\n\t * .zipper.ng-animate {\n\t * transition:0.5s linear all;\n\t * }\n\t * .zipper.ng-enter {\n\t * opacity:0;\n\t * }\n\t * .zipper.ng-enter.ng-enter-active {\n\t * opacity:1;\n\t * }\n\t * .zipper.ng-leave {\n\t * opacity:1;\n\t * }\n\t * .zipper.ng-leave.ng-leave-active {\n\t * opacity:0;\n\t * }\n\t * ```\n\t *\n\t * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove\n\t * the CSS class once an animation has completed.)\n\t *\n\t *\n\t * ### The `ng-[event]-prepare` class\n\t *\n\t * This is a special class that can be used to prevent unwanted flickering / flash of content before\n\t * the actual animation starts. The class is added as soon as an animation is initialized, but removed\n\t * before the actual animation starts (after waiting for a $digest).\n\t * It is also only added for *structural* animations (`enter`, `move`, and `leave`).\n\t *\n\t * In practice, flickering can appear when nesting elements with structural animations such as `ngIf`\n\t * into elements that have class-based animations such as `ngClass`.\n\t *\n\t * ```html\n\t *
\n\t *
\n\t *
\n\t *
\n\t *
\n\t * ```\n\t *\n\t * It is possible that during the `enter` animation, the `.message` div will be briefly visible before it starts animating.\n\t * In that case, you can add styles to the CSS that make sure the element stays hidden before the animation starts:\n\t *\n\t * ```css\n\t * .message.ng-enter-prepare {\n\t * opacity: 0;\n\t * }\n\t *\n\t * ```\n\t *\n\t * ## JavaScript-based Animations\n\t *\n\t * 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\t * 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\t * `module.animation()` module function we can register the animation.\n\t *\n\t * Let's see an example of a enter/leave animation using `ngRepeat`:\n\t *\n\t * ```html\n\t *
\n\t * {{ item }}\n\t *
\n\t * ```\n\t *\n\t * 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\t *\n\t * ```js\n\t * myModule.animation('.slide', [function() {\n\t * return {\n\t * // make note that other events (like addClass/removeClass)\n\t * // have different function input parameters\n\t * enter: function(element, doneFn) {\n\t * jQuery(element).fadeIn(1000, doneFn);\n\t *\n\t * // remember to call doneFn so that angular\n\t * // knows that the animation has concluded\n\t * },\n\t *\n\t * move: function(element, doneFn) {\n\t * jQuery(element).fadeIn(1000, doneFn);\n\t * },\n\t *\n\t * leave: function(element, doneFn) {\n\t * jQuery(element).fadeOut(1000, doneFn);\n\t * }\n\t * }\n\t * }]);\n\t * ```\n\t *\n\t * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as\n\t * greensock.js and velocity.js.\n\t *\n\t * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define\n\t * our animations inside of the same registered animation, however, the function input arguments are a bit different:\n\t *\n\t * ```html\n\t *
\n\t * this box is moody\n\t *
\n\t * \n\t * \n\t * \n\t * ```\n\t *\n\t * ```js\n\t * myModule.animation('.colorful', [function() {\n\t * return {\n\t * addClass: function(element, className, doneFn) {\n\t * // do some cool animation and call the doneFn\n\t * },\n\t * removeClass: function(element, className, doneFn) {\n\t * // do some cool animation and call the doneFn\n\t * },\n\t * setClass: function(element, addedClass, removedClass, doneFn) {\n\t * // do some cool animation and call the doneFn\n\t * }\n\t * }\n\t * }]);\n\t * ```\n\t *\n\t * ## CSS + JS Animations Together\n\t *\n\t * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of Angular,\n\t * 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\t * charge of the animation**:\n\t *\n\t * ```html\n\t *
\n\t * Slide in and out\n\t *
\n\t * ```\n\t *\n\t * ```js\n\t * myModule.animation('.slide', [function() {\n\t * return {\n\t * enter: function(element, doneFn) {\n\t * jQuery(element).slideIn(1000, doneFn);\n\t * }\n\t * }\n\t * }]);\n\t * ```\n\t *\n\t * ```css\n\t * .slide.ng-enter {\n\t * transition:0.5s linear all;\n\t * transform:translateY(-100px);\n\t * }\n\t * .slide.ng-enter.ng-enter-active {\n\t * transform:translateY(0);\n\t * }\n\t * ```\n\t *\n\t * 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\t * lack of CSS animations by using the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from\n\t * our own JS-based animation code:\n\t *\n\t * ```js\n\t * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n\t * return {\n\t * enter: function(element) {\n\t* // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`.\n\t * return $animateCss(element, {\n\t * event: 'enter',\n\t * structural: true\n\t * });\n\t * }\n\t * }\n\t * }]);\n\t * ```\n\t *\n\t * 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\t *\n\t * 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\t * 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\t * data into `$animateCss` directly:\n\t *\n\t * ```js\n\t * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n\t * return {\n\t * enter: function(element) {\n\t * return $animateCss(element, {\n\t * event: 'enter',\n\t * structural: true,\n\t * addClass: 'maroon-setting',\n\t * from: { height:0 },\n\t * to: { height: 200 }\n\t * });\n\t * }\n\t * }\n\t * }]);\n\t * ```\n\t *\n\t * Now we can fill in the rest via our transition CSS code:\n\t *\n\t * ```css\n\t * /* the transition tells ngAnimate to make the animation happen */\n\t * .slide.ng-enter { transition:0.5s linear all; }\n\t *\n\t * /* this extra CSS class will be absorbed into the transition\n\t * since the $animateCss code is adding the class */\n\t * .maroon-setting { background:red; }\n\t * ```\n\t *\n\t * 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\t *\n\t * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}.\n\t *\n\t * ## Animation Anchoring (via `ng-animate-ref`)\n\t *\n\t * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between\n\t * structural areas of an application (like views) by pairing up elements using an attribute\n\t * called `ng-animate-ref`.\n\t *\n\t * Let's say for example we have two views that are managed by `ng-view` and we want to show\n\t * that there is a relationship between two components situated in within these views. By using the\n\t * `ng-animate-ref` attribute we can identify that the two components are paired together and we\n\t * can then attach an animation, which is triggered when the view changes.\n\t *\n\t * Say for example we have the following template code:\n\t *\n\t * ```html\n\t * \n\t *
\n\t *
\n\t *\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * \n\t * \n\t * ```\n\t *\n\t * Now, when the view changes (once the link is clicked), ngAnimate will examine the\n\t * HTML contents to see if there is a match reference between any components in the view\n\t * that is leaving and the view that is entering. It will scan both the view which is being\n\t * removed (leave) and inserted (enter) to see if there are any paired DOM elements that\n\t * contain a matching ref value.\n\t *\n\t * The two images match since they share the same ref value. ngAnimate will now create a\n\t * transport element (which is a clone of the first image element) and it will then attempt\n\t * to animate to the position of the second image element in the next view. For the animation to\n\t * work a special CSS class called `ng-anchor` will be added to the transported element.\n\t *\n\t * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then\n\t * ngAnimate will handle the entire transition for us as well as the addition and removal of\n\t * any changes of CSS classes between the elements:\n\t *\n\t * ```css\n\t * .banner.ng-anchor {\n\t * /* this animation will last for 1 second since there are\n\t * two phases to the animation (an `in` and an `out` phase) */\n\t * transition:0.5s linear all;\n\t * }\n\t * ```\n\t *\n\t * We also **must** include animations for the views that are being entered and removed\n\t * (otherwise anchoring wouldn't be possible since the new view would be inserted right away).\n\t *\n\t * ```css\n\t * .view-animation.ng-enter, .view-animation.ng-leave {\n\t * transition:0.5s linear all;\n\t * position:fixed;\n\t * left:0;\n\t * top:0;\n\t * width:100%;\n\t * }\n\t * .view-animation.ng-enter {\n\t * transform:translateX(100%);\n\t * }\n\t * .view-animation.ng-leave,\n\t * .view-animation.ng-enter.ng-enter-active {\n\t * transform:translateX(0%);\n\t * }\n\t * .view-animation.ng-leave.ng-leave-active {\n\t * transform:translateX(-100%);\n\t * }\n\t * ```\n\t *\n\t * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur:\n\t * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away\n\t * from its origin. Once that animation is over then the `in` stage occurs which animates the\n\t * element to its destination. The reason why there are two animations is to give enough time\n\t * for the enter animation on the new element to be ready.\n\t *\n\t * The example above sets up a transition for both the in and out phases, but we can also target the out or\n\t * in phases directly via `ng-anchor-out` and `ng-anchor-in`.\n\t *\n\t * ```css\n\t * .banner.ng-anchor-out {\n\t * transition: 0.5s linear all;\n\t *\n\t * /* the scale will be applied during the out animation,\n\t * but will be animated away when the in animation runs */\n\t * transform: scale(1.2);\n\t * }\n\t *\n\t * .banner.ng-anchor-in {\n\t * transition: 1s linear all;\n\t * }\n\t * ```\n\t *\n\t *\n\t *\n\t *\n\t * ### Anchoring Demo\n\t *\n\t \n\t \n\t Home\n\t
\n\t
\n\t
\n\t
\n\t
\n\t \n\t angular.module('anchoringExample', ['ngAnimate', 'ngRoute'])\n\t .config(['$routeProvider', function($routeProvider) {\n\t $routeProvider.when('/', {\n\t templateUrl: 'home.html',\n\t controller: 'HomeController as home'\n\t });\n\t $routeProvider.when('/profile/:id', {\n\t templateUrl: 'profile.html',\n\t controller: 'ProfileController as profile'\n\t });\n\t }])\n\t .run(['$rootScope', function($rootScope) {\n\t $rootScope.records = [\n\t { id:1, title: \"Miss Beulah Roob\" },\n\t { id:2, title: \"Trent Morissette\" },\n\t { id:3, title: \"Miss Ava Pouros\" },\n\t { id:4, title: \"Rod Pouros\" },\n\t { id:5, title: \"Abdul Rice\" },\n\t { id:6, title: \"Laurie Rutherford Sr.\" },\n\t { id:7, title: \"Nakia McLaughlin\" },\n\t { id:8, title: \"Jordon Blanda DVM\" },\n\t { id:9, title: \"Rhoda Hand\" },\n\t { id:10, title: \"Alexandrea Sauer\" }\n\t ];\n\t }])\n\t .controller('HomeController', [function() {\n\t //empty\n\t }])\n\t .controller('ProfileController', ['$rootScope', '$routeParams', function($rootScope, $routeParams) {\n\t var index = parseInt($routeParams.id, 10);\n\t var record = $rootScope.records[index - 1];\n\t\n\t this.title = record.title;\n\t this.id = record.id;\n\t }]);\n\t \n\t \n\t

Welcome to the home page

\n\t

Please click on an element

\n\t \n\t {{ record.title }}\n\t \n\t
\n\t \n\t
\n\t {{ profile.title }}\n\t
\n\t
\n\t \n\t .record {\n\t display:block;\n\t font-size:20px;\n\t }\n\t .profile {\n\t background:black;\n\t color:white;\n\t font-size:100px;\n\t }\n\t .view-container {\n\t position:relative;\n\t }\n\t .view-container > .view.ng-animate {\n\t position:absolute;\n\t top:0;\n\t left:0;\n\t width:100%;\n\t min-height:500px;\n\t }\n\t .view.ng-enter, .view.ng-leave,\n\t .record.ng-anchor {\n\t transition:0.5s linear all;\n\t }\n\t .view.ng-enter {\n\t transform:translateX(100%);\n\t }\n\t .view.ng-enter.ng-enter-active, .view.ng-leave {\n\t transform:translateX(0%);\n\t }\n\t .view.ng-leave.ng-leave-active {\n\t transform:translateX(-100%);\n\t }\n\t .record.ng-anchor-out {\n\t background:red;\n\t }\n\t \n\t
\n\t *\n\t * ### How is the element transported?\n\t *\n\t * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting\n\t * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element\n\t * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The\n\t * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match\n\t * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied\n\t * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class\n\t * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element\n\t * will become visible since the shim class will be removed.\n\t *\n\t * ### How is the morphing handled?\n\t *\n\t * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out\n\t * what CSS classes differ between the starting element and the destination element. These different CSS classes\n\t * will be added/removed on the anchor element and a transition will be applied (the transition that is provided\n\t * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will\n\t * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that\n\t * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since\n\t * the cloned element is placed inside of root element which is likely close to the body element).\n\t *\n\t * Note that if the root element is on the `` element then the cloned node will be placed inside of body.\n\t *\n\t *\n\t * ## Using $animate in your directive code\n\t *\n\t * So far we've explored how to feed in animations into an Angular application, but how do we trigger animations within our own directives in our application?\n\t * 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\t * imagine we have a greeting box that shows and hides itself when the data changes\n\t *\n\t * ```html\n\t * Hi there\n\t * ```\n\t *\n\t * ```js\n\t * ngModule.directive('greetingBox', ['$animate', function($animate) {\n\t * return function(scope, element, attrs) {\n\t * attrs.$observe('active', function(value) {\n\t * value ? $animate.addClass(element, 'on') : $animate.removeClass(element, 'on');\n\t * });\n\t * });\n\t * }]);\n\t * ```\n\t *\n\t * 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\t * in our HTML code then we can trigger a CSS or JS animation to happen.\n\t *\n\t * ```css\n\t * /* normally we would create a CSS class to reference on the element */\n\t * greeting-box.on { transition:0.5s linear all; background:green; color:white; }\n\t * ```\n\t *\n\t * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's\n\t * possible be sure to visit the {@link ng.$animate $animate service API page}.\n\t *\n\t *\n\t * ### Preventing Collisions With Third Party Libraries\n\t *\n\t * Some third-party frameworks place animation duration defaults across many element or className\n\t * selectors in order to make their code small and reuseable. This can lead to issues with ngAnimate, which\n\t * is expecting actual animations on these elements and has to wait for their completion.\n\t *\n\t * You can prevent this unwanted behavior by using a prefix on all your animation classes:\n\t *\n\t * ```css\n\t * /* prefixed with animate- */\n\t * .animate-fade-add.animate-fade-add-active {\n\t * transition:1s linear all;\n\t * opacity:0;\n\t * }\n\t * ```\n\t *\n\t * You then configure `$animate` to enforce this prefix:\n\t *\n\t * ```js\n\t * $animateProvider.classNameFilter(/animate-/);\n\t * ```\n\t *\n\t * This also may provide your application with a speed boost since only specific elements containing CSS class prefix\n\t * will be evaluated for animation when any DOM changes occur in the application.\n\t *\n\t * ## Callbacks and Promises\n\t *\n\t * 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\t * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has\n\t * ended by chaining onto the returned promise that animation method returns.\n\t *\n\t * ```js\n\t * // somewhere within the depths of the directive\n\t * $animate.enter(element, parent).then(function() {\n\t * //the animation has completed\n\t * });\n\t * ```\n\t *\n\t * (Note that earlier versions of Angular prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case\n\t * anymore.)\n\t *\n\t * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering\n\t * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view\n\t * routing controller to hook into that:\n\t *\n\t * ```js\n\t * ngModule.controller('HomePageController', ['$animate', function($animate) {\n\t * $animate.on('enter', ngViewElement, function(element) {\n\t * // the animation for this route has completed\n\t * }]);\n\t * }])\n\t * ```\n\t *\n\t * (Note that you will need to trigger a digest within the callback to get angular to notice any scope-related changes.)\n\t */\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $animate\n\t * @kind object\n\t *\n\t * @description\n\t * The ngAnimate `$animate` service documentation is the same for the core `$animate` service.\n\t *\n\t * Click here {@link ng.$animate to learn more about animations with `$animate`}.\n\t */\n\tangular.module('ngAnimate', [])\n\t .directive('ngAnimateSwap', ngAnimateSwapDirective)\n\t\n\t .directive('ngAnimateChildren', $$AnimateChildrenDirective)\n\t .factory('$$rAFScheduler', $$rAFSchedulerFactory)\n\t\n\t .provider('$$animateQueue', $$AnimateQueueProvider)\n\t .provider('$$animation', $$AnimationProvider)\n\t\n\t .provider('$animateCss', $AnimateCssProvider)\n\t .provider('$$animateCssDriver', $$AnimateCssDriverProvider)\n\t\n\t .provider('$$animateJs', $$AnimateJsProvider)\n\t .provider('$$animateJsDriver', $$AnimateJsDriverProvider);\n\t\n\t\n\t})(window, window.angular);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(7);\n\tmodule.exports = 'ngAnimate';\n\n\n/***/ }),\n\n/***/ 8:\n/***/ (function(module, exports) {\n\n\t/**\n\t * @license AngularJS v1.5.0\n\t * (c) 2010-2016 Google, Inc. http://angularjs.org\n\t * License: MIT\n\t */\n\t(function(window, angular, undefined) {'use strict';\n\t\n\t/**\n\t * @ngdoc module\n\t * @name ngAria\n\t * @description\n\t *\n\t * The `ngAria` module provides support for common\n\t * [ARIA](http://www.w3.org/TR/wai-aria/)\n\t * attributes that convey state or semantic information about the application for users\n\t * of assistive technologies, such as screen readers.\n\t *\n\t *
\n\t *\n\t * ## Usage\n\t *\n\t * For ngAria to do its magic, simply include the module `ngAria` as a dependency. The following\n\t * directives are supported:\n\t * `ngModel`, `ngChecked`, `ngRequired`, `ngValue`, `ngDisabled`, `ngShow`, `ngHide`, `ngClick`,\n\t * `ngDblClick`, and `ngMessages`.\n\t *\n\t * Below is a more detailed breakdown of the attributes handled by ngAria:\n\t *\n\t * | Directive | Supported Attributes |\n\t * |---------------------------------------------|----------------------------------------------------------------------------------------|\n\t * | {@link ng.directive:ngModel ngModel} | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required, input roles |\n\t * | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled |\n\t * | {@link ng.directive:ngRequired ngRequired} | aria-required |\n\t * | {@link ng.directive:ngChecked ngChecked} | aria-checked |\n\t * | {@link ng.directive:ngValue ngValue} | aria-checked |\n\t * | {@link ng.directive:ngShow ngShow} | aria-hidden |\n\t * | {@link ng.directive:ngHide ngHide} | aria-hidden |\n\t * | {@link ng.directive:ngDblclick ngDblclick} | tabindex |\n\t * | {@link module:ngMessages ngMessages} | aria-live |\n\t * | {@link ng.directive:ngClick ngClick} | tabindex, keypress event, button role |\n\t *\n\t * Find out more information about each directive by reading the\n\t * {@link guide/accessibility ngAria Developer Guide}.\n\t *\n\t * ##Example\n\t * Using ngDisabled with ngAria:\n\t * ```html\n\t * \n\t * ```\n\t * Becomes:\n\t * ```html\n\t * \n\t * ```\n\t *\n\t * ##Disabling Attributes\n\t * It's possible to disable individual attributes added by ngAria with the\n\t * {@link ngAria.$ariaProvider#config config} method. For more details, see the\n\t * {@link guide/accessibility Developer Guide}.\n\t */\n\t /* global -ngAriaModule */\n\tvar ngAriaModule = angular.module('ngAria', ['ng']).\n\t provider('$aria', $AriaProvider);\n\t\n\t/**\n\t* Internal Utilities\n\t*/\n\tvar nodeBlackList = ['BUTTON', 'A', 'INPUT', 'TEXTAREA', 'SELECT', 'DETAILS', 'SUMMARY'];\n\t\n\tvar isNodeOneOf = function(elem, nodeTypeArray) {\n\t if (nodeTypeArray.indexOf(elem[0].nodeName) !== -1) {\n\t return true;\n\t }\n\t};\n\t/**\n\t * @ngdoc provider\n\t * @name $ariaProvider\n\t *\n\t * @description\n\t *\n\t * Used for configuring the ARIA attributes injected and managed by ngAria.\n\t *\n\t * ```js\n\t * angular.module('myApp', ['ngAria'], function config($ariaProvider) {\n\t * $ariaProvider.config({\n\t * ariaValue: true,\n\t * tabindex: false\n\t * });\n\t * });\n\t *```\n\t *\n\t * ## Dependencies\n\t * Requires the {@link ngAria} module to be installed.\n\t *\n\t */\n\tfunction $AriaProvider() {\n\t var config = {\n\t ariaHidden: true,\n\t ariaChecked: true,\n\t ariaDisabled: true,\n\t ariaRequired: true,\n\t ariaInvalid: true,\n\t ariaValue: true,\n\t tabindex: true,\n\t bindKeypress: true,\n\t bindRoleForClick: true\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $ariaProvider#config\n\t *\n\t * @param {object} config object to enable/disable specific ARIA attributes\n\t *\n\t * - **ariaHidden** – `{boolean}` – Enables/disables aria-hidden tags\n\t * - **ariaChecked** – `{boolean}` – Enables/disables aria-checked tags\n\t * - **ariaDisabled** – `{boolean}` – Enables/disables aria-disabled tags\n\t * - **ariaRequired** – `{boolean}` – Enables/disables aria-required tags\n\t * - **ariaInvalid** – `{boolean}` – Enables/disables aria-invalid tags\n\t * - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags\n\t * - **tabindex** – `{boolean}` – Enables/disables tabindex tags\n\t * - **bindKeypress** – `{boolean}` – Enables/disables keypress event binding on `div` and\n\t * `li` elements with ng-click\n\t * - **bindRoleForClick** – `{boolean}` – Adds role=button to non-interactive elements like `div`\n\t * using ng-click, making them more accessible to users of assistive technologies\n\t *\n\t * @description\n\t * Enables/disables various ARIA attributes\n\t */\n\t this.config = function(newConfig) {\n\t config = angular.extend(config, newConfig);\n\t };\n\t\n\t function watchExpr(attrName, ariaAttr, nodeBlackList, negate) {\n\t return function(scope, elem, attr) {\n\t var ariaCamelName = attr.$normalize(ariaAttr);\n\t if (config[ariaCamelName] && !isNodeOneOf(elem, nodeBlackList) && !attr[ariaCamelName]) {\n\t scope.$watch(attr[attrName], function(boolVal) {\n\t // ensure boolean value\n\t boolVal = negate ? !boolVal : !!boolVal;\n\t elem.attr(ariaAttr, boolVal);\n\t });\n\t }\n\t };\n\t }\n\t /**\n\t * @ngdoc service\n\t * @name $aria\n\t *\n\t * @description\n\t * @priority 200\n\t *\n\t * The $aria service contains helper methods for applying common\n\t * [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives.\n\t *\n\t * ngAria injects common accessibility attributes that tell assistive technologies when HTML\n\t * elements are enabled, selected, hidden, and more. To see how this is performed with ngAria,\n\t * let's review a code snippet from ngAria itself:\n\t *\n\t *```js\n\t * ngAriaModule.directive('ngDisabled', ['$aria', function($aria) {\n\t * return $aria.$$watchExpr('ngDisabled', 'aria-disabled', nodeBlackList, false);\n\t * }])\n\t *```\n\t * Shown above, the ngAria module creates a directive with the same signature as the\n\t * traditional `ng-disabled` directive. But this ngAria version is dedicated to\n\t * solely managing accessibility attributes on custom elements. The internal `$aria` service is\n\t * used to watch the boolean attribute `ngDisabled`. If it has not been explicitly set by the\n\t * developer, `aria-disabled` is injected as an attribute with its value synchronized to the\n\t * value in `ngDisabled`.\n\t *\n\t * Because ngAria hooks into the `ng-disabled` directive, developers do not have to do\n\t * anything to enable this feature. The `aria-disabled` attribute is automatically managed\n\t * simply as a silent side-effect of using `ng-disabled` with the ngAria module.\n\t *\n\t * The full list of directives that interface with ngAria:\n\t * * **ngModel**\n\t * * **ngChecked**\n\t * * **ngRequired**\n\t * * **ngDisabled**\n\t * * **ngValue**\n\t * * **ngShow**\n\t * * **ngHide**\n\t * * **ngClick**\n\t * * **ngDblclick**\n\t * * **ngMessages**\n\t *\n\t * Read the {@link guide/accessibility ngAria Developer Guide} for a thorough explanation of each\n\t * directive.\n\t *\n\t *\n\t * ## Dependencies\n\t * Requires the {@link ngAria} module to be installed.\n\t */\n\t this.$get = function() {\n\t return {\n\t config: function(key) {\n\t return config[key];\n\t },\n\t $$watchExpr: watchExpr\n\t };\n\t };\n\t}\n\t\n\t\n\tngAriaModule.directive('ngShow', ['$aria', function($aria) {\n\t return $aria.$$watchExpr('ngShow', 'aria-hidden', [], true);\n\t}])\n\t.directive('ngHide', ['$aria', function($aria) {\n\t return $aria.$$watchExpr('ngHide', 'aria-hidden', [], false);\n\t}])\n\t.directive('ngValue', ['$aria', function($aria) {\n\t return $aria.$$watchExpr('ngValue', 'aria-checked', nodeBlackList, false);\n\t}])\n\t.directive('ngChecked', ['$aria', function($aria) {\n\t return $aria.$$watchExpr('ngChecked', 'aria-checked', nodeBlackList, false);\n\t}])\n\t.directive('ngRequired', ['$aria', function($aria) {\n\t return $aria.$$watchExpr('ngRequired', 'aria-required', nodeBlackList, false);\n\t}])\n\t.directive('ngModel', ['$aria', function($aria) {\n\t\n\t function shouldAttachAttr(attr, normalizedAttr, elem, allowBlacklistEls) {\n\t return $aria.config(normalizedAttr) && !elem.attr(attr) && (allowBlacklistEls || !isNodeOneOf(elem, nodeBlackList));\n\t }\n\t\n\t function shouldAttachRole(role, elem) {\n\t // if element does not have role attribute\n\t // AND element type is equal to role (if custom element has a type equaling shape) <-- remove?\n\t // AND element is not INPUT\n\t return !elem.attr('role') && (elem.attr('type') === role) && (elem[0].nodeName !== 'INPUT');\n\t }\n\t\n\t function getShape(attr, elem) {\n\t var type = attr.type,\n\t role = attr.role;\n\t\n\t return ((type || role) === 'checkbox' || role === 'menuitemcheckbox') ? 'checkbox' :\n\t ((type || role) === 'radio' || role === 'menuitemradio') ? 'radio' :\n\t (type === 'range' || role === 'progressbar' || role === 'slider') ? 'range' : '';\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t require: 'ngModel',\n\t priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value\n\t compile: function(elem, attr) {\n\t var shape = getShape(attr, elem);\n\t\n\t return {\n\t pre: function(scope, elem, attr, ngModel) {\n\t if (shape === 'checkbox') {\n\t //Use the input[checkbox] $isEmpty implementation for elements with checkbox roles\n\t ngModel.$isEmpty = function(value) {\n\t return value === false;\n\t };\n\t }\n\t },\n\t post: function(scope, elem, attr, ngModel) {\n\t var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem, false);\n\t\n\t function ngAriaWatchModelValue() {\n\t return ngModel.$modelValue;\n\t }\n\t\n\t function getRadioReaction(newVal) {\n\t var boolVal = (attr.value == ngModel.$viewValue);\n\t elem.attr('aria-checked', boolVal);\n\t }\n\t\n\t function getCheckboxReaction() {\n\t elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue));\n\t }\n\t\n\t switch (shape) {\n\t case 'radio':\n\t case 'checkbox':\n\t if (shouldAttachRole(shape, elem)) {\n\t elem.attr('role', shape);\n\t }\n\t if (shouldAttachAttr('aria-checked', 'ariaChecked', elem, false)) {\n\t scope.$watch(ngAriaWatchModelValue, shape === 'radio' ?\n\t getRadioReaction : getCheckboxReaction);\n\t }\n\t if (needsTabIndex) {\n\t elem.attr('tabindex', 0);\n\t }\n\t break;\n\t case 'range':\n\t if (shouldAttachRole(shape, elem)) {\n\t elem.attr('role', 'slider');\n\t }\n\t if ($aria.config('ariaValue')) {\n\t var needsAriaValuemin = !elem.attr('aria-valuemin') &&\n\t (attr.hasOwnProperty('min') || attr.hasOwnProperty('ngMin'));\n\t var needsAriaValuemax = !elem.attr('aria-valuemax') &&\n\t (attr.hasOwnProperty('max') || attr.hasOwnProperty('ngMax'));\n\t var needsAriaValuenow = !elem.attr('aria-valuenow');\n\t\n\t if (needsAriaValuemin) {\n\t attr.$observe('min', function ngAriaValueMinReaction(newVal) {\n\t elem.attr('aria-valuemin', newVal);\n\t });\n\t }\n\t if (needsAriaValuemax) {\n\t attr.$observe('max', function ngAriaValueMinReaction(newVal) {\n\t elem.attr('aria-valuemax', newVal);\n\t });\n\t }\n\t if (needsAriaValuenow) {\n\t scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) {\n\t elem.attr('aria-valuenow', newVal);\n\t });\n\t }\n\t }\n\t if (needsTabIndex) {\n\t elem.attr('tabindex', 0);\n\t }\n\t break;\n\t }\n\t\n\t if (!attr.hasOwnProperty('ngRequired') && ngModel.$validators.required\n\t && shouldAttachAttr('aria-required', 'ariaRequired', elem, false)) {\n\t // ngModel.$error.required is undefined on custom controls\n\t attr.$observe('required', function() {\n\t elem.attr('aria-required', !!attr['required']);\n\t });\n\t }\n\t\n\t if (shouldAttachAttr('aria-invalid', 'ariaInvalid', elem, true)) {\n\t scope.$watch(function ngAriaInvalidWatch() {\n\t return ngModel.$invalid;\n\t }, function ngAriaInvalidReaction(newVal) {\n\t elem.attr('aria-invalid', !!newVal);\n\t });\n\t }\n\t }\n\t };\n\t }\n\t };\n\t}])\n\t.directive('ngDisabled', ['$aria', function($aria) {\n\t return $aria.$$watchExpr('ngDisabled', 'aria-disabled', nodeBlackList, false);\n\t}])\n\t.directive('ngMessages', function() {\n\t return {\n\t restrict: 'A',\n\t require: '?ngMessages',\n\t link: function(scope, elem, attr, ngMessages) {\n\t if (!elem.attr('aria-live')) {\n\t elem.attr('aria-live', 'assertive');\n\t }\n\t }\n\t };\n\t})\n\t.directive('ngClick',['$aria', '$parse', function($aria, $parse) {\n\t return {\n\t restrict: 'A',\n\t compile: function(elem, attr) {\n\t var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true);\n\t return function(scope, elem, attr) {\n\t\n\t if (!isNodeOneOf(elem, nodeBlackList)) {\n\t\n\t if ($aria.config('bindRoleForClick') && !elem.attr('role')) {\n\t elem.attr('role', 'button');\n\t }\n\t\n\t if ($aria.config('tabindex') && !elem.attr('tabindex')) {\n\t elem.attr('tabindex', 0);\n\t }\n\t\n\t if ($aria.config('bindKeypress') && !attr.ngKeypress) {\n\t elem.on('keypress', function(event) {\n\t var keyCode = event.which || event.keyCode;\n\t if (keyCode === 32 || keyCode === 13) {\n\t scope.$apply(callback);\n\t }\n\t\n\t function callback() {\n\t fn(scope, { $event: event });\n\t }\n\t });\n\t }\n\t }\n\t };\n\t }\n\t };\n\t}])\n\t.directive('ngDblclick', ['$aria', function($aria) {\n\t return function(scope, elem, attr) {\n\t if ($aria.config('tabindex') && !elem.attr('tabindex') && !isNodeOneOf(elem, nodeBlackList)) {\n\t elem.attr('tabindex', 0);\n\t }\n\t };\n\t}]);\n\t\n\t\n\t})(window, window.angular);\n\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(8);\n\tmodule.exports = 'ngAria';\n\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, exports) {\n\n\t/**\n\t * @ngdoc module\n\t * @name gettext\n\t * @packageName angular-gettext\n\t * @description Super simple Gettext for Angular.JS\n\t *\n\t * A sample application can be found at https://github.com/rubenv/angular-gettext-example.\n\t * This is an adaptation of the [TodoMVC](http://todomvc.com/) example. You can use this as a guideline while adding {@link angular-gettext angular-gettext} to your own application.\n\t */\n\t/**\n\t * @ngdoc factory\n\t * @module gettext\n\t * @name gettextPlurals\n\t * @param {String} [langCode=en] language code\n\t * @param {Number} [n=0] number to calculate form for\n\t * @returns {Number} plural form number\n\t * @description Provides correct plural form id for the given language\n\t *\n\t * Example\n\t * ```js\n\t * gettextPlurals('ru', 10); // 1\n\t * gettextPlurals('en', 1); // 0\n\t * gettextPlurals(); // 1\n\t * ```\n\t */\n\tangular.module('gettext', []);\n\t/**\n\t * @ngdoc object\n\t * @module gettext\n\t * @name gettext\n\t * @kind function\n\t * @param {String} str annotation key\n\t * @description Gettext constant function for annotating strings\n\t *\n\t * ```js\n\t * angular.module('myApp', ['gettext']).config(function(gettext) {\n\t * /// MyApp document title\n\t * gettext('my-app.title');\n\t * ...\n\t * })\n\t * ```\n\t */\n\tangular.module('gettext').constant('gettext', function (str) {\n\t /*\n\t * Does nothing, simply returns the input string.\n\t *\n\t * This function serves as a marker for `grunt-angular-gettext` to know that\n\t * this string should be extracted for translations.\n\t */\n\t return str;\n\t});\n\t\n\t/**\n\t * @ngdoc service\n\t * @module gettext\n\t * @name gettextCatalog\n\t * @requires gettextPlurals\n\t * @requires gettextFallbackLanguage\n\t * @requires https://docs.angularjs.org/api/ng/service/$http $http\n\t * @requires https://docs.angularjs.org/api/ng/service/$cacheFactory $cacheFactory\n\t * @requires https://docs.angularjs.org/api/ng/service/$interpolate $interpolate\n\t * @requires https://docs.angularjs.org/api/ng/service/$rootScope $rootScope\n\t * @description Provides set of method to translate stings\n\t */\n\tangular.module('gettext').factory('gettextCatalog', [\"gettextPlurals\", \"gettextFallbackLanguage\", \"$http\", \"$cacheFactory\", \"$interpolate\", \"$rootScope\", function (gettextPlurals, gettextFallbackLanguage, $http, $cacheFactory, $interpolate, $rootScope) {\n\t var catalog;\n\t var noContext = '$$noContext';\n\t\n\t // IE8 returns UPPER CASE tags, even though the source is lower case.\n\t // This can causes the (key) string in the DOM to have a different case to\n\t // the string in the `po` files.\n\t // IE9, IE10 and IE11 reorders the attributes of tags.\n\t var test = 'test';\n\t var isHTMLModified = (angular.element('' + test + '').html() !== test);\n\t\n\t var prefixDebug = function (string) {\n\t if (catalog.debug && catalog.currentLanguage !== catalog.baseLanguage) {\n\t return catalog.debugPrefix + string;\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t var addTranslatedMarkers = function (string) {\n\t if (catalog.showTranslatedMarkers) {\n\t return catalog.translatedMarkerPrefix + string + catalog.translatedMarkerSuffix;\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t function broadcastUpdated() {\n\t /**\n\t * @ngdoc event\n\t * @name gettextCatalog#gettextLanguageChanged\n\t * @eventType broadcast on $rootScope\n\t * @description Fires language change notification without any additional parameters.\n\t */\n\t $rootScope.$broadcast('gettextLanguageChanged');\n\t }\n\t\n\t catalog = {\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#debug\n\t * @public\n\t * @type {Boolean} false\n\t * @see gettextCatalog#debug\n\t * @description Whether or not to prefix untranslated strings with `[MISSING]:` or a custom prefix.\n\t */\n\t debug: false,\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#debugPrefix\n\t * @public\n\t * @type {String} [MISSING]:\n\t * @description Custom prefix for untranslated strings when {@link gettextCatalog#debug gettextCatalog#debug} set to `true`.\n\t */\n\t debugPrefix: '[MISSING]: ',\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#showTranslatedMarkers\n\t * @public\n\t * @type {Boolean} false\n\t * @description Whether or not to wrap all processed text with markers.\n\t *\n\t * Example output: `[Welcome]`\n\t */\n\t showTranslatedMarkers: false,\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#translatedMarkerPrefix\n\t * @public\n\t * @type {String} [\n\t * @description Custom prefix to mark strings that have been run through {@link angular-gettext angular-gettext}.\n\t */\n\t translatedMarkerPrefix: '[',\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#translatedMarkerSuffix\n\t * @public\n\t * @type {String} ]\n\t * @description Custom suffix to mark strings that have been run through {@link angular-gettext angular-gettext}.\n\t */\n\t translatedMarkerSuffix: ']',\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#strings\n\t * @private\n\t * @type {Object}\n\t * @description An object of loaded translation strings. Shouldn't be used directly.\n\t */\n\t strings: {},\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#baseLanguage\n\t * @protected\n\t * @deprecated\n\t * @since 2.0\n\t * @type {String} en\n\t * @description The default language, in which you're application is written.\n\t *\n\t * This defaults to English and it's generally a bad idea to use anything else:\n\t * if your language has different pluralization rules you'll end up with incorrect translations.\n\t */\n\t baseLanguage: 'en',\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#currentLanguage\n\t * @public\n\t * @type {String}\n\t * @description Active language.\n\t */\n\t currentLanguage: 'en',\n\t /**\n\t * @ngdoc property\n\t * @name gettextCatalog#cache\n\t * @public\n\t * @type {String} en\n\t * @description Language cache for lazy load\n\t */\n\t cache: $cacheFactory('strings'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextCatalog#setCurrentLanguage\n\t * @public\n\t * @param {String} lang language name\n\t * @description Sets the current language and makes sure that all translations get updated correctly.\n\t */\n\t setCurrentLanguage: function (lang) {\n\t this.currentLanguage = lang;\n\t broadcastUpdated();\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextCatalog#getCurrentLanguage\n\t * @public\n\t * @returns {String} current language\n\t * @description Returns the current language.\n\t */\n\t getCurrentLanguage: function () {\n\t return this.currentLanguage;\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextCatalog#setStrings\n\t * @public\n\t * @param {String} language language name\n\t * @param {Object.} strings set of strings where the key is the translation `key` and `value` is the translated text\n\t * @description Processes an object of string definitions. {@link guide:manual-setstrings More details here}.\n\t */\n\t setStrings: function (language, strings) {\n\t if (!this.strings[language]) {\n\t this.strings[language] = {};\n\t }\n\t\n\t for (var key in strings) {\n\t var val = strings[key];\n\t\n\t if (isHTMLModified) {\n\t // Use the DOM engine to render any HTML in the key (#131).\n\t key = angular.element('' + key + '').html();\n\t }\n\t\n\t if (angular.isString(val) || angular.isArray(val)) {\n\t // No context, wrap it in $$noContext.\n\t var obj = {};\n\t obj[noContext] = val;\n\t val = obj;\n\t }\n\t\n\t // Expand single strings for each context.\n\t for (var context in val) {\n\t var str = val[context];\n\t val[context] = angular.isArray(str) ? str : [str];\n\t }\n\t this.strings[language][key] = val;\n\t }\n\t\n\t broadcastUpdated();\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextCatalog#getStringFormFor\n\t * @protected\n\t * @param {String} language language name\n\t * @param {String} string translation key\n\t * @param {Number=} n number to build sting form for\n\t * @param {String=} context translation key context, e.g. {@link doc:context Verb, Noun}\n\t * @returns {String|Null} translated or annotated string or null if language is not set\n\t * @description Translate a string with the given language, count and context.\n\t */\n\t getStringFormFor: function (language, string, n, context) {\n\t if (!language) {\n\t return null;\n\t }\n\t var stringTable = this.strings[language] || {};\n\t var contexts = stringTable[string] || {};\n\t var plurals = contexts[context || noContext] || [];\n\t return plurals[gettextPlurals(language, n)];\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextCatalog#getString\n\t * @public\n\t * @param {String} string translation key\n\t * @param {$rootScope.Scope=} scope scope to do interpolation against\n\t * @param {String=} context translation key context, e.g. {@link doc:context Verb, Noun}\n\t * @returns {String} translated or annotated string\n\t * @description Translate a string with the given scope and context.\n\t *\n\t * First it tries {@link gettextCatalog#currentLanguage gettextCatalog#currentLanguage} (e.g. `en-US`) then {@link gettextFallbackLanguage fallback} (e.g. `en`).\n\t *\n\t * When `scope` is supplied it uses Angular.JS interpolation, so something like this will do what you expect:\n\t * ```js\n\t * var hello = gettextCatalog.getString(\"Hello {{name}}!\", { name: \"Ruben\" });\n\t * // var hello will be \"Hallo Ruben!\" in Dutch.\n\t * ```\n\t * Avoid using scopes - this skips interpolation and is a lot faster.\n\t */\n\t getString: function (string, scope, context) {\n\t var fallbackLanguage = gettextFallbackLanguage(this.currentLanguage);\n\t string = this.getStringFormFor(this.currentLanguage, string, 1, context) ||\n\t this.getStringFormFor(fallbackLanguage, string, 1, context) ||\n\t prefixDebug(string);\n\t string = scope ? $interpolate(string)(scope) : string;\n\t return addTranslatedMarkers(string);\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextCatalog#getPlural\n\t * @public\n\t * @param {Number} n number to build sting form for\n\t * @param {String} string translation key\n\t * @param {String} stringPlural plural translation key\n\t * @param {$rootScope.Scope=} scope scope to do interpolation against\n\t * @param {String=} context translation key context, e.g. {@link doc:context Verb, Noun}\n\t * @returns {String} translated or annotated string\n\t * @see {@link gettextCatalog#getString gettextCatalog#getString} for details\n\t * @description Translate a plural string with the given context.\n\t */\n\t getPlural: function (n, string, stringPlural, scope, context) {\n\t var fallbackLanguage = gettextFallbackLanguage(this.currentLanguage);\n\t string = this.getStringFormFor(this.currentLanguage, string, n, context) ||\n\t this.getStringFormFor(fallbackLanguage, string, n, context) ||\n\t prefixDebug(n === 1 ? string : stringPlural);\n\t if (scope) {\n\t scope.$count = n;\n\t string = $interpolate(string)(scope);\n\t }\n\t return addTranslatedMarkers(string);\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextCatalog#loadRemote\n\t * @public\n\t * @param {String} url location of the translations\n\t * @description Load a set of translation strings from a given URL.\n\t *\n\t * This should be a JSON catalog generated with [angular-gettext-tools](https://github.com/rubenv/angular-gettext-tools).\n\t * {@link guide:lazy-loading More details here}.\n\t */\n\t loadRemote: function (url) {\n\t return $http({\n\t method: 'GET',\n\t url: url,\n\t cache: catalog.cache\n\t }).then(function (response) {\n\t var data = response.data;\n\t for (var lang in data) {\n\t catalog.setStrings(lang, data[lang]);\n\t }\n\t return response;\n\t });\n\t }\n\t };\n\t\n\t return catalog;\n\t}]);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @module gettext\n\t * @name translate\n\t * @requires gettextCatalog\n\t * @requires gettextUtil\n\t * @requires https://docs.angularjs.org/api/ng/service/$parse $parse\n\t * @requires https://docs.angularjs.org/api/ng/service/$animate $animate\n\t * @requires https://docs.angularjs.org/api/ng/service/$compile $compile\n\t * @requires https://docs.angularjs.org/api/ng/service/$window $window\n\t * @restrict AE\n\t * @param {String} [translatePlural] plural form\n\t * @param {Number} translateN value to watch to substitute correct plural form\n\t * @param {String} translateContext context value, e.g. {@link doc:context Verb, Noun}\n\t * @description Annotates and translates text inside directive\n\t *\n\t * Full interpolation support is available in translated strings, so the following will work as expected:\n\t * ```js\n\t *
Hello {{name}}!
\n\t * ```\n\t *\n\t * You can also use custom context parameters while interpolating. This approach allows usage\n\t * of angular filters as well as custom logic inside your translated messages without unnecessary impact on translations.\n\t *\n\t * So for example when you have message like this:\n\t * ```js\n\t *
Last modified {{modificationDate | date:'yyyy-MM-dd HH:mm:ss Z'}} by {{author}}.
\n\t * ```\n\t * you will have it extracted in exact same version so it would look like this:\n\t * `Last modified {{modificationDate | date:'yyyy-MM-dd HH:mm:ss Z'}} by {{author}}`.\n\t * To start with it might be too complicated to read and handle by non technical translator. It's easy to make mistake\n\t * when copying format for example. Secondly if you decide to change format by some point of the project translation will broke\n\t * as it won't be the same string anymore.\n\t *\n\t * Instead your translator should only be concerned to place {{modificationDate}} correctly and you should have a free hand\n\t * to modify implementation details on how to present the results. This is how you can achieve the goal:\n\t * ```js\n\t *
Last modified {{modificationDate}} by {{author}}.
\n\t * ```\n\t *\n\t * There's a few more things worth to point out:\n\t * 1. You can use as many parameters as you want. Each parameter begins with `translate-params-` followed by snake-case parameter name.\n\t * Each parameter will be available for interpolation in camelCase manner (just like angular directive works by default).\n\t * ```js\n\t *
Param {{myCustomParam}} has been changed by {{name}}.
\n\t * ```\n\t * 2. You can rename your variables from current scope to simple ones if you like.\n\t * ```js\n\t *
Today's date is: {{date}}.
\n\t * ```\n\t * 3. You can use translate-params only for some interpolations. Rest would be treated as usual.\n\t * ```js\n\t *
This product: {{product}} costs {{cost}}.
\n\t * ```\n\t */\n\tangular.module('gettext').directive('translate', [\"gettextCatalog\", \"$parse\", \"$animate\", \"$compile\", \"$window\", \"gettextUtil\", function (gettextCatalog, $parse, $animate, $compile, $window, gettextUtil) {\n\t var msie = parseInt((/msie (\\d+)/.exec(angular.lowercase($window.navigator.userAgent)) || [])[1], 10);\n\t var PARAMS_PREFIX = 'translateParams';\n\t\n\t function getCtxAttr(key) {\n\t return gettextUtil.lcFirst(key.replace(PARAMS_PREFIX, ''));\n\t }\n\t\n\t function handleInterpolationContext(scope, attrs, update) {\n\t var attributes = Object.keys(attrs).filter(function (key) {\n\t return gettextUtil.startsWith(key, PARAMS_PREFIX) && key !== PARAMS_PREFIX;\n\t });\n\t\n\t if (!attributes.length) {\n\t return null;\n\t }\n\t\n\t var interpolationContext = angular.extend({}, scope);\n\t var unwatchers = [];\n\t attributes.forEach(function (attribute) {\n\t var unwatch = scope.$watch(attrs[attribute], function (newVal) {\n\t var key = getCtxAttr(attribute);\n\t interpolationContext[key] = newVal;\n\t update(interpolationContext);\n\t });\n\t unwatchers.push(unwatch);\n\t });\n\t scope.$on('$destroy', function () {\n\t unwatchers.forEach(function (unwatch) {\n\t unwatch();\n\t });\n\t });\n\t return interpolationContext;\n\t }\n\t\n\t return {\n\t restrict: 'AE',\n\t terminal: true,\n\t compile: function compile(element, attrs) {\n\t // Validate attributes\n\t gettextUtil.assert(!attrs.translatePlural || attrs.translateN, 'translate-n', 'translate-plural');\n\t gettextUtil.assert(!attrs.translateN || attrs.translatePlural, 'translate-plural', 'translate-n');\n\t\n\t var msgid = gettextUtil.trim(element.html());\n\t var translatePlural = attrs.translatePlural;\n\t var translateContext = attrs.translateContext;\n\t\n\t if (msie <= 8) {\n\t // Workaround fix relating to angular adding a comment node to\n\t // anchors. angular/angular.js/#1949 / angular/angular.js/#2013\n\t if (msgid.slice(-13) === '') {\n\t msgid = msgid.slice(0, -13);\n\t }\n\t }\n\t\n\t return {\n\t post: function (scope, element, attrs) {\n\t var countFn = $parse(attrs.translateN);\n\t var pluralScope = null;\n\t var linking = true;\n\t\n\t function update(interpolationContext) {\n\t interpolationContext = interpolationContext || null;\n\t\n\t // Fetch correct translated string.\n\t var translated;\n\t if (translatePlural) {\n\t scope = pluralScope || (pluralScope = scope.$new());\n\t scope.$count = countFn(scope);\n\t translated = gettextCatalog.getPlural(scope.$count, msgid, translatePlural, interpolationContext, translateContext);\n\t } else {\n\t translated = gettextCatalog.getString(msgid, interpolationContext, translateContext);\n\t }\n\t var oldContents = element.contents();\n\t\n\t if (oldContents.length === 0){\n\t return;\n\t }\n\t\n\t // Avoid redundant swaps\n\t if (translated === gettextUtil.trim(oldContents.html())){\n\t // Take care of unlinked content\n\t if (linking){\n\t $compile(oldContents)(scope);\n\t }\n\t return;\n\t }\n\t\n\t // Swap in the translation\n\t var newWrapper = angular.element('' + translated + '');\n\t $compile(newWrapper.contents())(scope);\n\t var newContents = newWrapper.contents();\n\t\n\t $animate.enter(newContents, element);\n\t $animate.leave(oldContents);\n\t }\n\t\n\t if (attrs.translateN) {\n\t scope.$watch(attrs.translateN, function () {\n\t update();\n\t });\n\t }\n\t\n\t /**\n\t * @ngdoc event\n\t * @name translate#gettextLanguageChanged\n\t * @eventType listen on scope\n\t * @description Listens for language updates and changes translation accordingly\n\t */\n\t scope.$on('gettextLanguageChanged', function () {\n\t update();\n\t });\n\t\n\t var interpolationContext = handleInterpolationContext(scope, attrs, update);\n\t update(interpolationContext);\n\t linking = false;\n\t }\n\t };\n\t }\n\t };\n\t}]);\n\t\n\t/**\n\t * @ngdoc factory\n\t * @module gettext\n\t * @name gettextFallbackLanguage\n\t * @param {String} langCode language code\n\t * @returns {String|Null} fallback language\n\t * @description Strips regional code and returns language code only\n\t *\n\t * Example\n\t * ```js\n\t * gettextFallbackLanguage('ru'); // \"null\"\n\t * gettextFallbackLanguage('en_GB'); // \"en\"\n\t * gettextFallbackLanguage(); // null\n\t * ```\n\t */\n\tangular.module(\"gettext\").factory(\"gettextFallbackLanguage\", function () {\n\t var cache = {};\n\t var pattern = /([^_]+)_[^_]+$/;\n\t\n\t return function (langCode) {\n\t if (cache[langCode]) {\n\t return cache[langCode];\n\t }\n\t\n\t var matches = pattern.exec(langCode);\n\t if (matches) {\n\t cache[langCode] = matches[1];\n\t return matches[1];\n\t }\n\t\n\t return null;\n\t };\n\t});\n\t/**\n\t * @ngdoc filter\n\t * @module gettext\n\t * @name translate\n\t * @requires gettextCatalog\n\t * @param {String} input translation key\n\t * @param {String} context context to evaluate key against\n\t * @returns {String} translated string or annotated key\n\t * @see {@link doc:context Verb, Noun}\n\t * @description Takes key and returns string\n\t *\n\t * Sometimes it's not an option to use an attribute (e.g. when you want to annotate an attribute value).\n\t * There's a `translate` filter available for this purpose.\n\t *\n\t * ```html\n\t * \n\t * ```\n\t * This filter does not support plural strings.\n\t *\n\t * You may want to use {@link guide:custom-annotations custom annotations} to avoid using the `translate` filter all the time. * Is\n\t */\n\tangular.module('gettext').filter('translate', [\"gettextCatalog\", function (gettextCatalog) {\n\t function filter(input, context) {\n\t return gettextCatalog.getString(input, null, context);\n\t }\n\t filter.$stateful = true;\n\t return filter;\n\t}]);\n\t\n\t// Do not edit this file, it is autogenerated using genplurals.py!\n\tangular.module(\"gettext\").factory(\"gettextPlurals\", function () {\n\t var languageCodes = {\n\t \"pt_BR\": \"pt_BR\"\n\t };\n\t return function (langCode, n) {\n\t switch (getLanguageCode(langCode)) {\n\t case \"ay\": // Aymará\n\t case \"bo\": // Tibetan\n\t case \"cgg\": // Chiga\n\t case \"dz\": // Dzongkha\n\t case \"fa\": // Persian\n\t case \"id\": // Indonesian\n\t case \"ja\": // Japanese\n\t case \"jbo\": // Lojban\n\t case \"ka\": // Georgian\n\t case \"kk\": // Kazakh\n\t case \"km\": // Khmer\n\t case \"ko\": // Korean\n\t case \"ky\": // Kyrgyz\n\t case \"lo\": // Lao\n\t case \"ms\": // Malay\n\t case \"my\": // Burmese\n\t case \"sah\": // Yakut\n\t case \"su\": // Sundanese\n\t case \"th\": // Thai\n\t case \"tt\": // Tatar\n\t case \"ug\": // Uyghur\n\t case \"vi\": // Vietnamese\n\t case \"wo\": // Wolof\n\t case \"zh\": // Chinese\n\t // 1 form\n\t return 0;\n\t case \"is\": // Icelandic\n\t // 2 forms\n\t return (n%10!=1 || n%100==11) ? 1 : 0;\n\t case \"jv\": // Javanese\n\t // 2 forms\n\t return n!=0 ? 1 : 0;\n\t case \"mk\": // Macedonian\n\t // 2 forms\n\t return n==1 || n%10==1 ? 0 : 1;\n\t case \"ach\": // Acholi\n\t case \"ak\": // Akan\n\t case \"am\": // Amharic\n\t case \"arn\": // Mapudungun\n\t case \"br\": // Breton\n\t case \"fil\": // Filipino\n\t case \"fr\": // French\n\t case \"gun\": // Gun\n\t case \"ln\": // Lingala\n\t case \"mfe\": // Mauritian Creole\n\t case \"mg\": // Malagasy\n\t case \"mi\": // Maori\n\t case \"oc\": // Occitan\n\t case \"pt_BR\": // Brazilian Portuguese\n\t case \"tg\": // Tajik\n\t case \"ti\": // Tigrinya\n\t case \"tr\": // Turkish\n\t case \"uz\": // Uzbek\n\t case \"wa\": // Walloon\n\t case \"zh\": // Chinese\n\t // 2 forms\n\t return n>1 ? 1 : 0;\n\t case \"lv\": // Latvian\n\t // 3 forms\n\t return (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n\t case \"lt\": // Lithuanian\n\t // 3 forms\n\t return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n\t case \"be\": // Belarusian\n\t case \"bs\": // Bosnian\n\t case \"hr\": // Croatian\n\t case \"ru\": // Russian\n\t case \"sr\": // Serbian\n\t case \"uk\": // Ukrainian\n\t // 3 forms\n\t return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n\t case \"mnk\": // Mandinka\n\t // 3 forms\n\t return (n==0 ? 0 : n==1 ? 1 : 2);\n\t case \"ro\": // Romanian\n\t // 3 forms\n\t return (n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n\t case \"pl\": // Polish\n\t // 3 forms\n\t return (n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n\t case \"cs\": // Czech\n\t case \"sk\": // Slovak\n\t // 3 forms\n\t return (n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n\t case \"sl\": // Slovenian\n\t // 4 forms\n\t return (n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n\t case \"mt\": // Maltese\n\t // 4 forms\n\t return (n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);\n\t case \"gd\": // Scottish Gaelic\n\t // 4 forms\n\t return (n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;\n\t case \"cy\": // Welsh\n\t // 4 forms\n\t return (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n\t case \"kw\": // Cornish\n\t // 4 forms\n\t return (n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3;\n\t case \"ga\": // Irish\n\t // 5 forms\n\t return n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4;\n\t case \"ar\": // Arabic\n\t // 6 forms\n\t return (n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5);\n\t default: // Everything else\n\t return n != 1 ? 1 : 0;\n\t }\n\t };\n\t\n\t /**\n\t * Method extracts iso639-2 language code from code with locale e.g. pl_PL, en_US, etc.\n\t * If it's provided with standalone iso639-2 language code it simply returns it.\n\t * @param {String} langCode\n\t * @returns {String} iso639-2 language Code\n\t */\n\t function getLanguageCode(langCode) {\n\t if (!languageCodes[langCode]) {\n\t languageCodes[langCode] = langCode.split('_').shift();\n\t }\n\t return languageCodes[langCode];\n\t }\n\t});\n\t\n\t/**\n\t * @ngdoc factory\n\t * @module gettext\n\t * @name gettextUtil\n\t * @description Utility service for common operations and polyfills.\n\t */\n\tangular.module('gettext').factory('gettextUtil', function gettextUtil() {\n\t /**\n\t * @ngdoc method\n\t * @name gettextUtil#trim\n\t * @public\n\t * @param {string} value String to be trimmed.\n\t * @description Trim polyfill for old browsers (instead of jQuery). Based on AngularJS-v1.2.2 (angular.js#620).\n\t *\n\t * Example\n\t * ```js\n\t * gettextUtil.assert(' no blanks '); // \"no blanks\"\n\t * ```\n\t */\n\t var trim = (function () {\n\t if (!String.prototype.trim) {\n\t return function (value) {\n\t return (typeof value === 'string') ? value.replace(/^\\s*/, '').replace(/\\s*$/, '') : value;\n\t };\n\t }\n\t return function (value) {\n\t return (typeof value === 'string') ? value.trim() : value;\n\t };\n\t })();\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextUtil#assert\n\t * @public\n\t * @param {bool} condition condition to check\n\t * @param {String} missing name of the directive missing attribute\n\t * @param {String} found name of attribute that has been used with directive\n\t * @description Throws error if condition is not met, which means that directive was used with certain parameter\n\t * that requires another one (which is missing).\n\t *\n\t * Example\n\t * ```js\n\t * gettextUtil.assert(!attrs.translatePlural || attrs.translateN, 'translate-n', 'translate-plural');\n\t * //You should add a translate-n attribute whenever you add a translate-plural attribute.\n\t * ```\n\t */\n\t function assert(condition, missing, found) {\n\t if (!condition) {\n\t throw new Error('You should add a ' + missing + ' attribute whenever you add a ' + found + ' attribute.');\n\t }\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextUtil#startsWith\n\t * @public\n\t * @param {string} target String on which checking will occur.\n\t * @param {string} query String expected to be at the beginning of target.\n\t * @returns {boolean} Returns true if object has no ownProperties. For arrays returns true if length == 0.\n\t * @description Checks if string starts with another string.\n\t *\n\t * Example\n\t * ```js\n\t * gettextUtil.startsWith('Home sweet home.', 'Home'); //true\n\t * gettextUtil.startsWith('Home sweet home.', 'sweet'); //false\n\t * ```\n\t */\n\t function startsWith(target, query) {\n\t return target.indexOf(query) === 0;\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name gettextUtil#lcFirst\n\t * @public\n\t * @param {string} target String to transform.\n\t * @returns {string} Strings beginning with lowercase letter.\n\t * @description Makes first letter of the string lower case\n\t *\n\t * Example\n\t * ```js\n\t * gettextUtil.lcFirst('Home Sweet Home.'); //'home Sweet Home'\n\t * gettextUtil.lcFirst('ShouldBeCamelCase.'); //'shouldBeCamelCase'\n\t * ```\n\t */\n\t function lcFirst(target) {\n\t var first = target.charAt(0).toLowerCase();\n\t return first + target.substr(1);\n\t }\n\t\n\t return {\n\t trim: trim,\n\t assert: assert,\n\t startsWith: startsWith,\n\t lcFirst: lcFirst\n\t };\n\t});\n\n\n/***/ }),\n\n/***/ 57:\n/***/ (function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 10:\n/***/ (function(module, exports) {\n\n\t/*!\n\t * Angular Material Design\n\t * https://github.com/angular/material\n\t * @license MIT\n\t * v1.1.1\n\t */\n\t(function( window, angular, undefined ){\n\t\"use strict\";\n\t\n\t(function(){\n\t\"use strict\";\n\t\n\tangular.module('ngMaterial', [\"ng\",\"ngAnimate\",\"ngAria\",\"material.core\",\"material.core.gestures\",\"material.core.layout\",\"material.core.meta\",\"material.core.theming.palette\",\"material.core.theming\",\"material.core.animate\",\"material.components.autocomplete\",\"material.components.backdrop\",\"material.components.bottomSheet\",\"material.components.button\",\"material.components.card\",\"material.components.chips\",\"material.components.checkbox\",\"material.components.colors\",\"material.components.content\",\"material.components.datepicker\",\"material.components.dialog\",\"material.components.divider\",\"material.components.fabActions\",\"material.components.fabShared\",\"material.components.fabSpeedDial\",\"material.components.fabToolbar\",\"material.components.gridList\",\"material.components.icon\",\"material.components.input\",\"material.components.list\",\"material.components.menu\",\"material.components.menuBar\",\"material.components.navBar\",\"material.components.panel\",\"material.components.progressCircular\",\"material.components.progressLinear\",\"material.components.radioButton\",\"material.components.select\",\"material.components.showHide\",\"material.components.sidenav\",\"material.components.slider\",\"material.components.sticky\",\"material.components.subheader\",\"material.components.swipe\",\"material.components.switch\",\"material.components.tabs\",\"material.components.toast\",\"material.components.toolbar\",\"material.components.tooltip\",\"material.components.virtualRepeat\",\"material.components.whiteframe\"]);\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * Initialization function that validates environment\n\t * requirements.\n\t */\n\tDetectNgTouch.$inject = [\"$log\", \"$injector\"];\n\tMdCoreConfigure.$inject = [\"$provide\", \"$mdThemingProvider\"];\n\trAFDecorator.$inject = [\"$delegate\"];\n\tangular\n\t .module('material.core', [\n\t 'ngAnimate',\n\t 'material.core.animate',\n\t 'material.core.layout',\n\t 'material.core.gestures',\n\t 'material.core.theming'\n\t ])\n\t .config(MdCoreConfigure)\n\t .run(DetectNgTouch);\n\t\n\t\n\t/**\n\t * Detect if the ng-Touch module is also being used.\n\t * Warn if detected.\n\t * @ngInject\n\t */\n\tfunction DetectNgTouch($log, $injector) {\n\t if ( $injector.has('$swipe') ) {\n\t var msg = \"\" +\n\t \"You are using the ngTouch module. \\n\" +\n\t \"Angular Material already has mobile click, tap, and swipe support... \\n\" +\n\t \"ngTouch is not supported with Angular Material!\";\n\t $log.warn(msg);\n\t }\n\t}\n\t\n\t/**\n\t * @ngInject\n\t */\n\tfunction MdCoreConfigure($provide, $mdThemingProvider) {\n\t\n\t $provide.decorator('$$rAF', [\"$delegate\", rAFDecorator]);\n\t\n\t $mdThemingProvider.theme('default')\n\t .primaryPalette('indigo')\n\t .accentPalette('pink')\n\t .warnPalette('deep-orange')\n\t .backgroundPalette('grey');\n\t}\n\t\n\t/**\n\t * @ngInject\n\t */\n\tfunction rAFDecorator($delegate) {\n\t /**\n\t * Use this to throttle events that come in often.\n\t * The throttled function will always use the *last* invocation before the\n\t * coming frame.\n\t *\n\t * For example, window resize events that fire many times a second:\n\t * If we set to use an raf-throttled callback on window resize, then\n\t * our callback will only be fired once per frame, with the last resize\n\t * event that happened before that frame.\n\t *\n\t * @param {function} callback function to debounce\n\t */\n\t $delegate.throttle = function(cb) {\n\t var queuedArgs, alreadyQueued, queueCb, context;\n\t return function debounced() {\n\t queuedArgs = arguments;\n\t context = this;\n\t queueCb = cb;\n\t if (!alreadyQueued) {\n\t alreadyQueued = true;\n\t $delegate(function() {\n\t queueCb.apply(context, Array.prototype.slice.call(queuedArgs));\n\t alreadyQueued = false;\n\t });\n\t }\n\t };\n\t };\n\t return $delegate;\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\tangular.module('material.core')\n\t .directive('mdAutofocus', MdAutofocusDirective)\n\t\n\t // Support the deprecated md-auto-focus and md-sidenav-focus as well\n\t .directive('mdAutoFocus', MdAutofocusDirective)\n\t .directive('mdSidenavFocus', MdAutofocusDirective);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdAutofocus\n\t * @module material.core.util\n\t *\n\t * @description\n\t *\n\t * `[md-autofocus]` provides an optional way to identify the focused element when a `$mdDialog`,\n\t * `$mdBottomSheet`, `$mdMenu` or `$mdSidenav` opens or upon page load for input-like elements.\n\t *\n\t * When one of these opens, it will find the first nested element with the `[md-autofocus]`\n\t * attribute directive and optional expression. An expression may be specified as the directive\n\t * value to enable conditional activation of the autofocus.\n\t *\n\t * @usage\n\t *\n\t * ### Dialog\n\t * \n\t * \n\t *
\n\t * \n\t * \n\t * \n\t * \n\t *
\n\t *
\n\t *
\n\t *\n\t * ### Bottomsheet\n\t * \n\t * \n\t * Comment Actions\n\t * \n\t * \n\t *\n\t * \n\t * \n\t * {{ item.name }}\n\t * \n\t *\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * ### Autocomplete\n\t * \n\t * \n\t * {{item.display}}\n\t * \n\t * \n\t *\n\t * ### Sidenav\n\t * \n\t *
\n\t * \n\t * Left Nav!\n\t * \n\t *\n\t * \n\t * Center Content\n\t * \n\t * Open Left Menu\n\t * \n\t * \n\t *\n\t * \n\t *
\n\t * \n\t * \n\t * \n\t * \n\t *
\n\t *
\n\t *
\n\t *
\n\t **/\n\tfunction MdAutofocusDirective() {\n\t return {\n\t restrict: 'A',\n\t\n\t link: postLink\n\t }\n\t}\n\t\n\tfunction postLink(scope, element, attrs) {\n\t var attr = attrs.mdAutoFocus || attrs.mdAutofocus || attrs.mdSidenavFocus;\n\t\n\t // Setup a watcher on the proper attribute to update a class we can check for in $mdUtil\n\t scope.$watch(attr, function(canAutofocus) {\n\t element.toggleClass('md-autofocus', canAutofocus);\n\t });\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.core.colorUtil\n\t * @description\n\t * Color Util\n\t */\n\tangular\n\t .module('material.core')\n\t .factory('$mdColorUtil', ColorUtilFactory);\n\t\n\tfunction ColorUtilFactory() {\n\t /**\n\t * Converts hex value to RGBA string\n\t * @param color {string}\n\t * @returns {string}\n\t */\n\t function hexToRgba (color) {\n\t var hex = color[ 0 ] === '#' ? color.substr(1) : color,\n\t dig = hex.length / 3,\n\t red = hex.substr(0, dig),\n\t green = hex.substr(dig, dig),\n\t blue = hex.substr(dig * 2);\n\t if (dig === 1) {\n\t red += red;\n\t green += green;\n\t blue += blue;\n\t }\n\t return 'rgba(' + parseInt(red, 16) + ',' + parseInt(green, 16) + ',' + parseInt(blue, 16) + ',0.1)';\n\t }\n\t\n\t /**\n\t * Converts rgba value to hex string\n\t * @param color {string}\n\t * @returns {string}\n\t */\n\t function rgbaToHex(color) {\n\t color = color.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n\t\n\t var hex = (color && color.length === 4) ? \"#\" +\n\t (\"0\" + parseInt(color[1],10).toString(16)).slice(-2) +\n\t (\"0\" + parseInt(color[2],10).toString(16)).slice(-2) +\n\t (\"0\" + parseInt(color[3],10).toString(16)).slice(-2) : '';\n\t\n\t return hex.toUpperCase();\n\t }\n\t\n\t /**\n\t * Converts an RGB color to RGBA\n\t * @param color {string}\n\t * @returns {string}\n\t */\n\t function rgbToRgba (color) {\n\t return color.replace(')', ', 0.1)').replace('(', 'a(');\n\t }\n\t\n\t /**\n\t * Converts an RGBA color to RGB\n\t * @param color {string}\n\t * @returns {string}\n\t */\n\t function rgbaToRgb (color) {\n\t return color\n\t ? color.replace('rgba', 'rgb').replace(/,[^\\),]+\\)/, ')')\n\t : 'rgb(0,0,0)';\n\t }\n\t\n\t return {\n\t rgbaToHex: rgbaToHex,\n\t hexToRgba: hexToRgba,\n\t rgbToRgba: rgbToRgba,\n\t rgbaToRgb: rgbaToRgb\n\t }\n\t}\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t\n\tMdConstantFactory.$inject = [\"$sniffer\", \"$window\", \"$document\"];angular.module('material.core')\n\t.factory('$mdConstant', MdConstantFactory);\n\t\n\t/**\n\t * Factory function that creates the grab-bag $mdConstant service.\n\t * @ngInject\n\t */\n\tfunction MdConstantFactory($sniffer, $window, $document) {\n\t\n\t var vendorPrefix = $sniffer.vendorPrefix;\n\t var isWebkit = /webkit/i.test(vendorPrefix);\n\t var SPECIAL_CHARS_REGEXP = /([:\\-_]+(.))/g;\n\t var prefixTestEl = document.createElement('div');\n\t\n\t function vendorProperty(name) {\n\t // Add a dash between the prefix and name, to be able to transform the string into camelcase.\n\t var prefixedName = vendorPrefix + '-' + name;\n\t var ucPrefix = camelCase(prefixedName);\n\t var lcPrefix = ucPrefix.charAt(0).toLowerCase() + ucPrefix.substring(1);\n\t\n\t return hasStyleProperty(name) ? name : // The current browser supports the un-prefixed property\n\t hasStyleProperty(ucPrefix) ? ucPrefix : // The current browser only supports the prefixed property.\n\t hasStyleProperty(lcPrefix) ? lcPrefix : name; // Some browsers are only supporting the prefix in lowercase.\n\t }\n\t\n\t function hasStyleProperty(property) {\n\t return angular.isDefined(prefixTestEl.style[property]);\n\t }\n\t\n\t function camelCase(input) {\n\t return input.replace(SPECIAL_CHARS_REGEXP, function(matches, separator, letter, offset) {\n\t return offset ? letter.toUpperCase() : letter;\n\t });\n\t }\n\t\n\t var self = {\n\t isInputKey : function(e) { return (e.keyCode >= 31 && e.keyCode <= 90); },\n\t isNumPadKey : function (e){ return (3 === e.location && e.keyCode >= 97 && e.keyCode <= 105); },\n\t isNavigationKey : function(e) {\n\t var kc = self.KEY_CODE, NAVIGATION_KEYS = [kc.SPACE, kc.ENTER, kc.UP_ARROW, kc.DOWN_ARROW];\n\t return (NAVIGATION_KEYS.indexOf(e.keyCode) != -1); \n\t },\n\t\n\t KEY_CODE: {\n\t COMMA: 188,\n\t SEMICOLON : 186,\n\t ENTER: 13,\n\t ESCAPE: 27,\n\t SPACE: 32,\n\t PAGE_UP: 33,\n\t PAGE_DOWN: 34,\n\t END: 35,\n\t HOME: 36,\n\t LEFT_ARROW : 37,\n\t UP_ARROW : 38,\n\t RIGHT_ARROW : 39,\n\t DOWN_ARROW : 40,\n\t TAB : 9,\n\t BACKSPACE: 8,\n\t DELETE: 46\n\t },\n\t CSS: {\n\t /* Constants */\n\t TRANSITIONEND: 'transitionend' + (isWebkit ? ' webkitTransitionEnd' : ''),\n\t ANIMATIONEND: 'animationend' + (isWebkit ? ' webkitAnimationEnd' : ''),\n\t\n\t TRANSFORM: vendorProperty('transform'),\n\t TRANSFORM_ORIGIN: vendorProperty('transformOrigin'),\n\t TRANSITION: vendorProperty('transition'),\n\t TRANSITION_DURATION: vendorProperty('transitionDuration'),\n\t ANIMATION_PLAY_STATE: vendorProperty('animationPlayState'),\n\t ANIMATION_DURATION: vendorProperty('animationDuration'),\n\t ANIMATION_NAME: vendorProperty('animationName'),\n\t ANIMATION_TIMING: vendorProperty('animationTimingFunction'),\n\t ANIMATION_DIRECTION: vendorProperty('animationDirection')\n\t },\n\t /**\n\t * As defined in core/style/variables.scss\n\t *\n\t * $layout-breakpoint-xs: 600px !default;\n\t * $layout-breakpoint-sm: 960px !default;\n\t * $layout-breakpoint-md: 1280px !default;\n\t * $layout-breakpoint-lg: 1920px !default;\n\t *\n\t */\n\t MEDIA: {\n\t 'xs' : '(max-width: 599px)' ,\n\t 'gt-xs' : '(min-width: 600px)' ,\n\t 'sm' : '(min-width: 600px) and (max-width: 959px)' ,\n\t 'gt-sm' : '(min-width: 960px)' ,\n\t 'md' : '(min-width: 960px) and (max-width: 1279px)' ,\n\t 'gt-md' : '(min-width: 1280px)' ,\n\t 'lg' : '(min-width: 1280px) and (max-width: 1919px)',\n\t 'gt-lg' : '(min-width: 1920px)' ,\n\t 'xl' : '(min-width: 1920px)' ,\n\t 'landscape' : '(orientation: landscape)' ,\n\t 'portrait' : '(orientation: portrait)' ,\n\t 'print' : 'print'\n\t },\n\t MEDIA_PRIORITY: [\n\t 'xl',\n\t 'gt-lg',\n\t 'lg',\n\t 'gt-md',\n\t 'md',\n\t 'gt-sm',\n\t 'sm',\n\t 'gt-xs',\n\t 'xs',\n\t 'landscape',\n\t 'portrait',\n\t 'print'\n\t ]\n\t };\n\t\n\t return self;\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t angular\n\t .module('material.core')\n\t .config( [\"$provide\", function($provide){\n\t $provide.decorator('$mdUtil', ['$delegate', function ($delegate){\n\t /**\n\t * Inject the iterator facade to easily support iteration and accessors\n\t * @see iterator below\n\t */\n\t $delegate.iterator = MdIterator;\n\t\n\t return $delegate;\n\t }\n\t ]);\n\t }]);\n\t\n\t /**\n\t * iterator is a list facade to easily support iteration and accessors\n\t *\n\t * @param items Array list which this iterator will enumerate\n\t * @param reloop Boolean enables iterator to consider the list as an endless reloop\n\t */\n\t function MdIterator(items, reloop) {\n\t var trueFn = function() { return true; };\n\t\n\t if (items && !angular.isArray(items)) {\n\t items = Array.prototype.slice.call(items);\n\t }\n\t\n\t reloop = !!reloop;\n\t var _items = items || [ ];\n\t\n\t // Published API\n\t return {\n\t items: getItems,\n\t count: count,\n\t\n\t inRange: inRange,\n\t contains: contains,\n\t indexOf: indexOf,\n\t itemAt: itemAt,\n\t\n\t findBy: findBy,\n\t\n\t add: add,\n\t remove: remove,\n\t\n\t first: first,\n\t last: last,\n\t next: angular.bind(null, findSubsequentItem, false),\n\t previous: angular.bind(null, findSubsequentItem, true),\n\t\n\t hasPrevious: hasPrevious,\n\t hasNext: hasNext\n\t\n\t };\n\t\n\t /**\n\t * Publish copy of the enumerable set\n\t * @returns {Array|*}\n\t */\n\t function getItems() {\n\t return [].concat(_items);\n\t }\n\t\n\t /**\n\t * Determine length of the list\n\t * @returns {Array.length|*|number}\n\t */\n\t function count() {\n\t return _items.length;\n\t }\n\t\n\t /**\n\t * Is the index specified valid\n\t * @param index\n\t * @returns {Array.length|*|number|boolean}\n\t */\n\t function inRange(index) {\n\t return _items.length && ( index > -1 ) && (index < _items.length );\n\t }\n\t\n\t /**\n\t * Can the iterator proceed to the next item in the list; relative to\n\t * the specified item.\n\t *\n\t * @param item\n\t * @returns {Array.length|*|number|boolean}\n\t */\n\t function hasNext(item) {\n\t return item ? inRange(indexOf(item) + 1) : false;\n\t }\n\t\n\t /**\n\t * Can the iterator proceed to the previous item in the list; relative to\n\t * the specified item.\n\t *\n\t * @param item\n\t * @returns {Array.length|*|number|boolean}\n\t */\n\t function hasPrevious(item) {\n\t return item ? inRange(indexOf(item) - 1) : false;\n\t }\n\t\n\t /**\n\t * Get item at specified index/position\n\t * @param index\n\t * @returns {*}\n\t */\n\t function itemAt(index) {\n\t return inRange(index) ? _items[index] : null;\n\t }\n\t\n\t /**\n\t * Find all elements matching the key/value pair\n\t * otherwise return null\n\t *\n\t * @param val\n\t * @param key\n\t *\n\t * @return array\n\t */\n\t function findBy(key, val) {\n\t return _items.filter(function(item) {\n\t return item[key] === val;\n\t });\n\t }\n\t\n\t /**\n\t * Add item to list\n\t * @param item\n\t * @param index\n\t * @returns {*}\n\t */\n\t function add(item, index) {\n\t if ( !item ) return -1;\n\t\n\t if (!angular.isNumber(index)) {\n\t index = _items.length;\n\t }\n\t\n\t _items.splice(index, 0, item);\n\t\n\t return indexOf(item);\n\t }\n\t\n\t /**\n\t * Remove item from list...\n\t * @param item\n\t */\n\t function remove(item) {\n\t if ( contains(item) ){\n\t _items.splice(indexOf(item), 1);\n\t }\n\t }\n\t\n\t /**\n\t * Get the zero-based index of the target item\n\t * @param item\n\t * @returns {*}\n\t */\n\t function indexOf(item) {\n\t return _items.indexOf(item);\n\t }\n\t\n\t /**\n\t * Boolean existence check\n\t * @param item\n\t * @returns {boolean}\n\t */\n\t function contains(item) {\n\t return item && (indexOf(item) > -1);\n\t }\n\t\n\t /**\n\t * Return first item in the list\n\t * @returns {*}\n\t */\n\t function first() {\n\t return _items.length ? _items[0] : null;\n\t }\n\t\n\t /**\n\t * Return last item in the list...\n\t * @returns {*}\n\t */\n\t function last() {\n\t return _items.length ? _items[_items.length - 1] : null;\n\t }\n\t\n\t /**\n\t * Find the next item. If reloop is true and at the end of the list, it will go back to the\n\t * first item. If given, the `validate` callback will be used to determine whether the next item\n\t * is valid. If not valid, it will try to find the next item again.\n\t *\n\t * @param {boolean} backwards Specifies the direction of searching (forwards/backwards)\n\t * @param {*} item The item whose subsequent item we are looking for\n\t * @param {Function=} validate The `validate` function\n\t * @param {integer=} limit The recursion limit\n\t *\n\t * @returns {*} The subsequent item or null\n\t */\n\t function findSubsequentItem(backwards, item, validate, limit) {\n\t validate = validate || trueFn;\n\t\n\t var curIndex = indexOf(item);\n\t while (true) {\n\t if (!inRange(curIndex)) return null;\n\t\n\t var nextIndex = curIndex + (backwards ? -1 : 1);\n\t var foundItem = null;\n\t if (inRange(nextIndex)) {\n\t foundItem = _items[nextIndex];\n\t } else if (reloop) {\n\t foundItem = backwards ? last() : first();\n\t nextIndex = indexOf(foundItem);\n\t }\n\t\n\t if ((foundItem === null) || (nextIndex === limit)) return null;\n\t if (validate(foundItem)) return foundItem;\n\t\n\t if (angular.isUndefined(limit)) limit = nextIndex;\n\t\n\t curIndex = nextIndex;\n\t }\n\t }\n\t }\n\t\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t\n\tmdMediaFactory.$inject = [\"$mdConstant\", \"$rootScope\", \"$window\"];angular.module('material.core')\n\t.factory('$mdMedia', mdMediaFactory);\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdMedia\n\t * @module material.core\n\t *\n\t * @description\n\t * `$mdMedia` is used to evaluate whether a given media query is true or false given the\n\t * current device's screen / window size. The media query will be re-evaluated on resize, allowing\n\t * you to register a watch.\n\t *\n\t * `$mdMedia` also has pre-programmed support for media queries that match the layout breakpoints:\n\t *\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t *
BreakpointmediaQuery
xs(max-width: 599px)
gt-xs(min-width: 600px)
sm(min-width: 600px) and (max-width: 959px)
gt-sm(min-width: 960px)
md(min-width: 960px) and (max-width: 1279px)
gt-md(min-width: 1280px)
lg(min-width: 1280px) and (max-width: 1919px)
gt-lg(min-width: 1920px)
xl(min-width: 1920px)
landscapelandscape
portraitportrait
printprint
\n\t *\n\t * See Material Design's Layout - Adaptive UI for more details.\n\t *\n\t * \n\t * \n\t * \n\t *\n\t * @returns {boolean} a boolean representing whether or not the given media query is true or false.\n\t *\n\t * @usage\n\t * \n\t * app.controller('MyController', function($mdMedia, $scope) {\n\t * $scope.$watch(function() { return $mdMedia('lg'); }, function(big) {\n\t * $scope.bigScreen = big;\n\t * });\n\t *\n\t * $scope.screenIsSmall = $mdMedia('sm');\n\t * $scope.customQuery = $mdMedia('(min-width: 1234px)');\n\t * $scope.anotherCustom = $mdMedia('max-width: 300px');\n\t * });\n\t * \n\t */\n\t\n\t/* @ngInject */\n\tfunction mdMediaFactory($mdConstant, $rootScope, $window) {\n\t var queries = {};\n\t var mqls = {};\n\t var results = {};\n\t var normalizeCache = {};\n\t\n\t $mdMedia.getResponsiveAttribute = getResponsiveAttribute;\n\t $mdMedia.getQuery = getQuery;\n\t $mdMedia.watchResponsiveAttributes = watchResponsiveAttributes;\n\t\n\t return $mdMedia;\n\t\n\t function $mdMedia(query) {\n\t var validated = queries[query];\n\t if (angular.isUndefined(validated)) {\n\t validated = queries[query] = validate(query);\n\t }\n\t\n\t var result = results[validated];\n\t if (angular.isUndefined(result)) {\n\t result = add(validated);\n\t }\n\t\n\t return result;\n\t }\n\t\n\t function validate(query) {\n\t return $mdConstant.MEDIA[query] ||\n\t ((query.charAt(0) !== '(') ? ('(' + query + ')') : query);\n\t }\n\t\n\t function add(query) {\n\t var result = mqls[query];\n\t if ( !result ) {\n\t result = mqls[query] = $window.matchMedia(query);\n\t }\n\t\n\t result.addListener(onQueryChange);\n\t return (results[result.media] = !!result.matches);\n\t }\n\t\n\t function onQueryChange(query) {\n\t $rootScope.$evalAsync(function() {\n\t results[query.media] = !!query.matches;\n\t });\n\t }\n\t\n\t function getQuery(name) {\n\t return mqls[name];\n\t }\n\t\n\t function getResponsiveAttribute(attrs, attrName) {\n\t for (var i = 0; i < $mdConstant.MEDIA_PRIORITY.length; i++) {\n\t var mediaName = $mdConstant.MEDIA_PRIORITY[i];\n\t if (!mqls[queries[mediaName]].matches) {\n\t continue;\n\t }\n\t\n\t var normalizedName = getNormalizedName(attrs, attrName + '-' + mediaName);\n\t if (attrs[normalizedName]) {\n\t return attrs[normalizedName];\n\t }\n\t }\n\t\n\t // fallback on unprefixed\n\t return attrs[getNormalizedName(attrs, attrName)];\n\t }\n\t\n\t function watchResponsiveAttributes(attrNames, attrs, watchFn) {\n\t var unwatchFns = [];\n\t attrNames.forEach(function(attrName) {\n\t var normalizedName = getNormalizedName(attrs, attrName);\n\t if (angular.isDefined(attrs[normalizedName])) {\n\t unwatchFns.push(\n\t attrs.$observe(normalizedName, angular.bind(void 0, watchFn, null)));\n\t }\n\t\n\t for (var mediaName in $mdConstant.MEDIA) {\n\t normalizedName = getNormalizedName(attrs, attrName + '-' + mediaName);\n\t if (angular.isDefined(attrs[normalizedName])) {\n\t unwatchFns.push(\n\t attrs.$observe(normalizedName, angular.bind(void 0, watchFn, mediaName)));\n\t }\n\t }\n\t });\n\t\n\t return function unwatch() {\n\t unwatchFns.forEach(function(fn) { fn(); })\n\t };\n\t }\n\t\n\t // Improves performance dramatically\n\t function getNormalizedName(attrs, attrName) {\n\t return normalizeCache[attrName] ||\n\t (normalizeCache[attrName] = attrs.$normalize(attrName));\n\t }\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\tangular\n\t .module('material.core')\n\t .config( [\"$provide\", function($provide) {\n\t $provide.decorator('$mdUtil', ['$delegate', function ($delegate) {\n\t\n\t // Inject the prefixer into our original $mdUtil service.\n\t $delegate.prefixer = MdPrefixer;\n\t\n\t return $delegate;\n\t }]);\n\t }]);\n\t\n\tfunction MdPrefixer(initialAttributes, buildSelector) {\n\t var PREFIXES = ['data', 'x'];\n\t\n\t if (initialAttributes) {\n\t // The prefixer also accepts attributes as a parameter, and immediately builds a list or selector for\n\t // the specified attributes.\n\t return buildSelector ? _buildSelector(initialAttributes) : _buildList(initialAttributes);\n\t }\n\t\n\t return {\n\t buildList: _buildList,\n\t buildSelector: _buildSelector,\n\t hasAttribute: _hasAttribute,\n\t removeAttribute: _removeAttribute\n\t };\n\t\n\t function _buildList(attributes) {\n\t attributes = angular.isArray(attributes) ? attributes : [attributes];\n\t\n\t attributes.forEach(function(item) {\n\t PREFIXES.forEach(function(prefix) {\n\t attributes.push(prefix + '-' + item);\n\t });\n\t });\n\t\n\t return attributes;\n\t }\n\t\n\t function _buildSelector(attributes) {\n\t attributes = angular.isArray(attributes) ? attributes : [attributes];\n\t\n\t return _buildList(attributes)\n\t .map(function(item) {\n\t return '[' + item + ']'\n\t })\n\t .join(',');\n\t }\n\t\n\t function _hasAttribute(element, attribute) {\n\t element = _getNativeElement(element);\n\t\n\t if (!element) {\n\t return false;\n\t }\n\t\n\t var prefixedAttrs = _buildList(attribute);\n\t\n\t for (var i = 0; i < prefixedAttrs.length; i++) {\n\t if (element.hasAttribute(prefixedAttrs[i])) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t }\n\t\n\t function _removeAttribute(element, attribute) {\n\t element = _getNativeElement(element);\n\t\n\t if (!element) {\n\t return;\n\t }\n\t\n\t _buildList(attribute).forEach(function(prefixedAttribute) {\n\t element.removeAttribute(prefixedAttribute);\n\t });\n\t }\n\t\n\t /**\n\t * Transforms a jqLite or DOM element into a HTML element.\n\t * This is useful when supporting jqLite elements and DOM elements at\n\t * same time.\n\t * @param element {JQLite|Element} Element to be parsed\n\t * @returns {HTMLElement} Parsed HTMLElement\n\t */\n\t function _getNativeElement(element) {\n\t element = element[0] || element;\n\t\n\t if (element.nodeType) {\n\t return element;\n\t }\n\t }\n\t\n\t}\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/*\n\t * This var has to be outside the angular factory, otherwise when\n\t * there are multiple material apps on the same page, each app\n\t * will create its own instance of this array and the app's IDs\n\t * will not be unique.\n\t */\n\tUtilFactory.$inject = [\"$document\", \"$timeout\", \"$compile\", \"$rootScope\", \"$$mdAnimate\", \"$interpolate\", \"$log\", \"$rootElement\", \"$window\", \"$$rAF\"];\n\tvar nextUniqueId = 0;\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.core.util\n\t * @description\n\t * Util\n\t */\n\tangular\n\t .module('material.core')\n\t .factory('$mdUtil', UtilFactory);\n\t\n\t/**\n\t * @ngInject\n\t */\n\tfunction UtilFactory($document, $timeout, $compile, $rootScope, $$mdAnimate, $interpolate, $log, $rootElement, $window, $$rAF) {\n\t // Setup some core variables for the processTemplate method\n\t var startSymbol = $interpolate.startSymbol(),\n\t endSymbol = $interpolate.endSymbol(),\n\t usesStandardSymbols = ((startSymbol === '{{') && (endSymbol === '}}'));\n\t\n\t /**\n\t * Checks if the target element has the requested style by key\n\t * @param {DOMElement|JQLite} target Target element\n\t * @param {string} key Style key\n\t * @param {string=} expectedVal Optional expected value\n\t * @returns {boolean} Whether the target element has the style or not\n\t */\n\t var hasComputedStyle = function (target, key, expectedVal) {\n\t var hasValue = false;\n\t\n\t if ( target && target.length ) {\n\t var computedStyles = $window.getComputedStyle(target[0]);\n\t hasValue = angular.isDefined(computedStyles[key]) && (expectedVal ? computedStyles[key] == expectedVal : true);\n\t }\n\t\n\t return hasValue;\n\t };\n\t\n\t function validateCssValue(value) {\n\t return !value ? '0' :\n\t hasPx(value) || hasPercent(value) ? value : value + 'px';\n\t }\n\t\n\t function hasPx(value) {\n\t return String(value).indexOf('px') > -1;\n\t }\n\t\n\t function hasPercent(value) {\n\t return String(value).indexOf('%') > -1;\n\t\n\t }\n\t\n\t var $mdUtil = {\n\t dom: {},\n\t now: window.performance ?\n\t angular.bind(window.performance, window.performance.now) : Date.now || function() {\n\t return new Date().getTime();\n\t },\n\t\n\t /**\n\t * Bi-directional accessor/mutator used to easily update an element's\n\t * property based on the current 'dir'ectional value.\n\t */\n\t bidi : function(element, property, lValue, rValue) {\n\t var ltr = !($document[0].dir == 'rtl' || $document[0].body.dir == 'rtl');\n\t\n\t // If accessor\n\t if ( arguments.length == 0 ) return ltr ? 'ltr' : 'rtl';\n\t\n\t // If mutator\n\t var elem = angular.element(element);\n\t\n\t if ( ltr && angular.isDefined(lValue)) {\n\t elem.css(property, validateCssValue(lValue));\n\t }\n\t else if ( !ltr && angular.isDefined(rValue)) {\n\t elem.css(property, validateCssValue(rValue) );\n\t }\n\t },\n\t\n\t bidiProperty: function (element, lProperty, rProperty, value) {\n\t var ltr = !($document[0].dir == 'rtl' || $document[0].body.dir == 'rtl');\n\t\n\t var elem = angular.element(element);\n\t\n\t if ( ltr && angular.isDefined(lProperty)) {\n\t elem.css(lProperty, validateCssValue(value));\n\t elem.css(rProperty, '');\n\t }\n\t else if ( !ltr && angular.isDefined(rProperty)) {\n\t elem.css(rProperty, validateCssValue(value) );\n\t elem.css(lProperty, '');\n\t }\n\t },\n\t\n\t clientRect: function(element, offsetParent, isOffsetRect) {\n\t var node = getNode(element);\n\t offsetParent = getNode(offsetParent || node.offsetParent || document.body);\n\t var nodeRect = node.getBoundingClientRect();\n\t\n\t // The user can ask for an offsetRect: a rect relative to the offsetParent,\n\t // or a clientRect: a rect relative to the page\n\t var offsetRect = isOffsetRect ?\n\t offsetParent.getBoundingClientRect() :\n\t {left: 0, top: 0, width: 0, height: 0};\n\t return {\n\t left: nodeRect.left - offsetRect.left,\n\t top: nodeRect.top - offsetRect.top,\n\t width: nodeRect.width,\n\t height: nodeRect.height\n\t };\n\t },\n\t offsetRect: function(element, offsetParent) {\n\t return $mdUtil.clientRect(element, offsetParent, true);\n\t },\n\t\n\t // Annoying method to copy nodes to an array, thanks to IE\n\t nodesToArray: function(nodes) {\n\t nodes = nodes || [];\n\t\n\t var results = [];\n\t for (var i = 0; i < nodes.length; ++i) {\n\t results.push(nodes.item(i));\n\t }\n\t return results;\n\t },\n\t\n\t /**\n\t * Calculate the positive scroll offset\n\t * TODO: Check with pinch-zoom in IE/Chrome;\n\t * https://code.google.com/p/chromium/issues/detail?id=496285\n\t */\n\t scrollTop: function(element) {\n\t element = angular.element(element || $document[0].body);\n\t\n\t var body = (element[0] == $document[0].body) ? $document[0].body : undefined;\n\t var scrollTop = body ? body.scrollTop + body.parentElement.scrollTop : 0;\n\t\n\t // Calculate the positive scroll offset\n\t return scrollTop || Math.abs(element[0].getBoundingClientRect().top);\n\t },\n\t\n\t /**\n\t * Finds the proper focus target by searching the DOM.\n\t *\n\t * @param containerEl\n\t * @param attributeVal\n\t * @returns {*}\n\t */\n\t findFocusTarget: function(containerEl, attributeVal) {\n\t var AUTO_FOCUS = this.prefixer('md-autofocus', true);\n\t var elToFocus;\n\t\n\t elToFocus = scanForFocusable(containerEl, attributeVal || AUTO_FOCUS);\n\t\n\t if ( !elToFocus && attributeVal != AUTO_FOCUS) {\n\t // Scan for deprecated attribute\n\t elToFocus = scanForFocusable(containerEl, this.prefixer('md-auto-focus', true));\n\t\n\t if ( !elToFocus ) {\n\t // Scan for fallback to 'universal' API\n\t elToFocus = scanForFocusable(containerEl, AUTO_FOCUS);\n\t }\n\t }\n\t\n\t return elToFocus;\n\t\n\t /**\n\t * Can target and nested children for specified Selector (attribute)\n\t * whose value may be an expression that evaluates to True/False.\n\t */\n\t function scanForFocusable(target, selector) {\n\t var elFound, items = target[0].querySelectorAll(selector);\n\t\n\t // Find the last child element with the focus attribute\n\t if ( items && items.length ){\n\t items.length && angular.forEach(items, function(it) {\n\t it = angular.element(it);\n\t\n\t // Check the element for the md-autofocus class to ensure any associated expression\n\t // evaluated to true.\n\t var isFocusable = it.hasClass('md-autofocus');\n\t if (isFocusable) elFound = it;\n\t });\n\t }\n\t return elFound;\n\t }\n\t },\n\t\n\t /**\n\t * Disables scroll around the passed parent element.\n\t * @param element Unused\n\t * @param {!Element|!angular.JQLite} parent Element to disable scrolling within.\n\t * Defaults to body if none supplied.\n\t * @param options Object of options to modify functionality\n\t * - disableScrollMask Boolean of whether or not to create a scroll mask element or\n\t * use the passed parent element.\n\t */\n\t disableScrollAround: function(element, parent, options) {\n\t $mdUtil.disableScrollAround._count = $mdUtil.disableScrollAround._count || 0;\n\t ++$mdUtil.disableScrollAround._count;\n\t if ($mdUtil.disableScrollAround._enableScrolling) return $mdUtil.disableScrollAround._enableScrolling;\n\t var body = $document[0].body,\n\t restoreBody = disableBodyScroll(),\n\t restoreElement = disableElementScroll(parent);\n\t\n\t return $mdUtil.disableScrollAround._enableScrolling = function() {\n\t if (!--$mdUtil.disableScrollAround._count) {\n\t restoreBody();\n\t restoreElement();\n\t delete $mdUtil.disableScrollAround._enableScrolling;\n\t }\n\t };\n\t\n\t // Creates a virtual scrolling mask to absorb touchmove, keyboard, scrollbar clicking, and wheel events\n\t function disableElementScroll(element) {\n\t element = angular.element(element || body);\n\t var scrollMask;\n\t if (options && options.disableScrollMask) {\n\t scrollMask = element;\n\t } else {\n\t element = element[0];\n\t scrollMask = angular.element(\n\t '
' +\n\t '
' +\n\t '
');\n\t element.appendChild(scrollMask[0]);\n\t }\n\t\n\t scrollMask.on('wheel', preventDefault);\n\t scrollMask.on('touchmove', preventDefault);\n\t\n\t return function restoreScroll() {\n\t scrollMask.off('wheel');\n\t scrollMask.off('touchmove');\n\t scrollMask[0].parentNode.removeChild(scrollMask[0]);\n\t delete $mdUtil.disableScrollAround._enableScrolling;\n\t };\n\t\n\t function preventDefault(e) {\n\t e.preventDefault();\n\t }\n\t }\n\t\n\t // Converts the body to a position fixed block and translate it to the proper scroll position\n\t function disableBodyScroll() {\n\t var htmlNode = body.parentNode;\n\t var restoreHtmlStyle = htmlNode.style.cssText || '';\n\t var restoreBodyStyle = body.style.cssText || '';\n\t var scrollOffset = $mdUtil.scrollTop(body);\n\t var clientWidth = body.clientWidth;\n\t\n\t if (body.scrollHeight > body.clientHeight + 1) {\n\t applyStyles(body, {\n\t position: 'fixed',\n\t width: '100%',\n\t top: -scrollOffset + 'px'\n\t });\n\t\n\t htmlNode.style.overflowY = 'scroll';\n\t }\n\t\n\t if (body.clientWidth < clientWidth) applyStyles(body, {overflow: 'hidden'});\n\t\n\t return function restoreScroll() {\n\t body.style.cssText = restoreBodyStyle;\n\t htmlNode.style.cssText = restoreHtmlStyle;\n\t body.scrollTop = scrollOffset;\n\t htmlNode.scrollTop = scrollOffset;\n\t };\n\t }\n\t\n\t function applyStyles(el, styles) {\n\t for (var key in styles) {\n\t el.style[key] = styles[key];\n\t }\n\t }\n\t },\n\t enableScrolling: function() {\n\t var method = this.disableScrollAround._enableScrolling;\n\t method && method();\n\t },\n\t floatingScrollbars: function() {\n\t if (this.floatingScrollbars.cached === undefined) {\n\t var tempNode = angular.element('
').css({\n\t width: '100%',\n\t 'z-index': -1,\n\t position: 'absolute',\n\t height: '35px',\n\t 'overflow-y': 'scroll'\n\t });\n\t tempNode.children().css('height', '60px');\n\t\n\t $document[0].body.appendChild(tempNode[0]);\n\t this.floatingScrollbars.cached = (tempNode[0].offsetWidth == tempNode[0].childNodes[0].offsetWidth);\n\t tempNode.remove();\n\t }\n\t return this.floatingScrollbars.cached;\n\t },\n\t\n\t // Mobile safari only allows you to set focus in click event listeners...\n\t forceFocus: function(element) {\n\t var node = element[0] || element;\n\t\n\t document.addEventListener('click', function focusOnClick(ev) {\n\t if (ev.target === node && ev.$focus) {\n\t node.focus();\n\t ev.stopImmediatePropagation();\n\t ev.preventDefault();\n\t node.removeEventListener('click', focusOnClick);\n\t }\n\t }, true);\n\t\n\t var newEvent = document.createEvent('MouseEvents');\n\t newEvent.initMouseEvent('click', false, true, window, {}, 0, 0, 0, 0,\n\t false, false, false, false, 0, null);\n\t newEvent.$material = true;\n\t newEvent.$focus = true;\n\t node.dispatchEvent(newEvent);\n\t },\n\t\n\t /**\n\t * facade to build md-backdrop element with desired styles\n\t * NOTE: Use $compile to trigger backdrop postLink function\n\t */\n\t createBackdrop: function(scope, addClass) {\n\t return $compile($mdUtil.supplant('', [addClass]))(scope);\n\t },\n\t\n\t /**\n\t * supplant() method from Crockford's `Remedial Javascript`\n\t * Equivalent to use of $interpolate; without dependency on\n\t * interpolation symbols and scope. Note: the '{}' can\n\t * be property names, property chains, or array indices.\n\t */\n\t supplant: function(template, values, pattern) {\n\t pattern = pattern || /\\{([^\\{\\}]*)\\}/g;\n\t return template.replace(pattern, function(a, b) {\n\t var p = b.split('.'),\n\t r = values;\n\t try {\n\t for (var s in p) {\n\t if (p.hasOwnProperty(s) ) {\n\t r = r[p[s]];\n\t }\n\t }\n\t } catch (e) {\n\t r = a;\n\t }\n\t return (typeof r === 'string' || typeof r === 'number') ? r : a;\n\t });\n\t },\n\t\n\t fakeNgModel: function() {\n\t return {\n\t $fake: true,\n\t $setTouched: angular.noop,\n\t $setViewValue: function(value) {\n\t this.$viewValue = value;\n\t this.$render(value);\n\t this.$viewChangeListeners.forEach(function(cb) {\n\t cb();\n\t });\n\t },\n\t $isEmpty: function(value) {\n\t return ('' + value).length === 0;\n\t },\n\t $parsers: [],\n\t $formatters: [],\n\t $viewChangeListeners: [],\n\t $render: angular.noop\n\t };\n\t },\n\t\n\t // Returns a function, that, as long as it continues to be invoked, will not\n\t // be triggered. The function will be called after it stops being called for\n\t // N milliseconds.\n\t // @param wait Integer value of msecs to delay (since last debounce reset); default value 10 msecs\n\t // @param invokeApply should the $timeout trigger $digest() dirty checking\n\t debounce: function(func, wait, scope, invokeApply) {\n\t var timer;\n\t\n\t return function debounced() {\n\t var context = scope,\n\t args = Array.prototype.slice.call(arguments);\n\t\n\t $timeout.cancel(timer);\n\t timer = $timeout(function() {\n\t\n\t timer = undefined;\n\t func.apply(context, args);\n\t\n\t }, wait || 10, invokeApply);\n\t };\n\t },\n\t\n\t // Returns a function that can only be triggered every `delay` milliseconds.\n\t // In other words, the function will not be called unless it has been more\n\t // than `delay` milliseconds since the last call.\n\t throttle: function throttle(func, delay) {\n\t var recent;\n\t return function throttled() {\n\t var context = this;\n\t var args = arguments;\n\t var now = $mdUtil.now();\n\t\n\t if (!recent || (now - recent > delay)) {\n\t func.apply(context, args);\n\t recent = now;\n\t }\n\t };\n\t },\n\t\n\t /**\n\t * Measures the number of milliseconds taken to run the provided callback\n\t * function. Uses a high-precision timer if available.\n\t */\n\t time: function time(cb) {\n\t var start = $mdUtil.now();\n\t cb();\n\t return $mdUtil.now() - start;\n\t },\n\t\n\t /**\n\t * Create an implicit getter that caches its `getter()`\n\t * lookup value\n\t */\n\t valueOnUse : function (scope, key, getter) {\n\t var value = null, args = Array.prototype.slice.call(arguments);\n\t var params = (args.length > 3) ? args.slice(3) : [ ];\n\t\n\t Object.defineProperty(scope, key, {\n\t get: function () {\n\t if (value === null) value = getter.apply(scope, params);\n\t return value;\n\t }\n\t });\n\t },\n\t\n\t /**\n\t * Get a unique ID.\n\t *\n\t * @returns {string} an unique numeric string\n\t */\n\t nextUid: function() {\n\t return '' + nextUniqueId++;\n\t },\n\t\n\t // Stop watchers and events from firing on a scope without destroying it,\n\t // by disconnecting it from its parent and its siblings' linked lists.\n\t disconnectScope: function disconnectScope(scope) {\n\t if (!scope) return;\n\t\n\t // we can't destroy the root scope or a scope that has been already destroyed\n\t if (scope.$root === scope) return;\n\t if (scope.$$destroyed) return;\n\t\n\t var parent = scope.$parent;\n\t scope.$$disconnected = true;\n\t\n\t // See Scope.$destroy\n\t if (parent.$$childHead === scope) parent.$$childHead = scope.$$nextSibling;\n\t if (parent.$$childTail === scope) parent.$$childTail = scope.$$prevSibling;\n\t if (scope.$$prevSibling) scope.$$prevSibling.$$nextSibling = scope.$$nextSibling;\n\t if (scope.$$nextSibling) scope.$$nextSibling.$$prevSibling = scope.$$prevSibling;\n\t\n\t scope.$$nextSibling = scope.$$prevSibling = null;\n\t\n\t },\n\t\n\t // Undo the effects of disconnectScope above.\n\t reconnectScope: function reconnectScope(scope) {\n\t if (!scope) return;\n\t\n\t // we can't disconnect the root node or scope already disconnected\n\t if (scope.$root === scope) return;\n\t if (!scope.$$disconnected) return;\n\t\n\t var child = scope;\n\t\n\t var parent = child.$parent;\n\t child.$$disconnected = false;\n\t // See Scope.$new for this logic...\n\t child.$$prevSibling = parent.$$childTail;\n\t if (parent.$$childHead) {\n\t parent.$$childTail.$$nextSibling = child;\n\t parent.$$childTail = child;\n\t } else {\n\t parent.$$childHead = parent.$$childTail = child;\n\t }\n\t },\n\t\n\t /*\n\t * getClosest replicates jQuery.closest() to walk up the DOM tree until it finds a matching nodeName\n\t *\n\t * @param el Element to start walking the DOM from\n\t * @param check Either a string or a function. If a string is passed, it will be evaluated against\n\t * each of the parent nodes' tag name. If a function is passed, the loop will call it with each of\n\t * the parents and will use the return value to determine whether the node is a match.\n\t * @param onlyParent Only start checking from the parent element, not `el`.\n\t */\n\t getClosest: function getClosest(el, validateWith, onlyParent) {\n\t if ( angular.isString(validateWith) ) {\n\t var tagName = validateWith.toUpperCase();\n\t validateWith = function(el) {\n\t return el.nodeName === tagName;\n\t };\n\t }\n\t\n\t if (el instanceof angular.element) el = el[0];\n\t if (onlyParent) el = el.parentNode;\n\t if (!el) return null;\n\t\n\t do {\n\t if (validateWith(el)) {\n\t return el;\n\t }\n\t } while (el = el.parentNode);\n\t\n\t return null;\n\t },\n\t\n\t /**\n\t * Build polyfill for the Node.contains feature (if needed)\n\t */\n\t elementContains: function(node, child) {\n\t var hasContains = (window.Node && window.Node.prototype && Node.prototype.contains);\n\t var findFn = hasContains ? angular.bind(node, node.contains) : angular.bind(node, function(arg) {\n\t // compares the positions of two nodes and returns a bitmask\n\t return (node === child) || !!(this.compareDocumentPosition(arg) & 16)\n\t });\n\t\n\t return findFn(child);\n\t },\n\t\n\t /**\n\t * Functional equivalent for $element.filter(‘md-bottom-sheet’)\n\t * useful with interimElements where the element and its container are important...\n\t *\n\t * @param {[]} elements to scan\n\t * @param {string} name of node to find (e.g. 'md-dialog')\n\t * @param {boolean=} optional flag to allow deep scans; defaults to 'false'.\n\t * @param {boolean=} optional flag to enable log warnings; defaults to false\n\t */\n\t extractElementByName: function(element, nodeName, scanDeep, warnNotFound) {\n\t var found = scanTree(element);\n\t if (!found && !!warnNotFound) {\n\t $log.warn( $mdUtil.supplant(\"Unable to find node '{0}' in element '{1}'.\",[nodeName, element[0].outerHTML]) );\n\t }\n\t\n\t return angular.element(found || element);\n\t\n\t /**\n\t * Breadth-First tree scan for element with matching `nodeName`\n\t */\n\t function scanTree(element) {\n\t return scanLevel(element) || (!!scanDeep ? scanChildren(element) : null);\n\t }\n\t\n\t /**\n\t * Case-insensitive scan of current elements only (do not descend).\n\t */\n\t function scanLevel(element) {\n\t if ( element ) {\n\t for (var i = 0, len = element.length; i < len; i++) {\n\t if (element[i].nodeName.toLowerCase() === nodeName) {\n\t return element[i];\n\t }\n\t }\n\t }\n\t return null;\n\t }\n\t\n\t /**\n\t * Scan children of specified node\n\t */\n\t function scanChildren(element) {\n\t var found;\n\t if ( element ) {\n\t for (var i = 0, len = element.length; i < len; i++) {\n\t var target = element[i];\n\t if ( !found ) {\n\t for (var j = 0, numChild = target.childNodes.length; j < numChild; j++) {\n\t found = found || scanTree([target.childNodes[j]]);\n\t }\n\t }\n\t }\n\t }\n\t return found;\n\t }\n\t\n\t },\n\t\n\t /**\n\t * Give optional properties with no value a boolean true if attr provided or false otherwise\n\t */\n\t initOptionalProperties: function(scope, attr, defaults) {\n\t defaults = defaults || {};\n\t angular.forEach(scope.$$isolateBindings, function(binding, key) {\n\t if (binding.optional && angular.isUndefined(scope[key])) {\n\t var attrIsDefined = angular.isDefined(attr[binding.attrName]);\n\t scope[key] = angular.isDefined(defaults[key]) ? defaults[key] : attrIsDefined;\n\t }\n\t });\n\t },\n\t\n\t /**\n\t * Alternative to $timeout calls with 0 delay.\n\t * nextTick() coalesces all calls within a single frame\n\t * to minimize $digest thrashing\n\t *\n\t * @param callback\n\t * @param digest\n\t * @returns {*}\n\t */\n\t nextTick: function(callback, digest, scope) {\n\t //-- grab function reference for storing state details\n\t var nextTick = $mdUtil.nextTick;\n\t var timeout = nextTick.timeout;\n\t var queue = nextTick.queue || [];\n\t\n\t //-- add callback to the queue\n\t queue.push({scope: scope, callback: callback});\n\t\n\t //-- set default value for digest\n\t if (digest == null) digest = true;\n\t\n\t //-- store updated digest/queue values\n\t nextTick.digest = nextTick.digest || digest;\n\t nextTick.queue = queue;\n\t\n\t //-- either return existing timeout or create a new one\n\t return timeout || (nextTick.timeout = $timeout(processQueue, 0, false));\n\t\n\t /**\n\t * Grab a copy of the current queue\n\t * Clear the queue for future use\n\t * Process the existing queue\n\t * Trigger digest if necessary\n\t */\n\t function processQueue() {\n\t var queue = nextTick.queue;\n\t var digest = nextTick.digest;\n\t\n\t nextTick.queue = [];\n\t nextTick.timeout = null;\n\t nextTick.digest = false;\n\t\n\t queue.forEach(function(queueItem) {\n\t var skip = queueItem.scope && queueItem.scope.$$destroyed;\n\t if (!skip) {\n\t queueItem.callback();\n\t }\n\t });\n\t\n\t if (digest) $rootScope.$digest();\n\t }\n\t },\n\t\n\t /**\n\t * Processes a template and replaces the start/end symbols if the application has\n\t * overriden them.\n\t *\n\t * @param template The template to process whose start/end tags may be replaced.\n\t * @returns {*}\n\t */\n\t processTemplate: function(template) {\n\t if (usesStandardSymbols) {\n\t return template;\n\t } else {\n\t if (!template || !angular.isString(template)) return template;\n\t return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n\t }\n\t },\n\t\n\t /**\n\t * Scan up dom hierarchy for enabled parent;\n\t */\n\t getParentWithPointerEvents: function (element) {\n\t var parent = element.parent();\n\t\n\t // jqLite might return a non-null, but still empty, parent; so check for parent and length\n\t while (hasComputedStyle(parent, 'pointer-events', 'none')) {\n\t parent = parent.parent();\n\t }\n\t\n\t return parent;\n\t },\n\t\n\t getNearestContentElement: function (element) {\n\t var current = element.parent()[0];\n\t // Look for the nearest parent md-content, stopping at the rootElement.\n\t while (current && current !== $rootElement[0] && current !== document.body && current.nodeName.toUpperCase() !== 'MD-CONTENT') {\n\t current = current.parentNode;\n\t }\n\t return current;\n\t },\n\t\n\t /**\n\t * Checks if the current browser is natively supporting the `sticky` position.\n\t * @returns {string} supported sticky property name\n\t */\n\t checkStickySupport: function() {\n\t var stickyProp;\n\t var testEl = angular.element('
');\n\t $document[0].body.appendChild(testEl[0]);\n\t\n\t var stickyProps = ['sticky', '-webkit-sticky'];\n\t for (var i = 0; i < stickyProps.length; ++i) {\n\t testEl.css({\n\t position: stickyProps[i],\n\t top: 0,\n\t 'z-index': 2\n\t });\n\t\n\t if (testEl.css('position') == stickyProps[i]) {\n\t stickyProp = stickyProps[i];\n\t break;\n\t }\n\t }\n\t\n\t testEl.remove();\n\t\n\t return stickyProp;\n\t },\n\t\n\t /**\n\t * Parses an attribute value, mostly a string.\n\t * By default checks for negated values and returns `false´ if present.\n\t * Negated values are: (native falsy) and negative strings like:\n\t * `false` or `0`.\n\t * @param value Attribute value which should be parsed.\n\t * @param negatedCheck When set to false, won't check for negated values.\n\t * @returns {boolean}\n\t */\n\t parseAttributeBoolean: function(value, negatedCheck) {\n\t return value === '' || !!value && (negatedCheck === false || value !== 'false' && value !== '0');\n\t },\n\t\n\t hasComputedStyle: hasComputedStyle,\n\t\n\t /**\n\t * Returns true if the parent form of the element has been submitted.\n\t *\n\t * @param element An Angular or HTML5 element.\n\t *\n\t * @returns {boolean}\n\t */\n\t isParentFormSubmitted: function(element) {\n\t var parent = $mdUtil.getClosest(element, 'form');\n\t var form = parent ? angular.element(parent).controller('form') : null;\n\t\n\t return form ? form.$submitted : false;\n\t },\n\t\n\t /**\n\t * Animate the requested element's scrollTop to the requested scrollPosition with basic easing.\n\t *\n\t * @param element The element to scroll.\n\t * @param scrollEnd The new/final scroll position.\n\t */\n\t animateScrollTo: function(element, scrollEnd) {\n\t var scrollStart = element.scrollTop;\n\t var scrollChange = scrollEnd - scrollStart;\n\t var scrollingDown = scrollStart < scrollEnd;\n\t var startTime = $mdUtil.now();\n\t\n\t $$rAF(scrollChunk);\n\t\n\t function scrollChunk() {\n\t var newPosition = calculateNewPosition();\n\t \n\t element.scrollTop = newPosition;\n\t \n\t if (scrollingDown ? newPosition < scrollEnd : newPosition > scrollEnd) {\n\t $$rAF(scrollChunk);\n\t }\n\t }\n\t \n\t function calculateNewPosition() {\n\t var duration = 1000;\n\t var currentTime = $mdUtil.now() - startTime;\n\t \n\t return ease(currentTime, scrollStart, scrollChange, duration);\n\t }\n\t\n\t function ease(currentTime, start, change, duration) {\n\t // If the duration has passed (which can occur if our app loses focus due to $$rAF), jump\n\t // straight to the proper position\n\t if (currentTime > duration) {\n\t return start + change;\n\t }\n\t \n\t var ts = (currentTime /= duration) * currentTime;\n\t var tc = ts * currentTime;\n\t\n\t return start + change * (-2 * tc + 3 * ts);\n\t }\n\t }\n\t };\n\t\n\t\n\t// Instantiate other namespace utility methods\n\t\n\t $mdUtil.dom.animator = $$mdAnimate($mdUtil);\n\t\n\t return $mdUtil;\n\t\n\t function getNode(el) {\n\t return el[0] || el;\n\t }\n\t\n\t}\n\t\n\t/*\n\t * Since removing jQuery from the demos, some code that uses `element.focus()` is broken.\n\t * We need to add `element.focus()`, because it's testable unlike `element[0].focus`.\n\t */\n\t\n\tangular.element.prototype.focus = angular.element.prototype.focus || function() {\n\t if (this.length) {\n\t this[0].focus();\n\t }\n\t return this;\n\t };\n\tangular.element.prototype.blur = angular.element.prototype.blur || function() {\n\t if (this.length) {\n\t this[0].blur();\n\t }\n\t return this;\n\t };\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.core.aria\n\t * @description\n\t * Aria Expectations for ngMaterial components.\n\t */\n\tMdAriaService.$inject = [\"$$rAF\", \"$log\", \"$window\", \"$interpolate\"];\n\tangular\n\t .module('material.core')\n\t .provider('$mdAria', MdAriaProvider);\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdAriaProvider\n\t * @module material.core.aria\n\t *\n\t * @description\n\t *\n\t * Modify options of the `$mdAria` service, which will be used by most of the Angular Material\n\t * components.\n\t *\n\t * You are able to disable `$mdAria` warnings, by using the following markup.\n\t *\n\t * \n\t * app.config(function($mdAriaProvider) {\n\t * // Globally disables all ARIA warnings.\n\t * $mdAriaProvider.disableWarnings();\n\t * });\n\t * \n\t *\n\t */\n\tfunction MdAriaProvider() {\n\t\n\t var self = this;\n\t\n\t /**\n\t * Whether we should show ARIA warnings in the console, if labels are missing on the element\n\t * By default the warnings are enabled\n\t */\n\t self.showWarnings = true;\n\t\n\t return {\n\t disableWarnings: disableWarnings,\n\t $get: [\"$$rAF\", \"$log\", \"$window\", \"$interpolate\", function($$rAF, $log, $window, $interpolate) {\n\t return MdAriaService.apply(self, arguments);\n\t }]\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $mdAriaProvider#disableWarnings\n\t * @description Disables all ARIA warnings generated by Angular Material.\n\t */\n\t function disableWarnings() {\n\t self.showWarnings = false;\n\t }\n\t}\n\t\n\t/*\n\t * @ngInject\n\t */\n\tfunction MdAriaService($$rAF, $log, $window, $interpolate) {\n\t\n\t // Load the showWarnings option from the current context and store it inside of a scope variable,\n\t // because the context will be probably lost in some function calls.\n\t var showWarnings = this.showWarnings;\n\t\n\t return {\n\t expect: expect,\n\t expectAsync: expectAsync,\n\t expectWithText: expectWithText,\n\t expectWithoutText: expectWithoutText\n\t };\n\t\n\t /**\n\t * Check if expected attribute has been specified on the target element or child\n\t * @param element\n\t * @param attrName\n\t * @param {optional} defaultValue What to set the attr to if no value is found\n\t */\n\t function expect(element, attrName, defaultValue) {\n\t\n\t var node = angular.element(element)[0] || element;\n\t\n\t // if node exists and neither it nor its children have the attribute\n\t if (node &&\n\t ((!node.hasAttribute(attrName) ||\n\t node.getAttribute(attrName).length === 0) &&\n\t !childHasAttribute(node, attrName))) {\n\t\n\t defaultValue = angular.isString(defaultValue) ? defaultValue.trim() : '';\n\t if (defaultValue.length) {\n\t element.attr(attrName, defaultValue);\n\t } else if (showWarnings) {\n\t $log.warn('ARIA: Attribute \"', attrName, '\", required for accessibility, is missing on node:', node);\n\t }\n\t\n\t }\n\t }\n\t\n\t function expectAsync(element, attrName, defaultValueGetter) {\n\t // Problem: when retrieving the element's contents synchronously to find the label,\n\t // the text may not be defined yet in the case of a binding.\n\t // There is a higher chance that a binding will be defined if we wait one frame.\n\t $$rAF(function() {\n\t expect(element, attrName, defaultValueGetter());\n\t });\n\t }\n\t\n\t function expectWithText(element, attrName) {\n\t var content = getText(element) || \"\";\n\t var hasBinding = content.indexOf($interpolate.startSymbol()) > -1;\n\t\n\t if ( hasBinding ) {\n\t expectAsync(element, attrName, function() {\n\t return getText(element);\n\t });\n\t } else {\n\t expect(element, attrName, content);\n\t }\n\t }\n\t\n\t function expectWithoutText(element, attrName) {\n\t var content = getText(element);\n\t var hasBinding = content.indexOf($interpolate.startSymbol()) > -1;\n\t\n\t if ( !hasBinding && !content) {\n\t expect(element, attrName, content);\n\t }\n\t }\n\t\n\t function getText(element) {\n\t element = element[0] || element;\n\t var walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, false);\n\t var text = '';\n\t\n\t var node;\n\t while (node = walker.nextNode()) {\n\t if (!isAriaHiddenNode(node)) {\n\t text += node.textContent;\n\t }\n\t }\n\t\n\t return text.trim() || '';\n\t\n\t function isAriaHiddenNode(node) {\n\t while (node.parentNode && (node = node.parentNode) !== element) {\n\t if (node.getAttribute && node.getAttribute('aria-hidden') === 'true') {\n\t return true;\n\t }\n\t }\n\t }\n\t }\n\t\n\t function childHasAttribute(node, attrName) {\n\t var hasChildren = node.hasChildNodes(),\n\t hasAttr = false;\n\t\n\t function isHidden(el) {\n\t var style = el.currentStyle ? el.currentStyle : $window.getComputedStyle(el);\n\t return (style.display === 'none');\n\t }\n\t\n\t if (hasChildren) {\n\t var children = node.childNodes;\n\t for (var i=0; i < children.length; i++) {\n\t var child = children[i];\n\t if (child.nodeType === 1 && child.hasAttribute(attrName)) {\n\t if (!isHidden(child)) {\n\t hasAttr = true;\n\t }\n\t }\n\t }\n\t }\n\t\n\t return hasAttr;\n\t }\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t\n\tmdCompilerService.$inject = [\"$q\", \"$templateRequest\", \"$injector\", \"$compile\", \"$controller\"];angular\n\t .module('material.core')\n\t .service('$mdCompiler', mdCompilerService);\n\t\n\tfunction mdCompilerService($q, $templateRequest, $injector, $compile, $controller) {\n\t /* jshint validthis: true */\n\t\n\t /*\n\t * @ngdoc service\n\t * @name $mdCompiler\n\t * @module material.core\n\t * @description\n\t * The $mdCompiler service is an abstraction of angular's compiler, that allows the developer\n\t * to easily compile an element with a templateUrl, controller, and locals.\n\t *\n\t * @usage\n\t * \n\t * $mdCompiler.compile({\n\t * templateUrl: 'modal.html',\n\t * controller: 'ModalCtrl',\n\t * locals: {\n\t * modal: myModalInstance;\n\t * }\n\t * }).then(function(compileData) {\n\t * compileData.element; // modal.html's template in an element\n\t * compileData.link(myScope); //attach controller & scope to element\n\t * });\n\t * \n\t */\n\t\n\t /*\n\t * @ngdoc method\n\t * @name $mdCompiler#compile\n\t * @description A helper to compile an HTML template/templateUrl with a given controller,\n\t * locals, and scope.\n\t * @param {object} options An options object, with the following properties:\n\t *\n\t * - `controller` - `{(string=|function()=}` Controller fn that should be associated with\n\t * newly created scope or the name of a registered controller if passed as a string.\n\t * - `controllerAs` - `{string=}` A controller alias name. If present the controller will be\n\t * published to scope under the `controllerAs` name.\n\t * - `template` - `{string=}` An html template as a string.\n\t * - `templateUrl` - `{string=}` A path to an html template.\n\t * - `transformTemplate` - `{function(template)=}` A function which transforms the template after\n\t * it is loaded. It will be given the template string as a parameter, and should\n\t * return a a new string representing the transformed template.\n\t * - `resolve` - `{Object.=}` - An optional map of dependencies which should\n\t * be injected into the controller. If any of these dependencies are promises, the compiler\n\t * will wait for them all to be resolved, or if one is rejected before the controller is\n\t * instantiated `compile()` will fail..\n\t * * `key` - `{string}`: a name of a dependency to be injected into the controller.\n\t * * `factory` - `{string|function}`: If `string` then it is an alias for a service.\n\t * Otherwise if function, then it is injected and the return value is treated as the\n\t * dependency. If the result is a promise, it is resolved before its value is\n\t * injected into the controller.\n\t *\n\t * @returns {object=} promise A promise, which will be resolved with a `compileData` object.\n\t * `compileData` has the following properties:\n\t *\n\t * - `element` - `{element}`: an uncompiled element matching the provided template.\n\t * - `link` - `{function(scope)}`: A link function, which, when called, will compile\n\t * the element and instantiate the provided controller (if given).\n\t * - `locals` - `{object}`: The locals which will be passed into the controller once `link` is\n\t * called. If `bindToController` is true, they will be coppied to the ctrl instead\n\t * - `bindToController` - `bool`: bind the locals to the controller, instead of passing them in.\n\t */\n\t this.compile = function(options) {\n\t var templateUrl = options.templateUrl;\n\t var template = options.template || '';\n\t var controller = options.controller;\n\t var controllerAs = options.controllerAs;\n\t var resolve = angular.extend({}, options.resolve || {});\n\t var locals = angular.extend({}, options.locals || {});\n\t var transformTemplate = options.transformTemplate || angular.identity;\n\t var bindToController = options.bindToController;\n\t\n\t // Take resolve values and invoke them.\n\t // Resolves can either be a string (value: 'MyRegisteredAngularConst'),\n\t // or an invokable 'factory' of sorts: (value: function ValueGetter($dependency) {})\n\t angular.forEach(resolve, function(value, key) {\n\t if (angular.isString(value)) {\n\t resolve[key] = $injector.get(value);\n\t } else {\n\t resolve[key] = $injector.invoke(value);\n\t }\n\t });\n\t //Add the locals, which are just straight values to inject\n\t //eg locals: { three: 3 }, will inject three into the controller\n\t angular.extend(resolve, locals);\n\t\n\t if (templateUrl) {\n\t resolve.$template = $templateRequest(templateUrl)\n\t .then(function(response) {\n\t return response;\n\t });\n\t } else {\n\t resolve.$template = $q.when(template);\n\t }\n\t\n\t // Wait for all the resolves to finish if they are promises\n\t return $q.all(resolve).then(function(locals) {\n\t\n\t var compiledData;\n\t var template = transformTemplate(locals.$template, options);\n\t var element = options.element || angular.element('
').html(template.trim()).contents();\n\t var linkFn = $compile(element);\n\t\n\t // Return a linking function that can be used later when the element is ready\n\t return compiledData = {\n\t locals: locals,\n\t element: element,\n\t link: function link(scope) {\n\t locals.$scope = scope;\n\t\n\t //Instantiate controller if it exists, because we have scope\n\t if (controller) {\n\t var invokeCtrl = $controller(controller, locals, true, controllerAs);\n\t if (bindToController) {\n\t angular.extend(invokeCtrl.instance, locals);\n\t }\n\t var ctrl = invokeCtrl();\n\t //See angular-route source for this logic\n\t element.data('$ngControllerController', ctrl);\n\t element.children().data('$ngControllerController', ctrl);\n\t\n\t // Publish reference to this controller\n\t compiledData.controller = ctrl;\n\t }\n\t return linkFn(scope);\n\t }\n\t };\n\t });\n\t\n\t };\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t\n\tMdGesture.$inject = [\"$$MdGestureHandler\", \"$$rAF\", \"$timeout\"];\n\tattachToDocument.$inject = [\"$mdGesture\", \"$$MdGestureHandler\"];var HANDLERS = {};\n\t\n\t/* The state of the current 'pointer'\n\t * The pointer represents the state of the current touch.\n\t * It contains normalized x and y coordinates from DOM events,\n\t * as well as other information abstracted from the DOM.\n\t */\n\t\n\tvar pointer, lastPointer, forceSkipClickHijack = false;\n\t\n\t/**\n\t * The position of the most recent click if that click was on a label element.\n\t * @type {{x: number, y: number}?}\n\t */\n\tvar lastLabelClickPos = null;\n\t\n\t// Used to attach event listeners once when multiple ng-apps are running.\n\tvar isInitialized = false;\n\t\n\tangular\n\t .module('material.core.gestures', [ ])\n\t .provider('$mdGesture', MdGestureProvider)\n\t .factory('$$MdGestureHandler', MdGestureHandler)\n\t .run( attachToDocument );\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdGestureProvider\n\t * @module material.core.gestures\n\t *\n\t * @description\n\t * In some scenarios on Mobile devices (without jQuery), the click events should NOT be hijacked.\n\t * `$mdGestureProvider` is used to configure the Gesture module to ignore or skip click hijacking on mobile\n\t * devices.\n\t *\n\t * \n\t * app.config(function($mdGestureProvider) {\n\t *\n\t * // For mobile devices without jQuery loaded, do not\n\t * // intercept click events during the capture phase.\n\t * $mdGestureProvider.skipClickHijack();\n\t *\n\t * });\n\t * \n\t *\n\t */\n\tfunction MdGestureProvider() { }\n\t\n\tMdGestureProvider.prototype = {\n\t\n\t // Publish access to setter to configure a variable BEFORE the\n\t // $mdGesture service is instantiated...\n\t skipClickHijack: function() {\n\t return forceSkipClickHijack = true;\n\t },\n\t\n\t /**\n\t * $get is used to build an instance of $mdGesture\n\t * @ngInject\n\t */\n\t $get : [\"$$MdGestureHandler\", \"$$rAF\", \"$timeout\", function($$MdGestureHandler, $$rAF, $timeout) {\n\t return new MdGesture($$MdGestureHandler, $$rAF, $timeout);\n\t }]\n\t};\n\t\n\t\n\t\n\t/**\n\t * MdGesture factory construction function\n\t * @ngInject\n\t */\n\tfunction MdGesture($$MdGestureHandler, $$rAF, $timeout) {\n\t var userAgent = navigator.userAgent || navigator.vendor || window.opera;\n\t var isIos = userAgent.match(/ipad|iphone|ipod/i);\n\t var isAndroid = userAgent.match(/android/i);\n\t var touchActionProperty = getTouchAction();\n\t var hasJQuery = (typeof window.jQuery !== 'undefined') && (angular.element === window.jQuery);\n\t\n\t var self = {\n\t handler: addHandler,\n\t register: register,\n\t isIos: isIos,\n\t isAndroid: isAndroid,\n\t // On mobile w/out jQuery, we normally intercept clicks. Should we skip that?\n\t isHijackingClicks: (isIos || isAndroid) && !hasJQuery && !forceSkipClickHijack\n\t };\n\t\n\t if (self.isHijackingClicks) {\n\t var maxClickDistance = 6;\n\t self.handler('click', {\n\t options: {\n\t maxDistance: maxClickDistance\n\t },\n\t onEnd: checkDistanceAndEmit('click')\n\t });\n\t\n\t self.handler('focus', {\n\t options: {\n\t maxDistance: maxClickDistance\n\t },\n\t onEnd: function(ev, pointer) {\n\t if (pointer.distance < this.state.options.maxDistance) {\n\t if (canFocus(ev.target)) {\n\t this.dispatchEvent(ev, 'focus', pointer);\n\t ev.target.focus();\n\t }\n\t }\n\t\n\t function canFocus(element) {\n\t var focusableElements = ['INPUT', 'SELECT', 'BUTTON', 'TEXTAREA', 'VIDEO', 'AUDIO'];\n\t\n\t return (element.getAttribute('tabindex') != '-1') &&\n\t !element.hasAttribute('DISABLED') &&\n\t (element.hasAttribute('tabindex') || element.hasAttribute('href') || element.isContentEditable ||\n\t (focusableElements.indexOf(element.nodeName) != -1));\n\t }\n\t }\n\t });\n\t\n\t self.handler('mouseup', {\n\t options: {\n\t maxDistance: maxClickDistance\n\t },\n\t onEnd: checkDistanceAndEmit('mouseup')\n\t });\n\t\n\t self.handler('mousedown', {\n\t onStart: function(ev) {\n\t this.dispatchEvent(ev, 'mousedown');\n\t }\n\t });\n\t }\n\t\n\t function checkDistanceAndEmit(eventName) {\n\t return function(ev, pointer) {\n\t if (pointer.distance < this.state.options.maxDistance) {\n\t this.dispatchEvent(ev, eventName, pointer);\n\t }\n\t };\n\t }\n\t\n\t /*\n\t * Register an element to listen for a handler.\n\t * This allows an element to override the default options for a handler.\n\t * Additionally, some handlers like drag and hold only dispatch events if\n\t * the domEvent happens inside an element that's registered to listen for these events.\n\t *\n\t * @see GestureHandler for how overriding of default options works.\n\t * @example $mdGesture.register(myElement, 'drag', { minDistance: 20, horziontal: false })\n\t */\n\t function register(element, handlerName, options) {\n\t var handler = HANDLERS[handlerName.replace(/^\\$md./, '')];\n\t if (!handler) {\n\t throw new Error('Failed to register element with handler ' + handlerName + '. ' +\n\t 'Available handlers: ' + Object.keys(HANDLERS).join(', '));\n\t }\n\t return handler.registerElement(element, options);\n\t }\n\t\n\t /*\n\t * add a handler to $mdGesture. see below.\n\t */\n\t function addHandler(name, definition) {\n\t var handler = new $$MdGestureHandler(name);\n\t angular.extend(handler, definition);\n\t HANDLERS[name] = handler;\n\t\n\t return self;\n\t }\n\t\n\t /*\n\t * Register handlers. These listen to touch/start/move events, interpret them,\n\t * and dispatch gesture events depending on options & conditions. These are all\n\t * instances of GestureHandler.\n\t * @see GestureHandler\n\t */\n\t return self\n\t /*\n\t * The press handler dispatches an event on touchdown/touchend.\n\t * It's a simple abstraction of touch/mouse/pointer start and end.\n\t */\n\t .handler('press', {\n\t onStart: function (ev, pointer) {\n\t this.dispatchEvent(ev, '$md.pressdown');\n\t },\n\t onEnd: function (ev, pointer) {\n\t this.dispatchEvent(ev, '$md.pressup');\n\t }\n\t })\n\t\n\t /*\n\t * The hold handler dispatches an event if the user keeps their finger within\n\t * the same area for ms.\n\t * The hold handler will only run if a parent of the touch target is registered\n\t * to listen for hold events through $mdGesture.register()\n\t */\n\t .handler('hold', {\n\t options: {\n\t maxDistance: 6,\n\t delay: 500\n\t },\n\t onCancel: function () {\n\t $timeout.cancel(this.state.timeout);\n\t },\n\t onStart: function (ev, pointer) {\n\t // For hold, require a parent to be registered with $mdGesture.register()\n\t // Because we prevent scroll events, this is necessary.\n\t if (!this.state.registeredParent) return this.cancel();\n\t\n\t this.state.pos = {x: pointer.x, y: pointer.y};\n\t this.state.timeout = $timeout(angular.bind(this, function holdDelayFn() {\n\t this.dispatchEvent(ev, '$md.hold');\n\t this.cancel(); //we're done!\n\t }), this.state.options.delay, false);\n\t },\n\t onMove: function (ev, pointer) {\n\t // Don't scroll while waiting for hold.\n\t // If we don't preventDefault touchmove events here, Android will assume we don't\n\t // want to listen to anymore touch events. It will start scrolling and stop sending\n\t // touchmove events.\n\t if (!touchActionProperty && ev.type === 'touchmove') ev.preventDefault();\n\t\n\t // If the user moves greater than pixels, stop the hold timer\n\t // set in onStart\n\t var dx = this.state.pos.x - pointer.x;\n\t var dy = this.state.pos.y - pointer.y;\n\t if (Math.sqrt(dx * dx + dy * dy) > this.options.maxDistance) {\n\t this.cancel();\n\t }\n\t },\n\t onEnd: function () {\n\t this.onCancel();\n\t }\n\t })\n\t\n\t /*\n\t * The drag handler dispatches a drag event if the user holds and moves his finger greater than\n\t * px in the x or y direction, depending on options.horizontal.\n\t * The drag will be cancelled if the user moves his finger greater than * in\n\t * the perpendicular direction. Eg if the drag is horizontal and the user moves his finger *\n\t * pixels vertically, this handler won't consider the move part of a drag.\n\t */\n\t .handler('drag', {\n\t options: {\n\t minDistance: 6,\n\t horizontal: true,\n\t cancelMultiplier: 1.5\n\t },\n\t onSetup: function(element, options) {\n\t if (touchActionProperty) {\n\t // We check for horizontal to be false, because otherwise we would overwrite the default opts.\n\t this.oldTouchAction = element[0].style[touchActionProperty];\n\t element[0].style[touchActionProperty] = options.horizontal === false ? 'pan-y' : 'pan-x';\n\t }\n\t },\n\t onCleanup: function(element) {\n\t if (this.oldTouchAction) {\n\t element[0].style[touchActionProperty] = this.oldTouchAction;\n\t }\n\t },\n\t onStart: function (ev) {\n\t // For drag, require a parent to be registered with $mdGesture.register()\n\t if (!this.state.registeredParent) this.cancel();\n\t },\n\t onMove: function (ev, pointer) {\n\t var shouldStartDrag, shouldCancel;\n\t // Don't scroll while deciding if this touchmove qualifies as a drag event.\n\t // If we don't preventDefault touchmove events here, Android will assume we don't\n\t // want to listen to anymore touch events. It will start scrolling and stop sending\n\t // touchmove events.\n\t if (!touchActionProperty && ev.type === 'touchmove') ev.preventDefault();\n\t\n\t if (!this.state.dragPointer) {\n\t if (this.state.options.horizontal) {\n\t shouldStartDrag = Math.abs(pointer.distanceX) > this.state.options.minDistance;\n\t shouldCancel = Math.abs(pointer.distanceY) > this.state.options.minDistance * this.state.options.cancelMultiplier;\n\t } else {\n\t shouldStartDrag = Math.abs(pointer.distanceY) > this.state.options.minDistance;\n\t shouldCancel = Math.abs(pointer.distanceX) > this.state.options.minDistance * this.state.options.cancelMultiplier;\n\t }\n\t\n\t if (shouldStartDrag) {\n\t // Create a new pointer representing this drag, starting at this point where the drag started.\n\t this.state.dragPointer = makeStartPointer(ev);\n\t updatePointerState(ev, this.state.dragPointer);\n\t this.dispatchEvent(ev, '$md.dragstart', this.state.dragPointer);\n\t\n\t } else if (shouldCancel) {\n\t this.cancel();\n\t }\n\t } else {\n\t this.dispatchDragMove(ev);\n\t }\n\t },\n\t // Only dispatch dragmove events every frame; any more is unnecessary\n\t dispatchDragMove: $$rAF.throttle(function (ev) {\n\t // Make sure the drag didn't stop while waiting for the next frame\n\t if (this.state.isRunning) {\n\t updatePointerState(ev, this.state.dragPointer);\n\t this.dispatchEvent(ev, '$md.drag', this.state.dragPointer);\n\t }\n\t }),\n\t onEnd: function (ev, pointer) {\n\t if (this.state.dragPointer) {\n\t updatePointerState(ev, this.state.dragPointer);\n\t this.dispatchEvent(ev, '$md.dragend', this.state.dragPointer);\n\t }\n\t }\n\t })\n\t\n\t /*\n\t * The swipe handler will dispatch a swipe event if, on the end of a touch,\n\t * the velocity and distance were high enough.\n\t */\n\t .handler('swipe', {\n\t options: {\n\t minVelocity: 0.65,\n\t minDistance: 10\n\t },\n\t onEnd: function (ev, pointer) {\n\t var eventType;\n\t\n\t if (Math.abs(pointer.velocityX) > this.state.options.minVelocity &&\n\t Math.abs(pointer.distanceX) > this.state.options.minDistance) {\n\t eventType = pointer.directionX == 'left' ? '$md.swipeleft' : '$md.swiperight';\n\t this.dispatchEvent(ev, eventType);\n\t }\n\t else if (Math.abs(pointer.velocityY) > this.state.options.minVelocity &&\n\t Math.abs(pointer.distanceY) > this.state.options.minDistance) {\n\t eventType = pointer.directionY == 'up' ? '$md.swipeup' : '$md.swipedown';\n\t this.dispatchEvent(ev, eventType);\n\t }\n\t }\n\t });\n\t\n\t function getTouchAction() {\n\t var testEl = document.createElement('div');\n\t var vendorPrefixes = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\n\t\n\t for (var i = 0; i < vendorPrefixes.length; i++) {\n\t var prefix = vendorPrefixes[i];\n\t var property = prefix ? prefix + 'TouchAction' : 'touchAction';\n\t if (angular.isDefined(testEl.style[property])) {\n\t return property;\n\t }\n\t }\n\t }\n\t\n\t}\n\t\n\t/**\n\t * MdGestureHandler\n\t * A GestureHandler is an object which is able to dispatch custom dom events\n\t * based on native dom {touch,pointer,mouse}{start,move,end} events.\n\t *\n\t * A gesture will manage its lifecycle through the start,move,end, and cancel\n\t * functions, which are called by native dom events.\n\t *\n\t * A gesture has the concept of 'options' (eg a swipe's required velocity), which can be\n\t * overridden by elements registering through $mdGesture.register()\n\t */\n\tfunction GestureHandler (name) {\n\t this.name = name;\n\t this.state = {};\n\t}\n\t\n\tfunction MdGestureHandler() {\n\t var hasJQuery = (typeof window.jQuery !== 'undefined') && (angular.element === window.jQuery);\n\t\n\t GestureHandler.prototype = {\n\t options: {},\n\t // jQuery listeners don't work with custom DOMEvents, so we have to dispatch events\n\t // differently when jQuery is loaded\n\t dispatchEvent: hasJQuery ? jQueryDispatchEvent : nativeDispatchEvent,\n\t\n\t // These are overridden by the registered handler\n\t onSetup: angular.noop,\n\t onCleanup: angular.noop,\n\t onStart: angular.noop,\n\t onMove: angular.noop,\n\t onEnd: angular.noop,\n\t onCancel: angular.noop,\n\t\n\t // onStart sets up a new state for the handler, which includes options from the\n\t // nearest registered parent element of ev.target.\n\t start: function (ev, pointer) {\n\t if (this.state.isRunning) return;\n\t var parentTarget = this.getNearestParent(ev.target);\n\t // Get the options from the nearest registered parent\n\t var parentTargetOptions = parentTarget && parentTarget.$mdGesture[this.name] || {};\n\t\n\t this.state = {\n\t isRunning: true,\n\t // Override the default options with the nearest registered parent's options\n\t options: angular.extend({}, this.options, parentTargetOptions),\n\t // Pass in the registered parent node to the state so the onStart listener can use\n\t registeredParent: parentTarget\n\t };\n\t this.onStart(ev, pointer);\n\t },\n\t move: function (ev, pointer) {\n\t if (!this.state.isRunning) return;\n\t this.onMove(ev, pointer);\n\t },\n\t end: function (ev, pointer) {\n\t if (!this.state.isRunning) return;\n\t this.onEnd(ev, pointer);\n\t this.state.isRunning = false;\n\t },\n\t cancel: function (ev, pointer) {\n\t this.onCancel(ev, pointer);\n\t this.state = {};\n\t },\n\t\n\t // Find and return the nearest parent element that has been registered to\n\t // listen for this handler via $mdGesture.register(element, 'handlerName').\n\t getNearestParent: function (node) {\n\t var current = node;\n\t while (current) {\n\t if ((current.$mdGesture || {})[this.name]) {\n\t return current;\n\t }\n\t current = current.parentNode;\n\t }\n\t return null;\n\t },\n\t\n\t // Called from $mdGesture.register when an element registers itself with a handler.\n\t // Store the options the user gave on the DOMElement itself. These options will\n\t // be retrieved with getNearestParent when the handler starts.\n\t registerElement: function (element, options) {\n\t var self = this;\n\t element[0].$mdGesture = element[0].$mdGesture || {};\n\t element[0].$mdGesture[this.name] = options || {};\n\t element.on('$destroy', onDestroy);\n\t\n\t self.onSetup(element, options || {});\n\t\n\t return onDestroy;\n\t\n\t function onDestroy() {\n\t delete element[0].$mdGesture[self.name];\n\t element.off('$destroy', onDestroy);\n\t\n\t self.onCleanup(element, options || {});\n\t }\n\t }\n\t };\n\t\n\t return GestureHandler;\n\t\n\t /*\n\t * Dispatch an event with jQuery\n\t * TODO: Make sure this sends bubbling events\n\t *\n\t * @param srcEvent the original DOM touch event that started this.\n\t * @param eventType the name of the custom event to send (eg 'click' or '$md.drag')\n\t * @param eventPointer the pointer object that matches this event.\n\t */\n\t function jQueryDispatchEvent(srcEvent, eventType, eventPointer) {\n\t eventPointer = eventPointer || pointer;\n\t var eventObj = new angular.element.Event(eventType);\n\t\n\t eventObj.$material = true;\n\t eventObj.pointer = eventPointer;\n\t eventObj.srcEvent = srcEvent;\n\t\n\t angular.extend(eventObj, {\n\t clientX: eventPointer.x,\n\t clientY: eventPointer.y,\n\t screenX: eventPointer.x,\n\t screenY: eventPointer.y,\n\t pageX: eventPointer.x,\n\t pageY: eventPointer.y,\n\t ctrlKey: srcEvent.ctrlKey,\n\t altKey: srcEvent.altKey,\n\t shiftKey: srcEvent.shiftKey,\n\t metaKey: srcEvent.metaKey\n\t });\n\t angular.element(eventPointer.target).trigger(eventObj);\n\t }\n\t\n\t /*\n\t * NOTE: nativeDispatchEvent is very performance sensitive.\n\t * @param srcEvent the original DOM touch event that started this.\n\t * @param eventType the name of the custom event to send (eg 'click' or '$md.drag')\n\t * @param eventPointer the pointer object that matches this event.\n\t */\n\t function nativeDispatchEvent(srcEvent, eventType, eventPointer) {\n\t eventPointer = eventPointer || pointer;\n\t var eventObj;\n\t\n\t if (eventType === 'click' || eventType == 'mouseup' || eventType == 'mousedown' ) {\n\t eventObj = document.createEvent('MouseEvents');\n\t eventObj.initMouseEvent(\n\t eventType, true, true, window, srcEvent.detail,\n\t eventPointer.x, eventPointer.y, eventPointer.x, eventPointer.y,\n\t srcEvent.ctrlKey, srcEvent.altKey, srcEvent.shiftKey, srcEvent.metaKey,\n\t srcEvent.button, srcEvent.relatedTarget || null\n\t );\n\t\n\t } else {\n\t eventObj = document.createEvent('CustomEvent');\n\t eventObj.initCustomEvent(eventType, true, true, {});\n\t }\n\t eventObj.$material = true;\n\t eventObj.pointer = eventPointer;\n\t eventObj.srcEvent = srcEvent;\n\t eventPointer.target.dispatchEvent(eventObj);\n\t }\n\t\n\t}\n\t\n\t/**\n\t * Attach Gestures: hook document and check shouldHijack clicks\n\t * @ngInject\n\t */\n\tfunction attachToDocument( $mdGesture, $$MdGestureHandler ) {\n\t\n\t // Polyfill document.contains for IE11.\n\t // TODO: move to util\n\t document.contains || (document.contains = function (node) {\n\t return document.body.contains(node);\n\t });\n\t\n\t if (!isInitialized && $mdGesture.isHijackingClicks ) {\n\t /*\n\t * If hijack clicks is true, we preventDefault any click that wasn't\n\t * sent by ngMaterial. This is because on older Android & iOS, a false, or 'ghost',\n\t * click event will be sent ~400ms after a touchend event happens.\n\t * The only way to know if this click is real is to prevent any normal\n\t * click events, and add a flag to events sent by material so we know not to prevent those.\n\t *\n\t * Two exceptions to click events that should be prevented are:\n\t * - click events sent by the keyboard (eg form submit)\n\t * - events that originate from an Ionic app\n\t */\n\t document.addEventListener('click' , clickHijacker , true);\n\t document.addEventListener('mouseup' , mouseInputHijacker, true);\n\t document.addEventListener('mousedown', mouseInputHijacker, true);\n\t document.addEventListener('focus' , mouseInputHijacker, true);\n\t\n\t isInitialized = true;\n\t }\n\t\n\t function mouseInputHijacker(ev) {\n\t var isKeyClick = !ev.clientX && !ev.clientY;\n\t if (!isKeyClick && !ev.$material && !ev.isIonicTap\n\t && !isInputEventFromLabelClick(ev)) {\n\t ev.preventDefault();\n\t ev.stopPropagation();\n\t }\n\t }\n\t\n\t function clickHijacker(ev) {\n\t var isKeyClick = ev.clientX === 0 && ev.clientY === 0;\n\t if (!isKeyClick && !ev.$material && !ev.isIonicTap\n\t && !isInputEventFromLabelClick(ev)) {\n\t ev.preventDefault();\n\t ev.stopPropagation();\n\t lastLabelClickPos = null;\n\t } else {\n\t lastLabelClickPos = null;\n\t if (ev.target.tagName.toLowerCase() == 'label') {\n\t lastLabelClickPos = {x: ev.x, y: ev.y};\n\t }\n\t }\n\t }\n\t\n\t\n\t // Listen to all events to cover all platforms.\n\t var START_EVENTS = 'mousedown touchstart pointerdown';\n\t var MOVE_EVENTS = 'mousemove touchmove pointermove';\n\t var END_EVENTS = 'mouseup mouseleave touchend touchcancel pointerup pointercancel';\n\t\n\t angular.element(document)\n\t .on(START_EVENTS, gestureStart)\n\t .on(MOVE_EVENTS, gestureMove)\n\t .on(END_EVENTS, gestureEnd)\n\t // For testing\n\t .on('$$mdGestureReset', function gestureClearCache () {\n\t lastPointer = pointer = null;\n\t });\n\t\n\t /*\n\t * When a DOM event happens, run all registered gesture handlers' lifecycle\n\t * methods which match the DOM event.\n\t * Eg when a 'touchstart' event happens, runHandlers('start') will call and\n\t * run `handler.cancel()` and `handler.start()` on all registered handlers.\n\t */\n\t function runHandlers(handlerEvent, event) {\n\t var handler;\n\t for (var name in HANDLERS) {\n\t handler = HANDLERS[name];\n\t if( handler instanceof $$MdGestureHandler ) {\n\t\n\t if (handlerEvent === 'start') {\n\t // Run cancel to reset any handlers' state\n\t handler.cancel();\n\t }\n\t handler[handlerEvent](event, pointer);\n\t\n\t }\n\t }\n\t }\n\t\n\t /*\n\t * gestureStart vets if a start event is legitimate (and not part of a 'ghost click' from iOS/Android)\n\t * If it is legitimate, we initiate the pointer state and mark the current pointer's type\n\t * For example, for a touchstart event, mark the current pointer as a 'touch' pointer, so mouse events\n\t * won't effect it.\n\t */\n\t function gestureStart(ev) {\n\t // If we're already touched down, abort\n\t if (pointer) return;\n\t\n\t var now = +Date.now();\n\t\n\t // iOS & old android bug: after a touch event, a click event is sent 350 ms later.\n\t // If <400ms have passed, don't allow an event of a different type than the previous event\n\t if (lastPointer && !typesMatch(ev, lastPointer) && (now - lastPointer.endTime < 1500)) {\n\t return;\n\t }\n\t\n\t pointer = makeStartPointer(ev);\n\t\n\t runHandlers('start', ev);\n\t }\n\t /*\n\t * If a move event happens of the right type, update the pointer and run all the move handlers.\n\t * \"of the right type\": if a mousemove happens but our pointer started with a touch event, do nothing.\n\t */\n\t function gestureMove(ev) {\n\t if (!pointer || !typesMatch(ev, pointer)) return;\n\t\n\t updatePointerState(ev, pointer);\n\t runHandlers('move', ev);\n\t }\n\t /*\n\t * If an end event happens of the right type, update the pointer, run endHandlers, and save the pointer as 'lastPointer'\n\t */\n\t function gestureEnd(ev) {\n\t if (!pointer || !typesMatch(ev, pointer)) return;\n\t\n\t updatePointerState(ev, pointer);\n\t pointer.endTime = +Date.now();\n\t\n\t runHandlers('end', ev);\n\t\n\t lastPointer = pointer;\n\t pointer = null;\n\t }\n\t\n\t}\n\t\n\t// ********************\n\t// Module Functions\n\t// ********************\n\t\n\t/*\n\t * Initiate the pointer. x, y, and the pointer's type.\n\t */\n\tfunction makeStartPointer(ev) {\n\t var point = getEventPoint(ev);\n\t var startPointer = {\n\t startTime: +Date.now(),\n\t target: ev.target,\n\t // 'p' for pointer events, 'm' for mouse, 't' for touch\n\t type: ev.type.charAt(0)\n\t };\n\t startPointer.startX = startPointer.x = point.pageX;\n\t startPointer.startY = startPointer.y = point.pageY;\n\t return startPointer;\n\t}\n\t\n\t/*\n\t * return whether the pointer's type matches the event's type.\n\t * Eg if a touch event happens but the pointer has a mouse type, return false.\n\t */\n\tfunction typesMatch(ev, pointer) {\n\t return ev && pointer && ev.type.charAt(0) === pointer.type;\n\t}\n\t\n\t/**\n\t * Gets whether the given event is an input event that was caused by clicking on an\n\t * associated label element.\n\t *\n\t * This is necessary because the browser will, upon clicking on a label element, fire an\n\t * *extra* click event on its associated input (if any). mdGesture is able to flag the label\n\t * click as with `$material` correctly, but not the second input click.\n\t *\n\t * In order to determine whether an input event is from a label click, we compare the (x, y) for\n\t * the event to the (x, y) for the most recent label click (which is cleared whenever a non-label\n\t * click occurs). Unfortunately, there are no event properties that tie the input and the label\n\t * together (such as relatedTarget).\n\t *\n\t * @param {MouseEvent} event\n\t * @returns {boolean}\n\t */\n\tfunction isInputEventFromLabelClick(event) {\n\t return lastLabelClickPos\n\t && lastLabelClickPos.x == event.x\n\t && lastLabelClickPos.y == event.y;\n\t}\n\t\n\t/*\n\t * Update the given pointer based upon the given DOMEvent.\n\t * Distance, velocity, direction, duration, etc\n\t */\n\tfunction updatePointerState(ev, pointer) {\n\t var point = getEventPoint(ev);\n\t var x = pointer.x = point.pageX;\n\t var y = pointer.y = point.pageY;\n\t\n\t pointer.distanceX = x - pointer.startX;\n\t pointer.distanceY = y - pointer.startY;\n\t pointer.distance = Math.sqrt(\n\t pointer.distanceX * pointer.distanceX + pointer.distanceY * pointer.distanceY\n\t );\n\t\n\t pointer.directionX = pointer.distanceX > 0 ? 'right' : pointer.distanceX < 0 ? 'left' : '';\n\t pointer.directionY = pointer.distanceY > 0 ? 'down' : pointer.distanceY < 0 ? 'up' : '';\n\t\n\t pointer.duration = +Date.now() - pointer.startTime;\n\t pointer.velocityX = pointer.distanceX / pointer.duration;\n\t pointer.velocityY = pointer.distanceY / pointer.duration;\n\t}\n\t\n\t/*\n\t * Normalize the point where the DOM event happened whether it's touch or mouse.\n\t * @returns point event obj with pageX and pageY on it.\n\t */\n\tfunction getEventPoint(ev) {\n\t ev = ev.originalEvent || ev; // support jQuery events\n\t return (ev.touches && ev.touches[0]) ||\n\t (ev.changedTouches && ev.changedTouches[0]) ||\n\t ev;\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\tangular.module('material.core')\n\t .provider('$$interimElement', InterimElementProvider);\n\t\n\t/*\n\t * @ngdoc service\n\t * @name $$interimElement\n\t * @module material.core\n\t *\n\t * @description\n\t *\n\t * Factory that contructs `$$interimElement.$service` services.\n\t * Used internally in material design for elements that appear on screen temporarily.\n\t * The service provides a promise-like API for interacting with the temporary\n\t * elements.\n\t *\n\t * ```js\n\t * app.service('$mdToast', function($$interimElement) {\n\t * var $mdToast = $$interimElement(toastDefaultOptions);\n\t * return $mdToast;\n\t * });\n\t * ```\n\t * @param {object=} defaultOptions Options used by default for the `show` method on the service.\n\t *\n\t * @returns {$$interimElement.$service}\n\t *\n\t */\n\t\n\tfunction InterimElementProvider() {\n\t InterimElementFactory.$inject = [\"$document\", \"$q\", \"$$q\", \"$rootScope\", \"$timeout\", \"$rootElement\", \"$animate\", \"$mdUtil\", \"$mdCompiler\", \"$mdTheming\", \"$injector\"];\n\t createInterimElementProvider.$get = InterimElementFactory;\n\t return createInterimElementProvider;\n\t\n\t /**\n\t * Returns a new provider which allows configuration of a new interimElement\n\t * service. Allows configuration of default options & methods for options,\n\t * as well as configuration of 'preset' methods (eg dialog.basic(): basic is a preset method)\n\t */\n\t function createInterimElementProvider(interimFactoryName) {\n\t factory.$inject = [\"$$interimElement\", \"$injector\"];\n\t var EXPOSED_METHODS = ['onHide', 'onShow', 'onRemove'];\n\t\n\t var customMethods = {};\n\t var providerConfig = {\n\t presets: {}\n\t };\n\t\n\t var provider = {\n\t setDefaults: setDefaults,\n\t addPreset: addPreset,\n\t addMethod: addMethod,\n\t $get: factory\n\t };\n\t\n\t /**\n\t * all interim elements will come with the 'build' preset\n\t */\n\t provider.addPreset('build', {\n\t methods: ['controller', 'controllerAs', 'resolve',\n\t 'template', 'templateUrl', 'themable', 'transformTemplate', 'parent']\n\t });\n\t\n\t return provider;\n\t\n\t /**\n\t * Save the configured defaults to be used when the factory is instantiated\n\t */\n\t function setDefaults(definition) {\n\t providerConfig.optionsFactory = definition.options;\n\t providerConfig.methods = (definition.methods || []).concat(EXPOSED_METHODS);\n\t return provider;\n\t }\n\t\n\t /**\n\t * Add a method to the factory that isn't specific to any interim element operations\n\t */\n\t\n\t function addMethod(name, fn) {\n\t customMethods[name] = fn;\n\t return provider;\n\t }\n\t\n\t /**\n\t * Save the configured preset to be used when the factory is instantiated\n\t */\n\t function addPreset(name, definition) {\n\t definition = definition || {};\n\t definition.methods = definition.methods || [];\n\t definition.options = definition.options || function() { return {}; };\n\t\n\t if (/^cancel|hide|show$/.test(name)) {\n\t throw new Error(\"Preset '\" + name + \"' in \" + interimFactoryName + \" is reserved!\");\n\t }\n\t if (definition.methods.indexOf('_options') > -1) {\n\t throw new Error(\"Method '_options' in \" + interimFactoryName + \" is reserved!\");\n\t }\n\t providerConfig.presets[name] = {\n\t methods: definition.methods.concat(EXPOSED_METHODS),\n\t optionsFactory: definition.options,\n\t argOption: definition.argOption\n\t };\n\t return provider;\n\t }\n\t\n\t function addPresetMethod(presetName, methodName, method) {\n\t providerConfig.presets[presetName][methodName] = method;\n\t }\n\t\n\t /**\n\t * Create a factory that has the given methods & defaults implementing interimElement\n\t */\n\t /* @ngInject */\n\t function factory($$interimElement, $injector) {\n\t var defaultMethods;\n\t var defaultOptions;\n\t var interimElementService = $$interimElement();\n\t\n\t /*\n\t * publicService is what the developer will be using.\n\t * It has methods hide(), cancel(), show(), build(), and any other\n\t * presets which were set during the config phase.\n\t */\n\t var publicService = {\n\t hide: interimElementService.hide,\n\t cancel: interimElementService.cancel,\n\t show: showInterimElement,\n\t\n\t // Special internal method to destroy an interim element without animations\n\t // used when navigation changes causes a $scope.$destroy() action\n\t destroy : destroyInterimElement\n\t };\n\t\n\t\n\t defaultMethods = providerConfig.methods || [];\n\t // This must be invoked after the publicService is initialized\n\t defaultOptions = invokeFactory(providerConfig.optionsFactory, {});\n\t\n\t // Copy over the simple custom methods\n\t angular.forEach(customMethods, function(fn, name) {\n\t publicService[name] = fn;\n\t });\n\t\n\t angular.forEach(providerConfig.presets, function(definition, name) {\n\t var presetDefaults = invokeFactory(definition.optionsFactory, {});\n\t var presetMethods = (definition.methods || []).concat(defaultMethods);\n\t\n\t // Every interimElement built with a preset has a field called `$type`,\n\t // which matches the name of the preset.\n\t // Eg in preset 'confirm', options.$type === 'confirm'\n\t angular.extend(presetDefaults, { $type: name });\n\t\n\t // This creates a preset class which has setter methods for every\n\t // method given in the `.addPreset()` function, as well as every\n\t // method given in the `.setDefaults()` function.\n\t //\n\t // @example\n\t // .setDefaults({\n\t // methods: ['hasBackdrop', 'clickOutsideToClose', 'escapeToClose', 'targetEvent'],\n\t // options: dialogDefaultOptions\n\t // })\n\t // .addPreset('alert', {\n\t // methods: ['title', 'ok'],\n\t // options: alertDialogOptions\n\t // })\n\t //\n\t // Set values will be passed to the options when interimElement.show() is called.\n\t function Preset(opts) {\n\t this._options = angular.extend({}, presetDefaults, opts);\n\t }\n\t angular.forEach(presetMethods, function(name) {\n\t Preset.prototype[name] = function(value) {\n\t this._options[name] = value;\n\t return this;\n\t };\n\t });\n\t\n\t // Create shortcut method for one-linear methods\n\t if (definition.argOption) {\n\t var methodName = 'show' + name.charAt(0).toUpperCase() + name.slice(1);\n\t publicService[methodName] = function(arg) {\n\t var config = publicService[name](arg);\n\t return publicService.show(config);\n\t };\n\t }\n\t\n\t // eg $mdDialog.alert() will return a new alert preset\n\t publicService[name] = function(arg) {\n\t // If argOption is supplied, eg `argOption: 'content'`, then we assume\n\t // if the argument is not an options object then it is the `argOption` option.\n\t //\n\t // @example `$mdToast.simple('hello')` // sets options.content to hello\n\t // // because argOption === 'content'\n\t if (arguments.length && definition.argOption &&\n\t !angular.isObject(arg) && !angular.isArray(arg)) {\n\t\n\t return (new Preset())[definition.argOption](arg);\n\t\n\t } else {\n\t return new Preset(arg);\n\t }\n\t\n\t };\n\t });\n\t\n\t return publicService;\n\t\n\t /**\n\t *\n\t */\n\t function showInterimElement(opts) {\n\t // opts is either a preset which stores its options on an _options field,\n\t // or just an object made up of options\n\t opts = opts || { };\n\t if (opts._options) opts = opts._options;\n\t\n\t return interimElementService.show(\n\t angular.extend({}, defaultOptions, opts)\n\t );\n\t }\n\t\n\t /**\n\t * Special method to hide and destroy an interimElement WITHOUT\n\t * any 'leave` or hide animations ( an immediate force hide/remove )\n\t *\n\t * NOTE: This calls the onRemove() subclass method for each component...\n\t * which must have code to respond to `options.$destroy == true`\n\t */\n\t function destroyInterimElement(opts) {\n\t return interimElementService.destroy(opts);\n\t }\n\t\n\t /**\n\t * Helper to call $injector.invoke with a local of the factory name for\n\t * this provider.\n\t * If an $mdDialog is providing options for a dialog and tries to inject\n\t * $mdDialog, a circular dependency error will happen.\n\t * We get around that by manually injecting $mdDialog as a local.\n\t */\n\t function invokeFactory(factory, defaultVal) {\n\t var locals = {};\n\t locals[interimFactoryName] = publicService;\n\t return $injector.invoke(factory || function() { return defaultVal; }, {}, locals);\n\t }\n\t\n\t }\n\t\n\t }\n\t\n\t /* @ngInject */\n\t function InterimElementFactory($document, $q, $$q, $rootScope, $timeout, $rootElement, $animate,\n\t $mdUtil, $mdCompiler, $mdTheming, $injector ) {\n\t return function createInterimElementService() {\n\t var SHOW_CANCELLED = false;\n\t\n\t /*\n\t * @ngdoc service\n\t * @name $$interimElement.$service\n\t *\n\t * @description\n\t * A service used to control inserting and removing an element into the DOM.\n\t *\n\t */\n\t var service, stack = [];\n\t\n\t // Publish instance $$interimElement service;\n\t // ... used as $mdDialog, $mdToast, $mdMenu, and $mdSelect\n\t\n\t return service = {\n\t show: show,\n\t hide: hide,\n\t cancel: cancel,\n\t destroy : destroy,\n\t $injector_: $injector\n\t };\n\t\n\t /*\n\t * @ngdoc method\n\t * @name $$interimElement.$service#show\n\t * @kind function\n\t *\n\t * @description\n\t * Adds the `$interimElement` to the DOM and returns a special promise that will be resolved or rejected\n\t * with hide or cancel, respectively. To external cancel/hide, developers should use the\n\t *\n\t * @param {*} options is hashMap of settings\n\t * @returns a Promise\n\t *\n\t */\n\t function show(options) {\n\t options = options || {};\n\t var interimElement = new InterimElement(options || {});\n\t // When an interim element is currently showing, we have to cancel it.\n\t // Just hiding it, will resolve the InterimElement's promise, the promise should be\n\t // rejected instead.\n\t var hideExisting = !options.skipHide && stack.length ? service.cancel() : $q.when(true);\n\t\n\t // This hide()s only the current interim element before showing the next, new one\n\t // NOTE: this is not reversible (e.g. interim elements are not stackable)\n\t\n\t hideExisting.finally(function() {\n\t\n\t stack.push(interimElement);\n\t interimElement\n\t .show()\n\t .catch(function( reason ) {\n\t //$log.error(\"InterimElement.show() error: \" + reason );\n\t return reason;\n\t });\n\t\n\t });\n\t\n\t // Return a promise that will be resolved when the interim\n\t // element is hidden or cancelled...\n\t\n\t return interimElement.deferred.promise;\n\t }\n\t\n\t /*\n\t * @ngdoc method\n\t * @name $$interimElement.$service#hide\n\t * @kind function\n\t *\n\t * @description\n\t * Removes the `$interimElement` from the DOM and resolves the promise returned from `show`\n\t *\n\t * @param {*} resolveParam Data to resolve the promise with\n\t * @returns a Promise that will be resolved after the element has been removed.\n\t *\n\t */\n\t function hide(reason, options) {\n\t if ( !stack.length ) return $q.when(reason);\n\t options = options || {};\n\t\n\t if (options.closeAll) {\n\t var promise = $q.all(stack.reverse().map(closeElement));\n\t stack = [];\n\t return promise;\n\t } else if (options.closeTo !== undefined) {\n\t return $q.all(stack.splice(options.closeTo).map(closeElement));\n\t } else {\n\t var interim = stack.pop();\n\t return closeElement(interim);\n\t }\n\t\n\t function closeElement(interim) {\n\t interim\n\t .remove(reason, false, options || { })\n\t .catch(function( reason ) {\n\t //$log.error(\"InterimElement.hide() error: \" + reason );\n\t return reason;\n\t });\n\t return interim.deferred.promise;\n\t }\n\t }\n\t\n\t /*\n\t * @ngdoc method\n\t * @name $$interimElement.$service#cancel\n\t * @kind function\n\t *\n\t * @description\n\t * Removes the `$interimElement` from the DOM and rejects the promise returned from `show`\n\t *\n\t * @param {*} reason Data to reject the promise with\n\t * @returns Promise that will be resolved after the element has been removed.\n\t *\n\t */\n\t function cancel(reason, options) {\n\t var interim = stack.pop();\n\t if ( !interim ) return $q.when(reason);\n\t\n\t interim\n\t .remove(reason, true, options || { })\n\t .catch(function( reason ) {\n\t //$log.error(\"InterimElement.cancel() error: \" + reason );\n\t return reason;\n\t });\n\t\n\t // Since Angular 1.6.7, promises will be logged to $exceptionHandler when the promise\n\t // is not handling the rejection. We create a pseudo catch handler, which will prevent the\n\t // promise from being logged to the $exceptionHandler.\n\t return interim.deferred.promise.catch(angular.noop);\n\t }\n\t\n\t /*\n\t * Special method to quick-remove the interim element without animations\n\t * Note: interim elements are in \"interim containers\"\n\t */\n\t function destroy(target) {\n\t var interim = !target ? stack.shift() : null;\n\t var cntr = angular.element(target).length ? angular.element(target)[0].parentNode : null;\n\t\n\t if (cntr) {\n\t // Try to find the interim element in the stack which corresponds to the supplied DOM element.\n\t var filtered = stack.filter(function(entry) {\n\t var currNode = entry.options.element[0];\n\t return (currNode === cntr);\n\t });\n\t\n\t // Note: this function might be called when the element already has been removed, in which\n\t // case we won't find any matches. That's ok.\n\t if (filtered.length > 0) {\n\t interim = filtered[0];\n\t stack.splice(stack.indexOf(interim), 1);\n\t }\n\t }\n\t\n\t return interim ? interim.remove(SHOW_CANCELLED, false, {'$destroy':true}) : $q.when(SHOW_CANCELLED);\n\t }\n\t\n\t /*\n\t * Internal Interim Element Object\n\t * Used internally to manage the DOM element and related data\n\t */\n\t function InterimElement(options) {\n\t var self, element, showAction = $q.when(true);\n\t\n\t options = configureScopeAndTransitions(options);\n\t\n\t return self = {\n\t options : options,\n\t deferred: $q.defer(),\n\t show : createAndTransitionIn,\n\t remove : transitionOutAndRemove\n\t };\n\t\n\t /**\n\t * Compile, link, and show this interim element\n\t * Use optional autoHided and transition-in effects\n\t */\n\t function createAndTransitionIn() {\n\t return $q(function(resolve, reject) {\n\t\n\t // Trigger onCompiling callback before the compilation starts.\n\t // This is useful, when modifying options, which can be influenced by developers.\n\t options.onCompiling && options.onCompiling(options);\n\t\n\t compileElement(options)\n\t .then(function( compiledData ) {\n\t element = linkElement( compiledData, options );\n\t\n\t showAction = showElement(element, options, compiledData.controller)\n\t .then(resolve, rejectAll);\n\t\n\t }, rejectAll);\n\t\n\t function rejectAll(fault) {\n\t // Force the '$md.show()' promise to reject\n\t self.deferred.reject(fault);\n\t\n\t // Continue rejection propagation\n\t reject(fault);\n\t }\n\t });\n\t }\n\t\n\t /**\n\t * After the show process has finished/rejected:\n\t * - announce 'removing',\n\t * - perform the transition-out, and\n\t * - perform optional clean up scope.\n\t */\n\t function transitionOutAndRemove(response, isCancelled, opts) {\n\t\n\t // abort if the show() and compile failed\n\t if ( !element ) return $q.when(false);\n\t\n\t options = angular.extend(options || {}, opts || {});\n\t options.cancelAutoHide && options.cancelAutoHide();\n\t options.element.triggerHandler('$mdInterimElementRemove');\n\t\n\t if ( options.$destroy === true ) {\n\t\n\t return hideElement(options.element, options).then(function(){\n\t (isCancelled && rejectAll(response)) || resolveAll(response);\n\t });\n\t\n\t } else {\n\t\n\t $q.when(showAction)\n\t .finally(function() {\n\t hideElement(options.element, options).then(function() {\n\t\n\t (isCancelled && rejectAll(response)) || resolveAll(response);\n\t\n\t }, rejectAll);\n\t });\n\t\n\t return self.deferred.promise;\n\t }\n\t\n\t\n\t /**\n\t * The `show()` returns a promise that will be resolved when the interim\n\t * element is hidden or cancelled...\n\t */\n\t function resolveAll(response) {\n\t self.deferred.resolve(response);\n\t }\n\t\n\t /**\n\t * Force the '$md.show()' promise to reject\n\t */\n\t function rejectAll(fault) {\n\t self.deferred.reject(fault);\n\t }\n\t }\n\t\n\t /**\n\t * Prepare optional isolated scope and prepare $animate with default enter and leave\n\t * transitions for the new element instance.\n\t */\n\t function configureScopeAndTransitions(options) {\n\t options = options || { };\n\t if ( options.template ) {\n\t options.template = $mdUtil.processTemplate(options.template);\n\t }\n\t\n\t return angular.extend({\n\t preserveScope: false,\n\t cancelAutoHide : angular.noop,\n\t scope: options.scope || $rootScope.$new(options.isolateScope),\n\t\n\t /**\n\t * Default usage to enable $animate to transition-in; can be easily overridden via 'options'\n\t */\n\t onShow: function transitionIn(scope, element, options) {\n\t return $animate.enter(element, options.parent);\n\t },\n\t\n\t /**\n\t * Default usage to enable $animate to transition-out; can be easily overridden via 'options'\n\t */\n\t onRemove: function transitionOut(scope, element) {\n\t // Element could be undefined if a new element is shown before\n\t // the old one finishes compiling.\n\t return element && $animate.leave(element) || $q.when();\n\t }\n\t }, options );\n\t\n\t }\n\t\n\t /**\n\t * Compile an element with a templateUrl, controller, and locals\n\t */\n\t function compileElement(options) {\n\t\n\t var compiled = !options.skipCompile ? $mdCompiler.compile(options) : null;\n\t\n\t return compiled || $q(function (resolve) {\n\t resolve({\n\t locals: {},\n\t link: function () {\n\t return options.element;\n\t }\n\t });\n\t });\n\t }\n\t\n\t /**\n\t * Link an element with compiled configuration\n\t */\n\t function linkElement(compileData, options){\n\t angular.extend(compileData.locals, options);\n\t\n\t var element = compileData.link(options.scope);\n\t\n\t // Search for parent at insertion time, if not specified\n\t options.element = element;\n\t options.parent = findParent(element, options);\n\t if (options.themable) $mdTheming(element);\n\t\n\t return element;\n\t }\n\t\n\t /**\n\t * Search for parent at insertion time, if not specified\n\t */\n\t function findParent(element, options) {\n\t var parent = options.parent;\n\t\n\t // Search for parent at insertion time, if not specified\n\t if (angular.isFunction(parent)) {\n\t parent = parent(options.scope, element, options);\n\t } else if (angular.isString(parent)) {\n\t parent = angular.element($document[0].querySelector(parent));\n\t } else {\n\t parent = angular.element(parent);\n\t }\n\t\n\t // If parent querySelector/getter function fails, or it's just null,\n\t // find a default.\n\t if (!(parent || {}).length) {\n\t var el;\n\t if ($rootElement[0] && $rootElement[0].querySelector) {\n\t el = $rootElement[0].querySelector(':not(svg) > body');\n\t }\n\t if (!el) el = $rootElement[0];\n\t if (el.nodeName == '#comment') {\n\t el = $document[0].body;\n\t }\n\t return angular.element(el);\n\t }\n\t\n\t return parent;\n\t }\n\t\n\t /**\n\t * If auto-hide is enabled, start timer and prepare cancel function\n\t */\n\t function startAutoHide() {\n\t var autoHideTimer, cancelAutoHide = angular.noop;\n\t\n\t if (options.hideDelay) {\n\t autoHideTimer = $timeout(service.hide, options.hideDelay) ;\n\t cancelAutoHide = function() {\n\t $timeout.cancel(autoHideTimer);\n\t }\n\t }\n\t\n\t // Cache for subsequent use\n\t options.cancelAutoHide = function() {\n\t cancelAutoHide();\n\t options.cancelAutoHide = undefined;\n\t }\n\t }\n\t\n\t /**\n\t * Show the element ( with transitions), notify complete and start\n\t * optional auto-Hide\n\t */\n\t function showElement(element, options, controller) {\n\t // Trigger onShowing callback before the `show()` starts\n\t var notifyShowing = options.onShowing || angular.noop;\n\t // Trigger onComplete callback when the `show()` finishes\n\t var notifyComplete = options.onComplete || angular.noop;\n\t\n\t notifyShowing(options.scope, element, options, controller);\n\t\n\t return $q(function (resolve, reject) {\n\t try {\n\t // Start transitionIn\n\t $q.when(options.onShow(options.scope, element, options, controller))\n\t .then(function () {\n\t notifyComplete(options.scope, element, options);\n\t startAutoHide();\n\t\n\t resolve(element);\n\t\n\t }, reject );\n\t\n\t } catch(e) {\n\t reject(e.message);\n\t }\n\t });\n\t }\n\t\n\t function hideElement(element, options) {\n\t var announceRemoving = options.onRemoving || angular.noop;\n\t\n\t return $$q(function (resolve, reject) {\n\t try {\n\t // Start transitionIn\n\t var action = $$q.when( options.onRemove(options.scope, element, options) || true );\n\t\n\t // Trigger callback *before* the remove operation starts\n\t announceRemoving(element, action);\n\t\n\t if ( options.$destroy == true ) {\n\t\n\t // For $destroy, onRemove should be synchronous\n\t resolve(element);\n\t\n\t } else {\n\t\n\t // Wait until transition-out is done\n\t action.then(function () {\n\t\n\t if (!options.preserveScope && options.scope ) {\n\t options.scope.$destroy();\n\t }\n\t\n\t resolve(element);\n\t\n\t }, reject );\n\t }\n\t\n\t } catch(e) {\n\t reject(e);\n\t }\n\t });\n\t }\n\t\n\t }\n\t };\n\t\n\t }\n\t\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t var $mdUtil, $interpolate, $log;\n\t\n\t var SUFFIXES = /(-gt)?-(sm|md|lg|print)/g;\n\t var WHITESPACE = /\\s+/g;\n\t\n\t var FLEX_OPTIONS = ['grow', 'initial', 'auto', 'none', 'noshrink', 'nogrow' ];\n\t var LAYOUT_OPTIONS = ['row', 'column'];\n\t var ALIGNMENT_MAIN_AXIS= [ \"\", \"start\", \"center\", \"end\", \"stretch\", \"space-around\", \"space-between\" ];\n\t var ALIGNMENT_CROSS_AXIS= [ \"\", \"start\", \"center\", \"end\", \"stretch\" ];\n\t\n\t var config = {\n\t /**\n\t * Enable directive attribute-to-class conversions\n\t * Developers can use `` to quickly\n\t * disable the Layout directives and prohibit the injection of Layout classNames\n\t */\n\t enabled: true,\n\t\n\t /**\n\t * List of mediaQuery breakpoints and associated suffixes\n\t *\n\t * [\n\t * { suffix: \"sm\", mediaQuery: \"screen and (max-width: 599px)\" },\n\t * { suffix: \"md\", mediaQuery: \"screen and (min-width: 600px) and (max-width: 959px)\" }\n\t * ]\n\t */\n\t breakpoints: []\n\t };\n\t\n\t registerLayoutAPI( angular.module('material.core.layout', ['ng']) );\n\t\n\t /**\n\t * registerLayoutAPI()\n\t *\n\t * The original ngMaterial Layout solution used attribute selectors and CSS.\n\t *\n\t * ```html\n\t *
My Content
\n\t * ```\n\t *\n\t * ```css\n\t * [layout] {\n\t * box-sizing: border-box;\n\t * display:flex;\n\t * }\n\t * [layout=column] {\n\t * flex-direction : column\n\t * }\n\t * ```\n\t *\n\t * Use of attribute selectors creates significant performance impacts in some\n\t * browsers... mainly IE.\n\t *\n\t * This module registers directives that allow the same layout attributes to be\n\t * interpreted and converted to class selectors. The directive will add equivalent classes to each element that\n\t * contains a Layout directive.\n\t *\n\t * ```html\n\t *
My Content
\n\t *```\n\t *\n\t * ```css\n\t * .layout {\n\t * box-sizing: border-box;\n\t * display:flex;\n\t * }\n\t * .layout-column {\n\t * flex-direction : column\n\t * }\n\t * ```\n\t */\n\t function registerLayoutAPI(module){\n\t var PREFIX_REGEXP = /^((?:x|data)[\\:\\-_])/i;\n\t var SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\n\t\n\t // NOTE: these are also defined in constants::MEDIA_PRIORITY and constants::MEDIA\n\t var BREAKPOINTS = [ \"\", \"xs\", \"gt-xs\", \"sm\", \"gt-sm\", \"md\", \"gt-md\", \"lg\", \"gt-lg\", \"xl\", \"print\" ];\n\t var API_WITH_VALUES = [ \"layout\", \"flex\", \"flex-order\", \"flex-offset\", \"layout-align\" ];\n\t var API_NO_VALUES = [ \"show\", \"hide\", \"layout-padding\", \"layout-margin\" ];\n\t\n\t\n\t // Build directive registration functions for the standard Layout API... for all breakpoints.\n\t angular.forEach(BREAKPOINTS, function(mqb) {\n\t\n\t // Attribute directives with expected, observable value(s)\n\t angular.forEach( API_WITH_VALUES, function(name){\n\t var fullName = mqb ? name + \"-\" + mqb : name;\n\t module.directive( directiveNormalize(fullName), attributeWithObserve(fullName));\n\t });\n\t\n\t // Attribute directives with no expected value(s)\n\t angular.forEach( API_NO_VALUES, function(name){\n\t var fullName = mqb ? name + \"-\" + mqb : name;\n\t module.directive( directiveNormalize(fullName), attributeWithoutValue(fullName));\n\t });\n\t\n\t });\n\t\n\t // Register other, special directive functions for the Layout features:\n\t module\n\t\n\t .provider('$$mdLayout' , function() {\n\t // Publish internal service for Layouts\n\t return {\n\t $get : angular.noop,\n\t validateAttributeValue : validateAttributeValue,\n\t validateAttributeUsage : validateAttributeUsage,\n\t /**\n\t * Easy way to disable/enable the Layout API.\n\t * When disabled, this stops all attribute-to-classname generations\n\t */\n\t disableLayouts : function(isDisabled) {\n\t config.enabled = (isDisabled !== true);\n\t }\n\t };\n\t })\n\t\n\t .directive('mdLayoutCss' , disableLayoutDirective )\n\t .directive('ngCloak' , buildCloakInterceptor('ng-cloak'))\n\t\n\t .directive('layoutWrap' , attributeWithoutValue('layout-wrap'))\n\t .directive('layoutNowrap' , attributeWithoutValue('layout-nowrap'))\n\t .directive('layoutNoWrap' , attributeWithoutValue('layout-no-wrap'))\n\t .directive('layoutFill' , attributeWithoutValue('layout-fill'))\n\t\n\t // !! Deprecated attributes: use the `-lt` (aka less-than) notations\n\t\n\t .directive('layoutLtMd' , warnAttrNotSupported('layout-lt-md', true))\n\t .directive('layoutLtLg' , warnAttrNotSupported('layout-lt-lg', true))\n\t .directive('flexLtMd' , warnAttrNotSupported('flex-lt-md', true))\n\t .directive('flexLtLg' , warnAttrNotSupported('flex-lt-lg', true))\n\t\n\t .directive('layoutAlignLtMd', warnAttrNotSupported('layout-align-lt-md'))\n\t .directive('layoutAlignLtLg', warnAttrNotSupported('layout-align-lt-lg'))\n\t .directive('flexOrderLtMd' , warnAttrNotSupported('flex-order-lt-md'))\n\t .directive('flexOrderLtLg' , warnAttrNotSupported('flex-order-lt-lg'))\n\t .directive('offsetLtMd' , warnAttrNotSupported('flex-offset-lt-md'))\n\t .directive('offsetLtLg' , warnAttrNotSupported('flex-offset-lt-lg'))\n\t\n\t .directive('hideLtMd' , warnAttrNotSupported('hide-lt-md'))\n\t .directive('hideLtLg' , warnAttrNotSupported('hide-lt-lg'))\n\t .directive('showLtMd' , warnAttrNotSupported('show-lt-md'))\n\t .directive('showLtLg' , warnAttrNotSupported('show-lt-lg'))\n\t\n\t // Determine if\n\t .config( detectDisabledLayouts );\n\t\n\t /**\n\t * Converts snake_case to camelCase.\n\t * Also there is special case for Moz prefix starting with upper case letter.\n\t * @param name Name to normalize\n\t */\n\t function directiveNormalize(name) {\n\t return name\n\t .replace(PREFIX_REGEXP, '')\n\t .replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n\t return offset ? letter.toUpperCase() : letter;\n\t });\n\t }\n\t\n\t }\n\t\n\t\n\t /**\n\t * Detect if any of the HTML tags has a [md-layouts-disabled] attribute;\n\t * If yes, then immediately disable all layout API features\n\t *\n\t * Note: this attribute should be specified on either the HTML or BODY tags\n\t */\n\t /**\n\t * @ngInject\n\t */\n\t function detectDisabledLayouts() {\n\t var isDisabled = !!document.querySelector('[md-layouts-disabled]');\n\t config.enabled = !isDisabled;\n\t }\n\t\n\t /**\n\t * Special directive that will disable ALL Layout conversions of layout\n\t * attribute(s) to classname(s).\n\t *\n\t * \n\t * \n\t *\n\t * \n\t * ...\n\t * \n\t *\n\t * Note: Using md-layout-css directive requires the developer to load the Material\n\t * Layout Attribute stylesheet (which only uses attribute selectors):\n\t *\n\t * `angular-material.layout.css`\n\t *\n\t * Another option is to use the LayoutProvider to configure and disable the attribute\n\t * conversions; this would obviate the use of the `md-layout-css` directive\n\t *\n\t */\n\t function disableLayoutDirective() {\n\t // Return a 1x-only, first-match attribute directive\n\t config.enabled = false;\n\t\n\t return {\n\t restrict : 'A',\n\t priority : '900'\n\t };\n\t }\n\t\n\t /**\n\t * Tail-hook ngCloak to delay the uncloaking while Layout transformers\n\t * finish processing. Eliminates flicker with Material.Layouts\n\t */\n\t function buildCloakInterceptor(className) {\n\t return [ '$timeout', function($timeout){\n\t return {\n\t restrict : 'A',\n\t priority : -10, // run after normal ng-cloak\n\t compile : function( element ) {\n\t if (!config.enabled) return angular.noop;\n\t\n\t // Re-add the cloak\n\t element.addClass(className);\n\t\n\t return function( scope, element ) {\n\t // Wait while layout injectors configure, then uncloak\n\t // NOTE: $rAF does not delay enough... and this is a 1x-only event,\n\t // $timeout is acceptable.\n\t $timeout( function(){\n\t element.removeClass(className);\n\t }, 10, false);\n\t };\n\t }\n\t };\n\t }];\n\t }\n\t\n\t\n\t // *********************************************************************************\n\t //\n\t // These functions create registration functions for ngMaterial Layout attribute directives\n\t // This provides easy translation to switch ngMaterial attribute selectors to\n\t // CLASS selectors and directives; which has huge performance implications\n\t // for IE Browsers\n\t //\n\t // *********************************************************************************\n\t\n\t /**\n\t * Creates a directive registration function where a possible dynamic attribute\n\t * value will be observed/watched.\n\t * @param {string} className attribute name; eg `layout-gt-md` with value =\"row\"\n\t */\n\t function attributeWithObserve(className) {\n\t\n\t return ['$mdUtil', '$interpolate', \"$log\", function(_$mdUtil_, _$interpolate_, _$log_) {\n\t $mdUtil = _$mdUtil_;\n\t $interpolate = _$interpolate_;\n\t $log = _$log_;\n\t\n\t return {\n\t restrict: 'A',\n\t compile: function(element, attr) {\n\t var linkFn;\n\t if (config.enabled) {\n\t // immediately replace static (non-interpolated) invalid values...\n\t\n\t validateAttributeUsage(className, attr, element, $log);\n\t\n\t validateAttributeValue( className,\n\t getNormalizedAttrValue(className, attr, \"\"),\n\t buildUpdateFn(element, className, attr)\n\t );\n\t\n\t linkFn = translateWithValueToCssClass;\n\t }\n\t\n\t // Use for postLink to account for transforms after ng-transclude.\n\t return linkFn || angular.noop;\n\t }\n\t };\n\t }];\n\t\n\t /**\n\t * Add as transformed class selector(s), then\n\t * remove the deprecated attribute selector\n\t */\n\t function translateWithValueToCssClass(scope, element, attrs) {\n\t var updateFn = updateClassWithValue(element, className, attrs);\n\t var unwatch = attrs.$observe(attrs.$normalize(className), updateFn);\n\t\n\t updateFn(getNormalizedAttrValue(className, attrs, \"\"));\n\t scope.$on(\"$destroy\", function() { unwatch(); });\n\t }\n\t }\n\t\n\t /**\n\t * Creates a registration function for ngMaterial Layout attribute directive.\n\t * This is a `simple` transpose of attribute usage to class usage; where we ignore\n\t * any attribute value\n\t */\n\t function attributeWithoutValue(className) {\n\t return ['$mdUtil', '$interpolate', \"$log\", function(_$mdUtil_, _$interpolate_, _$log_) {\n\t $mdUtil = _$mdUtil_;\n\t $interpolate = _$interpolate_;\n\t $log = _$log_;\n\t\n\t return {\n\t restrict: 'A',\n\t compile: function(element, attr) {\n\t var linkFn;\n\t if (config.enabled) {\n\t // immediately replace static (non-interpolated) invalid values...\n\t\n\t validateAttributeValue( className,\n\t getNormalizedAttrValue(className, attr, \"\"),\n\t buildUpdateFn(element, className, attr)\n\t );\n\t\n\t translateToCssClass(null, element);\n\t\n\t // Use for postLink to account for transforms after ng-transclude.\n\t linkFn = translateToCssClass;\n\t }\n\t\n\t return linkFn || angular.noop;\n\t }\n\t };\n\t }];\n\t\n\t /**\n\t * Add as transformed class selector, then\n\t * remove the deprecated attribute selector\n\t */\n\t function translateToCssClass(scope, element) {\n\t element.addClass(className);\n\t }\n\t }\n\t\n\t\n\t\n\t /**\n\t * After link-phase, do NOT remove deprecated layout attribute selector.\n\t * Instead watch the attribute so interpolated data-bindings to layout\n\t * selectors will continue to be supported.\n\t *\n\t * $observe() the className and update with new class (after removing the last one)\n\t *\n\t * e.g. `layout=\"{{layoutDemo.direction}}\"` will update...\n\t *\n\t * NOTE: The value must match one of the specified styles in the CSS.\n\t * For example `flex-gt-md=\"{{size}}` where `scope.size == 47` will NOT work since\n\t * only breakpoints for 0, 5, 10, 15... 100, 33, 34, 66, 67 are defined.\n\t *\n\t */\n\t function updateClassWithValue(element, className) {\n\t var lastClass;\n\t\n\t return function updateClassFn(newValue) {\n\t var value = validateAttributeValue(className, newValue || \"\");\n\t if ( angular.isDefined(value) ) {\n\t if (lastClass) element.removeClass(lastClass);\n\t lastClass = !value ? className : className + \"-\" + value.replace(WHITESPACE, \"-\");\n\t element.addClass(lastClass);\n\t }\n\t };\n\t }\n\t\n\t /**\n\t * Provide console warning that this layout attribute has been deprecated\n\t *\n\t */\n\t function warnAttrNotSupported(className) {\n\t var parts = className.split(\"-\");\n\t return [\"$log\", function($log) {\n\t $log.warn(className + \"has been deprecated. Please use a `\" + parts[0] + \"-gt-` variant.\");\n\t return angular.noop;\n\t }];\n\t }\n\t\n\t /**\n\t * Centralize warnings for known flexbox issues (especially IE-related issues)\n\t */\n\t function validateAttributeUsage(className, attr, element, $log){\n\t var message, usage, url;\n\t var nodeName = element[0].nodeName.toLowerCase();\n\t\n\t switch(className.replace(SUFFIXES,\"\")) {\n\t case \"flex\":\n\t if ((nodeName == \"md-button\") || (nodeName == \"fieldset\")){\n\t // @see https://github.com/philipwalton/flexbugs#9-some-html-elements-cant-be-flex-containers\n\t // Use
wrapper inside (preferred) or outside\n\t\n\t usage = \"<\" + nodeName + \" \" + className + \">\";\n\t url = \"https://github.com/philipwalton/flexbugs#9-some-html-elements-cant-be-flex-containers\";\n\t message = \"Markup '{0}' may not work as expected in IE Browsers. Consult '{1}' for details.\";\n\t\n\t $log.warn( $mdUtil.supplant(message, [usage, url]) );\n\t }\n\t }\n\t\n\t }\n\t\n\t\n\t /**\n\t * For the Layout attribute value, validate or replace with default\n\t * fallback value\n\t */\n\t function validateAttributeValue(className, value, updateFn) {\n\t var origValue = value;\n\t\n\t if (!needsInterpolation(value)) {\n\t switch (className.replace(SUFFIXES,\"\")) {\n\t case 'layout' :\n\t if ( !findIn(value, LAYOUT_OPTIONS) ) {\n\t value = LAYOUT_OPTIONS[0]; // 'row';\n\t }\n\t break;\n\t\n\t case 'flex' :\n\t if (!findIn(value, FLEX_OPTIONS)) {\n\t if (isNaN(value)) {\n\t value = '';\n\t }\n\t }\n\t break;\n\t\n\t case 'flex-offset' :\n\t case 'flex-order' :\n\t if (!value || isNaN(+value)) {\n\t value = '0';\n\t }\n\t break;\n\t\n\t case 'layout-align' :\n\t var axis = extractAlignAxis(value);\n\t value = $mdUtil.supplant(\"{main}-{cross}\",axis);\n\t break;\n\t\n\t case 'layout-padding' :\n\t case 'layout-margin' :\n\t case 'layout-fill' :\n\t case 'layout-wrap' :\n\t case 'layout-nowrap' :\n\t case 'layout-nowrap' :\n\t value = '';\n\t break;\n\t }\n\t\n\t if (value != origValue) {\n\t (updateFn || angular.noop)(value);\n\t }\n\t }\n\t\n\t return value;\n\t }\n\t\n\t /**\n\t * Replace current attribute value with fallback value\n\t */\n\t function buildUpdateFn(element, className, attrs) {\n\t return function updateAttrValue(fallback) {\n\t if (!needsInterpolation(fallback)) {\n\t // Do not modify the element's attribute value; so\n\t // uses '' will not\n\t // be affected. Just update the attrs value.\n\t attrs[attrs.$normalize(className)] = fallback;\n\t }\n\t };\n\t }\n\t\n\t /**\n\t * See if the original value has interpolation symbols:\n\t * e.g. flex-gt-md=\"{{triggerPoint}}\"\n\t */\n\t function needsInterpolation(value) {\n\t return (value || \"\").indexOf($interpolate.startSymbol()) > -1;\n\t }\n\t\n\t function getNormalizedAttrValue(className, attrs, defaultVal) {\n\t var normalizedAttr = attrs.$normalize(className);\n\t return attrs[normalizedAttr] ? attrs[normalizedAttr].replace(WHITESPACE, \"-\") : defaultVal || null;\n\t }\n\t\n\t function findIn(item, list, replaceWith) {\n\t item = replaceWith && item ? item.replace(WHITESPACE, replaceWith) : item;\n\t\n\t var found = false;\n\t if (item) {\n\t list.forEach(function(it) {\n\t it = replaceWith ? it.replace(WHITESPACE, replaceWith) : it;\n\t found = found || (it === item);\n\t });\n\t }\n\t return found;\n\t }\n\t\n\t function extractAlignAxis(attrValue) {\n\t var axis = {\n\t main : \"start\",\n\t cross: \"stretch\"\n\t }, values;\n\t\n\t attrValue = (attrValue || \"\");\n\t\n\t if ( attrValue.indexOf(\"-\") === 0 || attrValue.indexOf(\" \") === 0) {\n\t // For missing main-axis values\n\t attrValue = \"none\" + attrValue;\n\t }\n\t\n\t values = attrValue.toLowerCase().trim().replace(WHITESPACE, \"-\").split(\"-\");\n\t if ( values.length && (values[0] === \"space\") ) {\n\t // for main-axis values of \"space-around\" or \"space-between\"\n\t values = [ values[0]+\"-\"+values[1],values[2] ];\n\t }\n\t\n\t if ( values.length > 0 ) axis.main = values[0] || axis.main;\n\t if ( values.length > 1 ) axis.cross = values[1] || axis.cross;\n\t\n\t if ( ALIGNMENT_MAIN_AXIS.indexOf(axis.main) < 0 ) axis.main = \"start\";\n\t if ( ALIGNMENT_CROSS_AXIS.indexOf(axis.cross) < 0 ) axis.cross = \"stretch\";\n\t\n\t return axis;\n\t }\n\t\n\t\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $$mdMeta\n\t * @module material.core.meta\n\t *\n\t * @description\n\t *\n\t * A provider and a service that simplifies meta tags access\n\t *\n\t * Note: This is intended only for use with dynamic meta tags such as browser color and title.\n\t * Tags that are only processed when the page is rendered (such as `charset`, and `http-equiv`)\n\t * will not work since `$$mdMeta` adds the tags after the page has already been loaded.\n\t *\n\t * ```js\n\t * app.config(function($$mdMetaProvider) {\n\t * var removeMeta = $$mdMetaProvider.setMeta('meta-name', 'content');\n\t * var metaValue = $$mdMetaProvider.getMeta('meta-name'); // -> 'content'\n\t *\n\t * removeMeta();\n\t * });\n\t *\n\t * app.controller('myController', function($$mdMeta) {\n\t * var removeMeta = $$mdMeta.setMeta('meta-name', 'content');\n\t * var metaValue = $$mdMeta.getMeta('meta-name'); // -> 'content'\n\t *\n\t * removeMeta();\n\t * });\n\t * ```\n\t *\n\t * @returns {$$mdMeta.$service}\n\t *\n\t */\n\tangular.module('material.core.meta', [])\n\t .provider('$$mdMeta', function () {\n\t var head = angular.element(document.head);\n\t var metaElements = {};\n\t\n\t /**\n\t * Checks if the requested element was written manually and maps it\n\t *\n\t * @param {string} name meta tag 'name' attribute value\n\t * @returns {boolean} returns true if there is an element with the requested name\n\t */\n\t function mapExistingElement(name) {\n\t if (metaElements[name]) {\n\t return true;\n\t }\n\t\n\t var element = document.getElementsByName(name)[0];\n\t\n\t if (!element) {\n\t return false;\n\t }\n\t\n\t metaElements[name] = angular.element(element);\n\t\n\t return true;\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $$mdMeta#setMeta\n\t *\n\t * @description\n\t * Creates meta element with the 'name' and 'content' attributes,\n\t * if the meta tag is already created than we replace the 'content' value\n\t *\n\t * @param {string} name meta tag 'name' attribute value\n\t * @param {string} content meta tag 'content' attribute value\n\t * @returns {function} remove function\n\t *\n\t */\n\t function setMeta(name, content) {\n\t mapExistingElement(name);\n\t\n\t if (!metaElements[name]) {\n\t var newMeta = angular.element('');\n\t head.append(newMeta);\n\t metaElements[name] = newMeta;\n\t }\n\t else {\n\t metaElements[name].attr('content', content);\n\t }\n\t\n\t return function () {\n\t metaElements[name].attr('content', '');\n\t metaElements[name].remove();\n\t delete metaElements[name];\n\t };\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $$mdMeta#getMeta\n\t *\n\t * @description\n\t * Gets the 'content' attribute value of the wanted meta element\n\t *\n\t * @param {string} name meta tag 'name' attribute value\n\t * @returns {string} content attribute value\n\t */\n\t function getMeta(name) {\n\t if (!mapExistingElement(name)) {\n\t throw Error('$$mdMeta: could not find a meta tag with the name \\'' + name + '\\'');\n\t }\n\t\n\t return metaElements[name].attr('content');\n\t }\n\t\n\t var module = {\n\t setMeta: setMeta,\n\t getMeta: getMeta\n\t };\n\t\n\t return angular.extend({}, module, {\n\t $get: function () {\n\t return module;\n\t }\n\t });\n\t });\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t /**\n\t * @ngdoc module\n\t * @name material.core.componentRegistry\n\t *\n\t * @description\n\t * A component instance registration service.\n\t * Note: currently this as a private service in the SideNav component.\n\t */\n\t ComponentRegistry.$inject = [\"$log\", \"$q\"];\n\t angular.module('material.core')\n\t .factory('$mdComponentRegistry', ComponentRegistry);\n\t\n\t /*\n\t * @private\n\t * @ngdoc factory\n\t * @name ComponentRegistry\n\t * @module material.core.componentRegistry\n\t *\n\t */\n\t function ComponentRegistry($log, $q) {\n\t\n\t var self;\n\t var instances = [ ];\n\t var pendings = { };\n\t\n\t return self = {\n\t /**\n\t * Used to print an error when an instance for a handle isn't found.\n\t */\n\t notFoundError: function(handle, msgContext) {\n\t $log.error( (msgContext || \"\") + 'No instance found for handle', handle);\n\t },\n\t /**\n\t * Return all registered instances as an array.\n\t */\n\t getInstances: function() {\n\t return instances;\n\t },\n\t\n\t /**\n\t * Get a registered instance.\n\t * @param handle the String handle to look up for a registered instance.\n\t */\n\t get: function(handle) {\n\t if ( !isValidID(handle) ) return null;\n\t\n\t var i, j, instance;\n\t for(i = 0, j = instances.length; i < j; i++) {\n\t instance = instances[i];\n\t if(instance.$$mdHandle === handle) {\n\t return instance;\n\t }\n\t }\n\t return null;\n\t },\n\t\n\t /**\n\t * Register an instance.\n\t * @param instance the instance to register\n\t * @param handle the handle to identify the instance under.\n\t */\n\t register: function(instance, handle) {\n\t if ( !handle ) return angular.noop;\n\t\n\t instance.$$mdHandle = handle;\n\t instances.push(instance);\n\t resolveWhen();\n\t\n\t return deregister;\n\t\n\t /**\n\t * Remove registration for an instance\n\t */\n\t function deregister() {\n\t var index = instances.indexOf(instance);\n\t if (index !== -1) {\n\t instances.splice(index, 1);\n\t }\n\t }\n\t\n\t /**\n\t * Resolve any pending promises for this instance\n\t */\n\t function resolveWhen() {\n\t var dfd = pendings[handle];\n\t if ( dfd ) {\n\t dfd.forEach(function (promise) {\n\t promise.resolve(instance);\n\t });\n\t delete pendings[handle];\n\t }\n\t }\n\t },\n\t\n\t /**\n\t * Async accessor to registered component instance\n\t * If not available then a promise is created to notify\n\t * all listeners when the instance is registered.\n\t */\n\t when : function(handle) {\n\t if ( isValidID(handle) ) {\n\t var deferred = $q.defer();\n\t var instance = self.get(handle);\n\t\n\t if ( instance ) {\n\t deferred.resolve( instance );\n\t } else {\n\t if (pendings[handle] === undefined) {\n\t pendings[handle] = [];\n\t }\n\t pendings[handle].push(deferred);\n\t }\n\t\n\t return deferred.promise;\n\t }\n\t return $q.reject(\"Invalid `md-component-id` value.\");\n\t }\n\t\n\t };\n\t\n\t function isValidID(handle){\n\t return handle && (handle !== \"\");\n\t }\n\t\n\t }\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $mdButtonInkRipple\n\t * @module material.core\n\t *\n\t * @description\n\t * Provides ripple effects for md-button. See $mdInkRipple service for all possible configuration options.\n\t *\n\t * @param {object=} scope Scope within the current context\n\t * @param {object=} element The element the ripple effect should be applied to\n\t * @param {object=} options (Optional) Configuration options to override the default ripple configuration\n\t */\n\t\n\t MdButtonInkRipple.$inject = [\"$mdInkRipple\"];\n\t angular.module('material.core')\n\t .factory('$mdButtonInkRipple', MdButtonInkRipple);\n\t\n\t function MdButtonInkRipple($mdInkRipple) {\n\t return {\n\t attach: function attachRipple(scope, element, options) {\n\t options = angular.extend(optionsForElement(element), options);\n\t\n\t return $mdInkRipple.attach(scope, element, options);\n\t }\n\t };\n\t\n\t function optionsForElement(element) {\n\t if (element.hasClass('md-icon-button')) {\n\t return {\n\t isMenuItem: element.hasClass('md-menu-item'),\n\t fitRipple: true,\n\t center: true\n\t };\n\t } else {\n\t return {\n\t isMenuItem: element.hasClass('md-menu-item'),\n\t dimBackground: true\n\t }\n\t }\n\t };\n\t };\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $mdCheckboxInkRipple\n\t * @module material.core\n\t *\n\t * @description\n\t * Provides ripple effects for md-checkbox. See $mdInkRipple service for all possible configuration options.\n\t *\n\t * @param {object=} scope Scope within the current context\n\t * @param {object=} element The element the ripple effect should be applied to\n\t * @param {object=} options (Optional) Configuration options to override the defaultripple configuration\n\t */\n\t\n\t MdCheckboxInkRipple.$inject = [\"$mdInkRipple\"];\n\t angular.module('material.core')\n\t .factory('$mdCheckboxInkRipple', MdCheckboxInkRipple);\n\t\n\t function MdCheckboxInkRipple($mdInkRipple) {\n\t return {\n\t attach: attach\n\t };\n\t\n\t function attach(scope, element, options) {\n\t return $mdInkRipple.attach(scope, element, angular.extend({\n\t center: true,\n\t dimBackground: false,\n\t fitRipple: true\n\t }, options));\n\t };\n\t };\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $mdListInkRipple\n\t * @module material.core\n\t *\n\t * @description\n\t * Provides ripple effects for md-list. See $mdInkRipple service for all possible configuration options.\n\t *\n\t * @param {object=} scope Scope within the current context\n\t * @param {object=} element The element the ripple effect should be applied to\n\t * @param {object=} options (Optional) Configuration options to override the defaultripple configuration\n\t */\n\t\n\t MdListInkRipple.$inject = [\"$mdInkRipple\"];\n\t angular.module('material.core')\n\t .factory('$mdListInkRipple', MdListInkRipple);\n\t\n\t function MdListInkRipple($mdInkRipple) {\n\t return {\n\t attach: attach\n\t };\n\t\n\t function attach(scope, element, options) {\n\t return $mdInkRipple.attach(scope, element, angular.extend({\n\t center: false,\n\t dimBackground: true,\n\t outline: false,\n\t rippleSize: 'full'\n\t }, options));\n\t };\n\t };\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.core.ripple\n\t * @description\n\t * Ripple\n\t */\n\tInkRippleCtrl.$inject = [\"$scope\", \"$element\", \"rippleOptions\", \"$window\", \"$timeout\", \"$mdUtil\", \"$mdColorUtil\"];\n\tInkRippleDirective.$inject = [\"$mdButtonInkRipple\", \"$mdCheckboxInkRipple\"];\n\tangular.module('material.core')\n\t .provider('$mdInkRipple', InkRippleProvider)\n\t .directive('mdInkRipple', InkRippleDirective)\n\t .directive('mdNoInk', attrNoDirective)\n\t .directive('mdNoBar', attrNoDirective)\n\t .directive('mdNoStretch', attrNoDirective);\n\t\n\tvar DURATION = 450;\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdInkRipple\n\t * @module material.core.ripple\n\t *\n\t * @description\n\t * The `md-ink-ripple` directive allows you to specify the ripple color or id a ripple is allowed.\n\t *\n\t * @param {string|boolean} md-ink-ripple A color string `#FF0000` or boolean (`false` or `0`) for preventing ripple\n\t *\n\t * @usage\n\t * ### String values\n\t * \n\t * \n\t * Ripples in red\n\t * \n\t *\n\t * \n\t * Not rippling\n\t * \n\t * \n\t *\n\t * ### Interpolated values\n\t * \n\t * \n\t * Ripples with the return value of 'randomColor' function\n\t * \n\t *\n\t * \n\t * Ripples if 'canRipple' function return value is not 'false' or '0'\n\t * \n\t * \n\t */\n\tfunction InkRippleDirective ($mdButtonInkRipple, $mdCheckboxInkRipple) {\n\t return {\n\t controller: angular.noop,\n\t link: function (scope, element, attr) {\n\t attr.hasOwnProperty('mdInkRippleCheckbox')\n\t ? $mdCheckboxInkRipple.attach(scope, element)\n\t : $mdButtonInkRipple.attach(scope, element);\n\t }\n\t };\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdInkRipple\n\t * @module material.core.ripple\n\t *\n\t * @description\n\t * `$mdInkRipple` is a service for adding ripples to any element\n\t *\n\t * @usage\n\t * \n\t * app.factory('$myElementInkRipple', function($mdInkRipple) {\n\t * return {\n\t * attach: function (scope, element, options) {\n\t * return $mdInkRipple.attach(scope, element, angular.extend({\n\t * center: false,\n\t * dimBackground: true\n\t * }, options));\n\t * }\n\t * };\n\t * });\n\t *\n\t * app.controller('myController', function ($scope, $element, $myElementInkRipple) {\n\t * $scope.onClick = function (ev) {\n\t * $myElementInkRipple.attach($scope, angular.element(ev.target), { center: true });\n\t * }\n\t * });\n\t * \n\t *\n\t * ### Disabling ripples globally\n\t * If you want to disable ink ripples globally, for all components, you can call the\n\t * `disableInkRipple` method in your app's config.\n\t *\n\t * \n\t * app.config(function ($mdInkRippleProvider) {\n\t * $mdInkRippleProvider.disableInkRipple();\n\t * });\n\t */\n\t\n\tfunction InkRippleProvider () {\n\t var isDisabledGlobally = false;\n\t\n\t return {\n\t disableInkRipple: disableInkRipple,\n\t $get: [\"$injector\", function($injector) {\n\t return { attach: attach };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $mdInkRipple#attach\n\t *\n\t * @description\n\t * Attaching given scope, element and options to inkRipple controller\n\t *\n\t * @param {object=} scope Scope within the current context\n\t * @param {object=} element The element the ripple effect should be applied to\n\t * @param {object=} options (Optional) Configuration options to override the defaultRipple configuration\n\t * * `center` - Whether the ripple should start from the center of the container element\n\t * * `dimBackground` - Whether the background should be dimmed with the ripple color\n\t * * `colorElement` - The element the ripple should take its color from, defined by css property `color`\n\t * * `fitRipple` - Whether the ripple should fill the element\n\t */\n\t function attach (scope, element, options) {\n\t if (isDisabledGlobally || element.controller('mdNoInk')) return angular.noop;\n\t return $injector.instantiate(InkRippleCtrl, {\n\t $scope: scope,\n\t $element: element,\n\t rippleOptions: options\n\t });\n\t }\n\t }]\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $mdInkRipple#disableInkRipple\n\t *\n\t * @description\n\t * A config-time method that, when called, disables ripples globally.\n\t */\n\t function disableInkRipple () {\n\t isDisabledGlobally = true;\n\t }\n\t}\n\t\n\t/**\n\t * Controller used by the ripple service in order to apply ripples\n\t * @ngInject\n\t */\n\tfunction InkRippleCtrl ($scope, $element, rippleOptions, $window, $timeout, $mdUtil, $mdColorUtil) {\n\t this.$window = $window;\n\t this.$timeout = $timeout;\n\t this.$mdUtil = $mdUtil;\n\t this.$mdColorUtil = $mdColorUtil;\n\t this.$scope = $scope;\n\t this.$element = $element;\n\t this.options = rippleOptions;\n\t this.mousedown = false;\n\t this.ripples = [];\n\t this.timeout = null; // Stores a reference to the most-recent ripple timeout\n\t this.lastRipple = null;\n\t\n\t $mdUtil.valueOnUse(this, 'container', this.createContainer);\n\t\n\t this.$element.addClass('md-ink-ripple');\n\t\n\t // attach method for unit tests\n\t ($element.controller('mdInkRipple') || {}).createRipple = angular.bind(this, this.createRipple);\n\t ($element.controller('mdInkRipple') || {}).setColor = angular.bind(this, this.color);\n\t\n\t this.bindEvents();\n\t}\n\t\n\t\n\t/**\n\t * Either remove or unlock any remaining ripples when the user mouses off of the element (either by\n\t * mouseup or mouseleave event)\n\t */\n\tfunction autoCleanup (self, cleanupFn) {\n\t\n\t if ( self.mousedown || self.lastRipple ) {\n\t self.mousedown = false;\n\t self.$mdUtil.nextTick( angular.bind(self, cleanupFn), false);\n\t }\n\t\n\t}\n\t\n\t\n\t/**\n\t * Returns the color that the ripple should be (either based on CSS or hard-coded)\n\t * @returns {string}\n\t */\n\tInkRippleCtrl.prototype.color = function (value) {\n\t var self = this;\n\t\n\t // If assigning a color value, apply it to background and the ripple color\n\t if (angular.isDefined(value)) {\n\t self._color = self._parseColor(value);\n\t }\n\t\n\t // If color lookup, use assigned, defined, or inherited\n\t return self._color || self._parseColor( self.inkRipple() ) || self._parseColor( getElementColor() );\n\t\n\t /**\n\t * Finds the color element and returns its text color for use as default ripple color\n\t * @returns {string}\n\t */\n\t function getElementColor () {\n\t var items = self.options && self.options.colorElement ? self.options.colorElement : [];\n\t var elem = items.length ? items[ 0 ] : self.$element[ 0 ];\n\t\n\t return elem ? self.$window.getComputedStyle(elem).color : 'rgb(0,0,0)';\n\t }\n\t};\n\t\n\t/**\n\t * Updating the ripple colors based on the current inkRipple value\n\t * or the element's computed style color\n\t */\n\tInkRippleCtrl.prototype.calculateColor = function () {\n\t return this.color();\n\t};\n\t\n\t\n\t/**\n\t * Takes a string color and converts it to RGBA format\n\t * @param color {string}\n\t * @param [multiplier] {int}\n\t * @returns {string}\n\t */\n\t\n\tInkRippleCtrl.prototype._parseColor = function parseColor (color, multiplier) {\n\t multiplier = multiplier || 1;\n\t var colorUtil = this.$mdColorUtil;\n\t\n\t if (!color) return;\n\t if (color.indexOf('rgba') === 0) return color.replace(/\\d?\\.?\\d*\\s*\\)\\s*$/, (0.1 * multiplier).toString() + ')');\n\t if (color.indexOf('rgb') === 0) return colorUtil.rgbToRgba(color);\n\t if (color.indexOf('#') === 0) return colorUtil.hexToRgba(color);\n\t\n\t};\n\t\n\t/**\n\t * Binds events to the root element for\n\t */\n\tInkRippleCtrl.prototype.bindEvents = function () {\n\t this.$element.on('mousedown', angular.bind(this, this.handleMousedown));\n\t this.$element.on('mouseup touchend', angular.bind(this, this.handleMouseup));\n\t this.$element.on('mouseleave', angular.bind(this, this.handleMouseup));\n\t this.$element.on('touchmove', angular.bind(this, this.handleTouchmove));\n\t};\n\t\n\t/**\n\t * Create a new ripple on every mousedown event from the root element\n\t * @param event {MouseEvent}\n\t */\n\tInkRippleCtrl.prototype.handleMousedown = function (event) {\n\t if ( this.mousedown ) return;\n\t\n\t // When jQuery is loaded, we have to get the original event\n\t if (event.hasOwnProperty('originalEvent')) event = event.originalEvent;\n\t this.mousedown = true;\n\t if (this.options.center) {\n\t this.createRipple(this.container.prop('clientWidth') / 2, this.container.prop('clientWidth') / 2);\n\t } else {\n\t\n\t // We need to calculate the relative coordinates if the target is a sublayer of the ripple element\n\t if (event.srcElement !== this.$element[0]) {\n\t var layerRect = this.$element[0].getBoundingClientRect();\n\t var layerX = event.clientX - layerRect.left;\n\t var layerY = event.clientY - layerRect.top;\n\t\n\t this.createRipple(layerX, layerY);\n\t } else {\n\t this.createRipple(event.offsetX, event.offsetY);\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Either remove or unlock any remaining ripples when the user mouses off of the element (either by\n\t * mouseup, touchend or mouseleave event)\n\t */\n\tInkRippleCtrl.prototype.handleMouseup = function () {\n\t autoCleanup(this, this.clearRipples);\n\t};\n\t\n\t/**\n\t * Either remove or unlock any remaining ripples when the user mouses off of the element (by\n\t * touchmove)\n\t */\n\tInkRippleCtrl.prototype.handleTouchmove = function () {\n\t autoCleanup(this, this.deleteRipples);\n\t};\n\t\n\t/**\n\t * Cycles through all ripples and attempts to remove them.\n\t */\n\tInkRippleCtrl.prototype.deleteRipples = function () {\n\t for (var i = 0; i < this.ripples.length; i++) {\n\t this.ripples[ i ].remove();\n\t }\n\t};\n\t\n\t/**\n\t * Cycles through all ripples and attempts to remove them with fade.\n\t * Depending on logic within `fadeInComplete`, some removals will be postponed.\n\t */\n\tInkRippleCtrl.prototype.clearRipples = function () {\n\t for (var i = 0; i < this.ripples.length; i++) {\n\t this.fadeInComplete(this.ripples[ i ]);\n\t }\n\t};\n\t\n\t/**\n\t * Creates the ripple container element\n\t * @returns {*}\n\t */\n\tInkRippleCtrl.prototype.createContainer = function () {\n\t var container = angular.element('
');\n\t this.$element.append(container);\n\t return container;\n\t};\n\t\n\tInkRippleCtrl.prototype.clearTimeout = function () {\n\t if (this.timeout) {\n\t this.$timeout.cancel(this.timeout);\n\t this.timeout = null;\n\t }\n\t};\n\t\n\tInkRippleCtrl.prototype.isRippleAllowed = function () {\n\t var element = this.$element[0];\n\t do {\n\t if (!element.tagName || element.tagName === 'BODY') break;\n\t\n\t if (element && angular.isFunction(element.hasAttribute)) {\n\t if (element.hasAttribute('disabled')) return false;\n\t if (this.inkRipple() === 'false' || this.inkRipple() === '0') return false;\n\t }\n\t\n\t } while (element = element.parentNode);\n\t return true;\n\t};\n\t\n\t/**\n\t * The attribute `md-ink-ripple` may be a static or interpolated\n\t * color value OR a boolean indicator (used to disable ripples)\n\t */\n\tInkRippleCtrl.prototype.inkRipple = function () {\n\t return this.$element.attr('md-ink-ripple');\n\t};\n\t\n\t/**\n\t * Creates a new ripple and adds it to the container. Also tracks ripple in `this.ripples`.\n\t * @param left\n\t * @param top\n\t */\n\tInkRippleCtrl.prototype.createRipple = function (left, top) {\n\t if (!this.isRippleAllowed()) return;\n\t\n\t var ctrl = this;\n\t var colorUtil = ctrl.$mdColorUtil;\n\t var ripple = angular.element('
');\n\t var width = this.$element.prop('clientWidth');\n\t var height = this.$element.prop('clientHeight');\n\t var x = Math.max(Math.abs(width - left), left) * 2;\n\t var y = Math.max(Math.abs(height - top), top) * 2;\n\t var size = getSize(this.options.fitRipple, x, y);\n\t var color = this.calculateColor();\n\t\n\t ripple.css({\n\t left: left + 'px',\n\t top: top + 'px',\n\t background: 'black',\n\t width: size + 'px',\n\t height: size + 'px',\n\t backgroundColor: colorUtil.rgbaToRgb(color),\n\t borderColor: colorUtil.rgbaToRgb(color)\n\t });\n\t this.lastRipple = ripple;\n\t\n\t // we only want one timeout to be running at a time\n\t this.clearTimeout();\n\t this.timeout = this.$timeout(function () {\n\t ctrl.clearTimeout();\n\t if (!ctrl.mousedown) ctrl.fadeInComplete(ripple);\n\t }, DURATION * 0.35, false);\n\t\n\t if (this.options.dimBackground) this.container.css({ backgroundColor: color });\n\t this.container.append(ripple);\n\t this.ripples.push(ripple);\n\t ripple.addClass('md-ripple-placed');\n\t\n\t this.$mdUtil.nextTick(function () {\n\t\n\t ripple.addClass('md-ripple-scaled md-ripple-active');\n\t ctrl.$timeout(function () {\n\t ctrl.clearRipples();\n\t }, DURATION, false);\n\t\n\t }, false);\n\t\n\t function getSize (fit, x, y) {\n\t return fit\n\t ? Math.max(x, y)\n\t : Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n\t }\n\t};\n\t\n\t\n\t\n\t/**\n\t * After fadeIn finishes, either kicks off the fade-out animation or queues the element for removal on mouseup\n\t * @param ripple\n\t */\n\tInkRippleCtrl.prototype.fadeInComplete = function (ripple) {\n\t if (this.lastRipple === ripple) {\n\t if (!this.timeout && !this.mousedown) {\n\t this.removeRipple(ripple);\n\t }\n\t } else {\n\t this.removeRipple(ripple);\n\t }\n\t};\n\t\n\t/**\n\t * Kicks off the animation for removing a ripple\n\t * @param ripple {Element}\n\t */\n\tInkRippleCtrl.prototype.removeRipple = function (ripple) {\n\t var ctrl = this;\n\t var index = this.ripples.indexOf(ripple);\n\t if (index < 0) return;\n\t this.ripples.splice(this.ripples.indexOf(ripple), 1);\n\t ripple.removeClass('md-ripple-active');\n\t ripple.addClass('md-ripple-remove');\n\t if (this.ripples.length === 0) this.container.css({ backgroundColor: '' });\n\t // use a 2-second timeout in order to allow for the animation to finish\n\t // we don't actually care how long the animation takes\n\t this.$timeout(function () {\n\t ctrl.fadeOutComplete(ripple);\n\t }, DURATION, false);\n\t};\n\t\n\t/**\n\t * Removes the provided ripple from the DOM\n\t * @param ripple\n\t */\n\tInkRippleCtrl.prototype.fadeOutComplete = function (ripple) {\n\t ripple.remove();\n\t this.lastRipple = null;\n\t};\n\t\n\t/**\n\t * Used to create an empty directive. This is used to track flag-directives whose children may have\n\t * functionality based on them.\n\t *\n\t * Example: `md-no-ink` will potentially be used by all child directives.\n\t */\n\tfunction attrNoDirective () {\n\t return { controller: angular.noop };\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $mdTabInkRipple\n\t * @module material.core\n\t *\n\t * @description\n\t * Provides ripple effects for md-tabs. See $mdInkRipple service for all possible configuration options.\n\t *\n\t * @param {object=} scope Scope within the current context\n\t * @param {object=} element The element the ripple effect should be applied to\n\t * @param {object=} options (Optional) Configuration options to override the defaultripple configuration\n\t */\n\t\n\t MdTabInkRipple.$inject = [\"$mdInkRipple\"];\n\t angular.module('material.core')\n\t .factory('$mdTabInkRipple', MdTabInkRipple);\n\t\n\t function MdTabInkRipple($mdInkRipple) {\n\t return {\n\t attach: attach\n\t };\n\t\n\t function attach(scope, element, options) {\n\t return $mdInkRipple.attach(scope, element, angular.extend({\n\t center: false,\n\t dimBackground: true,\n\t outline: false,\n\t rippleSize: 'full'\n\t }, options));\n\t };\n\t };\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\tangular.module('material.core.theming.palette', [])\n\t.constant('$mdColorPalette', {\n\t 'red': {\n\t '50': '#ffebee',\n\t '100': '#ffcdd2',\n\t '200': '#ef9a9a',\n\t '300': '#e57373',\n\t '400': '#ef5350',\n\t '500': '#f44336',\n\t '600': '#e53935',\n\t '700': '#d32f2f',\n\t '800': '#c62828',\n\t '900': '#b71c1c',\n\t 'A100': '#ff8a80',\n\t 'A200': '#ff5252',\n\t 'A400': '#ff1744',\n\t 'A700': '#d50000',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 300 A100',\n\t 'contrastStrongLightColors': '400 500 600 700 A200 A400 A700'\n\t },\n\t 'pink': {\n\t '50': '#fce4ec',\n\t '100': '#f8bbd0',\n\t '200': '#f48fb1',\n\t '300': '#f06292',\n\t '400': '#ec407a',\n\t '500': '#e91e63',\n\t '600': '#d81b60',\n\t '700': '#c2185b',\n\t '800': '#ad1457',\n\t '900': '#880e4f',\n\t 'A100': '#ff80ab',\n\t 'A200': '#ff4081',\n\t 'A400': '#f50057',\n\t 'A700': '#c51162',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 A100',\n\t 'contrastStrongLightColors': '500 600 A200 A400 A700'\n\t },\n\t 'purple': {\n\t '50': '#f3e5f5',\n\t '100': '#e1bee7',\n\t '200': '#ce93d8',\n\t '300': '#ba68c8',\n\t '400': '#ab47bc',\n\t '500': '#9c27b0',\n\t '600': '#8e24aa',\n\t '700': '#7b1fa2',\n\t '800': '#6a1b9a',\n\t '900': '#4a148c',\n\t 'A100': '#ea80fc',\n\t 'A200': '#e040fb',\n\t 'A400': '#d500f9',\n\t 'A700': '#aa00ff',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 A100',\n\t 'contrastStrongLightColors': '300 400 A200 A400 A700'\n\t },\n\t 'deep-purple': {\n\t '50': '#ede7f6',\n\t '100': '#d1c4e9',\n\t '200': '#b39ddb',\n\t '300': '#9575cd',\n\t '400': '#7e57c2',\n\t '500': '#673ab7',\n\t '600': '#5e35b1',\n\t '700': '#512da8',\n\t '800': '#4527a0',\n\t '900': '#311b92',\n\t 'A100': '#b388ff',\n\t 'A200': '#7c4dff',\n\t 'A400': '#651fff',\n\t 'A700': '#6200ea',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 A100',\n\t 'contrastStrongLightColors': '300 400 A200'\n\t },\n\t 'indigo': {\n\t '50': '#e8eaf6',\n\t '100': '#c5cae9',\n\t '200': '#9fa8da',\n\t '300': '#7986cb',\n\t '400': '#5c6bc0',\n\t '500': '#3f51b5',\n\t '600': '#3949ab',\n\t '700': '#303f9f',\n\t '800': '#283593',\n\t '900': '#1a237e',\n\t 'A100': '#8c9eff',\n\t 'A200': '#536dfe',\n\t 'A400': '#3d5afe',\n\t 'A700': '#304ffe',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 A100',\n\t 'contrastStrongLightColors': '300 400 A200 A400'\n\t },\n\t 'blue': {\n\t '50': '#e3f2fd',\n\t '100': '#bbdefb',\n\t '200': '#90caf9',\n\t '300': '#64b5f6',\n\t '400': '#42a5f5',\n\t '500': '#2196f3',\n\t '600': '#1e88e5',\n\t '700': '#1976d2',\n\t '800': '#1565c0',\n\t '900': '#0d47a1',\n\t 'A100': '#82b1ff',\n\t 'A200': '#448aff',\n\t 'A400': '#2979ff',\n\t 'A700': '#2962ff',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 300 400 A100',\n\t 'contrastStrongLightColors': '500 600 700 A200 A400 A700'\n\t },\n\t 'light-blue': {\n\t '50': '#e1f5fe',\n\t '100': '#b3e5fc',\n\t '200': '#81d4fa',\n\t '300': '#4fc3f7',\n\t '400': '#29b6f6',\n\t '500': '#03a9f4',\n\t '600': '#039be5',\n\t '700': '#0288d1',\n\t '800': '#0277bd',\n\t '900': '#01579b',\n\t 'A100': '#80d8ff',\n\t 'A200': '#40c4ff',\n\t 'A400': '#00b0ff',\n\t 'A700': '#0091ea',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '600 700 800 900 A700',\n\t 'contrastStrongLightColors': '600 700 800 A700'\n\t },\n\t 'cyan': {\n\t '50': '#e0f7fa',\n\t '100': '#b2ebf2',\n\t '200': '#80deea',\n\t '300': '#4dd0e1',\n\t '400': '#26c6da',\n\t '500': '#00bcd4',\n\t '600': '#00acc1',\n\t '700': '#0097a7',\n\t '800': '#00838f',\n\t '900': '#006064',\n\t 'A100': '#84ffff',\n\t 'A200': '#18ffff',\n\t 'A400': '#00e5ff',\n\t 'A700': '#00b8d4',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '700 800 900',\n\t 'contrastStrongLightColors': '700 800 900'\n\t },\n\t 'teal': {\n\t '50': '#e0f2f1',\n\t '100': '#b2dfdb',\n\t '200': '#80cbc4',\n\t '300': '#4db6ac',\n\t '400': '#26a69a',\n\t '500': '#009688',\n\t '600': '#00897b',\n\t '700': '#00796b',\n\t '800': '#00695c',\n\t '900': '#004d40',\n\t 'A100': '#a7ffeb',\n\t 'A200': '#64ffda',\n\t 'A400': '#1de9b6',\n\t 'A700': '#00bfa5',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '500 600 700 800 900',\n\t 'contrastStrongLightColors': '500 600 700'\n\t },\n\t 'green': {\n\t '50': '#e8f5e9',\n\t '100': '#c8e6c9',\n\t '200': '#a5d6a7',\n\t '300': '#81c784',\n\t '400': '#66bb6a',\n\t '500': '#4caf50',\n\t '600': '#43a047',\n\t '700': '#388e3c',\n\t '800': '#2e7d32',\n\t '900': '#1b5e20',\n\t 'A100': '#b9f6ca',\n\t 'A200': '#69f0ae',\n\t 'A400': '#00e676',\n\t 'A700': '#00c853',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '500 600 700 800 900',\n\t 'contrastStrongLightColors': '500 600 700'\n\t },\n\t 'light-green': {\n\t '50': '#f1f8e9',\n\t '100': '#dcedc8',\n\t '200': '#c5e1a5',\n\t '300': '#aed581',\n\t '400': '#9ccc65',\n\t '500': '#8bc34a',\n\t '600': '#7cb342',\n\t '700': '#689f38',\n\t '800': '#558b2f',\n\t '900': '#33691e',\n\t 'A100': '#ccff90',\n\t 'A200': '#b2ff59',\n\t 'A400': '#76ff03',\n\t 'A700': '#64dd17',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '700 800 900',\n\t 'contrastStrongLightColors': '700 800 900'\n\t },\n\t 'lime': {\n\t '50': '#f9fbe7',\n\t '100': '#f0f4c3',\n\t '200': '#e6ee9c',\n\t '300': '#dce775',\n\t '400': '#d4e157',\n\t '500': '#cddc39',\n\t '600': '#c0ca33',\n\t '700': '#afb42b',\n\t '800': '#9e9d24',\n\t '900': '#827717',\n\t 'A100': '#f4ff81',\n\t 'A200': '#eeff41',\n\t 'A400': '#c6ff00',\n\t 'A700': '#aeea00',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '900',\n\t 'contrastStrongLightColors': '900'\n\t },\n\t 'yellow': {\n\t '50': '#fffde7',\n\t '100': '#fff9c4',\n\t '200': '#fff59d',\n\t '300': '#fff176',\n\t '400': '#ffee58',\n\t '500': '#ffeb3b',\n\t '600': '#fdd835',\n\t '700': '#fbc02d',\n\t '800': '#f9a825',\n\t '900': '#f57f17',\n\t 'A100': '#ffff8d',\n\t 'A200': '#ffff00',\n\t 'A400': '#ffea00',\n\t 'A700': '#ffd600',\n\t 'contrastDefaultColor': 'dark'\n\t },\n\t 'amber': {\n\t '50': '#fff8e1',\n\t '100': '#ffecb3',\n\t '200': '#ffe082',\n\t '300': '#ffd54f',\n\t '400': '#ffca28',\n\t '500': '#ffc107',\n\t '600': '#ffb300',\n\t '700': '#ffa000',\n\t '800': '#ff8f00',\n\t '900': '#ff6f00',\n\t 'A100': '#ffe57f',\n\t 'A200': '#ffd740',\n\t 'A400': '#ffc400',\n\t 'A700': '#ffab00',\n\t 'contrastDefaultColor': 'dark'\n\t },\n\t 'orange': {\n\t '50': '#fff3e0',\n\t '100': '#ffe0b2',\n\t '200': '#ffcc80',\n\t '300': '#ffb74d',\n\t '400': '#ffa726',\n\t '500': '#ff9800',\n\t '600': '#fb8c00',\n\t '700': '#f57c00',\n\t '800': '#ef6c00',\n\t '900': '#e65100',\n\t 'A100': '#ffd180',\n\t 'A200': '#ffab40',\n\t 'A400': '#ff9100',\n\t 'A700': '#ff6d00',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '800 900',\n\t 'contrastStrongLightColors': '800 900'\n\t },\n\t 'deep-orange': {\n\t '50': '#fbe9e7',\n\t '100': '#ffccbc',\n\t '200': '#ffab91',\n\t '300': '#ff8a65',\n\t '400': '#ff7043',\n\t '500': '#ff5722',\n\t '600': '#f4511e',\n\t '700': '#e64a19',\n\t '800': '#d84315',\n\t '900': '#bf360c',\n\t 'A100': '#ff9e80',\n\t 'A200': '#ff6e40',\n\t 'A400': '#ff3d00',\n\t 'A700': '#dd2c00',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 300 400 A100 A200',\n\t 'contrastStrongLightColors': '500 600 700 800 900 A400 A700'\n\t },\n\t 'brown': {\n\t '50': '#efebe9',\n\t '100': '#d7ccc8',\n\t '200': '#bcaaa4',\n\t '300': '#a1887f',\n\t '400': '#8d6e63',\n\t '500': '#795548',\n\t '600': '#6d4c41',\n\t '700': '#5d4037',\n\t '800': '#4e342e',\n\t '900': '#3e2723',\n\t 'A100': '#d7ccc8',\n\t 'A200': '#bcaaa4',\n\t 'A400': '#8d6e63',\n\t 'A700': '#5d4037',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 A100 A200',\n\t 'contrastStrongLightColors': '300 400'\n\t },\n\t 'grey': {\n\t '50': '#fafafa',\n\t '100': '#f5f5f5',\n\t '200': '#eeeeee',\n\t '300': '#e0e0e0',\n\t '400': '#bdbdbd',\n\t '500': '#9e9e9e',\n\t '600': '#757575',\n\t '700': '#616161',\n\t '800': '#424242',\n\t '900': '#212121',\n\t 'A100': '#ffffff',\n\t 'A200': '#000000',\n\t 'A400': '#303030',\n\t 'A700': '#616161',\n\t 'contrastDefaultColor': 'dark',\n\t 'contrastLightColors': '600 700 800 900 A200 A400 A700'\n\t },\n\t 'blue-grey': {\n\t '50': '#eceff1',\n\t '100': '#cfd8dc',\n\t '200': '#b0bec5',\n\t '300': '#90a4ae',\n\t '400': '#78909c',\n\t '500': '#607d8b',\n\t '600': '#546e7a',\n\t '700': '#455a64',\n\t '800': '#37474f',\n\t '900': '#263238',\n\t 'A100': '#cfd8dc',\n\t 'A200': '#b0bec5',\n\t 'A400': '#78909c',\n\t 'A700': '#455a64',\n\t 'contrastDefaultColor': 'light',\n\t 'contrastDarkColors': '50 100 200 300 A100 A200',\n\t 'contrastStrongLightColors': '400 500 700'\n\t }\n\t});\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function(angular) {\n\t 'use strict';\n\t/**\n\t * @ngdoc module\n\t * @name material.core.theming\n\t * @description\n\t * Theming\n\t */\n\tdetectDisabledThemes.$inject = [\"$mdThemingProvider\"];\n\tThemingDirective.$inject = [\"$mdTheming\", \"$interpolate\", \"$log\"];\n\tThemableDirective.$inject = [\"$mdTheming\"];\n\tThemingProvider.$inject = [\"$mdColorPalette\", \"$$mdMetaProvider\"];\n\tgenerateAllThemes.$inject = [\"$injector\", \"$mdTheming\"];\n\tangular.module('material.core.theming', ['material.core.theming.palette', 'material.core.meta'])\n\t .directive('mdTheme', ThemingDirective)\n\t .directive('mdThemable', ThemableDirective)\n\t .directive('mdThemesDisabled', disableThemesDirective )\n\t .provider('$mdTheming', ThemingProvider)\n\t .config( detectDisabledThemes )\n\t .run(generateAllThemes);\n\t\n\t/**\n\t * Detect if the HTML or the BODY tags has a [md-themes-disabled] attribute\n\t * If yes, then immediately disable all theme stylesheet generation and DOM injection\n\t */\n\t/**\n\t * @ngInject\n\t */\n\tfunction detectDisabledThemes($mdThemingProvider) {\n\t var isDisabled = !!document.querySelector('[md-themes-disabled]');\n\t $mdThemingProvider.disableTheming(isDisabled);\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdThemingProvider\n\t * @module material.core.theming\n\t *\n\t * @description Provider to configure the `$mdTheming` service.\n\t *\n\t * ### Default Theme\n\t * The `$mdThemingProvider` uses by default the following theme configuration:\n\t *\n\t * - Primary Palette: `Primary`\n\t * - Accent Palette: `Pink`\n\t * - Warn Palette: `Deep-Orange`\n\t * - Background Palette: `Grey`\n\t *\n\t * If you don't want to use the `md-theme` directive on the elements itself, you may want to overwrite\n\t * the default theme.
\n\t * This can be done by using the following markup.\n\t *\n\t * \n\t * myAppModule.config(function($mdThemingProvider) {\n\t * $mdThemingProvider\n\t * .theme('default')\n\t * .primaryPalette('blue')\n\t * .accentPalette('teal')\n\t * .warnPalette('red')\n\t * .backgroundPalette('grey');\n\t * });\n\t * \n\t *\n\t\n\t * ### Dynamic Themes\n\t *\n\t * By default, if you change a theme at runtime, the `$mdTheming` service will not detect those changes.
\n\t * If you have an application, which changes its theme on runtime, you have to enable theme watching.\n\t *\n\t * \n\t * myAppModule.config(function($mdThemingProvider) {\n\t * // Enable theme watching.\n\t * $mdThemingProvider.alwaysWatchTheme(true);\n\t * });\n\t * \n\t *\n\t * ### Custom Theme Styles\n\t *\n\t * Sometimes you may want to use your own theme styles for some custom components.
\n\t * You are able to register your own styles by using the following markup.\n\t *\n\t * \n\t * myAppModule.config(function($mdThemingProvider) {\n\t * // Register our custom stylesheet into the theming provider.\n\t * $mdThemingProvider.registerStyles(STYLESHEET);\n\t * });\n\t * \n\t *\n\t * The `registerStyles` method only accepts strings as value, so you're actually not able to load an external\n\t * stylesheet file into the `$mdThemingProvider`.\n\t *\n\t * If it's necessary to load an external stylesheet, we suggest using a bundler, which supports including raw content,\n\t * like [raw-loader](https://github.com/webpack/raw-loader) for `webpack`.\n\t *\n\t * \n\t * myAppModule.config(function($mdThemingProvider) {\n\t * // Register your custom stylesheet into the theming provider.\n\t * $mdThemingProvider.registerStyles(require('../styles/my-component.theme.css'));\n\t * });\n\t * \n\t *\n\t * ### Browser color\n\t *\n\t * Enables browser header coloring\n\t * for more info please visit:\n\t * https://developers.google.com/web/fundamentals/design-and-ui/browser-customization/theme-color\n\t *\n\t * Options parameter:
\n\t * `theme` - A defined theme via `$mdThemeProvider` to use the palettes from. Default is `default` theme.
\n\t * `palette` - Can be any one of the basic material design palettes, extended defined palettes and 'primary',\n\t * 'accent', 'background' and 'warn'. Default is `primary`.
\n\t * `hue` - The hue from the selected palette. Default is `800`
\n\t *\n\t * \n\t * myAppModule.config(function($mdThemingProvider) {\n\t * // Enable browser color\n\t * $mdThemingProvider.enableBrowserColor({\n\t * theme: 'myTheme', // Default is 'default'\n\t * palette: 'accent', // Default is 'primary', any basic material palette and extended palettes are available\n\t * hue: '200' // Default is '800'\n\t * });\n\t * });\n\t * \n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdThemingProvider#registerStyles\n\t * @param {string} styles The styles to be appended to Angular Material's built in theme css.\n\t */\n\t/**\n\t * @ngdoc method\n\t * @name $mdThemingProvider#setNonce\n\t * @param {string} nonceValue The nonce to be added as an attribute to the theme style tags.\n\t * Setting a value allows the use of CSP policy without using the unsafe-inline directive.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdThemingProvider#setDefaultTheme\n\t * @param {string} themeName Default theme name to be applied to elements. Default value is `default`.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdThemingProvider#alwaysWatchTheme\n\t * @param {boolean} watch Whether or not to always watch themes for changes and re-apply\n\t * classes when they change. Default is `false`. Enabling can reduce performance.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdThemingProvider#enableBrowserColor\n\t * @param {Object=} options Options object for the browser color
\n\t * `theme` - A defined theme via `$mdThemeProvider` to use the palettes from. Default is `default` theme.
\n\t * `palette` - Can be any one of the basic material design palettes, extended defined palettes and 'primary',\n\t * 'accent', 'background' and 'warn'. Default is `primary`.
\n\t * `hue` - The hue from the selected palette. Default is `800`
\n\t * @returns {Function} remove function of the browser color\n\t */\n\t\n\t/* Some Example Valid Theming Expressions\n\t * =======================================\n\t *\n\t * Intention group expansion: (valid for primary, accent, warn, background)\n\t *\n\t * {{primary-100}} - grab shade 100 from the primary palette\n\t * {{primary-100-0.7}} - grab shade 100, apply opacity of 0.7\n\t * {{primary-100-contrast}} - grab shade 100's contrast color\n\t * {{primary-hue-1}} - grab the shade assigned to hue-1 from the primary palette\n\t * {{primary-hue-1-0.7}} - apply 0.7 opacity to primary-hue-1\n\t * {{primary-color}} - Generates .md-hue-1, .md-hue-2, .md-hue-3 with configured shades set for each hue\n\t * {{primary-color-0.7}} - Apply 0.7 opacity to each of the above rules\n\t * {{primary-contrast}} - Generates .md-hue-1, .md-hue-2, .md-hue-3 with configured contrast (ie. text) color shades set for each hue\n\t * {{primary-contrast-0.7}} - Apply 0.7 opacity to each of the above rules\n\t *\n\t * Foreground expansion: Applies rgba to black/white foreground text\n\t *\n\t * {{foreground-1}} - used for primary text\n\t * {{foreground-2}} - used for secondary text/divider\n\t * {{foreground-3}} - used for disabled text\n\t * {{foreground-4}} - used for dividers\n\t *\n\t */\n\t\n\t// In memory generated CSS rules; registered by theme.name\n\tvar GENERATED = { };\n\t\n\t// In memory storage of defined themes and color palettes (both loaded by CSS, and user specified)\n\tvar PALETTES;\n\t\n\t// Text Colors on light and dark backgrounds\n\t// @see https://www.google.com/design/spec/style/color.html#color-text-background-colors\n\tvar DARK_FOREGROUND = {\n\t name: 'dark',\n\t '1': 'rgba(0,0,0,0.87)',\n\t '2': 'rgba(0,0,0,0.54)',\n\t '3': 'rgba(0,0,0,0.38)',\n\t '4': 'rgba(0,0,0,0.12)'\n\t};\n\tvar LIGHT_FOREGROUND = {\n\t name: 'light',\n\t '1': 'rgba(255,255,255,1.0)',\n\t '2': 'rgba(255,255,255,0.7)',\n\t '3': 'rgba(255,255,255,0.5)',\n\t '4': 'rgba(255,255,255,0.12)'\n\t};\n\t\n\tvar DARK_SHADOW = '1px 1px 0px rgba(0,0,0,0.4), -1px -1px 0px rgba(0,0,0,0.4)';\n\tvar LIGHT_SHADOW = '';\n\t\n\tvar DARK_CONTRAST_COLOR = colorToRgbaArray('rgba(0,0,0,0.87)');\n\tvar LIGHT_CONTRAST_COLOR = colorToRgbaArray('rgba(255,255,255,0.87)');\n\tvar STRONG_LIGHT_CONTRAST_COLOR = colorToRgbaArray('rgb(255,255,255)');\n\t\n\tvar THEME_COLOR_TYPES = ['primary', 'accent', 'warn', 'background'];\n\tvar DEFAULT_COLOR_TYPE = 'primary';\n\t\n\t// A color in a theme will use these hues by default, if not specified by user.\n\tvar LIGHT_DEFAULT_HUES = {\n\t 'accent': {\n\t 'default': 'A200',\n\t 'hue-1': 'A100',\n\t 'hue-2': 'A400',\n\t 'hue-3': 'A700'\n\t },\n\t 'background': {\n\t 'default': '50',\n\t 'hue-1': 'A100',\n\t 'hue-2': '100',\n\t 'hue-3': '300'\n\t }\n\t};\n\t\n\tvar DARK_DEFAULT_HUES = {\n\t 'background': {\n\t 'default': 'A400',\n\t 'hue-1': '800',\n\t 'hue-2': '900',\n\t 'hue-3': 'A200'\n\t }\n\t};\n\tTHEME_COLOR_TYPES.forEach(function(colorType) {\n\t // Color types with unspecified default hues will use these default hue values\n\t var defaultDefaultHues = {\n\t 'default': '500',\n\t 'hue-1': '300',\n\t 'hue-2': '800',\n\t 'hue-3': 'A100'\n\t };\n\t if (!LIGHT_DEFAULT_HUES[colorType]) LIGHT_DEFAULT_HUES[colorType] = defaultDefaultHues;\n\t if (!DARK_DEFAULT_HUES[colorType]) DARK_DEFAULT_HUES[colorType] = defaultDefaultHues;\n\t});\n\t\n\tvar VALID_HUE_VALUES = [\n\t '50', '100', '200', '300', '400', '500', '600',\n\t '700', '800', '900', 'A100', 'A200', 'A400', 'A700'\n\t];\n\t\n\tvar themeConfig = {\n\t disableTheming : false, // Generate our themes at run time; also disable stylesheet DOM injection\n\t generateOnDemand : false, // Whether or not themes are to be generated on-demand (vs. eagerly).\n\t registeredStyles : [], // Custom styles registered to be used in the theming of custom components.\n\t nonce : null // Nonce to be added as an attribute to the generated themes style tags.\n\t};\n\t\n\t/**\n\t *\n\t */\n\tfunction ThemingProvider($mdColorPalette, $$mdMetaProvider) {\n\t ThemingService.$inject = [\"$rootScope\", \"$log\"];\n\t PALETTES = { };\n\t var THEMES = { };\n\t\n\t var themingProvider;\n\t\n\t var alwaysWatchTheme = false;\n\t var defaultTheme = 'default';\n\t\n\t // Load JS Defined Palettes\n\t angular.extend(PALETTES, $mdColorPalette);\n\t\n\t // Default theme defined in core.js\n\t\n\t /**\n\t * Adds `theme-color` and `msapplication-navbutton-color` meta tags with the color parameter\n\t * @param {string} color Hex value of the wanted browser color\n\t * @returns {Function} Remove function of the meta tags\n\t */\n\t var setBrowserColor = function (color) {\n\t // Chrome, Firefox OS and Opera\n\t var removeChrome = $$mdMetaProvider.setMeta('theme-color', color);\n\t // Windows Phone\n\t var removeWindows = $$mdMetaProvider.setMeta('msapplication-navbutton-color', color);\n\t\n\t return function () {\n\t removeChrome();\n\t removeWindows();\n\t }\n\t };\n\t\n\t /**\n\t * Enables browser header coloring\n\t * for more info please visit:\n\t * https://developers.google.com/web/fundamentals/design-and-ui/browser-customization/theme-color\n\t *\n\t * The default color is `800` from `primary` palette of the `default` theme\n\t *\n\t * options are:\n\t * `theme` - A defined theme via `$mdThemeProvider` to use the palettes from. Default is `default` theme\n\t * `palette` - Can be any one of the basic material design palettes, extended defined palettes and 'primary',\n\t * 'accent', 'background' and 'warn'. Default is `primary`\n\t * `hue` - The hue from the selected palette. Default is `800`\n\t *\n\t * @param {Object=} options Options object for the browser color\n\t * @returns {Function} remove function of the browser color\n\t */\n\t var enableBrowserColor = function (options) {\n\t options = angular.isObject(options) ? options : {};\n\t\n\t var theme = options.theme || 'default';\n\t var hue = options.hue || '800';\n\t\n\t var palette = PALETTES[options.palette] ||\n\t PALETTES[THEMES[theme].colors[options.palette || 'primary'].name];\n\t\n\t var color = angular.isObject(palette[hue]) ? palette[hue].hex : palette[hue];\n\t\n\t return setBrowserColor(color);\n\t };\n\t\n\t return themingProvider = {\n\t definePalette: definePalette,\n\t extendPalette: extendPalette,\n\t theme: registerTheme,\n\t\n\t /**\n\t * return a read-only clone of the current theme configuration\n\t */\n\t configuration : function() {\n\t return angular.extend( { }, themeConfig, {\n\t defaultTheme : defaultTheme,\n\t alwaysWatchTheme : alwaysWatchTheme,\n\t registeredStyles : [].concat(themeConfig.registeredStyles)\n\t });\n\t },\n\t\n\t /**\n\t * Easy way to disable theming without having to use\n\t * `.constant(\"$MD_THEME_CSS\",\"\");` This disables\n\t * all dynamic theme style sheet generations and injections...\n\t */\n\t disableTheming: function(isDisabled) {\n\t themeConfig.disableTheming = angular.isUndefined(isDisabled) || !!isDisabled;\n\t },\n\t\n\t registerStyles: function(styles) {\n\t themeConfig.registeredStyles.push(styles);\n\t },\n\t\n\t setNonce: function(nonceValue) {\n\t themeConfig.nonce = nonceValue;\n\t },\n\t\n\t generateThemesOnDemand: function(onDemand) {\n\t themeConfig.generateOnDemand = onDemand;\n\t },\n\t\n\t setDefaultTheme: function(theme) {\n\t defaultTheme = theme;\n\t },\n\t\n\t alwaysWatchTheme: function(alwaysWatch) {\n\t alwaysWatchTheme = alwaysWatch;\n\t },\n\t\n\t enableBrowserColor: enableBrowserColor,\n\t\n\t $get: ThemingService,\n\t _LIGHT_DEFAULT_HUES: LIGHT_DEFAULT_HUES,\n\t _DARK_DEFAULT_HUES: DARK_DEFAULT_HUES,\n\t _PALETTES: PALETTES,\n\t _THEMES: THEMES,\n\t _parseRules: parseRules,\n\t _rgba: rgba\n\t };\n\t\n\t // Example: $mdThemingProvider.definePalette('neonRed', { 50: '#f5fafa', ... });\n\t function definePalette(name, map) {\n\t map = map || {};\n\t PALETTES[name] = checkPaletteValid(name, map);\n\t return themingProvider;\n\t }\n\t\n\t // Returns an new object which is a copy of a given palette `name` with variables from\n\t // `map` overwritten\n\t // Example: var neonRedMap = $mdThemingProvider.extendPalette('red', { 50: '#f5fafafa' });\n\t function extendPalette(name, map) {\n\t return checkPaletteValid(name, angular.extend({}, PALETTES[name] || {}, map) );\n\t }\n\t\n\t // Make sure that palette has all required hues\n\t function checkPaletteValid(name, map) {\n\t var missingColors = VALID_HUE_VALUES.filter(function(field) {\n\t return !map[field];\n\t });\n\t if (missingColors.length) {\n\t throw new Error(\"Missing colors %1 in palette %2!\"\n\t .replace('%1', missingColors.join(', '))\n\t .replace('%2', name));\n\t }\n\t\n\t return map;\n\t }\n\t\n\t // Register a theme (which is a collection of color palettes to use with various states\n\t // ie. warn, accent, primary )\n\t // Optionally inherit from an existing theme\n\t // $mdThemingProvider.theme('custom-theme').primaryPalette('red');\n\t function registerTheme(name, inheritFrom) {\n\t if (THEMES[name]) return THEMES[name];\n\t\n\t inheritFrom = inheritFrom || 'default';\n\t\n\t var parentTheme = typeof inheritFrom === 'string' ? THEMES[inheritFrom] : inheritFrom;\n\t var theme = new Theme(name);\n\t\n\t if (parentTheme) {\n\t angular.forEach(parentTheme.colors, function(color, colorType) {\n\t theme.colors[colorType] = {\n\t name: color.name,\n\t // Make sure a COPY of the hues is given to the child color,\n\t // not the same reference.\n\t hues: angular.extend({}, color.hues)\n\t };\n\t });\n\t }\n\t THEMES[name] = theme;\n\t\n\t return theme;\n\t }\n\t\n\t function Theme(name) {\n\t var self = this;\n\t self.name = name;\n\t self.colors = {};\n\t\n\t self.dark = setDark;\n\t setDark(false);\n\t\n\t function setDark(isDark) {\n\t isDark = arguments.length === 0 ? true : !!isDark;\n\t\n\t // If no change, abort\n\t if (isDark === self.isDark) return;\n\t\n\t self.isDark = isDark;\n\t\n\t self.foregroundPalette = self.isDark ? LIGHT_FOREGROUND : DARK_FOREGROUND;\n\t self.foregroundShadow = self.isDark ? DARK_SHADOW : LIGHT_SHADOW;\n\t\n\t // Light and dark themes have different default hues.\n\t // Go through each existing color type for this theme, and for every\n\t // hue value that is still the default hue value from the previous light/dark setting,\n\t // set it to the default hue value from the new light/dark setting.\n\t var newDefaultHues = self.isDark ? DARK_DEFAULT_HUES : LIGHT_DEFAULT_HUES;\n\t var oldDefaultHues = self.isDark ? LIGHT_DEFAULT_HUES : DARK_DEFAULT_HUES;\n\t angular.forEach(newDefaultHues, function(newDefaults, colorType) {\n\t var color = self.colors[colorType];\n\t var oldDefaults = oldDefaultHues[colorType];\n\t if (color) {\n\t for (var hueName in color.hues) {\n\t if (color.hues[hueName] === oldDefaults[hueName]) {\n\t color.hues[hueName] = newDefaults[hueName];\n\t }\n\t }\n\t }\n\t });\n\t\n\t return self;\n\t }\n\t\n\t THEME_COLOR_TYPES.forEach(function(colorType) {\n\t var defaultHues = (self.isDark ? DARK_DEFAULT_HUES : LIGHT_DEFAULT_HUES)[colorType];\n\t self[colorType + 'Palette'] = function setPaletteType(paletteName, hues) {\n\t var color = self.colors[colorType] = {\n\t name: paletteName,\n\t hues: angular.extend({}, defaultHues, hues)\n\t };\n\t\n\t Object.keys(color.hues).forEach(function(name) {\n\t if (!defaultHues[name]) {\n\t throw new Error(\"Invalid hue name '%1' in theme %2's %3 color %4. Available hue names: %4\"\n\t .replace('%1', name)\n\t .replace('%2', self.name)\n\t .replace('%3', paletteName)\n\t .replace('%4', Object.keys(defaultHues).join(', '))\n\t );\n\t }\n\t });\n\t Object.keys(color.hues).map(function(key) {\n\t return color.hues[key];\n\t }).forEach(function(hueValue) {\n\t if (VALID_HUE_VALUES.indexOf(hueValue) == -1) {\n\t throw new Error(\"Invalid hue value '%1' in theme %2's %3 color %4. Available hue values: %5\"\n\t .replace('%1', hueValue)\n\t .replace('%2', self.name)\n\t .replace('%3', colorType)\n\t .replace('%4', paletteName)\n\t .replace('%5', VALID_HUE_VALUES.join(', '))\n\t );\n\t }\n\t });\n\t return self;\n\t };\n\t\n\t self[colorType + 'Color'] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t console.warn('$mdThemingProviderTheme.' + colorType + 'Color() has been deprecated. ' +\n\t 'Use $mdThemingProviderTheme.' + colorType + 'Palette() instead.');\n\t return self[colorType + 'Palette'].apply(self, args);\n\t };\n\t });\n\t }\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $mdTheming\n\t *\n\t * @description\n\t *\n\t * Service that makes an element apply theming related classes to itself.\n\t *\n\t * ```js\n\t * app.directive('myFancyDirective', function($mdTheming) {\n\t * return {\n\t * restrict: 'e',\n\t * link: function(scope, el, attrs) {\n\t * $mdTheming(el);\n\t * }\n\t * };\n\t * });\n\t * ```\n\t * @param {el=} element to apply theming to\n\t */\n\t /* @ngInject */\n\t function ThemingService($rootScope, $log) {\n\t // Allow us to be invoked via a linking function signature.\n\t var applyTheme = function (scope, el) {\n\t if (el === undefined) { el = scope; scope = undefined; }\n\t if (scope === undefined) { scope = $rootScope; }\n\t applyTheme.inherit(el, el);\n\t };\n\t\n\t applyTheme.THEMES = angular.extend({}, THEMES);\n\t applyTheme.PALETTES = angular.extend({}, PALETTES);\n\t applyTheme.inherit = inheritTheme;\n\t applyTheme.registered = registered;\n\t applyTheme.defaultTheme = function() { return defaultTheme; };\n\t applyTheme.generateTheme = function(name) { generateTheme(THEMES[name], name, themeConfig.nonce); };\n\t applyTheme.setBrowserColor = enableBrowserColor;\n\t\n\t return applyTheme;\n\t\n\t /**\n\t * Determine is specified theme name is a valid, registered theme\n\t */\n\t function registered(themeName) {\n\t if (themeName === undefined || themeName === '') return true;\n\t return applyTheme.THEMES[themeName] !== undefined;\n\t }\n\t\n\t /**\n\t * Get theme name for the element, then update with Theme CSS class\n\t */\n\t function inheritTheme (el, parent) {\n\t var ctrl = parent.controller('mdTheme');\n\t var attrThemeValue = el.attr('md-theme-watch');\n\t var watchTheme = (alwaysWatchTheme || angular.isDefined(attrThemeValue)) && attrThemeValue != 'false';\n\t\n\t updateThemeClass(lookupThemeName());\n\t\n\t if ((alwaysWatchTheme && !registerChangeCallback()) || (!alwaysWatchTheme && watchTheme)) {\n\t el.on('$destroy', $rootScope.$watch(lookupThemeName, updateThemeClass) );\n\t }\n\t\n\t /**\n\t * Find the theme name from the parent controller or element data\n\t */\n\t function lookupThemeName() {\n\t // As a few components (dialog) add their controllers later, we should also watch for a controller init.\n\t ctrl = parent.controller('mdTheme') || el.data('$mdThemeController');\n\t return ctrl && ctrl.$mdTheme || (defaultTheme == 'default' ? '' : defaultTheme);\n\t }\n\t\n\t /**\n\t * Remove old theme class and apply a new one\n\t * NOTE: if not a valid theme name, then the current name is not changed\n\t */\n\t function updateThemeClass(theme) {\n\t if (!theme) return;\n\t if (!registered(theme)) {\n\t $log.warn('Attempted to use unregistered theme \\'' + theme + '\\'. ' +\n\t 'Register it with $mdThemingProvider.theme().');\n\t }\n\t\n\t var oldTheme = el.data('$mdThemeName');\n\t if (oldTheme) el.removeClass('md-' + oldTheme +'-theme');\n\t el.addClass('md-' + theme + '-theme');\n\t el.data('$mdThemeName', theme);\n\t if (ctrl) {\n\t el.data('$mdThemeController', ctrl);\n\t }\n\t }\n\t\n\t /**\n\t * Register change callback with parent mdTheme controller\n\t */\n\t function registerChangeCallback() {\n\t var parentController = parent.controller('mdTheme');\n\t if (!parentController) return false;\n\t el.on('$destroy', parentController.registerChanges( function() {\n\t updateThemeClass(lookupThemeName());\n\t }));\n\t return true;\n\t }\n\t }\n\t\n\t }\n\t}\n\t\n\tfunction ThemingDirective($mdTheming, $interpolate, $log) {\n\t return {\n\t priority: 100,\n\t link: {\n\t pre: function(scope, el, attrs) {\n\t var registeredCallbacks = [];\n\t var ctrl = {\n\t registerChanges: function (cb, context) {\n\t if (context) {\n\t cb = angular.bind(context, cb);\n\t }\n\t\n\t registeredCallbacks.push(cb);\n\t\n\t return function () {\n\t var index = registeredCallbacks.indexOf(cb);\n\t\n\t if (index > -1) {\n\t registeredCallbacks.splice(index, 1);\n\t }\n\t };\n\t },\n\t $setTheme: function (theme) {\n\t if (!$mdTheming.registered(theme)) {\n\t $log.warn('attempted to use unregistered theme \\'' + theme + '\\'');\n\t }\n\t ctrl.$mdTheme = theme;\n\t\n\t registeredCallbacks.forEach(function (cb) {\n\t cb();\n\t });\n\t }\n\t };\n\t el.data('$mdThemeController', ctrl);\n\t ctrl.$setTheme($interpolate(attrs.mdTheme)(scope));\n\t attrs.$observe('mdTheme', ctrl.$setTheme);\n\t }\n\t }\n\t };\n\t}\n\t\n\t/**\n\t * Special directive that will disable ALL runtime Theme style generation and DOM injection\n\t *\n\t * \n\t * \n\t *\n\t * \n\t * ...\n\t * \n\t *\n\t * Note: Using md-themes-css directive requires the developer to load external\n\t * theme stylesheets; e.g. custom themes from Material-Tools:\n\t *\n\t * `angular-material.themes.css`\n\t *\n\t * Another option is to use the ThemingProvider to configure and disable the attribute\n\t * conversions; this would obviate the use of the `md-themes-css` directive\n\t *\n\t */\n\tfunction disableThemesDirective() {\n\t themeConfig.disableTheming = true;\n\t\n\t // Return a 1x-only, first-match attribute directive\n\t return {\n\t restrict : 'A',\n\t priority : '900'\n\t };\n\t}\n\t\n\tfunction ThemableDirective($mdTheming) {\n\t return $mdTheming;\n\t}\n\t\n\tfunction parseRules(theme, colorType, rules) {\n\t checkValidPalette(theme, colorType);\n\t\n\t rules = rules.replace(/THEME_NAME/g, theme.name);\n\t var generatedRules = [];\n\t var color = theme.colors[colorType];\n\t\n\t var themeNameRegex = new RegExp('\\\\.md-' + theme.name + '-theme', 'g');\n\t // Matches '{{ primary-color }}', etc\n\t var hueRegex = new RegExp('(\\'|\")?{{\\\\s*(' + colorType + ')-(color|contrast)-?(\\\\d\\\\.?\\\\d*)?\\\\s*}}(\\\"|\\')?','g');\n\t var simpleVariableRegex = /'?\"?\\{\\{\\s*([a-zA-Z]+)-(A?\\d+|hue\\-[0-3]|shadow|default)-?(\\d\\.?\\d*)?(contrast)?\\s*\\}\\}'?\"?/g;\n\t var palette = PALETTES[color.name];\n\t\n\t // find and replace simple variables where we use a specific hue, not an entire palette\n\t // eg. \"{{primary-100}}\"\n\t //\\(' + THEME_COLOR_TYPES.join('\\|') + '\\)'\n\t rules = rules.replace(simpleVariableRegex, function(match, colorType, hue, opacity, contrast) {\n\t if (colorType === 'foreground') {\n\t if (hue == 'shadow') {\n\t return theme.foregroundShadow;\n\t } else {\n\t return theme.foregroundPalette[hue] || theme.foregroundPalette['1'];\n\t }\n\t }\n\t\n\t // `default` is also accepted as a hue-value, because the background palettes are\n\t // using it as a name for the default hue.\n\t if (hue.indexOf('hue') === 0 || hue === 'default') {\n\t hue = theme.colors[colorType].hues[hue];\n\t }\n\t\n\t return rgba( (PALETTES[ theme.colors[colorType].name ][hue] || '')[contrast ? 'contrast' : 'value'], opacity );\n\t });\n\t\n\t // For each type, generate rules for each hue (ie. default, md-hue-1, md-hue-2, md-hue-3)\n\t angular.forEach(color.hues, function(hueValue, hueName) {\n\t var newRule = rules\n\t .replace(hueRegex, function(match, _, colorType, hueType, opacity) {\n\t return rgba(palette[hueValue][hueType === 'color' ? 'value' : 'contrast'], opacity);\n\t });\n\t if (hueName !== 'default') {\n\t newRule = newRule.replace(themeNameRegex, '.md-' + theme.name + '-theme.md-' + hueName);\n\t }\n\t\n\t // Don't apply a selector rule to the default theme, making it easier to override\n\t // styles of the base-component\n\t if (theme.name == 'default') {\n\t var themeRuleRegex = /((?:(?:(?: |>|\\.|\\w|-|:|\\(|\\)|\\[|\\]|\"|'|=)+) )?)((?:(?:\\w|\\.|-)+)?)\\.md-default-theme((?: |>|\\.|\\w|-|:|\\(|\\)|\\[|\\]|\"|'|=)*)/g;\n\t newRule = newRule.replace(themeRuleRegex, function(match, prefix, target, suffix) {\n\t return match + ', ' + prefix + target + suffix;\n\t });\n\t }\n\t generatedRules.push(newRule);\n\t });\n\t\n\t return generatedRules;\n\t}\n\t\n\tvar rulesByType = {};\n\t\n\t// Generate our themes at run time given the state of THEMES and PALETTES\n\tfunction generateAllThemes($injector, $mdTheming) {\n\t var head = document.head;\n\t var firstChild = head ? head.firstElementChild : null;\n\t var themeCss = !themeConfig.disableTheming && $injector.has('$MD_THEME_CSS') ? $injector.get('$MD_THEME_CSS') : '';\n\t\n\t // Append our custom registered styles to the theme stylesheet.\n\t themeCss += themeConfig.registeredStyles.join('');\n\t\n\t if ( !firstChild ) return;\n\t if (themeCss.length === 0) return; // no rules, so no point in running this expensive task\n\t\n\t // Expose contrast colors for palettes to ensure that text is always readable\n\t angular.forEach(PALETTES, sanitizePalette);\n\t\n\t // MD_THEME_CSS is a string generated by the build process that includes all the themable\n\t // components as templates\n\t\n\t // Break the CSS into individual rules\n\t var rules = themeCss\n\t .split(/\\}(?!(\\}|'|\"|;))/)\n\t .filter(function(rule) { return rule && rule.trim().length; })\n\t .map(function(rule) { return rule.trim() + '}'; });\n\t\n\t\n\t var ruleMatchRegex = new RegExp('md-(' + THEME_COLOR_TYPES.join('|') + ')', 'g');\n\t\n\t THEME_COLOR_TYPES.forEach(function(type) {\n\t rulesByType[type] = '';\n\t });\n\t\n\t\n\t // Sort the rules based on type, allowing us to do color substitution on a per-type basis\n\t rules.forEach(function(rule) {\n\t var match = rule.match(ruleMatchRegex);\n\t // First: test that if the rule has '.md-accent', it goes into the accent set of rules\n\t for (var i = 0, type; type = THEME_COLOR_TYPES[i]; i++) {\n\t if (rule.indexOf('.md-' + type) > -1) {\n\t return rulesByType[type] += rule;\n\t }\n\t }\n\t\n\t // If no eg 'md-accent' class is found, try to just find 'accent' in the rule and guess from\n\t // there\n\t for (i = 0; type = THEME_COLOR_TYPES[i]; i++) {\n\t if (rule.indexOf(type) > -1) {\n\t return rulesByType[type] += rule;\n\t }\n\t }\n\t\n\t // Default to the primary array\n\t return rulesByType[DEFAULT_COLOR_TYPE] += rule;\n\t });\n\t\n\t // If themes are being generated on-demand, quit here. The user will later manually\n\t // call generateTheme to do this on a theme-by-theme basis.\n\t if (themeConfig.generateOnDemand) return;\n\t\n\t angular.forEach($mdTheming.THEMES, function(theme) {\n\t if (!GENERATED[theme.name] && !($mdTheming.defaultTheme() !== 'default' && theme.name === 'default')) {\n\t generateTheme(theme, theme.name, themeConfig.nonce);\n\t }\n\t });\n\t\n\t\n\t // *************************\n\t // Internal functions\n\t // *************************\n\t\n\t // The user specifies a 'default' contrast color as either light or dark,\n\t // then explicitly lists which hues are the opposite contrast (eg. A100 has dark, A200 has light)\n\t function sanitizePalette(palette, name) {\n\t var defaultContrast = palette.contrastDefaultColor;\n\t var lightColors = palette.contrastLightColors || [];\n\t var strongLightColors = palette.contrastStrongLightColors || [];\n\t var darkColors = palette.contrastDarkColors || [];\n\t\n\t // These colors are provided as space-separated lists\n\t if (typeof lightColors === 'string') lightColors = lightColors.split(' ');\n\t if (typeof strongLightColors === 'string') strongLightColors = strongLightColors.split(' ');\n\t if (typeof darkColors === 'string') darkColors = darkColors.split(' ');\n\t\n\t // Cleanup after ourselves\n\t delete palette.contrastDefaultColor;\n\t delete palette.contrastLightColors;\n\t delete palette.contrastStrongLightColors;\n\t delete palette.contrastDarkColors;\n\t\n\t // Change { 'A100': '#fffeee' } to { 'A100': { value: '#fffeee', contrast:DARK_CONTRAST_COLOR }\n\t angular.forEach(palette, function(hueValue, hueName) {\n\t if (angular.isObject(hueValue)) return; // Already converted\n\t // Map everything to rgb colors\n\t var rgbValue = colorToRgbaArray(hueValue);\n\t if (!rgbValue) {\n\t throw new Error(\"Color %1, in palette %2's hue %3, is invalid. Hex or rgb(a) color expected.\"\n\t .replace('%1', hueValue)\n\t .replace('%2', palette.name)\n\t .replace('%3', hueName));\n\t }\n\t\n\t palette[hueName] = {\n\t hex: palette[hueName],\n\t value: rgbValue,\n\t contrast: getContrastColor()\n\t };\n\t function getContrastColor() {\n\t if (defaultContrast === 'light') {\n\t if (darkColors.indexOf(hueName) > -1) {\n\t return DARK_CONTRAST_COLOR;\n\t } else {\n\t return strongLightColors.indexOf(hueName) > -1 ? STRONG_LIGHT_CONTRAST_COLOR\n\t : LIGHT_CONTRAST_COLOR;\n\t }\n\t } else {\n\t if (lightColors.indexOf(hueName) > -1) {\n\t return strongLightColors.indexOf(hueName) > -1 ? STRONG_LIGHT_CONTRAST_COLOR\n\t : LIGHT_CONTRAST_COLOR;\n\t } else {\n\t return DARK_CONTRAST_COLOR;\n\t }\n\t }\n\t }\n\t });\n\t }\n\t}\n\t\n\tfunction generateTheme(theme, name, nonce) {\n\t var head = document.head;\n\t var firstChild = head ? head.firstElementChild : null;\n\t\n\t if (!GENERATED[name]) {\n\t // For each theme, use the color palettes specified for\n\t // `primary`, `warn` and `accent` to generate CSS rules.\n\t THEME_COLOR_TYPES.forEach(function(colorType) {\n\t var styleStrings = parseRules(theme, colorType, rulesByType[colorType]);\n\t while (styleStrings.length) {\n\t var styleContent = styleStrings.shift();\n\t if (styleContent) {\n\t var style = document.createElement('style');\n\t style.setAttribute('md-theme-style', '');\n\t if (nonce) {\n\t style.setAttribute('nonce', nonce);\n\t }\n\t style.appendChild(document.createTextNode(styleContent));\n\t head.insertBefore(style, firstChild);\n\t }\n\t }\n\t });\n\t\n\t GENERATED[theme.name] = true;\n\t }\n\t\n\t}\n\t\n\t\n\tfunction checkValidPalette(theme, colorType) {\n\t // If theme attempts to use a palette that doesnt exist, throw error\n\t if (!PALETTES[ (theme.colors[colorType] || {}).name ]) {\n\t throw new Error(\n\t \"You supplied an invalid color palette for theme %1's %2 palette. Available palettes: %3\"\n\t .replace('%1', theme.name)\n\t .replace('%2', colorType)\n\t .replace('%3', Object.keys(PALETTES).join(', '))\n\t );\n\t }\n\t}\n\t\n\tfunction colorToRgbaArray(clr) {\n\t if (angular.isArray(clr) && clr.length == 3) return clr;\n\t if (/^rgb/.test(clr)) {\n\t return clr.replace(/(^\\s*rgba?\\(|\\)\\s*$)/g, '').split(',').map(function(value, i) {\n\t return i == 3 ? parseFloat(value, 10) : parseInt(value, 10);\n\t });\n\t }\n\t if (clr.charAt(0) == '#') clr = clr.substring(1);\n\t if (!/^([a-fA-F0-9]{3}){1,2}$/g.test(clr)) return;\n\t\n\t var dig = clr.length / 3;\n\t var red = clr.substr(0, dig);\n\t var grn = clr.substr(dig, dig);\n\t var blu = clr.substr(dig * 2);\n\t if (dig === 1) {\n\t red += red;\n\t grn += grn;\n\t blu += blu;\n\t }\n\t return [parseInt(red, 16), parseInt(grn, 16), parseInt(blu, 16)];\n\t}\n\t\n\tfunction rgba(rgbArray, opacity) {\n\t if ( !rgbArray ) return \"rgb('0,0,0')\";\n\t\n\t if (rgbArray.length == 4) {\n\t rgbArray = angular.copy(rgbArray);\n\t opacity ? rgbArray.pop() : opacity = rgbArray.pop();\n\t }\n\t return opacity && (typeof opacity == 'number' || (typeof opacity == 'string' && opacity.length)) ?\n\t 'rgba(' + rgbArray.join(',') + ',' + opacity + ')' :\n\t 'rgb(' + rgbArray.join(',') + ')';\n\t}\n\t\n\t\n\t})(window.angular);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t// Polyfill angular < 1.4 (provide $animateCss)\n\tangular\n\t .module('material.core')\n\t .factory('$$mdAnimate', [\"$q\", \"$timeout\", \"$mdConstant\", \"$animateCss\", function($q, $timeout, $mdConstant, $animateCss){\n\t\n\t // Since $$mdAnimate is injected into $mdUtil... use a wrapper function\n\t // to subsequently inject $mdUtil as an argument to the AnimateDomUtils\n\t\n\t return function($mdUtil) {\n\t return AnimateDomUtils( $mdUtil, $q, $timeout, $mdConstant, $animateCss);\n\t };\n\t }]);\n\t\n\t/**\n\t * Factory function that requires special injections\n\t */\n\tfunction AnimateDomUtils($mdUtil, $q, $timeout, $mdConstant, $animateCss) {\n\t var self;\n\t return self = {\n\t /**\n\t *\n\t */\n\t translate3d : function( target, from, to, options ) {\n\t return $animateCss(target,{\n\t from:from,\n\t to:to,\n\t addClass:options.transitionInClass,\n\t removeClass:options.transitionOutClass\n\t })\n\t .start()\n\t .then(function(){\n\t // Resolve with reverser function...\n\t return reverseTranslate;\n\t });\n\t\n\t /**\n\t * Specific reversal of the request translate animation above...\n\t */\n\t function reverseTranslate (newFrom) {\n\t return $animateCss(target, {\n\t to: newFrom || from,\n\t addClass: options.transitionOutClass,\n\t removeClass: options.transitionInClass\n\t }).start();\n\t\n\t }\n\t },\n\t\n\t /**\n\t * Listen for transitionEnd event (with optional timeout)\n\t * Announce completion or failure via promise handlers\n\t */\n\t waitTransitionEnd: function (element, opts) {\n\t var TIMEOUT = 3000; // fallback is 3 secs\n\t\n\t return $q(function(resolve, reject){\n\t opts = opts || { };\n\t\n\t // If there is no transition is found, resolve immediately\n\t //\n\t // NOTE: using $mdUtil.nextTick() causes delays/issues\n\t if (noTransitionFound(opts.cachedTransitionStyles)) {\n\t TIMEOUT = 0;\n\t }\n\t\n\t var timer = $timeout(finished, opts.timeout || TIMEOUT);\n\t element.on($mdConstant.CSS.TRANSITIONEND, finished);\n\t\n\t /**\n\t * Upon timeout or transitionEnd, reject or resolve (respectively) this promise.\n\t * NOTE: Make sure this transitionEnd didn't bubble up from a child\n\t */\n\t function finished(ev) {\n\t if ( ev && ev.target !== element[0]) return;\n\t\n\t if ( ev ) $timeout.cancel(timer);\n\t element.off($mdConstant.CSS.TRANSITIONEND, finished);\n\t\n\t // Never reject since ngAnimate may cause timeouts due missed transitionEnd events\n\t resolve();\n\t\n\t }\n\t\n\t /**\n\t * Checks whether or not there is a transition.\n\t *\n\t * @param styles The cached styles to use for the calculation. If null, getComputedStyle()\n\t * will be used.\n\t *\n\t * @returns {boolean} True if there is no transition/duration; false otherwise.\n\t */\n\t function noTransitionFound(styles) {\n\t styles = styles || window.getComputedStyle(element[0]);\n\t\n\t return styles.transitionDuration == '0s' || (!styles.transition && !styles.transitionProperty);\n\t }\n\t\n\t });\n\t },\n\t\n\t calculateTransformValues: function (element, originator) {\n\t var origin = originator.element;\n\t var bounds = originator.bounds;\n\t\n\t if (origin || bounds) {\n\t var originBnds = origin ? self.clientRect(origin) || currentBounds() : self.copyRect(bounds);\n\t var dialogRect = self.copyRect(element[0].getBoundingClientRect());\n\t var dialogCenterPt = self.centerPointFor(dialogRect);\n\t var originCenterPt = self.centerPointFor(originBnds);\n\t\n\t return {\n\t centerX: originCenterPt.x - dialogCenterPt.x,\n\t centerY: originCenterPt.y - dialogCenterPt.y,\n\t scaleX: Math.round(100 * Math.min(0.5, originBnds.width / dialogRect.width)) / 100,\n\t scaleY: Math.round(100 * Math.min(0.5, originBnds.height / dialogRect.height)) / 100\n\t };\n\t }\n\t return {centerX: 0, centerY: 0, scaleX: 0.5, scaleY: 0.5};\n\t\n\t /**\n\t * This is a fallback if the origin information is no longer valid, then the\n\t * origin bounds simply becomes the current bounds for the dialogContainer's parent\n\t */\n\t function currentBounds() {\n\t var cntr = element ? element.parent() : null;\n\t var parent = cntr ? cntr.parent() : null;\n\t\n\t return parent ? self.clientRect(parent) : null;\n\t }\n\t },\n\t\n\t /**\n\t * Calculate the zoom transform from dialog to origin.\n\t *\n\t * We use this to set the dialog position immediately;\n\t * then the md-transition-in actually translates back to\n\t * `translate3d(0,0,0) scale(1.0)`...\n\t *\n\t * NOTE: all values are rounded to the nearest integer\n\t */\n\t calculateZoomToOrigin: function (element, originator) {\n\t var zoomTemplate = \"translate3d( {centerX}px, {centerY}px, 0 ) scale( {scaleX}, {scaleY} )\";\n\t var buildZoom = angular.bind(null, $mdUtil.supplant, zoomTemplate);\n\t\n\t return buildZoom(self.calculateTransformValues(element, originator));\n\t },\n\t\n\t /**\n\t * Calculate the slide transform from panel to origin.\n\t * NOTE: all values are rounded to the nearest integer\n\t */\n\t calculateSlideToOrigin: function (element, originator) {\n\t var slideTemplate = \"translate3d( {centerX}px, {centerY}px, 0 )\";\n\t var buildSlide = angular.bind(null, $mdUtil.supplant, slideTemplate);\n\t\n\t return buildSlide(self.calculateTransformValues(element, originator));\n\t },\n\t\n\t /**\n\t * Enhance raw values to represent valid css stylings...\n\t */\n\t toCss : function( raw ) {\n\t var css = { };\n\t var lookups = 'left top right bottom width height x y min-width min-height max-width max-height';\n\t\n\t angular.forEach(raw, function(value,key) {\n\t if ( angular.isUndefined(value) ) return;\n\t\n\t if ( lookups.indexOf(key) >= 0 ) {\n\t css[key] = value + 'px';\n\t } else {\n\t switch (key) {\n\t case 'transition':\n\t convertToVendor(key, $mdConstant.CSS.TRANSITION, value);\n\t break;\n\t case 'transform':\n\t convertToVendor(key, $mdConstant.CSS.TRANSFORM, value);\n\t break;\n\t case 'transformOrigin':\n\t convertToVendor(key, $mdConstant.CSS.TRANSFORM_ORIGIN, value);\n\t break;\n\t case 'font-size':\n\t css['font-size'] = value; // font sizes aren't always in px\n\t break;\n\t }\n\t }\n\t });\n\t\n\t return css;\n\t\n\t function convertToVendor(key, vendor, value) {\n\t angular.forEach(vendor.split(' '), function (key) {\n\t css[key] = value;\n\t });\n\t }\n\t },\n\t\n\t /**\n\t * Convert the translate CSS value to key/value pair(s).\n\t */\n\t toTransformCss: function (transform, addTransition, transition) {\n\t var css = {};\n\t angular.forEach($mdConstant.CSS.TRANSFORM.split(' '), function (key) {\n\t css[key] = transform;\n\t });\n\t\n\t if (addTransition) {\n\t transition = transition || \"all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) !important\";\n\t css.transition = transition;\n\t }\n\t\n\t return css;\n\t },\n\t\n\t /**\n\t * Clone the Rect and calculate the height/width if needed\n\t */\n\t copyRect: function (source, destination) {\n\t if (!source) return null;\n\t\n\t destination = destination || {};\n\t\n\t angular.forEach('left top right bottom width height'.split(' '), function (key) {\n\t destination[key] = Math.round(source[key]);\n\t });\n\t\n\t destination.width = destination.width || (destination.right - destination.left);\n\t destination.height = destination.height || (destination.bottom - destination.top);\n\t\n\t return destination;\n\t },\n\t\n\t /**\n\t * Calculate ClientRect of element; return null if hidden or zero size\n\t */\n\t clientRect: function (element) {\n\t var bounds = angular.element(element)[0].getBoundingClientRect();\n\t var isPositiveSizeClientRect = function (rect) {\n\t return rect && (rect.width > 0) && (rect.height > 0);\n\t };\n\t\n\t // If the event origin element has zero size, it has probably been hidden.\n\t return isPositiveSizeClientRect(bounds) ? self.copyRect(bounds) : null;\n\t },\n\t\n\t /**\n\t * Calculate 'rounded' center point of Rect\n\t */\n\t centerPointFor: function (targetRect) {\n\t return targetRect ? {\n\t x: Math.round(targetRect.left + (targetRect.width / 2)),\n\t y: Math.round(targetRect.top + (targetRect.height / 2))\n\t } : { x : 0, y : 0 };\n\t }\n\t\n\t };\n\t}\n\t\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t\"use strict\";\n\t\n\tif (angular.version.minor >= 4) {\n\t angular.module('material.core.animate', []);\n\t} else {\n\t(function() {\n\t\n\t var forEach = angular.forEach;\n\t\n\t var WEBKIT = angular.isDefined(document.documentElement.style.WebkitAppearance);\n\t var TRANSITION_PROP = WEBKIT ? 'WebkitTransition' : 'transition';\n\t var ANIMATION_PROP = WEBKIT ? 'WebkitAnimation' : 'animation';\n\t var PREFIX = WEBKIT ? '-webkit-' : '';\n\t\n\t var TRANSITION_EVENTS = (WEBKIT ? 'webkitTransitionEnd ' : '') + 'transitionend';\n\t var ANIMATION_EVENTS = (WEBKIT ? 'webkitAnimationEnd ' : '') + 'animationend';\n\t\n\t var $$ForceReflowFactory = ['$document', function($document) {\n\t return function() {\n\t return $document[0].body.clientWidth + 1;\n\t }\n\t }];\n\t\n\t var $$rAFMutexFactory = ['$$rAF', function($$rAF) {\n\t return function() {\n\t var passed = false;\n\t $$rAF(function() {\n\t passed = true;\n\t });\n\t return function(fn) {\n\t passed ? fn() : $$rAF(fn);\n\t };\n\t };\n\t }];\n\t\n\t var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) {\n\t var INITIAL_STATE = 0;\n\t var DONE_PENDING_STATE = 1;\n\t var DONE_COMPLETE_STATE = 2;\n\t\n\t function AnimateRunner(host) {\n\t this.setHost(host);\n\t\n\t this._doneCallbacks = [];\n\t this._runInAnimationFrame = $$rAFMutex();\n\t this._state = 0;\n\t }\n\t\n\t AnimateRunner.prototype = {\n\t setHost: function(host) {\n\t this.host = host || {};\n\t },\n\t\n\t done: function(fn) {\n\t if (this._state === DONE_COMPLETE_STATE) {\n\t fn();\n\t } else {\n\t this._doneCallbacks.push(fn);\n\t }\n\t },\n\t\n\t progress: angular.noop,\n\t\n\t getPromise: function() {\n\t if (!this.promise) {\n\t var self = this;\n\t this.promise = $q(function(resolve, reject) {\n\t self.done(function(status) {\n\t status === false ? reject() : resolve();\n\t });\n\t });\n\t }\n\t return this.promise;\n\t },\n\t\n\t then: function(resolveHandler, rejectHandler) {\n\t return this.getPromise().then(resolveHandler, rejectHandler);\n\t },\n\t\n\t 'catch': function(handler) {\n\t return this.getPromise()['catch'](handler);\n\t },\n\t\n\t 'finally': function(handler) {\n\t return this.getPromise()['finally'](handler);\n\t },\n\t\n\t pause: function() {\n\t if (this.host.pause) {\n\t this.host.pause();\n\t }\n\t },\n\t\n\t resume: function() {\n\t if (this.host.resume) {\n\t this.host.resume();\n\t }\n\t },\n\t\n\t end: function() {\n\t if (this.host.end) {\n\t this.host.end();\n\t }\n\t this._resolve(true);\n\t },\n\t\n\t cancel: function() {\n\t if (this.host.cancel) {\n\t this.host.cancel();\n\t }\n\t this._resolve(false);\n\t },\n\t\n\t complete: function(response) {\n\t var self = this;\n\t if (self._state === INITIAL_STATE) {\n\t self._state = DONE_PENDING_STATE;\n\t self._runInAnimationFrame(function() {\n\t self._resolve(response);\n\t });\n\t }\n\t },\n\t\n\t _resolve: function(response) {\n\t if (this._state !== DONE_COMPLETE_STATE) {\n\t forEach(this._doneCallbacks, function(fn) {\n\t fn(response);\n\t });\n\t this._doneCallbacks.length = 0;\n\t this._state = DONE_COMPLETE_STATE;\n\t }\n\t }\n\t };\n\t\n\t // Polyfill AnimateRunner.all which is used by input animations\n\t AnimateRunner.all = function(runners, callback) {\n\t var count = 0;\n\t var status = true;\n\t forEach(runners, function(runner) {\n\t runner.done(onProgress);\n\t });\n\t\n\t function onProgress(response) {\n\t status = status && response;\n\t if (++count === runners.length) {\n\t callback(status);\n\t }\n\t }\n\t };\n\t\n\t return AnimateRunner;\n\t }];\n\t\n\t angular\n\t .module('material.core.animate', [])\n\t .factory('$$forceReflow', $$ForceReflowFactory)\n\t .factory('$$AnimateRunner', $$AnimateRunnerFactory)\n\t .factory('$$rAFMutex', $$rAFMutexFactory)\n\t .factory('$animateCss', ['$window', '$$rAF', '$$AnimateRunner', '$$forceReflow', '$$jqLite', '$timeout', '$animate',\n\t function($window, $$rAF, $$AnimateRunner, $$forceReflow, $$jqLite, $timeout, $animate) {\n\t\n\t function init(element, options) {\n\t\n\t var temporaryStyles = [];\n\t var node = getDomNode(element);\n\t var areAnimationsAllowed = node && $animate.enabled();\n\t\n\t var hasCompleteStyles = false;\n\t var hasCompleteClasses = false;\n\t\n\t if (areAnimationsAllowed) {\n\t if (options.transitionStyle) {\n\t temporaryStyles.push([PREFIX + 'transition', options.transitionStyle]);\n\t }\n\t\n\t if (options.keyframeStyle) {\n\t temporaryStyles.push([PREFIX + 'animation', options.keyframeStyle]);\n\t }\n\t\n\t if (options.delay) {\n\t temporaryStyles.push([PREFIX + 'transition-delay', options.delay + 's']);\n\t }\n\t\n\t if (options.duration) {\n\t temporaryStyles.push([PREFIX + 'transition-duration', options.duration + 's']);\n\t }\n\t\n\t hasCompleteStyles = options.keyframeStyle ||\n\t (options.to && (options.duration > 0 || options.transitionStyle));\n\t hasCompleteClasses = !!options.addClass || !!options.removeClass;\n\t\n\t blockTransition(element, true);\n\t }\n\t\n\t var hasCompleteAnimation = areAnimationsAllowed && (hasCompleteStyles || hasCompleteClasses);\n\t\n\t applyAnimationFromStyles(element, options);\n\t\n\t var animationClosed = false;\n\t var events, eventFn;\n\t\n\t return {\n\t close: $window.close,\n\t start: function() {\n\t var runner = new $$AnimateRunner();\n\t waitUntilQuiet(function() {\n\t blockTransition(element, false);\n\t if (!hasCompleteAnimation) {\n\t return close();\n\t }\n\t\n\t forEach(temporaryStyles, function(entry) {\n\t var key = entry[0];\n\t var value = entry[1];\n\t node.style[camelCase(key)] = value;\n\t });\n\t\n\t applyClasses(element, options);\n\t\n\t var timings = computeTimings(element);\n\t if (timings.duration === 0) {\n\t return close();\n\t }\n\t\n\t var moreStyles = [];\n\t\n\t if (options.easing) {\n\t if (timings.transitionDuration) {\n\t moreStyles.push([PREFIX + 'transition-timing-function', options.easing]);\n\t }\n\t if (timings.animationDuration) {\n\t moreStyles.push([PREFIX + 'animation-timing-function', options.easing]);\n\t }\n\t }\n\t\n\t if (options.delay && timings.animationDelay) {\n\t moreStyles.push([PREFIX + 'animation-delay', options.delay + 's']);\n\t }\n\t\n\t if (options.duration && timings.animationDuration) {\n\t moreStyles.push([PREFIX + 'animation-duration', options.duration + 's']);\n\t }\n\t\n\t forEach(moreStyles, function(entry) {\n\t var key = entry[0];\n\t var value = entry[1];\n\t node.style[camelCase(key)] = value;\n\t temporaryStyles.push(entry);\n\t });\n\t\n\t var maxDelay = timings.delay;\n\t var maxDelayTime = maxDelay * 1000;\n\t var maxDuration = timings.duration;\n\t var maxDurationTime = maxDuration * 1000;\n\t var startTime = Date.now();\n\t\n\t events = [];\n\t if (timings.transitionDuration) {\n\t events.push(TRANSITION_EVENTS);\n\t }\n\t if (timings.animationDuration) {\n\t events.push(ANIMATION_EVENTS);\n\t }\n\t events = events.join(' ');\n\t eventFn = function(event) {\n\t event.stopPropagation();\n\t var ev = event.originalEvent || event;\n\t var timeStamp = ev.timeStamp || Date.now();\n\t var elapsedTime = parseFloat(ev.elapsedTime.toFixed(3));\n\t if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n\t close();\n\t }\n\t };\n\t element.on(events, eventFn);\n\t\n\t applyAnimationToStyles(element, options);\n\t\n\t $timeout(close, maxDelayTime + maxDurationTime * 1.5, false);\n\t });\n\t\n\t return runner;\n\t\n\t function close() {\n\t if (animationClosed) return;\n\t animationClosed = true;\n\t\n\t if (events && eventFn) {\n\t element.off(events, eventFn);\n\t }\n\t applyClasses(element, options);\n\t applyAnimationStyles(element, options);\n\t forEach(temporaryStyles, function(entry) {\n\t node.style[camelCase(entry[0])] = '';\n\t });\n\t runner.complete(true);\n\t return runner;\n\t }\n\t }\n\t }\n\t }\n\t\n\t function applyClasses(element, options) {\n\t if (options.addClass) {\n\t $$jqLite.addClass(element, options.addClass);\n\t options.addClass = null;\n\t }\n\t if (options.removeClass) {\n\t $$jqLite.removeClass(element, options.removeClass);\n\t options.removeClass = null;\n\t }\n\t }\n\t\n\t function computeTimings(element) {\n\t var node = getDomNode(element);\n\t var cs = $window.getComputedStyle(node)\n\t var tdr = parseMaxTime(cs[prop('transitionDuration')]);\n\t var adr = parseMaxTime(cs[prop('animationDuration')]);\n\t var tdy = parseMaxTime(cs[prop('transitionDelay')]);\n\t var ady = parseMaxTime(cs[prop('animationDelay')]);\n\t\n\t adr *= (parseInt(cs[prop('animationIterationCount')], 10) || 1);\n\t var duration = Math.max(adr, tdr);\n\t var delay = Math.max(ady, tdy);\n\t\n\t return {\n\t duration: duration,\n\t delay: delay,\n\t animationDuration: adr,\n\t transitionDuration: tdr,\n\t animationDelay: ady,\n\t transitionDelay: tdy\n\t };\n\t\n\t function prop(key) {\n\t return WEBKIT ? 'Webkit' + key.charAt(0).toUpperCase() + key.substr(1)\n\t : key;\n\t }\n\t }\n\t\n\t function parseMaxTime(str) {\n\t var maxValue = 0;\n\t var values = (str || \"\").split(/\\s*,\\s*/);\n\t forEach(values, function(value) {\n\t // it's always safe to consider only second values and omit `ms` values since\n\t // getComputedStyle will always handle the conversion for us\n\t if (value.charAt(value.length - 1) == 's') {\n\t value = value.substring(0, value.length - 1);\n\t }\n\t value = parseFloat(value) || 0;\n\t maxValue = maxValue ? Math.max(value, maxValue) : value;\n\t });\n\t return maxValue;\n\t }\n\t\n\t var cancelLastRAFRequest;\n\t var rafWaitQueue = [];\n\t function waitUntilQuiet(callback) {\n\t if (cancelLastRAFRequest) {\n\t cancelLastRAFRequest(); //cancels the request\n\t }\n\t rafWaitQueue.push(callback);\n\t cancelLastRAFRequest = $$rAF(function() {\n\t cancelLastRAFRequest = null;\n\t\n\t // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.\n\t // PLEASE EXAMINE THE `$$forceReflow` service to understand why.\n\t var pageWidth = $$forceReflow();\n\t\n\t // we use a for loop to ensure that if the queue is changed\n\t // during this looping then it will consider new requests\n\t for (var i = 0; i < rafWaitQueue.length; i++) {\n\t rafWaitQueue[i](pageWidth);\n\t }\n\t rafWaitQueue.length = 0;\n\t });\n\t }\n\t\n\t function applyAnimationStyles(element, options) {\n\t applyAnimationFromStyles(element, options);\n\t applyAnimationToStyles(element, options);\n\t }\n\t\n\t function applyAnimationFromStyles(element, options) {\n\t if (options.from) {\n\t element.css(options.from);\n\t options.from = null;\n\t }\n\t }\n\t\n\t function applyAnimationToStyles(element, options) {\n\t if (options.to) {\n\t element.css(options.to);\n\t options.to = null;\n\t }\n\t }\n\t\n\t function getDomNode(element) {\n\t for (var i = 0; i < element.length; i++) {\n\t if (element[i].nodeType === 1) return element[i];\n\t }\n\t }\n\t\n\t function blockTransition(element, bool) {\n\t var node = getDomNode(element);\n\t var key = camelCase(PREFIX + 'transition-delay');\n\t node.style[key] = bool ? '-9999s' : '';\n\t }\n\t\n\t return init;\n\t }]);\n\t\n\t /**\n\t * Older browsers [FF31] expect camelCase\n\t * property keys.\n\t * e.g.\n\t * animation-duration --> animationDuration\n\t */\n\t function camelCase(str) {\n\t return str.replace(/-[a-z]/g, function(str) {\n\t return str.charAt(1).toUpperCase();\n\t });\n\t }\n\t\n\t})();\n\t\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.autocomplete\n\t */\n\t/*\n\t * @see js folder for autocomplete implementation\n\t */\n\tangular.module('material.components.autocomplete', [\n\t 'material.core',\n\t 'material.components.icon',\n\t 'material.components.virtualRepeat'\n\t]);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/*\n\t * @ngdoc module\n\t * @name material.components.backdrop\n\t * @description Backdrop\n\t */\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdBackdrop\n\t * @module material.components.backdrop\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * `` is a backdrop element used by other components, such as dialog and bottom sheet.\n\t * Apply class `opaque` to make the backdrop use the theme backdrop color.\n\t *\n\t */\n\t\n\tangular\n\t .module('material.components.backdrop', ['material.core'])\n\t .directive('mdBackdrop', [\"$mdTheming\", \"$mdUtil\", \"$animate\", \"$rootElement\", \"$window\", \"$log\", \"$$rAF\", \"$document\", function BackdropDirective($mdTheming, $mdUtil, $animate, $rootElement, $window, $log, $$rAF, $document) {\n\t var ERROR_CSS_POSITION = ' may not work properly in a scrolled, static-positioned parent container.';\n\t\n\t return {\n\t restrict: 'E',\n\t link: postLink\n\t };\n\t\n\t function postLink(scope, element, attrs) {\n\t // backdrop may be outside the $rootElement, tell ngAnimate to animate regardless\n\t if ($animate.pin) $animate.pin(element, $rootElement);\n\t\n\t var bodyStyles;\n\t\n\t $$rAF(function() {\n\t // If body scrolling has been disabled using mdUtil.disableBodyScroll(),\n\t // adjust the 'backdrop' height to account for the fixed 'body' top offset.\n\t // Note that this can be pretty expensive and is better done inside the $$rAF.\n\t bodyStyles = $window.getComputedStyle($document[0].body);\n\t\n\t if (bodyStyles.position === 'fixed') {\n\t var resizeHandler = $mdUtil.debounce(function(){\n\t bodyStyles = $window.getComputedStyle($document[0].body);\n\t resize();\n\t }, 60, null, false);\n\t\n\t resize();\n\t angular.element($window).on('resize', resizeHandler);\n\t\n\t scope.$on('$destroy', function() {\n\t angular.element($window).off('resize', resizeHandler);\n\t });\n\t }\n\t\n\t // Often $animate.enter() is used to append the backDrop element\n\t // so let's wait until $animate is done...\n\t var parent = element.parent();\n\t\n\t if (parent.length) {\n\t if (parent[0].nodeName === 'BODY') {\n\t element.css('position', 'fixed');\n\t }\n\t\n\t var styles = $window.getComputedStyle(parent[0]);\n\t\n\t if (styles.position === 'static') {\n\t // backdrop uses position:absolute and will not work properly with parent position:static (default)\n\t $log.warn(ERROR_CSS_POSITION);\n\t }\n\t\n\t // Only inherit the parent if the backdrop has a parent.\n\t $mdTheming.inherit(element, parent);\n\t }\n\t });\n\t\n\t function resize() {\n\t var viewportHeight = parseInt(bodyStyles.height, 10) + Math.abs(parseInt(bodyStyles.top, 10));\n\t element.css('height', viewportHeight + 'px');\n\t }\n\t }\n\t\n\t }]);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.bottomSheet\n\t * @description\n\t * BottomSheet\n\t */\n\tMdBottomSheetDirective.$inject = [\"$mdBottomSheet\"];\n\tMdBottomSheetProvider.$inject = [\"$$interimElementProvider\"];\n\tangular\n\t .module('material.components.bottomSheet', [\n\t 'material.core',\n\t 'material.components.backdrop'\n\t ])\n\t .directive('mdBottomSheet', MdBottomSheetDirective)\n\t .provider('$mdBottomSheet', MdBottomSheetProvider);\n\t\n\t/* @ngInject */\n\tfunction MdBottomSheetDirective($mdBottomSheet) {\n\t return {\n\t restrict: 'E',\n\t link : function postLink(scope, element) {\n\t element.addClass('_md'); // private md component indicator for styling\n\t\n\t // When navigation force destroys an interimElement, then\n\t // listen and $destroy() that interim instance...\n\t scope.$on('$destroy', function() {\n\t $mdBottomSheet.destroy();\n\t });\n\t }\n\t };\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdBottomSheet\n\t * @module material.components.bottomSheet\n\t *\n\t * @description\n\t * `$mdBottomSheet` opens a bottom sheet over the app and provides a simple promise API.\n\t *\n\t * ## Restrictions\n\t *\n\t * - The bottom sheet's template must have an outer `` element.\n\t * - Add the `md-grid` class to the bottom sheet for a grid layout.\n\t * - Add the `md-list` class to the bottom sheet for a list layout.\n\t *\n\t * @usage\n\t * \n\t *
\n\t * \n\t * Open a Bottom Sheet!\n\t * \n\t *
\n\t *
\n\t * \n\t * var app = angular.module('app', ['ngMaterial']);\n\t * app.controller('MyController', function($scope, $mdBottomSheet) {\n\t * $scope.openBottomSheet = function() {\n\t * $mdBottomSheet.show({\n\t * template: 'Hello!'\n\t * });\n\t * };\n\t * });\n\t * \n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $mdBottomSheet#show\n\t *\n\t * @description\n\t * Show a bottom sheet with the specified options.\n\t *\n\t * @param {object} options An options object, with the following properties:\n\t *\n\t * - `templateUrl` - `{string=}`: The url of an html template file that will\n\t * be used as the content of the bottom sheet. Restrictions: the template must\n\t * have an outer `md-bottom-sheet` element.\n\t * - `template` - `{string=}`: Same as templateUrl, except this is an actual\n\t * template string.\n\t * - `scope` - `{object=}`: the scope to link the template / controller to. If none is specified, it will create a new child scope.\n\t * This scope will be destroyed when the bottom sheet is removed unless `preserveScope` is set to true.\n\t * - `preserveScope` - `{boolean=}`: whether to preserve the scope when the element is removed. Default is false\n\t * - `controller` - `{string=}`: The controller to associate with this bottom sheet.\n\t * - `locals` - `{string=}`: An object containing key/value pairs. The keys will\n\t * be used as names of values to inject into the controller. For example,\n\t * `locals: {three: 3}` would inject `three` into the controller with the value\n\t * of 3.\n\t * - `clickOutsideToClose` - `{boolean=}`: Whether the user can click outside the bottom sheet to\n\t * close it. Default true.\n\t * - `disableBackdrop` - `{boolean=}`: When set to true, the bottomsheet will not show a backdrop.\n\t * - `escapeToClose` - `{boolean=}`: Whether the user can press escape to close the bottom sheet.\n\t * Default true.\n\t * - `resolve` - `{object=}`: Similar to locals, except it takes promises as values\n\t * and the bottom sheet will not open until the promises resolve.\n\t * - `controllerAs` - `{string=}`: An alias to assign the controller to on the scope.\n\t * - `parent` - `{element=}`: The element to append the bottom sheet to. The `parent` may be a `function`, `string`,\n\t * `object`, or null. Defaults to appending to the body of the root element (or the root element) of the application.\n\t * e.g. angular.element(document.getElementById('content')) or \"#content\"\n\t * - `disableParentScroll` - `{boolean=}`: Whether to disable scrolling while the bottom sheet is open.\n\t * Default true.\n\t *\n\t * @returns {promise} A promise that can be resolved with `$mdBottomSheet.hide()` or\n\t * rejected with `$mdBottomSheet.cancel()`.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdBottomSheet#hide\n\t *\n\t * @description\n\t * Hide the existing bottom sheet and resolve the promise returned from\n\t * `$mdBottomSheet.show()`. This call will close the most recently opened/current bottomsheet (if any).\n\t *\n\t * @param {*=} response An argument for the resolved promise.\n\t *\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdBottomSheet#cancel\n\t *\n\t * @description\n\t * Hide the existing bottom sheet and reject the promise returned from\n\t * `$mdBottomSheet.show()`.\n\t *\n\t * @param {*=} response An argument for the rejected promise.\n\t *\n\t */\n\t\n\tfunction MdBottomSheetProvider($$interimElementProvider) {\n\t // how fast we need to flick down to close the sheet, pixels/ms\n\t bottomSheetDefaults.$inject = [\"$animate\", \"$mdConstant\", \"$mdUtil\", \"$mdTheming\", \"$mdBottomSheet\", \"$rootElement\", \"$mdGesture\", \"$log\"];\n\t var CLOSING_VELOCITY = 0.5;\n\t var PADDING = 80; // same as css\n\t\n\t return $$interimElementProvider('$mdBottomSheet')\n\t .setDefaults({\n\t methods: ['disableParentScroll', 'escapeToClose', 'clickOutsideToClose'],\n\t options: bottomSheetDefaults\n\t });\n\t\n\t /* @ngInject */\n\t function bottomSheetDefaults($animate, $mdConstant, $mdUtil, $mdTheming, $mdBottomSheet, $rootElement,\n\t $mdGesture, $log) {\n\t var backdrop;\n\t\n\t return {\n\t themable: true,\n\t onShow: onShow,\n\t onRemove: onRemove,\n\t disableBackdrop: false,\n\t escapeToClose: true,\n\t clickOutsideToClose: true,\n\t disableParentScroll: true\n\t };\n\t\n\t\n\t function onShow(scope, element, options, controller) {\n\t\n\t element = $mdUtil.extractElementByName(element, 'md-bottom-sheet');\n\t\n\t // prevent tab focus or click focus on the bottom-sheet container\n\t element.attr('tabindex',\"-1\");\n\t\n\t // Once the md-bottom-sheet has `ng-cloak` applied on his template the opening animation will not work properly.\n\t // This is a very common problem, so we have to notify the developer about this.\n\t if (element.hasClass('ng-cloak')) {\n\t var message = '$mdBottomSheet: using `` will affect the bottom-sheet opening animations.';\n\t $log.warn( message, element[0] );\n\t }\n\t\n\t if (!options.disableBackdrop) {\n\t // Add a backdrop that will close on click\n\t backdrop = $mdUtil.createBackdrop(scope, \"md-bottom-sheet-backdrop md-opaque\");\n\t\n\t // Prevent mouse focus on backdrop; ONLY programatic focus allowed.\n\t // This allows clicks on backdrop to propogate to the $rootElement and\n\t // ESC key events to be detected properly.\n\t \n\t backdrop[0].tabIndex = -1;\n\t\n\t if (options.clickOutsideToClose) {\n\t backdrop.on('click', function() {\n\t $mdUtil.nextTick($mdBottomSheet.cancel,true);\n\t });\n\t }\n\t\n\t $mdTheming.inherit(backdrop, options.parent);\n\t\n\t $animate.enter(backdrop, options.parent, null);\n\t }\n\t\n\t var bottomSheet = new BottomSheet(element, options.parent);\n\t options.bottomSheet = bottomSheet;\n\t\n\t $mdTheming.inherit(bottomSheet.element, options.parent);\n\t\n\t if (options.disableParentScroll) {\n\t options.restoreScroll = $mdUtil.disableScrollAround(bottomSheet.element, options.parent);\n\t }\n\t\n\t return $animate.enter(bottomSheet.element, options.parent, backdrop)\n\t .then(function() {\n\t var focusable = $mdUtil.findFocusTarget(element) || angular.element(\n\t element[0].querySelector('button') ||\n\t element[0].querySelector('a') ||\n\t element[0].querySelector($mdUtil.prefixer('ng-click', true))\n\t ) || backdrop;\n\t\n\t if (options.escapeToClose) {\n\t options.rootElementKeyupCallback = function(e) {\n\t if (e.keyCode === $mdConstant.KEY_CODE.ESCAPE) {\n\t $mdUtil.nextTick($mdBottomSheet.cancel,true);\n\t }\n\t };\n\t\n\t $rootElement.on('keyup', options.rootElementKeyupCallback);\n\t focusable && focusable.focus();\n\t }\n\t });\n\t\n\t }\n\t\n\t function onRemove(scope, element, options) {\n\t\n\t var bottomSheet = options.bottomSheet;\n\t\n\t if (!options.disableBackdrop) $animate.leave(backdrop);\n\t return $animate.leave(bottomSheet.element).then(function() {\n\t if (options.disableParentScroll) {\n\t options.restoreScroll();\n\t delete options.restoreScroll;\n\t }\n\t\n\t bottomSheet.cleanup();\n\t });\n\t }\n\t\n\t /**\n\t * BottomSheet class to apply bottom-sheet behavior to an element\n\t */\n\t function BottomSheet(element, parent) {\n\t var deregister = $mdGesture.register(parent, 'drag', { horizontal: false });\n\t parent.on('$md.dragstart', onDragStart)\n\t .on('$md.drag', onDrag)\n\t .on('$md.dragend', onDragEnd);\n\t\n\t return {\n\t element: element,\n\t cleanup: function cleanup() {\n\t deregister();\n\t parent.off('$md.dragstart', onDragStart);\n\t parent.off('$md.drag', onDrag);\n\t parent.off('$md.dragend', onDragEnd);\n\t }\n\t };\n\t\n\t function onDragStart(ev) {\n\t // Disable transitions on transform so that it feels fast\n\t element.css($mdConstant.CSS.TRANSITION_DURATION, '0ms');\n\t }\n\t\n\t function onDrag(ev) {\n\t var transform = ev.pointer.distanceY;\n\t if (transform < 5) {\n\t // Slow down drag when trying to drag up, and stop after PADDING\n\t transform = Math.max(-PADDING, transform / 2);\n\t }\n\t element.css($mdConstant.CSS.TRANSFORM, 'translate3d(0,' + (PADDING + transform) + 'px,0)');\n\t }\n\t\n\t function onDragEnd(ev) {\n\t if (ev.pointer.distanceY > 0 &&\n\t (ev.pointer.distanceY > 20 || Math.abs(ev.pointer.velocityY) > CLOSING_VELOCITY)) {\n\t var distanceRemaining = element.prop('offsetHeight') - ev.pointer.distanceY;\n\t var transitionDuration = Math.min(distanceRemaining / ev.pointer.velocityY * 0.75, 500);\n\t element.css($mdConstant.CSS.TRANSITION_DURATION, transitionDuration + 'ms');\n\t $mdUtil.nextTick($mdBottomSheet.cancel,true);\n\t } else {\n\t element.css($mdConstant.CSS.TRANSITION_DURATION, '');\n\t element.css($mdConstant.CSS.TRANSFORM, '');\n\t }\n\t }\n\t }\n\t\n\t }\n\t\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.button\n\t * @description\n\t *\n\t * Button\n\t */\n\tMdButtonDirective.$inject = [\"$mdButtonInkRipple\", \"$mdTheming\", \"$mdAria\", \"$timeout\"];\n\tMdAnchorDirective.$inject = [\"$mdTheming\"];\n\tangular\n\t .module('material.components.button', [ 'material.core' ])\n\t .directive('mdButton', MdButtonDirective)\n\t .directive('a', MdAnchorDirective);\n\t\n\t\n\t/**\n\t * @private\n\t * @restrict E\n\t *\n\t * @description\n\t * `a` is an anchor directive used to inherit theme colors for md-primary, md-accent, etc.\n\t *\n\t * @usage\n\t *\n\t * \n\t * \n\t * \n\t * \n\t * \n\t */\n\tfunction MdAnchorDirective($mdTheming) {\n\t return {\n\t restrict : 'E',\n\t link : function postLink(scope, element) {\n\t // Make sure to inherit theme so stand-alone anchors\n\t // support theme colors for md-primary, md-accent, etc.\n\t $mdTheming(element);\n\t }\n\t };\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdButton\n\t * @module material.components.button\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * `` is a button directive with optional ink ripples (default enabled).\n\t *\n\t * If you supply a `href` or `ng-href` attribute, it will become an `` element. Otherwise, it\n\t * will become a `';\n\t }\n\t }\n\t\n\t function postLink(scope, element, attr) {\n\t $mdTheming(element);\n\t $mdButtonInkRipple.attach(scope, element);\n\t\n\t // Use async expect to support possible bindings in the button label\n\t $mdAria.expectWithoutText(element, 'aria-label');\n\t\n\t // For anchor elements, we have to set tabindex manually when the\n\t // element is disabled\n\t if (isAnchor(attr) && angular.isDefined(attr.ngDisabled) ) {\n\t scope.$watch(attr.ngDisabled, function(isDisabled) {\n\t element.attr('tabindex', isDisabled ? -1 : 0);\n\t });\n\t }\n\t\n\t // disabling click event when disabled is true\n\t element.on('click', function(e){\n\t if (attr.disabled === true) {\n\t e.preventDefault();\n\t e.stopImmediatePropagation();\n\t }\n\t });\n\t\n\t if (!element.hasClass('md-no-focus')) {\n\t // restrict focus styles to the keyboard\n\t scope.mouseActive = false;\n\t element.on('mousedown', function() {\n\t scope.mouseActive = true;\n\t $timeout(function(){\n\t scope.mouseActive = false;\n\t }, 100);\n\t })\n\t .on('focus', function() {\n\t if (scope.mouseActive === false) {\n\t element.addClass('md-focused');\n\t }\n\t })\n\t .on('blur', function(ev) {\n\t element.removeClass('md-focused');\n\t });\n\t }\n\t\n\t }\n\t\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.card\n\t *\n\t * @description\n\t * Card components.\n\t */\n\tmdCardDirective.$inject = [\"$mdTheming\"];\n\tangular.module('material.components.card', [\n\t 'material.core'\n\t ])\n\t .directive('mdCard', mdCardDirective);\n\t\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdCard\n\t * @module material.components.card\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * The `` directive is a container element used within `` containers.\n\t *\n\t * An image included as a direct descendant will fill the card's width. If you want to avoid this,\n\t * you can add the `md-image-no-fill` class to the parent element. The ``\n\t * container will wrap text content and provide padding. An `` element can be\n\t * optionally included to put content flush against the bottom edge of the card.\n\t *\n\t * Action buttons can be included in an `` element, similar to ``.\n\t * You can then position buttons using layout attributes.\n\t *\n\t * Card is built with:\n\t * * `` - Header for the card, holds avatar, text and squared image\n\t * - `` - Card avatar\n\t * - `md-user-avatar` - Class for user image\n\t * - ``\n\t * - `` - Contains elements for the card description\n\t * - `md-title` - Class for the card title\n\t * - `md-subhead` - Class for the card sub header\n\t * * `` - Image for the card\n\t * * `` - Card content title\n\t * - ``\n\t * - `md-headline` - Class for the card content title\n\t * - `md-subhead` - Class for the card content sub header\n\t * - `` - Squared image within the title\n\t * - `md-media-sm` - Class for small image\n\t * - `md-media-md` - Class for medium image\n\t * - `md-media-lg` - Class for large image\n\t * * `` - Card content\n\t * - `md-media-xl` - Class for extra large image\n\t * * `` - Card actions\n\t * - `` - Icon actions\n\t *\n\t * Cards have constant width and variable heights; where the maximum height is limited to what can\n\t * fit within a single view on a platform, but it can temporarily expand as needed.\n\t *\n\t * @usage\n\t * ### Card with optional footer\n\t * \n\t * \n\t * \"image\n\t * \n\t *

Card headline

\n\t *

Card content

\n\t *
\n\t * \n\t * Card footer\n\t * \n\t *
\n\t *
\n\t *\n\t * ### Card with actions\n\t * \n\t * \n\t * \"image\n\t * \n\t *

Card headline

\n\t *

Card content

\n\t *
\n\t * \n\t * Action 1\n\t * Action 2\n\t * \n\t *
\n\t *
\n\t *\n\t * ### Card with header, image, title actions and content\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * Title\n\t * Sub header\n\t * \n\t * \n\t * \"image\n\t * \n\t * \n\t * Card headline\n\t * Card subheader\n\t * \n\t * \n\t * \n\t * Action 1\n\t * Action 2\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t *

\n\t * Card content\n\t *

\n\t *
\n\t *
\n\t *
\n\t */\n\tfunction mdCardDirective($mdTheming) {\n\t return {\n\t restrict: 'E',\n\t link: function ($scope, $element, attr) {\n\t $element.addClass('_md'); // private md component indicator for styling\n\t $mdTheming($element);\n\t }\n\t };\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.chips\n\t */\n\t/*\n\t * @see js folder for chips implementation\n\t */\n\tangular.module('material.components.chips', [\n\t 'material.core',\n\t 'material.components.autocomplete'\n\t]);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.checkbox\n\t * @description Checkbox module!\n\t */\n\tMdCheckboxDirective.$inject = [\"inputDirective\", \"$mdAria\", \"$mdConstant\", \"$mdTheming\", \"$mdUtil\", \"$timeout\"];\n\tangular\n\t .module('material.components.checkbox', ['material.core'])\n\t .directive('mdCheckbox', MdCheckboxDirective);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdCheckbox\n\t * @module material.components.checkbox\n\t * @restrict E\n\t *\n\t * @description\n\t * The checkbox directive is used like the normal [angular checkbox](https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D).\n\t *\n\t * As per the [material design spec](http://www.google.com/design/spec/style/color.html#color-color-schemes)\n\t * the checkbox is in the accent color by default. The primary color palette may be used with\n\t * the `md-primary` class.\n\t *\n\t * @param {string} ng-model Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {expression=} ng-true-value The value to which the expression should be set when selected.\n\t * @param {expression=} ng-false-value The value to which the expression should be set when not selected.\n\t * @param {string=} ng-change Angular expression to be executed when input changes due to user interaction with the input element.\n\t * @param {boolean=} md-no-ink Use of attribute indicates use of ripple ink effects\n\t * @param {string=} aria-label Adds label to checkbox for accessibility.\n\t * Defaults to checkbox's text. If no default text is found, a warning will be logged.\n\t * @param {expression=} md-indeterminate This determines when the checkbox should be rendered as 'indeterminate'.\n\t * If a truthy expression or no value is passed in the checkbox renders in the md-indeterminate state.\n\t * If falsy expression is passed in it just looks like a normal unchecked checkbox.\n\t * The indeterminate, checked, and unchecked states are mutually exclusive. A box cannot be in any two states at the same time.\n\t * Adding the 'md-indeterminate' attribute overrides any checked/unchecked rendering logic.\n\t * When using the 'md-indeterminate' attribute use 'ng-checked' to define rendering logic instead of using 'ng-model'.\n\t * @param {expression=} ng-checked If this expression evaluates as truthy, the 'md-checked' css class is added to the checkbox and it\n\t * will appear checked.\n\t *\n\t * @usage\n\t * \n\t * \n\t * Finished ?\n\t * \n\t *\n\t * \n\t * No Ink Effects\n\t * \n\t *\n\t * \n\t * Disabled\n\t * \n\t *\n\t * \n\t *\n\t */\n\tfunction MdCheckboxDirective(inputDirective, $mdAria, $mdConstant, $mdTheming, $mdUtil, $timeout) {\n\t inputDirective = inputDirective[0];\n\t\n\t return {\n\t restrict: 'E',\n\t transclude: true,\n\t require: '?ngModel',\n\t priority: 210, // Run before ngAria\n\t template:\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
',\n\t compile: compile\n\t };\n\t\n\t // **********************************************************\n\t // Private Methods\n\t // **********************************************************\n\t\n\t function compile (tElement, tAttrs) {\n\t tAttrs.$set('tabindex', tAttrs.tabindex || '0');\n\t tAttrs.$set('type', 'checkbox');\n\t tAttrs.$set('role', tAttrs.type);\n\t\n\t return {\n\t pre: function(scope, element) {\n\t // Attach a click handler during preLink, in order to immediately stop propagation\n\t // (especially for ng-click) when the checkbox is disabled.\n\t element.on('click', function(e) {\n\t if (this.hasAttribute('disabled')) {\n\t e.stopImmediatePropagation();\n\t }\n\t });\n\t },\n\t post: postLink\n\t };\n\t\n\t function postLink(scope, element, attr, ngModelCtrl) {\n\t var isIndeterminate;\n\t ngModelCtrl = ngModelCtrl || $mdUtil.fakeNgModel();\n\t $mdTheming(element);\n\t\n\t // Redirect focus events to the root element, because IE11 is always focusing the container element instead\n\t // of the md-checkbox element. This causes issues when using ngModelOptions: `updateOnBlur`\n\t element.children().on('focus', function() {\n\t element.focus();\n\t });\n\t\n\t if ($mdUtil.parseAttributeBoolean(attr.mdIndeterminate)) {\n\t setIndeterminateState();\n\t scope.$watch(attr.mdIndeterminate, setIndeterminateState);\n\t }\n\t\n\t if (attr.ngChecked) {\n\t scope.$watch(scope.$eval.bind(scope, attr.ngChecked), function(value) {\n\t ngModelCtrl.$setViewValue(value);\n\t ngModelCtrl.$render();\n\t });\n\t }\n\t\n\t $$watchExpr('ngDisabled', 'tabindex', {\n\t true: '-1',\n\t false: attr.tabindex\n\t });\n\t\n\t $mdAria.expectWithText(element, 'aria-label');\n\t\n\t // Reuse the original input[type=checkbox] directive from Angular core.\n\t // This is a bit hacky as we need our own event listener and own render\n\t // function.\n\t inputDirective.link.pre(scope, {\n\t on: angular.noop,\n\t 0: {}\n\t }, attr, [ngModelCtrl]);\n\t\n\t scope.mouseActive = false;\n\t element.on('click', listener)\n\t .on('keypress', keypressHandler)\n\t .on('mousedown', function() {\n\t scope.mouseActive = true;\n\t $timeout(function() {\n\t scope.mouseActive = false;\n\t }, 100);\n\t })\n\t .on('focus', function() {\n\t if (scope.mouseActive === false) {\n\t element.addClass('md-focused');\n\t }\n\t })\n\t .on('blur', function() {\n\t element.removeClass('md-focused');\n\t });\n\t\n\t ngModelCtrl.$render = render;\n\t\n\t function $$watchExpr(expr, htmlAttr, valueOpts) {\n\t if (attr[expr]) {\n\t scope.$watch(attr[expr], function(val) {\n\t if (valueOpts[val]) {\n\t element.attr(htmlAttr, valueOpts[val]);\n\t }\n\t });\n\t }\n\t }\n\t\n\t function keypressHandler(ev) {\n\t var keyCode = ev.which || ev.keyCode;\n\t if (keyCode === $mdConstant.KEY_CODE.SPACE || keyCode === $mdConstant.KEY_CODE.ENTER) {\n\t ev.preventDefault();\n\t element.addClass('md-focused');\n\t listener(ev);\n\t }\n\t }\n\t\n\t function listener(ev) {\n\t // skipToggle boolean is used by the switch directive to prevent the click event\n\t // when releasing the drag. There will be always a click if releasing the drag over the checkbox\n\t if (element[0].hasAttribute('disabled') || scope.skipToggle) {\n\t return;\n\t }\n\t\n\t scope.$apply(function() {\n\t // Toggle the checkbox value...\n\t var viewValue = attr.ngChecked ? attr.checked : !ngModelCtrl.$viewValue;\n\t\n\t ngModelCtrl.$setViewValue(viewValue, ev && ev.type);\n\t ngModelCtrl.$render();\n\t });\n\t }\n\t\n\t function render() {\n\t // Cast the $viewValue to a boolean since it could be undefined\n\t element.toggleClass('md-checked', !!ngModelCtrl.$viewValue && !isIndeterminate);\n\t }\n\t\n\t function setIndeterminateState(newValue) {\n\t isIndeterminate = newValue !== false;\n\t if (isIndeterminate) {\n\t element.attr('aria-checked', 'mixed');\n\t }\n\t element.toggleClass('md-indeterminate', isIndeterminate);\n\t }\n\t }\n\t }\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function () {\n\t \"use strict\";\n\t\n\t /**\n\t * Use a RegExp to check if the `md-colors=\"\"` is static string\n\t * or one that should be observed and dynamically interpolated.\n\t */\n\t MdColorsDirective.$inject = [\"$mdColors\", \"$mdUtil\", \"$log\", \"$parse\"];\n\t MdColorsService.$inject = [\"$mdTheming\", \"$mdUtil\", \"$log\"];\n\t var STATIC_COLOR_EXPRESSION = /^{((\\s|,)*?[\"'a-zA-Z-]+?\\s*?:\\s*?('|\")[a-zA-Z0-9-.]*('|\"))+\\s*}$/;\n\t var colorPalettes = null;\n\t\n\t /**\n\t * @ngdoc module\n\t * @name material.components.colors\n\t *\n\t * @description\n\t * Define $mdColors service and a `md-colors=\"\"` attribute directive\n\t */\n\t angular\n\t .module('material.components.colors', ['material.core'])\n\t .directive('mdColors', MdColorsDirective)\n\t .service('$mdColors', MdColorsService);\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $mdColors\n\t * @module material.components.colors\n\t *\n\t * @description\n\t * With only defining themes, one couldn't get non ngMaterial elements colored with Material colors,\n\t * `$mdColors` service is used by the md-color directive to convert the 1..n color expressions to RGBA values and will apply\n\t * those values to element as CSS property values.\n\t *\n\t * @usage\n\t * \n\t * angular.controller('myCtrl', function ($mdColors) {\n\t * var color = $mdColors.getThemeColor('myTheme-red-200-0.5');\n\t * ...\n\t * });\n\t * \n\t *\n\t */\n\t function MdColorsService($mdTheming, $mdUtil, $log) {\n\t colorPalettes = colorPalettes || Object.keys($mdTheming.PALETTES);\n\t\n\t // Publish service instance\n\t return {\n\t applyThemeColors: applyThemeColors,\n\t getThemeColor: getThemeColor,\n\t hasTheme: hasTheme\n\t };\n\t\n\t // ********************************************\n\t // Internal Methods\n\t // ********************************************\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $mdColors#applyThemeColors\n\t *\n\t * @description\n\t * Gets a color json object, keys are css properties and values are string of the wanted color\n\t * Then calculate the rgba() values based on the theme color parts\n\t *\n\t * @param {DOMElement} element the element to apply the styles on.\n\t * @param {object} colorExpression json object, keys are css properties and values are string of the wanted color,\n\t * for example: `{color: 'red-A200-0.3'}`.\n\t *\n\t * @usage\n\t * \n\t * app.directive('myDirective', function($mdColors) {\n\t * return {\n\t * ...\n\t * link: function (scope, elem) {\n\t * $mdColors.applyThemeColors(elem, {color: 'red'});\n\t * }\n\t * }\n\t * });\n\t * \n\t */\n\t function applyThemeColors(element, colorExpression) {\n\t try {\n\t if (colorExpression) {\n\t // Assign the calculate RGBA color values directly as inline CSS\n\t element.css(interpolateColors(colorExpression));\n\t }\n\t } catch (e) {\n\t $log.error(e.message);\n\t }\n\t\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $mdColors#getThemeColor\n\t *\n\t * @description\n\t * Get parsed color from expression\n\t *\n\t * @param {string} expression string of a color expression (for instance `'red-700-0.8'`)\n\t *\n\t * @returns {string} a css color expression (for instance `rgba(211, 47, 47, 0.8)`)\n\t *\n\t * @usage\n\t * \n\t * angular.controller('myCtrl', function ($mdColors) {\n\t * var color = $mdColors.getThemeColor('myTheme-red-200-0.5');\n\t * ...\n\t * });\n\t * \n\t */\n\t function getThemeColor(expression) {\n\t var color = extractColorOptions(expression);\n\t\n\t return parseColor(color);\n\t }\n\t\n\t /**\n\t * Return the parsed color\n\t * @param color hashmap of color definitions\n\t * @param contrast whether use contrast color for foreground\n\t * @returns rgba color string\n\t */\n\t function parseColor(color, contrast) {\n\t contrast = contrast || false;\n\t var rgbValues = $mdTheming.PALETTES[color.palette][color.hue];\n\t\n\t rgbValues = contrast ? rgbValues.contrast : rgbValues.value;\n\t\n\t return $mdUtil.supplant('rgba({0}, {1}, {2}, {3})',\n\t [rgbValues[0], rgbValues[1], rgbValues[2], rgbValues[3] || color.opacity]\n\t );\n\t }\n\t\n\t /**\n\t * Convert the color expression into an object with scope-interpolated values\n\t * Then calculate the rgba() values based on the theme color parts\n\t *\n\t * @results Hashmap of CSS properties with associated `rgba( )` string vales\n\t *\n\t *\n\t */\n\t function interpolateColors(themeColors) {\n\t var rgbColors = {};\n\t\n\t var hasColorProperty = themeColors.hasOwnProperty('color');\n\t\n\t angular.forEach(themeColors, function (value, key) {\n\t var color = extractColorOptions(value);\n\t var hasBackground = key.indexOf('background') > -1;\n\t\n\t rgbColors[key] = parseColor(color);\n\t if (hasBackground && !hasColorProperty) {\n\t rgbColors.color = parseColor(color, true);\n\t }\n\t });\n\t\n\t return rgbColors;\n\t }\n\t\n\t /**\n\t * Check if expression has defined theme\n\t * e.g.\n\t * 'myTheme-primary' => true\n\t * 'red-800' => false\n\t */\n\t function hasTheme(expression) {\n\t return angular.isDefined($mdTheming.THEMES[expression.split('-')[0]]);\n\t }\n\t\n\t /**\n\t * For the evaluated expression, extract the color parts into a hash map\n\t */\n\t function extractColorOptions(expression) {\n\t var parts = expression.split('-');\n\t var hasTheme = angular.isDefined($mdTheming.THEMES[parts[0]]);\n\t var theme = hasTheme ? parts.splice(0, 1)[0] : $mdTheming.defaultTheme();\n\t\n\t return {\n\t theme: theme,\n\t palette: extractPalette(parts, theme),\n\t hue: extractHue(parts, theme),\n\t opacity: parts[2] || 1\n\t };\n\t }\n\t\n\t /**\n\t * Calculate the theme palette name\n\t */\n\t function extractPalette(parts, theme) {\n\t // If the next section is one of the palettes we assume it's a two word palette\n\t // Two word palette can be also written in camelCase, forming camelCase to dash-case\n\t\n\t var isTwoWord = parts.length > 1 && colorPalettes.indexOf(parts[1]) !== -1;\n\t var palette = parts[0].replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t\n\t if (isTwoWord) palette = parts[0] + '-' + parts.splice(1, 1);\n\t\n\t if (colorPalettes.indexOf(palette) === -1) {\n\t // If the palette is not in the palette list it's one of primary/accent/warn/background\n\t var scheme = $mdTheming.THEMES[theme].colors[palette];\n\t if (!scheme) {\n\t throw new Error($mdUtil.supplant('mdColors: couldn\\'t find \\'{palette}\\' in the palettes.', {palette: palette}));\n\t }\n\t palette = scheme.name;\n\t }\n\t\n\t return palette;\n\t }\n\t\n\t function extractHue(parts, theme) {\n\t var themeColors = $mdTheming.THEMES[theme].colors;\n\t\n\t if (parts[1] === 'hue') {\n\t var hueNumber = parseInt(parts.splice(2, 1)[0], 10);\n\t\n\t if (hueNumber < 1 || hueNumber > 3) {\n\t throw new Error($mdUtil.supplant('mdColors: \\'hue-{hueNumber}\\' is not a valid hue, can be only \\'hue-1\\', \\'hue-2\\' and \\'hue-3\\'', {hueNumber: hueNumber}));\n\t }\n\t parts[1] = 'hue-' + hueNumber;\n\t\n\t if (!(parts[0] in themeColors)) {\n\t throw new Error($mdUtil.supplant('mdColors: \\'hue-x\\' can only be used with [{availableThemes}], but was used with \\'{usedTheme}\\'', {\n\t availableThemes: Object.keys(themeColors).join(', '),\n\t usedTheme: parts[0]\n\t }));\n\t }\n\t\n\t return themeColors[parts[0]].hues[parts[1]];\n\t }\n\t\n\t return parts[1] || themeColors[parts[0] in themeColors ? parts[0] : 'primary'].hues['default'];\n\t }\n\t }\n\t\n\t /**\n\t * @ngdoc directive\n\t * @name mdColors\n\t * @module material.components.colors\n\t *\n\t * @restrict A\n\t *\n\t * @description\n\t * `mdColors` directive will apply the theme-based color expression as RGBA CSS style values.\n\t *\n\t * The format will be similar to our color defining in the scss files:\n\t *\n\t * ## `[?theme]-[palette]-[?hue]-[?opacity]`\n\t * - [theme] - default value is the default theme\n\t * - [palette] - can be either palette name or primary/accent/warn/background\n\t * - [hue] - default is 500 (hue-x can be used with primary/accent/warn/background)\n\t * - [opacity] - default is 1\n\t *\n\t * > `?` indicates optional parameter\n\t *\n\t * @usage\n\t * \n\t *
\n\t *
\n\t * Color demo\n\t *
\n\t *
\n\t *
\n\t *\n\t * `mdColors` directive will automatically watch for changes in the expression if it recognizes an interpolation\n\t * expression or a function. For performance options, you can use `::` prefix to the `md-colors` expression\n\t * to indicate a one-time data binding.\n\t * \n\t * \n\t * \n\t * \n\t *\n\t */\n\t function MdColorsDirective($mdColors, $mdUtil, $log, $parse) {\n\t return {\n\t restrict: 'A',\n\t require: ['^?mdTheme'],\n\t compile: function (tElem, tAttrs) {\n\t var shouldWatch = shouldColorsWatch();\n\t\n\t return function (scope, element, attrs, ctrl) {\n\t var mdThemeController = ctrl[0];\n\t\n\t var lastColors = {};\n\t\n\t var parseColors = function (theme) {\n\t if (typeof theme !== 'string') {\n\t theme = '';\n\t }\n\t\n\t if (!attrs.mdColors) {\n\t attrs.mdColors = '{}';\n\t }\n\t\n\t /**\n\t * Json.parse() does not work because the keys are not quoted;\n\t * use $parse to convert to a hash map\n\t */\n\t var colors = $parse(attrs.mdColors)(scope);\n\t\n\t /**\n\t * If mdTheme is defined up the DOM tree\n\t * we add mdTheme theme to colors who doesn't specified a theme\n\t *\n\t * # example\n\t * \n\t *
\n\t *
\n\t * Color demo\n\t *
\n\t *
\n\t *
\n\t *\n\t * 'primary-600' will be 'myTheme-primary-600',\n\t * but 'mySecondTheme-accent-200' will stay the same cause it has a theme prefix\n\t */\n\t if (mdThemeController) {\n\t Object.keys(colors).forEach(function (prop) {\n\t var color = colors[prop];\n\t if (!$mdColors.hasTheme(color)) {\n\t colors[prop] = (theme || mdThemeController.$mdTheme) + '-' + color;\n\t }\n\t });\n\t }\n\t\n\t cleanElement(colors);\n\t\n\t return colors;\n\t };\n\t\n\t var cleanElement = function (colors) {\n\t if (!angular.equals(colors, lastColors)) {\n\t var keys = Object.keys(lastColors);\n\t\n\t if (lastColors.background && !keys.color) {\n\t keys.push('color');\n\t }\n\t\n\t keys.forEach(function (key) {\n\t element.css(key, '');\n\t });\n\t }\n\t\n\t lastColors = colors;\n\t };\n\t\n\t /**\n\t * Registering for mgTheme changes and asking mdTheme controller run our callback whenever a theme changes\n\t */\n\t var unregisterChanges = angular.noop;\n\t\n\t if (mdThemeController) {\n\t unregisterChanges = mdThemeController.registerChanges(function (theme) {\n\t $mdColors.applyThemeColors(element, parseColors(theme));\n\t });\n\t }\n\t\n\t scope.$on('$destroy', function () {\n\t unregisterChanges();\n\t });\n\t\n\t try {\n\t if (shouldWatch) {\n\t scope.$watch(parseColors, angular.bind(this,\n\t $mdColors.applyThemeColors, element\n\t ), true);\n\t }\n\t else {\n\t $mdColors.applyThemeColors(element, parseColors());\n\t }\n\t\n\t }\n\t catch (e) {\n\t $log.error(e.message);\n\t }\n\t\n\t };\n\t\n\t function shouldColorsWatch() {\n\t // Simulate 1x binding and mark mdColorsWatch == false\n\t var rawColorExpression = tAttrs.mdColors;\n\t var bindOnce = rawColorExpression.indexOf('::') > -1;\n\t var isStatic = bindOnce ? true : STATIC_COLOR_EXPRESSION.test(tAttrs.mdColors);\n\t\n\t // Remove it for the postLink...\n\t tAttrs.mdColors = rawColorExpression.replace('::', '');\n\t\n\t var hasWatchAttr = angular.isDefined(tAttrs.mdColorsWatch);\n\t\n\t return (bindOnce || isStatic) ? false :\n\t hasWatchAttr ? $mdUtil.parseAttributeBoolean(tAttrs.mdColorsWatch) : true;\n\t }\n\t }\n\t };\n\t\n\t }\n\t\n\t\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.content\n\t *\n\t * @description\n\t * Scrollable content\n\t */\n\tmdContentDirective.$inject = [\"$mdTheming\"];\n\tangular.module('material.components.content', [\n\t 'material.core'\n\t])\n\t .directive('mdContent', mdContentDirective);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdContent\n\t * @module material.components.content\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t *\n\t * The `` directive is a container element useful for scrollable content. It achieves\n\t * this by setting the CSS `overflow` property to `auto` so that content can properly scroll.\n\t *\n\t * In general, `` components are not designed to be nested inside one another. If\n\t * possible, it is better to make them siblings. This often results in a better user experience as\n\t * having nested scrollbars may confuse the user.\n\t *\n\t * ## Troubleshooting\n\t *\n\t * In some cases, you may wish to apply the `md-no-momentum` class to ensure that Safari's\n\t * momentum scrolling is disabled. Momentum scrolling can cause flickering issues while scrolling\n\t * SVG icons and some other components.\n\t *\n\t * Additionally, we now also offer the `md-no-flicker` class which can be applied to any element\n\t * and uses a Webkit-specific filter of `blur(0px)` that forces GPU rendering of all elements\n\t * inside (which eliminates the flicker on iOS devices).\n\t *\n\t * _Note: Forcing an element to render on the GPU can have unintended side-effects, especially\n\t * related to the z-index of elements. Please use with caution and only on the elements needed._\n\t *\n\t * @usage\n\t *\n\t * Add the `[layout-padding]` attribute to make the content padded.\n\t *\n\t * \n\t * \n\t * Lorem ipsum dolor sit amet, ne quod novum mei.\n\t * \n\t * \n\t */\n\t\n\tfunction mdContentDirective($mdTheming) {\n\t return {\n\t restrict: 'E',\n\t controller: ['$scope', '$element', ContentController],\n\t link: function(scope, element) {\n\t element.addClass('_md'); // private md component indicator for styling\n\t\n\t $mdTheming(element);\n\t scope.$broadcast('$mdContentLoaded', element);\n\t\n\t iosScrollFix(element[0]);\n\t }\n\t };\n\t\n\t function ContentController($scope, $element) {\n\t this.$scope = $scope;\n\t this.$element = $element;\n\t }\n\t}\n\t\n\tfunction iosScrollFix(node) {\n\t // IOS FIX:\n\t // If we scroll where there is no more room for the webview to scroll,\n\t // by default the webview itself will scroll up and down, this looks really\n\t // bad. So if we are scrolling to the very top or bottom, add/subtract one\n\t angular.element(node).on('$md.pressdown', function(ev) {\n\t // Only touch events\n\t if (ev.pointer.type !== 't') return;\n\t // Don't let a child content's touchstart ruin it for us.\n\t if (ev.$materialScrollFixed) return;\n\t ev.$materialScrollFixed = true;\n\t\n\t if (node.scrollTop === 0) {\n\t node.scrollTop = 1;\n\t } else if (node.scrollHeight === node.scrollTop + node.offsetHeight) {\n\t node.scrollTop -= 1;\n\t }\n\t });\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.datepicker\n\t * @description Module for the datepicker component.\n\t */\n\t\n\tangular.module('material.components.datepicker', [\n\t 'material.core',\n\t 'material.components.icon',\n\t 'material.components.virtualRepeat'\n\t]);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.dialog\n\t */\n\tMdDialogDirective.$inject = [\"$$rAF\", \"$mdTheming\", \"$mdDialog\"];\n\tMdDialogProvider.$inject = [\"$$interimElementProvider\"];\n\tangular\n\t .module('material.components.dialog', [\n\t 'material.core',\n\t 'material.components.backdrop'\n\t ])\n\t .directive('mdDialog', MdDialogDirective)\n\t .provider('$mdDialog', MdDialogProvider);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdDialog\n\t * @module material.components.dialog\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * `` - The dialog's template must be inside this element.\n\t *\n\t * Inside, use an `` element for the dialog's content, and use\n\t * an `` element for the dialog's actions.\n\t *\n\t * ## CSS\n\t * - `.md-dialog-content` - class that sets the padding on the content as the spec file\n\t *\n\t * ## Notes\n\t * - If you specify an `id` for the ``, the `` will have the same `id`\n\t * prefixed with `dialogContent_`.\n\t *\n\t * @usage\n\t * ### Dialog template\n\t * \n\t * \n\t * \n\t * \n\t * \n\t *

Number {{item}}

\n\t *
\n\t *
\n\t *
\n\t * \n\t * Close Dialog\n\t * \n\t *
\n\t *
\n\t */\n\tfunction MdDialogDirective($$rAF, $mdTheming, $mdDialog) {\n\t return {\n\t restrict: 'E',\n\t link: function(scope, element) {\n\t element.addClass('_md'); // private md component indicator for styling\n\t\n\t $mdTheming(element);\n\t $$rAF(function() {\n\t var images;\n\t var content = element[0].querySelector('md-dialog-content');\n\t\n\t if (content) {\n\t images = content.getElementsByTagName('img');\n\t addOverflowClass();\n\t //-- delayed image loading may impact scroll height, check after images are loaded\n\t angular.element(images).on('load', addOverflowClass);\n\t }\n\t\n\t scope.$on('$destroy', function() {\n\t $mdDialog.destroy(element);\n\t });\n\t\n\t /**\n\t *\n\t */\n\t function addOverflowClass() {\n\t element.toggleClass('md-content-overflow', content.scrollHeight > content.clientHeight);\n\t }\n\t\n\t\n\t });\n\t }\n\t };\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdDialog\n\t * @module material.components.dialog\n\t *\n\t * @description\n\t * `$mdDialog` opens a dialog over the app to inform users about critical information or require\n\t * them to make decisions. There are two approaches for setup: a simple promise API\n\t * and regular object syntax.\n\t *\n\t * ## Restrictions\n\t *\n\t * - The dialog is always given an isolate scope.\n\t * - The dialog's template must have an outer `` element.\n\t * Inside, use an `` element for the dialog's content, and use\n\t * an `` element for the dialog's actions.\n\t * - Dialogs must cover the entire application to keep interactions inside of them.\n\t * Use the `parent` option to change where dialogs are appended.\n\t *\n\t * ## Sizing\n\t * - Complex dialogs can be sized with `flex=\"percentage\"`, i.e. `flex=\"66\"`.\n\t * - Default max-width is 80% of the `rootElement` or `parent`.\n\t *\n\t * ## CSS\n\t * - `.md-dialog-content` - class that sets the padding on the content as the spec file\n\t *\n\t * @usage\n\t * \n\t *
\n\t *
\n\t * \n\t * Employee Alert!\n\t * \n\t *
\n\t *
\n\t * \n\t * Custom Dialog\n\t * \n\t *
\n\t *
\n\t * \n\t * Close Alert\n\t * \n\t *
\n\t *
\n\t * \n\t * Greet Employee\n\t * \n\t *
\n\t *
\n\t *
\n\t *\n\t * ### JavaScript: object syntax\n\t * \n\t * (function(angular, undefined){\n\t * \"use strict\";\n\t *\n\t * angular\n\t * .module('demoApp', ['ngMaterial'])\n\t * .controller('AppCtrl', AppController);\n\t *\n\t * function AppController($scope, $mdDialog) {\n\t * var alert;\n\t * $scope.showAlert = showAlert;\n\t * $scope.showDialog = showDialog;\n\t * $scope.items = [1, 2, 3];\n\t *\n\t * // Internal method\n\t * function showAlert() {\n\t * alert = $mdDialog.alert({\n\t * title: 'Attention',\n\t * textContent: 'This is an example of how easy dialogs can be!',\n\t * ok: 'Close'\n\t * });\n\t *\n\t * $mdDialog\n\t * .show( alert )\n\t * .finally(function() {\n\t * alert = undefined;\n\t * });\n\t * }\n\t *\n\t * function showDialog($event) {\n\t * var parentEl = angular.element(document.body);\n\t * $mdDialog.show({\n\t * parent: parentEl,\n\t * targetEvent: $event,\n\t * template:\n\t * '' +\n\t * ' '+\n\t * ' '+\n\t * ' '+\n\t * '

Number {{item}}

' +\n\t * ' '+\n\t * '
'+\n\t * '
' +\n\t * ' ' +\n\t * ' ' +\n\t * ' Close Dialog' +\n\t * ' ' +\n\t * ' ' +\n\t * '
',\n\t * locals: {\n\t * items: $scope.items\n\t * },\n\t * controller: DialogController\n\t * });\n\t * function DialogController($scope, $mdDialog, items) {\n\t * $scope.items = items;\n\t * $scope.closeDialog = function() {\n\t * $mdDialog.hide();\n\t * }\n\t * }\n\t * }\n\t * }\n\t * })(angular);\n\t *
\n\t *\n\t * ### Pre-Rendered Dialogs\n\t * By using the `contentElement` option, it is possible to use an already existing element in the DOM.\n\t *\n\t * \n\t * $scope.showPrerenderedDialog = function() {\n\t * $mdDialog.show({\n\t * contentElement: '#myStaticDialog',\n\t * parent: angular.element(document.body)\n\t * });\n\t * };\n\t * \n\t *\n\t * When using a string as value, `$mdDialog` will automatically query the DOM for the specified CSS selector.\n\t *\n\t * \n\t *
\n\t *
\n\t * \n\t * This is a pre-rendered dialog.\n\t * \n\t *
\n\t *
\n\t *
\n\t *\n\t * **Notice**: It is important, to use the `.md-dialog-container` as the content element, otherwise the dialog\n\t * will not show up.\n\t *\n\t * It also possible to use a DOM element for the `contentElement` option.\n\t * - `contentElement: document.querySelector('#myStaticDialog')`\n\t * - `contentElement: angular.element(TEMPLATE)`\n\t *\n\t * When using a `template` as content element, it will be not compiled upon open.\n\t * This allows you to compile the element yourself and use it each time the dialog opens.\n\t *\n\t * ### Custom Presets\n\t * Developers are also able to create their own preset, which can be easily used without repeating\n\t * their options each time.\n\t *\n\t * \n\t * $mdDialogProvider.addPreset('testPreset', {\n\t * options: function() {\n\t * return {\n\t * template:\n\t * '' +\n\t * 'This is a custom preset' +\n\t * '',\n\t * controllerAs: 'dialog',\n\t * bindToController: true,\n\t * clickOutsideToClose: true,\n\t * escapeToClose: true\n\t * };\n\t * }\n\t * });\n\t * \n\t *\n\t * After you created your preset at config phase, you can easily access it.\n\t *\n\t * \n\t * $mdDialog.show(\n\t * $mdDialog.testPreset()\n\t * );\n\t * \n\t *\n\t * ### JavaScript: promise API syntax, custom dialog template\n\t * \n\t * (function(angular, undefined){\n\t * \"use strict\";\n\t *\n\t * angular\n\t * .module('demoApp', ['ngMaterial'])\n\t * .controller('EmployeeController', EmployeeEditor)\n\t * .controller('GreetingController', GreetingController);\n\t *\n\t * // Fictitious Employee Editor to show how to use simple and complex dialogs.\n\t *\n\t * function EmployeeEditor($scope, $mdDialog) {\n\t * var alert;\n\t *\n\t * $scope.showAlert = showAlert;\n\t * $scope.closeAlert = closeAlert;\n\t * $scope.showGreeting = showCustomGreeting;\n\t *\n\t * $scope.hasAlert = function() { return !!alert };\n\t * $scope.userName = $scope.userName || 'Bobby';\n\t *\n\t * // Dialog #1 - Show simple alert dialog and cache\n\t * // reference to dialog instance\n\t *\n\t * function showAlert() {\n\t * alert = $mdDialog.alert()\n\t * .title('Attention, ' + $scope.userName)\n\t * .textContent('This is an example of how easy dialogs can be!')\n\t * .ok('Close');\n\t *\n\t * $mdDialog\n\t * .show( alert )\n\t * .finally(function() {\n\t * alert = undefined;\n\t * });\n\t * }\n\t *\n\t * // Close the specified dialog instance and resolve with 'finished' flag\n\t * // Normally this is not needed, just use '$mdDialog.hide()' to close\n\t * // the most recent dialog popup.\n\t *\n\t * function closeAlert() {\n\t * $mdDialog.hide( alert, \"finished\" );\n\t * alert = undefined;\n\t * }\n\t *\n\t * // Dialog #2 - Demonstrate more complex dialogs construction and popup.\n\t *\n\t * function showCustomGreeting($event) {\n\t * $mdDialog.show({\n\t * targetEvent: $event,\n\t * template:\n\t * '' +\n\t *\n\t * ' Hello {{ employee }}!' +\n\t *\n\t * ' ' +\n\t * ' ' +\n\t * ' Close Greeting' +\n\t * ' ' +\n\t * ' ' +\n\t * '',\n\t * controller: 'GreetingController',\n\t * onComplete: afterShowAnimation,\n\t * locals: { employee: $scope.userName }\n\t * });\n\t *\n\t * // When the 'enter' animation finishes...\n\t *\n\t * function afterShowAnimation(scope, element, options) {\n\t * // post-show code here: DOM element focus, etc.\n\t * }\n\t * }\n\t *\n\t * // Dialog #3 - Demonstrate use of ControllerAs and passing $scope to dialog\n\t * // Here we used ng-controller=\"GreetingController as vm\" and\n\t * // $scope.vm === \n\t *\n\t * function showCustomGreeting() {\n\t *\n\t * $mdDialog.show({\n\t * clickOutsideToClose: true,\n\t *\n\t * scope: $scope, // use parent scope in template\n\t * preserveScope: true, // do not forget this if use parent scope\n\t\n\t * // Since GreetingController is instantiated with ControllerAs syntax\n\t * // AND we are passing the parent '$scope' to the dialog, we MUST\n\t * // use 'vm.' in the template markup\n\t *\n\t * template: '' +\n\t * ' ' +\n\t * ' Hi There {{vm.employee}}' +\n\t * ' ' +\n\t * '',\n\t *\n\t * controller: function DialogController($scope, $mdDialog) {\n\t * $scope.closeDialog = function() {\n\t * $mdDialog.hide();\n\t * }\n\t * }\n\t * });\n\t * }\n\t *\n\t * }\n\t *\n\t * // Greeting controller used with the more complex 'showCustomGreeting()' custom dialog\n\t *\n\t * function GreetingController($scope, $mdDialog, employee) {\n\t * // Assigned from construction locals options...\n\t * $scope.employee = employee;\n\t *\n\t * $scope.closeDialog = function() {\n\t * // Easily hides most recent dialog shown...\n\t * // no specific instance reference is needed.\n\t * $mdDialog.hide();\n\t * };\n\t * }\n\t *\n\t * })(angular);\n\t * \n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdDialog#alert\n\t *\n\t * @description\n\t * Builds a preconfigured dialog with the specified message.\n\t *\n\t * @returns {obj} an `$mdDialogPreset` with the chainable configuration methods:\n\t *\n\t * - $mdDialogPreset#title(string) - Sets the alert title.\n\t * - $mdDialogPreset#textContent(string) - Sets the alert message.\n\t * - $mdDialogPreset#htmlContent(string) - Sets the alert message as HTML. Requires ngSanitize\n\t * module to be loaded. HTML is not run through Angular's compiler.\n\t * - $mdDialogPreset#ok(string) - Sets the alert \"Okay\" button text.\n\t * - $mdDialogPreset#theme(string) - Sets the theme of the alert dialog.\n\t * - $mdDialogPreset#targetEvent(DOMClickEvent=) - A click's event object. When passed in as an option,\n\t * the location of the click will be used as the starting point for the opening animation\n\t * of the the dialog.\n\t *\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdDialog#confirm\n\t *\n\t * @description\n\t * Builds a preconfigured dialog with the specified message. You can call show and the promise returned\n\t * will be resolved only if the user clicks the confirm action on the dialog.\n\t *\n\t * @returns {obj} an `$mdDialogPreset` with the chainable configuration methods:\n\t *\n\t * Additionally, it supports the following methods:\n\t *\n\t * - $mdDialogPreset#title(string) - Sets the confirm title.\n\t * - $mdDialogPreset#textContent(string) - Sets the confirm message.\n\t * - $mdDialogPreset#htmlContent(string) - Sets the confirm message as HTML. Requires ngSanitize\n\t * module to be loaded. HTML is not run through Angular's compiler.\n\t * - $mdDialogPreset#ok(string) - Sets the confirm \"Okay\" button text.\n\t * - $mdDialogPreset#cancel(string) - Sets the confirm \"Cancel\" button text.\n\t * - $mdDialogPreset#theme(string) - Sets the theme of the confirm dialog.\n\t * - $mdDialogPreset#targetEvent(DOMClickEvent=) - A click's event object. When passed in as an option,\n\t * the location of the click will be used as the starting point for the opening animation\n\t * of the the dialog.\n\t *\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdDialog#prompt\n\t *\n\t * @description\n\t * Builds a preconfigured dialog with the specified message and input box. You can call show and the promise returned\n\t * will be resolved only if the user clicks the prompt action on the dialog, passing the input value as the first argument.\n\t *\n\t * @returns {obj} an `$mdDialogPreset` with the chainable configuration methods:\n\t *\n\t * Additionally, it supports the following methods:\n\t *\n\t * - $mdDialogPreset#title(string) - Sets the prompt title.\n\t * - $mdDialogPreset#textContent(string) - Sets the prompt message.\n\t * - $mdDialogPreset#htmlContent(string) - Sets the prompt message as HTML. Requires ngSanitize\n\t * module to be loaded. HTML is not run through Angular's compiler.\n\t * - $mdDialogPreset#placeholder(string) - Sets the placeholder text for the input.\n\t * - $mdDialogPreset#initialValue(string) - Sets the initial value for the prompt input.\n\t * - $mdDialogPreset#ok(string) - Sets the prompt \"Okay\" button text.\n\t * - $mdDialogPreset#cancel(string) - Sets the prompt \"Cancel\" button text.\n\t * - $mdDialogPreset#theme(string) - Sets the theme of the prompt dialog.\n\t * - $mdDialogPreset#targetEvent(DOMClickEvent=) - A click's event object. When passed in as an option,\n\t * the location of the click will be used as the starting point for the opening animation\n\t * of the the dialog.\n\t *\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdDialog#show\n\t *\n\t * @description\n\t * Show a dialog with the specified options.\n\t *\n\t * @param {object} optionsOrPreset Either provide an `$mdDialogPreset` returned from `alert()`, and\n\t * `confirm()`, or an options object with the following properties:\n\t * - `templateUrl` - `{string=}`: The url of a template that will be used as the content\n\t * of the dialog.\n\t * - `template` - `{string=}`: HTML template to show in the dialog. This **must** be trusted HTML\n\t * with respect to Angular's [$sce service](https://docs.angularjs.org/api/ng/service/$sce).\n\t * This template should **never** be constructed with any kind of user input or user data.\n\t * - `contentElement` - `{string|Element}`: Instead of using a template, which will be compiled each time a\n\t * dialog opens, you can also use a DOM element.
\n\t * * When specifying an element, which is present on the DOM, `$mdDialog` will temporary fetch the element into\n\t * the dialog and restores it at the old DOM position upon close.\n\t * * When specifying a string, the string be used as a CSS selector, to lookup for the element in the DOM.\n\t * - `autoWrap` - `{boolean=}`: Whether or not to automatically wrap the template with a\n\t * `` tag if one is not provided. Defaults to true. Can be disabled if you provide a\n\t * custom dialog directive.\n\t * - `targetEvent` - `{DOMClickEvent=}`: A click's event object. When passed in as an option,\n\t * the location of the click will be used as the starting point for the opening animation\n\t * of the the dialog.\n\t * - `openFrom` - `{string|Element|object}`: The query selector, DOM element or the Rect object\n\t * that is used to determine the bounds (top, left, height, width) from which the Dialog will\n\t * originate.\n\t * - `closeTo` - `{string|Element|object}`: The query selector, DOM element or the Rect object\n\t * that is used to determine the bounds (top, left, height, width) to which the Dialog will\n\t * target.\n\t * - `scope` - `{object=}`: the scope to link the template / controller to. If none is specified,\n\t * it will create a new isolate scope.\n\t * This scope will be destroyed when the dialog is removed unless `preserveScope` is set to true.\n\t * - `preserveScope` - `{boolean=}`: whether to preserve the scope when the element is removed. Default is false\n\t * - `disableParentScroll` - `{boolean=}`: Whether to disable scrolling while the dialog is open.\n\t * Default true.\n\t * - `hasBackdrop` - `{boolean=}`: Whether there should be an opaque backdrop behind the dialog.\n\t * Default true.\n\t * - `clickOutsideToClose` - `{boolean=}`: Whether the user can click outside the dialog to\n\t * close it. Default false.\n\t * - `escapeToClose` - `{boolean=}`: Whether the user can press escape to close the dialog.\n\t * Default true.\n\t * - `focusOnOpen` - `{boolean=}`: An option to override focus behavior on open. Only disable if\n\t * focusing some other way, as focus management is required for dialogs to be accessible.\n\t * Defaults to true.\n\t * - `controller` - `{function|string=}`: The controller to associate with the dialog. The controller\n\t * will be injected with the local `$mdDialog`, which passes along a scope for the dialog.\n\t * - `locals` - `{object=}`: An object containing key/value pairs. The keys will be used as names\n\t * of values to inject into the controller. For example, `locals: {three: 3}` would inject\n\t * `three` into the controller, with the value 3. If `bindToController` is true, they will be\n\t * copied to the controller instead.\n\t * - `bindToController` - `bool`: bind the locals to the controller, instead of passing them in.\n\t * - `resolve` - `{object=}`: Similar to locals, except it takes promises as values, and the\n\t * dialog will not open until all of the promises resolve.\n\t * - `controllerAs` - `{string=}`: An alias to assign the controller to on the scope.\n\t * - `parent` - `{element=}`: The element to append the dialog to. Defaults to appending\n\t * to the root element of the application.\n\t * - `onShowing` - `function(scope, element)`: Callback function used to announce the show() action is\n\t * starting.\n\t * - `onComplete` - `function(scope, element)`: Callback function used to announce when the show() action is\n\t * finished.\n\t * - `onRemoving` - `function(element, removePromise)`: Callback function used to announce the\n\t * close/hide() action is starting. This allows developers to run custom animations\n\t * in parallel the close animations.\n\t * - `fullscreen` `{boolean=}`: An option to toggle whether the dialog should show in fullscreen\n\t * or not. Defaults to `false`.\n\t * @returns {promise} A promise that can be resolved with `$mdDialog.hide()` or\n\t * rejected with `$mdDialog.cancel()`.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdDialog#hide\n\t *\n\t * @description\n\t * Hide an existing dialog and resolve the promise returned from `$mdDialog.show()`.\n\t *\n\t * @param {*=} response An argument for the resolved promise.\n\t *\n\t * @returns {promise} A promise that is resolved when the dialog has been closed.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdDialog#cancel\n\t *\n\t * @description\n\t * Hide an existing dialog and reject the promise returned from `$mdDialog.show()`.\n\t *\n\t * @param {*=} response An argument for the rejected promise.\n\t *\n\t * @returns {promise} A promise that is resolved when the dialog has been closed.\n\t */\n\t\n\tfunction MdDialogProvider($$interimElementProvider) {\n\t // Elements to capture and redirect focus when the user presses tab at the dialog boundary.\n\t advancedDialogOptions.$inject = [\"$mdDialog\", \"$mdConstant\"];\n\t dialogDefaultOptions.$inject = [\"$mdDialog\", \"$mdAria\", \"$mdUtil\", \"$mdConstant\", \"$animate\", \"$document\", \"$window\", \"$rootElement\", \"$log\", \"$injector\", \"$mdTheming\"];\n\t var topFocusTrap, bottomFocusTrap;\n\t\n\t return $$interimElementProvider('$mdDialog')\n\t .setDefaults({\n\t methods: ['disableParentScroll', 'hasBackdrop', 'clickOutsideToClose', 'escapeToClose',\n\t 'targetEvent', 'closeTo', 'openFrom', 'parent', 'fullscreen', 'contentElement'],\n\t options: dialogDefaultOptions\n\t })\n\t .addPreset('alert', {\n\t methods: ['title', 'htmlContent', 'textContent', 'content', 'ariaLabel', 'ok', 'theme',\n\t 'css'],\n\t options: advancedDialogOptions\n\t })\n\t .addPreset('confirm', {\n\t methods: ['title', 'htmlContent', 'textContent', 'content', 'ariaLabel', 'ok', 'cancel',\n\t 'theme', 'css'],\n\t options: advancedDialogOptions\n\t })\n\t .addPreset('prompt', {\n\t methods: ['title', 'htmlContent', 'textContent', 'initialValue', 'content', 'placeholder', 'ariaLabel',\n\t 'ok', 'cancel', 'theme', 'css'],\n\t options: advancedDialogOptions\n\t });\n\t\n\t /* @ngInject */\n\t function advancedDialogOptions($mdDialog, $mdConstant) {\n\t return {\n\t template: [\n\t '',\n\t ' ',\n\t '

{{ dialog.title }}

',\n\t '
',\n\t '
',\n\t '

{{::dialog.mdTextContent}}

',\n\t '
',\n\t ' ',\n\t ' ',\n\t ' ',\n\t '
',\n\t ' ',\n\t ' ',\n\t ' {{ dialog.cancel }}',\n\t ' ',\n\t ' ',\n\t ' {{ dialog.ok }}',\n\t ' ',\n\t ' ',\n\t '
'\n\t ].join('').replace(/\\s\\s+/g, ''),\n\t controller: function mdDialogCtrl() {\n\t var isPrompt = this.$type == 'prompt';\n\t\n\t if (isPrompt && this.initialValue) {\n\t this.result = this.initialValue;\n\t }\n\t\n\t this.hide = function() {\n\t $mdDialog.hide(isPrompt ? this.result : true);\n\t };\n\t this.abort = function() {\n\t $mdDialog.cancel();\n\t };\n\t this.keypress = function($event) {\n\t if ($event.keyCode === $mdConstant.KEY_CODE.ENTER) {\n\t $mdDialog.hide(this.result);\n\t }\n\t };\n\t },\n\t controllerAs: 'dialog',\n\t bindToController: true,\n\t };\n\t }\n\t\n\t /* @ngInject */\n\t function dialogDefaultOptions($mdDialog, $mdAria, $mdUtil, $mdConstant, $animate, $document, $window, $rootElement,\n\t $log, $injector, $mdTheming) {\n\t\n\t return {\n\t hasBackdrop: true,\n\t isolateScope: true,\n\t onCompiling: beforeCompile,\n\t onShow: onShow,\n\t onShowing: beforeShow,\n\t onRemove: onRemove,\n\t clickOutsideToClose: false,\n\t escapeToClose: true,\n\t targetEvent: null,\n\t contentElement: null,\n\t closeTo: null,\n\t openFrom: null,\n\t focusOnOpen: true,\n\t disableParentScroll: true,\n\t autoWrap: true,\n\t fullscreen: false,\n\t transformTemplate: function(template, options) {\n\t // Make the dialog container focusable, because otherwise the focus will be always redirected to\n\t // an element outside of the container, and the focus trap won't work probably..\n\t // Also the tabindex is needed for the `escapeToClose` functionality, because\n\t // the keyDown event can't be triggered when the focus is outside of the container.\n\t return '
' + validatedTemplate(template) + '
';\n\t\n\t /**\n\t * The specified template should contain a wrapper element....\n\t */\n\t function validatedTemplate(template) {\n\t if (options.autoWrap && !/<\\/md-dialog>/g.test(template)) {\n\t return '' + (template || '') + '';\n\t } else {\n\t return template || '';\n\t }\n\t }\n\t }\n\t };\n\t\n\t function beforeCompile(options) {\n\t // Automatically apply the theme, if the user didn't specify a theme explicitly.\n\t // Those option changes need to be done, before the compilation has started, because otherwise\n\t // the option changes will be not available in the $mdCompilers locales.\n\t detectTheming(options);\n\t\n\t if (options.contentElement) {\n\t options.restoreContentElement = installContentElement(options);\n\t }\n\t }\n\t\n\t function beforeShow(scope, element, options, controller) {\n\t\n\t if (controller) {\n\t controller.mdHtmlContent = controller.htmlContent || options.htmlContent || '';\n\t controller.mdTextContent = controller.textContent || options.textContent ||\n\t controller.content || options.content || '';\n\t\n\t if (controller.mdHtmlContent && !$injector.has('$sanitize')) {\n\t throw Error('The ngSanitize module must be loaded in order to use htmlContent.');\n\t }\n\t\n\t if (controller.mdHtmlContent && controller.mdTextContent) {\n\t throw Error('md-dialog cannot have both `htmlContent` and `textContent`');\n\t }\n\t }\n\t }\n\t\n\t /** Show method for dialogs */\n\t function onShow(scope, element, options, controller) {\n\t angular.element($document[0].body).addClass('md-dialog-is-showing');\n\t\n\t var dialogElement = element.find('md-dialog');\n\t\n\t // Once a dialog has `ng-cloak` applied on his template the dialog animation will not work properly.\n\t // This is a very common problem, so we have to notify the developer about this.\n\t if (dialogElement.hasClass('ng-cloak')) {\n\t var message = '$mdDialog: using `` will affect the dialog opening animations.';\n\t $log.warn( message, element[0] );\n\t }\n\t\n\t captureParentAndFromToElements(options);\n\t configureAria(dialogElement, options);\n\t showBackdrop(scope, element, options);\n\t activateListeners(element, options);\n\t\n\t return dialogPopIn(element, options)\n\t .then(function() {\n\t lockScreenReader(element, options);\n\t warnDeprecatedActions();\n\t focusOnOpen();\n\t });\n\t\n\t /**\n\t * Check to see if they used the deprecated .md-actions class and log a warning\n\t */\n\t function warnDeprecatedActions() {\n\t if (element[0].querySelector('.md-actions')) {\n\t $log.warn('Using a class of md-actions is deprecated, please use .');\n\t }\n\t }\n\t\n\t /**\n\t * For alerts, focus on content... otherwise focus on\n\t * the close button (or equivalent)\n\t */\n\t function focusOnOpen() {\n\t if (options.focusOnOpen) {\n\t var target = $mdUtil.findFocusTarget(element) || findCloseButton() || dialogElement;\n\t target.focus();\n\t }\n\t\n\t /**\n\t * If no element with class dialog-close, try to find the last\n\t * button child in md-actions and assume it is a close button.\n\t *\n\t * If we find no actions at all, log a warning to the console.\n\t */\n\t function findCloseButton() {\n\t var closeButton = element[0].querySelector('.dialog-close');\n\t\n\t if (!closeButton) {\n\t var actionButtons = element[0].querySelectorAll('.md-actions button, md-dialog-actions button');\n\t closeButton = actionButtons[actionButtons.length - 1];\n\t }\n\t\n\t return closeButton;\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * Remove function for all dialogs\n\t */\n\t function onRemove(scope, element, options) {\n\t options.deactivateListeners();\n\t options.unlockScreenReader();\n\t options.hideBackdrop(options.$destroy);\n\t\n\t // Remove the focus traps that we added earlier for keeping focus within the dialog.\n\t if (topFocusTrap && topFocusTrap.parentNode) {\n\t topFocusTrap.parentNode.removeChild(topFocusTrap);\n\t }\n\t\n\t if (bottomFocusTrap && bottomFocusTrap.parentNode) {\n\t bottomFocusTrap.parentNode.removeChild(bottomFocusTrap);\n\t }\n\t\n\t // For navigation $destroy events, do a quick, non-animated removal,\n\t // but for normal closes (from clicks, etc) animate the removal\n\t return !!options.$destroy ? detachAndClean() : animateRemoval().then( detachAndClean );\n\t\n\t /**\n\t * For normal closes, animate the removal.\n\t * For forced closes (like $destroy events), skip the animations\n\t */\n\t function animateRemoval() {\n\t return dialogPopOut(element, options);\n\t }\n\t\n\t /**\n\t * Detach the element\n\t */\n\t function detachAndClean() {\n\t angular.element($document[0].body).removeClass('md-dialog-is-showing');\n\t // Only remove the element, if it's not provided through the contentElement option.\n\t if (!options.contentElement) {\n\t element.remove();\n\t } else {\n\t options.reverseContainerStretch();\n\t options.restoreContentElement();\n\t }\n\t\n\t if (!options.$destroy) options.origin.focus();\n\t }\n\t }\n\t\n\t function detectTheming(options) {\n\t // Only detect the theming, if the developer didn't specify the theme specifically.\n\t if (options.theme) return;\n\t\n\t options.theme = $mdTheming.defaultTheme();\n\t\n\t if (options.targetEvent && options.targetEvent.target) {\n\t var targetEl = angular.element(options.targetEvent.target);\n\t\n\t // Once the user specifies a targetEvent, we will automatically try to find the correct\n\t // nested theme.\n\t options.theme = (targetEl.controller('mdTheme') || {}).$mdTheme || options.theme;\n\t }\n\t\n\t }\n\t\n\t /**\n\t * Installs a content element to the current $$interimElement provider options.\n\t * @returns {Function} Function to restore the content element at its old DOM location.\n\t */\n\t function installContentElement(options) {\n\t var contentEl = options.contentElement;\n\t var restoreFn = null;\n\t\n\t if (angular.isString(contentEl)) {\n\t contentEl = document.querySelector(contentEl);\n\t restoreFn = createRestoreFn(contentEl);\n\t } else {\n\t contentEl = contentEl[0] || contentEl;\n\t\n\t // When the element is visible in the DOM, then we restore it at close of the dialog.\n\t // Otherwise it will be removed from the DOM after close.\n\t if (document.contains(contentEl)) {\n\t restoreFn = createRestoreFn(contentEl);\n\t } else {\n\t restoreFn = function() {\n\t contentEl.parentNode.removeChild(contentEl);\n\t }\n\t }\n\t }\n\t\n\t // Overwrite the options to use the content element.\n\t options.element = angular.element(contentEl);\n\t options.skipCompile = true;\n\t\n\t return restoreFn;\n\t\n\t function createRestoreFn(element) {\n\t var parent = element.parentNode;\n\t var nextSibling = element.nextElementSibling;\n\t\n\t return function() {\n\t if (!nextSibling) {\n\t // When the element didn't had any sibling, then it can be simply appended to the\n\t // parent, because it plays no role, which index it had before.\n\t parent.appendChild(element);\n\t } else {\n\t // When the element had a sibling, which marks the previous position of the element\n\t // in the DOM, we insert it correctly before the sibling, to have the same index as\n\t // before.\n\t parent.insertBefore(element, nextSibling);\n\t }\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * Capture originator/trigger/from/to element information (if available)\n\t * and the parent container for the dialog; defaults to the $rootElement\n\t * unless overridden in the options.parent\n\t */\n\t function captureParentAndFromToElements(options) {\n\t options.origin = angular.extend({\n\t element: null,\n\t bounds: null,\n\t focus: angular.noop\n\t }, options.origin || {});\n\t\n\t options.parent = getDomElement(options.parent, $rootElement);\n\t options.closeTo = getBoundingClientRect(getDomElement(options.closeTo));\n\t options.openFrom = getBoundingClientRect(getDomElement(options.openFrom));\n\t\n\t if ( options.targetEvent ) {\n\t options.origin = getBoundingClientRect(options.targetEvent.target, options.origin);\n\t }\n\t\n\t\n\t /**\n\t * Identify the bounding RECT for the target element\n\t *\n\t */\n\t function getBoundingClientRect (element, orig) {\n\t var source = angular.element((element || {}));\n\t if (source && source.length) {\n\t // Compute and save the target element's bounding rect, so that if the\n\t // element is hidden when the dialog closes, we can shrink the dialog\n\t // back to the same position it expanded from.\n\t //\n\t // Checking if the source is a rect object or a DOM element\n\t var bounds = {top:0,left:0,height:0,width:0};\n\t var hasFn = angular.isFunction(source[0].getBoundingClientRect);\n\t\n\t return angular.extend(orig || {}, {\n\t element : hasFn ? source : undefined,\n\t bounds : hasFn ? source[0].getBoundingClientRect() : angular.extend({}, bounds, source[0]),\n\t focus : angular.bind(source, source.focus),\n\t });\n\t }\n\t }\n\t\n\t /**\n\t * If the specifier is a simple string selector, then query for\n\t * the DOM element.\n\t */\n\t function getDomElement(element, defaultElement) {\n\t if (angular.isString(element)) {\n\t element = $document[0].querySelector(element);\n\t }\n\t\n\t // If we have a reference to a raw dom element, always wrap it in jqLite\n\t return angular.element(element || defaultElement);\n\t }\n\t\n\t }\n\t\n\t /**\n\t * Listen for escape keys and outside clicks to auto close\n\t */\n\t function activateListeners(element, options) {\n\t var window = angular.element($window);\n\t var onWindowResize = $mdUtil.debounce(function() {\n\t stretchDialogContainerToViewport(element, options);\n\t }, 60);\n\t\n\t var removeListeners = [];\n\t var smartClose = function() {\n\t // Only 'confirm' dialogs have a cancel button... escape/clickOutside will\n\t // cancel or fallback to hide.\n\t var closeFn = ( options.$type == 'alert' ) ? $mdDialog.hide : $mdDialog.cancel;\n\t $mdUtil.nextTick(closeFn, true);\n\t };\n\t\n\t if (options.escapeToClose) {\n\t var parentTarget = options.parent;\n\t var keyHandlerFn = function(ev) {\n\t if (ev.keyCode === $mdConstant.KEY_CODE.ESCAPE) {\n\t ev.stopPropagation();\n\t ev.preventDefault();\n\t\n\t smartClose();\n\t }\n\t };\n\t\n\t // Add keydown listeners\n\t element.on('keydown', keyHandlerFn);\n\t parentTarget.on('keydown', keyHandlerFn);\n\t\n\t // Queue remove listeners function\n\t removeListeners.push(function() {\n\t\n\t element.off('keydown', keyHandlerFn);\n\t parentTarget.off('keydown', keyHandlerFn);\n\t\n\t });\n\t }\n\t\n\t // Register listener to update dialog on window resize\n\t window.on('resize', onWindowResize);\n\t\n\t removeListeners.push(function() {\n\t window.off('resize', onWindowResize);\n\t });\n\t\n\t if (options.clickOutsideToClose) {\n\t var target = element;\n\t var sourceElem;\n\t\n\t // Keep track of the element on which the mouse originally went down\n\t // so that we can only close the backdrop when the 'click' started on it.\n\t // A simple 'click' handler does not work,\n\t // it sets the target object as the element the mouse went down on.\n\t var mousedownHandler = function(ev) {\n\t sourceElem = ev.target;\n\t };\n\t\n\t // We check if our original element and the target is the backdrop\n\t // because if the original was the backdrop and the target was inside the dialog\n\t // we don't want to dialog to close.\n\t var mouseupHandler = function(ev) {\n\t if (sourceElem === target[0] && ev.target === target[0]) {\n\t ev.stopPropagation();\n\t ev.preventDefault();\n\t\n\t smartClose();\n\t }\n\t };\n\t\n\t // Add listeners\n\t target.on('mousedown', mousedownHandler);\n\t target.on('mouseup', mouseupHandler);\n\t\n\t // Queue remove listeners function\n\t removeListeners.push(function() {\n\t target.off('mousedown', mousedownHandler);\n\t target.off('mouseup', mouseupHandler);\n\t });\n\t }\n\t\n\t // Attach specific `remove` listener handler\n\t options.deactivateListeners = function() {\n\t removeListeners.forEach(function(removeFn) {\n\t removeFn();\n\t });\n\t options.deactivateListeners = null;\n\t };\n\t }\n\t\n\t /**\n\t * Show modal backdrop element...\n\t */\n\t function showBackdrop(scope, element, options) {\n\t\n\t if (options.disableParentScroll) {\n\t // !! DO this before creating the backdrop; since disableScrollAround()\n\t // configures the scroll offset; which is used by mdBackDrop postLink()\n\t options.restoreScroll = $mdUtil.disableScrollAround(element, options.parent);\n\t }\n\t\n\t if (options.hasBackdrop) {\n\t options.backdrop = $mdUtil.createBackdrop(scope, \"md-dialog-backdrop md-opaque\");\n\t $animate.enter(options.backdrop, options.parent);\n\t }\n\t\n\t /**\n\t * Hide modal backdrop element...\n\t */\n\t options.hideBackdrop = function hideBackdrop($destroy) {\n\t if (options.backdrop) {\n\t if ( !!$destroy ) options.backdrop.remove();\n\t else $animate.leave(options.backdrop);\n\t }\n\t\n\t\n\t if (options.disableParentScroll) {\n\t options.restoreScroll();\n\t delete options.restoreScroll;\n\t }\n\t\n\t options.hideBackdrop = null;\n\t };\n\t }\n\t\n\t /**\n\t * Inject ARIA-specific attributes appropriate for Dialogs\n\t */\n\t function configureAria(element, options) {\n\t\n\t var role = (options.$type === 'alert') ? 'alertdialog' : 'dialog';\n\t var dialogContent = element.find('md-dialog-content');\n\t var existingDialogId = element.attr('id');\n\t var dialogContentId = 'dialogContent_' + (existingDialogId || $mdUtil.nextUid());\n\t\n\t element.attr({\n\t 'role': role,\n\t 'tabIndex': '-1'\n\t });\n\t\n\t if (dialogContent.length === 0) {\n\t dialogContent = element;\n\t // If the dialog element already had an ID, don't clobber it.\n\t if (existingDialogId) {\n\t dialogContentId = existingDialogId;\n\t }\n\t }\n\t\n\t dialogContent.attr('id', dialogContentId);\n\t element.attr('aria-describedby', dialogContentId);\n\t\n\t if (options.ariaLabel) {\n\t $mdAria.expect(element, 'aria-label', options.ariaLabel);\n\t }\n\t else {\n\t $mdAria.expectAsync(element, 'aria-label', function() {\n\t var words = dialogContent.text().split(/\\s+/);\n\t if (words.length > 3) words = words.slice(0, 3).concat('...');\n\t return words.join(' ');\n\t });\n\t }\n\t\n\t // Set up elements before and after the dialog content to capture focus and\n\t // redirect back into the dialog.\n\t topFocusTrap = document.createElement('div');\n\t topFocusTrap.classList.add('md-dialog-focus-trap');\n\t topFocusTrap.tabIndex = 0;\n\t\n\t bottomFocusTrap = topFocusTrap.cloneNode(false);\n\t\n\t // When focus is about to move out of the dialog, we want to intercept it and redirect it\n\t // back to the dialog element.\n\t var focusHandler = function() {\n\t element.focus();\n\t };\n\t topFocusTrap.addEventListener('focus', focusHandler);\n\t bottomFocusTrap.addEventListener('focus', focusHandler);\n\t\n\t // The top focus trap inserted immeidately before the md-dialog element (as a sibling).\n\t // The bottom focus trap is inserted at the very end of the md-dialog element (as a child).\n\t element[0].parentNode.insertBefore(topFocusTrap, element[0]);\n\t element.after(bottomFocusTrap);\n\t }\n\t\n\t /**\n\t * Prevents screen reader interaction behind modal window\n\t * on swipe interfaces\n\t */\n\t function lockScreenReader(element, options) {\n\t var isHidden = true;\n\t\n\t // get raw DOM node\n\t walkDOM(element[0]);\n\t\n\t options.unlockScreenReader = function() {\n\t isHidden = false;\n\t walkDOM(element[0]);\n\t\n\t options.unlockScreenReader = null;\n\t };\n\t\n\t /**\n\t * Walk DOM to apply or remove aria-hidden on sibling nodes\n\t * and parent sibling nodes\n\t *\n\t */\n\t function walkDOM(element) {\n\t while (element.parentNode) {\n\t if (element === document.body) {\n\t return;\n\t }\n\t var children = element.parentNode.children;\n\t for (var i = 0; i < children.length; i++) {\n\t // skip over child if it is an ascendant of the dialog\n\t // or a script or style tag\n\t if (element !== children[i] && !isNodeOneOf(children[i], ['SCRIPT', 'STYLE'])) {\n\t children[i].setAttribute('aria-hidden', isHidden);\n\t }\n\t }\n\t\n\t walkDOM(element = element.parentNode);\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * Ensure the dialog container fill-stretches to the viewport\n\t */\n\t function stretchDialogContainerToViewport(container, options) {\n\t var isFixed = $window.getComputedStyle($document[0].body).position == 'fixed';\n\t var backdrop = options.backdrop ? $window.getComputedStyle(options.backdrop[0]) : null;\n\t var height = backdrop ? Math.min($document[0].body.clientHeight, Math.ceil(Math.abs(parseInt(backdrop.height, 10)))) : 0;\n\t\n\t var previousStyles = {\n\t top: container.css('top'),\n\t height: container.css('height')\n\t };\n\t\n\t container.css({\n\t top: (isFixed ? $mdUtil.scrollTop(options.parent) : 0) + 'px',\n\t height: height ? height + 'px' : '100%'\n\t });\n\t\n\t return function() {\n\t // Reverts the modified styles back to the previous values.\n\t // This is needed for contentElements, which should have the same styles after close\n\t // as before.\n\t container.css(previousStyles);\n\t };\n\t }\n\t\n\t /**\n\t * Dialog open and pop-in animation\n\t */\n\t function dialogPopIn(container, options) {\n\t // Add the `md-dialog-container` to the DOM\n\t options.parent.append(container);\n\t options.reverseContainerStretch = stretchDialogContainerToViewport(container, options);\n\t\n\t var dialogEl = container.find('md-dialog');\n\t var animator = $mdUtil.dom.animator;\n\t var buildTranslateToOrigin = animator.calculateZoomToOrigin;\n\t var translateOptions = {transitionInClass: 'md-transition-in', transitionOutClass: 'md-transition-out'};\n\t var from = animator.toTransformCss(buildTranslateToOrigin(dialogEl, options.openFrom || options.origin));\n\t var to = animator.toTransformCss(\"\"); // defaults to center display (or parent or $rootElement)\n\t\n\t dialogEl.toggleClass('md-dialog-fullscreen', !!options.fullscreen);\n\t\n\t return animator\n\t .translate3d(dialogEl, from, to, translateOptions)\n\t .then(function(animateReversal) {\n\t\n\t // Build a reversal translate function synced to this translation...\n\t options.reverseAnimate = function() {\n\t delete options.reverseAnimate;\n\t\n\t if (options.closeTo) {\n\t // Using the opposite classes to create a close animation to the closeTo element\n\t translateOptions = {transitionInClass: 'md-transition-out', transitionOutClass: 'md-transition-in'};\n\t from = to;\n\t to = animator.toTransformCss(buildTranslateToOrigin(dialogEl, options.closeTo));\n\t\n\t return animator\n\t .translate3d(dialogEl, from, to,translateOptions);\n\t }\n\t\n\t return animateReversal(\n\t to = animator.toTransformCss(\n\t // in case the origin element has moved or is hidden,\n\t // let's recalculate the translateCSS\n\t buildTranslateToOrigin(dialogEl, options.origin)\n\t )\n\t );\n\t\n\t };\n\t\n\t // Function to revert the generated animation styles on the dialog element.\n\t // Useful when using a contentElement instead of a template.\n\t options.clearAnimate = function() {\n\t delete options.clearAnimate;\n\t\n\t // Remove the transition classes, added from $animateCSS, since those can't be removed\n\t // by reversely running the animator.\n\t dialogEl.removeClass([\n\t translateOptions.transitionOutClass,\n\t translateOptions.transitionInClass\n\t ].join(' '));\n\t\n\t // Run the animation reversely to remove the previous added animation styles.\n\t return animator.translate3d(dialogEl, to, animator.toTransformCss(''), {});\n\t };\n\t\n\t return true;\n\t });\n\t }\n\t\n\t /**\n\t * Dialog close and pop-out animation\n\t */\n\t function dialogPopOut(container, options) {\n\t return options.reverseAnimate().then(function() {\n\t if (options.contentElement) {\n\t // When we use a contentElement, we want the element to be the same as before.\n\t // That means, that we have to clear all the animation properties, like transform.\n\t options.clearAnimate();\n\t }\n\t });\n\t }\n\t\n\t /**\n\t * Utility function to filter out raw DOM nodes\n\t */\n\t function isNodeOneOf(elem, nodeTypeArray) {\n\t if (nodeTypeArray.indexOf(elem.nodeName) !== -1) {\n\t return true;\n\t }\n\t }\n\t\n\t }\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.divider\n\t * @description Divider module!\n\t */\n\tMdDividerDirective.$inject = [\"$mdTheming\"];\n\tangular.module('material.components.divider', [\n\t 'material.core'\n\t])\n\t .directive('mdDivider', MdDividerDirective);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdDivider\n\t * @module material.components.divider\n\t * @restrict E\n\t *\n\t * @description\n\t * Dividers group and separate content within lists and page layouts using strong visual and spatial distinctions. This divider is a thin rule, lightweight enough to not distract the user from content.\n\t *\n\t * @param {boolean=} md-inset Add this attribute to activate the inset divider style.\n\t * @usage\n\t * \n\t * \n\t *\n\t * \n\t * \n\t *\n\t */\n\tfunction MdDividerDirective($mdTheming) {\n\t return {\n\t restrict: 'E',\n\t link: $mdTheming\n\t };\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t /**\n\t * @ngdoc module\n\t * @name material.components.fabActions\n\t */\n\t MdFabActionsDirective.$inject = [\"$mdUtil\"];\n\t angular\n\t .module('material.components.fabActions', ['material.core'])\n\t .directive('mdFabActions', MdFabActionsDirective);\n\t\n\t /**\n\t * @ngdoc directive\n\t * @name mdFabActions\n\t * @module material.components.fabActions\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * The `` directive is used inside of a `` or\n\t * `` directive to mark an element (or elements) as the actions and setup the\n\t * proper event listeners.\n\t *\n\t * @usage\n\t * See the `` or `` directives for example usage.\n\t */\n\t function MdFabActionsDirective($mdUtil) {\n\t return {\n\t restrict: 'E',\n\t\n\t require: ['^?mdFabSpeedDial', '^?mdFabToolbar'],\n\t\n\t compile: function(element, attributes) {\n\t var children = element.children();\n\t\n\t var hasNgRepeat = $mdUtil.prefixer().hasAttribute(children, 'ng-repeat');\n\t\n\t // Support both ng-repeat and static content\n\t if (hasNgRepeat) {\n\t children.addClass('md-fab-action-item');\n\t } else {\n\t // Wrap every child in a new div and add a class that we can scale/fling independently\n\t children.wrap('
');\n\t }\n\t }\n\t }\n\t }\n\t\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t MdFabController.$inject = [\"$scope\", \"$element\", \"$animate\", \"$mdUtil\", \"$mdConstant\", \"$timeout\"];\n\t angular.module('material.components.fabShared', ['material.core'])\n\t .controller('MdFabController', MdFabController);\n\t\n\t function MdFabController($scope, $element, $animate, $mdUtil, $mdConstant, $timeout) {\n\t var vm = this;\n\t\n\t // NOTE: We use async eval(s) below to avoid conflicts with any existing digest loops\n\t\n\t vm.open = function() {\n\t $scope.$evalAsync(\"vm.isOpen = true\");\n\t };\n\t\n\t vm.close = function() {\n\t // Async eval to avoid conflicts with existing digest loops\n\t $scope.$evalAsync(\"vm.isOpen = false\");\n\t\n\t // Focus the trigger when the element closes so users can still tab to the next item\n\t $element.find('md-fab-trigger')[0].focus();\n\t };\n\t\n\t // Toggle the open/close state when the trigger is clicked\n\t vm.toggle = function() {\n\t $scope.$evalAsync(\"vm.isOpen = !vm.isOpen\");\n\t };\n\t\n\t setupDefaults();\n\t setupListeners();\n\t setupWatchers();\n\t\n\t var initialAnimationAttempts = 0;\n\t fireInitialAnimations();\n\t\n\t function setupDefaults() {\n\t // Set the default direction to 'down' if none is specified\n\t vm.direction = vm.direction || 'down';\n\t\n\t // Set the default to be closed\n\t vm.isOpen = vm.isOpen || false;\n\t\n\t // Start the keyboard interaction at the first action\n\t resetActionIndex();\n\t\n\t // Add an animations waiting class so we know not to run\n\t $element.addClass('md-animations-waiting');\n\t }\n\t\n\t function setupListeners() {\n\t var eventTypes = [\n\t 'click', 'focusin', 'focusout'\n\t ];\n\t\n\t // Add our listeners\n\t angular.forEach(eventTypes, function(eventType) {\n\t $element.on(eventType, parseEvents);\n\t });\n\t\n\t // Remove our listeners when destroyed\n\t $scope.$on('$destroy', function() {\n\t angular.forEach(eventTypes, function(eventType) {\n\t $element.off(eventType, parseEvents);\n\t });\n\t\n\t // remove any attached keyboard handlers in case element is removed while\n\t // speed dial is open\n\t disableKeyboard();\n\t });\n\t }\n\t\n\t var closeTimeout;\n\t function parseEvents(event) {\n\t // If the event is a click, just handle it\n\t if (event.type == 'click') {\n\t handleItemClick(event);\n\t }\n\t\n\t // If we focusout, set a timeout to close the element\n\t if (event.type == 'focusout' && !closeTimeout) {\n\t closeTimeout = $timeout(function() {\n\t vm.close();\n\t }, 100, false);\n\t }\n\t\n\t // If we see a focusin and there is a timeout about to run, cancel it so we stay open\n\t if (event.type == 'focusin' && closeTimeout) {\n\t $timeout.cancel(closeTimeout);\n\t closeTimeout = null;\n\t }\n\t }\n\t\n\t function resetActionIndex() {\n\t vm.currentActionIndex = -1;\n\t }\n\t\n\t function setupWatchers() {\n\t // Watch for changes to the direction and update classes/attributes\n\t $scope.$watch('vm.direction', function(newDir, oldDir) {\n\t // Add the appropriate classes so we can target the direction in the CSS\n\t $animate.removeClass($element, 'md-' + oldDir);\n\t $animate.addClass($element, 'md-' + newDir);\n\t\n\t // Reset the action index since it may have changed\n\t resetActionIndex();\n\t });\n\t\n\t var trigger, actions;\n\t\n\t // Watch for changes to md-open\n\t $scope.$watch('vm.isOpen', function(isOpen) {\n\t // Reset the action index since it may have changed\n\t resetActionIndex();\n\t\n\t // We can't get the trigger/actions outside of the watch because the component hasn't been\n\t // linked yet, so we wait until the first watch fires to cache them.\n\t if (!trigger || !actions) {\n\t trigger = getTriggerElement();\n\t actions = getActionsElement();\n\t }\n\t\n\t if (isOpen) {\n\t enableKeyboard();\n\t } else {\n\t disableKeyboard();\n\t }\n\t\n\t var toAdd = isOpen ? 'md-is-open' : '';\n\t var toRemove = isOpen ? '' : 'md-is-open';\n\t\n\t // Set the proper ARIA attributes\n\t trigger.attr('aria-haspopup', true);\n\t trigger.attr('aria-expanded', isOpen);\n\t actions.attr('aria-hidden', !isOpen);\n\t\n\t // Animate the CSS classes\n\t $animate.setClass($element, toAdd, toRemove);\n\t });\n\t }\n\t\n\t function fireInitialAnimations() {\n\t // If the element is actually visible on the screen\n\t if ($element[0].scrollHeight > 0) {\n\t // Fire our animation\n\t $animate.addClass($element, '_md-animations-ready').then(function() {\n\t // Remove the waiting class\n\t $element.removeClass('md-animations-waiting');\n\t });\n\t }\n\t\n\t // Otherwise, try for up to 1 second before giving up\n\t else if (initialAnimationAttempts < 10) {\n\t $timeout(fireInitialAnimations, 100);\n\t\n\t // Increment our counter\n\t initialAnimationAttempts = initialAnimationAttempts + 1;\n\t }\n\t }\n\t\n\t function enableKeyboard() {\n\t $element.on('keydown', keyPressed);\n\t\n\t // On the next tick, setup a check for outside clicks; we do this on the next tick to avoid\n\t // clicks/touches that result in the isOpen attribute changing (e.g. a bound radio button)\n\t $mdUtil.nextTick(function() {\n\t angular.element(document).on('click touchend', checkForOutsideClick);\n\t });\n\t\n\t // TODO: On desktop, we should be able to reset the indexes so you cannot tab through, but\n\t // this breaks accessibility, especially on mobile, since you have no arrow keys to press\n\t //resetActionTabIndexes();\n\t }\n\t\n\t function disableKeyboard() {\n\t $element.off('keydown', keyPressed);\n\t angular.element(document).off('click touchend', checkForOutsideClick);\n\t }\n\t\n\t function checkForOutsideClick(event) {\n\t if (event.target) {\n\t var closestTrigger = $mdUtil.getClosest(event.target, 'md-fab-trigger');\n\t var closestActions = $mdUtil.getClosest(event.target, 'md-fab-actions');\n\t\n\t if (!closestTrigger && !closestActions) {\n\t vm.close();\n\t }\n\t }\n\t }\n\t\n\t function keyPressed(event) {\n\t switch (event.which) {\n\t case $mdConstant.KEY_CODE.ESCAPE: vm.close(); event.preventDefault(); return false;\n\t case $mdConstant.KEY_CODE.LEFT_ARROW: doKeyLeft(event); return false;\n\t case $mdConstant.KEY_CODE.UP_ARROW: doKeyUp(event); return false;\n\t case $mdConstant.KEY_CODE.RIGHT_ARROW: doKeyRight(event); return false;\n\t case $mdConstant.KEY_CODE.DOWN_ARROW: doKeyDown(event); return false;\n\t }\n\t }\n\t\n\t function doActionPrev(event) {\n\t focusAction(event, -1);\n\t }\n\t\n\t function doActionNext(event) {\n\t focusAction(event, 1);\n\t }\n\t\n\t function focusAction(event, direction) {\n\t var actions = resetActionTabIndexes();\n\t\n\t // Increment/decrement the counter with restrictions\n\t vm.currentActionIndex = vm.currentActionIndex + direction;\n\t vm.currentActionIndex = Math.min(actions.length - 1, vm.currentActionIndex);\n\t vm.currentActionIndex = Math.max(0, vm.currentActionIndex);\n\t\n\t // Focus the element\n\t var focusElement = angular.element(actions[vm.currentActionIndex]).children()[0];\n\t angular.element(focusElement).attr('tabindex', 0);\n\t focusElement.focus();\n\t\n\t // Make sure the event doesn't bubble and cause something else\n\t event.preventDefault();\n\t event.stopImmediatePropagation();\n\t }\n\t\n\t function resetActionTabIndexes() {\n\t // Grab all of the actions\n\t var actions = getActionsElement()[0].querySelectorAll('.md-fab-action-item');\n\t\n\t // Disable all other actions for tabbing\n\t angular.forEach(actions, function(action) {\n\t angular.element(angular.element(action).children()[0]).attr('tabindex', -1);\n\t });\n\t\n\t return actions;\n\t }\n\t\n\t function doKeyLeft(event) {\n\t if (vm.direction === 'left') {\n\t doActionNext(event);\n\t } else {\n\t doActionPrev(event);\n\t }\n\t }\n\t\n\t function doKeyUp(event) {\n\t if (vm.direction === 'down') {\n\t doActionPrev(event);\n\t } else {\n\t doActionNext(event);\n\t }\n\t }\n\t\n\t function doKeyRight(event) {\n\t if (vm.direction === 'left') {\n\t doActionPrev(event);\n\t } else {\n\t doActionNext(event);\n\t }\n\t }\n\t\n\t function doKeyDown(event) {\n\t if (vm.direction === 'up') {\n\t doActionPrev(event);\n\t } else {\n\t doActionNext(event);\n\t }\n\t }\n\t\n\t function isTrigger(element) {\n\t return $mdUtil.getClosest(element, 'md-fab-trigger');\n\t }\n\t\n\t function isAction(element) {\n\t return $mdUtil.getClosest(element, 'md-fab-actions');\n\t }\n\t\n\t function handleItemClick(event) {\n\t if (isTrigger(event.target)) {\n\t vm.toggle();\n\t }\n\t\n\t if (isAction(event.target)) {\n\t vm.close();\n\t }\n\t }\n\t\n\t function getTriggerElement() {\n\t return $element.find('md-fab-trigger');\n\t }\n\t\n\t function getActionsElement() {\n\t return $element.find('md-fab-actions');\n\t }\n\t }\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t /**\n\t * The duration of the CSS animation in milliseconds.\n\t *\n\t * @type {number}\n\t */\n\t MdFabSpeedDialFlingAnimation.$inject = [\"$timeout\"];\n\t MdFabSpeedDialScaleAnimation.$inject = [\"$timeout\"];\n\t var cssAnimationDuration = 300;\n\t\n\t /**\n\t * @ngdoc module\n\t * @name material.components.fabSpeedDial\n\t */\n\t angular\n\t // Declare our module\n\t .module('material.components.fabSpeedDial', [\n\t 'material.core',\n\t 'material.components.fabShared',\n\t 'material.components.fabActions'\n\t ])\n\t\n\t // Register our directive\n\t .directive('mdFabSpeedDial', MdFabSpeedDialDirective)\n\t\n\t // Register our custom animations\n\t .animation('.md-fling', MdFabSpeedDialFlingAnimation)\n\t .animation('.md-scale', MdFabSpeedDialScaleAnimation)\n\t\n\t // Register a service for each animation so that we can easily inject them into unit tests\n\t .service('mdFabSpeedDialFlingAnimation', MdFabSpeedDialFlingAnimation)\n\t .service('mdFabSpeedDialScaleAnimation', MdFabSpeedDialScaleAnimation);\n\t\n\t /**\n\t * @ngdoc directive\n\t * @name mdFabSpeedDial\n\t * @module material.components.fabSpeedDial\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * The `` directive is used to present a series of popup elements (usually\n\t * ``s) for quick access to common actions.\n\t *\n\t * There are currently two animations available by applying one of the following classes to\n\t * the component:\n\t *\n\t * - `md-fling` - The speed dial items appear from underneath the trigger and move into their\n\t * appropriate positions.\n\t * - `md-scale` - The speed dial items appear in their proper places by scaling from 0% to 100%.\n\t *\n\t * You may also easily position the trigger by applying one one of the following classes to the\n\t * `` element:\n\t * - `md-fab-top-left`\n\t * - `md-fab-top-right`\n\t * - `md-fab-bottom-left`\n\t * - `md-fab-bottom-right`\n\t *\n\t * These CSS classes use `position: absolute`, so you need to ensure that the container element\n\t * also uses `position: absolute` or `position: relative` in order for them to work.\n\t *\n\t * Additionally, you may use the standard `ng-mouseenter` and `ng-mouseleave` directives to\n\t * open or close the speed dial. However, if you wish to allow users to hover over the empty\n\t * space where the actions will appear, you must also add the `md-hover-full` class to the speed\n\t * dial element. Without this, the hover effect will only occur on top of the trigger.\n\t *\n\t * See the demos for more information.\n\t *\n\t * ## Troubleshooting\n\t *\n\t * If your speed dial shows the closing animation upon launch, you may need to use `ng-cloak` on\n\t * the parent container to ensure that it is only visible once ready. We have plans to remove this\n\t * necessity in the future.\n\t *\n\t * @usage\n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * @param {string} md-direction From which direction you would like the speed dial to appear\n\t * relative to the trigger element.\n\t * @param {expression=} md-open Programmatically control whether or not the speed-dial is visible.\n\t */\n\t function MdFabSpeedDialDirective() {\n\t return {\n\t restrict: 'E',\n\t\n\t scope: {\n\t direction: '@?mdDirection',\n\t isOpen: '=?mdOpen'\n\t },\n\t\n\t bindToController: true,\n\t controller: 'MdFabController',\n\t controllerAs: 'vm',\n\t\n\t link: FabSpeedDialLink\n\t };\n\t\n\t function FabSpeedDialLink(scope, element) {\n\t // Prepend an element to hold our CSS variables so we can use them in the animations below\n\t element.prepend('
');\n\t }\n\t }\n\t\n\t function MdFabSpeedDialFlingAnimation($timeout) {\n\t function delayDone(done) { $timeout(done, cssAnimationDuration, false); }\n\t\n\t function runAnimation(element) {\n\t // Don't run if we are still waiting and we are not ready\n\t if (element.hasClass('md-animations-waiting') && !element.hasClass('_md-animations-ready')) {\n\t return;\n\t }\n\t\n\t var el = element[0];\n\t var ctrl = element.controller('mdFabSpeedDial');\n\t var items = el.querySelectorAll('.md-fab-action-item');\n\t\n\t // Grab our trigger element\n\t var triggerElement = el.querySelector('md-fab-trigger');\n\t\n\t // Grab our element which stores CSS variables\n\t var variablesElement = el.querySelector('._md-css-variables');\n\t\n\t // Setup JS variables based on our CSS variables\n\t var startZIndex = parseInt(window.getComputedStyle(variablesElement).zIndex);\n\t\n\t // Always reset the items to their natural position/state\n\t angular.forEach(items, function(item, index) {\n\t var styles = item.style;\n\t\n\t styles.transform = styles.webkitTransform = '';\n\t styles.transitionDelay = '';\n\t styles.opacity = 1;\n\t\n\t // Make the items closest to the trigger have the highest z-index\n\t styles.zIndex = (items.length - index) + startZIndex;\n\t });\n\t\n\t // Set the trigger to be above all of the actions so they disappear behind it.\n\t triggerElement.style.zIndex = startZIndex + items.length + 1;\n\t\n\t // If the control is closed, hide the items behind the trigger\n\t if (!ctrl.isOpen) {\n\t angular.forEach(items, function(item, index) {\n\t var newPosition, axis;\n\t var styles = item.style;\n\t\n\t // Make sure to account for differences in the dimensions of the trigger verses the items\n\t // so that we can properly center everything; this helps hide the item's shadows behind\n\t // the trigger.\n\t var triggerItemHeightOffset = (triggerElement.clientHeight - item.clientHeight) / 2;\n\t var triggerItemWidthOffset = (triggerElement.clientWidth - item.clientWidth) / 2;\n\t\n\t switch (ctrl.direction) {\n\t case 'up':\n\t newPosition = (item.scrollHeight * (index + 1) + triggerItemHeightOffset);\n\t axis = 'Y';\n\t break;\n\t case 'down':\n\t newPosition = -(item.scrollHeight * (index + 1) + triggerItemHeightOffset);\n\t axis = 'Y';\n\t break;\n\t case 'left':\n\t newPosition = (item.scrollWidth * (index + 1) + triggerItemWidthOffset);\n\t axis = 'X';\n\t break;\n\t case 'right':\n\t newPosition = -(item.scrollWidth * (index + 1) + triggerItemWidthOffset);\n\t axis = 'X';\n\t break;\n\t }\n\t\n\t var newTranslate = 'translate' + axis + '(' + newPosition + 'px)';\n\t\n\t styles.transform = styles.webkitTransform = newTranslate;\n\t });\n\t }\n\t }\n\t\n\t return {\n\t addClass: function(element, className, done) {\n\t if (element.hasClass('md-fling')) {\n\t runAnimation(element);\n\t delayDone(done);\n\t } else {\n\t done();\n\t }\n\t },\n\t removeClass: function(element, className, done) {\n\t runAnimation(element);\n\t delayDone(done);\n\t }\n\t }\n\t }\n\t\n\t function MdFabSpeedDialScaleAnimation($timeout) {\n\t function delayDone(done) { $timeout(done, cssAnimationDuration, false); }\n\t\n\t var delay = 65;\n\t\n\t function runAnimation(element) {\n\t var el = element[0];\n\t var ctrl = element.controller('mdFabSpeedDial');\n\t var items = el.querySelectorAll('.md-fab-action-item');\n\t\n\t // Grab our element which stores CSS variables\n\t var variablesElement = el.querySelector('._md-css-variables');\n\t\n\t // Setup JS variables based on our CSS variables\n\t var startZIndex = parseInt(window.getComputedStyle(variablesElement).zIndex);\n\t\n\t // Always reset the items to their natural position/state\n\t angular.forEach(items, function(item, index) {\n\t var styles = item.style,\n\t offsetDelay = index * delay;\n\t\n\t styles.opacity = ctrl.isOpen ? 1 : 0;\n\t styles.transform = styles.webkitTransform = ctrl.isOpen ? 'scale(1)' : 'scale(0)';\n\t styles.transitionDelay = (ctrl.isOpen ? offsetDelay : (items.length - offsetDelay)) + 'ms';\n\t\n\t // Make the items closest to the trigger have the highest z-index\n\t styles.zIndex = (items.length - index) + startZIndex;\n\t });\n\t }\n\t\n\t return {\n\t addClass: function(element, className, done) {\n\t runAnimation(element);\n\t delayDone(done);\n\t },\n\t\n\t removeClass: function(element, className, done) {\n\t runAnimation(element);\n\t delayDone(done);\n\t }\n\t }\n\t }\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t(function() {\n\t 'use strict';\n\t\n\t /**\n\t * @ngdoc module\n\t * @name material.components.fabToolbar\n\t */\n\t angular\n\t // Declare our module\n\t .module('material.components.fabToolbar', [\n\t 'material.core',\n\t 'material.components.fabShared',\n\t 'material.components.fabActions'\n\t ])\n\t\n\t // Register our directive\n\t .directive('mdFabToolbar', MdFabToolbarDirective)\n\t\n\t // Register our custom animations\n\t .animation('.md-fab-toolbar', MdFabToolbarAnimation)\n\t\n\t // Register a service for the animation so that we can easily inject it into unit tests\n\t .service('mdFabToolbarAnimation', MdFabToolbarAnimation);\n\t\n\t /**\n\t * @ngdoc directive\n\t * @name mdFabToolbar\n\t * @module material.components.fabToolbar\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t *\n\t * The `` directive is used present a toolbar of elements (usually ``s)\n\t * for quick access to common actions when a floating action button is activated (via click or\n\t * keyboard navigation).\n\t *\n\t * You may also easily position the trigger by applying one one of the following classes to the\n\t * `` element:\n\t * - `md-fab-top-left`\n\t * - `md-fab-top-right`\n\t * - `md-fab-bottom-left`\n\t * - `md-fab-bottom-right`\n\t *\n\t * These CSS classes use `position: absolute`, so you need to ensure that the container element\n\t * also uses `position: absolute` or `position: relative` in order for them to work.\n\t *\n\t * @usage\n\t *\n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * @param {string} md-direction From which direction you would like the toolbar items to appear\n\t * relative to the trigger element. Supports `left` and `right` directions.\n\t * @param {expression=} md-open Programmatically control whether or not the toolbar is visible.\n\t */\n\t function MdFabToolbarDirective() {\n\t return {\n\t restrict: 'E',\n\t transclude: true,\n\t template: '
' +\n\t '
' +\n\t '
',\n\t\n\t scope: {\n\t direction: '@?mdDirection',\n\t isOpen: '=?mdOpen'\n\t },\n\t\n\t bindToController: true,\n\t controller: 'MdFabController',\n\t controllerAs: 'vm',\n\t\n\t link: link\n\t };\n\t\n\t function link(scope, element, attributes) {\n\t // Add the base class for animations\n\t element.addClass('md-fab-toolbar');\n\t\n\t // Prepend the background element to the trigger's button\n\t element.find('md-fab-trigger').find('button')\n\t .prepend('
');\n\t }\n\t }\n\t\n\t function MdFabToolbarAnimation() {\n\t\n\t function runAnimation(element, className, done) {\n\t // If no className was specified, don't do anything\n\t if (!className) {\n\t return;\n\t }\n\t\n\t var el = element[0];\n\t var ctrl = element.controller('mdFabToolbar');\n\t\n\t // Grab the relevant child elements\n\t var backgroundElement = el.querySelector('.md-fab-toolbar-background');\n\t var triggerElement = el.querySelector('md-fab-trigger button');\n\t var toolbarElement = el.querySelector('md-toolbar');\n\t var iconElement = el.querySelector('md-fab-trigger button md-icon');\n\t var actions = element.find('md-fab-actions').children();\n\t\n\t // If we have both elements, use them to position the new background\n\t if (triggerElement && backgroundElement) {\n\t // Get our variables\n\t var color = window.getComputedStyle(triggerElement).getPropertyValue('background-color');\n\t var width = el.offsetWidth;\n\t var height = el.offsetHeight;\n\t\n\t // Make it twice as big as it should be since we scale from the center\n\t var scale = 2 * (width / triggerElement.offsetWidth);\n\t\n\t // Set some basic styles no matter what animation we're doing\n\t backgroundElement.style.backgroundColor = color;\n\t backgroundElement.style.borderRadius = width + 'px';\n\t\n\t // If we're open\n\t if (ctrl.isOpen) {\n\t // Turn on toolbar pointer events when closed\n\t toolbarElement.style.pointerEvents = 'inherit';\n\t\n\t backgroundElement.style.width = triggerElement.offsetWidth + 'px';\n\t backgroundElement.style.height = triggerElement.offsetHeight + 'px';\n\t backgroundElement.style.transform = 'scale(' + scale + ')';\n\t\n\t // Set the next close animation to have the proper delays\n\t backgroundElement.style.transitionDelay = '0ms';\n\t iconElement && (iconElement.style.transitionDelay = '.3s');\n\t\n\t // Apply a transition delay to actions\n\t angular.forEach(actions, function(action, index) {\n\t action.style.transitionDelay = (actions.length - index) * 25 + 'ms';\n\t });\n\t } else {\n\t // Turn off toolbar pointer events when closed\n\t toolbarElement.style.pointerEvents = 'none';\n\t\n\t // Scale it back down to the trigger's size\n\t backgroundElement.style.transform = 'scale(1)';\n\t\n\t // Reset the position\n\t backgroundElement.style.top = '0';\n\t\n\t if (element.hasClass('md-right')) {\n\t backgroundElement.style.left = '0';\n\t backgroundElement.style.right = null;\n\t }\n\t\n\t if (element.hasClass('md-left')) {\n\t backgroundElement.style.right = '0';\n\t backgroundElement.style.left = null;\n\t }\n\t\n\t // Set the next open animation to have the proper delays\n\t backgroundElement.style.transitionDelay = '200ms';\n\t iconElement && (iconElement.style.transitionDelay = '0ms');\n\t\n\t // Apply a transition delay to actions\n\t angular.forEach(actions, function(action, index) {\n\t action.style.transitionDelay = 200 + (index * 25) + 'ms';\n\t });\n\t }\n\t }\n\t }\n\t\n\t return {\n\t addClass: function(element, className, done) {\n\t runAnimation(element, className, done);\n\t done();\n\t },\n\t\n\t removeClass: function(element, className, done) {\n\t runAnimation(element, className, done);\n\t done();\n\t }\n\t }\n\t }\n\t})();\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.gridList\n\t */\n\tGridListController.$inject = [\"$mdUtil\"];\n\tGridLayoutFactory.$inject = [\"$mdUtil\"];\n\tGridListDirective.$inject = [\"$interpolate\", \"$mdConstant\", \"$mdGridLayout\", \"$mdMedia\"];\n\tGridTileDirective.$inject = [\"$mdMedia\"];\n\tangular.module('material.components.gridList', ['material.core'])\n\t .directive('mdGridList', GridListDirective)\n\t .directive('mdGridTile', GridTileDirective)\n\t .directive('mdGridTileFooter', GridTileCaptionDirective)\n\t .directive('mdGridTileHeader', GridTileCaptionDirective)\n\t .factory('$mdGridLayout', GridLayoutFactory);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdGridList\n\t * @module material.components.gridList\n\t * @restrict E\n\t * @description\n\t * Grid lists are an alternative to standard list views. Grid lists are distinct\n\t * from grids used for layouts and other visual presentations.\n\t *\n\t * A grid list is best suited to presenting a homogenous data type, typically\n\t * images, and is optimized for visual comprehension and differentiating between\n\t * like data types.\n\t *\n\t * A grid list is a continuous element consisting of tessellated, regular\n\t * subdivisions called cells that contain tiles (`md-grid-tile`).\n\t *\n\t * \"Concept\n\t * \"Grid\n\t *\n\t * Cells are arrayed vertically and horizontally within the grid.\n\t *\n\t * Tiles hold content and can span one or more cells vertically or horizontally.\n\t *\n\t * ### Responsive Attributes\n\t *\n\t * The `md-grid-list` directive supports \"responsive\" attributes, which allow\n\t * different `md-cols`, `md-gutter` and `md-row-height` values depending on the\n\t * currently matching media query.\n\t *\n\t * In order to set a responsive attribute, first define the fallback value with\n\t * the standard attribute name, then add additional attributes with the\n\t * following convention: `{base-attribute-name}-{media-query-name}=\"{value}\"`\n\t * (ie. `md-cols-lg=\"8\"`)\n\t *\n\t * @param {number} md-cols Number of columns in the grid.\n\t * @param {string} md-row-height One of\n\t *
    \n\t *
  • CSS length - Fixed height rows (eg. `8px` or `1rem`)
  • \n\t *
  • `{width}:{height}` - Ratio of width to height (eg.\n\t * `md-row-height=\"16:9\"`)
  • \n\t *
  • `\"fit\"` - Height will be determined by subdividing the available\n\t * height by the number of rows
  • \n\t *
\n\t * @param {string=} md-gutter The amount of space between tiles in CSS units\n\t * (default 1px)\n\t * @param {expression=} md-on-layout Expression to evaluate after layout. Event\n\t * object is available as `$event`, and contains performance information.\n\t *\n\t * @usage\n\t * Basic:\n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * Fixed-height rows:\n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * Fit rows:\n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t * Using responsive attributes:\n\t * \n\t * \n\t * \n\t * \n\t * \n\t */\n\tfunction GridListDirective($interpolate, $mdConstant, $mdGridLayout, $mdMedia) {\n\t return {\n\t restrict: 'E',\n\t controller: GridListController,\n\t scope: {\n\t mdOnLayout: '&'\n\t },\n\t link: postLink\n\t };\n\t\n\t function postLink(scope, element, attrs, ctrl) {\n\t element.addClass('_md'); // private md component indicator for styling\n\t \n\t // Apply semantics\n\t element.attr('role', 'list');\n\t\n\t // Provide the controller with a way to trigger layouts.\n\t ctrl.layoutDelegate = layoutDelegate;\n\t\n\t var invalidateLayout = angular.bind(ctrl, ctrl.invalidateLayout),\n\t unwatchAttrs = watchMedia();\n\t scope.$on('$destroy', unwatchMedia);\n\t\n\t /**\n\t * Watches for changes in media, invalidating layout as necessary.\n\t */\n\t function watchMedia() {\n\t for (var mediaName in $mdConstant.MEDIA) {\n\t $mdMedia(mediaName); // initialize\n\t $mdMedia.getQuery($mdConstant.MEDIA[mediaName])\n\t .addListener(invalidateLayout);\n\t }\n\t return $mdMedia.watchResponsiveAttributes(\n\t ['md-cols', 'md-row-height', 'md-gutter'], attrs, layoutIfMediaMatch);\n\t }\n\t\n\t function unwatchMedia() {\n\t ctrl.layoutDelegate = angular.noop;\n\t\n\t unwatchAttrs();\n\t for (var mediaName in $mdConstant.MEDIA) {\n\t $mdMedia.getQuery($mdConstant.MEDIA[mediaName])\n\t .removeListener(invalidateLayout);\n\t }\n\t }\n\t\n\t /**\n\t * Performs grid layout if the provided mediaName matches the currently\n\t * active media type.\n\t */\n\t function layoutIfMediaMatch(mediaName) {\n\t if (mediaName == null) {\n\t // TODO(shyndman): It would be nice to only layout if we have\n\t // instances of attributes using this media type\n\t ctrl.invalidateLayout();\n\t } else if ($mdMedia(mediaName)) {\n\t ctrl.invalidateLayout();\n\t }\n\t }\n\t\n\t var lastLayoutProps;\n\t\n\t /**\n\t * Invokes the layout engine, and uses its results to lay out our\n\t * tile elements.\n\t *\n\t * @param {boolean} tilesInvalidated Whether tiles have been\n\t * added/removed/moved since the last layout. This is to avoid situations\n\t * where tiles are replaced with properties identical to their removed\n\t * counterparts.\n\t */\n\t function layoutDelegate(tilesInvalidated) {\n\t var tiles = getTileElements();\n\t var props = {\n\t tileSpans: getTileSpans(tiles),\n\t colCount: getColumnCount(),\n\t rowMode: getRowMode(),\n\t rowHeight: getRowHeight(),\n\t gutter: getGutter()\n\t };\n\t\n\t if (!tilesInvalidated && angular.equals(props, lastLayoutProps)) {\n\t return;\n\t }\n\t\n\t var performance =\n\t $mdGridLayout(props.colCount, props.tileSpans, tiles)\n\t .map(function(tilePositions, rowCount) {\n\t return {\n\t grid: {\n\t element: element,\n\t style: getGridStyle(props.colCount, rowCount,\n\t props.gutter, props.rowMode, props.rowHeight)\n\t },\n\t tiles: tilePositions.map(function(ps, i) {\n\t return {\n\t element: angular.element(tiles[i]),\n\t style: getTileStyle(ps.position, ps.spans,\n\t props.colCount, rowCount,\n\t props.gutter, props.rowMode, props.rowHeight)\n\t }\n\t })\n\t }\n\t })\n\t .reflow()\n\t .performance();\n\t\n\t // Report layout\n\t scope.mdOnLayout({\n\t $event: {\n\t performance: performance\n\t }\n\t });\n\t\n\t lastLayoutProps = props;\n\t }\n\t\n\t // Use $interpolate to do some simple string interpolation as a convenience.\n\t\n\t var startSymbol = $interpolate.startSymbol();\n\t var endSymbol = $interpolate.endSymbol();\n\t\n\t // Returns an expression wrapped in the interpolator's start and end symbols.\n\t function expr(exprStr) {\n\t return startSymbol + exprStr + endSymbol;\n\t }\n\t\n\t // The amount of space a single 1x1 tile would take up (either width or height), used as\n\t // a basis for other calculations. This consists of taking the base size percent (as would be\n\t // if evenly dividing the size between cells), and then subtracting the size of one gutter.\n\t // However, since there are no gutters on the edges, each tile only uses a fration\n\t // (gutterShare = numGutters / numCells) of the gutter size. (Imagine having one gutter per\n\t // tile, and then breaking up the extra gutter on the edge evenly among the cells).\n\t var UNIT = $interpolate(expr('share') + '% - (' + expr('gutter') + ' * ' + expr('gutterShare') + ')');\n\t\n\t // The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\n\t // The position comes the size of a 1x1 tile plus gutter for each previous tile in the\n\t // row/column (offset).\n\t var POSITION = $interpolate('calc((' + expr('unit') + ' + ' + expr('gutter') + ') * ' + expr('offset') + ')');\n\t\n\t // The actual size of a tile, e.g., width or height, taking rowSpan or colSpan into account.\n\t // This is computed by multiplying the base unit by the rowSpan/colSpan, and then adding back\n\t // in the space that the gutter would normally have used (which was already accounted for in\n\t // the base unit calculation).\n\t var DIMENSION = $interpolate('calc((' + expr('unit') + ') * ' + expr('span') + ' + (' + expr('span') + ' - 1) * ' + expr('gutter') + ')');\n\t\n\t /**\n\t * Gets the styles applied to a tile element described by the given parameters.\n\t * @param {{row: number, col: number}} position The row and column indices of the tile.\n\t * @param {{row: number, col: number}} spans The rowSpan and colSpan of the tile.\n\t * @param {number} colCount The number of columns.\n\t * @param {number} rowCount The number of rows.\n\t * @param {string} gutter The amount of space between tiles. This will be something like\n\t * '5px' or '2em'.\n\t * @param {string} rowMode The row height mode. Can be one of:\n\t * 'fixed': all rows have a fixed size, given by rowHeight,\n\t * 'ratio': row height defined as a ratio to width, or\n\t * 'fit': fit to the grid-list element height, divinding evenly among rows.\n\t * @param {string|number} rowHeight The height of a row. This is only used for 'fixed' mode and\n\t * for 'ratio' mode. For 'ratio' mode, this is the *ratio* of width-to-height (e.g., 0.75).\n\t * @returns {Object} Map of CSS properties to be applied to the style element. Will define\n\t * values for top, left, width, height, marginTop, and paddingTop.\n\t */\n\t function getTileStyle(position, spans, colCount, rowCount, gutter, rowMode, rowHeight) {\n\t // TODO(shyndman): There are style caching opportunities here.\n\t\n\t // Percent of the available horizontal space that one column takes up.\n\t var hShare = (1 / colCount) * 100;\n\t\n\t // Fraction of the gutter size that each column takes up.\n\t var hGutterShare = (colCount - 1) / colCount;\n\t\n\t // Base horizontal size of a column.\n\t var hUnit = UNIT({share: hShare, gutterShare: hGutterShare, gutter: gutter});\n\t\n\t // The width and horizontal position of each tile is always calculated the same way, but the\n\t // height and vertical position depends on the rowMode.\n\t var style = {\n\t left: POSITION({ unit: hUnit, offset: position.col, gutter: gutter }),\n\t width: DIMENSION({ unit: hUnit, span: spans.col, gutter: gutter }),\n\t // resets\n\t paddingTop: '',\n\t marginTop: '',\n\t top: '',\n\t height: ''\n\t };\n\t\n\t switch (rowMode) {\n\t case 'fixed':\n\t // In fixed mode, simply use the given rowHeight.\n\t style.top = POSITION({ unit: rowHeight, offset: position.row, gutter: gutter });\n\t style.height = DIMENSION({ unit: rowHeight, span: spans.row, gutter: gutter });\n\t break;\n\t\n\t case 'ratio':\n\t // Percent of the available vertical space that one row takes up. Here, rowHeight holds\n\t // the ratio value. For example, if the width:height ratio is 4:3, rowHeight = 1.333.\n\t var vShare = hShare / rowHeight;\n\t\n\t // Base veritcal size of a row.\n\t var vUnit = UNIT({ share: vShare, gutterShare: hGutterShare, gutter: gutter });\n\t\n\t // padidngTop and marginTop are used to maintain the given aspect ratio, as\n\t // a percentage-based value for these properties is applied to the *width* of the\n\t // containing block. See http://www.w3.org/TR/CSS2/box.html#margin-properties\n\t style.paddingTop = DIMENSION({ unit: vUnit, span: spans.row, gutter: gutter});\n\t style.marginTop = POSITION({ unit: vUnit, offset: position.row, gutter: gutter });\n\t break;\n\t\n\t case 'fit':\n\t // Fraction of the gutter size that each column takes up.\n\t var vGutterShare = (rowCount - 1) / rowCount;\n\t\n\t // Percent of the available vertical space that one row takes up.\n\t var vShare = (1 / rowCount) * 100;\n\t\n\t // Base vertical size of a row.\n\t var vUnit = UNIT({share: vShare, gutterShare: vGutterShare, gutter: gutter});\n\t\n\t style.top = POSITION({unit: vUnit, offset: position.row, gutter: gutter});\n\t style.height = DIMENSION({unit: vUnit, span: spans.row, gutter: gutter});\n\t break;\n\t }\n\t\n\t return style;\n\t }\n\t\n\t function getGridStyle(colCount, rowCount, gutter, rowMode, rowHeight) {\n\t var style = {};\n\t\n\t switch(rowMode) {\n\t case 'fixed':\n\t style.height = DIMENSION({ unit: rowHeight, span: rowCount, gutter: gutter });\n\t style.paddingBottom = '';\n\t break;\n\t\n\t case 'ratio':\n\t // rowHeight is width / height\n\t var hGutterShare = colCount === 1 ? 0 : (colCount - 1) / colCount,\n\t hShare = (1 / colCount) * 100,\n\t vShare = hShare * (1 / rowHeight),\n\t vUnit = UNIT({ share: vShare, gutterShare: hGutterShare, gutter: gutter });\n\t\n\t style.height = '';\n\t style.paddingBottom = DIMENSION({ unit: vUnit, span: rowCount, gutter: gutter});\n\t break;\n\t\n\t case 'fit':\n\t // noop, as the height is user set\n\t break;\n\t }\n\t\n\t return style;\n\t }\n\t\n\t function getTileElements() {\n\t return [].filter.call(element.children(), function(ele) {\n\t return ele.tagName == 'MD-GRID-TILE' && !ele.$$mdDestroyed;\n\t });\n\t }\n\t\n\t /**\n\t * Gets an array of objects containing the rowspan and colspan for each tile.\n\t * @returns {Array<{row: number, col: number}>}\n\t */\n\t function getTileSpans(tileElements) {\n\t return [].map.call(tileElements, function(ele) {\n\t var ctrl = angular.element(ele).controller('mdGridTile');\n\t return {\n\t row: parseInt(\n\t $mdMedia.getResponsiveAttribute(ctrl.$attrs, 'md-rowspan'), 10) || 1,\n\t col: parseInt(\n\t $mdMedia.getResponsiveAttribute(ctrl.$attrs, 'md-colspan'), 10) || 1\n\t };\n\t });\n\t }\n\t\n\t function getColumnCount() {\n\t var colCount = parseInt($mdMedia.getResponsiveAttribute(attrs, 'md-cols'), 10);\n\t if (isNaN(colCount)) {\n\t throw 'md-grid-list: md-cols attribute was not found, or contained a non-numeric value';\n\t }\n\t return colCount;\n\t }\n\t\n\t function getGutter() {\n\t return applyDefaultUnit($mdMedia.getResponsiveAttribute(attrs, 'md-gutter') || 1);\n\t }\n\t\n\t function getRowHeight() {\n\t var rowHeight = $mdMedia.getResponsiveAttribute(attrs, 'md-row-height');\n\t if (!rowHeight) {\n\t throw 'md-grid-list: md-row-height attribute was not found';\n\t }\n\t\n\t switch (getRowMode()) {\n\t case 'fixed':\n\t return applyDefaultUnit(rowHeight);\n\t case 'ratio':\n\t var whRatio = rowHeight.split(':');\n\t return parseFloat(whRatio[0]) / parseFloat(whRatio[1]);\n\t case 'fit':\n\t return 0; // N/A\n\t }\n\t }\n\t\n\t function getRowMode() {\n\t var rowHeight = $mdMedia.getResponsiveAttribute(attrs, 'md-row-height');\n\t if (!rowHeight) {\n\t throw 'md-grid-list: md-row-height attribute was not found';\n\t }\n\t\n\t if (rowHeight == 'fit') {\n\t return 'fit';\n\t } else if (rowHeight.indexOf(':') !== -1) {\n\t return 'ratio';\n\t } else {\n\t return 'fixed';\n\t }\n\t }\n\t\n\t function applyDefaultUnit(val) {\n\t return /\\D$/.test(val) ? val : val + 'px';\n\t }\n\t }\n\t}\n\t\n\t/* @ngInject */\n\tfunction GridListController($mdUtil) {\n\t this.layoutInvalidated = false;\n\t this.tilesInvalidated = false;\n\t this.$timeout_ = $mdUtil.nextTick;\n\t this.layoutDelegate = angular.noop;\n\t}\n\t\n\tGridListController.prototype = {\n\t invalidateTiles: function() {\n\t this.tilesInvalidated = true;\n\t this.invalidateLayout();\n\t },\n\t\n\t invalidateLayout: function() {\n\t if (this.layoutInvalidated) {\n\t return;\n\t }\n\t this.layoutInvalidated = true;\n\t this.$timeout_(angular.bind(this, this.layout));\n\t },\n\t\n\t layout: function() {\n\t try {\n\t this.layoutDelegate(this.tilesInvalidated);\n\t } finally {\n\t this.layoutInvalidated = false;\n\t this.tilesInvalidated = false;\n\t }\n\t }\n\t};\n\t\n\t\n\t/* @ngInject */\n\tfunction GridLayoutFactory($mdUtil) {\n\t var defaultAnimator = GridTileAnimator;\n\t\n\t /**\n\t * Set the reflow animator callback\n\t */\n\t GridLayout.animateWith = function(customAnimator) {\n\t defaultAnimator = !angular.isFunction(customAnimator) ? GridTileAnimator : customAnimator;\n\t };\n\t\n\t return GridLayout;\n\t\n\t /**\n\t * Publish layout function\n\t */\n\t function GridLayout(colCount, tileSpans) {\n\t var self, layoutInfo, gridStyles, layoutTime, mapTime, reflowTime;\n\t\n\t layoutTime = $mdUtil.time(function() {\n\t layoutInfo = calculateGridFor(colCount, tileSpans);\n\t });\n\t\n\t return self = {\n\t\n\t /**\n\t * An array of objects describing each tile's position in the grid.\n\t */\n\t layoutInfo: function() {\n\t return layoutInfo;\n\t },\n\t\n\t /**\n\t * Maps grid positioning to an element and a set of styles using the\n\t * provided updateFn.\n\t */\n\t map: function(updateFn) {\n\t mapTime = $mdUtil.time(function() {\n\t var info = self.layoutInfo();\n\t gridStyles = updateFn(info.positioning, info.rowCount);\n\t });\n\t return self;\n\t },\n\t\n\t /**\n\t * Default animator simply sets the element.css( ). An alternate\n\t * animator can be provided as an argument. The function has the following\n\t * signature:\n\t *\n\t * function({grid: {element: JQLite, style: Object}, tiles: Array<{element: JQLite, style: Object}>)\n\t */\n\t reflow: function(animatorFn) {\n\t reflowTime = $mdUtil.time(function() {\n\t var animator = animatorFn || defaultAnimator;\n\t animator(gridStyles.grid, gridStyles.tiles);\n\t });\n\t return self;\n\t },\n\t\n\t /**\n\t * Timing for the most recent layout run.\n\t */\n\t performance: function() {\n\t return {\n\t tileCount: tileSpans.length,\n\t layoutTime: layoutTime,\n\t mapTime: mapTime,\n\t reflowTime: reflowTime,\n\t totalTime: layoutTime + mapTime + reflowTime\n\t };\n\t }\n\t };\n\t }\n\t\n\t /**\n\t * Default Gridlist animator simple sets the css for each element;\n\t * NOTE: any transitions effects must be manually set in the CSS.\n\t * e.g.\n\t *\n\t * md-grid-tile {\n\t * transition: all 700ms ease-out 50ms;\n\t * }\n\t *\n\t */\n\t function GridTileAnimator(grid, tiles) {\n\t grid.element.css(grid.style);\n\t tiles.forEach(function(t) {\n\t t.element.css(t.style);\n\t })\n\t }\n\t\n\t /**\n\t * Calculates the positions of tiles.\n\t *\n\t * The algorithm works as follows:\n\t * An Array with length colCount (spaceTracker) keeps track of\n\t * available tiling positions, where elements of value 0 represents an\n\t * empty position. Space for a tile is reserved by finding a sequence of\n\t * 0s with length <= than the tile's colspan. When such a space has been\n\t * found, the occupied tile positions are incremented by the tile's\n\t * rowspan value, as these positions have become unavailable for that\n\t * many rows.\n\t *\n\t * If the end of a row has been reached without finding space for the\n\t * tile, spaceTracker's elements are each decremented by 1 to a minimum\n\t * of 0. Rows are searched in this fashion until space is found.\n\t */\n\t function calculateGridFor(colCount, tileSpans) {\n\t var curCol = 0,\n\t curRow = 0,\n\t spaceTracker = newSpaceTracker();\n\t\n\t return {\n\t positioning: tileSpans.map(function(spans, i) {\n\t return {\n\t spans: spans,\n\t position: reserveSpace(spans, i)\n\t };\n\t }),\n\t rowCount: curRow + Math.max.apply(Math, spaceTracker)\n\t };\n\t\n\t function reserveSpace(spans, i) {\n\t if (spans.col > colCount) {\n\t throw 'md-grid-list: Tile at position ' + i + ' has a colspan ' +\n\t '(' + spans.col + ') that exceeds the column count ' +\n\t '(' + colCount + ')';\n\t }\n\t\n\t var start = 0,\n\t end = 0;\n\t\n\t // TODO(shyndman): This loop isn't strictly necessary if you can\n\t // determine the minimum number of rows before a space opens up. To do\n\t // this, recognize that you've iterated across an entire row looking for\n\t // space, and if so fast-forward by the minimum rowSpan count. Repeat\n\t // until the required space opens up.\n\t while (end - start < spans.col) {\n\t if (curCol >= colCount) {\n\t nextRow();\n\t continue;\n\t }\n\t\n\t start = spaceTracker.indexOf(0, curCol);\n\t if (start === -1 || (end = findEnd(start + 1)) === -1) {\n\t start = end = 0;\n\t nextRow();\n\t continue;\n\t }\n\t\n\t curCol = end + 1;\n\t }\n\t\n\t adjustRow(start, spans.col, spans.row);\n\t curCol = start + spans.col;\n\t\n\t return {\n\t col: start,\n\t row: curRow\n\t };\n\t }\n\t\n\t function nextRow() {\n\t curCol = 0;\n\t curRow++;\n\t adjustRow(0, colCount, -1); // Decrement row spans by one\n\t }\n\t\n\t function adjustRow(from, cols, by) {\n\t for (var i = from; i < from + cols; i++) {\n\t spaceTracker[i] = Math.max(spaceTracker[i] + by, 0);\n\t }\n\t }\n\t\n\t function findEnd(start) {\n\t var i;\n\t for (i = start; i < spaceTracker.length; i++) {\n\t if (spaceTracker[i] !== 0) {\n\t return i;\n\t }\n\t }\n\t\n\t if (i === spaceTracker.length) {\n\t return i;\n\t }\n\t }\n\t\n\t function newSpaceTracker() {\n\t var tracker = [];\n\t for (var i = 0; i < colCount; i++) {\n\t tracker.push(0);\n\t }\n\t return tracker;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdGridTile\n\t * @module material.components.gridList\n\t * @restrict E\n\t * @description\n\t * Tiles contain the content of an `md-grid-list`. They span one or more grid\n\t * cells vertically or horizontally, and use `md-grid-tile-{footer,header}` to\n\t * display secondary content.\n\t *\n\t * ### Responsive Attributes\n\t *\n\t * The `md-grid-tile` directive supports \"responsive\" attributes, which allow\n\t * different `md-rowspan` and `md-colspan` values depending on the currently\n\t * matching media query.\n\t *\n\t * In order to set a responsive attribute, first define the fallback value with\n\t * the standard attribute name, then add additional attributes with the\n\t * following convention: `{base-attribute-name}-{media-query-name}=\"{value}\"`\n\t * (ie. `md-colspan-sm=\"4\"`)\n\t *\n\t * @param {number=} md-colspan The number of columns to span (default 1). Cannot\n\t * exceed the number of columns in the grid. Supports interpolation.\n\t * @param {number=} md-rowspan The number of rows to span (default 1). Supports\n\t * interpolation.\n\t *\n\t * @usage\n\t * With header:\n\t * \n\t * \n\t * \n\t *

This is a header

\n\t *
\n\t *
\n\t *
\n\t *\n\t * With footer:\n\t * \n\t * \n\t * \n\t *

This is a footer

\n\t *
\n\t *
\n\t *
\n\t *\n\t * Spanning multiple rows/columns:\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * Responsive attributes:\n\t * \n\t * \n\t * \n\t * \n\t */\n\tfunction GridTileDirective($mdMedia) {\n\t return {\n\t restrict: 'E',\n\t require: '^mdGridList',\n\t template: '
',\n\t transclude: true,\n\t scope: {},\n\t // Simple controller that exposes attributes to the grid directive\n\t controller: [\"$attrs\", function($attrs) {\n\t this.$attrs = $attrs;\n\t }],\n\t link: postLink\n\t };\n\t\n\t function postLink(scope, element, attrs, gridCtrl) {\n\t // Apply semantics\n\t element.attr('role', 'listitem');\n\t\n\t // If our colspan or rowspan changes, trigger a layout\n\t var unwatchAttrs = $mdMedia.watchResponsiveAttributes(['md-colspan', 'md-rowspan'],\n\t attrs, angular.bind(gridCtrl, gridCtrl.invalidateLayout));\n\t\n\t // Tile registration/deregistration\n\t gridCtrl.invalidateTiles();\n\t scope.$on('$destroy', function() {\n\t // Mark the tile as destroyed so it is no longer considered in layout,\n\t // even if the DOM element sticks around (like during a leave animation)\n\t element[0].$$mdDestroyed = true;\n\t unwatchAttrs();\n\t gridCtrl.invalidateLayout();\n\t });\n\t\n\t if (angular.isDefined(scope.$parent.$index)) {\n\t scope.$watch(function() { return scope.$parent.$index; },\n\t function indexChanged(newIdx, oldIdx) {\n\t if (newIdx === oldIdx) {\n\t return;\n\t }\n\t gridCtrl.invalidateTiles();\n\t });\n\t }\n\t }\n\t}\n\t\n\t\n\tfunction GridTileCaptionDirective() {\n\t return {\n\t template: '
',\n\t transclude: true\n\t };\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.icon\n\t * @description\n\t * Icon\n\t */\n\tangular.module('material.components.icon', ['material.core']);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.input\n\t */\n\tmdInputContainerDirective.$inject = [\"$mdTheming\", \"$parse\"];\n\tinputTextareaDirective.$inject = [\"$mdUtil\", \"$window\", \"$mdAria\", \"$timeout\", \"$mdGesture\"];\n\tmdMaxlengthDirective.$inject = [\"$animate\", \"$mdUtil\"];\n\tplaceholderDirective.$inject = [\"$compile\"];\n\tngMessageDirective.$inject = [\"$mdUtil\"];\n\tmdSelectOnFocusDirective.$inject = [\"$timeout\"];\n\tmdInputInvalidMessagesAnimation.$inject = [\"$$AnimateRunner\", \"$animateCss\", \"$mdUtil\"];\n\tngMessagesAnimation.$inject = [\"$$AnimateRunner\", \"$animateCss\", \"$mdUtil\"];\n\tngMessageAnimation.$inject = [\"$$AnimateRunner\", \"$animateCss\", \"$mdUtil\"];\n\tangular.module('material.components.input', [\n\t 'material.core'\n\t ])\n\t .directive('mdInputContainer', mdInputContainerDirective)\n\t .directive('label', labelDirective)\n\t .directive('input', inputTextareaDirective)\n\t .directive('textarea', inputTextareaDirective)\n\t .directive('mdMaxlength', mdMaxlengthDirective)\n\t .directive('placeholder', placeholderDirective)\n\t .directive('ngMessages', ngMessagesDirective)\n\t .directive('ngMessage', ngMessageDirective)\n\t .directive('ngMessageExp', ngMessageDirective)\n\t .directive('mdSelectOnFocus', mdSelectOnFocusDirective)\n\t\n\t .animation('.md-input-invalid', mdInputInvalidMessagesAnimation)\n\t .animation('.md-input-messages-animation', ngMessagesAnimation)\n\t .animation('.md-input-message-animation', ngMessageAnimation)\n\t\n\t // Register a service for each animation so that we can easily inject them into unit tests\n\t .service('mdInputInvalidAnimation', mdInputInvalidMessagesAnimation)\n\t .service('mdInputMessagesAnimation', ngMessagesAnimation)\n\t .service('mdInputMessageAnimation', ngMessageAnimation);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdInputContainer\n\t * @module material.components.input\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * `` is the parent of any input or textarea element.\n\t *\n\t * Input and textarea elements will not behave properly unless the md-input-container\n\t * parent is provided.\n\t *\n\t * A single `` should contain only one `` element, otherwise it will throw an error.\n\t *\n\t * Exception: Hidden inputs (``) are ignored and will not throw an error, so\n\t * you may combine these with other inputs.\n\t *\n\t * Note: When using `ngMessages` with your input element, make sure the message and container elements\n\t * are *block* elements, otherwise animations applied to the messages will not look as intended. Either use a `div` and\n\t * apply the `ng-message` and `ng-messages` classes respectively, or use the `md-block` class on your element.\n\t *\n\t * @param md-is-error {expression=} When the given expression evaluates to true, the input container\n\t * will go into error state. Defaults to erroring if the input has been touched and is invalid.\n\t * @param md-no-float {boolean=} When present, `placeholder` attributes on the input will not be converted to floating\n\t * labels.\n\t *\n\t * @usage\n\t * \n\t *\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * \n\t *\n\t *

When disabling floating labels

\n\t * \n\t *\n\t * \n\t * \n\t * \n\t *\n\t * \n\t */\n\tfunction mdInputContainerDirective($mdTheming, $parse) {\n\t\n\t ContainerCtrl.$inject = [\"$scope\", \"$element\", \"$attrs\", \"$animate\"];\n\t var INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT', 'MD-SELECT'];\n\t\n\t var LEFT_SELECTORS = INPUT_TAGS.reduce(function(selectors, isel) {\n\t return selectors.concat(['md-icon ~ ' + isel, '.md-icon ~ ' + isel]);\n\t }, []).join(\",\");\n\t\n\t var RIGHT_SELECTORS = INPUT_TAGS.reduce(function(selectors, isel) {\n\t return selectors.concat([isel + ' ~ md-icon', isel + ' ~ .md-icon']);\n\t }, []).join(\",\");\n\t\n\t return {\n\t restrict: 'E',\n\t compile: compile,\n\t controller: ContainerCtrl\n\t };\n\t\n\t function compile(tElement) {\n\t // Check for both a left & right icon\n\t var leftIcon = tElement[0].querySelector(LEFT_SELECTORS);\n\t var rightIcon = tElement[0].querySelector(RIGHT_SELECTORS);\n\t\n\t if (leftIcon) { tElement.addClass('md-icon-left'); }\n\t if (rightIcon) { tElement.addClass('md-icon-right'); }\n\t\n\t return function postLink(scope, element) {\n\t $mdTheming(element);\n\t };\n\t }\n\t\n\t function ContainerCtrl($scope, $element, $attrs, $animate) {\n\t var self = this;\n\t\n\t self.isErrorGetter = $attrs.mdIsError && $parse($attrs.mdIsError);\n\t\n\t self.delegateClick = function() {\n\t self.input.focus();\n\t };\n\t self.element = $element;\n\t self.setFocused = function(isFocused) {\n\t $element.toggleClass('md-input-focused', !!isFocused);\n\t };\n\t self.setHasValue = function(hasValue) {\n\t $element.toggleClass('md-input-has-value', !!hasValue);\n\t };\n\t self.setHasPlaceholder = function(hasPlaceholder) {\n\t $element.toggleClass('md-input-has-placeholder', !!hasPlaceholder);\n\t };\n\t self.setInvalid = function(isInvalid) {\n\t if (isInvalid) {\n\t $animate.addClass($element, 'md-input-invalid');\n\t } else {\n\t $animate.removeClass($element, 'md-input-invalid');\n\t }\n\t };\n\t $scope.$watch(function() {\n\t return self.label && self.input;\n\t }, function(hasLabelAndInput) {\n\t if (hasLabelAndInput && !self.label.attr('for')) {\n\t self.label.attr('for', self.input.attr('id'));\n\t }\n\t });\n\t }\n\t}\n\t\n\tfunction labelDirective() {\n\t return {\n\t restrict: 'E',\n\t require: '^?mdInputContainer',\n\t link: function(scope, element, attr, containerCtrl) {\n\t if (!containerCtrl || attr.mdNoFloat || element.hasClass('md-container-ignore')) return;\n\t\n\t containerCtrl.label = element;\n\t scope.$on('$destroy', function() {\n\t containerCtrl.label = null;\n\t });\n\t }\n\t };\n\t}\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdInput\n\t * @restrict E\n\t * @module material.components.input\n\t *\n\t * @description\n\t * You can use any `` or `\n\t *
\n\t *
This is required!
\n\t *
That's too long!
\n\t *
\n\t *
\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t *\n\t *

Notes

\n\t *\n\t * - Requires [ngMessages](https://docs.angularjs.org/api/ngMessages).\n\t * - Behaves like the [AngularJS input directive](https://docs.angularjs.org/api/ng/directive/input).\n\t *\n\t * The `md-input` and `md-input-container` directives use very specific positioning to achieve the\n\t * error animation effects. Therefore, it is *not* advised to use the Layout system inside of the\n\t * `` tags. Instead, use relative or absolute positioning.\n\t *\n\t *\n\t *

Textarea directive

\n\t * The `textarea` element within a `md-input-container` has the following specific behavior:\n\t * - By default the `textarea` grows as the user types. This can be disabled via the `md-no-autogrow`\n\t * attribute.\n\t * - If a `textarea` has the `rows` attribute, it will treat the `rows` as the minimum height and will\n\t * continue growing as the user types. For example a textarea with `rows=\"3\"` will be 3 lines of text\n\t * high initially. If no rows are specified, the directive defaults to 1.\n\t * - The textarea's height gets set on initialization, as well as while the user is typing. In certain situations\n\t * (e.g. while animating) the directive might have been initialized, before the element got it's final height. In\n\t * those cases, you can trigger a resize manually by broadcasting a `md-resize-textarea` event on the scope.\n\t * - If you wan't a `textarea` to stop growing at a certain point, you can specify the `max-rows` attribute.\n\t * - The textarea's bottom border acts as a handle which users can drag, in order to resize the element vertically.\n\t * Once the user has resized a `textarea`, the autogrowing functionality becomes disabled. If you don't want a\n\t * `textarea` to be resizeable by the user, you can add the `md-no-resize` attribute.\n\t */\n\t\n\tfunction inputTextareaDirective($mdUtil, $window, $mdAria, $timeout, $mdGesture) {\n\t return {\n\t restrict: 'E',\n\t require: ['^?mdInputContainer', '?ngModel', '?^form'],\n\t link: postLink\n\t };\n\t\n\t function postLink(scope, element, attr, ctrls) {\n\t\n\t var containerCtrl = ctrls[0];\n\t var hasNgModel = !!ctrls[1];\n\t var ngModelCtrl = ctrls[1] || $mdUtil.fakeNgModel();\n\t var parentForm = ctrls[2];\n\t var isReadonly = angular.isDefined(attr.readonly);\n\t var mdNoAsterisk = $mdUtil.parseAttributeBoolean(attr.mdNoAsterisk);\n\t var tagName = element[0].tagName.toLowerCase();\n\t\n\t\n\t if (!containerCtrl) return;\n\t if (attr.type === 'hidden') {\n\t element.attr('aria-hidden', 'true');\n\t return;\n\t } else if (containerCtrl.input) {\n\t if (containerCtrl.input[0].contains(element[0])) {\n\t return;\n\t } else {\n\t throw new Error(\" can only have *one* , \n\t * \n\t *\n\t * \n\t */\n\tfunction mdSelectOnFocusDirective($timeout) {\n\t\n\t return {\n\t restrict: 'A',\n\t link: postLink\n\t };\n\t\n\t function postLink(scope, element, attr) {\n\t if (element[0].nodeName !== 'INPUT' && element[0].nodeName !== \"TEXTAREA\") return;\n\t\n\t var preventMouseUp = false;\n\t\n\t element\n\t .on('focus', onFocus)\n\t .on('mouseup', onMouseUp);\n\t\n\t scope.$on('$destroy', function() {\n\t element\n\t .off('focus', onFocus)\n\t .off('mouseup', onMouseUp);\n\t });\n\t\n\t function onFocus() {\n\t preventMouseUp = true;\n\t\n\t $timeout(function() {\n\t // Use HTMLInputElement#select to fix firefox select issues.\n\t // The debounce is here for Edge's sake, otherwise the selection doesn't work.\n\t element[0].select();\n\t\n\t // This should be reset from inside the `focus`, because the event might\n\t // have originated from something different than a click, e.g. a keyboard event.\n\t preventMouseUp = false;\n\t }, 1, false);\n\t }\n\t\n\t // Prevents the default action of the first `mouseup` after a focus.\n\t // This is necessary, because browsers fire a `mouseup` right after the element\n\t // has been focused. In some browsers (Firefox in particular) this can clear the\n\t // selection. There are examples of the problem in issue #7487.\n\t function onMouseUp(event) {\n\t if (preventMouseUp) {\n\t event.preventDefault();\n\t }\n\t }\n\t }\n\t}\n\t\n\tvar visibilityDirectives = ['ngIf', 'ngShow', 'ngHide', 'ngSwitchWhen', 'ngSwitchDefault'];\n\tfunction ngMessagesDirective() {\n\t return {\n\t restrict: 'EA',\n\t link: postLink,\n\t\n\t // This is optional because we don't want target *all* ngMessage instances, just those inside of\n\t // mdInputContainer.\n\t require: '^^?mdInputContainer'\n\t };\n\t\n\t function postLink(scope, element, attrs, inputContainer) {\n\t // If we are not a child of an input container, don't do anything\n\t if (!inputContainer) return;\n\t\n\t // Add our animation class\n\t element.toggleClass('md-input-messages-animation', true);\n\t\n\t // Add our md-auto-hide class to automatically hide/show messages when container is invalid\n\t element.toggleClass('md-auto-hide', true);\n\t\n\t // If we see some known visibility directives, remove the md-auto-hide class\n\t if (attrs.mdAutoHide == 'false' || hasVisibiltyDirective(attrs)) {\n\t element.toggleClass('md-auto-hide', false);\n\t }\n\t }\n\t\n\t function hasVisibiltyDirective(attrs) {\n\t return visibilityDirectives.some(function(attr) {\n\t return attrs[attr];\n\t });\n\t }\n\t}\n\t\n\tfunction ngMessageDirective($mdUtil) {\n\t return {\n\t restrict: 'EA',\n\t compile: compile,\n\t priority: 100\n\t };\n\t\n\t function compile(tElement) {\n\t if (!isInsideInputContainer(tElement)) {\n\t\n\t // When the current element is inside of a document fragment, then we need to check for an input-container\n\t // in the postLink, because the element will be later added to the DOM and is currently just in a temporary\n\t // fragment, which causes the input-container check to fail.\n\t if (isInsideFragment()) {\n\t return function (scope, element) {\n\t if (isInsideInputContainer(element)) {\n\t // Inside of the postLink function, a ngMessage directive will be a comment element, because it's\n\t // currently hidden. To access the shown element, we need to use the element from the compile function.\n\t initMessageElement(tElement);\n\t }\n\t };\n\t }\n\t } else {\n\t initMessageElement(tElement);\n\t }\n\t\n\t function isInsideFragment() {\n\t var nextNode = tElement[0];\n\t while (nextNode = nextNode.parentNode) {\n\t if (nextNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t }\n\t\n\t function isInsideInputContainer(element) {\n\t return !!$mdUtil.getClosest(element, \"md-input-container\");\n\t }\n\t\n\t function initMessageElement(element) {\n\t // Add our animation class\n\t element.toggleClass('md-input-message-animation', true);\n\t }\n\t }\n\t}\n\t\n\tvar $$AnimateRunner, $animateCss, $mdUtil;\n\t\n\tfunction mdInputInvalidMessagesAnimation($$AnimateRunner, $animateCss, $mdUtil) {\n\t saveSharedServices($$AnimateRunner, $animateCss, $mdUtil);\n\t\n\t return {\n\t addClass: function(element, className, done) {\n\t showInputMessages(element, done);\n\t }\n\t\n\t // NOTE: We do not need the removeClass method, because the message ng-leave animation will fire\n\t };\n\t}\n\t\n\tfunction ngMessagesAnimation($$AnimateRunner, $animateCss, $mdUtil) {\n\t saveSharedServices($$AnimateRunner, $animateCss, $mdUtil);\n\t\n\t return {\n\t enter: function(element, done) {\n\t showInputMessages(element, done);\n\t },\n\t\n\t leave: function(element, done) {\n\t hideInputMessages(element, done);\n\t },\n\t\n\t addClass: function(element, className, done) {\n\t if (className == \"ng-hide\") {\n\t hideInputMessages(element, done);\n\t } else {\n\t done();\n\t }\n\t },\n\t\n\t removeClass: function(element, className, done) {\n\t if (className == \"ng-hide\") {\n\t showInputMessages(element, done);\n\t } else {\n\t done();\n\t }\n\t }\n\t }\n\t}\n\t\n\tfunction ngMessageAnimation($$AnimateRunner, $animateCss, $mdUtil) {\n\t saveSharedServices($$AnimateRunner, $animateCss, $mdUtil);\n\t\n\t return {\n\t enter: function(element, done) {\n\t var animator = showMessage(element);\n\t\n\t animator.start().done(done);\n\t },\n\t\n\t leave: function(element, done) {\n\t var animator = hideMessage(element);\n\t\n\t animator.start().done(done);\n\t }\n\t }\n\t}\n\t\n\tfunction showInputMessages(element, done) {\n\t var animators = [], animator;\n\t var messages = getMessagesElement(element);\n\t\n\t angular.forEach(messages.children(), function(child) {\n\t animator = showMessage(angular.element(child));\n\t\n\t animators.push(animator.start());\n\t });\n\t\n\t $$AnimateRunner.all(animators, done);\n\t}\n\t\n\tfunction hideInputMessages(element, done) {\n\t var animators = [], animator;\n\t var messages = getMessagesElement(element);\n\t\n\t angular.forEach(messages.children(), function(child) {\n\t animator = hideMessage(angular.element(child));\n\t\n\t animators.push(animator.start());\n\t });\n\t\n\t $$AnimateRunner.all(animators, done);\n\t}\n\t\n\tfunction showMessage(element) {\n\t var height = parseInt(window.getComputedStyle(element[0]).height);\n\t var topMargin = parseInt(window.getComputedStyle(element[0]).marginTop);\n\t\n\t var messages = getMessagesElement(element);\n\t var container = getInputElement(element);\n\t\n\t // Check to see if the message is already visible so we can skip\n\t var alreadyVisible = (topMargin > -height);\n\t\n\t // If we have the md-auto-hide class, the md-input-invalid animation will fire, so we can skip\n\t if (alreadyVisible || (messages.hasClass('md-auto-hide') && !container.hasClass('md-input-invalid'))) {\n\t return $animateCss(element, {});\n\t }\n\t\n\t return $animateCss(element, {\n\t event: 'enter',\n\t structural: true,\n\t from: {\"opacity\": 0, \"margin-top\": -height + \"px\"},\n\t to: {\"opacity\": 1, \"margin-top\": \"0\"},\n\t duration: 0.3\n\t });\n\t}\n\t\n\tfunction hideMessage(element) {\n\t var height = element[0].offsetHeight;\n\t var styles = window.getComputedStyle(element[0]);\n\t\n\t // If we are already hidden, just return an empty animation\n\t if (styles.opacity == 0) {\n\t return $animateCss(element, {});\n\t }\n\t\n\t // Otherwise, animate\n\t return $animateCss(element, {\n\t event: 'leave',\n\t structural: true,\n\t from: {\"opacity\": 1, \"margin-top\": 0},\n\t to: {\"opacity\": 0, \"margin-top\": -height + \"px\"},\n\t duration: 0.3\n\t });\n\t}\n\t\n\tfunction getInputElement(element) {\n\t var inputContainer = element.controller('mdInputContainer');\n\t\n\t return inputContainer.element;\n\t}\n\t\n\tfunction getMessagesElement(element) {\n\t // If we are a ng-message element, we need to traverse up the DOM tree\n\t if (element.hasClass('md-input-message-animation')) {\n\t return angular.element($mdUtil.getClosest(element, function(node) {\n\t return node.classList.contains('md-input-messages-animation');\n\t }));\n\t }\n\t\n\t // Otherwise, we can traverse down\n\t return angular.element(element[0].querySelector('.md-input-messages-animation'));\n\t}\n\t\n\tfunction saveSharedServices(_$$AnimateRunner_, _$animateCss_, _$mdUtil_) {\n\t $$AnimateRunner = _$$AnimateRunner_;\n\t $animateCss = _$animateCss_;\n\t $mdUtil = _$mdUtil_;\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.list\n\t * @description\n\t * List module\n\t */\n\tMdListController.$inject = [\"$scope\", \"$element\", \"$mdListInkRipple\"];\n\tmdListDirective.$inject = [\"$mdTheming\"];\n\tmdListItemDirective.$inject = [\"$mdAria\", \"$mdConstant\", \"$mdUtil\", \"$timeout\"];\n\tangular.module('material.components.list', [\n\t 'material.core'\n\t])\n\t .controller('MdListController', MdListController)\n\t .directive('mdList', mdListDirective)\n\t .directive('mdListItem', mdListItemDirective);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdList\n\t * @module material.components.list\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * The `` directive is a list container for 1..n `` tags.\n\t *\n\t * @usage\n\t * \n\t * \n\t * \n\t * \n\t *
\n\t *

{{item.title}}

\n\t *

{{item.description}}

\n\t *
\n\t *
\n\t *
\n\t *
\n\t */\n\t\n\tfunction mdListDirective($mdTheming) {\n\t return {\n\t restrict: 'E',\n\t compile: function(tEl) {\n\t tEl[0].setAttribute('role', 'list');\n\t return $mdTheming;\n\t }\n\t };\n\t}\n\t/**\n\t * @ngdoc directive\n\t * @name mdListItem\n\t * @module material.components.list\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * A `md-list-item` element can be used to represent some information in a row.
\n\t *\n\t * @usage\n\t * ### Single Row Item\n\t * \n\t * \n\t * Single Row Item\n\t * \n\t * \n\t *\n\t * ### Multiple Lines\n\t * By using the following markup, you will be able to have two lines inside of one `md-list-item`.\n\t *\n\t * \n\t * \n\t *
\n\t *

First Line

\n\t *

Second Line

\n\t *
\n\t *
\n\t *
\n\t *\n\t * It is also possible to have three lines inside of one list item.\n\t *\n\t * \n\t * \n\t *
\n\t *

First Line

\n\t *

Second Line

\n\t *

Third Line

\n\t *
\n\t *
\n\t *
\n\t *\n\t * ### Secondary Items\n\t * Secondary items are elements which will be aligned at the end of the `md-list-item`.\n\t *\n\t * \n\t * \n\t * Single Row Item\n\t * \n\t * Secondary Button\n\t * \n\t * \n\t * \n\t *\n\t * It also possible to have multiple secondary items inside of one `md-list-item`.\n\t *\n\t * \n\t * \n\t * Single Row Item\n\t * First Button\n\t * Second Button\n\t * \n\t * \n\t *\n\t * ### Proxy Item\n\t * Proxies are elements, which will execute their specific action on click
\n\t * Currently supported proxy items are\n\t * - `md-checkbox` (Toggle)\n\t * - `md-switch` (Toggle)\n\t * - `md-menu` (Open)\n\t *\n\t * This means, when using a supported proxy item inside of `md-list-item`, the list item will\n\t * become clickable and executes the associated action of the proxy element on click.\n\t *\n\t * \n\t * \n\t * First Line\n\t * \n\t * \n\t * \n\t *\n\t * The `md-checkbox` element will be automatically detected as a proxy element and will toggle on click.\n\t *\n\t * \n\t * \n\t * First Line\n\t * \n\t * \n\t * \n\t *\n\t * The recognized `md-switch` will toggle its state, when the user clicks on the `md-list-item`.\n\t *\n\t * It is also possible to have a `md-menu` inside of a `md-list-item`.\n\t * \n\t * \n\t *

Click anywhere to fire the secondary action

\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * \n\t * Redial\n\t * \n\t * \n\t * \n\t * \n\t * Check voicemail\n\t * \n\t * \n\t * \n\t * \n\t * \n\t * Notifications\n\t * \n\t * \n\t * \n\t * \n\t *
\n\t *
\n\t *\n\t * The menu will automatically open, when the users clicks on the `md-list-item`.
\n\t *\n\t * If the developer didn't specify any position mode on the menu, the `md-list-item` will automatically detect the\n\t * position mode and applies it to the `md-menu`.\n\t *\n\t * ### Avatars\n\t * Sometimes you may want to have some avatars inside of the `md-list-item `.
\n\t * You are able to create a optimized icon for the list item, by applying the `.md-avatar` class on the `` element.\n\t *\n\t * \n\t * \n\t * \n\t * Alan Turing\n\t * \n\t *\n\t * When using `` for an avater, you have to use the `.md-avatar-icon` class.\n\t * \n\t * \n\t * \n\t * Timothy Kopra\n\t * \n\t * \n\t *\n\t * In cases, you have a `md-list-item`, which doesn't have any avatar,\n\t * but you want to align it with the other avatar items, you have to use the `.md-offset` class.\n\t *\n\t * \n\t * \n\t * Jon Doe\n\t * \n\t * \n\t *\n\t * ### DOM modification\n\t * The `md-list-item` component automatically detects if the list item should be clickable.\n\t *\n\t * ---\n\t * If the `md-list-item` is clickable, we wrap all content inside of a `
` and create\n\t * an overlaying button, which will will execute the given actions (like `ng-href`, `ng-click`)\n\t *\n\t * We create an overlaying button, instead of wrapping all content inside of the button,\n\t * because otherwise some elements may not be clickable inside of the button.\n\t *\n\t * ---\n\t * When using a secondary item inside of your list item, the `md-list-item` component will automatically create\n\t * a secondary container at the end of the `md-list-item`, which contains all secondary items.\n\t *\n\t * The secondary item container is not static, because otherwise the overflow will not work properly on the\n\t * list item.\n\t *\n\t */\n\tfunction mdListItemDirective($mdAria, $mdConstant, $mdUtil, $timeout) {\n\t var proxiedTypes = ['md-checkbox', 'md-switch', 'md-menu'];\n\t return {\n\t restrict: 'E',\n\t controller: 'MdListController',\n\t compile: function(tEl, tAttrs) {\n\t\n\t // Check for proxy controls (no ng-click on parent, and a control inside)\n\t var secondaryItems = tEl[0].querySelectorAll('.md-secondary');\n\t var hasProxiedElement;\n\t var proxyElement;\n\t var itemContainer = tEl;\n\t\n\t tEl[0].setAttribute('role', 'listitem');\n\t\n\t if (tAttrs.ngClick || tAttrs.ngDblclick || tAttrs.ngHref || tAttrs.href || tAttrs.uiSref || tAttrs.ngAttrUiSref) {\n\t wrapIn('button');\n\t } else {\n\t for (var i = 0, type; type = proxiedTypes[i]; ++i) {\n\t if (proxyElement = tEl[0].querySelector(type)) {\n\t hasProxiedElement = true;\n\t break;\n\t }\n\t }\n\t if (hasProxiedElement) {\n\t wrapIn('div');\n\t } else if (!tEl[0].querySelector('md-button:not(.md-secondary):not(.md-exclude)')) {\n\t tEl.addClass('md-no-proxy');\n\t }\n\t }\n\t\n\t wrapSecondaryItems();\n\t setupToggleAria();\n\t\n\t if (hasProxiedElement && proxyElement.nodeName === \"MD-MENU\") {\n\t setupProxiedMenu();\n\t }\n\t\n\t function setupToggleAria() {\n\t var toggleTypes = ['md-switch', 'md-checkbox'];\n\t var toggle;\n\t\n\t for (var i = 0, toggleType; toggleType = toggleTypes[i]; ++i) {\n\t if (toggle = tEl.find(toggleType)[0]) {\n\t if (!toggle.hasAttribute('aria-label')) {\n\t var p = tEl.find('p')[0];\n\t if (!p) return;\n\t toggle.setAttribute('aria-label', 'Toggle ' + p.textContent);\n\t }\n\t }\n\t }\n\t }\n\t\n\t function setupProxiedMenu() {\n\t var menuEl = angular.element(proxyElement);\n\t\n\t var isEndAligned = menuEl.parent().hasClass('md-secondary-container') ||\n\t proxyElement.parentNode.firstElementChild !== proxyElement;\n\t\n\t var xAxisPosition = 'left';\n\t\n\t if (isEndAligned) {\n\t // When the proxy item is aligned at the end of the list, we have to set the origin to the end.\n\t xAxisPosition = 'right';\n\t }\n\t \n\t // Set the position mode / origin of the proxied menu.\n\t if (!menuEl.attr('md-position-mode')) {\n\t menuEl.attr('md-position-mode', xAxisPosition + ' target');\n\t }\n\t\n\t // Apply menu open binding to menu button\n\t var menuOpenButton = menuEl.children().eq(0);\n\t if (!hasClickEvent(menuOpenButton[0])) {\n\t menuOpenButton.attr('ng-click', '$mdOpenMenu($event)');\n\t }\n\t\n\t if (!menuOpenButton.attr('aria-label')) {\n\t menuOpenButton.attr('aria-label', 'Open List Menu');\n\t }\n\t }\n\t\n\t function wrapIn(type) {\n\t if (type == 'div') {\n\t itemContainer = angular.element('
');\n\t itemContainer.append(tEl.contents());\n\t tEl.addClass('md-proxy-focus');\n\t } else {\n\t // Element which holds the default list-item content.\n\t itemContainer = angular.element(\n\t '
'+\n\t '
'+\n\t '
'\n\t );\n\t\n\t // Button which shows ripple and executes primary action.\n\t var buttonWrap = angular.element(\n\t ''\n\t );\n\t\n\t buttonWrap[0].setAttribute('aria-label', tEl[0].textContent);\n\t\n\t copyAttributes(tEl[0], buttonWrap[0]);\n\t\n\t // We allow developers to specify the `md-no-focus` class, to disable the focus style\n\t // on the button executor. Once more classes should be forwarded, we should probably make the\n\t // class forward more generic.\n\t if (tEl.hasClass('md-no-focus')) {\n\t buttonWrap.addClass('md-no-focus');\n\t }\n\t\n\t // Append the button wrap before our list-item content, because it will overlay in relative.\n\t itemContainer.prepend(buttonWrap);\n\t itemContainer.children().eq(1).append(tEl.contents());\n\t\n\t tEl.addClass('_md-button-wrap');\n\t }\n\t\n\t tEl[0].setAttribute('tabindex', '-1');\n\t tEl.append(itemContainer);\n\t }\n\t\n\t function wrapSecondaryItems() {\n\t var secondaryItemsWrapper = angular.element('
');\n\t\n\t angular.forEach(secondaryItems, function(secondaryItem) {\n\t wrapSecondaryItem(secondaryItem, secondaryItemsWrapper);\n\t });\n\t\n\t itemContainer.append(secondaryItemsWrapper);\n\t }\n\t\n\t function wrapSecondaryItem(secondaryItem, container) {\n\t // If the current secondary item is not a button, but contains a ng-click attribute,\n\t // the secondary item will be automatically wrapped inside of a button.\n\t if (secondaryItem && !isButton(secondaryItem) && secondaryItem.hasAttribute('ng-click')) {\n\t\n\t $mdAria.expect(secondaryItem, 'aria-label');\n\t var buttonWrapper = angular.element('');\n\t\n\t // Copy the attributes from the secondary item to the generated button.\n\t // We also support some additional attributes from the secondary item,\n\t // because some developers may use a ngIf, ngHide, ngShow on their item.\n\t copyAttributes(secondaryItem, buttonWrapper[0], ['ng-if', 'ng-hide', 'ng-show']);\n\t\n\t secondaryItem.setAttribute('tabindex', '-1');\n\t buttonWrapper.append(secondaryItem);\n\t\n\t secondaryItem = buttonWrapper[0];\n\t }\n\t\n\t if (secondaryItem && (!hasClickEvent(secondaryItem) || (!tAttrs.ngClick && isProxiedElement(secondaryItem)))) {\n\t // In this case we remove the secondary class, so we can identify it later, when we searching for the\n\t // proxy items.\n\t angular.element(secondaryItem).removeClass('md-secondary');\n\t }\n\t\n\t tEl.addClass('md-with-secondary');\n\t container.append(secondaryItem);\n\t }\n\t\n\t /**\n\t * Copies attributes from a source element to the destination element\n\t * By default the function will copy the most necessary attributes, supported\n\t * by the button executor for clickable list items.\n\t * @param source Element with the specified attributes\n\t * @param destination Element which will retrieve the attributes\n\t * @param extraAttrs Additional attributes, which will be copied over.\n\t */\n\t function copyAttributes(source, destination, extraAttrs) {\n\t var copiedAttrs = $mdUtil.prefixer([\n\t 'ng-if', 'ng-click', 'ng-dblclick', 'aria-label', 'ng-disabled', 'ui-sref',\n\t 'href', 'ng-href', 'target', 'ng-attr-ui-sref', 'ui-sref-opts'\n\t ]);\n\t\n\t if (extraAttrs) {\n\t copiedAttrs = copiedAttrs.concat($mdUtil.prefixer(extraAttrs));\n\t }\n\t\n\t angular.forEach(copiedAttrs, function(attr) {\n\t if (source.hasAttribute(attr)) {\n\t destination.setAttribute(attr, source.getAttribute(attr));\n\t source.removeAttribute(attr);\n\t }\n\t });\n\t }\n\t\n\t function isProxiedElement(el) {\n\t return proxiedTypes.indexOf(el.nodeName.toLowerCase()) != -1;\n\t }\n\t\n\t function isButton(el) {\n\t var nodeName = el.nodeName.toUpperCase();\n\t\n\t return nodeName == \"MD-BUTTON\" || nodeName == \"BUTTON\";\n\t }\n\t\n\t function hasClickEvent (element) {\n\t var attr = element.attributes;\n\t for (var i = 0; i < attr.length; i++) {\n\t if (tAttrs.$normalize(attr[i].name) === 'ngClick') return true;\n\t }\n\t return false;\n\t }\n\t\n\t return postLink;\n\t\n\t function postLink($scope, $element, $attr, ctrl) {\n\t $element.addClass('_md'); // private md component indicator for styling\n\t\n\t var proxies = [],\n\t firstElement = $element[0].firstElementChild,\n\t isButtonWrap = $element.hasClass('_md-button-wrap'),\n\t clickChild = isButtonWrap ? firstElement.firstElementChild : firstElement,\n\t hasClick = clickChild && hasClickEvent(clickChild);\n\t\n\t computeProxies();\n\t computeClickable();\n\t\n\t if ($element.hasClass('md-proxy-focus') && proxies.length) {\n\t angular.forEach(proxies, function(proxy) {\n\t proxy = angular.element(proxy);\n\t\n\t $scope.mouseActive = false;\n\t proxy.on('mousedown', function() {\n\t $scope.mouseActive = true;\n\t $timeout(function(){\n\t $scope.mouseActive = false;\n\t }, 100);\n\t })\n\t .on('focus', function() {\n\t if ($scope.mouseActive === false) { $element.addClass('md-focused'); }\n\t proxy.on('blur', function proxyOnBlur() {\n\t $element.removeClass('md-focused');\n\t proxy.off('blur', proxyOnBlur);\n\t });\n\t });\n\t });\n\t }\n\t\n\t\n\t function computeProxies() {\n\t if (firstElement && firstElement.children && !hasClick) {\n\t\n\t angular.forEach(proxiedTypes, function(type) {\n\t\n\t // All elements which are not capable for being used a proxy have the .md-secondary class\n\t // applied. These items had been sorted out in the secondary wrap function.\n\t angular.forEach(firstElement.querySelectorAll(type + ':not(.md-secondary)'), function(child) {\n\t proxies.push(child);\n\t });\n\t });\n\t\n\t }\n\t }\n\t\n\t function computeClickable() {\n\t if (proxies.length == 1 || hasClick) {\n\t $element.addClass('md-clickable');\n\t\n\t if (!hasClick) {\n\t ctrl.attachRipple($scope, angular.element($element[0].querySelector('.md-no-style')));\n\t }\n\t }\n\t }\n\t\n\t function isEventFromControl(event) {\n\t var forbiddenControls = ['md-slider'];\n\t\n\t // If there is no path property in the event, then we can assume that the event was not bubbled.\n\t if (!event.path) {\n\t return forbiddenControls.indexOf(event.target.tagName.toLowerCase()) !== -1;\n\t }\n\t\n\t // We iterate the event path up and check for a possible component.\n\t // Our maximum index to search, is the list item root.\n\t var maxPath = event.path.indexOf($element.children()[0]);\n\t\n\t for (var i = 0; i < maxPath; i++) {\n\t if (forbiddenControls.indexOf(event.path[i].tagName.toLowerCase()) !== -1) {\n\t return true;\n\t }\n\t }\n\t }\n\t\n\t var clickChildKeypressListener = function(e) {\n\t if (e.target.nodeName != 'INPUT' && e.target.nodeName != 'TEXTAREA' && !e.target.isContentEditable) {\n\t var keyCode = e.which || e.keyCode;\n\t if (keyCode == $mdConstant.KEY_CODE.SPACE) {\n\t if (clickChild) {\n\t clickChild.click();\n\t e.preventDefault();\n\t e.stopPropagation();\n\t }\n\t }\n\t }\n\t };\n\t\n\t if (!hasClick && !proxies.length) {\n\t clickChild && clickChild.addEventListener('keypress', clickChildKeypressListener);\n\t }\n\t\n\t $element.off('click');\n\t $element.off('keypress');\n\t\n\t if (proxies.length == 1 && clickChild) {\n\t $element.children().eq(0).on('click', function(e) {\n\t // When the event is coming from an control and it should not trigger the proxied element\n\t // then we are skipping.\n\t if (isEventFromControl(e)) return;\n\t\n\t var parentButton = $mdUtil.getClosest(e.target, 'BUTTON');\n\t if (!parentButton && clickChild.contains(e.target)) {\n\t angular.forEach(proxies, function(proxy) {\n\t if (e.target !== proxy && !proxy.contains(e.target)) {\n\t if (proxy.nodeName === 'MD-MENU') {\n\t proxy = proxy.children[0];\n\t }\n\t angular.element(proxy).triggerHandler('click');\n\t }\n\t });\n\t }\n\t });\n\t }\n\t\n\t $scope.$on('$destroy', function () {\n\t clickChild && clickChild.removeEventListener('keypress', clickChildKeypressListener);\n\t });\n\t }\n\t }\n\t };\n\t}\n\t\n\t/*\n\t * @private\n\t * @ngdoc controller\n\t * @name MdListController\n\t * @module material.components.list\n\t *\n\t */\n\tfunction MdListController($scope, $element, $mdListInkRipple) {\n\t var ctrl = this;\n\t ctrl.attachRipple = attachRipple;\n\t\n\t function attachRipple (scope, element) {\n\t var options = {};\n\t $mdListInkRipple.attach(scope, element, options);\n\t }\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.menu\n\t */\n\t\n\tangular.module('material.components.menu', [\n\t 'material.core',\n\t 'material.components.backdrop'\n\t]);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.menu-bar\n\t */\n\t\n\tangular.module('material.components.menuBar', [\n\t 'material.core',\n\t 'material.components.icon',\n\t 'material.components.menu'\n\t]);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.navBar\n\t */\n\t\n\t\n\tMdNavBarController.$inject = [\"$element\", \"$scope\", \"$timeout\", \"$mdConstant\"];\n\tMdNavItem.$inject = [\"$$rAF\"];\n\tMdNavItemController.$inject = [\"$element\"];\n\tMdNavBar.$inject = [\"$mdAria\", \"$mdTheming\"];\n\tangular.module('material.components.navBar', ['material.core'])\n\t .controller('MdNavBarController', MdNavBarController)\n\t .directive('mdNavBar', MdNavBar)\n\t .controller('MdNavItemController', MdNavItemController)\n\t .directive('mdNavItem', MdNavItem);\n\t\n\t\n\t/*****************************************************************************\n\t * PUBLIC DOCUMENTATION *\n\t *****************************************************************************/\n\t/**\n\t * @ngdoc directive\n\t * @name mdNavBar\n\t * @module material.components.navBar\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * The `` directive renders a list of material tabs that can be used\n\t * for top-level page navigation. Unlike ``, it has no concept of a tab\n\t * body and no bar pagination.\n\t *\n\t * Because it deals with page navigation, certain routing concepts are built-in.\n\t * Route changes via via ng-href, ui-sref, or ng-click events are supported.\n\t * Alternatively, the user could simply watch currentNavItem for changes.\n\t *\n\t * Accessibility functionality is implemented as a site navigator with a\n\t * listbox, according to\n\t * https://www.w3.org/TR/wai-aria-practices/#Site_Navigator_Tabbed_Style\n\t *\n\t * @param {string=} mdSelectedNavItem The name of the current tab; this must\n\t * match the name attribute of ``\n\t * @param {string=} navBarAriaLabel An aria-label for the nav-bar\n\t *\n\t * @usage\n\t * \n\t * \n\t * Page One\n\t * Page Two\n\t * Page Three\n\t * \n\t *\n\t * \n\t * (function() {\n\t * ‘use strict’;\n\t *\n\t * $rootScope.$on('$routeChangeSuccess', function(event, current) {\n\t * $scope.currentLink = getCurrentLinkFromRoute(current);\n\t * });\n\t * });\n\t * \n\t */\n\t\n\t/*****************************************************************************\n\t * mdNavItem\n\t *****************************************************************************/\n\t/**\n\t * @ngdoc directive\n\t * @name mdNavItem\n\t * @module material.components.navBar\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * `` describes a page navigation link within the ``\n\t * component. It renders an md-button as the actual link.\n\t *\n\t * Exactly one of the mdNavClick, mdNavHref, mdNavSref attributes are required to be\n\t * specified.\n\t *\n\t * @param {Function=} mdNavClick Function which will be called when the\n\t * link is clicked to change the page. Renders as an `ng-click`.\n\t * @param {string=} mdNavHref url to transition to when this link is clicked.\n\t * Renders as an `ng-href`.\n\t * @param {string=} mdNavSref Ui-router state to transition to when this link is\n\t * clicked. Renders as a `ui-sref`.\n\t * @param {string=} name The name of this link. Used by the nav bar to know\n\t * which link is currently selected.\n\t *\n\t * @usage\n\t * See `` for usage.\n\t */\n\t\n\t\n\t/*****************************************************************************\n\t * IMPLEMENTATION *\n\t *****************************************************************************/\n\t\n\tfunction MdNavBar($mdAria, $mdTheming) {\n\t return {\n\t restrict: 'E',\n\t transclude: true,\n\t controller: MdNavBarController,\n\t controllerAs: 'ctrl',\n\t bindToController: true,\n\t scope: {\n\t 'mdSelectedNavItem': '=?',\n\t 'navBarAriaLabel': '@?',\n\t },\n\t template:\n\t '
' +\n\t '' +\n\t '' +\n\t '
',\n\t link: function(scope, element, attrs, ctrl) {\n\t $mdTheming(element);\n\t if (!ctrl.navBarAriaLabel) {\n\t $mdAria.expectAsync(element, 'aria-label', angular.noop);\n\t }\n\t },\n\t };\n\t}\n\t\n\t/**\n\t * Controller for the nav-bar component.\n\t *\n\t * Accessibility functionality is implemented as a site navigator with a\n\t * listbox, according to\n\t * https://www.w3.org/TR/wai-aria-practices/#Site_Navigator_Tabbed_Style\n\t * @param {!angular.JQLite} $element\n\t * @param {!angular.Scope} $scope\n\t * @param {!angular.Timeout} $timeout\n\t * @param {!Object} $mdConstant\n\t * @constructor\n\t * @final\n\t * @ngInject\n\t */\n\tfunction MdNavBarController($element, $scope, $timeout, $mdConstant) {\n\t // Injected variables\n\t /** @private @const {!angular.Timeout} */\n\t this._$timeout = $timeout;\n\t\n\t /** @private @const {!angular.Scope} */\n\t this._$scope = $scope;\n\t\n\t /** @private @const {!Object} */\n\t this._$mdConstant = $mdConstant;\n\t\n\t // Data-bound variables.\n\t /** @type {string} */\n\t this.mdSelectedNavItem;\n\t\n\t /** @type {string} */\n\t this.navBarAriaLabel;\n\t\n\t // State variables.\n\t\n\t /** @type {?angular.JQLite} */\n\t this._navBarEl = $element[0];\n\t\n\t /** @type {?angular.JQLite} */\n\t this._inkbar;\n\t\n\t var self = this;\n\t // need to wait for transcluded content to be available\n\t var deregisterTabWatch = this._$scope.$watch(function() {\n\t return self._navBarEl.querySelectorAll('._md-nav-button').length;\n\t },\n\t function(newLength) {\n\t if (newLength > 0) {\n\t self._initTabs();\n\t deregisterTabWatch();\n\t }\n\t });\n\t}\n\t\n\t\n\t\n\t/**\n\t * Initializes the tab components once they exist.\n\t * @private\n\t */\n\tMdNavBarController.prototype._initTabs = function() {\n\t this._inkbar = angular.element(this._navBarEl.getElementsByTagName('md-nav-ink-bar')[0]);\n\t\n\t var self = this;\n\t this._$timeout(function() {\n\t self._updateTabs(self.mdSelectedNavItem, undefined);\n\t });\n\t\n\t this._$scope.$watch('ctrl.mdSelectedNavItem', function(newValue, oldValue) {\n\t // Wait a digest before update tabs for products doing\n\t // anything dynamic in the template.\n\t self._$timeout(function() {\n\t self._updateTabs(newValue, oldValue);\n\t });\n\t });\n\t};\n\t\n\t/**\n\t * Set the current tab to be selected.\n\t * @param {string|undefined} newValue New current tab name.\n\t * @param {string|undefined} oldValue Previous tab name.\n\t * @private\n\t */\n\tMdNavBarController.prototype._updateTabs = function(newValue, oldValue) {\n\t var self = this;\n\t var tabs = this._getTabs();\n\t var oldIndex = -1;\n\t var newIndex = -1;\n\t var newTab = this._getTabByName(newValue);\n\t var oldTab = this._getTabByName(oldValue);\n\t\n\t if (oldTab) {\n\t oldTab.setSelected(false);\n\t oldIndex = tabs.indexOf(oldTab);\n\t }\n\t\n\t if (newTab) {\n\t newTab.setSelected(true);\n\t newIndex = tabs.indexOf(newTab);\n\t }\n\t\n\t this._$timeout(function() {\n\t self._updateInkBarStyles(newTab, newIndex, oldIndex);\n\t });\n\t};\n\t\n\t/**\n\t * Repositions the ink bar to the selected tab.\n\t * @private\n\t */\n\tMdNavBarController.prototype._updateInkBarStyles = function(tab, newIndex, oldIndex) {\n\t this._inkbar.toggleClass('_md-left', newIndex < oldIndex)\n\t .toggleClass('_md-right', newIndex > oldIndex);\n\t\n\t this._inkbar.css({display: newIndex < 0 ? 'none' : ''});\n\t\n\t if(tab){\n\t var tabEl = tab.getButtonEl();\n\t var left = tabEl.offsetLeft;\n\t\n\t this._inkbar.css({left: left + 'px', width: tabEl.offsetWidth + 'px'});\n\t }\n\t};\n\t\n\t/**\n\t * Returns an array of the current tabs.\n\t * @return {!Array}\n\t * @private\n\t */\n\tMdNavBarController.prototype._getTabs = function() {\n\t var linkArray = Array.prototype.slice.call(\n\t this._navBarEl.querySelectorAll('.md-nav-item'));\n\t return linkArray.map(function(el) {\n\t return angular.element(el).controller('mdNavItem')\n\t });\n\t};\n\t\n\t/**\n\t * Returns the tab with the specified name.\n\t * @param {string} name The name of the tab, found in its name attribute.\n\t * @return {!NavItemController|undefined}\n\t * @private\n\t */\n\tMdNavBarController.prototype._getTabByName = function(name) {\n\t return this._findTab(function(tab) {\n\t return tab.getName() == name;\n\t });\n\t};\n\t\n\t/**\n\t * Returns the selected tab.\n\t * @return {!NavItemController|undefined}\n\t * @private\n\t */\n\tMdNavBarController.prototype._getSelectedTab = function() {\n\t return this._findTab(function(tab) {\n\t return tab.isSelected()\n\t });\n\t};\n\t\n\t/**\n\t * Returns the focused tab.\n\t * @return {!NavItemController|undefined}\n\t */\n\tMdNavBarController.prototype.getFocusedTab = function() {\n\t return this._findTab(function(tab) {\n\t return tab.hasFocus()\n\t });\n\t};\n\t\n\t/**\n\t * Find a tab that matches the specified function.\n\t * @private\n\t */\n\tMdNavBarController.prototype._findTab = function(fn) {\n\t var tabs = this._getTabs();\n\t for (var i = 0; i < tabs.length; i++) {\n\t if (fn(tabs[i])) {\n\t return tabs[i];\n\t }\n\t }\n\t\n\t return null;\n\t};\n\t\n\t/**\n\t * Direct focus to the selected tab when focus enters the nav bar.\n\t */\n\tMdNavBarController.prototype.onFocus = function() {\n\t var tab = this._getSelectedTab();\n\t if (tab) {\n\t tab.setFocused(true);\n\t }\n\t};\n\t\n\t/**\n\t * Clear tab focus when focus leaves the nav bar.\n\t */\n\tMdNavBarController.prototype.onBlur = function() {\n\t var tab = this.getFocusedTab();\n\t if (tab) {\n\t tab.setFocused(false);\n\t }\n\t};\n\t\n\t/**\n\t * Move focus from oldTab to newTab.\n\t * @param {!NavItemController} oldTab\n\t * @param {!NavItemController} newTab\n\t * @private\n\t */\n\tMdNavBarController.prototype._moveFocus = function(oldTab, newTab) {\n\t oldTab.setFocused(false);\n\t newTab.setFocused(true);\n\t};\n\t\n\t/**\n\t * Responds to keypress events.\n\t * @param {!Event} e\n\t */\n\tMdNavBarController.prototype.onKeydown = function(e) {\n\t var keyCodes = this._$mdConstant.KEY_CODE;\n\t var tabs = this._getTabs();\n\t var focusedTab = this.getFocusedTab();\n\t if (!focusedTab) return;\n\t\n\t var focusedTabIndex = tabs.indexOf(focusedTab);\n\t\n\t // use arrow keys to navigate between tabs\n\t switch (e.keyCode) {\n\t case keyCodes.UP_ARROW:\n\t case keyCodes.LEFT_ARROW:\n\t if (focusedTabIndex > 0) {\n\t this._moveFocus(focusedTab, tabs[focusedTabIndex - 1]);\n\t }\n\t break;\n\t case keyCodes.DOWN_ARROW:\n\t case keyCodes.RIGHT_ARROW:\n\t if (focusedTabIndex < tabs.length - 1) {\n\t this._moveFocus(focusedTab, tabs[focusedTabIndex + 1]);\n\t }\n\t break;\n\t case keyCodes.SPACE:\n\t case keyCodes.ENTER:\n\t // timeout to avoid a \"digest already in progress\" console error\n\t this._$timeout(function() {\n\t focusedTab.getButtonEl().click();\n\t });\n\t break;\n\t }\n\t};\n\t\n\t/**\n\t * @ngInject\n\t */\n\tfunction MdNavItem($$rAF) {\n\t return {\n\t restrict: 'E',\n\t require: ['mdNavItem', '^mdNavBar'],\n\t controller: MdNavItemController,\n\t bindToController: true,\n\t controllerAs: 'ctrl',\n\t replace: true,\n\t transclude: true,\n\t template:\n\t '
  • ' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '
  • ',\n\t scope: {\n\t 'mdNavClick': '&?',\n\t 'mdNavHref': '@?',\n\t 'mdNavSref': '@?',\n\t 'name': '@',\n\t },\n\t link: function(scope, element, attrs, controllers) {\n\t var mdNavItem = controllers[0];\n\t var mdNavBar = controllers[1];\n\t\n\t // When accessing the element's contents synchronously, they\n\t // may not be defined yet because of transclusion. There is a higher chance\n\t // that it will be accessible if we wait one frame.\n\t $$rAF(function() {\n\t if (!mdNavItem.name) {\n\t mdNavItem.name = angular.element(element[0].querySelector('._md-nav-button-text'))\n\t .text().trim();\n\t }\n\t\n\t var navButton = angular.element(element[0].querySelector('._md-nav-button'));\n\t navButton.on('click', function() {\n\t mdNavBar.mdSelectedNavItem = mdNavItem.name;\n\t scope.$apply();\n\t });\n\t });\n\t }\n\t };\n\t}\n\t\n\t/**\n\t * Controller for the nav-item component.\n\t * @param {!angular.JQLite} $element\n\t * @constructor\n\t * @final\n\t * @ngInject\n\t */\n\tfunction MdNavItemController($element) {\n\t\n\t /** @private @const {!angular.JQLite} */\n\t this._$element = $element;\n\t\n\t // Data-bound variables\n\t /** @const {?Function} */\n\t this.mdNavClick;\n\t /** @const {?string} */\n\t this.mdNavHref;\n\t /** @const {?string} */\n\t this.name;\n\t\n\t // State variables\n\t /** @private {boolean} */\n\t this._selected = false;\n\t\n\t /** @private {boolean} */\n\t this._focused = false;\n\t\n\t var hasNavClick = !!($element.attr('md-nav-click'));\n\t var hasNavHref = !!($element.attr('md-nav-href'));\n\t var hasNavSref = !!($element.attr('md-nav-sref'));\n\t\n\t // Cannot specify more than one nav attribute\n\t if ((hasNavClick ? 1:0) + (hasNavHref ? 1:0) + (hasNavSref ? 1:0) > 1) {\n\t throw Error(\n\t 'Must specify exactly one of md-nav-click, md-nav-href, ' +\n\t 'md-nav-sref for nav-item directive');\n\t }\n\t}\n\t\n\t/**\n\t * Returns a map of class names and values for use by ng-class.\n\t * @return {!Object}\n\t */\n\tMdNavItemController.prototype.getNgClassMap = function() {\n\t return {\n\t 'md-active': this._selected,\n\t 'md-primary': this._selected,\n\t 'md-unselected': !this._selected,\n\t 'md-focused': this._focused,\n\t };\n\t};\n\t\n\t/**\n\t * Get the name attribute of the tab.\n\t * @return {string}\n\t */\n\tMdNavItemController.prototype.getName = function() {\n\t return this.name;\n\t};\n\t\n\t/**\n\t * Get the button element associated with the tab.\n\t * @return {!Element}\n\t */\n\tMdNavItemController.prototype.getButtonEl = function() {\n\t return this._$element[0].querySelector('._md-nav-button');\n\t};\n\t\n\t/**\n\t * Set the selected state of the tab.\n\t * @param {boolean} isSelected\n\t */\n\tMdNavItemController.prototype.setSelected = function(isSelected) {\n\t this._selected = isSelected;\n\t};\n\t\n\t/**\n\t * @return {boolean}\n\t */\n\tMdNavItemController.prototype.isSelected = function() {\n\t return this._selected;\n\t};\n\t\n\t/**\n\t * Set the focused state of the tab.\n\t * @param {boolean} isFocused\n\t */\n\tMdNavItemController.prototype.setFocused = function(isFocused) {\n\t this._focused = isFocused;\n\t};\n\t\n\t/**\n\t * @return {boolean}\n\t */\n\tMdNavItemController.prototype.hasFocus = function() {\n\t return this._focused;\n\t};\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.panel\n\t */\n\tMdPanelService.$inject = [\"$rootElement\", \"$rootScope\", \"$injector\", \"$window\"];\n\tangular\n\t .module('material.components.panel', [\n\t 'material.core',\n\t 'material.components.backdrop'\n\t ])\n\t .service('$mdPanel', MdPanelService);\n\t\n\t\n\t/*****************************************************************************\n\t * PUBLIC DOCUMENTATION *\n\t *****************************************************************************/\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $mdPanel\n\t * @module material.components.panel\n\t *\n\t * @description\n\t * `$mdPanel` is a robust, low-level service for creating floating panels on\n\t * the screen. It can be used to implement tooltips, dialogs, pop-ups, etc.\n\t *\n\t * @usage\n\t * \n\t * (function(angular, undefined) {\n\t * ‘use strict’;\n\t *\n\t * angular\n\t * .module('demoApp', ['ngMaterial'])\n\t * .controller('DemoDialogController', DialogController);\n\t *\n\t * var panelRef;\n\t *\n\t * function showPanel($event) {\n\t * var panelPosition = $mdPanel.newPanelPosition()\n\t * .absolute()\n\t * .top('50%')\n\t * .left('50%');\n\t *\n\t * var panelAnimation = $mdPanel.newPanelAnimation()\n\t * .targetEvent($event)\n\t * .defaultAnimation('md-panel-animate-fly')\n\t * .closeTo('.show-button');\n\t *\n\t * var config = {\n\t * attachTo: angular.element(document.body),\n\t * controller: DialogController,\n\t * controllerAs: 'ctrl',\n\t * position: panelPosition,\n\t * animation: panelAnimation,\n\t * targetEvent: $event,\n\t * templateUrl: 'dialog-template.html',\n\t * clickOutsideToClose: true,\n\t * escapeToClose: true,\n\t * focusOnOpen: true\n\t * }\n\t *\n\t * $mdPanel.open(config)\n\t * .then(function(result) {\n\t * panelRef = result;\n\t * });\n\t * }\n\t *\n\t * function DialogController(MdPanelRef, toppings) {\n\t * var toppings;\n\t *\n\t * function closeDialog() {\n\t * MdPanelRef && MdPanelRef.close();\n\t * }\n\t * }\n\t * })(angular);\n\t * \n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdPanel#create\n\t * @description\n\t * Creates a panel with the specified options.\n\t *\n\t * @param config {!Object=} Specific configuration object that may contain the\n\t * following properties:\n\t *\n\t * - `id` - `{string=}`: An ID to track the panel by. When an ID is provided,\n\t * the created panel is added to a tracked panels object. Any subsequent\n\t * requests made to create a panel with that ID are ignored. This is useful\n\t * in having the panel service not open multiple panels from the same user\n\t * interaction when there is no backdrop and events are propagated. Defaults\n\t * to an arbitrary string that is not tracked.\n\t * - `template` - `{string=}`: HTML template to show in the panel. This\n\t * **must** be trusted HTML with respect to Angular’s\n\t * [$sce service](https://docs.angularjs.org/api/ng/service/$sce).\n\t * - `templateUrl` - `{string=}`: The URL that will be used as the content of\n\t * the panel.\n\t * - `controller` - `{(function|string)=}`: The controller to associate with\n\t * the panel. The controller can inject a reference to the returned\n\t * panelRef, which allows the panel to be closed, hidden, and shown. Any\n\t * fields passed in through locals or resolve will be bound to the\n\t * controller.\n\t * - `controllerAs` - `{string=}`: An alias to assign the controller to on\n\t * the scope.\n\t * - `bindToController` - `{boolean=}`: Binds locals to the controller\n\t * instead of passing them in. Defaults to true, as this is a best\n\t * practice.\n\t * - `locals` - `{Object=}`: An object containing key/value pairs. The keys\n\t * will be used as names of values to inject into the controller. For\n\t * example, `locals: {three: 3}` would inject `three` into the controller,\n\t * with the value 3.\n\t * - `resolve` - `{Object=}`: Similar to locals, except it takes promises as\n\t * values. The panel will not open until all of the promises resolve.\n\t * - `attachTo` - `{(string|!angular.JQLite|!Element)=}`: The element to\n\t * attach the panel to. Defaults to appending to the root element of the\n\t * application.\n\t * - `propagateContainerEvents` - `{boolean=}`: Whether pointer or touch\n\t * events should be allowed to propagate 'go through' the container, aka the\n\t * wrapper, of the panel. Defaults to false.\n\t * - `panelClass` - `{string=}`: A css class to apply to the panel element.\n\t * This class should define any borders, box-shadow, etc. for the panel.\n\t * - `zIndex` - `{number=}`: The z-index to place the panel at.\n\t * Defaults to 80.\n\t * - `position` - `{MdPanelPosition=}`: An MdPanelPosition object that\n\t * specifies the alignment of the panel. For more information, see\n\t * `MdPanelPosition`.\n\t * - `clickOutsideToClose` - `{boolean=}`: Whether the user can click\n\t * outside the panel to close it. Defaults to false.\n\t * - `escapeToClose` - `{boolean=}`: Whether the user can press escape to\n\t * close the panel. Defaults to false.\n\t * - `trapFocus` - `{boolean=}`: Whether focus should be trapped within the\n\t * panel. If `trapFocus` is true, the user will not be able to interact\n\t * with the rest of the page until the panel is dismissed. Defaults to\n\t * false.\n\t * - `focusOnOpen` - `{boolean=}`: An option to override focus behavior on\n\t * open. Only disable if focusing some other way, as focus management is\n\t * required for panels to be accessible. Defaults to true.\n\t * - `fullscreen` - `{boolean=}`: Whether the panel should be full screen.\n\t * Applies the class `._md-panel-fullscreen` to the panel on open. Defaults\n\t * to false.\n\t * - `animation` - `{MdPanelAnimation=}`: An MdPanelAnimation object that\n\t * specifies the animation of the panel. For more information, see\n\t * `MdPanelAnimation`.\n\t * - `hasBackdrop` - `{boolean=}`: Whether there should be an opaque backdrop\n\t * behind the panel. Defaults to false.\n\t * - `disableParentScroll` - `{boolean=}`: Whether the user can scroll the\n\t * page behind the panel. Defaults to false.\n\t * - `onDomAdded` - `{function=}`: Callback function used to announce when\n\t * the panel is added to the DOM.\n\t * - `onOpenComplete` - `{function=}`: Callback function used to announce\n\t * when the open() action is finished.\n\t * - `onRemoving` - `{function=}`: Callback function used to announce the\n\t * close/hide() action is starting.\n\t * - `onDomRemoved` - `{function=}`: Callback function used to announce when\n\t * the panel is removed from the DOM.\n\t * - `origin` - `{(string|!angular.JQLite|!Element)=}`: The element to focus\n\t * on when the panel closes. This is commonly the element which triggered\n\t * the opening of the panel. If you do not use `origin`, you need to control\n\t * the focus manually.\n\t *\n\t * @returns {!MdPanelRef} panelRef\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdPanel#open\n\t * @description\n\t * Calls the create method above, then opens the panel. This is a shortcut for\n\t * creating and then calling open manually. If custom methods need to be\n\t * called when the panel is added to the DOM or opened, do not use this method.\n\t * Instead create the panel, chain promises on the domAdded and openComplete\n\t * methods, and call open from the returned panelRef.\n\t *\n\t * @param {!Object=} config Specific configuration object that may contain\n\t * the properties defined in `$mdPanel.create`.\n\t * @returns {!angular.$q.Promise} panelRef A promise that resolves\n\t * to an instance of the panel.\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdPanel#newPanelPosition\n\t * @description\n\t * Returns a new instance of the MdPanelPosition object. Use this to create\n\t * the position config object.\n\t *\n\t * @returns {!MdPanelPosition} panelPosition\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $mdPanel#newPanelAnimation\n\t * @description\n\t * Returns a new instance of the MdPanelAnimation object. Use this to create\n\t * the animation config object.\n\t *\n\t * @returns {!MdPanelAnimation} panelAnimation\n\t */\n\t\n\t\n\t/*****************************************************************************\n\t * MdPanelRef *\n\t *****************************************************************************/\n\t\n\t\n\t/**\n\t * @ngdoc type\n\t * @name MdPanelRef\n\t * @module material.components.panel\n\t * @description\n\t * A reference to a created panel. This reference contains a unique id for the\n\t * panel, along with the following properties:\n\t *\n\t * - `id` - `{string}`: The unique id for the panel. This id is used to track\n\t * when a panel was interacted with.\n\t * - `config` - `{!Object=}`: The entire config object that was used in\n\t * create.\n\t * - `isAttached` - `{boolean}`: Whether the panel is attached to the DOM.\n\t * Visibility to the user does not factor into isAttached.\n\t * - `panelContainer` - `{angular.JQLite}`: The wrapper element containing the\n\t * panel. This property is added in order to have access to the `addClass`,\n\t * `removeClass`, `toggleClass`, etc methods.\n\t * - `panelEl` - `{angular.JQLite}`: The panel element. This property is added\n\t * in order to have access to the `addClass`, `removeClass`, `toggleClass`,\n\t * etc methods.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#open\n\t * @description\n\t * Attaches and shows the panel.\n\t *\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel is\n\t * opened.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#close\n\t * @description\n\t * Hides and detaches the panel. Note that this will **not** destroy the panel.\n\t * If you don't intend on using the panel again, call the {@link #destroy\n\t * destroy} method afterwards.\n\t *\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel is\n\t * closed.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#attach\n\t * @description\n\t * Create the panel elements and attach them to the DOM. The panel will be\n\t * hidden by default.\n\t *\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel is\n\t * attached.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#detach\n\t * @description\n\t * Removes the panel from the DOM. This will NOT hide the panel before removing\n\t * it.\n\t *\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel is\n\t * detached.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#show\n\t * @description\n\t * Shows the panel.\n\t *\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel has\n\t * shown and animations are completed.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#hide\n\t * @description\n\t * Hides the panel.\n\t *\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel has\n\t * hidden and animations are completed.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#destroy\n\t * @description\n\t * Destroys the panel. The panel cannot be opened again after this is called.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#addClass\n\t * @deprecated\n\t * This method is in the process of being deprecated in favor of using the panel\n\t * and container JQLite elements that are referenced in the MdPanelRef object.\n\t * Full deprecation is scheduled for material 1.2.\n\t * @description\n\t * Adds a class to the panel. DO NOT use this hide/show the panel.\n\t *\n\t * @param {string} newClass class to be added.\n\t * @param {boolean} toElement Whether or not to add the class to the panel\n\t * element instead of the container.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#removeClass\n\t * @deprecated\n\t * This method is in the process of being deprecated in favor of using the panel\n\t * and container JQLite elements that are referenced in the MdPanelRef object.\n\t * Full deprecation is scheduled for material 1.2.\n\t * @description\n\t * Removes a class from the panel. DO NOT use this to hide/show the panel.\n\t *\n\t * @param {string} oldClass Class to be removed.\n\t * @param {boolean} fromElement Whether or not to remove the class from the\n\t * panel element instead of the container.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#toggleClass\n\t * @deprecated\n\t * This method is in the process of being deprecated in favor of using the panel\n\t * and container JQLite elements that are referenced in the MdPanelRef object.\n\t * Full deprecation is scheduled for material 1.2.\n\t * @description\n\t * Toggles a class on the panel. DO NOT use this to hide/show the panel.\n\t *\n\t * @param {string} toggleClass Class to be toggled.\n\t * @param {boolean} onElement Whether or not to remove the class from the panel\n\t * element instead of the container.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelRef#updatePosition\n\t * @description\n\t * Updates the position configuration of a panel. Use this to update the\n\t * position of a panel that is open, without having to close and re-open the\n\t * panel.\n\t *\n\t * @param {!MdPanelPosition} position\n\t */\n\t\n\t\n\t/*****************************************************************************\n\t * MdPanelPosition *\n\t *****************************************************************************/\n\t\n\t\n\t/**\n\t * @ngdoc type\n\t * @name MdPanelPosition\n\t * @module material.components.panel\n\t * @description\n\t *\n\t * Object for configuring the position of the panel.\n\t *\n\t * @usage\n\t *\n\t * #### Centering the panel\n\t *\n\t * \n\t * new MdPanelPosition().absolute().center();\n\t * \n\t *\n\t * #### Overlapping the panel with an element\n\t *\n\t * \n\t * new MdPanelPosition()\n\t * .relativeTo(someElement)\n\t * .addPanelPosition(\n\t * $mdPanel.xPosition.ALIGN_START,\n\t * $mdPanel.yPosition.ALIGN_TOPS\n\t * );\n\t * \n\t *\n\t * #### Aligning the panel with the bottom of an element\n\t *\n\t * \n\t * new MdPanelPosition()\n\t * .relativeTo(someElement)\n\t * .addPanelPosition($mdPanel.xPosition.CENTER, $mdPanel.yPosition.BELOW);\n\t * \n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#absolute\n\t * @description\n\t * Positions the panel absolutely relative to the parent element. If the parent\n\t * is document.body, this is equivalent to positioning the panel absolutely\n\t * within the viewport.\n\t *\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#relativeTo\n\t * @description\n\t * Positions the panel relative to a specific element.\n\t *\n\t * @param {string|!Element|!angular.JQLite} element Query selector, DOM element,\n\t * or angular element to position the panel with respect to.\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#top\n\t * @description\n\t * Sets the value of `top` for the panel. Clears any previously set vertical\n\t * position.\n\t *\n\t * @param {string=} top Value of `top`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#bottom\n\t * @description\n\t * Sets the value of `bottom` for the panel. Clears any previously set vertical\n\t * position.\n\t *\n\t * @param {string=} bottom Value of `bottom`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#start\n\t * @description\n\t * Sets the panel to the start of the page - `left` if `ltr` or `right` for\n\t * `rtl`. Clears any previously set horizontal position.\n\t *\n\t * @param {string=} start Value of position. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#end\n\t * @description\n\t * Sets the panel to the end of the page - `right` if `ltr` or `left` for `rtl`.\n\t * Clears any previously set horizontal position.\n\t *\n\t * @param {string=} end Value of position. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#left\n\t * @description\n\t * Sets the value of `left` for the panel. Clears any previously set\n\t * horizontal position.\n\t *\n\t * @param {string=} left Value of `left`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#right\n\t * @description\n\t * Sets the value of `right` for the panel. Clears any previously set\n\t * horizontal position.\n\t *\n\t * @param {string=} right Value of `right`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#centerHorizontally\n\t * @description\n\t * Centers the panel horizontally in the viewport. Clears any previously set\n\t * horizontal position.\n\t *\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#centerVertically\n\t * @description\n\t * Centers the panel vertically in the viewport. Clears any previously set\n\t * vertical position.\n\t *\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#center\n\t * @description\n\t * Centers the panel horizontally and vertically in the viewport. This is\n\t * equivalent to calling both `centerHorizontally` and `centerVertically`.\n\t * Clears any previously set horizontal and vertical positions.\n\t *\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#addPanelPosition\n\t * @description\n\t * Sets the x and y position for the panel relative to another element. Can be\n\t * called multiple times to specify an ordered list of panel positions. The\n\t * first position which allows the panel to be completely on-screen will be\n\t * chosen; the last position will be chose whether it is on-screen or not.\n\t *\n\t * xPosition must be one of the following values available on\n\t * $mdPanel.xPosition:\n\t *\n\t * CENTER | ALIGN_START | ALIGN_END | OFFSET_START | OFFSET_END\n\t *\n\t * *************\n\t * * *\n\t * * PANEL *\n\t * * *\n\t * *************\n\t * A B C D E\n\t *\n\t * A: OFFSET_START (for LTR displays)\n\t * B: ALIGN_START (for LTR displays)\n\t * C: CENTER\n\t * D: ALIGN_END (for LTR displays)\n\t * E: OFFSET_END (for LTR displays)\n\t *\n\t * yPosition must be one of the following values available on\n\t * $mdPanel.yPosition:\n\t *\n\t * CENTER | ALIGN_TOPS | ALIGN_BOTTOMS | ABOVE | BELOW\n\t *\n\t * F\n\t * G *************\n\t * * *\n\t * H * PANEL *\n\t * * *\n\t * I *************\n\t * J\n\t *\n\t * F: BELOW\n\t * G: ALIGN_TOPS\n\t * H: CENTER\n\t * I: ALIGN_BOTTOMS\n\t * J: ABOVE\n\t *\n\t * @param {string} xPosition\n\t * @param {string} yPosition\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#withOffsetX\n\t * @description\n\t * Sets the value of the offset in the x-direction.\n\t *\n\t * @param {string} offsetX\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelPosition#withOffsetY\n\t * @description\n\t * Sets the value of the offset in the y-direction.\n\t *\n\t * @param {string} offsetY\n\t * @returns {!MdPanelPosition}\n\t */\n\t\n\t\n\t/*****************************************************************************\n\t * MdPanelAnimation *\n\t *****************************************************************************/\n\t\n\t\n\t/**\n\t * @ngdoc object\n\t * @name MdPanelAnimation\n\t * @description\n\t * Animation configuration object. To use, create an MdPanelAnimation with the\n\t * desired properties, then pass the object as part of $mdPanel creation.\n\t *\n\t * Example:\n\t *\n\t * var panelAnimation = new MdPanelAnimation()\n\t * .openFrom(myButtonEl)\n\t * .closeTo('.my-button')\n\t * .withAnimation($mdPanel.animation.SCALE);\n\t *\n\t * $mdPanel.create({\n\t * animation: panelAnimation\n\t * });\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelAnimation#openFrom\n\t * @description\n\t * Specifies where to start the open animation. `openFrom` accepts a\n\t * click event object, query selector, DOM element, or a Rect object that\n\t * is used to determine the bounds. When passed a click event, the location\n\t * of the click will be used as the position to start the animation.\n\t *\n\t * @param {string|!Element|!Event|{top: number, left: number}}\n\t * @returns {!MdPanelAnimation}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelAnimation#closeTo\n\t * @description\n\t * Specifies where to animate the panel close. `closeTo` accepts a\n\t * query selector, DOM element, or a Rect object that is used to determine\n\t * the bounds.\n\t *\n\t * @param {string|!Element|{top: number, left: number}}\n\t * @returns {!MdPanelAnimation}\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name MdPanelAnimation#withAnimation\n\t * @description\n\t * Specifies the animation class.\n\t *\n\t * There are several default animations that can be used:\n\t * ($mdPanel.animation)\n\t * SLIDE: The panel slides in and out from the specified\n\t * elements. It will not fade in or out.\n\t * SCALE: The panel scales in and out. Slide and fade are\n\t * included in this animation.\n\t * FADE: The panel fades in and out.\n\t *\n\t * Custom classes will by default fade in and out unless\n\t * \"transition: opacity 1ms\" is added to the to custom class.\n\t *\n\t * @param {string|{open: string, close: string}} cssClass\n\t * @returns {!MdPanelAnimation}\n\t */\n\t\n\t\n\t/*****************************************************************************\n\t * IMPLEMENTATION *\n\t *****************************************************************************/\n\t\n\t\n\t// Default z-index for the panel.\n\tvar defaultZIndex = 80;\n\tvar MD_PANEL_HIDDEN = '_md-panel-hidden';\n\t\n\tvar FOCUS_TRAP_TEMPLATE = angular.element(\n\t '
    ');\n\t\n\t\n\t/**\n\t * A service that is used for controlling/displaying panels on the screen.\n\t * @param {!angular.JQLite} $rootElement\n\t * @param {!angular.Scope} $rootScope\n\t * @param {!angular.$injector} $injector\n\t * @param {!angular.$window} $window\n\t * @final @constructor @ngInject\n\t */\n\tfunction MdPanelService($rootElement, $rootScope, $injector, $window) {\n\t /**\n\t * Default config options for the panel.\n\t * Anything angular related needs to be done later. Therefore\n\t * scope: $rootScope.$new(true),\n\t * attachTo: $rootElement,\n\t * are added later.\n\t * @private {!Object}\n\t */\n\t this._defaultConfigOptions = {\n\t bindToController: true,\n\t clickOutsideToClose: false,\n\t disableParentScroll: false,\n\t escapeToClose: false,\n\t focusOnOpen: true,\n\t fullscreen: false,\n\t hasBackdrop: false,\n\t propagateContainerEvents: false,\n\t transformTemplate: angular.bind(this, this._wrapTemplate),\n\t trapFocus: false,\n\t zIndex: defaultZIndex\n\t };\n\t\n\t /** @private {!Object} */\n\t this._config = {};\n\t\n\t /** @private @const */\n\t this._$rootElement = $rootElement;\n\t\n\t /** @private @const */\n\t this._$rootScope = $rootScope;\n\t\n\t /** @private @const */\n\t this._$injector = $injector;\n\t\n\t /** @private @const */\n\t this._$window = $window;\n\t\n\t /** @private {!Object} */\n\t this._trackedPanels = {};\n\t\n\t /**\n\t * Default animations that can be used within the panel.\n\t * @type {enum}\n\t */\n\t this.animation = MdPanelAnimation.animation;\n\t\n\t /**\n\t * Possible values of xPosition for positioning the panel relative to\n\t * another element.\n\t * @type {enum}\n\t */\n\t this.xPosition = MdPanelPosition.xPosition;\n\t\n\t /**\n\t * Possible values of yPosition for positioning the panel relative to\n\t * another element.\n\t * @type {enum}\n\t */\n\t this.yPosition = MdPanelPosition.yPosition;\n\t}\n\t\n\t\n\t/**\n\t * Creates a panel with the specified options.\n\t * @param {!Object=} config Configuration object for the panel.\n\t * @returns {!MdPanelRef}\n\t */\n\tMdPanelService.prototype.create = function(config) {\n\t config = config || {};\n\t\n\t // If the passed-in config contains an ID and the ID is within _trackedPanels,\n\t // return the tracked panel.\n\t if (angular.isDefined(config.id) && this._trackedPanels[config.id]) {\n\t return this._trackedPanels[config.id];\n\t }\n\t\n\t // If no ID is set within the passed-in config, then create an arbitrary ID.\n\t this._config = {\n\t id: config.id || 'panel_' + this._$injector.get('$mdUtil').nextUid(),\n\t scope: this._$rootScope.$new(true),\n\t attachTo: this._$rootElement\n\t };\n\t angular.extend(this._config, this._defaultConfigOptions, config);\n\t\n\t var panelRef = new MdPanelRef(this._config, this._$injector);\n\t this._trackedPanels[config.id] = panelRef;\n\t\n\t return panelRef;\n\t};\n\t\n\t\n\t/**\n\t * Creates and opens a panel with the specified options.\n\t * @param {!Object=} config Configuration object for the panel.\n\t * @returns {!angular.$q.Promise} The panel created from create.\n\t */\n\tMdPanelService.prototype.open = function(config) {\n\t var panelRef = this.create(config);\n\t return panelRef.open().then(function() {\n\t return panelRef;\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Returns a new instance of the MdPanelPosition. Use this to create the\n\t * positioning object.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelService.prototype.newPanelPosition = function() {\n\t return new MdPanelPosition(this._$injector);\n\t};\n\t\n\t\n\t/**\n\t * Returns a new instance of the MdPanelAnimation. Use this to create the\n\t * animation object.\n\t * @returns {!MdPanelAnimation}\n\t */\n\tMdPanelService.prototype.newPanelAnimation = function() {\n\t return new MdPanelAnimation(this._$injector);\n\t};\n\t\n\t\n\t/**\n\t * Wraps the users template in two elements, md-panel-outer-wrapper, which\n\t * covers the entire attachTo element, and md-panel, which contains only the\n\t * template. This allows the panel control over positioning, animations,\n\t * and similar properties.\n\t * @param {string} origTemplate The original template.\n\t * @returns {string} The wrapped template.\n\t * @private\n\t */\n\tMdPanelService.prototype._wrapTemplate = function(origTemplate) {\n\t var template = origTemplate || '';\n\t\n\t // The panel should be initially rendered offscreen so we can calculate\n\t // height and width for positioning.\n\t return '' +\n\t '
    ' +\n\t '
    ' + template + '
    ' +\n\t '
    ';\n\t};\n\t\n\t\n\t/*****************************************************************************\n\t * MdPanelRef *\n\t *****************************************************************************/\n\t\n\t\n\t/**\n\t * A reference to a created panel. This reference contains a unique id for the\n\t * panel, along with properties/functions used to control the panel.\n\t * @param {!Object} config\n\t * @param {!angular.$injector} $injector\n\t * @final @constructor\n\t */\n\tfunction MdPanelRef(config, $injector) {\n\t // Injected variables.\n\t /** @private @const {!angular.$q} */\n\t this._$q = $injector.get('$q');\n\t\n\t /** @private @const {!angular.$mdCompiler} */\n\t this._$mdCompiler = $injector.get('$mdCompiler');\n\t\n\t /** @private @const {!angular.$mdConstant} */\n\t this._$mdConstant = $injector.get('$mdConstant');\n\t\n\t /** @private @const {!angular.$mdUtil} */\n\t this._$mdUtil = $injector.get('$mdUtil');\n\t\n\t /** @private @const {!angular.Scope} */\n\t this._$rootScope = $injector.get('$rootScope');\n\t\n\t /** @private @const {!angular.$animate} */\n\t this._$animate = $injector.get('$animate');\n\t\n\t /** @private @const {!MdPanelRef} */\n\t this._$mdPanel = $injector.get('$mdPanel');\n\t\n\t /** @private @const {!angular.$log} */\n\t this._$log = $injector.get('$log');\n\t\n\t /** @private @const {!angular.$window} */\n\t this._$window = $injector.get('$window');\n\t\n\t /** @private @const {!Function} */\n\t this._$$rAF = $injector.get('$$rAF');\n\t\n\t // Public variables.\n\t /**\n\t * Unique id for the panelRef.\n\t * @type {string}\n\t */\n\t this.id = config.id;\n\t\n\t /** @type {!Object} */\n\t this.config = config;\n\t\n\t /** @type {!angular.JQLite|undefined} */\n\t this.panelContainer;\n\t\n\t /** @type {!angular.JQLite|undefined} */\n\t this.panelEl;\n\t\n\t /**\n\t * Whether the panel is attached. This is synchronous. When attach is called,\n\t * isAttached is set to true. When detach is called, isAttached is set to\n\t * false.\n\t * @type {boolean}\n\t */\n\t this.isAttached = false;\n\t\n\t // Private variables.\n\t /** @private {Array} */\n\t this._removeListeners = [];\n\t\n\t /** @private {!angular.JQLite|undefined} */\n\t this._topFocusTrap;\n\t\n\t /** @private {!angular.JQLite|undefined} */\n\t this._bottomFocusTrap;\n\t\n\t /** @private {!$mdPanel|undefined} */\n\t this._backdropRef;\n\t\n\t /** @private {Function?} */\n\t this._restoreScroll = null;\n\t}\n\t\n\t\n\t/**\n\t * Opens an already created and configured panel. If the panel is already\n\t * visible, does nothing.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when\n\t * the panel is opened and animations finish.\n\t */\n\tMdPanelRef.prototype.open = function() {\n\t var self = this;\n\t return this._$q(function(resolve, reject) {\n\t var done = self._done(resolve, self);\n\t var show = self._simpleBind(self.show, self);\n\t\n\t self.attach()\n\t .then(show)\n\t .then(done)\n\t .catch(reject);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Closes the panel.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when\n\t * the panel is closed and animations finish.\n\t */\n\tMdPanelRef.prototype.close = function() {\n\t var self = this;\n\t\n\t return this._$q(function(resolve, reject) {\n\t var done = self._done(resolve, self);\n\t var detach = self._simpleBind(self.detach, self);\n\t\n\t self.hide()\n\t .then(detach)\n\t .then(done)\n\t .catch(reject);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Attaches the panel. The panel will be hidden afterwards.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when\n\t * the panel is attached.\n\t */\n\tMdPanelRef.prototype.attach = function() {\n\t if (this.isAttached && this.panelEl) {\n\t return this._$q.when(this);\n\t }\n\t\n\t var self = this;\n\t return this._$q(function(resolve, reject) {\n\t var done = self._done(resolve, self);\n\t var onDomAdded = self.config['onDomAdded'] || angular.noop;\n\t var addListeners = function(response) {\n\t self.isAttached = true;\n\t self._addEventListeners();\n\t return response;\n\t };\n\t\n\t self._$q.all([\n\t self._createBackdrop(),\n\t self._createPanel()\n\t .then(addListeners)\n\t .catch(reject)\n\t ]).then(onDomAdded)\n\t .then(done)\n\t .catch(reject);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Only detaches the panel. Will NOT hide the panel first.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when\n\t * the panel is detached.\n\t */\n\tMdPanelRef.prototype.detach = function() {\n\t if (!this.isAttached) {\n\t return this._$q.when(this);\n\t }\n\t\n\t var self = this;\n\t var onDomRemoved = self.config['onDomRemoved'] || angular.noop;\n\t\n\t var detachFn = function() {\n\t self._removeEventListeners();\n\t\n\t // Remove the focus traps that we added earlier for keeping focus within\n\t // the panel.\n\t if (self._topFocusTrap && self._topFocusTrap.parentNode) {\n\t self._topFocusTrap.parentNode.removeChild(self._topFocusTrap);\n\t }\n\t\n\t if (self._bottomFocusTrap && self._bottomFocusTrap.parentNode) {\n\t self._bottomFocusTrap.parentNode.removeChild(self._bottomFocusTrap);\n\t }\n\t\n\t self.panelContainer.remove();\n\t self.isAttached = false;\n\t return self._$q.when(self);\n\t };\n\t\n\t if (this._restoreScroll) {\n\t this._restoreScroll();\n\t this._restoreScroll = null;\n\t }\n\t\n\t return this._$q(function(resolve, reject) {\n\t var done = self._done(resolve, self);\n\t\n\t self._$q.all([\n\t detachFn(),\n\t self._backdropRef ? self._backdropRef.detach() : true\n\t ]).then(onDomRemoved)\n\t .then(done)\n\t .catch(reject);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Destroys the panel. The Panel cannot be opened again after this.\n\t */\n\tMdPanelRef.prototype.destroy = function() {\n\t this.config.scope.$destroy();\n\t this.config.locals = null;\n\t};\n\t\n\t\n\t/**\n\t * Shows the panel.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when\n\t * the panel has shown and animations finish.\n\t */\n\tMdPanelRef.prototype.show = function() {\n\t if (!this.panelContainer) {\n\t return this._$q(function(resolve, reject) {\n\t reject('Panel does not exist yet. Call open() or attach().');\n\t });\n\t }\n\t\n\t if (!this.panelContainer.hasClass(MD_PANEL_HIDDEN)) {\n\t return this._$q.when(this);\n\t }\n\t\n\t var self = this;\n\t var animatePromise = function() {\n\t self.panelContainer.removeClass(MD_PANEL_HIDDEN);\n\t return self._animateOpen();\n\t };\n\t\n\t return this._$q(function(resolve, reject) {\n\t var done = self._done(resolve, self);\n\t var onOpenComplete = self.config['onOpenComplete'] || angular.noop;\n\t\n\t self._$q.all([\n\t self._backdropRef ? self._backdropRef.show() : self,\n\t animatePromise().then(function() { self._focusOnOpen(); }, reject)\n\t ]).then(onOpenComplete)\n\t .then(done)\n\t .catch(reject);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Hides the panel.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when\n\t * the panel has hidden and animations finish.\n\t */\n\tMdPanelRef.prototype.hide = function() {\n\t if (!this.panelContainer) {\n\t return this._$q(function(resolve, reject) {\n\t reject('Panel does not exist yet. Call open() or attach().');\n\t });\n\t }\n\t\n\t if (this.panelContainer.hasClass(MD_PANEL_HIDDEN)) {\n\t return this._$q.when(this);\n\t }\n\t\n\t var self = this;\n\t\n\t return this._$q(function(resolve, reject) {\n\t var done = self._done(resolve, self);\n\t var onRemoving = self.config['onRemoving'] || angular.noop;\n\t\n\t var focusOnOrigin = function() {\n\t var origin = self.config['origin'];\n\t if (origin) {\n\t getElement(origin).focus();\n\t }\n\t };\n\t\n\t var hidePanel = function() {\n\t self.panelContainer.addClass(MD_PANEL_HIDDEN);\n\t };\n\t\n\t self._$q.all([\n\t self._backdropRef ? self._backdropRef.hide() : self,\n\t self._animateClose()\n\t .then(onRemoving)\n\t .then(hidePanel)\n\t .then(focusOnOrigin)\n\t .catch(reject)\n\t ]).then(done, reject);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Add a class to the panel. DO NOT use this to hide/show the panel.\n\t * @deprecated\n\t * This method is in the process of being deprecated in favor of using the panel\n\t * and container JQLite elements that are referenced in the MdPanelRef object.\n\t * Full deprecation is scheduled for material 1.2.\n\t *\n\t * @param {string} newClass Class to be added.\n\t * @param {boolean} toElement Whether or not to add the class to the panel\n\t * element instead of the container.\n\t */\n\tMdPanelRef.prototype.addClass = function(newClass, toElement) {\n\t this._$log.warn(\n\t 'The addClass method is in the process of being deprecated. ' +\n\t 'Full deprecation is scheduled for the Angular Material 1.2 release. ' +\n\t 'To achieve the same results, use the panelContainer or panelEl ' +\n\t 'JQLite elements that are referenced in MdPanelRef.');\n\t\n\t if (!this.panelContainer) {\n\t throw new Error('Panel does not exist yet. Call open() or attach().');\n\t }\n\t\n\t if (!toElement && !this.panelContainer.hasClass(newClass)) {\n\t this.panelContainer.addClass(newClass);\n\t } else if (toElement && !this.panelEl.hasClass(newClass)) {\n\t this.panelEl.addClass(newClass);\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Remove a class from the panel. DO NOT use this to hide/show the panel.\n\t * @deprecated\n\t * This method is in the process of being deprecated in favor of using the panel\n\t * and container JQLite elements that are referenced in the MdPanelRef object.\n\t * Full deprecation is scheduled for material 1.2.\n\t *\n\t * @param {string} oldClass Class to be removed.\n\t * @param {boolean} fromElement Whether or not to remove the class from the\n\t * panel element instead of the container.\n\t */\n\tMdPanelRef.prototype.removeClass = function(oldClass, fromElement) {\n\t this._$log.warn(\n\t 'The removeClass method is in the process of being deprecated. ' +\n\t 'Full deprecation is scheduled for the Angular Material 1.2 release. ' +\n\t 'To achieve the same results, use the panelContainer or panelEl ' +\n\t 'JQLite elements that are referenced in MdPanelRef.');\n\t\n\t if (!this.panelContainer) {\n\t throw new Error('Panel does not exist yet. Call open() or attach().');\n\t }\n\t\n\t if (!fromElement && this.panelContainer.hasClass(oldClass)) {\n\t this.panelContainer.removeClass(oldClass);\n\t } else if (fromElement && this.panelEl.hasClass(oldClass)) {\n\t this.panelEl.removeClass(oldClass);\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Toggle a class on the panel. DO NOT use this to hide/show the panel.\n\t * @deprecated\n\t * This method is in the process of being deprecated in favor of using the panel\n\t * and container JQLite elements that are referenced in the MdPanelRef object.\n\t * Full deprecation is scheduled for material 1.2.\n\t *\n\t * @param {string} toggleClass The class to toggle.\n\t * @param {boolean} onElement Whether or not to toggle the class on the panel\n\t * element instead of the container.\n\t */\n\tMdPanelRef.prototype.toggleClass = function(toggleClass, onElement) {\n\t this._$log.warn(\n\t 'The toggleClass method is in the process of being deprecated. ' +\n\t 'Full deprecation is scheduled for the Angular Material 1.2 release. ' +\n\t 'To achieve the same results, use the panelContainer or panelEl ' +\n\t 'JQLite elements that are referenced in MdPanelRef.');\n\t\n\t if (!this.panelContainer) {\n\t throw new Error('Panel does not exist yet. Call open() or attach().');\n\t }\n\t\n\t if (!onElement) {\n\t this.panelContainer.toggleClass(toggleClass);\n\t } else {\n\t this.panelEl.toggleClass(toggleClass);\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Creates a panel and adds it to the dom.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel is\n\t * created.\n\t * @private\n\t */\n\tMdPanelRef.prototype._createPanel = function() {\n\t var self = this;\n\t\n\t return this._$q(function(resolve, reject) {\n\t if (!self.config.locals) {\n\t self.config.locals = {};\n\t }\n\t\n\t self.config.locals.mdPanelRef = self;\n\t self._$mdCompiler.compile(self.config)\n\t .then(function(compileData) {\n\t self.panelContainer = compileData.link(self.config['scope']);\n\t getElement(self.config['attachTo']).append(self.panelContainer);\n\t\n\t if (self.config['disableParentScroll']) {\n\t self._restoreScroll = self._$mdUtil.disableScrollAround(\n\t null,\n\t self.panelContainer,\n\t { disableScrollMask: true }\n\t );\n\t }\n\t\n\t self.panelEl = angular.element(\n\t self.panelContainer[0].querySelector('.md-panel'));\n\t\n\t // Add a custom CSS class to the panel element.\n\t if (self.config['panelClass']) {\n\t self.panelEl.addClass(self.config['panelClass']);\n\t }\n\t\n\t // Handle click and touch events for the panel container.\n\t if (self.config['propagateContainerEvents']) {\n\t self.panelContainer.css('pointer-events', 'none');\n\t }\n\t\n\t // Panel may be outside the $rootElement, tell ngAnimate to animate\n\t // regardless.\n\t if (self._$animate.pin) {\n\t self._$animate.pin(self.panelContainer,\n\t getElement(self.config['attachTo']));\n\t }\n\t\n\t self._configureTrapFocus();\n\t self._addStyles().then(function() {\n\t resolve(self);\n\t }, reject);\n\t }, reject);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Adds the styles for the panel, such as positioning and z-index.\n\t * @returns {!angular.$q.Promise}\n\t * @private\n\t */\n\tMdPanelRef.prototype._addStyles = function() {\n\t var self = this;\n\t return this._$q(function(resolve) {\n\t self.panelContainer.css('z-index', self.config['zIndex']);\n\t self.panelEl.css('z-index', self.config['zIndex'] + 1);\n\t\n\t var hideAndResolve = function() {\n\t // Remove left: -9999px and add hidden class.\n\t self.panelEl.css('left', '');\n\t self.panelContainer.addClass(MD_PANEL_HIDDEN);\n\t resolve(self);\n\t };\n\t\n\t if (self.config['fullscreen']) {\n\t self.panelEl.addClass('_md-panel-fullscreen');\n\t hideAndResolve();\n\t return; // Don't setup positioning.\n\t }\n\t\n\t var positionConfig = self.config['position'];\n\t if (!positionConfig) {\n\t hideAndResolve();\n\t return; // Don't setup positioning.\n\t }\n\t\n\t // Wait for angular to finish processing the template, then position it\n\t // correctly. This is necessary so that the panel will have a defined height\n\t // and width.\n\t self._$rootScope['$$postDigest'](function() {\n\t self._updatePosition(true);\n\t resolve(self);\n\t });\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Updates the position configuration of a panel\n\t * @param {!MdPanelPosition} position\n\t */\n\tMdPanelRef.prototype.updatePosition = function(position) {\n\t if (!this.panelContainer) {\n\t throw new Error('Panel does not exist yet. Call open() or attach().');\n\t }\n\t\n\t this.config['position'] = position;\n\t this._updatePosition();\n\t};\n\t\n\t\n\t/**\n\t * Calculates and updates the position of the panel.\n\t * @param {boolean=} init\n\t * @private\n\t */\n\tMdPanelRef.prototype._updatePosition = function(init) {\n\t var positionConfig = this.config['position'];\n\t\n\t if (positionConfig) {\n\t positionConfig._setPanelPosition(this.panelEl);\n\t\n\t // Hide the panel now that position is known.\n\t if (init) {\n\t this.panelContainer.addClass(MD_PANEL_HIDDEN);\n\t }\n\t\n\t this.panelEl.css(\n\t MdPanelPosition.absPosition.TOP,\n\t positionConfig.getTop()\n\t );\n\t this.panelEl.css(\n\t MdPanelPosition.absPosition.BOTTOM,\n\t positionConfig.getBottom()\n\t );\n\t this.panelEl.css(\n\t MdPanelPosition.absPosition.LEFT,\n\t positionConfig.getLeft()\n\t );\n\t this.panelEl.css(\n\t MdPanelPosition.absPosition.RIGHT,\n\t positionConfig.getRight()\n\t );\n\t\n\t // Use the vendor prefixed version of transform.\n\t var prefixedTransform = this._$mdConstant.CSS.TRANSFORM;\n\t this.panelEl.css(prefixedTransform, positionConfig.getTransform());\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Focuses on the panel or the first focus target.\n\t * @private\n\t */\n\tMdPanelRef.prototype._focusOnOpen = function() {\n\t if (this.config['focusOnOpen']) {\n\t // Wait for the template to finish rendering to guarantee md-autofocus has\n\t // finished adding the class md-autofocus, otherwise the focusable element\n\t // isn't available to focus.\n\t var self = this;\n\t this._$rootScope['$$postDigest'](function() {\n\t var target = self._$mdUtil.findFocusTarget(self.panelEl) ||\n\t self.panelEl;\n\t target.focus();\n\t });\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Shows the backdrop.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the backdrop\n\t * is created and attached.\n\t * @private\n\t */\n\tMdPanelRef.prototype._createBackdrop = function() {\n\t if (this.config.hasBackdrop) {\n\t if (!this._backdropRef) {\n\t var backdropAnimation = this._$mdPanel.newPanelAnimation()\n\t .openFrom(this.config.attachTo)\n\t .withAnimation({\n\t open: '_md-opaque-enter',\n\t close: '_md-opaque-leave'\n\t });\n\t var backdropConfig = {\n\t animation: backdropAnimation,\n\t attachTo: this.config.attachTo,\n\t focusOnOpen: false,\n\t panelClass: '_md-panel-backdrop',\n\t zIndex: this.config.zIndex - 1\n\t };\n\t this._backdropRef = this._$mdPanel.create(backdropConfig);\n\t }\n\t if (!this._backdropRef.isAttached) {\n\t return this._backdropRef.attach();\n\t }\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Listen for escape keys and outside clicks to auto close.\n\t * @private\n\t */\n\tMdPanelRef.prototype._addEventListeners = function() {\n\t this._configureEscapeToClose();\n\t this._configureClickOutsideToClose();\n\t this._configureScrollListener();\n\t};\n\t\n\t\n\t/**\n\t * Remove event listeners added in _addEventListeners.\n\t * @private\n\t */\n\tMdPanelRef.prototype._removeEventListeners = function() {\n\t this._removeListeners && this._removeListeners.forEach(function(removeFn) {\n\t removeFn();\n\t });\n\t this._removeListeners = [];\n\t};\n\t\n\t\n\t/**\n\t * Setup the escapeToClose event listeners.\n\t * @private\n\t */\n\tMdPanelRef.prototype._configureEscapeToClose = function() {\n\t if (this.config['escapeToClose']) {\n\t var parentTarget = getElement(this.config['attachTo']);\n\t var self = this;\n\t\n\t var keyHandlerFn = function(ev) {\n\t if (ev.keyCode === self._$mdConstant.KEY_CODE.ESCAPE) {\n\t ev.stopPropagation();\n\t ev.preventDefault();\n\t\n\t self.close();\n\t }\n\t };\n\t\n\t // Add keydown listeners\n\t this.panelContainer.on('keydown', keyHandlerFn);\n\t parentTarget.on('keydown', keyHandlerFn);\n\t\n\t // Queue remove listeners function\n\t this._removeListeners.push(function() {\n\t self.panelContainer.off('keydown', keyHandlerFn);\n\t parentTarget.off('keydown', keyHandlerFn);\n\t });\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Setup the clickOutsideToClose event listeners.\n\t * @private\n\t */\n\tMdPanelRef.prototype._configureClickOutsideToClose = function() {\n\t if (this.config['clickOutsideToClose']) {\n\t var target = this.panelContainer;\n\t var sourceElem;\n\t\n\t // Keep track of the element on which the mouse originally went down\n\t // so that we can only close the backdrop when the 'click' started on it.\n\t // A simple 'click' handler does not work,\n\t // it sets the target object as the element the mouse went down on.\n\t var mousedownHandler = function(ev) {\n\t sourceElem = ev.target;\n\t };\n\t\n\t // We check if our original element and the target is the backdrop\n\t // because if the original was the backdrop and the target was inside the\n\t // panel we don't want to panel to close.\n\t var self = this;\n\t var mouseupHandler = function(ev) {\n\t if (sourceElem === target[0] && ev.target === target[0]) {\n\t ev.stopPropagation();\n\t ev.preventDefault();\n\t\n\t self.close();\n\t }\n\t };\n\t\n\t // Add listeners\n\t target.on('mousedown', mousedownHandler);\n\t target.on('mouseup', mouseupHandler);\n\t\n\t // Queue remove listeners function\n\t this._removeListeners.push(function() {\n\t target.off('mousedown', mousedownHandler);\n\t target.off('mouseup', mouseupHandler);\n\t });\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Configures the listeners for updating the panel position on scroll.\n\t * @private\n\t*/\n\tMdPanelRef.prototype._configureScrollListener = function() {\n\t var updatePosition = angular.bind(this, this._updatePosition);\n\t var debouncedUpdatePosition = this._$$rAF.throttle(updatePosition);\n\t var self = this;\n\t\n\t var onScroll = function() {\n\t if (!self.config['disableParentScroll']) {\n\t debouncedUpdatePosition();\n\t }\n\t };\n\t\n\t // Add listeners.\n\t this._$window.addEventListener('scroll', onScroll, true);\n\t\n\t // Queue remove listeners function.\n\t this._removeListeners.push(function() {\n\t self._$window.removeEventListener('scroll', onScroll, true);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Setup the focus traps. These traps will wrap focus when tabbing past the\n\t * panel. When shift-tabbing, the focus will stick in place.\n\t * @private\n\t */\n\tMdPanelRef.prototype._configureTrapFocus = function() {\n\t // Focus doesn't remain instead of the panel without this.\n\t this.panelEl.attr('tabIndex', '-1');\n\t if (this.config['trapFocus']) {\n\t var element = this.panelEl;\n\t // Set up elements before and after the panel to capture focus and\n\t // redirect back into the panel.\n\t this._topFocusTrap = FOCUS_TRAP_TEMPLATE.clone()[0];\n\t this._bottomFocusTrap = FOCUS_TRAP_TEMPLATE.clone()[0];\n\t\n\t // When focus is about to move out of the panel, we want to intercept it\n\t // and redirect it back to the panel element.\n\t var focusHandler = function() {\n\t element.focus();\n\t };\n\t this._topFocusTrap.addEventListener('focus', focusHandler);\n\t this._bottomFocusTrap.addEventListener('focus', focusHandler);\n\t\n\t // Queue remove listeners function\n\t this._removeListeners.push(this._simpleBind(function() {\n\t this._topFocusTrap.removeEventListener('focus', focusHandler);\n\t this._bottomFocusTrap.removeEventListener('focus', focusHandler);\n\t }, this));\n\t\n\t // The top focus trap inserted immediately before the md-panel element (as\n\t // a sibling). The bottom focus trap inserted immediately after the\n\t // md-panel element (as a sibling).\n\t element[0].parentNode.insertBefore(this._topFocusTrap, element[0]);\n\t element.after(this._bottomFocusTrap);\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Animate the panel opening.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel has\n\t * animated open.\n\t * @private\n\t */\n\tMdPanelRef.prototype._animateOpen = function() {\n\t this.panelContainer.addClass('md-panel-is-showing');\n\t var animationConfig = this.config['animation'];\n\t if (!animationConfig) {\n\t // Promise is in progress, return it.\n\t this.panelContainer.addClass('_md-panel-shown');\n\t return this._$q.when(this);\n\t }\n\t\n\t var self = this;\n\t return this._$q(function(resolve) {\n\t var done = self._done(resolve, self);\n\t var warnAndOpen = function() {\n\t self._$log.warn(\n\t 'MdPanel Animations failed. Showing panel without animating.');\n\t done();\n\t };\n\t\n\t animationConfig.animateOpen(self.panelEl)\n\t .then(done, warnAndOpen);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Animate the panel closing.\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the panel has\n\t * animated closed.\n\t * @private\n\t */\n\tMdPanelRef.prototype._animateClose = function() {\n\t var animationConfig = this.config['animation'];\n\t if (!animationConfig) {\n\t this.panelContainer.removeClass('md-panel-is-showing');\n\t this.panelContainer.removeClass('_md-panel-shown');\n\t return this._$q.when(this);\n\t }\n\t\n\t var self = this;\n\t return this._$q(function(resolve) {\n\t var done = function() {\n\t self.panelContainer.removeClass('md-panel-is-showing');\n\t resolve(self);\n\t };\n\t var warnAndClose = function() {\n\t self._$log.warn(\n\t 'MdPanel Animations failed. Hiding panel without animating.');\n\t done();\n\t };\n\t\n\t animationConfig.animateClose(self.panelEl)\n\t .then(done, warnAndClose);\n\t });\n\t};\n\t\n\t\n\t/**\n\t * Faster, more basic than angular.bind\n\t * http://jsperf.com/angular-bind-vs-custom-vs-native\n\t * @param {function} callback\n\t * @param {!Object} self\n\t * @return {function} Callback function with a bound self.\n\t */\n\tMdPanelRef.prototype._simpleBind = function(callback, self) {\n\t return function(value) {\n\t return callback.apply(self, value);\n\t };\n\t};\n\t\n\t\n\t/**\n\t * @param {function} callback\n\t * @param {!Object} self\n\t * @return {function} Callback function with a self param.\n\t */\n\tMdPanelRef.prototype._done = function(callback, self) {\n\t return function() {\n\t callback(self);\n\t };\n\t};\n\t\n\t\n\t/*****************************************************************************\n\t * MdPanelPosition *\n\t *****************************************************************************/\n\t\n\t\n\t/**\n\t * Position configuration object. To use, create an MdPanelPosition with the\n\t * desired properties, then pass the object as part of $mdPanel creation.\n\t *\n\t * Example:\n\t *\n\t * var panelPosition = new MdPanelPosition()\n\t * .relativeTo(myButtonEl)\n\t * .addPanelPosition(\n\t * $mdPanel.xPosition.CENTER,\n\t * $mdPanel.yPosition.ALIGN_TOPS\n\t * );\n\t *\n\t * $mdPanel.create({\n\t * position: panelPosition\n\t * });\n\t *\n\t * @param {!angular.$injector} $injector\n\t * @final @constructor\n\t */\n\tfunction MdPanelPosition($injector) {\n\t /** @private @const {!angular.$window} */\n\t this._$window = $injector.get('$window');\n\t\n\t /** @private {boolean} */\n\t this._isRTL = $injector.get('$mdUtil').bidi() === 'rtl';\n\t\n\t /** @private {boolean} */\n\t this._absolute = false;\n\t\n\t /** @private {!angular.JQLite} */\n\t this._relativeToEl;\n\t\n\t /** @private {string} */\n\t this._top = '';\n\t\n\t /** @private {string} */\n\t this._bottom = '';\n\t\n\t /** @private {string} */\n\t this._left = '';\n\t\n\t /** @private {string} */\n\t this._right = '';\n\t\n\t /** @private {!Array} */\n\t this._translateX = [];\n\t\n\t /** @private {!Array} */\n\t this._translateY = [];\n\t\n\t /** @private {!Array<{x:string, y:string}>} */\n\t this._positions = [];\n\t\n\t /** @private {?{x:string, y:string}} */\n\t this._actualPosition;\n\t}\n\t\n\t\n\t/**\n\t * Possible values of xPosition.\n\t * @enum {string}\n\t */\n\tMdPanelPosition.xPosition = {\n\t CENTER: 'center',\n\t ALIGN_START: 'align-start',\n\t ALIGN_END: 'align-end',\n\t OFFSET_START: 'offset-start',\n\t OFFSET_END: 'offset-end'\n\t};\n\t\n\t\n\t/**\n\t * Possible values of yPosition.\n\t * @enum {string}\n\t */\n\tMdPanelPosition.yPosition = {\n\t CENTER: 'center',\n\t ALIGN_TOPS: 'align-tops',\n\t ALIGN_BOTTOMS: 'align-bottoms',\n\t ABOVE: 'above',\n\t BELOW: 'below'\n\t};\n\t\n\t\n\t/**\n\t * Possible values of absolute position.\n\t * @enum {string}\n\t */\n\tMdPanelPosition.absPosition = {\n\t TOP: 'top',\n\t RIGHT: 'right',\n\t BOTTOM: 'bottom',\n\t LEFT: 'left'\n\t};\n\t\n\t\n\t/**\n\t * Sets absolute positioning for the panel.\n\t * @return {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.absolute = function() {\n\t this._absolute = true;\n\t return this;\n\t};\n\t\n\t/**\n\t * Sets the value of a position for the panel. Clears any previously set\n\t * position.\n\t * @param {string} position Position to set\n\t * @param {string=} value Value of the position. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t * @private\n\t */\n\tMdPanelPosition.prototype._setPosition = function(position, value) {\n\t if (position === MdPanelPosition.absPosition.RIGHT ||\n\t position === MdPanelPosition.absPosition.LEFT) {\n\t this._left = this._right = '';\n\t } else if (\n\t position === MdPanelPosition.absPosition.BOTTOM ||\n\t position === MdPanelPosition.absPosition.TOP) {\n\t this._top = this._bottom = '';\n\t } else {\n\t var positions = Object.keys(MdPanelPosition.absPosition).join()\n\t .toLowerCase();\n\t\n\t throw new Error('Position must be one of ' + positions + '.');\n\t }\n\t\n\t this['_' + position] = angular.isString(value) ? value : '0';\n\t\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Sets the value of `top` for the panel. Clears any previously set vertical\n\t * position.\n\t * @param {string=} top Value of `top`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.top = function(top) {\n\t return this._setPosition(MdPanelPosition.absPosition.TOP, top);\n\t};\n\t\n\t\n\t/**\n\t * Sets the value of `bottom` for the panel. Clears any previously set vertical\n\t * position.\n\t * @param {string=} bottom Value of `bottom`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.bottom = function(bottom) {\n\t return this._setPosition(MdPanelPosition.absPosition.BOTTOM, bottom);\n\t};\n\t\n\t\n\t/**\n\t * Sets the panel to the start of the page - `left` if `ltr` or `right` for\n\t * `rtl`. Clears any previously set horizontal position.\n\t * @param {string=} start Value of position. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.start = function(start) {\n\t var position = this._isRTL ? MdPanelPosition.absPosition.RIGHT : MdPanelPosition.absPosition.LEFT;\n\t return this._setPosition(position, start);\n\t};\n\t\n\t\n\t/**\n\t * Sets the panel to the end of the page - `right` if `ltr` or `left` for `rtl`.\n\t * Clears any previously set horizontal position.\n\t * @param {string=} end Value of position. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.end = function(end) {\n\t var position = this._isRTL ? MdPanelPosition.absPosition.LEFT : MdPanelPosition.absPosition.RIGHT;\n\t return this._setPosition(position, end);\n\t};\n\t\n\t\n\t/**\n\t * Sets the value of `left` for the panel. Clears any previously set\n\t * horizontal position.\n\t * @param {string=} left Value of `left`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.left = function(left) {\n\t return this._setPosition(MdPanelPosition.absPosition.LEFT, left);\n\t};\n\t\n\t\n\t/**\n\t * Sets the value of `right` for the panel. Clears any previously set\n\t * horizontal position.\n\t * @param {string=} right Value of `right`. Defaults to '0'.\n\t * @returns {!MdPanelPosition}\n\t*/\n\tMdPanelPosition.prototype.right = function(right) {\n\t return this._setPosition(MdPanelPosition.absPosition.RIGHT, right);\n\t};\n\t\n\t\n\t/**\n\t * Centers the panel horizontally in the viewport. Clears any previously set\n\t * horizontal position.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.centerHorizontally = function() {\n\t this._left = '50%';\n\t this._right = '';\n\t this._translateX = ['-50%'];\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Centers the panel vertically in the viewport. Clears any previously set\n\t * vertical position.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.centerVertically = function() {\n\t this._top = '50%';\n\t this._bottom = '';\n\t this._translateY = ['-50%'];\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Centers the panel horizontally and vertically in the viewport. This is\n\t * equivalent to calling both `centerHorizontally` and `centerVertically`.\n\t * Clears any previously set horizontal and vertical positions.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.center = function() {\n\t return this.centerHorizontally().centerVertically();\n\t};\n\t\n\t\n\t/**\n\t * Sets element for relative positioning.\n\t * @param {string|!Element|!angular.JQLite} element Query selector, DOM element,\n\t * or angular element to set the panel relative to.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.relativeTo = function(element) {\n\t this._absolute = false;\n\t this._relativeToEl = getElement(element);\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Sets the x and y positions for the panel relative to another element.\n\t * @param {string} xPosition must be one of the MdPanelPosition.xPosition\n\t * values.\n\t * @param {string} yPosition must be one of the MdPanelPosition.yPosition\n\t * values.\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.addPanelPosition = function(xPosition, yPosition) {\n\t if (!this._relativeToEl) {\n\t throw new Error('addPanelPosition can only be used with relative ' +\n\t 'positioning. Set relativeTo first.');\n\t }\n\t\n\t this._validateXPosition(xPosition);\n\t this._validateYPosition(yPosition);\n\t\n\t this._positions.push({\n\t x: xPosition,\n\t y: yPosition,\n\t });\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Ensures that yPosition is a valid position name. Throw an exception if not.\n\t * @param {string} yPosition\n\t */\n\tMdPanelPosition.prototype._validateYPosition = function(yPosition) {\n\t // empty is ok\n\t if (yPosition == null) {\n\t return;\n\t }\n\t\n\t var positionKeys = Object.keys(MdPanelPosition.yPosition);\n\t var positionValues = [];\n\t for (var key, i = 0; key = positionKeys[i]; i++) {\n\t var position = MdPanelPosition.yPosition[key];\n\t positionValues.push(position);\n\t\n\t if (position === yPosition) {\n\t return;\n\t }\n\t }\n\t\n\t throw new Error('Panel y position only accepts the following values:\\n' +\n\t positionValues.join(' | '));\n\t};\n\t\n\t\n\t/**\n\t * Ensures that xPosition is a valid position name. Throw an exception if not.\n\t * @param {string} xPosition\n\t */\n\tMdPanelPosition.prototype._validateXPosition = function(xPosition) {\n\t // empty is ok\n\t if (xPosition == null) {\n\t return;\n\t }\n\t\n\t var positionKeys = Object.keys(MdPanelPosition.xPosition);\n\t var positionValues = [];\n\t for (var key, i = 0; key = positionKeys[i]; i++) {\n\t var position = MdPanelPosition.xPosition[key];\n\t positionValues.push(position);\n\t if (position === xPosition) {\n\t return;\n\t }\n\t }\n\t\n\t throw new Error('Panel x Position only accepts the following values:\\n' +\n\t positionValues.join(' | '));\n\t};\n\t\n\t\n\t/**\n\t * Sets the value of the offset in the x-direction. This will add to any\n\t * previously set offsets.\n\t * @param {string} offsetX\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.withOffsetX = function(offsetX) {\n\t this._translateX.push(offsetX);\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Sets the value of the offset in the y-direction. This will add to any\n\t * previously set offsets.\n\t * @param {string} offsetY\n\t * @returns {!MdPanelPosition}\n\t */\n\tMdPanelPosition.prototype.withOffsetY = function(offsetY) {\n\t this._translateY.push(offsetY);\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Gets the value of `top` for the panel.\n\t * @returns {string}\n\t */\n\tMdPanelPosition.prototype.getTop = function() {\n\t return this._top;\n\t};\n\t\n\t\n\t/**\n\t * Gets the value of `bottom` for the panel.\n\t * @returns {string}\n\t */\n\tMdPanelPosition.prototype.getBottom = function() {\n\t return this._bottom;\n\t};\n\t\n\t\n\t/**\n\t * Gets the value of `left` for the panel.\n\t * @returns {string}\n\t */\n\tMdPanelPosition.prototype.getLeft = function() {\n\t return this._left;\n\t};\n\t\n\t\n\t/**\n\t * Gets the value of `right` for the panel.\n\t * @returns {string}\n\t */\n\tMdPanelPosition.prototype.getRight = function() {\n\t return this._right;\n\t};\n\t\n\t\n\t/**\n\t * Gets the value of `transform` for the panel.\n\t * @returns {string}\n\t */\n\tMdPanelPosition.prototype.getTransform = function() {\n\t var translateX = this._reduceTranslateValues('translateX', this._translateX);\n\t var translateY = this._reduceTranslateValues('translateY', this._translateY);\n\t\n\t // It's important to trim the result, because the browser will ignore the set\n\t // operation if the string contains only whitespace.\n\t return (translateX + ' ' + translateY).trim();\n\t};\n\t\n\t/**\n\t * True if the panel is completely on-screen with this positioning; false\n\t * otherwise.\n\t * @param {!angular.JQLite} panelEl\n\t * @return {boolean}\n\t */\n\tMdPanelPosition.prototype._isOnscreen = function(panelEl) {\n\t // this works because we always use fixed positioning for the panel,\n\t // which is relative to the viewport.\n\t // TODO(gmoothart): take into account _translateX and _translateY to the\n\t // extent feasible.\n\t\n\t var left = parseInt(this.getLeft());\n\t var top = parseInt(this.getTop());\n\t var right = left + panelEl[0].offsetWidth;\n\t var bottom = top + panelEl[0].offsetHeight;\n\t\n\t return (left >= 0) &&\n\t (top >= 0) &&\n\t (bottom <= this._$window.innerHeight) &&\n\t (right <= this._$window.innerWidth);\n\t};\n\t\n\t\n\t/**\n\t * Gets the first x/y position that can fit on-screen.\n\t * @returns {{x: string, y: string}}\n\t */\n\tMdPanelPosition.prototype.getActualPosition = function() {\n\t return this._actualPosition;\n\t};\n\t\n\t\n\t/**\n\t * Reduces a list of translate values to a string that can be used within\n\t * transform.\n\t * @param {string} translateFn\n\t * @param {!Array} values\n\t * @returns {string}\n\t * @private\n\t */\n\tMdPanelPosition.prototype._reduceTranslateValues =\n\t function(translateFn, values) {\n\t return values.map(function(translation) {\n\t return translateFn + '(' + translation + ')';\n\t }).join(' ');\n\t };\n\t\n\t\n\t/**\n\t * Sets the panel position based on the created panel element and best x/y\n\t * positioning.\n\t * @param {!angular.JQLite} panelEl\n\t * @private\n\t */\n\tMdPanelPosition.prototype._setPanelPosition = function(panelEl) {\n\t // Only calculate the position if necessary.\n\t if (this._absolute) {\n\t return;\n\t }\n\t\n\t if (this._actualPosition) {\n\t this._calculatePanelPosition(panelEl, this._actualPosition);\n\t return;\n\t }\n\t\n\t for (var i = 0; i < this._positions.length; i++) {\n\t this._actualPosition = this._positions[i];\n\t this._calculatePanelPosition(panelEl, this._actualPosition);\n\t if (this._isOnscreen(panelEl)) {\n\t break;\n\t }\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Switches between 'start' and 'end'.\n\t * @param {string} position Horizontal position of the panel\n\t * @returns {string} Reversed position\n\t * @private\n\t */\n\tMdPanelPosition.prototype._reverseXPosition = function(position) {\n\t if (position === MdPanelPosition.xPosition.CENTER) {\n\t return;\n\t }\n\t\n\t var start = 'start';\n\t var end = 'end';\n\t\n\t return position.indexOf(start) > -1 ? position.replace(start, end) : position.replace(end, start);\n\t};\n\t\n\t\n\t/**\n\t * Handles horizontal positioning in rtl or ltr environments.\n\t * @param {string} position Horizontal position of the panel\n\t * @returns {string} The correct position according the page direction\n\t * @private\n\t */\n\tMdPanelPosition.prototype._bidi = function(position) {\n\t return this._isRTL ? this._reverseXPosition(position) : position;\n\t};\n\t\n\t\n\t/**\n\t * Calculates the panel position based on the created panel element and the\n\t * provided positioning.\n\t * @param {!angular.JQLite} panelEl\n\t * @param {!{x:string, y:string}} position\n\t * @private\n\t */\n\tMdPanelPosition.prototype._calculatePanelPosition = function(panelEl, position) {\n\t\n\t var panelBounds = panelEl[0].getBoundingClientRect();\n\t var panelWidth = panelBounds.width;\n\t var panelHeight = panelBounds.height;\n\t\n\t var targetBounds = this._relativeToEl[0].getBoundingClientRect();\n\t\n\t var targetLeft = targetBounds.left;\n\t var targetRight = targetBounds.right;\n\t var targetWidth = targetBounds.width;\n\t\n\t switch (this._bidi(position.x)) {\n\t case MdPanelPosition.xPosition.OFFSET_START:\n\t this._left = targetLeft - panelWidth + 'px';\n\t break;\n\t case MdPanelPosition.xPosition.ALIGN_END:\n\t this._left = targetRight - panelWidth + 'px';\n\t break;\n\t case MdPanelPosition.xPosition.CENTER:\n\t var left = targetLeft + (0.5 * targetWidth) - (0.5 * panelWidth);\n\t this._left = left + 'px';\n\t break;\n\t case MdPanelPosition.xPosition.ALIGN_START:\n\t this._left = targetLeft + 'px';\n\t break;\n\t case MdPanelPosition.xPosition.OFFSET_END:\n\t this._left = targetRight + 'px';\n\t break;\n\t }\n\t\n\t var targetTop = targetBounds.top;\n\t var targetBottom = targetBounds.bottom;\n\t var targetHeight = targetBounds.height;\n\t\n\t switch (position.y) {\n\t case MdPanelPosition.yPosition.ABOVE:\n\t this._top = targetTop - panelHeight + 'px';\n\t break;\n\t case MdPanelPosition.yPosition.ALIGN_BOTTOMS:\n\t this._top = targetBottom - panelHeight + 'px';\n\t break;\n\t case MdPanelPosition.yPosition.CENTER:\n\t var top = targetTop + (0.5 * targetHeight) - (0.5 * panelHeight);\n\t this._top = top + 'px';\n\t break;\n\t case MdPanelPosition.yPosition.ALIGN_TOPS:\n\t this._top = targetTop + 'px';\n\t break;\n\t case MdPanelPosition.yPosition.BELOW:\n\t this._top = targetBottom + 'px';\n\t break;\n\t }\n\t};\n\t\n\t\n\t/*****************************************************************************\n\t * MdPanelAnimation *\n\t *****************************************************************************/\n\t\n\t\n\t/**\n\t * Animation configuration object. To use, create an MdPanelAnimation with the\n\t * desired properties, then pass the object as part of $mdPanel creation.\n\t *\n\t * Example:\n\t *\n\t * var panelAnimation = new MdPanelAnimation()\n\t * .openFrom(myButtonEl)\n\t * .closeTo('.my-button')\n\t * .withAnimation($mdPanel.animation.SCALE);\n\t *\n\t * $mdPanel.create({\n\t * animation: panelAnimation\n\t * });\n\t *\n\t * @param {!angular.$injector} $injector\n\t * @final @constructor\n\t */\n\tfunction MdPanelAnimation($injector) {\n\t /** @private @const {!angular.$mdUtil} */\n\t this._$mdUtil = $injector.get('$mdUtil');\n\t\n\t /**\n\t * @private {{element: !angular.JQLite|undefined, bounds: !DOMRect}|\n\t * undefined}\n\t */\n\t this._openFrom;\n\t\n\t /**\n\t * @private {{element: !angular.JQLite|undefined, bounds: !DOMRect}|\n\t * undefined}\n\t */\n\t this._closeTo;\n\t\n\t /** @private {string|{open: string, close: string}} */\n\t this._animationClass = '';\n\t}\n\t\n\t\n\t/**\n\t * Possible default animations.\n\t * @enum {string}\n\t */\n\tMdPanelAnimation.animation = {\n\t SLIDE: 'md-panel-animate-slide',\n\t SCALE: 'md-panel-animate-scale',\n\t FADE: 'md-panel-animate-fade'\n\t};\n\t\n\t\n\t/**\n\t * Specifies where to start the open animation. `openFrom` accepts a\n\t * click event object, query selector, DOM element, or a Rect object that\n\t * is used to determine the bounds. When passed a click event, the location\n\t * of the click will be used as the position to start the animation.\n\t * @param {string|!Element|!Event|{top: number, left: number}} openFrom\n\t * @returns {!MdPanelAnimation}\n\t */\n\tMdPanelAnimation.prototype.openFrom = function(openFrom) {\n\t // Check if 'openFrom' is an Event.\n\t openFrom = openFrom.target ? openFrom.target : openFrom;\n\t\n\t this._openFrom = this._getPanelAnimationTarget(openFrom);\n\t\n\t if (!this._closeTo) {\n\t this._closeTo = this._openFrom;\n\t }\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Specifies where to animate the panel close. `closeTo` accepts a\n\t * query selector, DOM element, or a Rect object that is used to determine\n\t * the bounds.\n\t * @param {string|!Element|{top: number, left: number}} closeTo\n\t * @returns {!MdPanelAnimation}\n\t */\n\tMdPanelAnimation.prototype.closeTo = function(closeTo) {\n\t this._closeTo = this._getPanelAnimationTarget(closeTo);\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Returns the element and bounds for the animation target.\n\t * @param {string|!Element|{top: number, left: number}} location\n\t * @returns {{element: !angular.JQLite|undefined, bounds: !DOMRect}}\n\t * @private\n\t */\n\tMdPanelAnimation.prototype._getPanelAnimationTarget = function(location) {\n\t if (angular.isDefined(location.top) || angular.isDefined(location.left)) {\n\t return {\n\t element: undefined,\n\t bounds: {\n\t top: location.top || 0,\n\t left: location.left || 0\n\t }\n\t };\n\t } else {\n\t return this._getBoundingClientRect(getElement(location));\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Specifies the animation class.\n\t *\n\t * There are several default animations that can be used:\n\t * (MdPanelAnimation.animation)\n\t * SLIDE: The panel slides in and out from the specified\n\t * elements.\n\t * SCALE: The panel scales in and out.\n\t * FADE: The panel fades in and out.\n\t *\n\t * @param {string|{open: string, close: string}} cssClass\n\t * @returns {!MdPanelAnimation}\n\t */\n\tMdPanelAnimation.prototype.withAnimation = function(cssClass) {\n\t this._animationClass = cssClass;\n\t return this;\n\t};\n\t\n\t\n\t/**\n\t * Animate the panel open.\n\t * @param {!angular.JQLite} panelEl\n\t * @returns {!angular.$q.Promise} A promise that is resolved when the open\n\t * animation is complete.\n\t */\n\tMdPanelAnimation.prototype.animateOpen = function(panelEl) {\n\t var animator = this._$mdUtil.dom.animator;\n\t\n\t this._fixBounds(panelEl);\n\t var animationOptions = {};\n\t\n\t // Include the panel transformations when calculating the animations.\n\t var panelTransform = panelEl[0].style.transform || '';\n\t\n\t var openFrom = animator.toTransformCss(panelTransform);\n\t var openTo = animator.toTransformCss(panelTransform);\n\t\n\t switch (this._animationClass) {\n\t case MdPanelAnimation.animation.SLIDE:\n\t // Slide should start with opacity: 1.\n\t panelEl.css('opacity', '1');\n\t\n\t animationOptions = {\n\t transitionInClass: '_md-panel-animate-enter'\n\t };\n\t\n\t var openSlide = animator.calculateSlideToOrigin(\n\t panelEl, this._openFrom) || '';\n\t openFrom = animator.toTransformCss(openSlide + ' ' + panelTransform);\n\t break;\n\t\n\t case MdPanelAnimation.animation.SCALE:\n\t animationOptions = {\n\t transitionInClass: '_md-panel-animate-enter'\n\t };\n\t\n\t var openScale = animator.calculateZoomToOrigin(\n\t panelEl, this._openFrom) || '';\n\t openFrom = animator.toTransformCss(openScale + ' ' + panelTransform);\n\t break;\n\t\n\t case MdPanelAnimation.animation.FADE:\n\t animationOptions = {\n\t transitionInClass: '_md-panel-animate-enter'\n\t };\n\t break;\n\t\n\t default:\n\t if (angular.isString(this._animationClass)) {\n\t animationOptions = {\n\t transitionInClass: this._animationClass\n\t };\n\t } else {\n\t animationOptions = {\n\t transitionInClass: this._animationClass['open'],\n\t transitionOutClass: this._animationClass['close'],\n\t };\n\t }\n\t }\n\t\n\t return animator\n\t .translate3d(panelEl, openFrom, openTo, animationOptions);\n\t};\n\t\n\t\n\t/**\n\t * Animate the panel close.\n\t * @param {!angular.JQLite} panelEl\n\t * @returns {!angular.$q.Promise} A promise that resolves when the close\n\t * animation is complete.\n\t */\n\tMdPanelAnimation.prototype.animateClose = function(panelEl) {\n\t var animator = this._$mdUtil.dom.animator;\n\t var reverseAnimationOptions = {};\n\t\n\t // Include the panel transformations when calculating the animations.\n\t var panelTransform = panelEl[0].style.transform || '';\n\t\n\t var closeFrom = animator.toTransformCss(panelTransform);\n\t var closeTo = animator.toTransformCss(panelTransform);\n\t\n\t switch (this._animationClass) {\n\t case MdPanelAnimation.animation.SLIDE:\n\t // Slide should start with opacity: 1.\n\t panelEl.css('opacity', '1');\n\t reverseAnimationOptions = {\n\t transitionInClass: '_md-panel-animate-leave'\n\t };\n\t\n\t var closeSlide = animator.calculateSlideToOrigin(\n\t panelEl, this._closeTo) || '';\n\t closeTo = animator.toTransformCss(closeSlide + ' ' + panelTransform);\n\t break;\n\t\n\t case MdPanelAnimation.animation.SCALE:\n\t reverseAnimationOptions = {\n\t transitionInClass: '_md-panel-animate-scale-out _md-panel-animate-leave'\n\t };\n\t\n\t var closeScale = animator.calculateZoomToOrigin(\n\t panelEl, this._closeTo) || '';\n\t closeTo = animator.toTransformCss(closeScale + ' ' + panelTransform);\n\t break;\n\t\n\t case MdPanelAnimation.animation.FADE:\n\t reverseAnimationOptions = {\n\t transitionInClass: '_md-panel-animate-fade-out _md-panel-animate-leave'\n\t };\n\t break;\n\t\n\t default:\n\t if (angular.isString(this._animationClass)) {\n\t reverseAnimationOptions = {\n\t transitionOutClass: this._animationClass\n\t };\n\t } else {\n\t reverseAnimationOptions = {\n\t transitionInClass: this._animationClass['close'],\n\t transitionOutClass: this._animationClass['open']\n\t };\n\t }\n\t }\n\t\n\t return animator\n\t .translate3d(panelEl, closeFrom, closeTo, reverseAnimationOptions);\n\t};\n\t\n\t\n\t/**\n\t * Set the height and width to match the panel if not provided.\n\t * @param {!angular.JQLite} panelEl\n\t * @private\n\t */\n\tMdPanelAnimation.prototype._fixBounds = function(panelEl) {\n\t var panelWidth = panelEl[0].offsetWidth;\n\t var panelHeight = panelEl[0].offsetHeight;\n\t\n\t if (this._openFrom && this._openFrom.bounds.height == null) {\n\t this._openFrom.bounds.height = panelHeight;\n\t }\n\t if (this._openFrom && this._openFrom.bounds.width == null) {\n\t this._openFrom.bounds.width = panelWidth;\n\t }\n\t if (this._closeTo && this._closeTo.bounds.height == null) {\n\t this._closeTo.bounds.height = panelHeight;\n\t }\n\t if (this._closeTo && this._closeTo.bounds.width == null) {\n\t this._closeTo.bounds.width = panelWidth;\n\t }\n\t};\n\t\n\t\n\t/**\n\t * Identify the bounding RECT for the target element.\n\t * @param {!angular.JQLite} element\n\t * @returns {{element: !angular.JQLite|undefined, bounds: !DOMRect}}\n\t * @private\n\t */\n\tMdPanelAnimation.prototype._getBoundingClientRect = function(element) {\n\t if (element instanceof angular.element) {\n\t return {\n\t element: element,\n\t bounds: element[0].getBoundingClientRect()\n\t };\n\t }\n\t};\n\t\n\t\n\t/*****************************************************************************\n\t * Util Methods *\n\t *****************************************************************************/\n\t\n\t/**\n\t * Returns the angular element associated with a css selector or element.\n\t * @param el {string|!angular.JQLite|!Element}\n\t * @returns {!angular.JQLite}\n\t */\n\tfunction getElement(el) {\n\t var queryResult = angular.isString(el) ?\n\t document.querySelector(el) : el;\n\t return angular.element(queryResult);\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.progressCircular\n\t * @description Module for a circular progressbar\n\t */\n\t\n\tangular.module('material.components.progressCircular', ['material.core']);\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.progressLinear\n\t * @description Linear Progress module!\n\t */\n\tMdProgressLinearDirective.$inject = [\"$mdTheming\", \"$mdUtil\", \"$log\"];\n\tangular.module('material.components.progressLinear', [\n\t 'material.core'\n\t])\n\t .directive('mdProgressLinear', MdProgressLinearDirective);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdProgressLinear\n\t * @module material.components.progressLinear\n\t * @restrict E\n\t *\n\t * @description\n\t * The linear progress directive is used to make loading content\n\t * in your app as delightful and painless as possible by minimizing\n\t * the amount of visual change a user sees before they can view\n\t * and interact with content.\n\t *\n\t * Each operation should only be represented by one activity indicator\n\t * For example: one refresh operation should not display both a\n\t * refresh bar and an activity circle.\n\t *\n\t * For operations where the percentage of the operation completed\n\t * can be determined, use a determinate indicator. They give users\n\t * a quick sense of how long an operation will take.\n\t *\n\t * For operations where the user is asked to wait a moment while\n\t * something finishes up, and it’s not necessary to expose what's\n\t * happening behind the scenes and how long it will take, use an\n\t * indeterminate indicator.\n\t *\n\t * @param {string} md-mode Select from one of four modes: determinate, indeterminate, buffer or query.\n\t *\n\t * Note: if the `md-mode` value is set as undefined or specified as 1 of the four (4) valid modes, then `indeterminate`\n\t * will be auto-applied as the mode.\n\t *\n\t * Note: if not configured, the `md-mode=\"indeterminate\"` will be auto injected as an attribute. If `value=\"\"` is also specified, however,\n\t * then `md-mode=\"determinate\"` would be auto-injected instead.\n\t * @param {number=} value In determinate and buffer modes, this number represents the percentage of the primary progress bar. Default: 0\n\t * @param {number=} md-buffer-value In the buffer mode, this number represents the percentage of the secondary progress bar. Default: 0\n\t * @param {boolean=} ng-disabled Determines whether to disable the progress element.\n\t *\n\t * @usage\n\t * \n\t * \n\t *\n\t * \n\t *\n\t * \n\t *\n\t * \n\t *\n\t * \n\t * \n\t */\n\tfunction MdProgressLinearDirective($mdTheming, $mdUtil, $log) {\n\t var MODE_DETERMINATE = \"determinate\";\n\t var MODE_INDETERMINATE = \"indeterminate\";\n\t var MODE_BUFFER = \"buffer\";\n\t var MODE_QUERY = \"query\";\n\t var DISABLED_CLASS = \"_md-progress-linear-disabled\";\n\t\n\t return {\n\t restrict: 'E',\n\t template: '
    ' +\n\t '
    ' +\n\t '
    ' +\n\t '
    ' +\n\t '
    ',\n\t compile: compile\n\t };\n\t\n\t function compile(tElement, tAttrs, transclude) {\n\t tElement.attr('aria-valuemin', 0);\n\t tElement.attr('aria-valuemax', 100);\n\t tElement.attr('role', 'progressbar');\n\t\n\t return postLink;\n\t }\n\t function postLink(scope, element, attr) {\n\t $mdTheming(element);\n\t\n\t var lastMode;\n\t var isDisabled = attr.hasOwnProperty('disabled');\n\t var toVendorCSS = $mdUtil.dom.animator.toCss;\n\t var bar1 = angular.element(element[0].querySelector('.md-bar1'));\n\t var bar2 = angular.element(element[0].querySelector('.md-bar2'));\n\t var container = angular.element(element[0].querySelector('.md-container'));\n\t\n\t element\n\t .attr('md-mode', mode())\n\t .toggleClass(DISABLED_CLASS, isDisabled);\n\t\n\t validateMode();\n\t watchAttributes();\n\t\n\t /**\n\t * Watch the value, md-buffer-value, and md-mode attributes\n\t */\n\t function watchAttributes() {\n\t attr.$observe('value', function(value) {\n\t var percentValue = clamp(value);\n\t element.attr('aria-valuenow', percentValue);\n\t\n\t if (mode() != MODE_QUERY) animateIndicator(bar2, percentValue);\n\t });\n\t\n\t attr.$observe('mdBufferValue', function(value) {\n\t animateIndicator(bar1, clamp(value));\n\t });\n\t\n\t attr.$observe('disabled', function(value) {\n\t if (value === true || value === false) {\n\t isDisabled = !!value;\n\t } else {\n\t isDisabled = angular.isDefined(value);\n\t }\n\t\n\t element.toggleClass(DISABLED_CLASS, isDisabled);\n\t container.toggleClass(lastMode, !isDisabled);\n\t });\n\t\n\t attr.$observe('mdMode', function(mode) {\n\t if (lastMode) container.removeClass( lastMode );\n\t\n\t switch( mode ) {\n\t case MODE_QUERY:\n\t case MODE_BUFFER:\n\t case MODE_DETERMINATE:\n\t case MODE_INDETERMINATE:\n\t container.addClass( lastMode = \"md-mode-\" + mode );\n\t break;\n\t default:\n\t container.addClass( lastMode = \"md-mode-\" + MODE_INDETERMINATE );\n\t break;\n\t }\n\t });\n\t }\n\t\n\t /**\n\t * Auto-defaults the mode to either `determinate` or `indeterminate` mode; if not specified\n\t */\n\t function validateMode() {\n\t if ( angular.isUndefined(attr.mdMode) ) {\n\t var hasValue = angular.isDefined(attr.value);\n\t var mode = hasValue ? MODE_DETERMINATE : MODE_INDETERMINATE;\n\t var info = \"Auto-adding the missing md-mode='{0}' to the ProgressLinear element\";\n\t\n\t //$log.debug( $mdUtil.supplant(info, [mode]) );\n\t\n\t element.attr(\"md-mode\", mode);\n\t attr.mdMode = mode;\n\t }\n\t }\n\t\n\t /**\n\t * Is the md-mode a valid option?\n\t */\n\t function mode() {\n\t var value = (attr.mdMode || \"\").trim();\n\t if ( value ) {\n\t switch(value) {\n\t case MODE_DETERMINATE:\n\t case MODE_INDETERMINATE:\n\t case MODE_BUFFER:\n\t case MODE_QUERY:\n\t break;\n\t default:\n\t value = MODE_INDETERMINATE;\n\t break;\n\t }\n\t }\n\t return value;\n\t }\n\t\n\t /**\n\t * Manually set CSS to animate the Determinate indicator based on the specified\n\t * percentage value (0-100).\n\t */\n\t function animateIndicator(target, value) {\n\t if ( isDisabled || !mode() ) return;\n\t\n\t var to = $mdUtil.supplant(\"translateX({0}%) scale({1},1)\", [ (value-100)/2, value/100 ]);\n\t var styles = toVendorCSS({ transform : to });\n\t angular.element(target).css( styles );\n\t }\n\t }\n\t\n\t /**\n\t * Clamps the value to be between 0 and 100.\n\t * @param {number} value The value to clamp.\n\t * @returns {number}\n\t */\n\t function clamp(value) {\n\t return Math.max(0, Math.min(value || 0, 100));\n\t }\n\t}\n\t\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.radioButton\n\t * @description radioButton module!\n\t */\n\tmdRadioGroupDirective.$inject = [\"$mdUtil\", \"$mdConstant\", \"$mdTheming\", \"$timeout\"];\n\tmdRadioButtonDirective.$inject = [\"$mdAria\", \"$mdUtil\", \"$mdTheming\"];\n\tangular.module('material.components.radioButton', [\n\t 'material.core'\n\t])\n\t .directive('mdRadioGroup', mdRadioGroupDirective)\n\t .directive('mdRadioButton', mdRadioButtonDirective);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @module material.components.radioButton\n\t * @name mdRadioGroup\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * The `` directive identifies a grouping\n\t * container for the 1..n grouped radio buttons; specified using nested\n\t * `` tags.\n\t *\n\t * As per the [material design spec](http://www.google.com/design/spec/style/color.html#color-ui-color-application)\n\t * the radio button is in the accent color by default. The primary color palette may be used with\n\t * the `md-primary` class.\n\t *\n\t * Note: `` and `` handle tabindex differently\n\t * than the native `` controls. Whereas the native controls\n\t * force the user to tab through all the radio buttons, ``\n\t * is focusable, and by default the ``s are not.\n\t *\n\t * @param {string} ng-model Assignable angular expression to data-bind to.\n\t * @param {boolean=} md-no-ink Use of attribute indicates flag to disable ink ripple effects.\n\t *\n\t * @usage\n\t * \n\t * \n\t *\n\t * \n\t *\n\t * {{ d.label }}\n\t *\n\t * \n\t *\n\t * \n\t * \n\t *\n\t */\n\tfunction mdRadioGroupDirective($mdUtil, $mdConstant, $mdTheming, $timeout) {\n\t RadioGroupController.prototype = createRadioGroupControllerProto();\n\t\n\t return {\n\t restrict: 'E',\n\t controller: ['$element', RadioGroupController],\n\t require: ['mdRadioGroup', '?ngModel'],\n\t link: { pre: linkRadioGroup }\n\t };\n\t\n\t function linkRadioGroup(scope, element, attr, ctrls) {\n\t element.addClass('_md'); // private md component indicator for styling\n\t $mdTheming(element);\n\t \n\t var rgCtrl = ctrls[0];\n\t var ngModelCtrl = ctrls[1] || $mdUtil.fakeNgModel();\n\t\n\t rgCtrl.init(ngModelCtrl);\n\t\n\t scope.mouseActive = false;\n\t\n\t element\n\t .attr({\n\t 'role': 'radiogroup',\n\t 'tabIndex': element.attr('tabindex') || '0'\n\t })\n\t .on('keydown', keydownListener)\n\t .on('mousedown', function(event) {\n\t scope.mouseActive = true;\n\t $timeout(function() {\n\t scope.mouseActive = false;\n\t }, 100);\n\t })\n\t .on('focus', function() {\n\t if(scope.mouseActive === false) {\n\t rgCtrl.$element.addClass('md-focused');\n\t }\n\t })\n\t .on('blur', function() {\n\t rgCtrl.$element.removeClass('md-focused');\n\t });\n\t\n\t /**\n\t *\n\t */\n\t function setFocus() {\n\t if (!element.hasClass('md-focused')) { element.addClass('md-focused'); }\n\t }\n\t\n\t /**\n\t *\n\t */\n\t function keydownListener(ev) {\n\t var keyCode = ev.which || ev.keyCode;\n\t\n\t // Only listen to events that we originated ourselves\n\t // so that we don't trigger on things like arrow keys in\n\t // inputs.\n\t\n\t if (keyCode != $mdConstant.KEY_CODE.ENTER &&\n\t ev.currentTarget != ev.target) {\n\t return;\n\t }\n\t\n\t switch (keyCode) {\n\t case $mdConstant.KEY_CODE.LEFT_ARROW:\n\t case $mdConstant.KEY_CODE.UP_ARROW:\n\t ev.preventDefault();\n\t rgCtrl.selectPrevious();\n\t setFocus();\n\t break;\n\t\n\t case $mdConstant.KEY_CODE.RIGHT_ARROW:\n\t case $mdConstant.KEY_CODE.DOWN_ARROW:\n\t ev.preventDefault();\n\t rgCtrl.selectNext();\n\t setFocus();\n\t break;\n\t\n\t case $mdConstant.KEY_CODE.ENTER:\n\t var form = angular.element($mdUtil.getClosest(element[0], 'form'));\n\t if (form.length > 0) {\n\t form.triggerHandler('submit');\n\t }\n\t break;\n\t }\n\t\n\t }\n\t }\n\t\n\t function RadioGroupController($element) {\n\t this._radioButtonRenderFns = [];\n\t this.$element = $element;\n\t }\n\t\n\t function createRadioGroupControllerProto() {\n\t return {\n\t init: function(ngModelCtrl) {\n\t this._ngModelCtrl = ngModelCtrl;\n\t this._ngModelCtrl.$render = angular.bind(this, this.render);\n\t },\n\t add: function(rbRender) {\n\t this._radioButtonRenderFns.push(rbRender);\n\t },\n\t remove: function(rbRender) {\n\t var index = this._radioButtonRenderFns.indexOf(rbRender);\n\t if (index !== -1) {\n\t this._radioButtonRenderFns.splice(index, 1);\n\t }\n\t },\n\t render: function() {\n\t this._radioButtonRenderFns.forEach(function(rbRender) {\n\t rbRender();\n\t });\n\t },\n\t setViewValue: function(value, eventType) {\n\t this._ngModelCtrl.$setViewValue(value, eventType);\n\t // update the other radio buttons as well\n\t this.render();\n\t },\n\t getViewValue: function() {\n\t return this._ngModelCtrl.$viewValue;\n\t },\n\t selectNext: function() {\n\t return changeSelectedButton(this.$element, 1);\n\t },\n\t selectPrevious: function() {\n\t return changeSelectedButton(this.$element, -1);\n\t },\n\t setActiveDescendant: function (radioId) {\n\t this.$element.attr('aria-activedescendant', radioId);\n\t },\n\t isDisabled: function() {\n\t return this.$element[0].hasAttribute('disabled');\n\t }\n\t };\n\t }\n\t /**\n\t * Change the radio group's selected button by a given increment.\n\t * If no button is selected, select the first button.\n\t */\n\t function changeSelectedButton(parent, increment) {\n\t // Coerce all child radio buttons into an array, then wrap then in an iterator\n\t var buttons = $mdUtil.iterator(parent[0].querySelectorAll('md-radio-button'), true);\n\t\n\t if (buttons.count()) {\n\t var validate = function (button) {\n\t // If disabled, then NOT valid\n\t return !angular.element(button).attr(\"disabled\");\n\t };\n\t\n\t var selected = parent[0].querySelector('md-radio-button.md-checked');\n\t var target = buttons[increment < 0 ? 'previous' : 'next'](selected, validate) || buttons.first();\n\t\n\t // Activate radioButton's click listener (triggerHandler won't create a real click event)\n\t angular.element(target).triggerHandler('click');\n\t\n\t\n\t }\n\t }\n\t\n\t}\n\t\n\t/**\n\t * @ngdoc directive\n\t * @module material.components.radioButton\n\t * @name mdRadioButton\n\t *\n\t * @restrict E\n\t *\n\t * @description\n\t * The ``directive is the child directive required to be used within `` elements.\n\t *\n\t * While similar to the `` directive,\n\t * the `` directive provides ink effects, ARIA support, and\n\t * supports use within named radio groups.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t * @param {string} ngValue Angular expression which sets the value to which the expression should\n\t * be set when selected.\n\t * @param {string} value The value to which the expression should be set when selected.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} aria-label Adds label to radio button for accessibility.\n\t * Defaults to radio button's text. If no text content is available, a warning will be logged.\n\t *\n\t * @usage\n\t * \n\t *\n\t * \n\t * Label 1\n\t * \n\t *\n\t * \n\t * Green\n\t * \n\t *\n\t * \n\t *\n\t */\n\tfunction mdRadioButtonDirective($mdAria, $mdUtil, $mdTheming) {\n\t\n\t var CHECKED_CSS = 'md-checked';\n\t\n\t return {\n\t restrict: 'E',\n\t require: '^mdRadioGroup',\n\t transclude: true,\n\t template: '
    ' +\n\t '
    ' +\n\t '
    ' +\n\t '
    ' +\n\t '
    ',\n\t link: link\n\t };\n\t\n\t function link(scope, element, attr, rgCtrl) {\n\t var lastChecked;\n\t\n\t $mdTheming(element);\n\t configureAria(element, scope);\n\t\n\t initialize();\n\t\n\t /**\n\t *\n\t */\n\t function initialize() {\n\t if (!rgCtrl) {\n\t throw 'RadioButton: No RadioGroupController could be found.';\n\t }\n\t\n\t rgCtrl.add(render);\n\t attr.$observe('value', render);\n\t\n\t element\n\t .on('click', listener)\n\t .on('$destroy', function() {\n\t rgCtrl.remove(render);\n\t });\n\t }\n\t\n\t /**\n\t *\n\t */\n\t function listener(ev) {\n\t if (element[0].hasAttribute('disabled') || rgCtrl.isDisabled()) return;\n\t\n\t scope.$apply(function() {\n\t rgCtrl.setViewValue(attr.value, ev && ev.type);\n\t });\n\t }\n\t\n\t /**\n\t * Add or remove the `.md-checked` class from the RadioButton (and conditionally its parent).\n\t * Update the `aria-activedescendant` attribute.\n\t */\n\t function render() {\n\t var checked = (rgCtrl.getViewValue() == attr.value);\n\t if (checked === lastChecked) {\n\t return;\n\t }\n\t\n\t lastChecked = checked;\n\t element.attr('aria-checked', checked);\n\t\n\t if (checked) {\n\t markParentAsChecked(true);\n\t element.addClass(CHECKED_CSS);\n\t\n\t rgCtrl.setActiveDescendant(element.attr('id'));\n\t\n\t } else {\n\t markParentAsChecked(false);\n\t element.removeClass(CHECKED_CSS);\n\t }\n\t\n\t /**\n\t * If the radioButton is inside a div, then add class so highlighting will work...\n\t */\n\t function markParentAsChecked(addClass ) {\n\t if ( element.parent()[0].nodeName != \"MD-RADIO-GROUP\") {\n\t element.parent()[ !!addClass ? 'addClass' : 'removeClass'](CHECKED_CSS);\n\t }\n\t\n\t }\n\t }\n\t\n\t /**\n\t * Inject ARIA-specific attributes appropriate for each radio button\n\t */\n\t function configureAria( element, scope ){\n\t scope.ariaId = buildAriaID();\n\t\n\t element.attr({\n\t 'id' : scope.ariaId,\n\t 'role' : 'radio',\n\t 'aria-checked' : 'false'\n\t });\n\t\n\t $mdAria.expectWithText(element, 'aria-label');\n\t\n\t /**\n\t * Build a unique ID for each radio button that will be used with aria-activedescendant.\n\t * Preserve existing ID if already specified.\n\t * @returns {*|string}\n\t */\n\t function buildAriaID() {\n\t return attr.id || ( 'radio' + \"_\" + $mdUtil.nextUid() );\n\t }\n\t }\n\t }\n\t}\n\t\n\t})();\n\t(function(){\n\t\"use strict\";\n\t\n\t/**\n\t * @ngdoc module\n\t * @name material.components.select\n\t */\n\t\n\t/***************************************************\n\t\n\t ### TODO - POST RC1 ###\n\t - [ ] Abstract placement logic in $mdSelect service to $mdMenu service\n\t\n\t ***************************************************/\n\t\n\tSelectDirective.$inject = [\"$mdSelect\", \"$mdUtil\", \"$mdConstant\", \"$mdTheming\", \"$mdAria\", \"$compile\", \"$parse\"];\n\tSelectMenuDirective.$inject = [\"$parse\", \"$mdUtil\", \"$mdConstant\", \"$mdTheming\"];\n\tOptionDirective.$inject = [\"$mdButtonInkRipple\", \"$mdUtil\"];\n\tSelectProvider.$inject = [\"$$interimElementProvider\"];\n\tvar SELECT_EDGE_MARGIN = 8;\n\tvar selectNextId = 0;\n\tvar CHECKBOX_SELECTION_INDICATOR =\n\t angular.element('
    ');\n\t\n\tangular.module('material.components.select', [\n\t 'material.core',\n\t 'material.components.backdrop'\n\t ])\n\t .directive('mdSelect', SelectDirective)\n\t .directive('mdSelectMenu', SelectMenuDirective)\n\t .directive('mdOption', OptionDirective)\n\t .directive('mdOptgroup', OptgroupDirective)\n\t .directive('mdSelectHeader', SelectHeaderDirective)\n\t .provider('$mdSelect', SelectProvider);\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name mdSelect\n\t * @restrict E\n\t * @module material.components.select\n\t *\n\t * @description Displays a select box, bound to an ng-model.\n\t *\n\t * When the select is required and uses a floating label, then the label will automatically contain\n\t * an asterisk (`*`). This behavior can be disabled by using the `md-no-asterisk` attribute.\n\t *\n\t * By default, the select will display with an underline to match other form elements. This can be\n\t * disabled by applying the `md-no-underline` CSS class.\n\t *\n\t * ### Option Params\n\t *\n\t * When applied, `md-option-empty` will mark the option as \"empty\" allowing the option to clear the\n\t * select and put it back in it's default state. You may supply this attribute on any option you\n\t * wish, however, it is automatically applied to an option whose `value` or `ng-value` are not\n\t * defined.\n\t *\n\t * **Automatically Applied**\n\t *\n\t * - ``\n\t * - ``\n\t * - ``\n\t * - ``\n\t * - ``\n\t *\n\t * **NOT Automatically Applied**\n\t *\n\t * - ``\n\t * - ``\n\t * - ``\n\t * - `` (this evaluates to the string `\"undefined\"`)\n\t * - <md-option ng-value=\"{{someValueThatMightBeUndefined}}\">\n\t *\n\t * **Note:** A value of `undefined` ***is considered a valid value*** (and does not auto-apply this\n\t * attribute) since you may wish this to be your \"Not Available\" or \"None\" option.\n\t *\n\t * **Note:** Using the `value` attribute (as opposed to `ng-value`) always evaluates to a string, so\n\t * `value=\"null\"` will require the test `ng-if=\"myValue != 'null'\"` rather than `ng-if=\"!myValue\"`.\n\t *\n\t * @param {expression} ng-model The model!\n\t * @param {boolean=} multiple Whether it's multiple.\n\t * @param {expression=} md-on-close Expression to be evaluated when the select is closed.\n\t * @param {expression=} md-on-open Expression to be evaluated when opening the select.\n\t * Will hide the select options and show a spinner until the evaluated promise resolves.\n\t * @param {expression=} md-selected-text Expression to be evaluated that will return a string\n\t * to be displayed as a placeholder in the select input box when it is closed.\n\t * @param {string=} placeholder Placeholder hint text.\n\t * @param md-no-asterisk {boolean=} When set to true, an asterisk will not be appended to the\n\t * floating label. **Note:** This attribute is only evaluated once; it is not watched.\n\t * @param {string=} aria-label Optional label for accessibility. Only necessary if no placeholder or\n\t * explicit label is present.\n\t * @param {string=} md-container-class Class list to get applied to the `.md-select-menu-container`\n\t * element (for custom styling).\n\t *\n\t * @usage\n\t * With a placeholder (label and aria-label are added dynamically)\n\t * \n\t * \n\t * \n\t * {{ opt }}\n\t * \n\t * \n\t * \n\t *\n\t * With an explicit label\n\t * \n\t * \n\t * \n\t * \n\t * {{ opt }}\n\t * \n\t * \n\t * \n\t *\n\t * With a select-header\n\t *\n\t * When a developer needs to put more than just a text label in the\n\t * md-select-menu, they should use the md-select-header.\n\t * The user can put custom HTML inside of the header and style it to their liking.\n\t * One common use case of this would be a sticky search bar.\n\t *\n\t * When using the md-select-header the labels that would previously be added to the\n\t * OptGroupDirective are ignored.\n\t *\n\t * \n\t * \n\t * \n\t * \n\t * Neighborhoods - \n\t * \n\t * {{ opt }}\n\t * \n\t * \n\t * \n\t *\n\t * ## Selects and object equality\n\t * When using a `md-select` to pick from a list of objects, it is important to realize how javascript handles\n\t * equality. Consider the following example:\n\t * \n\t * angular.controller('MyCtrl', function($scope) {\n\t * $scope.users = [\n\t * { id: 1, name: 'Bob' },\n\t * { id: 2, name: 'Alice' },\n\t * { id: 3, name: 'Steve' }\n\t * ];\n\t * $scope.selectedUser = { id: 1, name: 'Bob' };\n\t * });\n\t * \n\t * \n\t *
    \n\t * \n\t * {{ user.name }}\n\t * \n\t *
    \n\t *
    \n\t *\n\t * At first one might expect that the select should be populated with \"Bob\" as the selected user. However,\n\t * this is not true. To determine whether something is selected,\n\t * `ngModelController` is looking at whether `$scope.selectedUser == (any user in $scope.users);`;\n\t *\n\t * Javascript's `==` operator does not check for deep equality (ie. that all properties\n\t * on the object are the same), but instead whether the objects are *the same object in memory*.\n\t * In this case, we have two instances of identical objects, but they exist in memory as unique\n\t * entities. Because of this, the select will have no value populated for a selected user.\n\t *\n\t * To get around this, `ngModelController` provides a `track by` option that allows us to specify a different\n\t * expression which will be used for the equality operator. As such, we can update our `html` to\n\t * make use of this by specifying the `ng-model-options=\"{trackBy: '$value.id'}\"` on the `md-select`\n\t * element. This converts our equality expression to be\n\t * `$scope.selectedUser.id == (any id in $scope.users.map(function(u) { return u.id; }));`\n\t * which results in Bob being selected as desired.\n\t *\n\t * Working HTML:\n\t * \n\t *
    \n\t * \n\t * {{ user.name }}\n\t * \n\t *
    \n\t *
    \n\t */\n\tfunction SelectDirective($mdSelect, $mdUtil, $mdConstant, $mdTheming, $mdAria, $compile, $parse) {\n\t var keyCodes = $mdConstant.KEY_CODE;\n\t var NAVIGATION_KEYS = [keyCodes.SPACE, keyCodes.ENTER, keyCodes.UP_ARROW, keyCodes.DOWN_ARROW];\n\t\n\t return {\n\t restrict: 'E',\n\t require: ['^?mdInputContainer', 'mdSelect', 'ngModel', '?^form'],\n\t compile: compile,\n\t controller: function() {\n\t } // empty placeholder controller to be initialized in link\n\t };\n\t\n\t function compile(element, attr) {\n\t // add the select value that will hold our placeholder or selected option value\n\t var valueEl = angular.element('');\n\t valueEl.append('');\n\t valueEl.addClass('md-select-value');\n\t if (!valueEl[0].hasAttribute('id')) {\n\t valueEl.attr('id', 'select_value_label_' + $mdUtil.nextUid());\n\t }\n\t\n\t // There's got to be an md-content inside. If there's not one, let's add it.\n\t if (!element.find('md-content').length) {\n\t element.append(angular.element('').append(element.contents()));\n\t }\n\t\n\t\n\t // Add progress spinner for md-options-loading\n\t if (attr.mdOnOpen) {\n\t\n\t // Show progress indicator while loading async\n\t // Use ng-hide for `display:none` so the indicator does not interfere with the options list\n\t element\n\t .find('md-content')\n\t .prepend(angular.element(\n\t '
    ' +\n\t ' ' +\n\t '
    '\n\t ));\n\t\n\t // Hide list [of item options] while loading async\n\t element\n\t .find('md-option')\n\t .attr('ng-show', '$$loadingAsyncDone');\n\t }\n\t\n\t if (attr.name) {\n\t var autofillClone = angular.element(',
    \n\t
    \n\t
    \n\t \n\t \n\t it('should auto compile', function() {\n\t var textarea = $('textarea');\n\t var output = $('div[compile]');\n\t // The initial state reads 'Hello Angular'.\n\t expect(output.getText()).toBe('Hello Angular');\n\t textarea.clear();\n\t textarea.sendKeys('{{name}}!');\n\t expect(output.getText()).toBe('Angular!');\n\t });\n\t \n\t \n\t\n\t *\n\t *\n\t * @param {string|DOMElement} element Element or HTML string to compile into a template function.\n\t * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.\n\t *\n\t *
    \n\t * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it\n\t * e.g. will not use the right outer scope. Please pass the transclude function as a\n\t * `parentBoundTranscludeFn` to the link function instead.\n\t *
    \n\t *\n\t * @param {number} maxPriority only apply directives lower than given priority (Only effects the\n\t * root element(s), not their children)\n\t * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template\n\t * (a DOM element/tree) to a scope. Where:\n\t *\n\t * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.\n\t * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the\n\t * `template` and call the `cloneAttachFn` function allowing the caller to attach the\n\t * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is\n\t * called as:
    `cloneAttachFn(clonedElement, scope)` where:\n\t *\n\t * * `clonedElement` - is a clone of the original `element` passed into the compiler.\n\t * * `scope` - is the current scope with which the linking function is working with.\n\t *\n\t * * `options` - An optional object hash with linking options. If `options` is provided, then the following\n\t * keys may be used to control linking behavior:\n\t *\n\t * * `parentBoundTranscludeFn` - the transclude function made available to\n\t * directives; if given, it will be passed through to the link functions of\n\t * directives found in `element` during compilation.\n\t * * `transcludeControllers` - an object hash with keys that map controller names\n\t * to a hash with the key `instance`, which maps to the controller instance;\n\t * if given, it will make the controllers available to directives on the compileNode:\n\t * ```\n\t * {\n\t * parent: {\n\t * instance: parentControllerInstance\n\t * }\n\t * }\n\t * ```\n\t * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add\n\t * the cloned elements; only needed for transcludes that are allowed to contain non html\n\t * elements (e.g. SVG elements). See also the directive.controller property.\n\t *\n\t * Calling the linking function returns the element of the template. It is either the original\n\t * element passed in, or the clone of the element if the `cloneAttachFn` is provided.\n\t *\n\t * After linking the view is not updated until after a call to $digest which typically is done by\n\t * Angular automatically.\n\t *\n\t * If you need access to the bound view, there are two ways to do it:\n\t *\n\t * - If you are not asking the linking function to clone the template, create the DOM element(s)\n\t * before you send them to the compiler and keep this reference around.\n\t * ```js\n\t * var element = $compile('

    {{total}}

    ')(scope);\n\t * ```\n\t *\n\t * - if on the other hand, you need the element to be cloned, the view reference from the original\n\t * example would not point to the clone, but rather to the original template that was cloned. In\n\t * this case, you can access the clone via the cloneAttachFn:\n\t * ```js\n\t * var templateElement = angular.element('

    {{total}}

    '),\n\t * scope = ....;\n\t *\n\t * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {\n\t * //attach the clone to DOM document at the right place\n\t * });\n\t *\n\t * //now we have reference to the cloned DOM via `clonedElement`\n\t * ```\n\t *\n\t *\n\t * For information on how the compiler works, see the\n\t * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.\n\t */\n\t\n\tvar $compileMinErr = minErr('$compile');\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $compileProvider\n\t *\n\t * @description\n\t */\n\t$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];\n\tfunction $CompileProvider($provide, $$sanitizeUriProvider) {\n\t var hasDirectives = {},\n\t Suffix = 'Directive',\n\t COMMENT_DIRECTIVE_REGEXP = /^\\s*directive\\:\\s*([\\w\\-]+)\\s+(.*)$/,\n\t CLASS_DIRECTIVE_REGEXP = /(([\\w\\-]+)(?:\\:([^;]+))?;?)/,\n\t ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),\n\t REQUIRE_PREFIX_REGEXP = /^(?:(\\^\\^?)?(\\?)?(\\^\\^?)?)?/;\n\t\n\t // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes\n\t // The assumption is that future DOM event attribute names will begin with\n\t // 'on' and be composed of only English letters.\n\t var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;\n\t\n\t function parseIsolateBindings(scope, directiveName, isController) {\n\t var LOCAL_REGEXP = /^\\s*([@&<]|=(\\*?))(\\??)\\s*(\\w*)\\s*$/;\n\t\n\t var bindings = {};\n\t\n\t forEach(scope, function(definition, scopeName) {\n\t var match = definition.match(LOCAL_REGEXP);\n\t\n\t if (!match) {\n\t throw $compileMinErr('iscp',\n\t \"Invalid {3} for directive '{0}'.\" +\n\t \" Definition: {... {1}: '{2}' ...}\",\n\t directiveName, scopeName, definition,\n\t (isController ? \"controller bindings definition\" :\n\t \"isolate scope definition\"));\n\t }\n\t\n\t bindings[scopeName] = {\n\t mode: match[1][0],\n\t collection: match[2] === '*',\n\t optional: match[3] === '?',\n\t attrName: match[4] || scopeName\n\t };\n\t });\n\t\n\t return bindings;\n\t }\n\t\n\t function parseDirectiveBindings(directive, directiveName) {\n\t var bindings = {\n\t isolateScope: null,\n\t bindToController: null\n\t };\n\t if (isObject(directive.scope)) {\n\t if (directive.bindToController === true) {\n\t bindings.bindToController = parseIsolateBindings(directive.scope,\n\t directiveName, true);\n\t bindings.isolateScope = {};\n\t } else {\n\t bindings.isolateScope = parseIsolateBindings(directive.scope,\n\t directiveName, false);\n\t }\n\t }\n\t if (isObject(directive.bindToController)) {\n\t bindings.bindToController =\n\t parseIsolateBindings(directive.bindToController, directiveName, true);\n\t }\n\t if (isObject(bindings.bindToController)) {\n\t var controller = directive.controller;\n\t var controllerAs = directive.controllerAs;\n\t if (!controller) {\n\t // There is no controller, there may or may not be a controllerAs property\n\t throw $compileMinErr('noctrl',\n\t \"Cannot bind to controller without directive '{0}'s controller.\",\n\t directiveName);\n\t } else if (!identifierForController(controller, controllerAs)) {\n\t // There is a controller, but no identifier or controllerAs property\n\t throw $compileMinErr('noident',\n\t \"Cannot bind to controller without identifier for directive '{0}'.\",\n\t directiveName);\n\t }\n\t }\n\t return bindings;\n\t }\n\t\n\t function assertValidDirectiveName(name) {\n\t var letter = name.charAt(0);\n\t if (!letter || letter !== lowercase(letter)) {\n\t throw $compileMinErr('baddir', \"Directive name '{0}' is invalid. The first character must be a lowercase letter\", name);\n\t }\n\t if (name !== name.trim()) {\n\t throw $compileMinErr('baddir',\n\t \"Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces\",\n\t name);\n\t }\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compileProvider#directive\n\t * @kind function\n\t *\n\t * @description\n\t * Register a new directive with the compiler.\n\t *\n\t * @param {string|Object} name Name of the directive in camel-case (i.e. ngBind which\n\t * will match as ng-bind), or an object map of directives where the keys are the\n\t * names and the values are the factories.\n\t * @param {Function|Array} directiveFactory An injectable directive factory function. See the\n\t * {@link guide/directive directive guide} and the {@link $compile compile API} for more info.\n\t * @returns {ng.$compileProvider} Self for chaining.\n\t */\n\t this.directive = function registerDirective(name, directiveFactory) {\n\t assertNotHasOwnProperty(name, 'directive');\n\t if (isString(name)) {\n\t assertValidDirectiveName(name);\n\t assertArg(directiveFactory, 'directiveFactory');\n\t if (!hasDirectives.hasOwnProperty(name)) {\n\t hasDirectives[name] = [];\n\t $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',\n\t function($injector, $exceptionHandler) {\n\t var directives = [];\n\t forEach(hasDirectives[name], function(directiveFactory, index) {\n\t try {\n\t var directive = $injector.invoke(directiveFactory);\n\t if (isFunction(directive)) {\n\t directive = { compile: valueFn(directive) };\n\t } else if (!directive.compile && directive.link) {\n\t directive.compile = valueFn(directive.link);\n\t }\n\t directive.priority = directive.priority || 0;\n\t directive.index = index;\n\t directive.name = directive.name || name;\n\t directive.require = directive.require || (directive.controller && directive.name);\n\t directive.restrict = directive.restrict || 'EA';\n\t var bindings = directive.$$bindings =\n\t parseDirectiveBindings(directive, directive.name);\n\t if (isObject(bindings.isolateScope)) {\n\t directive.$$isolateBindings = bindings.isolateScope;\n\t }\n\t directive.$$moduleName = directiveFactory.$$moduleName;\n\t directives.push(directive);\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t });\n\t return directives;\n\t }]);\n\t }\n\t hasDirectives[name].push(directiveFactory);\n\t } else {\n\t forEach(name, reverseParams(registerDirective));\n\t }\n\t return this;\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compileProvider#component\n\t * @module ng\n\t * @param {string} name Name of the component in camelCase (i.e. `myComp` which will match ``)\n\t * @param {Object} options Component definition object (a simplified\n\t * {@link ng.$compile#directive-definition-object directive definition object}),\n\t * with the following properties (all optional):\n\t *\n\t * - `controller` – `{(string|function()=}` – controller constructor function that should be\n\t * associated with newly created scope or the name of a {@link ng.$compile#-controller-\n\t * registered controller} if passed as a string. An empty `noop` function by default.\n\t * - `controllerAs` – `{string=}` – identifier name for to reference the controller in the component's scope.\n\t * If present, the controller will be published to scope under the `controllerAs` name.\n\t * If not present, this will default to be `$ctrl`.\n\t * - `template` – `{string=|function()=}` – html template as a string or a function that\n\t * returns an html template as a string which should be used as the contents of this component.\n\t * Empty string by default.\n\t *\n\t * If `template` is a function, then it is {@link auto.$injector#invoke injected} with\n\t * the following locals:\n\t *\n\t * - `$element` - Current element\n\t * - `$attrs` - Current attributes object for the element\n\t *\n\t * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html\n\t * template that should be used as the contents of this component.\n\t *\n\t * If `templateUrl` is a function, then it is {@link auto.$injector#invoke injected} with\n\t * the following locals:\n\t *\n\t * - `$element` - Current element\n\t * - `$attrs` - Current attributes object for the element\n\t *\n\t * - `bindings` – `{object=}` – defines bindings between DOM attributes and component properties.\n\t * Component properties are always bound to the component controller and not to the scope.\n\t * See {@link ng.$compile#-bindtocontroller- `bindToController`}.\n\t * - `transclude` – `{boolean=}` – whether {@link $compile#transclusion content transclusion} is enabled.\n\t * Disabled by default.\n\t * - `$...` – `{function()=}` – additional annotations to provide to the directive factory function.\n\t *\n\t * @returns {ng.$compileProvider} the compile provider itself, for chaining of function calls.\n\t * @description\n\t * Register a **component definition** with the compiler. This is a shorthand for registering a special\n\t * type of directive, which represents a self-contained UI component in your application. Such components\n\t * are always isolated (i.e. `scope: {}`) and are always restricted to elements (i.e. `restrict: 'E'`).\n\t *\n\t * Component definitions are very simple and do not require as much configuration as defining general\n\t * directives. Component definitions usually consist only of a template and a controller backing it.\n\t *\n\t * In order to make the definition easier, components enforce best practices like use of `controllerAs`,\n\t * `bindToController`. They always have **isolate scope** and are restricted to elements.\n\t *\n\t * Here are a few examples of how you would usually define components:\n\t *\n\t * ```js\n\t * var myMod = angular.module(...);\n\t * myMod.component('myComp', {\n\t * template: '
    My name is {{$ctrl.name}}
    ',\n\t * controller: function() {\n\t * this.name = 'shahar';\n\t * }\n\t * });\n\t *\n\t * myMod.component('myComp', {\n\t * template: '
    My name is {{$ctrl.name}}
    ',\n\t * bindings: {name: '@'}\n\t * });\n\t *\n\t * myMod.component('myComp', {\n\t * templateUrl: 'views/my-comp.html',\n\t * controller: 'MyCtrl as ctrl',\n\t * bindings: {name: '@'}\n\t * });\n\t *\n\t * ```\n\t * For more examples, and an in-depth guide, see the {@link guide/component component guide}.\n\t *\n\t *
    \n\t * See also {@link ng.$compileProvider#directive $compileProvider.directive()}.\n\t */\n\t this.component = function registerComponent(name, options) {\n\t var controller = options.controller || function() {};\n\t\n\t function factory($injector) {\n\t function makeInjectable(fn) {\n\t if (isFunction(fn) || isArray(fn)) {\n\t return function(tElement, tAttrs) {\n\t return $injector.invoke(fn, this, {$element: tElement, $attrs: tAttrs});\n\t };\n\t } else {\n\t return fn;\n\t }\n\t }\n\t\n\t var template = (!options.template && !options.templateUrl ? '' : options.template);\n\t return {\n\t controller: controller,\n\t controllerAs: identifierForController(options.controller) || options.controllerAs || '$ctrl',\n\t template: makeInjectable(template),\n\t templateUrl: makeInjectable(options.templateUrl),\n\t transclude: options.transclude,\n\t scope: {},\n\t bindToController: options.bindings || {},\n\t restrict: 'E',\n\t require: options.require\n\t };\n\t }\n\t\n\t // Copy any annotation properties (starting with $) over to the factory function\n\t // These could be used by libraries such as the new component router\n\t forEach(options, function(val, key) {\n\t if (key.charAt(0) === '$') {\n\t factory[key] = val;\n\t }\n\t });\n\t\n\t factory.$inject = ['$injector'];\n\t\n\t return this.directive(name, factory);\n\t };\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compileProvider#aHrefSanitizationWhitelist\n\t * @kind function\n\t *\n\t * @description\n\t * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n\t * urls during a[href] sanitization.\n\t *\n\t * The sanitization is a security measure aimed at preventing XSS attacks via html links.\n\t *\n\t * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n\t * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n\t * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n\t * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n\t *\n\t * @param {RegExp=} regexp New regexp to whitelist urls with.\n\t * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n\t * chaining otherwise.\n\t */\n\t this.aHrefSanitizationWhitelist = function(regexp) {\n\t if (isDefined(regexp)) {\n\t $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);\n\t return this;\n\t } else {\n\t return $$sanitizeUriProvider.aHrefSanitizationWhitelist();\n\t }\n\t };\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compileProvider#imgSrcSanitizationWhitelist\n\t * @kind function\n\t *\n\t * @description\n\t * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n\t * urls during img[src] sanitization.\n\t *\n\t * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n\t *\n\t * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n\t * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n\t * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n\t * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n\t *\n\t * @param {RegExp=} regexp New regexp to whitelist urls with.\n\t * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n\t * chaining otherwise.\n\t */\n\t this.imgSrcSanitizationWhitelist = function(regexp) {\n\t if (isDefined(regexp)) {\n\t $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);\n\t return this;\n\t } else {\n\t return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();\n\t }\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compileProvider#debugInfoEnabled\n\t *\n\t * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the\n\t * current debugInfoEnabled state\n\t * @returns {*} current value if used as getter or itself (chaining) if used as setter\n\t *\n\t * @kind function\n\t *\n\t * @description\n\t * Call this method to enable/disable various debug runtime information in the compiler such as adding\n\t * binding information and a reference to the current scope on to DOM elements.\n\t * If enabled, the compiler will add the following to DOM elements that have been bound to the scope\n\t * * `ng-binding` CSS class\n\t * * `$binding` data property containing an array of the binding expressions\n\t *\n\t * You may want to disable this in production for a significant performance boost. See\n\t * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.\n\t *\n\t * The default value is true.\n\t */\n\t var debugInfoEnabled = true;\n\t this.debugInfoEnabled = function(enabled) {\n\t if (isDefined(enabled)) {\n\t debugInfoEnabled = enabled;\n\t return this;\n\t }\n\t return debugInfoEnabled;\n\t };\n\t\n\t this.$get = [\n\t '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',\n\t '$controller', '$rootScope', '$sce', '$animate', '$$sanitizeUri',\n\t function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse,\n\t $controller, $rootScope, $sce, $animate, $$sanitizeUri) {\n\t\n\t var SIMPLE_ATTR_NAME = /^\\w/;\n\t var specialAttrHolder = document.createElement('div');\n\t var Attributes = function(element, attributesToCopy) {\n\t if (attributesToCopy) {\n\t var keys = Object.keys(attributesToCopy);\n\t var i, l, key;\n\t\n\t for (i = 0, l = keys.length; i < l; i++) {\n\t key = keys[i];\n\t this[key] = attributesToCopy[key];\n\t }\n\t } else {\n\t this.$attr = {};\n\t }\n\t\n\t this.$$element = element;\n\t };\n\t\n\t Attributes.prototype = {\n\t /**\n\t * @ngdoc method\n\t * @name $compile.directive.Attributes#$normalize\n\t * @kind function\n\t *\n\t * @description\n\t * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or\n\t * `data-`) to its normalized, camelCase form.\n\t *\n\t * Also there is special case for Moz prefix starting with upper case letter.\n\t *\n\t * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}\n\t *\n\t * @param {string} name Name to normalize\n\t */\n\t $normalize: directiveNormalize,\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compile.directive.Attributes#$addClass\n\t * @kind function\n\t *\n\t * @description\n\t * Adds the CSS class value specified by the classVal parameter to the element. If animations\n\t * are enabled then an animation will be triggered for the class addition.\n\t *\n\t * @param {string} classVal The className value that will be added to the element\n\t */\n\t $addClass: function(classVal) {\n\t if (classVal && classVal.length > 0) {\n\t $animate.addClass(this.$$element, classVal);\n\t }\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compile.directive.Attributes#$removeClass\n\t * @kind function\n\t *\n\t * @description\n\t * Removes the CSS class value specified by the classVal parameter from the element. If\n\t * animations are enabled then an animation will be triggered for the class removal.\n\t *\n\t * @param {string} classVal The className value that will be removed from the element\n\t */\n\t $removeClass: function(classVal) {\n\t if (classVal && classVal.length > 0) {\n\t $animate.removeClass(this.$$element, classVal);\n\t }\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compile.directive.Attributes#$updateClass\n\t * @kind function\n\t *\n\t * @description\n\t * Adds and removes the appropriate CSS class values to the element based on the difference\n\t * between the new and old CSS class values (specified as newClasses and oldClasses).\n\t *\n\t * @param {string} newClasses The current CSS className value\n\t * @param {string} oldClasses The former CSS className value\n\t */\n\t $updateClass: function(newClasses, oldClasses) {\n\t var toAdd = tokenDifference(newClasses, oldClasses);\n\t if (toAdd && toAdd.length) {\n\t $animate.addClass(this.$$element, toAdd);\n\t }\n\t\n\t var toRemove = tokenDifference(oldClasses, newClasses);\n\t if (toRemove && toRemove.length) {\n\t $animate.removeClass(this.$$element, toRemove);\n\t }\n\t },\n\t\n\t /**\n\t * Set a normalized attribute on the element in a way such that all directives\n\t * can share the attribute. This function properly handles boolean attributes.\n\t * @param {string} key Normalized key. (ie ngAttribute)\n\t * @param {string|boolean} value The value to set. If `null` attribute will be deleted.\n\t * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.\n\t * Defaults to true.\n\t * @param {string=} attrName Optional none normalized name. Defaults to key.\n\t */\n\t $set: function(key, value, writeAttr, attrName) {\n\t // TODO: decide whether or not to throw an error if \"class\"\n\t //is set through this function since it may cause $updateClass to\n\t //become unstable.\n\t\n\t var node = this.$$element[0],\n\t booleanKey = getBooleanAttrName(node, key),\n\t aliasedKey = getAliasedAttrName(key),\n\t observer = key,\n\t nodeName;\n\t\n\t if (booleanKey) {\n\t this.$$element.prop(key, value);\n\t attrName = booleanKey;\n\t } else if (aliasedKey) {\n\t this[aliasedKey] = value;\n\t observer = aliasedKey;\n\t }\n\t\n\t this[key] = value;\n\t\n\t // translate normalized key to actual key\n\t if (attrName) {\n\t this.$attr[key] = attrName;\n\t } else {\n\t attrName = this.$attr[key];\n\t if (!attrName) {\n\t this.$attr[key] = attrName = snake_case(key, '-');\n\t }\n\t }\n\t\n\t nodeName = nodeName_(this.$$element);\n\t\n\t if ((nodeName === 'a' && (key === 'href' || key === 'xlinkHref')) ||\n\t (nodeName === 'img' && key === 'src')) {\n\t // sanitize a[href] and img[src] values\n\t this[key] = value = $$sanitizeUri(value, key === 'src');\n\t } else if (nodeName === 'img' && key === 'srcset') {\n\t // sanitize img[srcset] values\n\t var result = \"\";\n\t\n\t // first check if there are spaces because it's not the same pattern\n\t var trimmedSrcset = trim(value);\n\t // ( 999x ,| 999w ,| ,|, )\n\t var srcPattern = /(\\s+\\d+x\\s*,|\\s+\\d+w\\s*,|\\s+,|,\\s+)/;\n\t var pattern = /\\s/.test(trimmedSrcset) ? srcPattern : /(,)/;\n\t\n\t // split srcset into tuple of uri and descriptor except for the last item\n\t var rawUris = trimmedSrcset.split(pattern);\n\t\n\t // for each tuples\n\t var nbrUrisWith2parts = Math.floor(rawUris.length / 2);\n\t for (var i = 0; i < nbrUrisWith2parts; i++) {\n\t var innerIdx = i * 2;\n\t // sanitize the uri\n\t result += $$sanitizeUri(trim(rawUris[innerIdx]), true);\n\t // add the descriptor\n\t result += (\" \" + trim(rawUris[innerIdx + 1]));\n\t }\n\t\n\t // split the last item into uri and descriptor\n\t var lastTuple = trim(rawUris[i * 2]).split(/\\s/);\n\t\n\t // sanitize the last uri\n\t result += $$sanitizeUri(trim(lastTuple[0]), true);\n\t\n\t // and add the last descriptor if any\n\t if (lastTuple.length === 2) {\n\t result += (\" \" + trim(lastTuple[1]));\n\t }\n\t this[key] = value = result;\n\t }\n\t\n\t if (writeAttr !== false) {\n\t if (value === null || isUndefined(value)) {\n\t this.$$element.removeAttr(attrName);\n\t } else {\n\t if (SIMPLE_ATTR_NAME.test(attrName)) {\n\t this.$$element.attr(attrName, value);\n\t } else {\n\t setSpecialAttr(this.$$element[0], attrName, value);\n\t }\n\t }\n\t }\n\t\n\t // fire observers\n\t var $$observers = this.$$observers;\n\t $$observers && forEach($$observers[observer], function(fn) {\n\t try {\n\t fn(value);\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t });\n\t },\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $compile.directive.Attributes#$observe\n\t * @kind function\n\t *\n\t * @description\n\t * Observes an interpolated attribute.\n\t *\n\t * The observer function will be invoked once during the next `$digest` following\n\t * compilation. The observer is then invoked whenever the interpolated value\n\t * changes.\n\t *\n\t * @param {string} key Normalized key. (ie ngAttribute) .\n\t * @param {function(interpolatedValue)} fn Function that will be called whenever\n\t the interpolated value of the attribute changes.\n\t * See the {@link guide/interpolation#how-text-and-attribute-bindings-work Interpolation\n\t * guide} for more info.\n\t * @returns {function()} Returns a deregistration function for this observer.\n\t */\n\t $observe: function(key, fn) {\n\t var attrs = this,\n\t $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),\n\t listeners = ($$observers[key] || ($$observers[key] = []));\n\t\n\t listeners.push(fn);\n\t $rootScope.$evalAsync(function() {\n\t if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) {\n\t // no one registered attribute interpolation function, so lets call it manually\n\t fn(attrs[key]);\n\t }\n\t });\n\t\n\t return function() {\n\t arrayRemove(listeners, fn);\n\t };\n\t }\n\t };\n\t\n\t function setSpecialAttr(element, attrName, value) {\n\t // Attributes names that do not start with letters (such as `(click)`) cannot be set using `setAttribute`\n\t // so we have to jump through some hoops to get such an attribute\n\t // https://github.com/angular/angular.js/pull/13318\n\t specialAttrHolder.innerHTML = \"\";\n\t var attributes = specialAttrHolder.firstChild.attributes;\n\t var attribute = attributes[0];\n\t // We have to remove the attribute from its container element before we can add it to the destination element\n\t attributes.removeNamedItem(attribute.name);\n\t attribute.value = value;\n\t element.attributes.setNamedItem(attribute);\n\t }\n\t\n\t function safeAddClass($element, className) {\n\t try {\n\t $element.addClass(className);\n\t } catch (e) {\n\t // ignore, since it means that we are trying to set class on\n\t // SVG element, where class name is read-only.\n\t }\n\t }\n\t\n\t\n\t var startSymbol = $interpolate.startSymbol(),\n\t endSymbol = $interpolate.endSymbol(),\n\t denormalizeTemplate = (startSymbol == '{{' && endSymbol == '}}')\n\t ? identity\n\t : function denormalizeTemplate(template) {\n\t return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n\t },\n\t NG_ATTR_BINDING = /^ngAttr[A-Z]/;\n\t var MULTI_ELEMENT_DIR_RE = /^(.+)Start$/;\n\t\n\t compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {\n\t var bindings = $element.data('$binding') || [];\n\t\n\t if (isArray(binding)) {\n\t bindings = bindings.concat(binding);\n\t } else {\n\t bindings.push(binding);\n\t }\n\t\n\t $element.data('$binding', bindings);\n\t } : noop;\n\t\n\t compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {\n\t safeAddClass($element, 'ng-binding');\n\t } : noop;\n\t\n\t compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {\n\t var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';\n\t $element.data(dataName, scope);\n\t } : noop;\n\t\n\t compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {\n\t safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');\n\t } : noop;\n\t\n\t return compile;\n\t\n\t //================================\n\t\n\t function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,\n\t previousCompileContext) {\n\t if (!($compileNodes instanceof jqLite)) {\n\t // jquery always rewraps, whereas we need to preserve the original selector so that we can\n\t // modify it.\n\t $compileNodes = jqLite($compileNodes);\n\t }\n\t\n\t var NOT_EMPTY = /\\S+/;\n\t\n\t // We can not compile top level text elements since text nodes can be merged and we will\n\t // not be able to attach scope data to them, so we will wrap them in \n\t for (var i = 0, len = $compileNodes.length; i < len; i++) {\n\t var domNode = $compileNodes[i];\n\t\n\t if (domNode.nodeType === NODE_TYPE_TEXT && domNode.nodeValue.match(NOT_EMPTY) /* non-empty */) {\n\t jqLiteWrapNode(domNode, $compileNodes[i] = document.createElement('span'));\n\t }\n\t }\n\t\n\t var compositeLinkFn =\n\t compileNodes($compileNodes, transcludeFn, $compileNodes,\n\t maxPriority, ignoreDirective, previousCompileContext);\n\t compile.$$addScopeClass($compileNodes);\n\t var namespace = null;\n\t return function publicLinkFn(scope, cloneConnectFn, options) {\n\t assertArg(scope, 'scope');\n\t\n\t if (previousCompileContext && previousCompileContext.needsNewScope) {\n\t // A parent directive did a replace and a directive on this element asked\n\t // for transclusion, which caused us to lose a layer of element on which\n\t // we could hold the new transclusion scope, so we will create it manually\n\t // here.\n\t scope = scope.$parent.$new();\n\t }\n\t\n\t options = options || {};\n\t var parentBoundTranscludeFn = options.parentBoundTranscludeFn,\n\t transcludeControllers = options.transcludeControllers,\n\t futureParentElement = options.futureParentElement;\n\t\n\t // When `parentBoundTranscludeFn` is passed, it is a\n\t // `controllersBoundTransclude` function (it was previously passed\n\t // as `transclude` to directive.link) so we must unwrap it to get\n\t // its `boundTranscludeFn`\n\t if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {\n\t parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;\n\t }\n\t\n\t if (!namespace) {\n\t namespace = detectNamespaceForChildElements(futureParentElement);\n\t }\n\t var $linkNode;\n\t if (namespace !== 'html') {\n\t // When using a directive with replace:true and templateUrl the $compileNodes\n\t // (or a child element inside of them)\n\t // might change, so we need to recreate the namespace adapted compileNodes\n\t // for call to the link function.\n\t // Note: This will already clone the nodes...\n\t $linkNode = jqLite(\n\t wrapTemplate(namespace, jqLite('
    ').append($compileNodes).html())\n\t );\n\t } else if (cloneConnectFn) {\n\t // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart\n\t // and sometimes changes the structure of the DOM.\n\t $linkNode = JQLitePrototype.clone.call($compileNodes);\n\t } else {\n\t $linkNode = $compileNodes;\n\t }\n\t\n\t if (transcludeControllers) {\n\t for (var controllerName in transcludeControllers) {\n\t $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);\n\t }\n\t }\n\t\n\t compile.$$addScopeInfo($linkNode, scope);\n\t\n\t if (cloneConnectFn) cloneConnectFn($linkNode, scope);\n\t if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);\n\t return $linkNode;\n\t };\n\t }\n\t\n\t function detectNamespaceForChildElements(parentElement) {\n\t // TODO: Make this detect MathML as well...\n\t var node = parentElement && parentElement[0];\n\t if (!node) {\n\t return 'html';\n\t } else {\n\t return nodeName_(node) !== 'foreignobject' && toString.call(node).match(/SVG/) ? 'svg' : 'html';\n\t }\n\t }\n\t\n\t /**\n\t * Compile function matches each node in nodeList against the directives. Once all directives\n\t * for a particular node are collected their compile functions are executed. The compile\n\t * functions return values - the linking functions - are combined into a composite linking\n\t * function, which is the a linking function for the node.\n\t *\n\t * @param {NodeList} nodeList an array of nodes or NodeList to compile\n\t * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n\t * scope argument is auto-generated to the new child of the transcluded parent scope.\n\t * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then\n\t * the rootElement must be set the jqLite collection of the compile root. This is\n\t * needed so that the jqLite collection items can be replaced with widgets.\n\t * @param {number=} maxPriority Max directive priority.\n\t * @returns {Function} A composite linking function of all of the matched directives or null.\n\t */\n\t function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,\n\t previousCompileContext) {\n\t var linkFns = [],\n\t attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;\n\t\n\t for (var i = 0; i < nodeList.length; i++) {\n\t attrs = new Attributes();\n\t\n\t // we must always refer to nodeList[i] since the nodes can be replaced underneath us.\n\t directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,\n\t ignoreDirective);\n\t\n\t nodeLinkFn = (directives.length)\n\t ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,\n\t null, [], [], previousCompileContext)\n\t : null;\n\t\n\t if (nodeLinkFn && nodeLinkFn.scope) {\n\t compile.$$addScopeClass(attrs.$$element);\n\t }\n\t\n\t childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||\n\t !(childNodes = nodeList[i].childNodes) ||\n\t !childNodes.length)\n\t ? null\n\t : compileNodes(childNodes,\n\t nodeLinkFn ? (\n\t (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)\n\t && nodeLinkFn.transclude) : transcludeFn);\n\t\n\t if (nodeLinkFn || childLinkFn) {\n\t linkFns.push(i, nodeLinkFn, childLinkFn);\n\t linkFnFound = true;\n\t nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;\n\t }\n\t\n\t //use the previous context only for the first element in the virtual group\n\t previousCompileContext = null;\n\t }\n\t\n\t // return a linking function if we have found anything, null otherwise\n\t return linkFnFound ? compositeLinkFn : null;\n\t\n\t function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {\n\t var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;\n\t var stableNodeList;\n\t\n\t\n\t if (nodeLinkFnFound) {\n\t // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our\n\t // offsets don't get screwed up\n\t var nodeListLength = nodeList.length;\n\t stableNodeList = new Array(nodeListLength);\n\t\n\t // create a sparse array by only copying the elements which have a linkFn\n\t for (i = 0; i < linkFns.length; i+=3) {\n\t idx = linkFns[i];\n\t stableNodeList[idx] = nodeList[idx];\n\t }\n\t } else {\n\t stableNodeList = nodeList;\n\t }\n\t\n\t for (i = 0, ii = linkFns.length; i < ii;) {\n\t node = stableNodeList[linkFns[i++]];\n\t nodeLinkFn = linkFns[i++];\n\t childLinkFn = linkFns[i++];\n\t\n\t if (nodeLinkFn) {\n\t if (nodeLinkFn.scope) {\n\t childScope = scope.$new();\n\t compile.$$addScopeInfo(jqLite(node), childScope);\n\t } else {\n\t childScope = scope;\n\t }\n\t\n\t if (nodeLinkFn.transcludeOnThisElement) {\n\t childBoundTranscludeFn = createBoundTranscludeFn(\n\t scope, nodeLinkFn.transclude, parentBoundTranscludeFn);\n\t\n\t } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {\n\t childBoundTranscludeFn = parentBoundTranscludeFn;\n\t\n\t } else if (!parentBoundTranscludeFn && transcludeFn) {\n\t childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);\n\t\n\t } else {\n\t childBoundTranscludeFn = null;\n\t }\n\t\n\t nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);\n\t\n\t } else if (childLinkFn) {\n\t childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);\n\t }\n\t }\n\t }\n\t }\n\t\n\t function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) {\n\t\n\t var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {\n\t\n\t if (!transcludedScope) {\n\t transcludedScope = scope.$new(false, containingScope);\n\t transcludedScope.$$transcluded = true;\n\t }\n\t\n\t return transcludeFn(transcludedScope, cloneFn, {\n\t parentBoundTranscludeFn: previousBoundTranscludeFn,\n\t transcludeControllers: controllers,\n\t futureParentElement: futureParentElement\n\t });\n\t };\n\t\n\t // We need to attach the transclusion slots onto the `boundTranscludeFn`\n\t // so that they are available inside the `controllersBoundTransclude` function\n\t var boundSlots = boundTranscludeFn.$$slots = createMap();\n\t for (var slotName in transcludeFn.$$slots) {\n\t if (transcludeFn.$$slots[slotName]) {\n\t boundSlots[slotName] = createBoundTranscludeFn(scope, transcludeFn.$$slots[slotName], previousBoundTranscludeFn);\n\t } else {\n\t boundSlots[slotName] = null;\n\t }\n\t }\n\t\n\t return boundTranscludeFn;\n\t }\n\t\n\t /**\n\t * Looks for directives on the given node and adds them to the directive collection which is\n\t * sorted.\n\t *\n\t * @param node Node to search.\n\t * @param directives An array to which the directives are added to. This array is sorted before\n\t * the function returns.\n\t * @param attrs The shared attrs object which is used to populate the normalized attributes.\n\t * @param {number=} maxPriority Max directive priority.\n\t */\n\t function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n\t var nodeType = node.nodeType,\n\t attrsMap = attrs.$attr,\n\t match,\n\t className;\n\t\n\t switch (nodeType) {\n\t case NODE_TYPE_ELEMENT: /* Element */\n\t // use the node name: \n\t addDirective(directives,\n\t directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);\n\t\n\t // iterate over the attributes\n\t for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,\n\t j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {\n\t var attrStartName = false;\n\t var attrEndName = false;\n\t\n\t attr = nAttrs[j];\n\t name = attr.name;\n\t value = trim(attr.value);\n\t\n\t // support ngAttr attribute binding\n\t ngAttrName = directiveNormalize(name);\n\t if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {\n\t name = name.replace(PREFIX_REGEXP, '')\n\t .substr(8).replace(/_(.)/g, function(match, letter) {\n\t return letter.toUpperCase();\n\t });\n\t }\n\t\n\t var multiElementMatch = ngAttrName.match(MULTI_ELEMENT_DIR_RE);\n\t if (multiElementMatch && directiveIsMultiElement(multiElementMatch[1])) {\n\t attrStartName = name;\n\t attrEndName = name.substr(0, name.length - 5) + 'end';\n\t name = name.substr(0, name.length - 6);\n\t }\n\t\n\t nName = directiveNormalize(name.toLowerCase());\n\t attrsMap[nName] = name;\n\t if (isNgAttr || !attrs.hasOwnProperty(nName)) {\n\t attrs[nName] = value;\n\t if (getBooleanAttrName(node, nName)) {\n\t attrs[nName] = true; // presence means true\n\t }\n\t }\n\t addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);\n\t addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,\n\t attrEndName);\n\t }\n\t\n\t // use class as directive\n\t className = node.className;\n\t if (isObject(className)) {\n\t // Maybe SVGAnimatedString\n\t className = className.animVal;\n\t }\n\t if (isString(className) && className !== '') {\n\t while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {\n\t nName = directiveNormalize(match[2]);\n\t if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {\n\t attrs[nName] = trim(match[3]);\n\t }\n\t className = className.substr(match.index + match[0].length);\n\t }\n\t }\n\t break;\n\t case NODE_TYPE_TEXT: /* Text Node */\n\t if (msie === 11) {\n\t // Workaround for #11781\n\t while (node.parentNode && node.nextSibling && node.nextSibling.nodeType === NODE_TYPE_TEXT) {\n\t node.nodeValue = node.nodeValue + node.nextSibling.nodeValue;\n\t node.parentNode.removeChild(node.nextSibling);\n\t }\n\t }\n\t addTextInterpolateDirective(directives, node.nodeValue);\n\t break;\n\t case NODE_TYPE_COMMENT: /* Comment */\n\t try {\n\t match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);\n\t if (match) {\n\t nName = directiveNormalize(match[1]);\n\t if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {\n\t attrs[nName] = trim(match[2]);\n\t }\n\t }\n\t } catch (e) {\n\t // turns out that under some circumstances IE9 throws errors when one attempts to read\n\t // comment's node value.\n\t // Just ignore it and continue. (Can't seem to reproduce in test case.)\n\t }\n\t break;\n\t }\n\t\n\t directives.sort(byPriority);\n\t return directives;\n\t }\n\t\n\t /**\n\t * Given a node with an directive-start it collects all of the siblings until it finds\n\t * directive-end.\n\t * @param node\n\t * @param attrStart\n\t * @param attrEnd\n\t * @returns {*}\n\t */\n\t function groupScan(node, attrStart, attrEnd) {\n\t var nodes = [];\n\t var depth = 0;\n\t if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {\n\t do {\n\t if (!node) {\n\t throw $compileMinErr('uterdir',\n\t \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n\t attrStart, attrEnd);\n\t }\n\t if (node.nodeType == NODE_TYPE_ELEMENT) {\n\t if (node.hasAttribute(attrStart)) depth++;\n\t if (node.hasAttribute(attrEnd)) depth--;\n\t }\n\t nodes.push(node);\n\t node = node.nextSibling;\n\t } while (depth > 0);\n\t } else {\n\t nodes.push(node);\n\t }\n\t\n\t return jqLite(nodes);\n\t }\n\t\n\t /**\n\t * Wrapper for linking function which converts normal linking function into a grouped\n\t * linking function.\n\t * @param linkFn\n\t * @param attrStart\n\t * @param attrEnd\n\t * @returns {Function}\n\t */\n\t function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {\n\t return function(scope, element, attrs, controllers, transcludeFn) {\n\t element = groupScan(element[0], attrStart, attrEnd);\n\t return linkFn(scope, element, attrs, controllers, transcludeFn);\n\t };\n\t }\n\t\n\t /**\n\t * A function generator that is used to support both eager and lazy compilation\n\t * linking function.\n\t * @param eager\n\t * @param $compileNodes\n\t * @param transcludeFn\n\t * @param maxPriority\n\t * @param ignoreDirective\n\t * @param previousCompileContext\n\t * @returns {Function}\n\t */\n\t function compilationGenerator(eager, $compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext) {\n\t if (eager) {\n\t return compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext);\n\t }\n\t\n\t var compiled;\n\t\n\t return function() {\n\t if (!compiled) {\n\t compiled = compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext);\n\t\n\t // Null out all of these references in order to make them eligible for garbage collection\n\t // since this is a potentially long lived closure\n\t $compileNodes = transcludeFn = previousCompileContext = null;\n\t }\n\t\n\t return compiled.apply(this, arguments);\n\t };\n\t }\n\t\n\t /**\n\t * Once the directives have been collected, their compile functions are executed. This method\n\t * is responsible for inlining directive templates as well as terminating the application\n\t * of the directives if the terminal directive has been reached.\n\t *\n\t * @param {Array} directives Array of collected directives to execute their compile function.\n\t * this needs to be pre-sorted by priority order.\n\t * @param {Node} compileNode The raw DOM node to apply the compile functions to\n\t * @param {Object} templateAttrs The shared attribute function\n\t * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n\t * scope argument is auto-generated to the new\n\t * child of the transcluded parent scope.\n\t * @param {JQLite} jqCollection If we are working on the root of the compile tree then this\n\t * argument has the root jqLite array so that we can replace nodes\n\t * on it.\n\t * @param {Object=} originalReplaceDirective An optional directive that will be ignored when\n\t * compiling the transclusion.\n\t * @param {Array.} preLinkFns\n\t * @param {Array.} postLinkFns\n\t * @param {Object} previousCompileContext Context used for previous compilation of the current\n\t * node\n\t * @returns {Function} linkFn\n\t */\n\t function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,\n\t jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,\n\t previousCompileContext) {\n\t previousCompileContext = previousCompileContext || {};\n\t\n\t var terminalPriority = -Number.MAX_VALUE,\n\t newScopeDirective = previousCompileContext.newScopeDirective,\n\t controllerDirectives = previousCompileContext.controllerDirectives,\n\t newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,\n\t templateDirective = previousCompileContext.templateDirective,\n\t nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,\n\t hasTranscludeDirective = false,\n\t hasTemplate = false,\n\t hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,\n\t $compileNode = templateAttrs.$$element = jqLite(compileNode),\n\t directive,\n\t directiveName,\n\t $template,\n\t replaceDirective = originalReplaceDirective,\n\t childTranscludeFn = transcludeFn,\n\t linkFn,\n\t didScanForMultipleTransclusion = false,\n\t mightHaveMultipleTransclusionError = false,\n\t directiveValue;\n\t\n\t // executes all directives on the current element\n\t for (var i = 0, ii = directives.length; i < ii; i++) {\n\t directive = directives[i];\n\t var attrStart = directive.$$start;\n\t var attrEnd = directive.$$end;\n\t\n\t // collect multiblock sections\n\t if (attrStart) {\n\t $compileNode = groupScan(compileNode, attrStart, attrEnd);\n\t }\n\t $template = undefined;\n\t\n\t if (terminalPriority > directive.priority) {\n\t break; // prevent further processing of directives\n\t }\n\t\n\t if (directiveValue = directive.scope) {\n\t\n\t // skip the check for directives with async templates, we'll check the derived sync\n\t // directive when the template arrives\n\t if (!directive.templateUrl) {\n\t if (isObject(directiveValue)) {\n\t // This directive is trying to add an isolated scope.\n\t // Check that there is no scope of any kind already\n\t assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,\n\t directive, $compileNode);\n\t newIsolateScopeDirective = directive;\n\t } else {\n\t // This directive is trying to add a child scope.\n\t // Check that there is no isolated scope already\n\t assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,\n\t $compileNode);\n\t }\n\t }\n\t\n\t newScopeDirective = newScopeDirective || directive;\n\t }\n\t\n\t directiveName = directive.name;\n\t\n\t // If we encounter a condition that can result in transclusion on the directive,\n\t // then scan ahead in the remaining directives for others that may cause a multiple\n\t // transclusion error to be thrown during the compilation process. If a matching directive\n\t // is found, then we know that when we encounter a transcluded directive, we need to eagerly\n\t // compile the `transclude` function rather than doing it lazily in order to throw\n\t // exceptions at the correct time\n\t if (!didScanForMultipleTransclusion && ((directive.replace && (directive.templateUrl || directive.template))\n\t || (directive.transclude && !directive.$$tlb))) {\n\t var candidateDirective;\n\t\n\t for (var scanningIndex = i + 1; candidateDirective = directives[scanningIndex++];) {\n\t if ((candidateDirective.transclude && !candidateDirective.$$tlb)\n\t || (candidateDirective.replace && (candidateDirective.templateUrl || candidateDirective.template))) {\n\t mightHaveMultipleTransclusionError = true;\n\t break;\n\t }\n\t }\n\t\n\t didScanForMultipleTransclusion = true;\n\t }\n\t\n\t if (!directive.templateUrl && directive.controller) {\n\t directiveValue = directive.controller;\n\t controllerDirectives = controllerDirectives || createMap();\n\t assertNoDuplicate(\"'\" + directiveName + \"' controller\",\n\t controllerDirectives[directiveName], directive, $compileNode);\n\t controllerDirectives[directiveName] = directive;\n\t }\n\t\n\t if (directiveValue = directive.transclude) {\n\t hasTranscludeDirective = true;\n\t\n\t // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.\n\t // This option should only be used by directives that know how to safely handle element transclusion,\n\t // where the transcluded nodes are added or replaced after linking.\n\t if (!directive.$$tlb) {\n\t assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);\n\t nonTlbTranscludeDirective = directive;\n\t }\n\t\n\t if (directiveValue == 'element') {\n\t hasElementTranscludeDirective = true;\n\t terminalPriority = directive.priority;\n\t $template = $compileNode;\n\t $compileNode = templateAttrs.$$element =\n\t jqLite(document.createComment(' ' + directiveName + ': ' +\n\t templateAttrs[directiveName] + ' '));\n\t compileNode = $compileNode[0];\n\t replaceWith(jqCollection, sliceArgs($template), compileNode);\n\t\n\t childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, terminalPriority,\n\t replaceDirective && replaceDirective.name, {\n\t // Don't pass in:\n\t // - controllerDirectives - otherwise we'll create duplicates controllers\n\t // - newIsolateScopeDirective or templateDirective - combining templates with\n\t // element transclusion doesn't make sense.\n\t //\n\t // We need only nonTlbTranscludeDirective so that we prevent putting transclusion\n\t // on the same element more than once.\n\t nonTlbTranscludeDirective: nonTlbTranscludeDirective\n\t });\n\t } else {\n\t\n\t var slots = createMap();\n\t\n\t $template = jqLite(jqLiteClone(compileNode)).contents();\n\t\n\t if (isObject(directiveValue)) {\n\t\n\t // We have transclusion slots,\n\t // collect them up, compile them and store their transclusion functions\n\t $template = [];\n\t\n\t var slotMap = createMap();\n\t var filledSlots = createMap();\n\t\n\t // Parse the element selectors\n\t forEach(directiveValue, function(elementSelector, slotName) {\n\t // If an element selector starts with a ? then it is optional\n\t var optional = (elementSelector.charAt(0) === '?');\n\t elementSelector = optional ? elementSelector.substring(1) : elementSelector;\n\t\n\t slotMap[elementSelector] = slotName;\n\t\n\t // We explicitly assign `null` since this implies that a slot was defined but not filled.\n\t // Later when calling boundTransclusion functions with a slot name we only error if the\n\t // slot is `undefined`\n\t slots[slotName] = null;\n\t\n\t // filledSlots contains `true` for all slots that are either optional or have been\n\t // filled. This is used to check that we have not missed any required slots\n\t filledSlots[slotName] = optional;\n\t });\n\t\n\t // Add the matching elements into their slot\n\t forEach($compileNode.contents(), function(node) {\n\t var slotName = slotMap[directiveNormalize(nodeName_(node))];\n\t if (slotName) {\n\t filledSlots[slotName] = true;\n\t slots[slotName] = slots[slotName] || [];\n\t slots[slotName].push(node);\n\t } else {\n\t $template.push(node);\n\t }\n\t });\n\t\n\t // Check for required slots that were not filled\n\t forEach(filledSlots, function(filled, slotName) {\n\t if (!filled) {\n\t throw $compileMinErr('reqslot', 'Required transclusion slot `{0}` was not filled.', slotName);\n\t }\n\t });\n\t\n\t for (var slotName in slots) {\n\t if (slots[slotName]) {\n\t // Only define a transclusion function if the slot was filled\n\t slots[slotName] = compilationGenerator(mightHaveMultipleTransclusionError, slots[slotName], transcludeFn);\n\t }\n\t }\n\t }\n\t\n\t $compileNode.empty(); // clear contents\n\t childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, undefined,\n\t undefined, { needsNewScope: directive.$$isolateScope || directive.$$newScope});\n\t childTranscludeFn.$$slots = slots;\n\t }\n\t }\n\t\n\t if (directive.template) {\n\t hasTemplate = true;\n\t assertNoDuplicate('template', templateDirective, directive, $compileNode);\n\t templateDirective = directive;\n\t\n\t directiveValue = (isFunction(directive.template))\n\t ? directive.template($compileNode, templateAttrs)\n\t : directive.template;\n\t\n\t directiveValue = denormalizeTemplate(directiveValue);\n\t\n\t if (directive.replace) {\n\t replaceDirective = directive;\n\t if (jqLiteIsTextNode(directiveValue)) {\n\t $template = [];\n\t } else {\n\t $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));\n\t }\n\t compileNode = $template[0];\n\t\n\t if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {\n\t throw $compileMinErr('tplrt',\n\t \"Template for directive '{0}' must have exactly one root element. {1}\",\n\t directiveName, '');\n\t }\n\t\n\t replaceWith(jqCollection, $compileNode, compileNode);\n\t\n\t var newTemplateAttrs = {$attr: {}};\n\t\n\t // combine directives from the original node and from the template:\n\t // - take the array of directives for this element\n\t // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)\n\t // - collect directives from the template and sort them by priority\n\t // - combine directives as: processed + template + unprocessed\n\t var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);\n\t var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));\n\t\n\t if (newIsolateScopeDirective || newScopeDirective) {\n\t // The original directive caused the current element to be replaced but this element\n\t // also needs to have a new scope, so we need to tell the template directives\n\t // that they would need to get their scope from further up, if they require transclusion\n\t markDirectiveScope(templateDirectives, newIsolateScopeDirective, newScopeDirective);\n\t }\n\t directives = directives.concat(templateDirectives).concat(unprocessedDirectives);\n\t mergeTemplateAttributes(templateAttrs, newTemplateAttrs);\n\t\n\t ii = directives.length;\n\t } else {\n\t $compileNode.html(directiveValue);\n\t }\n\t }\n\t\n\t if (directive.templateUrl) {\n\t hasTemplate = true;\n\t assertNoDuplicate('template', templateDirective, directive, $compileNode);\n\t templateDirective = directive;\n\t\n\t if (directive.replace) {\n\t replaceDirective = directive;\n\t }\n\t\n\t nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,\n\t templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {\n\t controllerDirectives: controllerDirectives,\n\t newScopeDirective: (newScopeDirective !== directive) && newScopeDirective,\n\t newIsolateScopeDirective: newIsolateScopeDirective,\n\t templateDirective: templateDirective,\n\t nonTlbTranscludeDirective: nonTlbTranscludeDirective\n\t });\n\t ii = directives.length;\n\t } else if (directive.compile) {\n\t try {\n\t linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);\n\t if (isFunction(linkFn)) {\n\t addLinkFns(null, linkFn, attrStart, attrEnd);\n\t } else if (linkFn) {\n\t addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);\n\t }\n\t } catch (e) {\n\t $exceptionHandler(e, startingTag($compileNode));\n\t }\n\t }\n\t\n\t if (directive.terminal) {\n\t nodeLinkFn.terminal = true;\n\t terminalPriority = Math.max(terminalPriority, directive.priority);\n\t }\n\t\n\t }\n\t\n\t nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;\n\t nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;\n\t nodeLinkFn.templateOnThisElement = hasTemplate;\n\t nodeLinkFn.transclude = childTranscludeFn;\n\t\n\t previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;\n\t\n\t // might be normal or delayed nodeLinkFn depending on if templateUrl is present\n\t return nodeLinkFn;\n\t\n\t ////////////////////\n\t\n\t function addLinkFns(pre, post, attrStart, attrEnd) {\n\t if (pre) {\n\t if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);\n\t pre.require = directive.require;\n\t pre.directiveName = directiveName;\n\t if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n\t pre = cloneAndAnnotateFn(pre, {isolateScope: true});\n\t }\n\t preLinkFns.push(pre);\n\t }\n\t if (post) {\n\t if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);\n\t post.require = directive.require;\n\t post.directiveName = directiveName;\n\t if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n\t post = cloneAndAnnotateFn(post, {isolateScope: true});\n\t }\n\t postLinkFns.push(post);\n\t }\n\t }\n\t\n\t\n\t function getControllers(directiveName, require, $element, elementControllers) {\n\t var value;\n\t\n\t if (isString(require)) {\n\t var match = require.match(REQUIRE_PREFIX_REGEXP);\n\t var name = require.substring(match[0].length);\n\t var inheritType = match[1] || match[3];\n\t var optional = match[2] === '?';\n\t\n\t //If only parents then start at the parent element\n\t if (inheritType === '^^') {\n\t $element = $element.parent();\n\t //Otherwise attempt getting the controller from elementControllers in case\n\t //the element is transcluded (and has no data) and to avoid .data if possible\n\t } else {\n\t value = elementControllers && elementControllers[name];\n\t value = value && value.instance;\n\t }\n\t\n\t if (!value) {\n\t var dataName = '$' + name + 'Controller';\n\t value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName);\n\t }\n\t\n\t if (!value && !optional) {\n\t throw $compileMinErr('ctreq',\n\t \"Controller '{0}', required by directive '{1}', can't be found!\",\n\t name, directiveName);\n\t }\n\t } else if (isArray(require)) {\n\t value = [];\n\t for (var i = 0, ii = require.length; i < ii; i++) {\n\t value[i] = getControllers(directiveName, require[i], $element, elementControllers);\n\t }\n\t } else if (isObject(require)) {\n\t value = {};\n\t forEach(require, function(controller, property) {\n\t value[property] = getControllers(directiveName, controller, $element, elementControllers);\n\t });\n\t }\n\t\n\t return value || null;\n\t }\n\t\n\t function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope) {\n\t var elementControllers = createMap();\n\t for (var controllerKey in controllerDirectives) {\n\t var directive = controllerDirectives[controllerKey];\n\t var locals = {\n\t $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,\n\t $element: $element,\n\t $attrs: attrs,\n\t $transclude: transcludeFn\n\t };\n\t\n\t var controller = directive.controller;\n\t if (controller == '@') {\n\t controller = attrs[directive.name];\n\t }\n\t\n\t var controllerInstance = $controller(controller, locals, true, directive.controllerAs);\n\t\n\t // For directives with element transclusion the element is a comment,\n\t // but jQuery .data doesn't support attaching data to comment nodes as it's hard to\n\t // clean up (http://bugs.jquery.com/ticket/8335).\n\t // Instead, we save the controllers for the element in a local hash and attach to .data\n\t // later, once we have the actual element.\n\t elementControllers[directive.name] = controllerInstance;\n\t if (!hasElementTranscludeDirective) {\n\t $element.data('$' + directive.name + 'Controller', controllerInstance.instance);\n\t }\n\t }\n\t return elementControllers;\n\t }\n\t\n\t function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {\n\t var i, ii, linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element,\n\t attrs, removeScopeBindingWatches, removeControllerBindingWatches;\n\t\n\t if (compileNode === linkNode) {\n\t attrs = templateAttrs;\n\t $element = templateAttrs.$$element;\n\t } else {\n\t $element = jqLite(linkNode);\n\t attrs = new Attributes($element, templateAttrs);\n\t }\n\t\n\t controllerScope = scope;\n\t if (newIsolateScopeDirective) {\n\t isolateScope = scope.$new(true);\n\t } else if (newScopeDirective) {\n\t controllerScope = scope.$parent;\n\t }\n\t\n\t if (boundTranscludeFn) {\n\t // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`\n\t // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`\n\t transcludeFn = controllersBoundTransclude;\n\t transcludeFn.$$boundTransclude = boundTranscludeFn;\n\t // expose the slots on the `$transclude` function\n\t transcludeFn.isSlotFilled = function(slotName) {\n\t return !!boundTranscludeFn.$$slots[slotName];\n\t };\n\t }\n\t\n\t if (controllerDirectives) {\n\t elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope);\n\t }\n\t\n\t if (newIsolateScopeDirective) {\n\t // Initialize isolate scope bindings for new isolate scope directive.\n\t compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||\n\t templateDirective === newIsolateScopeDirective.$$originalDirective)));\n\t compile.$$addScopeClass($element, true);\n\t isolateScope.$$isolateBindings =\n\t newIsolateScopeDirective.$$isolateBindings;\n\t removeScopeBindingWatches = initializeDirectiveBindings(scope, attrs, isolateScope,\n\t isolateScope.$$isolateBindings,\n\t newIsolateScopeDirective);\n\t if (removeScopeBindingWatches) {\n\t isolateScope.$on('$destroy', removeScopeBindingWatches);\n\t }\n\t }\n\t\n\t // Initialize bindToController bindings\n\t for (var name in elementControllers) {\n\t var controllerDirective = controllerDirectives[name];\n\t var controller = elementControllers[name];\n\t var bindings = controllerDirective.$$bindings.bindToController;\n\t\n\t if (controller.identifier && bindings) {\n\t removeControllerBindingWatches =\n\t initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);\n\t }\n\t\n\t var controllerResult = controller();\n\t if (controllerResult !== controller.instance) {\n\t // If the controller constructor has a return value, overwrite the instance\n\t // from setupControllers\n\t controller.instance = controllerResult;\n\t $element.data('$' + controllerDirective.name + 'Controller', controllerResult);\n\t removeControllerBindingWatches && removeControllerBindingWatches();\n\t removeControllerBindingWatches =\n\t initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);\n\t }\n\t }\n\t\n\t // Bind the required controllers to the controller, if `require` is an object and `bindToController` is truthy\n\t forEach(controllerDirectives, function(controllerDirective, name) {\n\t var require = controllerDirective.require;\n\t if (controllerDirective.bindToController && !isArray(require) && isObject(require)) {\n\t extend(elementControllers[name].instance, getControllers(name, require, $element, elementControllers));\n\t }\n\t });\n\t\n\t // Trigger the `$onInit` method on all controllers that have one\n\t forEach(elementControllers, function(controller) {\n\t if (isFunction(controller.instance.$onInit)) {\n\t controller.instance.$onInit();\n\t }\n\t });\n\t\n\t // PRELINKING\n\t for (i = 0, ii = preLinkFns.length; i < ii; i++) {\n\t linkFn = preLinkFns[i];\n\t invokeLinkFn(linkFn,\n\t linkFn.isolateScope ? isolateScope : scope,\n\t $element,\n\t attrs,\n\t linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),\n\t transcludeFn\n\t );\n\t }\n\t\n\t // RECURSION\n\t // We only pass the isolate scope, if the isolate directive has a template,\n\t // otherwise the child elements do not belong to the isolate directive.\n\t var scopeToChild = scope;\n\t if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {\n\t scopeToChild = isolateScope;\n\t }\n\t childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);\n\t\n\t // POSTLINKING\n\t for (i = postLinkFns.length - 1; i >= 0; i--) {\n\t linkFn = postLinkFns[i];\n\t invokeLinkFn(linkFn,\n\t linkFn.isolateScope ? isolateScope : scope,\n\t $element,\n\t attrs,\n\t linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),\n\t transcludeFn\n\t );\n\t }\n\t\n\t // This is the function that is injected as `$transclude`.\n\t // Note: all arguments are optional!\n\t function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement, slotName) {\n\t var transcludeControllers;\n\t // No scope passed in:\n\t if (!isScope(scope)) {\n\t slotName = futureParentElement;\n\t futureParentElement = cloneAttachFn;\n\t cloneAttachFn = scope;\n\t scope = undefined;\n\t }\n\t\n\t if (hasElementTranscludeDirective) {\n\t transcludeControllers = elementControllers;\n\t }\n\t if (!futureParentElement) {\n\t futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;\n\t }\n\t if (slotName) {\n\t // slotTranscludeFn can be one of three things:\n\t // * a transclude function - a filled slot\n\t // * `null` - an optional slot that was not filled\n\t // * `undefined` - a slot that was not declared (i.e. invalid)\n\t var slotTranscludeFn = boundTranscludeFn.$$slots[slotName];\n\t if (slotTranscludeFn) {\n\t return slotTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);\n\t } else if (isUndefined(slotTranscludeFn)) {\n\t throw $compileMinErr('noslot',\n\t 'No parent directive that requires a transclusion with slot name \"{0}\". ' +\n\t 'Element: {1}',\n\t slotName, startingTag($element));\n\t }\n\t } else {\n\t return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Depending upon the context in which a directive finds itself it might need to have a new isolated\n\t // or child scope created. For instance:\n\t // * if the directive has been pulled into a template because another directive with a higher priority\n\t // asked for element transclusion\n\t // * if the directive itself asks for transclusion but it is at the root of a template and the original\n\t // element was replaced. See https://github.com/angular/angular.js/issues/12936\n\t function markDirectiveScope(directives, isolateScope, newScope) {\n\t for (var j = 0, jj = directives.length; j < jj; j++) {\n\t directives[j] = inherit(directives[j], {$$isolateScope: isolateScope, $$newScope: newScope});\n\t }\n\t }\n\t\n\t /**\n\t * looks up the directive and decorates it with exception handling and proper parameters. We\n\t * call this the boundDirective.\n\t *\n\t * @param {string} name name of the directive to look up.\n\t * @param {string} location The directive must be found in specific format.\n\t * String containing any of theses characters:\n\t *\n\t * * `E`: element name\n\t * * `A': attribute\n\t * * `C`: class\n\t * * `M`: comment\n\t * @returns {boolean} true if directive was added.\n\t */\n\t function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,\n\t endAttrName) {\n\t if (name === ignoreDirective) return null;\n\t var match = null;\n\t if (hasDirectives.hasOwnProperty(name)) {\n\t for (var directive, directives = $injector.get(name + Suffix),\n\t i = 0, ii = directives.length; i < ii; i++) {\n\t try {\n\t directive = directives[i];\n\t if ((isUndefined(maxPriority) || maxPriority > directive.priority) &&\n\t directive.restrict.indexOf(location) != -1) {\n\t if (startAttrName) {\n\t directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});\n\t }\n\t tDirectives.push(directive);\n\t match = directive;\n\t }\n\t } catch (e) { $exceptionHandler(e); }\n\t }\n\t }\n\t return match;\n\t }\n\t\n\t\n\t /**\n\t * looks up the directive and returns true if it is a multi-element directive,\n\t * and therefore requires DOM nodes between -start and -end markers to be grouped\n\t * together.\n\t *\n\t * @param {string} name name of the directive to look up.\n\t * @returns true if directive was registered as multi-element.\n\t */\n\t function directiveIsMultiElement(name) {\n\t if (hasDirectives.hasOwnProperty(name)) {\n\t for (var directive, directives = $injector.get(name + Suffix),\n\t i = 0, ii = directives.length; i < ii; i++) {\n\t directive = directives[i];\n\t if (directive.multiElement) {\n\t return true;\n\t }\n\t }\n\t }\n\t return false;\n\t }\n\t\n\t /**\n\t * When the element is replaced with HTML template then the new attributes\n\t * on the template need to be merged with the existing attributes in the DOM.\n\t * The desired effect is to have both of the attributes present.\n\t *\n\t * @param {object} dst destination attributes (original DOM)\n\t * @param {object} src source attributes (from the directive template)\n\t */\n\t function mergeTemplateAttributes(dst, src) {\n\t var srcAttr = src.$attr,\n\t dstAttr = dst.$attr,\n\t $element = dst.$$element;\n\t\n\t // reapply the old attributes to the new element\n\t forEach(dst, function(value, key) {\n\t if (key.charAt(0) != '$') {\n\t if (src[key] && src[key] !== value) {\n\t value += (key === 'style' ? ';' : ' ') + src[key];\n\t }\n\t dst.$set(key, value, true, srcAttr[key]);\n\t }\n\t });\n\t\n\t // copy the new attributes on the old attrs object\n\t forEach(src, function(value, key) {\n\t if (key == 'class') {\n\t safeAddClass($element, value);\n\t dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;\n\t } else if (key == 'style') {\n\t $element.attr('style', $element.attr('style') + ';' + value);\n\t dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;\n\t // `dst` will never contain hasOwnProperty as DOM parser won't let it.\n\t // You will get an \"InvalidCharacterError: DOM Exception 5\" error if you\n\t // have an attribute like \"has-own-property\" or \"data-has-own-property\", etc.\n\t } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {\n\t dst[key] = value;\n\t dstAttr[key] = srcAttr[key];\n\t }\n\t });\n\t }\n\t\n\t\n\t function compileTemplateUrl(directives, $compileNode, tAttrs,\n\t $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {\n\t var linkQueue = [],\n\t afterTemplateNodeLinkFn,\n\t afterTemplateChildLinkFn,\n\t beforeTemplateCompileNode = $compileNode[0],\n\t origAsyncDirective = directives.shift(),\n\t derivedSyncDirective = inherit(origAsyncDirective, {\n\t templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective\n\t }),\n\t templateUrl = (isFunction(origAsyncDirective.templateUrl))\n\t ? origAsyncDirective.templateUrl($compileNode, tAttrs)\n\t : origAsyncDirective.templateUrl,\n\t templateNamespace = origAsyncDirective.templateNamespace;\n\t\n\t $compileNode.empty();\n\t\n\t $templateRequest(templateUrl)\n\t .then(function(content) {\n\t var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;\n\t\n\t content = denormalizeTemplate(content);\n\t\n\t if (origAsyncDirective.replace) {\n\t if (jqLiteIsTextNode(content)) {\n\t $template = [];\n\t } else {\n\t $template = removeComments(wrapTemplate(templateNamespace, trim(content)));\n\t }\n\t compileNode = $template[0];\n\t\n\t if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {\n\t throw $compileMinErr('tplrt',\n\t \"Template for directive '{0}' must have exactly one root element. {1}\",\n\t origAsyncDirective.name, templateUrl);\n\t }\n\t\n\t tempTemplateAttrs = {$attr: {}};\n\t replaceWith($rootElement, $compileNode, compileNode);\n\t var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);\n\t\n\t if (isObject(origAsyncDirective.scope)) {\n\t // the original directive that caused the template to be loaded async required\n\t // an isolate scope\n\t markDirectiveScope(templateDirectives, true);\n\t }\n\t directives = templateDirectives.concat(directives);\n\t mergeTemplateAttributes(tAttrs, tempTemplateAttrs);\n\t } else {\n\t compileNode = beforeTemplateCompileNode;\n\t $compileNode.html(content);\n\t }\n\t\n\t directives.unshift(derivedSyncDirective);\n\t\n\t afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,\n\t childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,\n\t previousCompileContext);\n\t forEach($rootElement, function(node, i) {\n\t if (node == compileNode) {\n\t $rootElement[i] = $compileNode[0];\n\t }\n\t });\n\t afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);\n\t\n\t while (linkQueue.length) {\n\t var scope = linkQueue.shift(),\n\t beforeTemplateLinkNode = linkQueue.shift(),\n\t linkRootElement = linkQueue.shift(),\n\t boundTranscludeFn = linkQueue.shift(),\n\t linkNode = $compileNode[0];\n\t\n\t if (scope.$$destroyed) continue;\n\t\n\t if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {\n\t var oldClasses = beforeTemplateLinkNode.className;\n\t\n\t if (!(previousCompileContext.hasElementTranscludeDirective &&\n\t origAsyncDirective.replace)) {\n\t // it was cloned therefore we have to clone as well.\n\t linkNode = jqLiteClone(compileNode);\n\t }\n\t replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);\n\t\n\t // Copy in CSS classes from original node\n\t safeAddClass(jqLite(linkNode), oldClasses);\n\t }\n\t if (afterTemplateNodeLinkFn.transcludeOnThisElement) {\n\t childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);\n\t } else {\n\t childBoundTranscludeFn = boundTranscludeFn;\n\t }\n\t afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,\n\t childBoundTranscludeFn);\n\t }\n\t linkQueue = null;\n\t });\n\t\n\t return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {\n\t var childBoundTranscludeFn = boundTranscludeFn;\n\t if (scope.$$destroyed) return;\n\t if (linkQueue) {\n\t linkQueue.push(scope,\n\t node,\n\t rootElement,\n\t childBoundTranscludeFn);\n\t } else {\n\t if (afterTemplateNodeLinkFn.transcludeOnThisElement) {\n\t childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);\n\t }\n\t afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);\n\t }\n\t };\n\t }\n\t\n\t\n\t /**\n\t * Sorting function for bound directives.\n\t */\n\t function byPriority(a, b) {\n\t var diff = b.priority - a.priority;\n\t if (diff !== 0) return diff;\n\t if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;\n\t return a.index - b.index;\n\t }\n\t\n\t function assertNoDuplicate(what, previousDirective, directive, element) {\n\t\n\t function wrapModuleNameIfDefined(moduleName) {\n\t return moduleName ?\n\t (' (module: ' + moduleName + ')') :\n\t '';\n\t }\n\t\n\t if (previousDirective) {\n\t throw $compileMinErr('multidir', 'Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}',\n\t previousDirective.name, wrapModuleNameIfDefined(previousDirective.$$moduleName),\n\t directive.name, wrapModuleNameIfDefined(directive.$$moduleName), what, startingTag(element));\n\t }\n\t }\n\t\n\t\n\t function addTextInterpolateDirective(directives, text) {\n\t var interpolateFn = $interpolate(text, true);\n\t if (interpolateFn) {\n\t directives.push({\n\t priority: 0,\n\t compile: function textInterpolateCompileFn(templateNode) {\n\t var templateNodeParent = templateNode.parent(),\n\t hasCompileParent = !!templateNodeParent.length;\n\t\n\t // When transcluding a template that has bindings in the root\n\t // we don't have a parent and thus need to add the class during linking fn.\n\t if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);\n\t\n\t return function textInterpolateLinkFn(scope, node) {\n\t var parent = node.parent();\n\t if (!hasCompileParent) compile.$$addBindingClass(parent);\n\t compile.$$addBindingInfo(parent, interpolateFn.expressions);\n\t scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {\n\t node[0].nodeValue = value;\n\t });\n\t };\n\t }\n\t });\n\t }\n\t }\n\t\n\t\n\t function wrapTemplate(type, template) {\n\t type = lowercase(type || 'html');\n\t switch (type) {\n\t case 'svg':\n\t case 'math':\n\t var wrapper = document.createElement('div');\n\t wrapper.innerHTML = '<' + type + '>' + template + '';\n\t return wrapper.childNodes[0].childNodes;\n\t default:\n\t return template;\n\t }\n\t }\n\t\n\t\n\t function getTrustedContext(node, attrNormalizedName) {\n\t if (attrNormalizedName == \"srcdoc\") {\n\t return $sce.HTML;\n\t }\n\t var tag = nodeName_(node);\n\t // maction[xlink:href] can source SVG. It's not limited to .\n\t if (attrNormalizedName == \"xlinkHref\" ||\n\t (tag == \"form\" && attrNormalizedName == \"action\") ||\n\t (tag != \"img\" && (attrNormalizedName == \"src\" ||\n\t attrNormalizedName == \"ngSrc\"))) {\n\t return $sce.RESOURCE_URL;\n\t }\n\t }\n\t\n\t\n\t function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {\n\t var trustedContext = getTrustedContext(node, name);\n\t allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing;\n\t\n\t var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing);\n\t\n\t // no interpolation found -> ignore\n\t if (!interpolateFn) return;\n\t\n\t\n\t if (name === \"multiple\" && nodeName_(node) === \"select\") {\n\t throw $compileMinErr(\"selmulti\",\n\t \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n\t startingTag(node));\n\t }\n\t\n\t directives.push({\n\t priority: 100,\n\t compile: function() {\n\t return {\n\t pre: function attrInterpolatePreLinkFn(scope, element, attr) {\n\t var $$observers = (attr.$$observers || (attr.$$observers = createMap()));\n\t\n\t if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {\n\t throw $compileMinErr('nodomevents',\n\t \"Interpolations for HTML DOM event attributes are disallowed. Please use the \" +\n\t \"ng- versions (such as ng-click instead of onclick) instead.\");\n\t }\n\t\n\t // If the attribute has changed since last $interpolate()ed\n\t var newValue = attr[name];\n\t if (newValue !== value) {\n\t // we need to interpolate again since the attribute value has been updated\n\t // (e.g. by another directive's compile function)\n\t // ensure unset/empty values make interpolateFn falsy\n\t interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing);\n\t value = newValue;\n\t }\n\t\n\t // if attribute was updated so that there is no interpolation going on we don't want to\n\t // register any observers\n\t if (!interpolateFn) return;\n\t\n\t // initialize attr object so that it's ready in case we need the value for isolate\n\t // scope initialization, otherwise the value would not be available from isolate\n\t // directive's linking fn during linking phase\n\t attr[name] = interpolateFn(scope);\n\t\n\t ($$observers[name] || ($$observers[name] = [])).$$inter = true;\n\t (attr.$$observers && attr.$$observers[name].$$scope || scope).\n\t $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {\n\t //special case for class attribute addition + removal\n\t //so that class changes can tap into the animation\n\t //hooks provided by the $animate service. Be sure to\n\t //skip animations when the first digest occurs (when\n\t //both the new and the old values are the same) since\n\t //the CSS classes are the non-interpolated values\n\t if (name === 'class' && newValue != oldValue) {\n\t attr.$updateClass(newValue, oldValue);\n\t } else {\n\t attr.$set(name, newValue);\n\t }\n\t });\n\t }\n\t };\n\t }\n\t });\n\t }\n\t\n\t\n\t /**\n\t * This is a special jqLite.replaceWith, which can replace items which\n\t * have no parents, provided that the containing jqLite collection is provided.\n\t *\n\t * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes\n\t * in the root of the tree.\n\t * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep\n\t * the shell, but replace its DOM node reference.\n\t * @param {Node} newNode The new DOM node.\n\t */\n\t function replaceWith($rootElement, elementsToRemove, newNode) {\n\t var firstElementToRemove = elementsToRemove[0],\n\t removeCount = elementsToRemove.length,\n\t parent = firstElementToRemove.parentNode,\n\t i, ii;\n\t\n\t if ($rootElement) {\n\t for (i = 0, ii = $rootElement.length; i < ii; i++) {\n\t if ($rootElement[i] == firstElementToRemove) {\n\t $rootElement[i++] = newNode;\n\t for (var j = i, j2 = j + removeCount - 1,\n\t jj = $rootElement.length;\n\t j < jj; j++, j2++) {\n\t if (j2 < jj) {\n\t $rootElement[j] = $rootElement[j2];\n\t } else {\n\t delete $rootElement[j];\n\t }\n\t }\n\t $rootElement.length -= removeCount - 1;\n\t\n\t // If the replaced element is also the jQuery .context then replace it\n\t // .context is a deprecated jQuery api, so we should set it only when jQuery set it\n\t // http://api.jquery.com/context/\n\t if ($rootElement.context === firstElementToRemove) {\n\t $rootElement.context = newNode;\n\t }\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (parent) {\n\t parent.replaceChild(newNode, firstElementToRemove);\n\t }\n\t\n\t // Append all the `elementsToRemove` to a fragment. This will...\n\t // - remove them from the DOM\n\t // - allow them to still be traversed with .nextSibling\n\t // - allow a single fragment.qSA to fetch all elements being removed\n\t var fragment = document.createDocumentFragment();\n\t for (i = 0; i < removeCount; i++) {\n\t fragment.appendChild(elementsToRemove[i]);\n\t }\n\t\n\t if (jqLite.hasData(firstElementToRemove)) {\n\t // Copy over user data (that includes Angular's $scope etc.). Don't copy private\n\t // data here because there's no public interface in jQuery to do that and copying over\n\t // event listeners (which is the main use of private data) wouldn't work anyway.\n\t jqLite.data(newNode, jqLite.data(firstElementToRemove));\n\t\n\t // Remove $destroy event listeners from `firstElementToRemove`\n\t jqLite(firstElementToRemove).off('$destroy');\n\t }\n\t\n\t // Cleanup any data/listeners on the elements and children.\n\t // This includes invoking the $destroy event on any elements with listeners.\n\t jqLite.cleanData(fragment.querySelectorAll('*'));\n\t\n\t // Update the jqLite collection to only contain the `newNode`\n\t for (i = 1; i < removeCount; i++) {\n\t delete elementsToRemove[i];\n\t }\n\t elementsToRemove[0] = newNode;\n\t elementsToRemove.length = 1;\n\t }\n\t\n\t\n\t function cloneAndAnnotateFn(fn, annotation) {\n\t return extend(function() { return fn.apply(null, arguments); }, fn, annotation);\n\t }\n\t\n\t\n\t function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {\n\t try {\n\t linkFn(scope, $element, attrs, controllers, transcludeFn);\n\t } catch (e) {\n\t $exceptionHandler(e, startingTag($element));\n\t }\n\t }\n\t\n\t\n\t // Set up $watches for isolate scope and controller bindings. This process\n\t // only occurs for isolate scopes and new scopes with controllerAs.\n\t function initializeDirectiveBindings(scope, attrs, destination, bindings, directive) {\n\t var removeWatchCollection = [];\n\t forEach(bindings, function(definition, scopeName) {\n\t var attrName = definition.attrName,\n\t optional = definition.optional,\n\t mode = definition.mode, // @, =, or &\n\t lastValue,\n\t parentGet, parentSet, compare, removeWatch;\n\t\n\t switch (mode) {\n\t\n\t case '@':\n\t if (!optional && !hasOwnProperty.call(attrs, attrName)) {\n\t destination[scopeName] = attrs[attrName] = void 0;\n\t }\n\t attrs.$observe(attrName, function(value) {\n\t if (isString(value)) {\n\t destination[scopeName] = value;\n\t }\n\t });\n\t attrs.$$observers[attrName].$$scope = scope;\n\t lastValue = attrs[attrName];\n\t if (isString(lastValue)) {\n\t // If the attribute has been provided then we trigger an interpolation to ensure\n\t // the value is there for use in the link fn\n\t destination[scopeName] = $interpolate(lastValue)(scope);\n\t } else if (isBoolean(lastValue)) {\n\t // If the attributes is one of the BOOLEAN_ATTR then Angular will have converted\n\t // the value to boolean rather than a string, so we special case this situation\n\t destination[scopeName] = lastValue;\n\t }\n\t break;\n\t\n\t case '=':\n\t if (!hasOwnProperty.call(attrs, attrName)) {\n\t if (optional) break;\n\t attrs[attrName] = void 0;\n\t }\n\t if (optional && !attrs[attrName]) break;\n\t\n\t parentGet = $parse(attrs[attrName]);\n\t if (parentGet.literal) {\n\t compare = equals;\n\t } else {\n\t compare = function(a, b) { return a === b || (a !== a && b !== b); };\n\t }\n\t parentSet = parentGet.assign || function() {\n\t // reset the change, or we will throw this exception on every $digest\n\t lastValue = destination[scopeName] = parentGet(scope);\n\t throw $compileMinErr('nonassign',\n\t \"Expression '{0}' in attribute '{1}' used with directive '{2}' is non-assignable!\",\n\t attrs[attrName], attrName, directive.name);\n\t };\n\t lastValue = destination[scopeName] = parentGet(scope);\n\t var parentValueWatch = function parentValueWatch(parentValue) {\n\t if (!compare(parentValue, destination[scopeName])) {\n\t // we are out of sync and need to copy\n\t if (!compare(parentValue, lastValue)) {\n\t // parent changed and it has precedence\n\t destination[scopeName] = parentValue;\n\t } else {\n\t // if the parent can be assigned then do so\n\t parentSet(scope, parentValue = destination[scopeName]);\n\t }\n\t }\n\t return lastValue = parentValue;\n\t };\n\t parentValueWatch.$stateful = true;\n\t if (definition.collection) {\n\t removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch);\n\t } else {\n\t removeWatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);\n\t }\n\t removeWatchCollection.push(removeWatch);\n\t break;\n\t\n\t case '<':\n\t if (!hasOwnProperty.call(attrs, attrName)) {\n\t if (optional) break;\n\t attrs[attrName] = void 0;\n\t }\n\t if (optional && !attrs[attrName]) break;\n\t\n\t parentGet = $parse(attrs[attrName]);\n\t\n\t destination[scopeName] = parentGet(scope);\n\t\n\t removeWatch = scope.$watch(parentGet, function parentValueWatchAction(newParentValue) {\n\t destination[scopeName] = newParentValue;\n\t }, parentGet.literal);\n\t\n\t removeWatchCollection.push(removeWatch);\n\t break;\n\t\n\t case '&':\n\t // Don't assign Object.prototype method to scope\n\t parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop;\n\t\n\t // Don't assign noop to destination if expression is not valid\n\t if (parentGet === noop && optional) break;\n\t\n\t destination[scopeName] = function(locals) {\n\t return parentGet(scope, locals);\n\t };\n\t break;\n\t }\n\t });\n\t\n\t return removeWatchCollection.length && function removeWatches() {\n\t for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) {\n\t removeWatchCollection[i]();\n\t }\n\t };\n\t }\n\t }];\n\t}\n\t\n\tvar PREFIX_REGEXP = /^((?:x|data)[\\:\\-_])/i;\n\t/**\n\t * Converts all accepted directives format into proper directive name.\n\t * @param name Name to normalize\n\t */\n\tfunction directiveNormalize(name) {\n\t return camelCase(name.replace(PREFIX_REGEXP, ''));\n\t}\n\t\n\t/**\n\t * @ngdoc type\n\t * @name $compile.directive.Attributes\n\t *\n\t * @description\n\t * A shared object between directive compile / linking functions which contains normalized DOM\n\t * element attributes. The values reflect current binding state `{{ }}`. The normalization is\n\t * needed since all of these are treated as equivalent in Angular:\n\t *\n\t * ```\n\t * \n\t * ```\n\t */\n\t\n\t/**\n\t * @ngdoc property\n\t * @name $compile.directive.Attributes#$attr\n\t *\n\t * @description\n\t * A map of DOM element attribute names to the normalized name. This is\n\t * needed to do reverse lookup from normalized name back to actual name.\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $compile.directive.Attributes#$set\n\t * @kind function\n\t *\n\t * @description\n\t * Set DOM element attribute value.\n\t *\n\t *\n\t * @param {string} name Normalized element attribute name of the property to modify. The name is\n\t * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}\n\t * property to the original name.\n\t * @param {string} value Value to set the attribute to. The value can be an interpolated string.\n\t */\n\t\n\t\n\t\n\t/**\n\t * Closure compiler type information\n\t */\n\t\n\tfunction nodesetLinkingFn(\n\t /* angular.Scope */ scope,\n\t /* NodeList */ nodeList,\n\t /* Element */ rootElement,\n\t /* function(Function) */ boundTranscludeFn\n\t) {}\n\t\n\tfunction directiveLinkingFn(\n\t /* nodesetLinkingFn */ nodesetLinkingFn,\n\t /* angular.Scope */ scope,\n\t /* Node */ node,\n\t /* Element */ rootElement,\n\t /* function(Function) */ boundTranscludeFn\n\t) {}\n\t\n\tfunction tokenDifference(str1, str2) {\n\t var values = '',\n\t tokens1 = str1.split(/\\s+/),\n\t tokens2 = str2.split(/\\s+/);\n\t\n\t outer:\n\t for (var i = 0; i < tokens1.length; i++) {\n\t var token = tokens1[i];\n\t for (var j = 0; j < tokens2.length; j++) {\n\t if (token == tokens2[j]) continue outer;\n\t }\n\t values += (values.length > 0 ? ' ' : '') + token;\n\t }\n\t return values;\n\t}\n\t\n\tfunction removeComments(jqNodes) {\n\t jqNodes = jqLite(jqNodes);\n\t var i = jqNodes.length;\n\t\n\t if (i <= 1) {\n\t return jqNodes;\n\t }\n\t\n\t while (i--) {\n\t var node = jqNodes[i];\n\t if (node.nodeType === NODE_TYPE_COMMENT) {\n\t splice.call(jqNodes, i, 1);\n\t }\n\t }\n\t return jqNodes;\n\t}\n\t\n\tvar $controllerMinErr = minErr('$controller');\n\t\n\t\n\tvar CNTRL_REG = /^(\\S+)(\\s+as\\s+([\\w$]+))?$/;\n\tfunction identifierForController(controller, ident) {\n\t if (ident && isString(ident)) return ident;\n\t if (isString(controller)) {\n\t var match = CNTRL_REG.exec(controller);\n\t if (match) return match[3];\n\t }\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $controllerProvider\n\t * @description\n\t * The {@link ng.$controller $controller service} is used by Angular to create new\n\t * controllers.\n\t *\n\t * This provider allows controller registration via the\n\t * {@link ng.$controllerProvider#register register} method.\n\t */\n\tfunction $ControllerProvider() {\n\t var controllers = {},\n\t globals = false;\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $controllerProvider#register\n\t * @param {string|Object} name Controller name, or an object map of controllers where the keys are\n\t * the names and the values are the constructors.\n\t * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI\n\t * annotations in the array notation).\n\t */\n\t this.register = function(name, constructor) {\n\t assertNotHasOwnProperty(name, 'controller');\n\t if (isObject(name)) {\n\t extend(controllers, name);\n\t } else {\n\t controllers[name] = constructor;\n\t }\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $controllerProvider#allowGlobals\n\t * @description If called, allows `$controller` to find controller constructors on `window`\n\t */\n\t this.allowGlobals = function() {\n\t globals = true;\n\t };\n\t\n\t\n\t this.$get = ['$injector', '$window', function($injector, $window) {\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $controller\n\t * @requires $injector\n\t *\n\t * @param {Function|string} constructor If called with a function then it's considered to be the\n\t * controller constructor function. Otherwise it's considered to be a string which is used\n\t * to retrieve the controller constructor using the following steps:\n\t *\n\t * * check if a controller with given name is registered via `$controllerProvider`\n\t * * check if evaluating the string on the current scope returns a constructor\n\t * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global\n\t * `window` object (not recommended)\n\t *\n\t * The string can use the `controller as property` syntax, where the controller instance is published\n\t * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this\n\t * to work correctly.\n\t *\n\t * @param {Object} locals Injection locals for Controller.\n\t * @return {Object} Instance of given controller.\n\t *\n\t * @description\n\t * `$controller` service is responsible for instantiating controllers.\n\t *\n\t * It's just a simple call to {@link auto.$injector $injector}, but extracted into\n\t * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).\n\t */\n\t return function(expression, locals, later, ident) {\n\t // PRIVATE API:\n\t // param `later` --- indicates that the controller's constructor is invoked at a later time.\n\t // If true, $controller will allocate the object with the correct\n\t // prototype chain, but will not invoke the controller until a returned\n\t // callback is invoked.\n\t // param `ident` --- An optional label which overrides the label parsed from the controller\n\t // expression, if any.\n\t var instance, match, constructor, identifier;\n\t later = later === true;\n\t if (ident && isString(ident)) {\n\t identifier = ident;\n\t }\n\t\n\t if (isString(expression)) {\n\t match = expression.match(CNTRL_REG);\n\t if (!match) {\n\t throw $controllerMinErr('ctrlfmt',\n\t \"Badly formed controller string '{0}'. \" +\n\t \"Must match `__name__ as __id__` or `__name__`.\", expression);\n\t }\n\t constructor = match[1],\n\t identifier = identifier || match[3];\n\t expression = controllers.hasOwnProperty(constructor)\n\t ? controllers[constructor]\n\t : getter(locals.$scope, constructor, true) ||\n\t (globals ? getter($window, constructor, true) : undefined);\n\t\n\t assertArgFn(expression, constructor, true);\n\t }\n\t\n\t if (later) {\n\t // Instantiate controller later:\n\t // This machinery is used to create an instance of the object before calling the\n\t // controller's constructor itself.\n\t //\n\t // This allows properties to be added to the controller before the constructor is\n\t // invoked. Primarily, this is used for isolate scope bindings in $compile.\n\t //\n\t // This feature is not intended for use by applications, and is thus not documented\n\t // publicly.\n\t // Object creation: http://jsperf.com/create-constructor/2\n\t var controllerPrototype = (isArray(expression) ?\n\t expression[expression.length - 1] : expression).prototype;\n\t instance = Object.create(controllerPrototype || null);\n\t\n\t if (identifier) {\n\t addIdentifier(locals, identifier, instance, constructor || expression.name);\n\t }\n\t\n\t var instantiate;\n\t return instantiate = extend(function() {\n\t var result = $injector.invoke(expression, instance, locals, constructor);\n\t if (result !== instance && (isObject(result) || isFunction(result))) {\n\t instance = result;\n\t if (identifier) {\n\t // If result changed, re-assign controllerAs value to scope.\n\t addIdentifier(locals, identifier, instance, constructor || expression.name);\n\t }\n\t }\n\t return instance;\n\t }, {\n\t instance: instance,\n\t identifier: identifier\n\t });\n\t }\n\t\n\t instance = $injector.instantiate(expression, locals, constructor);\n\t\n\t if (identifier) {\n\t addIdentifier(locals, identifier, instance, constructor || expression.name);\n\t }\n\t\n\t return instance;\n\t };\n\t\n\t function addIdentifier(locals, identifier, instance, name) {\n\t if (!(locals && isObject(locals.$scope))) {\n\t throw minErr('$controller')('noscp',\n\t \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n\t name, identifier);\n\t }\n\t\n\t locals.$scope[identifier] = instance;\n\t }\n\t }];\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $document\n\t * @requires $window\n\t *\n\t * @description\n\t * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t

    $document title:

    \n\t

    window.document title:

    \n\t
    \n\t
    \n\t \n\t angular.module('documentExample', [])\n\t .controller('ExampleController', ['$scope', '$document', function($scope, $document) {\n\t $scope.title = $document[0].title;\n\t $scope.windowTitle = angular.element(window.document)[0].title;\n\t }]);\n\t \n\t
    \n\t */\n\tfunction $DocumentProvider() {\n\t this.$get = ['$window', function(window) {\n\t return jqLite(window.document);\n\t }];\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $exceptionHandler\n\t * @requires ng.$log\n\t *\n\t * @description\n\t * Any uncaught exception in angular expressions is delegated to this service.\n\t * The default implementation simply delegates to `$log.error` which logs it into\n\t * the browser console.\n\t *\n\t * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by\n\t * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.\n\t *\n\t * ## Example:\n\t *\n\t * ```js\n\t * angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {\n\t * return function(exception, cause) {\n\t * exception.message += ' (caused by \"' + cause + '\")';\n\t * throw exception;\n\t * };\n\t * });\n\t * ```\n\t *\n\t * This example will override the normal action of `$exceptionHandler`, to make angular\n\t * exceptions fail hard when they happen, instead of just logging to the console.\n\t *\n\t *
    \n\t * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`\n\t * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}\n\t * (unless executed during a digest).\n\t *\n\t * If you wish, you can manually delegate exceptions, e.g.\n\t * `try { ... } catch(e) { $exceptionHandler(e); }`\n\t *\n\t * @param {Error} exception Exception associated with the error.\n\t * @param {string=} cause optional information about the context in which\n\t * the error was thrown.\n\t *\n\t */\n\tfunction $ExceptionHandlerProvider() {\n\t this.$get = ['$log', function($log) {\n\t return function(exception, cause) {\n\t $log.error.apply($log, arguments);\n\t };\n\t }];\n\t}\n\t\n\tvar $$ForceReflowProvider = function() {\n\t this.$get = ['$document', function($document) {\n\t return function(domNode) {\n\t //the line below will force the browser to perform a repaint so\n\t //that all the animated elements within the animation frame will\n\t //be properly updated and drawn on screen. This is required to\n\t //ensure that the preparation animation is properly flushed so that\n\t //the active state picks up from there. DO NOT REMOVE THIS LINE.\n\t //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH\n\t //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND\n\t //WILL TAKE YEARS AWAY FROM YOUR LIFE.\n\t if (domNode) {\n\t if (!domNode.nodeType && domNode instanceof jqLite) {\n\t domNode = domNode[0];\n\t }\n\t } else {\n\t domNode = $document[0].body;\n\t }\n\t return domNode.offsetWidth + 1;\n\t };\n\t }];\n\t};\n\t\n\tvar APPLICATION_JSON = 'application/json';\n\tvar CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};\n\tvar JSON_START = /^\\[|^\\{(?!\\{)/;\n\tvar JSON_ENDS = {\n\t '[': /]$/,\n\t '{': /}$/\n\t};\n\tvar JSON_PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar $httpMinErr = minErr('$http');\n\tvar $httpMinErrLegacyFn = function(method) {\n\t return function() {\n\t throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method);\n\t };\n\t};\n\t\n\tfunction serializeValue(v) {\n\t if (isObject(v)) {\n\t return isDate(v) ? v.toISOString() : toJson(v);\n\t }\n\t return v;\n\t}\n\t\n\t\n\tfunction $HttpParamSerializerProvider() {\n\t /**\n\t * @ngdoc service\n\t * @name $httpParamSerializer\n\t * @description\n\t *\n\t * Default {@link $http `$http`} params serializer that converts objects to strings\n\t * according to the following rules:\n\t *\n\t * * `{'foo': 'bar'}` results in `foo=bar`\n\t * * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object)\n\t * * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element)\n\t * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D\"` (stringified and encoded representation of an object)\n\t *\n\t * Note that serializer will sort the request parameters alphabetically.\n\t * */\n\t\n\t this.$get = function() {\n\t return function ngParamSerializer(params) {\n\t if (!params) return '';\n\t var parts = [];\n\t forEachSorted(params, function(value, key) {\n\t if (value === null || isUndefined(value)) return;\n\t if (isArray(value)) {\n\t forEach(value, function(v, k) {\n\t parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(v)));\n\t });\n\t } else {\n\t parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value)));\n\t }\n\t });\n\t\n\t return parts.join('&');\n\t };\n\t };\n\t}\n\t\n\tfunction $HttpParamSerializerJQLikeProvider() {\n\t /**\n\t * @ngdoc service\n\t * @name $httpParamSerializerJQLike\n\t * @description\n\t *\n\t * Alternative {@link $http `$http`} params serializer that follows\n\t * jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic.\n\t * The serializer will also sort the params alphabetically.\n\t *\n\t * To use it for serializing `$http` request parameters, set it as the `paramSerializer` property:\n\t *\n\t * ```js\n\t * $http({\n\t * url: myUrl,\n\t * method: 'GET',\n\t * params: myParams,\n\t * paramSerializer: '$httpParamSerializerJQLike'\n\t * });\n\t * ```\n\t *\n\t * It is also possible to set it as the default `paramSerializer` in the\n\t * {@link $httpProvider#defaults `$httpProvider`}.\n\t *\n\t * Additionally, you can inject the serializer and use it explicitly, for example to serialize\n\t * form data for submission:\n\t *\n\t * ```js\n\t * .controller(function($http, $httpParamSerializerJQLike) {\n\t * //...\n\t *\n\t * $http({\n\t * url: myUrl,\n\t * method: 'POST',\n\t * data: $httpParamSerializerJQLike(myData),\n\t * headers: {\n\t * 'Content-Type': 'application/x-www-form-urlencoded'\n\t * }\n\t * });\n\t *\n\t * });\n\t * ```\n\t *\n\t * */\n\t this.$get = function() {\n\t return function jQueryLikeParamSerializer(params) {\n\t if (!params) return '';\n\t var parts = [];\n\t serialize(params, '', true);\n\t return parts.join('&');\n\t\n\t function serialize(toSerialize, prefix, topLevel) {\n\t if (toSerialize === null || isUndefined(toSerialize)) return;\n\t if (isArray(toSerialize)) {\n\t forEach(toSerialize, function(value, index) {\n\t serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']');\n\t });\n\t } else if (isObject(toSerialize) && !isDate(toSerialize)) {\n\t forEachSorted(toSerialize, function(value, key) {\n\t serialize(value, prefix +\n\t (topLevel ? '' : '[') +\n\t key +\n\t (topLevel ? '' : ']'));\n\t });\n\t } else {\n\t parts.push(encodeUriQuery(prefix) + '=' + encodeUriQuery(serializeValue(toSerialize)));\n\t }\n\t }\n\t };\n\t };\n\t}\n\t\n\tfunction defaultHttpResponseTransform(data, headers) {\n\t if (isString(data)) {\n\t // Strip json vulnerability protection prefix and trim whitespace\n\t var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim();\n\t\n\t if (tempData) {\n\t var contentType = headers('Content-Type');\n\t if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) {\n\t data = fromJson(tempData);\n\t }\n\t }\n\t }\n\t\n\t return data;\n\t}\n\t\n\tfunction isJsonLike(str) {\n\t var jsonStart = str.match(JSON_START);\n\t return jsonStart && JSON_ENDS[jsonStart[0]].test(str);\n\t}\n\t\n\t/**\n\t * Parse headers into key value object\n\t *\n\t * @param {string} headers Raw headers as a string\n\t * @returns {Object} Parsed headers as key value object\n\t */\n\tfunction parseHeaders(headers) {\n\t var parsed = createMap(), i;\n\t\n\t function fillInParsed(key, val) {\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t }\n\t\n\t if (isString(headers)) {\n\t forEach(headers.split('\\n'), function(line) {\n\t i = line.indexOf(':');\n\t fillInParsed(lowercase(trim(line.substr(0, i))), trim(line.substr(i + 1)));\n\t });\n\t } else if (isObject(headers)) {\n\t forEach(headers, function(headerVal, headerKey) {\n\t fillInParsed(lowercase(headerKey), trim(headerVal));\n\t });\n\t }\n\t\n\t return parsed;\n\t}\n\t\n\t\n\t/**\n\t * Returns a function that provides access to parsed headers.\n\t *\n\t * Headers are lazy parsed when first requested.\n\t * @see parseHeaders\n\t *\n\t * @param {(string|Object)} headers Headers to provide access to.\n\t * @returns {function(string=)} Returns a getter function which if called with:\n\t *\n\t * - if called with single an argument returns a single header value or null\n\t * - if called with no arguments returns an object containing all headers.\n\t */\n\tfunction headersGetter(headers) {\n\t var headersObj;\n\t\n\t return function(name) {\n\t if (!headersObj) headersObj = parseHeaders(headers);\n\t\n\t if (name) {\n\t var value = headersObj[lowercase(name)];\n\t if (value === void 0) {\n\t value = null;\n\t }\n\t return value;\n\t }\n\t\n\t return headersObj;\n\t };\n\t}\n\t\n\t\n\t/**\n\t * Chain all given functions\n\t *\n\t * This function is used for both request and response transforming\n\t *\n\t * @param {*} data Data to transform.\n\t * @param {function(string=)} headers HTTP headers getter fn.\n\t * @param {number} status HTTP status code of the response.\n\t * @param {(Function|Array.)} fns Function or an array of functions.\n\t * @returns {*} Transformed data.\n\t */\n\tfunction transformData(data, headers, status, fns) {\n\t if (isFunction(fns)) {\n\t return fns(data, headers, status);\n\t }\n\t\n\t forEach(fns, function(fn) {\n\t data = fn(data, headers, status);\n\t });\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction isSuccess(status) {\n\t return 200 <= status && status < 300;\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $httpProvider\n\t * @description\n\t * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.\n\t * */\n\tfunction $HttpProvider() {\n\t /**\n\t * @ngdoc property\n\t * @name $httpProvider#defaults\n\t * @description\n\t *\n\t * Object containing default values for all {@link ng.$http $http} requests.\n\t *\n\t * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}\n\t * that will provide the cache for all requests who set their `cache` property to `true`.\n\t * If you set the `defaults.cache = false` then only requests that specify their own custom\n\t * cache object will be cached. See {@link $http#caching $http Caching} for more information.\n\t *\n\t * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.\n\t * Defaults value is `'XSRF-TOKEN'`.\n\t *\n\t * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the\n\t * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.\n\t *\n\t * - **`defaults.headers`** - {Object} - Default headers for all $http requests.\n\t * Refer to {@link ng.$http#setting-http-headers $http} for documentation on\n\t * setting default headers.\n\t * - **`defaults.headers.common`**\n\t * - **`defaults.headers.post`**\n\t * - **`defaults.headers.put`**\n\t * - **`defaults.headers.patch`**\n\t *\n\t *\n\t * - **`defaults.paramSerializer`** - `{string|function(Object):string}` - A function\n\t * used to the prepare string representation of request parameters (specified as an object).\n\t * If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}.\n\t * Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}.\n\t *\n\t **/\n\t var defaults = this.defaults = {\n\t // transform incoming response data\n\t transformResponse: [defaultHttpResponseTransform],\n\t\n\t // transform outgoing request data\n\t transformRequest: [function(d) {\n\t return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d;\n\t }],\n\t\n\t // default headers\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n\t put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n\t patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON)\n\t },\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t paramSerializer: '$httpParamSerializer'\n\t };\n\t\n\t var useApplyAsync = false;\n\t /**\n\t * @ngdoc method\n\t * @name $httpProvider#useApplyAsync\n\t * @description\n\t *\n\t * Configure $http service to combine processing of multiple http responses received at around\n\t * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in\n\t * significant performance improvement for bigger applications that make many HTTP requests\n\t * concurrently (common during application bootstrap).\n\t *\n\t * Defaults to false. If no value is specified, returns the current configured value.\n\t *\n\t * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred\n\t * \"apply\" on the next tick, giving time for subsequent requests in a roughly ~10ms window\n\t * to load and share the same digest cycle.\n\t *\n\t * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.\n\t * otherwise, returns the current configured value.\n\t **/\n\t this.useApplyAsync = function(value) {\n\t if (isDefined(value)) {\n\t useApplyAsync = !!value;\n\t return this;\n\t }\n\t return useApplyAsync;\n\t };\n\t\n\t var useLegacyPromise = true;\n\t /**\n\t * @ngdoc method\n\t * @name $httpProvider#useLegacyPromiseExtensions\n\t * @description\n\t *\n\t * Configure `$http` service to return promises without the shorthand methods `success` and `error`.\n\t * This should be used to make sure that applications work without these methods.\n\t *\n\t * Defaults to true. If no value is specified, returns the current configured value.\n\t *\n\t * @param {boolean=} value If true, `$http` will return a promise with the deprecated legacy `success` and `error` methods.\n\t *\n\t * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.\n\t * otherwise, returns the current configured value.\n\t **/\n\t this.useLegacyPromiseExtensions = function(value) {\n\t if (isDefined(value)) {\n\t useLegacyPromise = !!value;\n\t return this;\n\t }\n\t return useLegacyPromise;\n\t };\n\t\n\t /**\n\t * @ngdoc property\n\t * @name $httpProvider#interceptors\n\t * @description\n\t *\n\t * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}\n\t * pre-processing of request or postprocessing of responses.\n\t *\n\t * These service factories are ordered by request, i.e. they are applied in the same order as the\n\t * array, on request, but reverse order, on response.\n\t *\n\t * {@link ng.$http#interceptors Interceptors detailed info}\n\t **/\n\t var interceptorFactories = this.interceptors = [];\n\t\n\t this.$get = ['$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector',\n\t function($httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector) {\n\t\n\t var defaultCache = $cacheFactory('$http');\n\t\n\t /**\n\t * Make sure that default param serializer is exposed as a function\n\t */\n\t defaults.paramSerializer = isString(defaults.paramSerializer) ?\n\t $injector.get(defaults.paramSerializer) : defaults.paramSerializer;\n\t\n\t /**\n\t * Interceptors stored in reverse order. Inner interceptors before outer interceptors.\n\t * The reversal is needed so that we can build up the interception chain around the\n\t * server request.\n\t */\n\t var reversedInterceptors = [];\n\t\n\t forEach(interceptorFactories, function(interceptorFactory) {\n\t reversedInterceptors.unshift(isString(interceptorFactory)\n\t ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));\n\t });\n\t\n\t /**\n\t * @ngdoc service\n\t * @kind function\n\t * @name $http\n\t * @requires ng.$httpBackend\n\t * @requires $cacheFactory\n\t * @requires $rootScope\n\t * @requires $q\n\t * @requires $injector\n\t *\n\t * @description\n\t * The `$http` service is a core Angular service that facilitates communication with the remote\n\t * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)\n\t * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).\n\t *\n\t * For unit testing applications that use `$http` service, see\n\t * {@link ngMock.$httpBackend $httpBackend mock}.\n\t *\n\t * For a higher level of abstraction, please check out the {@link ngResource.$resource\n\t * $resource} service.\n\t *\n\t * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by\n\t * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage\n\t * it is important to familiarize yourself with these APIs and the guarantees they provide.\n\t *\n\t *\n\t * ## General usage\n\t * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} —\n\t * that is used to generate an HTTP request and returns a {@link ng.$q promise}.\n\t *\n\t * ```js\n\t * // Simple GET request example:\n\t * $http({\n\t * method: 'GET',\n\t * url: '/someUrl'\n\t * }).then(function successCallback(response) {\n\t * // this callback will be called asynchronously\n\t * // when the response is available\n\t * }, function errorCallback(response) {\n\t * // called asynchronously if an error occurs\n\t * // or server returns response with an error status.\n\t * });\n\t * ```\n\t *\n\t * The response object has these properties:\n\t *\n\t * - **data** – `{string|Object}` – The response body transformed with the transform\n\t * functions.\n\t * - **status** – `{number}` – HTTP status code of the response.\n\t * - **headers** – `{function([headerName])}` – Header getter function.\n\t * - **config** – `{Object}` – The configuration object that was used to generate the request.\n\t * - **statusText** – `{string}` – HTTP status text of the response.\n\t *\n\t * A response status code between 200 and 299 is considered a success status and\n\t * will result in the success callback being called. Note that if the response is a redirect,\n\t * XMLHttpRequest will transparently follow it, meaning that the error callback will not be\n\t * called for such responses.\n\t *\n\t *\n\t * ## Shortcut methods\n\t *\n\t * Shortcut methods are also available. All shortcut methods require passing in the URL, and\n\t * request data must be passed in for POST/PUT requests. An optional config can be passed as the\n\t * last argument.\n\t *\n\t * ```js\n\t * $http.get('/someUrl', config).then(successCallback, errorCallback);\n\t * $http.post('/someUrl', data, config).then(successCallback, errorCallback);\n\t * ```\n\t *\n\t * Complete list of shortcut methods:\n\t *\n\t * - {@link ng.$http#get $http.get}\n\t * - {@link ng.$http#head $http.head}\n\t * - {@link ng.$http#post $http.post}\n\t * - {@link ng.$http#put $http.put}\n\t * - {@link ng.$http#delete $http.delete}\n\t * - {@link ng.$http#jsonp $http.jsonp}\n\t * - {@link ng.$http#patch $http.patch}\n\t *\n\t *\n\t * ## Writing Unit Tests that use $http\n\t * When unit testing (using {@link ngMock ngMock}), it is necessary to call\n\t * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending\n\t * request using trained responses.\n\t *\n\t * ```\n\t * $httpBackend.expectGET(...);\n\t * $http.get(...);\n\t * $httpBackend.flush();\n\t * ```\n\t *\n\t * ## Deprecation Notice\n\t *
    \n\t * The `$http` legacy promise methods `success` and `error` have been deprecated.\n\t * Use the standard `then` method instead.\n\t * If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to\n\t * `false` then these methods will throw {@link $http:legacy `$http/legacy`} error.\n\t *
    \n\t *\n\t * ## Setting HTTP Headers\n\t *\n\t * The $http service will automatically add certain HTTP headers to all requests. These defaults\n\t * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration\n\t * object, which currently contains this default configuration:\n\t *\n\t * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):\n\t * - `Accept: application/json, text/plain, * / *`\n\t * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)\n\t * - `Content-Type: application/json`\n\t * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)\n\t * - `Content-Type: application/json`\n\t *\n\t * To add or overwrite these defaults, simply add or remove a property from these configuration\n\t * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object\n\t * with the lowercased HTTP method name as the key, e.g.\n\t * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }`.\n\t *\n\t * The defaults can also be set at runtime via the `$http.defaults` object in the same\n\t * fashion. For example:\n\t *\n\t * ```\n\t * module.run(function($http) {\n\t * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w';\n\t * });\n\t * ```\n\t *\n\t * In addition, you can supply a `headers` property in the config object passed when\n\t * calling `$http(config)`, which overrides the defaults without changing them globally.\n\t *\n\t * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,\n\t * Use the `headers` property, setting the desired header to `undefined`. For example:\n\t *\n\t * ```js\n\t * var req = {\n\t * method: 'POST',\n\t * url: 'http://example.com',\n\t * headers: {\n\t * 'Content-Type': undefined\n\t * },\n\t * data: { test: 'test' }\n\t * }\n\t *\n\t * $http(req).then(function(){...}, function(){...});\n\t * ```\n\t *\n\t * ## Transforming Requests and Responses\n\t *\n\t * Both requests and responses can be transformed using transformation functions: `transformRequest`\n\t * and `transformResponse`. These properties can be a single function that returns\n\t * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions,\n\t * which allows you to `push` or `unshift` a new transformation function into the transformation chain.\n\t *\n\t * ### Default Transformations\n\t *\n\t * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and\n\t * `defaults.transformResponse` properties. If a request does not provide its own transformations\n\t * then these will be applied.\n\t *\n\t * You can augment or replace the default transformations by modifying these properties by adding to or\n\t * replacing the array.\n\t *\n\t * Angular provides the following default transformations:\n\t *\n\t * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):\n\t *\n\t * - If the `data` property of the request configuration object contains an object, serialize it\n\t * into JSON format.\n\t *\n\t * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):\n\t *\n\t * - If XSRF prefix is detected, strip it (see Security Considerations section below).\n\t * - If JSON response is detected, deserialize it using a JSON parser.\n\t *\n\t *\n\t * ### Overriding the Default Transformations Per Request\n\t *\n\t * If you wish override the request/response transformations only for a single request then provide\n\t * `transformRequest` and/or `transformResponse` properties on the configuration object passed\n\t * into `$http`.\n\t *\n\t * Note that if you provide these properties on the config object the default transformations will be\n\t * overwritten. If you wish to augment the default transformations then you must include them in your\n\t * local transformation array.\n\t *\n\t * The following code demonstrates adding a new response transformation to be run after the default response\n\t * transformations have been run.\n\t *\n\t * ```js\n\t * function appendTransform(defaults, transform) {\n\t *\n\t * // We can't guarantee that the default transformation is an array\n\t * defaults = angular.isArray(defaults) ? defaults : [defaults];\n\t *\n\t * // Append the new transformation to the defaults\n\t * return defaults.concat(transform);\n\t * }\n\t *\n\t * $http({\n\t * url: '...',\n\t * method: 'GET',\n\t * transformResponse: appendTransform($http.defaults.transformResponse, function(value) {\n\t * return doTransform(value);\n\t * })\n\t * });\n\t * ```\n\t *\n\t *\n\t * ## Caching\n\t *\n\t * To enable caching, set the request configuration `cache` property to `true` (to use default\n\t * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).\n\t * When the cache is enabled, `$http` stores the response from the server in the specified\n\t * cache. The next time the same request is made, the response is served from the cache without\n\t * sending a request to the server.\n\t *\n\t * Note that even if the response is served from cache, delivery of the data is asynchronous in\n\t * the same way that real requests are.\n\t *\n\t * If there are multiple GET requests for the same URL that should be cached using the same\n\t * cache, but the cache is not populated yet, only one request to the server will be made and\n\t * the remaining requests will be fulfilled using the response from the first request.\n\t *\n\t * You can change the default cache to a new object (built with\n\t * {@link ng.$cacheFactory `$cacheFactory`}) by updating the\n\t * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set\n\t * their `cache` property to `true` will now use this cache object.\n\t *\n\t * If you set the default cache to `false` then only requests that specify their own custom\n\t * cache object will be cached.\n\t *\n\t * ## Interceptors\n\t *\n\t * Before you start creating interceptors, be sure to understand the\n\t * {@link ng.$q $q and deferred/promise APIs}.\n\t *\n\t * For purposes of global error handling, authentication, or any kind of synchronous or\n\t * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be\n\t * able to intercept requests before they are handed to the server and\n\t * responses before they are handed over to the application code that\n\t * initiated these requests. The interceptors leverage the {@link ng.$q\n\t * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.\n\t *\n\t * The interceptors are service factories that are registered with the `$httpProvider` by\n\t * adding them to the `$httpProvider.interceptors` array. The factory is called and\n\t * injected with dependencies (if specified) and returns the interceptor.\n\t *\n\t * There are two kinds of interceptors (and two kinds of rejection interceptors):\n\t *\n\t * * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to\n\t * modify the `config` object or create a new one. The function needs to return the `config`\n\t * object directly, or a promise containing the `config` or a new `config` object.\n\t * * `requestError`: interceptor gets called when a previous interceptor threw an error or\n\t * resolved with a rejection.\n\t * * `response`: interceptors get called with http `response` object. The function is free to\n\t * modify the `response` object or create a new one. The function needs to return the `response`\n\t * object directly, or as a promise containing the `response` or a new `response` object.\n\t * * `responseError`: interceptor gets called when a previous interceptor threw an error or\n\t * resolved with a rejection.\n\t *\n\t *\n\t * ```js\n\t * // register the interceptor as a service\n\t * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n\t * return {\n\t * // optional method\n\t * 'request': function(config) {\n\t * // do something on success\n\t * return config;\n\t * },\n\t *\n\t * // optional method\n\t * 'requestError': function(rejection) {\n\t * // do something on error\n\t * if (canRecover(rejection)) {\n\t * return responseOrNewPromise\n\t * }\n\t * return $q.reject(rejection);\n\t * },\n\t *\n\t *\n\t *\n\t * // optional method\n\t * 'response': function(response) {\n\t * // do something on success\n\t * return response;\n\t * },\n\t *\n\t * // optional method\n\t * 'responseError': function(rejection) {\n\t * // do something on error\n\t * if (canRecover(rejection)) {\n\t * return responseOrNewPromise\n\t * }\n\t * return $q.reject(rejection);\n\t * }\n\t * };\n\t * });\n\t *\n\t * $httpProvider.interceptors.push('myHttpInterceptor');\n\t *\n\t *\n\t * // alternatively, register the interceptor via an anonymous factory\n\t * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {\n\t * return {\n\t * 'request': function(config) {\n\t * // same as above\n\t * },\n\t *\n\t * 'response': function(response) {\n\t * // same as above\n\t * }\n\t * };\n\t * });\n\t * ```\n\t *\n\t * ## Security Considerations\n\t *\n\t * When designing web applications, consider security threats from:\n\t *\n\t * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n\t * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)\n\t *\n\t * Both server and the client must cooperate in order to eliminate these threats. Angular comes\n\t * pre-configured with strategies that address these issues, but for this to work backend server\n\t * cooperation is required.\n\t *\n\t * ### JSON Vulnerability Protection\n\t *\n\t * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n\t * allows third party website to turn your JSON resource URL into\n\t * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To\n\t * counter this your server can prefix all JSON requests with following string `\")]}',\\n\"`.\n\t * Angular will automatically strip the prefix before processing it as JSON.\n\t *\n\t * For example if your server needs to return:\n\t * ```js\n\t * ['one','two']\n\t * ```\n\t *\n\t * which is vulnerable to attack, your server can return:\n\t * ```js\n\t * )]}',\n\t * ['one','two']\n\t * ```\n\t *\n\t * Angular will strip the prefix, before processing the JSON.\n\t *\n\t *\n\t * ### Cross Site Request Forgery (XSRF) Protection\n\t *\n\t * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is an attack technique by\n\t * which the attacker can trick an authenticated user into unknowingly executing actions on your\n\t * website. Angular provides a mechanism to counter XSRF. When performing XHR requests, the\n\t * $http service reads a token from a cookie (by default, `XSRF-TOKEN`) and sets it as an HTTP\n\t * header (`X-XSRF-TOKEN`). Since only JavaScript that runs on your domain could read the\n\t * cookie, your server can be assured that the XHR came from JavaScript running on your domain.\n\t * The header will not be set for cross-domain requests.\n\t *\n\t * To take advantage of this, your server needs to set a token in a JavaScript readable session\n\t * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the\n\t * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure\n\t * that only JavaScript running on your domain could have sent the request. The token must be\n\t * unique for each user and must be verifiable by the server (to prevent the JavaScript from\n\t * making up its own tokens). We recommend that the token is a digest of your site's\n\t * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography))\n\t * for added security.\n\t *\n\t * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName\n\t * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,\n\t * or the per-request config object.\n\t *\n\t * In order to prevent collisions in environments where multiple Angular apps share the\n\t * same domain or subdomain, we recommend that each application uses unique cookie name.\n\t *\n\t * @param {object} config Object describing the request to be made and how it should be\n\t * processed. The object has following properties:\n\t *\n\t * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)\n\t * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.\n\t * - **params** – `{Object.}` – Map of strings or objects which will be serialized\n\t * with the `paramSerializer` and appended as GET parameters.\n\t * - **data** – `{string|Object}` – Data to be sent as the request message data.\n\t * - **headers** – `{Object}` – Map of strings or functions which return strings representing\n\t * HTTP headers to send to the server. If the return value of a function is null, the\n\t * header will not be sent. Functions accept a config object as an argument.\n\t * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.\n\t * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.\n\t * - **transformRequest** –\n\t * `{function(data, headersGetter)|Array.}` –\n\t * transform function or an array of such functions. The transform function takes the http\n\t * request body and headers and returns its transformed (typically serialized) version.\n\t * See {@link ng.$http#overriding-the-default-transformations-per-request\n\t * Overriding the Default Transformations}\n\t * - **transformResponse** –\n\t * `{function(data, headersGetter, status)|Array.}` –\n\t * transform function or an array of such functions. The transform function takes the http\n\t * response body, headers and status and returns its transformed (typically deserialized) version.\n\t * See {@link ng.$http#overriding-the-default-transformations-per-request\n\t * Overriding the Default TransformationjqLiks}\n\t * - **paramSerializer** - `{string|function(Object):string}` - A function used to\n\t * prepare the string representation of request parameters (specified as an object).\n\t * If specified as string, it is interpreted as function registered with the\n\t * {@link $injector $injector}, which means you can create your own serializer\n\t * by registering it as a {@link auto.$provide#service service}.\n\t * The default serializer is the {@link $httpParamSerializer $httpParamSerializer};\n\t * alternatively, you can use the {@link $httpParamSerializerJQLike $httpParamSerializerJQLike}\n\t * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n\t * GET request, otherwise if a cache instance built with\n\t * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n\t * caching.\n\t * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}\n\t * that should abort the request when resolved.\n\t * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the\n\t * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)\n\t * for more information.\n\t * - **responseType** - `{string}` - see\n\t * [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype).\n\t *\n\t * @returns {HttpPromise} Returns a {@link ng.$q `Promise}` that will be resolved to a response object\n\t * when the request succeeds or fails.\n\t *\n\t *\n\t * @property {Array.} pendingRequests Array of config objects for currently pending\n\t * requests. This is primarily meant to be used for debugging purposes.\n\t *\n\t *\n\t * @example\n\t\n\t\n\t
    \n\t \n\t \n\t
    \n\t \n\t \n\t \n\t
    http status code: {{status}}
    \n\t
    http response data: {{data}}
    \n\t
    \n\t
    \n\t\n\t angular.module('httpExample', [])\n\t .controller('FetchController', ['$scope', '$http', '$templateCache',\n\t function($scope, $http, $templateCache) {\n\t $scope.method = 'GET';\n\t $scope.url = 'http-hello.html';\n\t\n\t $scope.fetch = function() {\n\t $scope.code = null;\n\t $scope.response = null;\n\t\n\t $http({method: $scope.method, url: $scope.url, cache: $templateCache}).\n\t then(function(response) {\n\t $scope.status = response.status;\n\t $scope.data = response.data;\n\t }, function(response) {\n\t $scope.data = response.data || \"Request failed\";\n\t $scope.status = response.status;\n\t });\n\t };\n\t\n\t $scope.updateModel = function(method, url) {\n\t $scope.method = method;\n\t $scope.url = url;\n\t };\n\t }]);\n\t\n\t\n\t Hello, $http!\n\t\n\t\n\t var status = element(by.binding('status'));\n\t var data = element(by.binding('data'));\n\t var fetchBtn = element(by.id('fetchbtn'));\n\t var sampleGetBtn = element(by.id('samplegetbtn'));\n\t var sampleJsonpBtn = element(by.id('samplejsonpbtn'));\n\t var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));\n\t\n\t it('should make an xhr GET request', function() {\n\t sampleGetBtn.click();\n\t fetchBtn.click();\n\t expect(status.getText()).toMatch('200');\n\t expect(data.getText()).toMatch(/Hello, \\$http!/);\n\t });\n\t\n\t// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185\n\t// it('should make a JSONP request to angularjs.org', function() {\n\t// sampleJsonpBtn.click();\n\t// fetchBtn.click();\n\t// expect(status.getText()).toMatch('200');\n\t// expect(data.getText()).toMatch(/Super Hero!/);\n\t// });\n\t\n\t it('should make JSONP request to invalid URL and invoke the error handler',\n\t function() {\n\t invalidJsonpBtn.click();\n\t fetchBtn.click();\n\t expect(status.getText()).toMatch('0');\n\t expect(data.getText()).toMatch('Request failed');\n\t });\n\t\n\t
    \n\t */\n\t function $http(requestConfig) {\n\t\n\t if (!isObject(requestConfig)) {\n\t throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig);\n\t }\n\t\n\t if (!isString(requestConfig.url)) {\n\t throw minErr('$http')('badreq', 'Http request configuration url must be a string. Received: {0}', requestConfig.url);\n\t }\n\t\n\t var config = extend({\n\t method: 'get',\n\t transformRequest: defaults.transformRequest,\n\t transformResponse: defaults.transformResponse,\n\t paramSerializer: defaults.paramSerializer\n\t }, requestConfig);\n\t\n\t config.headers = mergeHeaders(requestConfig);\n\t config.method = uppercase(config.method);\n\t config.paramSerializer = isString(config.paramSerializer) ?\n\t $injector.get(config.paramSerializer) : config.paramSerializer;\n\t\n\t var serverRequest = function(config) {\n\t var headers = config.headers;\n\t var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest);\n\t\n\t // strip content-type if data is undefined\n\t if (isUndefined(reqData)) {\n\t forEach(headers, function(value, header) {\n\t if (lowercase(header) === 'content-type') {\n\t delete headers[header];\n\t }\n\t });\n\t }\n\t\n\t if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {\n\t config.withCredentials = defaults.withCredentials;\n\t }\n\t\n\t // send request\n\t return sendReq(config, reqData).then(transformResponse, transformResponse);\n\t };\n\t\n\t var chain = [serverRequest, undefined];\n\t var promise = $q.when(config);\n\t\n\t // apply interceptors\n\t forEach(reversedInterceptors, function(interceptor) {\n\t if (interceptor.request || interceptor.requestError) {\n\t chain.unshift(interceptor.request, interceptor.requestError);\n\t }\n\t if (interceptor.response || interceptor.responseError) {\n\t chain.push(interceptor.response, interceptor.responseError);\n\t }\n\t });\n\t\n\t while (chain.length) {\n\t var thenFn = chain.shift();\n\t var rejectFn = chain.shift();\n\t\n\t promise = promise.then(thenFn, rejectFn);\n\t }\n\t\n\t if (useLegacyPromise) {\n\t promise.success = function(fn) {\n\t assertArgFn(fn, 'fn');\n\t\n\t promise.then(function(response) {\n\t fn(response.data, response.status, response.headers, config);\n\t });\n\t return promise;\n\t };\n\t\n\t promise.error = function(fn) {\n\t assertArgFn(fn, 'fn');\n\t\n\t promise.then(null, function(response) {\n\t fn(response.data, response.status, response.headers, config);\n\t });\n\t return promise;\n\t };\n\t } else {\n\t promise.success = $httpMinErrLegacyFn('success');\n\t promise.error = $httpMinErrLegacyFn('error');\n\t }\n\t\n\t return promise;\n\t\n\t function transformResponse(response) {\n\t // make a copy since the response must be cacheable\n\t var resp = extend({}, response);\n\t resp.data = transformData(response.data, response.headers, response.status,\n\t config.transformResponse);\n\t return (isSuccess(response.status))\n\t ? resp\n\t : $q.reject(resp);\n\t }\n\t\n\t function executeHeaderFns(headers, config) {\n\t var headerContent, processedHeaders = {};\n\t\n\t forEach(headers, function(headerFn, header) {\n\t if (isFunction(headerFn)) {\n\t headerContent = headerFn(config);\n\t if (headerContent != null) {\n\t processedHeaders[header] = headerContent;\n\t }\n\t } else {\n\t processedHeaders[header] = headerFn;\n\t }\n\t });\n\t\n\t return processedHeaders;\n\t }\n\t\n\t function mergeHeaders(config) {\n\t var defHeaders = defaults.headers,\n\t reqHeaders = extend({}, config.headers),\n\t defHeaderName, lowercaseDefHeaderName, reqHeaderName;\n\t\n\t defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);\n\t\n\t // using for-in instead of forEach to avoid unnecessary iteration after header has been found\n\t defaultHeadersIteration:\n\t for (defHeaderName in defHeaders) {\n\t lowercaseDefHeaderName = lowercase(defHeaderName);\n\t\n\t for (reqHeaderName in reqHeaders) {\n\t if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {\n\t continue defaultHeadersIteration;\n\t }\n\t }\n\t\n\t reqHeaders[defHeaderName] = defHeaders[defHeaderName];\n\t }\n\t\n\t // execute if header value is a function for merged headers\n\t return executeHeaderFns(reqHeaders, shallowCopy(config));\n\t }\n\t }\n\t\n\t $http.pendingRequests = [];\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $http#get\n\t *\n\t * @description\n\t * Shortcut method to perform `GET` request.\n\t *\n\t * @param {string} url Relative or absolute URL specifying the destination of the request\n\t * @param {Object=} config Optional configuration object\n\t * @returns {HttpPromise} Future object\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $http#delete\n\t *\n\t * @description\n\t * Shortcut method to perform `DELETE` request.\n\t *\n\t * @param {string} url Relative or absolute URL specifying the destination of the request\n\t * @param {Object=} config Optional configuration object\n\t * @returns {HttpPromise} Future object\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $http#head\n\t *\n\t * @description\n\t * Shortcut method to perform `HEAD` request.\n\t *\n\t * @param {string} url Relative or absolute URL specifying the destination of the request\n\t * @param {Object=} config Optional configuration object\n\t * @returns {HttpPromise} Future object\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $http#jsonp\n\t *\n\t * @description\n\t * Shortcut method to perform `JSONP` request.\n\t *\n\t * @param {string} url Relative or absolute URL specifying the destination of the request.\n\t * The name of the callback should be the string `JSON_CALLBACK`.\n\t * @param {Object=} config Optional configuration object\n\t * @returns {HttpPromise} Future object\n\t */\n\t createShortMethods('get', 'delete', 'head', 'jsonp');\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $http#post\n\t *\n\t * @description\n\t * Shortcut method to perform `POST` request.\n\t *\n\t * @param {string} url Relative or absolute URL specifying the destination of the request\n\t * @param {*} data Request content\n\t * @param {Object=} config Optional configuration object\n\t * @returns {HttpPromise} Future object\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $http#put\n\t *\n\t * @description\n\t * Shortcut method to perform `PUT` request.\n\t *\n\t * @param {string} url Relative or absolute URL specifying the destination of the request\n\t * @param {*} data Request content\n\t * @param {Object=} config Optional configuration object\n\t * @returns {HttpPromise} Future object\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $http#patch\n\t *\n\t * @description\n\t * Shortcut method to perform `PATCH` request.\n\t *\n\t * @param {string} url Relative or absolute URL specifying the destination of the request\n\t * @param {*} data Request content\n\t * @param {Object=} config Optional configuration object\n\t * @returns {HttpPromise} Future object\n\t */\n\t createShortMethodsWithData('post', 'put', 'patch');\n\t\n\t /**\n\t * @ngdoc property\n\t * @name $http#defaults\n\t *\n\t * @description\n\t * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of\n\t * default headers, withCredentials as well as request and response transformations.\n\t *\n\t * See \"Setting HTTP Headers\" and \"Transforming Requests and Responses\" sections above.\n\t */\n\t $http.defaults = defaults;\n\t\n\t\n\t return $http;\n\t\n\t\n\t function createShortMethods(names) {\n\t forEach(arguments, function(name) {\n\t $http[name] = function(url, config) {\n\t return $http(extend({}, config || {}, {\n\t method: name,\n\t url: url\n\t }));\n\t };\n\t });\n\t }\n\t\n\t\n\t function createShortMethodsWithData(name) {\n\t forEach(arguments, function(name) {\n\t $http[name] = function(url, data, config) {\n\t return $http(extend({}, config || {}, {\n\t method: name,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t });\n\t }\n\t\n\t\n\t /**\n\t * Makes the request.\n\t *\n\t * !!! ACCESSES CLOSURE VARS:\n\t * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests\n\t */\n\t function sendReq(config, reqData) {\n\t var deferred = $q.defer(),\n\t promise = deferred.promise,\n\t cache,\n\t cachedResp,\n\t reqHeaders = config.headers,\n\t url = buildUrl(config.url, config.paramSerializer(config.params));\n\t\n\t $http.pendingRequests.push(config);\n\t promise.then(removePendingReq, removePendingReq);\n\t\n\t\n\t if ((config.cache || defaults.cache) && config.cache !== false &&\n\t (config.method === 'GET' || config.method === 'JSONP')) {\n\t cache = isObject(config.cache) ? config.cache\n\t : isObject(defaults.cache) ? defaults.cache\n\t : defaultCache;\n\t }\n\t\n\t if (cache) {\n\t cachedResp = cache.get(url);\n\t if (isDefined(cachedResp)) {\n\t if (isPromiseLike(cachedResp)) {\n\t // cached request has already been sent, but there is no response yet\n\t cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult);\n\t } else {\n\t // serving from cache\n\t if (isArray(cachedResp)) {\n\t resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);\n\t } else {\n\t resolvePromise(cachedResp, 200, {}, 'OK');\n\t }\n\t }\n\t } else {\n\t // put the promise for the non-transformed response into cache as a placeholder\n\t cache.put(url, promise);\n\t }\n\t }\n\t\n\t\n\t // if we won't have the response in cache, set the xsrf headers and\n\t // send the request to the backend\n\t if (isUndefined(cachedResp)) {\n\t var xsrfValue = urlIsSameOrigin(config.url)\n\t ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName]\n\t : undefined;\n\t if (xsrfValue) {\n\t reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;\n\t }\n\t\n\t $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,\n\t config.withCredentials, config.responseType);\n\t }\n\t\n\t return promise;\n\t\n\t\n\t /**\n\t * Callback registered to $httpBackend():\n\t * - caches the response if desired\n\t * - resolves the raw $http promise\n\t * - calls $apply\n\t */\n\t function done(status, response, headersString, statusText) {\n\t if (cache) {\n\t if (isSuccess(status)) {\n\t cache.put(url, [status, response, parseHeaders(headersString), statusText]);\n\t } else {\n\t // remove promise from the cache\n\t cache.remove(url);\n\t }\n\t }\n\t\n\t function resolveHttpPromise() {\n\t resolvePromise(response, status, headersString, statusText);\n\t }\n\t\n\t if (useApplyAsync) {\n\t $rootScope.$applyAsync(resolveHttpPromise);\n\t } else {\n\t resolveHttpPromise();\n\t if (!$rootScope.$$phase) $rootScope.$apply();\n\t }\n\t }\n\t\n\t\n\t /**\n\t * Resolves the raw $http promise.\n\t */\n\t function resolvePromise(response, status, headers, statusText) {\n\t //status: HTTP response status code, 0, -1 (aborted by timeout / promise)\n\t status = status >= -1 ? status : 0;\n\t\n\t (isSuccess(status) ? deferred.resolve : deferred.reject)({\n\t data: response,\n\t status: status,\n\t headers: headersGetter(headers),\n\t config: config,\n\t statusText: statusText\n\t });\n\t }\n\t\n\t function resolvePromiseWithResult(result) {\n\t resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText);\n\t }\n\t\n\t function removePendingReq() {\n\t var idx = $http.pendingRequests.indexOf(config);\n\t if (idx !== -1) $http.pendingRequests.splice(idx, 1);\n\t }\n\t }\n\t\n\t\n\t function buildUrl(url, serializedParams) {\n\t if (serializedParams.length > 0) {\n\t url += ((url.indexOf('?') == -1) ? '?' : '&') + serializedParams;\n\t }\n\t return url;\n\t }\n\t }];\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $xhrFactory\n\t *\n\t * @description\n\t * Factory function used to create XMLHttpRequest objects.\n\t *\n\t * Replace or decorate this service to create your own custom XMLHttpRequest objects.\n\t *\n\t * ```\n\t * angular.module('myApp', [])\n\t * .factory('$xhrFactory', function() {\n\t * return function createXhr(method, url) {\n\t * return new window.XMLHttpRequest({mozSystem: true});\n\t * };\n\t * });\n\t * ```\n\t *\n\t * @param {string} method HTTP method of the request (GET, POST, PUT, ..)\n\t * @param {string} url URL of the request.\n\t */\n\tfunction $xhrFactoryProvider() {\n\t this.$get = function() {\n\t return function createXhr() {\n\t return new window.XMLHttpRequest();\n\t };\n\t };\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $httpBackend\n\t * @requires $window\n\t * @requires $document\n\t * @requires $xhrFactory\n\t *\n\t * @description\n\t * HTTP backend used by the {@link ng.$http service} that delegates to\n\t * XMLHttpRequest object or JSONP and deals with browser incompatibilities.\n\t *\n\t * You should never need to use this service directly, instead use the higher-level abstractions:\n\t * {@link ng.$http $http} or {@link ngResource.$resource $resource}.\n\t *\n\t * During testing this implementation is swapped with {@link ngMock.$httpBackend mock\n\t * $httpBackend} which can be trained with responses.\n\t */\n\tfunction $HttpBackendProvider() {\n\t this.$get = ['$browser', '$window', '$document', '$xhrFactory', function($browser, $window, $document, $xhrFactory) {\n\t return createHttpBackend($browser, $xhrFactory, $browser.defer, $window.angular.callbacks, $document[0]);\n\t }];\n\t}\n\t\n\tfunction createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {\n\t // TODO(vojta): fix the signature\n\t return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {\n\t $browser.$$incOutstandingRequestCount();\n\t url = url || $browser.url();\n\t\n\t if (lowercase(method) == 'jsonp') {\n\t var callbackId = '_' + (callbacks.counter++).toString(36);\n\t callbacks[callbackId] = function(data) {\n\t callbacks[callbackId].data = data;\n\t callbacks[callbackId].called = true;\n\t };\n\t\n\t var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),\n\t callbackId, function(status, text) {\n\t completeRequest(callback, status, callbacks[callbackId].data, \"\", text);\n\t callbacks[callbackId] = noop;\n\t });\n\t } else {\n\t\n\t var xhr = createXhr(method, url);\n\t\n\t xhr.open(method, url, true);\n\t forEach(headers, function(value, key) {\n\t if (isDefined(value)) {\n\t xhr.setRequestHeader(key, value);\n\t }\n\t });\n\t\n\t xhr.onload = function requestLoaded() {\n\t var statusText = xhr.statusText || '';\n\t\n\t // responseText is the old-school way of retrieving response (supported by IE9)\n\t // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n\t var response = ('response' in xhr) ? xhr.response : xhr.responseText;\n\t\n\t // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n\t var status = xhr.status === 1223 ? 204 : xhr.status;\n\t\n\t // fix status code when it is 0 (0 status is undocumented).\n\t // Occurs when accessing file resources or on Android 4.1 stock browser\n\t // while retrieving files from application cache.\n\t if (status === 0) {\n\t status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;\n\t }\n\t\n\t completeRequest(callback,\n\t status,\n\t response,\n\t xhr.getAllResponseHeaders(),\n\t statusText);\n\t };\n\t\n\t var requestError = function() {\n\t // The response is always empty\n\t // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error\n\t completeRequest(callback, -1, null, null, '');\n\t };\n\t\n\t xhr.onerror = requestError;\n\t xhr.onabort = requestError;\n\t\n\t if (withCredentials) {\n\t xhr.withCredentials = true;\n\t }\n\t\n\t if (responseType) {\n\t try {\n\t xhr.responseType = responseType;\n\t } catch (e) {\n\t // WebKit added support for the json responseType value on 09/03/2013\n\t // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n\t // known to throw when setting the value \"json\" as the response type. Other older\n\t // browsers implementing the responseType\n\t //\n\t // The json response type can be ignored if not supported, because JSON payloads are\n\t // parsed on the client-side regardless.\n\t if (responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t xhr.send(isUndefined(post) ? null : post);\n\t }\n\t\n\t if (timeout > 0) {\n\t var timeoutId = $browserDefer(timeoutRequest, timeout);\n\t } else if (isPromiseLike(timeout)) {\n\t timeout.then(timeoutRequest);\n\t }\n\t\n\t\n\t function timeoutRequest() {\n\t jsonpDone && jsonpDone();\n\t xhr && xhr.abort();\n\t }\n\t\n\t function completeRequest(callback, status, response, headersString, statusText) {\n\t // cancel timeout and subsequent timeout promise resolution\n\t if (isDefined(timeoutId)) {\n\t $browserDefer.cancel(timeoutId);\n\t }\n\t jsonpDone = xhr = null;\n\t\n\t callback(status, response, headersString, statusText);\n\t $browser.$$completeOutstandingRequest(noop);\n\t }\n\t };\n\t\n\t function jsonpReq(url, callbackId, done) {\n\t // we can't use jQuery/jqLite here because jQuery does crazy stuff with script elements, e.g.:\n\t // - fetches local scripts via XHR and evals them\n\t // - adds and immediately removes script elements from the document\n\t var script = rawDocument.createElement('script'), callback = null;\n\t script.type = \"text/javascript\";\n\t script.src = url;\n\t script.async = true;\n\t\n\t callback = function(event) {\n\t removeEventListenerFn(script, \"load\", callback);\n\t removeEventListenerFn(script, \"error\", callback);\n\t rawDocument.body.removeChild(script);\n\t script = null;\n\t var status = -1;\n\t var text = \"unknown\";\n\t\n\t if (event) {\n\t if (event.type === \"load\" && !callbacks[callbackId].called) {\n\t event = { type: \"error\" };\n\t }\n\t text = event.type;\n\t status = event.type === \"error\" ? 404 : 200;\n\t }\n\t\n\t if (done) {\n\t done(status, text);\n\t }\n\t };\n\t\n\t addEventListenerFn(script, \"load\", callback);\n\t addEventListenerFn(script, \"error\", callback);\n\t rawDocument.body.appendChild(script);\n\t return callback;\n\t }\n\t}\n\t\n\tvar $interpolateMinErr = angular.$interpolateMinErr = minErr('$interpolate');\n\t$interpolateMinErr.throwNoconcat = function(text) {\n\t throw $interpolateMinErr('noconcat',\n\t \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows \" +\n\t \"interpolations that concatenate multiple expressions when a trusted value is \" +\n\t \"required. See http://docs.angularjs.org/api/ng.$sce\", text);\n\t};\n\t\n\t$interpolateMinErr.interr = function(text, err) {\n\t return $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text, err.toString());\n\t};\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $interpolateProvider\n\t *\n\t * @description\n\t *\n\t * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.\n\t *\n\t *
    \n\t * This feature is sometimes used to mix different markup languages, e.g. to wrap an Angular\n\t * template within a Python Jinja template (or any other template language). Mixing templating\n\t * languages is **very dangerous**. The embedding template language will not safely escape Angular\n\t * expressions, so any user-controlled values in the template will cause Cross Site Scripting (XSS)\n\t * security bugs!\n\t *
    \n\t *\n\t * @example\n\t\n\t\n\t\n\t
    \n\t //demo.label//\n\t
    \n\t
    \n\t\n\t it('should interpolate binding with custom symbols', function() {\n\t expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');\n\t });\n\t\n\t
    \n\t */\n\tfunction $InterpolateProvider() {\n\t var startSymbol = '{{';\n\t var endSymbol = '}}';\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $interpolateProvider#startSymbol\n\t * @description\n\t * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.\n\t *\n\t * @param {string=} value new value to set the starting symbol to.\n\t * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n\t */\n\t this.startSymbol = function(value) {\n\t if (value) {\n\t startSymbol = value;\n\t return this;\n\t } else {\n\t return startSymbol;\n\t }\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $interpolateProvider#endSymbol\n\t * @description\n\t * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n\t *\n\t * @param {string=} value new value to set the ending symbol to.\n\t * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n\t */\n\t this.endSymbol = function(value) {\n\t if (value) {\n\t endSymbol = value;\n\t return this;\n\t } else {\n\t return endSymbol;\n\t }\n\t };\n\t\n\t\n\t this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {\n\t var startSymbolLength = startSymbol.length,\n\t endSymbolLength = endSymbol.length,\n\t escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),\n\t escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');\n\t\n\t function escape(ch) {\n\t return '\\\\\\\\\\\\' + ch;\n\t }\n\t\n\t function unescapeText(text) {\n\t return text.replace(escapedStartRegexp, startSymbol).\n\t replace(escapedEndRegexp, endSymbol);\n\t }\n\t\n\t function stringify(value) {\n\t if (value == null) { // null || undefined\n\t return '';\n\t }\n\t switch (typeof value) {\n\t case 'string':\n\t break;\n\t case 'number':\n\t value = '' + value;\n\t break;\n\t default:\n\t value = toJson(value);\n\t }\n\t\n\t return value;\n\t }\n\t\n\t //TODO: this is the same as the constantWatchDelegate in parse.js\n\t function constantWatchDelegate(scope, listener, objectEquality, constantInterp) {\n\t var unwatch;\n\t return unwatch = scope.$watch(function constantInterpolateWatch(scope) {\n\t unwatch();\n\t return constantInterp(scope);\n\t }, listener, objectEquality);\n\t }\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $interpolate\n\t * @kind function\n\t *\n\t * @requires $parse\n\t * @requires $sce\n\t *\n\t * @description\n\t *\n\t * Compiles a string with markup into an interpolation function. This service is used by the\n\t * HTML {@link ng.$compile $compile} service for data binding. See\n\t * {@link ng.$interpolateProvider $interpolateProvider} for configuring the\n\t * interpolation markup.\n\t *\n\t *\n\t * ```js\n\t * var $interpolate = ...; // injected\n\t * var exp = $interpolate('Hello {{name | uppercase}}!');\n\t * expect(exp({name:'Angular'})).toEqual('Hello ANGULAR!');\n\t * ```\n\t *\n\t * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is\n\t * `true`, the interpolation function will return `undefined` unless all embedded expressions\n\t * evaluate to a value other than `undefined`.\n\t *\n\t * ```js\n\t * var $interpolate = ...; // injected\n\t * var context = {greeting: 'Hello', name: undefined };\n\t *\n\t * // default \"forgiving\" mode\n\t * var exp = $interpolate('{{greeting}} {{name}}!');\n\t * expect(exp(context)).toEqual('Hello !');\n\t *\n\t * // \"allOrNothing\" mode\n\t * exp = $interpolate('{{greeting}} {{name}}!', false, null, true);\n\t * expect(exp(context)).toBeUndefined();\n\t * context.name = 'Angular';\n\t * expect(exp(context)).toEqual('Hello Angular!');\n\t * ```\n\t *\n\t * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.\n\t *\n\t * ####Escaped Interpolation\n\t * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers\n\t * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).\n\t * It will be rendered as a regular start/end marker, and will not be interpreted as an expression\n\t * or binding.\n\t *\n\t * This enables web-servers to prevent script injection attacks and defacing attacks, to some\n\t * degree, while also enabling code examples to work without relying on the\n\t * {@link ng.directive:ngNonBindable ngNonBindable} directive.\n\t *\n\t * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,\n\t * replacing angle brackets (<, >) with &lt; and &gt; respectively, and replacing all\n\t * interpolation start/end markers with their escaped counterparts.**\n\t *\n\t * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered\n\t * output when the $interpolate service processes the text. So, for HTML elements interpolated\n\t * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter\n\t * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,\n\t * this is typically useful only when user-data is used in rendering a template from the server, or\n\t * when otherwise untrusted data is used by a directive.\n\t *\n\t * \n\t * \n\t *
    \n\t *

    {{apptitle}}: \\{\\{ username = \"defaced value\"; \\}\\}\n\t *

    \n\t *

    {{username}} attempts to inject code which will deface the\n\t * application, but fails to accomplish their task, because the server has correctly\n\t * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)\n\t * characters.

    \n\t *

    Instead, the result of the attempted script injection is visible, and can be removed\n\t * from the database by an administrator.

    \n\t *
    \n\t *
    \n\t *
    \n\t *\n\t * @param {string} text The text with markup to interpolate.\n\t * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have\n\t * embedded expression in order to return an interpolation function. Strings with no\n\t * embedded expression will return null for the interpolation function.\n\t * @param {string=} trustedContext when provided, the returned function passes the interpolated\n\t * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,\n\t * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that\n\t * provides Strict Contextual Escaping for details.\n\t * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined\n\t * unless all embedded expressions evaluate to a value other than `undefined`.\n\t * @returns {function(context)} an interpolation function which is used to compute the\n\t * interpolated string. The function has these parameters:\n\t *\n\t * - `context`: evaluation context for all expressions embedded in the interpolated text\n\t */\n\t function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {\n\t // Provide a quick exit and simplified result function for text with no interpolation\n\t if (!text.length || text.indexOf(startSymbol) === -1) {\n\t var constantInterp;\n\t if (!mustHaveExpression) {\n\t var unescapedText = unescapeText(text);\n\t constantInterp = valueFn(unescapedText);\n\t constantInterp.exp = text;\n\t constantInterp.expressions = [];\n\t constantInterp.$$watchDelegate = constantWatchDelegate;\n\t }\n\t return constantInterp;\n\t }\n\t\n\t allOrNothing = !!allOrNothing;\n\t var startIndex,\n\t endIndex,\n\t index = 0,\n\t expressions = [],\n\t parseFns = [],\n\t textLength = text.length,\n\t exp,\n\t concat = [],\n\t expressionPositions = [];\n\t\n\t while (index < textLength) {\n\t if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&\n\t ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {\n\t if (index !== startIndex) {\n\t concat.push(unescapeText(text.substring(index, startIndex)));\n\t }\n\t exp = text.substring(startIndex + startSymbolLength, endIndex);\n\t expressions.push(exp);\n\t parseFns.push($parse(exp, parseStringifyInterceptor));\n\t index = endIndex + endSymbolLength;\n\t expressionPositions.push(concat.length);\n\t concat.push('');\n\t } else {\n\t // we did not find an interpolation, so we have to add the remainder to the separators array\n\t if (index !== textLength) {\n\t concat.push(unescapeText(text.substring(index)));\n\t }\n\t break;\n\t }\n\t }\n\t\n\t // Concatenating expressions makes it hard to reason about whether some combination of\n\t // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a\n\t // single expression be used for iframe[src], object[src], etc., we ensure that the value\n\t // that's used is assigned or constructed by some JS code somewhere that is more testable or\n\t // make it obvious that you bound the value to some user controlled value. This helps reduce\n\t // the load when auditing for XSS issues.\n\t if (trustedContext && concat.length > 1) {\n\t $interpolateMinErr.throwNoconcat(text);\n\t }\n\t\n\t if (!mustHaveExpression || expressions.length) {\n\t var compute = function(values) {\n\t for (var i = 0, ii = expressions.length; i < ii; i++) {\n\t if (allOrNothing && isUndefined(values[i])) return;\n\t concat[expressionPositions[i]] = values[i];\n\t }\n\t return concat.join('');\n\t };\n\t\n\t var getValue = function(value) {\n\t return trustedContext ?\n\t $sce.getTrusted(trustedContext, value) :\n\t $sce.valueOf(value);\n\t };\n\t\n\t return extend(function interpolationFn(context) {\n\t var i = 0;\n\t var ii = expressions.length;\n\t var values = new Array(ii);\n\t\n\t try {\n\t for (; i < ii; i++) {\n\t values[i] = parseFns[i](context);\n\t }\n\t\n\t return compute(values);\n\t } catch (err) {\n\t $exceptionHandler($interpolateMinErr.interr(text, err));\n\t }\n\t\n\t }, {\n\t // all of these properties are undocumented for now\n\t exp: text, //just for compatibility with regular watchers created via $watch\n\t expressions: expressions,\n\t $$watchDelegate: function(scope, listener) {\n\t var lastValue;\n\t return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {\n\t var currValue = compute(values);\n\t if (isFunction(listener)) {\n\t listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);\n\t }\n\t lastValue = currValue;\n\t });\n\t }\n\t });\n\t }\n\t\n\t function parseStringifyInterceptor(value) {\n\t try {\n\t value = getValue(value);\n\t return allOrNothing && !isDefined(value) ? value : stringify(value);\n\t } catch (err) {\n\t $exceptionHandler($interpolateMinErr.interr(text, err));\n\t }\n\t }\n\t }\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $interpolate#startSymbol\n\t * @description\n\t * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.\n\t *\n\t * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change\n\t * the symbol.\n\t *\n\t * @returns {string} start symbol.\n\t */\n\t $interpolate.startSymbol = function() {\n\t return startSymbol;\n\t };\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $interpolate#endSymbol\n\t * @description\n\t * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n\t *\n\t * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change\n\t * the symbol.\n\t *\n\t * @returns {string} end symbol.\n\t */\n\t $interpolate.endSymbol = function() {\n\t return endSymbol;\n\t };\n\t\n\t return $interpolate;\n\t }];\n\t}\n\t\n\tfunction $IntervalProvider() {\n\t this.$get = ['$rootScope', '$window', '$q', '$$q', '$browser',\n\t function($rootScope, $window, $q, $$q, $browser) {\n\t var intervals = {};\n\t\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $interval\n\t *\n\t * @description\n\t * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`\n\t * milliseconds.\n\t *\n\t * The return value of registering an interval function is a promise. This promise will be\n\t * notified upon each tick of the interval, and will be resolved after `count` iterations, or\n\t * run indefinitely if `count` is not defined. The value of the notification will be the\n\t * number of iterations that have run.\n\t * To cancel an interval, call `$interval.cancel(promise)`.\n\t *\n\t * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to\n\t * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n\t * time.\n\t *\n\t *
    \n\t * **Note**: Intervals created by this service must be explicitly destroyed when you are finished\n\t * with them. In particular they are not automatically destroyed when a controller's scope or a\n\t * directive's element are destroyed.\n\t * You should take this into consideration and make sure to always cancel the interval at the\n\t * appropriate moment. See the example below for more details on how and when to do this.\n\t *
    \n\t *\n\t * @param {function()} fn A function that should be called repeatedly.\n\t * @param {number} delay Number of milliseconds between each function call.\n\t * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n\t * indefinitely.\n\t * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n\t * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n\t * @param {...*=} Pass additional parameters to the executed function.\n\t * @returns {promise} A promise which will be notified on each iteration.\n\t *\n\t * @example\n\t * \n\t * \n\t * \n\t *\n\t *
    \n\t *
    \n\t *
    \n\t * Current time is: \n\t *
    \n\t * Blood 1 : {{blood_1}}\n\t * Blood 2 : {{blood_2}}\n\t * \n\t * \n\t * \n\t *
    \n\t *
    \n\t *\n\t *
    \n\t *
    \n\t */\n\t function interval(fn, delay, count, invokeApply) {\n\t var hasParams = arguments.length > 4,\n\t args = hasParams ? sliceArgs(arguments, 4) : [],\n\t setInterval = $window.setInterval,\n\t clearInterval = $window.clearInterval,\n\t iteration = 0,\n\t skipApply = (isDefined(invokeApply) && !invokeApply),\n\t deferred = (skipApply ? $$q : $q).defer(),\n\t promise = deferred.promise;\n\t\n\t count = isDefined(count) ? count : 0;\n\t\n\t promise.$$intervalId = setInterval(function tick() {\n\t if (skipApply) {\n\t $browser.defer(callback);\n\t } else {\n\t $rootScope.$evalAsync(callback);\n\t }\n\t deferred.notify(iteration++);\n\t\n\t if (count > 0 && iteration >= count) {\n\t deferred.resolve(iteration);\n\t clearInterval(promise.$$intervalId);\n\t delete intervals[promise.$$intervalId];\n\t }\n\t\n\t if (!skipApply) $rootScope.$apply();\n\t\n\t }, delay);\n\t\n\t intervals[promise.$$intervalId] = deferred;\n\t\n\t return promise;\n\t\n\t function callback() {\n\t if (!hasParams) {\n\t fn(iteration);\n\t } else {\n\t fn.apply(null, args);\n\t }\n\t }\n\t }\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $interval#cancel\n\t *\n\t * @description\n\t * Cancels a task associated with the `promise`.\n\t *\n\t * @param {Promise=} promise returned by the `$interval` function.\n\t * @returns {boolean} Returns `true` if the task was successfully canceled.\n\t */\n\t interval.cancel = function(promise) {\n\t if (promise && promise.$$intervalId in intervals) {\n\t intervals[promise.$$intervalId].reject('canceled');\n\t $window.clearInterval(promise.$$intervalId);\n\t delete intervals[promise.$$intervalId];\n\t return true;\n\t }\n\t return false;\n\t };\n\t\n\t return interval;\n\t }];\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $locale\n\t *\n\t * @description\n\t * $locale service provides localization rules for various Angular components. As of right now the\n\t * only public api is:\n\t *\n\t * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)\n\t */\n\t\n\tvar PATH_MATCH = /^([^\\?#]*)(\\?([^#]*))?(#(.*))?$/,\n\t DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};\n\tvar $locationMinErr = minErr('$location');\n\t\n\t\n\t/**\n\t * Encode path using encodeUriSegment, ignoring forward slashes\n\t *\n\t * @param {string} path Path to encode\n\t * @returns {string}\n\t */\n\tfunction encodePath(path) {\n\t var segments = path.split('/'),\n\t i = segments.length;\n\t\n\t while (i--) {\n\t segments[i] = encodeUriSegment(segments[i]);\n\t }\n\t\n\t return segments.join('/');\n\t}\n\t\n\tfunction parseAbsoluteUrl(absoluteUrl, locationObj) {\n\t var parsedUrl = urlResolve(absoluteUrl);\n\t\n\t locationObj.$$protocol = parsedUrl.protocol;\n\t locationObj.$$host = parsedUrl.hostname;\n\t locationObj.$$port = toInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n\t}\n\t\n\t\n\tfunction parseAppUrl(relativeUrl, locationObj) {\n\t var prefixed = (relativeUrl.charAt(0) !== '/');\n\t if (prefixed) {\n\t relativeUrl = '/' + relativeUrl;\n\t }\n\t var match = urlResolve(relativeUrl);\n\t locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?\n\t match.pathname.substring(1) : match.pathname);\n\t locationObj.$$search = parseKeyValue(match.search);\n\t locationObj.$$hash = decodeURIComponent(match.hash);\n\t\n\t // make sure path starts with '/';\n\t if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {\n\t locationObj.$$path = '/' + locationObj.$$path;\n\t }\n\t}\n\t\n\t\n\t/**\n\t *\n\t * @param {string} begin\n\t * @param {string} whole\n\t * @returns {string} returns text from whole after begin or undefined if it does not begin with\n\t * expected string.\n\t */\n\tfunction beginsWith(begin, whole) {\n\t if (whole.indexOf(begin) === 0) {\n\t return whole.substr(begin.length);\n\t }\n\t}\n\t\n\t\n\tfunction stripHash(url) {\n\t var index = url.indexOf('#');\n\t return index == -1 ? url : url.substr(0, index);\n\t}\n\t\n\tfunction trimEmptyHash(url) {\n\t return url.replace(/(#.+)|#$/, '$1');\n\t}\n\t\n\t\n\tfunction stripFile(url) {\n\t return url.substr(0, stripHash(url).lastIndexOf('/') + 1);\n\t}\n\t\n\t/* return the server only (scheme://host:port) */\n\tfunction serverBase(url) {\n\t return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));\n\t}\n\t\n\t\n\t/**\n\t * LocationHtml5Url represents an url\n\t * This object is exposed as $location service when HTML5 mode is enabled and supported\n\t *\n\t * @constructor\n\t * @param {string} appBase application base URL\n\t * @param {string} appBaseNoFile application base URL stripped of any filename\n\t * @param {string} basePrefix url path prefix\n\t */\n\tfunction LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {\n\t this.$$html5 = true;\n\t basePrefix = basePrefix || '';\n\t parseAbsoluteUrl(appBase, this);\n\t\n\t\n\t /**\n\t * Parse given html5 (regular) url string into properties\n\t * @param {string} url HTML5 url\n\t * @private\n\t */\n\t this.$$parse = function(url) {\n\t var pathUrl = beginsWith(appBaseNoFile, url);\n\t if (!isString(pathUrl)) {\n\t throw $locationMinErr('ipthprfx', 'Invalid url \"{0}\", missing path prefix \"{1}\".', url,\n\t appBaseNoFile);\n\t }\n\t\n\t parseAppUrl(pathUrl, this);\n\t\n\t if (!this.$$path) {\n\t this.$$path = '/';\n\t }\n\t\n\t this.$$compose();\n\t };\n\t\n\t /**\n\t * Compose url and update `absUrl` property\n\t * @private\n\t */\n\t this.$$compose = function() {\n\t var search = toKeyValue(this.$$search),\n\t hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\t\n\t this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n\t this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'\n\t };\n\t\n\t this.$$parseLinkUrl = function(url, relHref) {\n\t if (relHref && relHref[0] === '#') {\n\t // special case for links to hash fragments:\n\t // keep the old url and only replace the hash fragment\n\t this.hash(relHref.slice(1));\n\t return true;\n\t }\n\t var appUrl, prevAppUrl;\n\t var rewrittenUrl;\n\t\n\t if (isDefined(appUrl = beginsWith(appBase, url))) {\n\t prevAppUrl = appUrl;\n\t if (isDefined(appUrl = beginsWith(basePrefix, appUrl))) {\n\t rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);\n\t } else {\n\t rewrittenUrl = appBase + prevAppUrl;\n\t }\n\t } else if (isDefined(appUrl = beginsWith(appBaseNoFile, url))) {\n\t rewrittenUrl = appBaseNoFile + appUrl;\n\t } else if (appBaseNoFile == url + '/') {\n\t rewrittenUrl = appBaseNoFile;\n\t }\n\t if (rewrittenUrl) {\n\t this.$$parse(rewrittenUrl);\n\t }\n\t return !!rewrittenUrl;\n\t };\n\t}\n\t\n\t\n\t/**\n\t * LocationHashbangUrl represents url\n\t * This object is exposed as $location service when developer doesn't opt into html5 mode.\n\t * It also serves as the base class for html5 mode fallback on legacy browsers.\n\t *\n\t * @constructor\n\t * @param {string} appBase application base URL\n\t * @param {string} appBaseNoFile application base URL stripped of any filename\n\t * @param {string} hashPrefix hashbang prefix\n\t */\n\tfunction LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {\n\t\n\t parseAbsoluteUrl(appBase, this);\n\t\n\t\n\t /**\n\t * Parse given hashbang url into properties\n\t * @param {string} url Hashbang url\n\t * @private\n\t */\n\t this.$$parse = function(url) {\n\t var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);\n\t var withoutHashUrl;\n\t\n\t if (!isUndefined(withoutBaseUrl) && withoutBaseUrl.charAt(0) === '#') {\n\t\n\t // The rest of the url starts with a hash so we have\n\t // got either a hashbang path or a plain hash fragment\n\t withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl);\n\t if (isUndefined(withoutHashUrl)) {\n\t // There was no hashbang prefix so we just have a hash fragment\n\t withoutHashUrl = withoutBaseUrl;\n\t }\n\t\n\t } else {\n\t // There was no hashbang path nor hash fragment:\n\t // If we are in HTML5 mode we use what is left as the path;\n\t // Otherwise we ignore what is left\n\t if (this.$$html5) {\n\t withoutHashUrl = withoutBaseUrl;\n\t } else {\n\t withoutHashUrl = '';\n\t if (isUndefined(withoutBaseUrl)) {\n\t appBase = url;\n\t this.replace();\n\t }\n\t }\n\t }\n\t\n\t parseAppUrl(withoutHashUrl, this);\n\t\n\t this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);\n\t\n\t this.$$compose();\n\t\n\t /*\n\t * In Windows, on an anchor node on documents loaded from\n\t * the filesystem, the browser will return a pathname\n\t * prefixed with the drive name ('/C:/path') when a\n\t * pathname without a drive is set:\n\t * * a.setAttribute('href', '/foo')\n\t * * a.pathname === '/C:/foo' //true\n\t *\n\t * Inside of Angular, we're always using pathnames that\n\t * do not include drive names for routing.\n\t */\n\t function removeWindowsDriveName(path, url, base) {\n\t /*\n\t Matches paths for file protocol on windows,\n\t such as /C:/foo/bar, and captures only /foo/bar.\n\t */\n\t var windowsFilePathExp = /^\\/[A-Z]:(\\/.*)/;\n\t\n\t var firstPathSegmentMatch;\n\t\n\t //Get the relative path from the input URL.\n\t if (url.indexOf(base) === 0) {\n\t url = url.replace(base, '');\n\t }\n\t\n\t // The input URL intentionally contains a first path segment that ends with a colon.\n\t if (windowsFilePathExp.exec(url)) {\n\t return path;\n\t }\n\t\n\t firstPathSegmentMatch = windowsFilePathExp.exec(path);\n\t return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;\n\t }\n\t };\n\t\n\t /**\n\t * Compose hashbang url and update `absUrl` property\n\t * @private\n\t */\n\t this.$$compose = function() {\n\t var search = toKeyValue(this.$$search),\n\t hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\t\n\t this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n\t this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');\n\t };\n\t\n\t this.$$parseLinkUrl = function(url, relHref) {\n\t if (stripHash(appBase) == stripHash(url)) {\n\t this.$$parse(url);\n\t return true;\n\t }\n\t return false;\n\t };\n\t}\n\t\n\t\n\t/**\n\t * LocationHashbangUrl represents url\n\t * This object is exposed as $location service when html5 history api is enabled but the browser\n\t * does not support it.\n\t *\n\t * @constructor\n\t * @param {string} appBase application base URL\n\t * @param {string} appBaseNoFile application base URL stripped of any filename\n\t * @param {string} hashPrefix hashbang prefix\n\t */\n\tfunction LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {\n\t this.$$html5 = true;\n\t LocationHashbangUrl.apply(this, arguments);\n\t\n\t this.$$parseLinkUrl = function(url, relHref) {\n\t if (relHref && relHref[0] === '#') {\n\t // special case for links to hash fragments:\n\t // keep the old url and only replace the hash fragment\n\t this.hash(relHref.slice(1));\n\t return true;\n\t }\n\t\n\t var rewrittenUrl;\n\t var appUrl;\n\t\n\t if (appBase == stripHash(url)) {\n\t rewrittenUrl = url;\n\t } else if ((appUrl = beginsWith(appBaseNoFile, url))) {\n\t rewrittenUrl = appBase + hashPrefix + appUrl;\n\t } else if (appBaseNoFile === url + '/') {\n\t rewrittenUrl = appBaseNoFile;\n\t }\n\t if (rewrittenUrl) {\n\t this.$$parse(rewrittenUrl);\n\t }\n\t return !!rewrittenUrl;\n\t };\n\t\n\t this.$$compose = function() {\n\t var search = toKeyValue(this.$$search),\n\t hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\t\n\t this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n\t // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#'\n\t this.$$absUrl = appBase + hashPrefix + this.$$url;\n\t };\n\t\n\t}\n\t\n\t\n\tvar locationPrototype = {\n\t\n\t /**\n\t * Are we in html5 mode?\n\t * @private\n\t */\n\t $$html5: false,\n\t\n\t /**\n\t * Has any change been replacing?\n\t * @private\n\t */\n\t $$replace: false,\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#absUrl\n\t *\n\t * @description\n\t * This method is getter only.\n\t *\n\t * Return full url representation with all segments encoded according to rules specified in\n\t * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n\t * var absUrl = $location.absUrl();\n\t * // => \"http://example.com/#/some/path?foo=bar&baz=xoxo\"\n\t * ```\n\t *\n\t * @return {string} full url\n\t */\n\t absUrl: locationGetter('$$absUrl'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#url\n\t *\n\t * @description\n\t * This method is getter / setter.\n\t *\n\t * Return url (e.g. `/path?a=b#hash`) when called without any parameter.\n\t *\n\t * Change path, search and hash, when called with parameter and return `$location`.\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n\t * var url = $location.url();\n\t * // => \"/some/path?foo=bar&baz=xoxo\"\n\t * ```\n\t *\n\t * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)\n\t * @return {string} url\n\t */\n\t url: function(url) {\n\t if (isUndefined(url)) {\n\t return this.$$url;\n\t }\n\t\n\t var match = PATH_MATCH.exec(url);\n\t if (match[1] || url === '') this.path(decodeURIComponent(match[1]));\n\t if (match[2] || match[1] || url === '') this.search(match[3] || '');\n\t this.hash(match[5] || '');\n\t\n\t return this;\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#protocol\n\t *\n\t * @description\n\t * This method is getter only.\n\t *\n\t * Return protocol of current url.\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n\t * var protocol = $location.protocol();\n\t * // => \"http\"\n\t * ```\n\t *\n\t * @return {string} protocol of current url\n\t */\n\t protocol: locationGetter('$$protocol'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#host\n\t *\n\t * @description\n\t * This method is getter only.\n\t *\n\t * Return host of current url.\n\t *\n\t * Note: compared to the non-angular version `location.host` which returns `hostname:port`, this returns the `hostname` portion only.\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n\t * var host = $location.host();\n\t * // => \"example.com\"\n\t *\n\t * // given url http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo\n\t * host = $location.host();\n\t * // => \"example.com\"\n\t * host = location.host;\n\t * // => \"example.com:8080\"\n\t * ```\n\t *\n\t * @return {string} host of current url.\n\t */\n\t host: locationGetter('$$host'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#port\n\t *\n\t * @description\n\t * This method is getter only.\n\t *\n\t * Return port of current url.\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n\t * var port = $location.port();\n\t * // => 80\n\t * ```\n\t *\n\t * @return {Number} port\n\t */\n\t port: locationGetter('$$port'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#path\n\t *\n\t * @description\n\t * This method is getter / setter.\n\t *\n\t * Return path of current url when called without any parameter.\n\t *\n\t * Change path when called with parameter and return `$location`.\n\t *\n\t * Note: Path should always begin with forward slash (/), this method will add the forward slash\n\t * if it is missing.\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n\t * var path = $location.path();\n\t * // => \"/some/path\"\n\t * ```\n\t *\n\t * @param {(string|number)=} path New path\n\t * @return {string} path\n\t */\n\t path: locationGetterSetter('$$path', function(path) {\n\t path = path !== null ? path.toString() : '';\n\t return path.charAt(0) == '/' ? path : '/' + path;\n\t }),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#search\n\t *\n\t * @description\n\t * This method is getter / setter.\n\t *\n\t * Return search part (as object) of current url when called without any parameter.\n\t *\n\t * Change search part when called with parameter and return `$location`.\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n\t * var searchObject = $location.search();\n\t * // => {foo: 'bar', baz: 'xoxo'}\n\t *\n\t * // set foo to 'yipee'\n\t * $location.search('foo', 'yipee');\n\t * // $location.search() => {foo: 'yipee', baz: 'xoxo'}\n\t * ```\n\t *\n\t * @param {string|Object.|Object.>} search New search params - string or\n\t * hash object.\n\t *\n\t * When called with a single argument the method acts as a setter, setting the `search` component\n\t * of `$location` to the specified value.\n\t *\n\t * If the argument is a hash object containing an array of values, these values will be encoded\n\t * as duplicate search parameters in the url.\n\t *\n\t * @param {(string|Number|Array|boolean)=} paramValue If `search` is a string or number, then `paramValue`\n\t * will override only a single search property.\n\t *\n\t * If `paramValue` is an array, it will override the property of the `search` component of\n\t * `$location` specified via the first argument.\n\t *\n\t * If `paramValue` is `null`, the property specified via the first argument will be deleted.\n\t *\n\t * If `paramValue` is `true`, the property specified via the first argument will be added with no\n\t * value nor trailing equal sign.\n\t *\n\t * @return {Object} If called with no arguments returns the parsed `search` object. If called with\n\t * one or more arguments returns `$location` object itself.\n\t */\n\t search: function(search, paramValue) {\n\t switch (arguments.length) {\n\t case 0:\n\t return this.$$search;\n\t case 1:\n\t if (isString(search) || isNumber(search)) {\n\t search = search.toString();\n\t this.$$search = parseKeyValue(search);\n\t } else if (isObject(search)) {\n\t search = copy(search, {});\n\t // remove object undefined or null properties\n\t forEach(search, function(value, key) {\n\t if (value == null) delete search[key];\n\t });\n\t\n\t this.$$search = search;\n\t } else {\n\t throw $locationMinErr('isrcharg',\n\t 'The first argument of the `$location#search()` call must be a string or an object.');\n\t }\n\t break;\n\t default:\n\t if (isUndefined(paramValue) || paramValue === null) {\n\t delete this.$$search[search];\n\t } else {\n\t this.$$search[search] = paramValue;\n\t }\n\t }\n\t\n\t this.$$compose();\n\t return this;\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#hash\n\t *\n\t * @description\n\t * This method is getter / setter.\n\t *\n\t * Returns the hash fragment when called without any parameters.\n\t *\n\t * Changes the hash fragment when called with a parameter and returns `$location`.\n\t *\n\t *\n\t * ```js\n\t * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue\n\t * var hash = $location.hash();\n\t * // => \"hashValue\"\n\t * ```\n\t *\n\t * @param {(string|number)=} hash New hash fragment\n\t * @return {string} hash\n\t */\n\t hash: locationGetterSetter('$$hash', function(hash) {\n\t return hash !== null ? hash.toString() : '';\n\t }),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#replace\n\t *\n\t * @description\n\t * If called, all changes to $location during the current `$digest` will replace the current history\n\t * record, instead of adding a new one.\n\t */\n\t replace: function() {\n\t this.$$replace = true;\n\t return this;\n\t }\n\t};\n\t\n\tforEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {\n\t Location.prototype = Object.create(locationPrototype);\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $location#state\n\t *\n\t * @description\n\t * This method is getter / setter.\n\t *\n\t * Return the history state object when called without any parameter.\n\t *\n\t * Change the history state object when called with one parameter and return `$location`.\n\t * The state object is later passed to `pushState` or `replaceState`.\n\t *\n\t * NOTE: This method is supported only in HTML5 mode and only in browsers supporting\n\t * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support\n\t * older browsers (like IE9 or Android < 4.0), don't use this method.\n\t *\n\t * @param {object=} state State object for pushState or replaceState\n\t * @return {object} state\n\t */\n\t Location.prototype.state = function(state) {\n\t if (!arguments.length) {\n\t return this.$$state;\n\t }\n\t\n\t if (Location !== LocationHtml5Url || !this.$$html5) {\n\t throw $locationMinErr('nostate', 'History API state support is available only ' +\n\t 'in HTML5 mode and only in browsers supporting HTML5 History API');\n\t }\n\t // The user might modify `stateObject` after invoking `$location.state(stateObject)`\n\t // but we're changing the $$state reference to $browser.state() during the $digest\n\t // so the modification window is narrow.\n\t this.$$state = isUndefined(state) ? null : state;\n\t\n\t return this;\n\t };\n\t});\n\t\n\t\n\tfunction locationGetter(property) {\n\t return function() {\n\t return this[property];\n\t };\n\t}\n\t\n\t\n\tfunction locationGetterSetter(property, preprocess) {\n\t return function(value) {\n\t if (isUndefined(value)) {\n\t return this[property];\n\t }\n\t\n\t this[property] = preprocess(value);\n\t this.$$compose();\n\t\n\t return this;\n\t };\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $location\n\t *\n\t * @requires $rootElement\n\t *\n\t * @description\n\t * The $location service parses the URL in the browser address bar (based on the\n\t * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL\n\t * available to your application. Changes to the URL in the address bar are reflected into\n\t * $location service and changes to $location are reflected into the browser address bar.\n\t *\n\t * **The $location service:**\n\t *\n\t * - Exposes the current URL in the browser address bar, so you can\n\t * - Watch and observe the URL.\n\t * - Change the URL.\n\t * - Synchronizes the URL with the browser when the user\n\t * - Changes the address bar.\n\t * - Clicks the back or forward button (or clicks a History link).\n\t * - Clicks on a link.\n\t * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).\n\t *\n\t * For more information see {@link guide/$location Developer Guide: Using $location}\n\t */\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $locationProvider\n\t * @description\n\t * Use the `$locationProvider` to configure how the application deep linking paths are stored.\n\t */\n\tfunction $LocationProvider() {\n\t var hashPrefix = '',\n\t html5Mode = {\n\t enabled: false,\n\t requireBase: true,\n\t rewriteLinks: true\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $locationProvider#hashPrefix\n\t * @description\n\t * @param {string=} prefix Prefix for hash part (containing path and search)\n\t * @returns {*} current value if used as getter or itself (chaining) if used as setter\n\t */\n\t this.hashPrefix = function(prefix) {\n\t if (isDefined(prefix)) {\n\t hashPrefix = prefix;\n\t return this;\n\t } else {\n\t return hashPrefix;\n\t }\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $locationProvider#html5Mode\n\t * @description\n\t * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.\n\t * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported\n\t * properties:\n\t * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to\n\t * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not\n\t * support `pushState`.\n\t * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies\n\t * whether or not a tag is required to be present. If `enabled` and `requireBase` are\n\t * true, and a base tag is not present, an error will be thrown when `$location` is injected.\n\t * See the {@link guide/$location $location guide for more information}\n\t * - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,\n\t * enables/disables url rewriting for relative links.\n\t *\n\t * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter\n\t */\n\t this.html5Mode = function(mode) {\n\t if (isBoolean(mode)) {\n\t html5Mode.enabled = mode;\n\t return this;\n\t } else if (isObject(mode)) {\n\t\n\t if (isBoolean(mode.enabled)) {\n\t html5Mode.enabled = mode.enabled;\n\t }\n\t\n\t if (isBoolean(mode.requireBase)) {\n\t html5Mode.requireBase = mode.requireBase;\n\t }\n\t\n\t if (isBoolean(mode.rewriteLinks)) {\n\t html5Mode.rewriteLinks = mode.rewriteLinks;\n\t }\n\t\n\t return this;\n\t } else {\n\t return html5Mode;\n\t }\n\t };\n\t\n\t /**\n\t * @ngdoc event\n\t * @name $location#$locationChangeStart\n\t * @eventType broadcast on root scope\n\t * @description\n\t * Broadcasted before a URL will change.\n\t *\n\t * This change can be prevented by calling\n\t * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more\n\t * details about event object. Upon successful change\n\t * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.\n\t *\n\t * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when\n\t * the browser supports the HTML5 History API.\n\t *\n\t * @param {Object} angularEvent Synthetic event object.\n\t * @param {string} newUrl New URL\n\t * @param {string=} oldUrl URL that was before it was changed.\n\t * @param {string=} newState New history state object\n\t * @param {string=} oldState History state object that was before it was changed.\n\t */\n\t\n\t /**\n\t * @ngdoc event\n\t * @name $location#$locationChangeSuccess\n\t * @eventType broadcast on root scope\n\t * @description\n\t * Broadcasted after a URL was changed.\n\t *\n\t * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when\n\t * the browser supports the HTML5 History API.\n\t *\n\t * @param {Object} angularEvent Synthetic event object.\n\t * @param {string} newUrl New URL\n\t * @param {string=} oldUrl URL that was before it was changed.\n\t * @param {string=} newState New history state object\n\t * @param {string=} oldState History state object that was before it was changed.\n\t */\n\t\n\t this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window',\n\t function($rootScope, $browser, $sniffer, $rootElement, $window) {\n\t var $location,\n\t LocationMode,\n\t baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''\n\t initialUrl = $browser.url(),\n\t appBase;\n\t\n\t if (html5Mode.enabled) {\n\t if (!baseHref && html5Mode.requireBase) {\n\t throw $locationMinErr('nobase',\n\t \"$location in HTML5 mode requires a tag to be present!\");\n\t }\n\t appBase = serverBase(initialUrl) + (baseHref || '/');\n\t LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;\n\t } else {\n\t appBase = stripHash(initialUrl);\n\t LocationMode = LocationHashbangUrl;\n\t }\n\t var appBaseNoFile = stripFile(appBase);\n\t\n\t $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix);\n\t $location.$$parseLinkUrl(initialUrl, initialUrl);\n\t\n\t $location.$$state = $browser.state();\n\t\n\t var IGNORE_URI_REGEXP = /^\\s*(javascript|mailto):/i;\n\t\n\t function setBrowserUrlWithFallback(url, replace, state) {\n\t var oldUrl = $location.url();\n\t var oldState = $location.$$state;\n\t try {\n\t $browser.url(url, replace, state);\n\t\n\t // Make sure $location.state() returns referentially identical (not just deeply equal)\n\t // state object; this makes possible quick checking if the state changed in the digest\n\t // loop. Checking deep equality would be too expensive.\n\t $location.$$state = $browser.state();\n\t } catch (e) {\n\t // Restore old values if pushState fails\n\t $location.url(oldUrl);\n\t $location.$$state = oldState;\n\t\n\t throw e;\n\t }\n\t }\n\t\n\t $rootElement.on('click', function(event) {\n\t // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)\n\t // currently we open nice url link and redirect then\n\t\n\t if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which == 2 || event.button == 2) return;\n\t\n\t var elm = jqLite(event.target);\n\t\n\t // traverse the DOM up to find first A tag\n\t while (nodeName_(elm[0]) !== 'a') {\n\t // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n\t if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;\n\t }\n\t\n\t var absHref = elm.prop('href');\n\t // get the actual href attribute - see\n\t // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx\n\t var relHref = elm.attr('href') || elm.attr('xlink:href');\n\t\n\t if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {\n\t // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during\n\t // an animation.\n\t absHref = urlResolve(absHref.animVal).href;\n\t }\n\t\n\t // Ignore when url is started with javascript: or mailto:\n\t if (IGNORE_URI_REGEXP.test(absHref)) return;\n\t\n\t if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {\n\t if ($location.$$parseLinkUrl(absHref, relHref)) {\n\t // We do a preventDefault for all urls that are part of the angular application,\n\t // in html5mode and also without, so that we are able to abort navigation without\n\t // getting double entries in the location history.\n\t event.preventDefault();\n\t // update location manually\n\t if ($location.absUrl() != $browser.url()) {\n\t $rootScope.$apply();\n\t // hack to work around FF6 bug 684208 when scenario runner clicks on links\n\t $window.angular['ff-684208-preventDefault'] = true;\n\t }\n\t }\n\t }\n\t });\n\t\n\t\n\t // rewrite hashbang url <> html5 url\n\t if (trimEmptyHash($location.absUrl()) != trimEmptyHash(initialUrl)) {\n\t $browser.url($location.absUrl(), true);\n\t }\n\t\n\t var initializing = true;\n\t\n\t // update $location when $browser url changes\n\t $browser.onUrlChange(function(newUrl, newState) {\n\t\n\t if (isUndefined(beginsWith(appBaseNoFile, newUrl))) {\n\t // If we are navigating outside of the app then force a reload\n\t $window.location.href = newUrl;\n\t return;\n\t }\n\t\n\t $rootScope.$evalAsync(function() {\n\t var oldUrl = $location.absUrl();\n\t var oldState = $location.$$state;\n\t var defaultPrevented;\n\t newUrl = trimEmptyHash(newUrl);\n\t $location.$$parse(newUrl);\n\t $location.$$state = newState;\n\t\n\t defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,\n\t newState, oldState).defaultPrevented;\n\t\n\t // if the location was changed by a `$locationChangeStart` handler then stop\n\t // processing this location change\n\t if ($location.absUrl() !== newUrl) return;\n\t\n\t if (defaultPrevented) {\n\t $location.$$parse(oldUrl);\n\t $location.$$state = oldState;\n\t setBrowserUrlWithFallback(oldUrl, false, oldState);\n\t } else {\n\t initializing = false;\n\t afterLocationChange(oldUrl, oldState);\n\t }\n\t });\n\t if (!$rootScope.$$phase) $rootScope.$digest();\n\t });\n\t\n\t // update browser\n\t $rootScope.$watch(function $locationWatch() {\n\t var oldUrl = trimEmptyHash($browser.url());\n\t var newUrl = trimEmptyHash($location.absUrl());\n\t var oldState = $browser.state();\n\t var currentReplace = $location.$$replace;\n\t var urlOrStateChanged = oldUrl !== newUrl ||\n\t ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);\n\t\n\t if (initializing || urlOrStateChanged) {\n\t initializing = false;\n\t\n\t $rootScope.$evalAsync(function() {\n\t var newUrl = $location.absUrl();\n\t var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,\n\t $location.$$state, oldState).defaultPrevented;\n\t\n\t // if the location was changed by a `$locationChangeStart` handler then stop\n\t // processing this location change\n\t if ($location.absUrl() !== newUrl) return;\n\t\n\t if (defaultPrevented) {\n\t $location.$$parse(oldUrl);\n\t $location.$$state = oldState;\n\t } else {\n\t if (urlOrStateChanged) {\n\t setBrowserUrlWithFallback(newUrl, currentReplace,\n\t oldState === $location.$$state ? null : $location.$$state);\n\t }\n\t afterLocationChange(oldUrl, oldState);\n\t }\n\t });\n\t }\n\t\n\t $location.$$replace = false;\n\t\n\t // we don't need to return anything because $evalAsync will make the digest loop dirty when\n\t // there is a change\n\t });\n\t\n\t return $location;\n\t\n\t function afterLocationChange(oldUrl, oldState) {\n\t $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,\n\t $location.$$state, oldState);\n\t }\n\t}];\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $log\n\t * @requires $window\n\t *\n\t * @description\n\t * Simple service for logging. Default implementation safely writes the message\n\t * into the browser's console (if present).\n\t *\n\t * The main purpose of this service is to simplify debugging and troubleshooting.\n\t *\n\t * The default is to log `debug` messages. You can use\n\t * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.\n\t *\n\t * @example\n\t \n\t \n\t angular.module('logExample', [])\n\t .controller('LogController', ['$scope', '$log', function($scope, $log) {\n\t $scope.$log = $log;\n\t $scope.message = 'Hello World!';\n\t }]);\n\t \n\t \n\t
    \n\t

    Reload this page with open console, enter text and hit the log button...

    \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    \n\t
    \n\t
    \n\t */\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $logProvider\n\t * @description\n\t * Use the `$logProvider` to configure how the application logs messages\n\t */\n\tfunction $LogProvider() {\n\t var debug = true,\n\t self = this;\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $logProvider#debugEnabled\n\t * @description\n\t * @param {boolean=} flag enable or disable debug level messages\n\t * @returns {*} current value if used as getter or itself (chaining) if used as setter\n\t */\n\t this.debugEnabled = function(flag) {\n\t if (isDefined(flag)) {\n\t debug = flag;\n\t return this;\n\t } else {\n\t return debug;\n\t }\n\t };\n\t\n\t this.$get = ['$window', function($window) {\n\t return {\n\t /**\n\t * @ngdoc method\n\t * @name $log#log\n\t *\n\t * @description\n\t * Write a log message\n\t */\n\t log: consoleLog('log'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $log#info\n\t *\n\t * @description\n\t * Write an information message\n\t */\n\t info: consoleLog('info'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $log#warn\n\t *\n\t * @description\n\t * Write a warning message\n\t */\n\t warn: consoleLog('warn'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $log#error\n\t *\n\t * @description\n\t * Write an error message\n\t */\n\t error: consoleLog('error'),\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $log#debug\n\t *\n\t * @description\n\t * Write a debug message\n\t */\n\t debug: (function() {\n\t var fn = consoleLog('debug');\n\t\n\t return function() {\n\t if (debug) {\n\t fn.apply(self, arguments);\n\t }\n\t };\n\t }())\n\t };\n\t\n\t function formatError(arg) {\n\t if (arg instanceof Error) {\n\t if (arg.stack) {\n\t arg = (arg.message && arg.stack.indexOf(arg.message) === -1)\n\t ? 'Error: ' + arg.message + '\\n' + arg.stack\n\t : arg.stack;\n\t } else if (arg.sourceURL) {\n\t arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n\t }\n\t }\n\t return arg;\n\t }\n\t\n\t function consoleLog(type) {\n\t var console = $window.console || {},\n\t logFn = console[type] || console.log || noop,\n\t hasApply = false;\n\t\n\t // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.\n\t // The reason behind this is that console.log has type \"object\" in IE8...\n\t try {\n\t hasApply = !!logFn.apply;\n\t } catch (e) {}\n\t\n\t if (hasApply) {\n\t return function() {\n\t var args = [];\n\t forEach(arguments, function(arg) {\n\t args.push(formatError(arg));\n\t });\n\t return logFn.apply(console, args);\n\t };\n\t }\n\t\n\t // we are IE which either doesn't have window.console => this is noop and we do nothing,\n\t // or we are IE where console.log doesn't have apply so we log at least first 2 args\n\t return function(arg1, arg2) {\n\t logFn(arg1, arg2 == null ? '' : arg2);\n\t };\n\t }\n\t }];\n\t}\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Any commits to this file should be reviewed with security in mind. *\n\t * Changes to this file can potentially create security vulnerabilities. *\n\t * An approval from 2 Core members with history of modifying *\n\t * this file is required. *\n\t * *\n\t * Does the change somehow allow for arbitrary javascript to be executed? *\n\t * Or allows for someone to change the prototype of built-in objects? *\n\t * Or gives undesired access to variables likes document or window? *\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\t\n\tvar $parseMinErr = minErr('$parse');\n\t\n\t// Sandboxing Angular Expressions\n\t// ------------------------------\n\t// Angular expressions are generally considered safe because these expressions only have direct\n\t// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by\n\t// obtaining a reference to native JS functions such as the Function constructor.\n\t//\n\t// As an example, consider the following Angular expression:\n\t//\n\t// {}.toString.constructor('alert(\"evil JS code\")')\n\t//\n\t// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits\n\t// against the expression language, but not to prevent exploits that were enabled by exposing\n\t// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good\n\t// practice and therefore we are not even trying to protect against interaction with an object\n\t// explicitly exposed in this way.\n\t//\n\t// In general, it is not possible to access a Window object from an angular expression unless a\n\t// window or some DOM object that has a reference to window is published onto a Scope.\n\t// Similarly we prevent invocations of function known to be dangerous, as well as assignments to\n\t// native objects.\n\t//\n\t// See https://docs.angularjs.org/guide/security\n\t\n\t\n\tfunction ensureSafeMemberName(name, fullExpression) {\n\t if (name === \"__defineGetter__\" || name === \"__defineSetter__\"\n\t || name === \"__lookupGetter__\" || name === \"__lookupSetter__\"\n\t || name === \"__proto__\") {\n\t throw $parseMinErr('isecfld',\n\t 'Attempting to access a disallowed field in Angular expressions! '\n\t + 'Expression: {0}', fullExpression);\n\t }\n\t return name;\n\t}\n\t\n\tfunction getStringValue(name) {\n\t // Property names must be strings. This means that non-string objects cannot be used\n\t // as keys in an object. Any non-string object, including a number, is typecasted\n\t // into a string via the toString method.\n\t // -- MDN, https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors#Property_names\n\t //\n\t // So, to ensure that we are checking the same `name` that JavaScript would use, we cast it\n\t // to a string. It's not always possible. If `name` is an object and its `toString` method is\n\t // 'broken' (doesn't return a string, isn't a function, etc.), an error will be thrown:\n\t //\n\t // TypeError: Cannot convert object to primitive value\n\t //\n\t // For performance reasons, we don't catch this error here and allow it to propagate up the call\n\t // stack. Note that you'll get the same error in JavaScript if you try to access a property using\n\t // such a 'broken' object as a key.\n\t return name + '';\n\t}\n\t\n\tfunction ensureSafeObject(obj, fullExpression) {\n\t // nifty check if obj is Function that is fast and works across iframes and other contexts\n\t if (obj) {\n\t if (obj.constructor === obj) {\n\t throw $parseMinErr('isecfn',\n\t 'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n\t fullExpression);\n\t } else if (// isWindow(obj)\n\t obj.window === obj) {\n\t throw $parseMinErr('isecwindow',\n\t 'Referencing the Window in Angular expressions is disallowed! Expression: {0}',\n\t fullExpression);\n\t } else if (// isElement(obj)\n\t obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {\n\t throw $parseMinErr('isecdom',\n\t 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',\n\t fullExpression);\n\t } else if (// block Object so that we can't get hold of dangerous Object.* methods\n\t obj === Object) {\n\t throw $parseMinErr('isecobj',\n\t 'Referencing Object in Angular expressions is disallowed! Expression: {0}',\n\t fullExpression);\n\t }\n\t }\n\t return obj;\n\t}\n\t\n\tvar CALL = Function.prototype.call;\n\tvar APPLY = Function.prototype.apply;\n\tvar BIND = Function.prototype.bind;\n\t\n\tfunction ensureSafeFunction(obj, fullExpression) {\n\t if (obj) {\n\t if (obj.constructor === obj) {\n\t throw $parseMinErr('isecfn',\n\t 'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n\t fullExpression);\n\t } else if (obj === CALL || obj === APPLY || obj === BIND) {\n\t throw $parseMinErr('isecff',\n\t 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',\n\t fullExpression);\n\t }\n\t }\n\t}\n\t\n\tfunction ensureSafeAssignContext(obj, fullExpression) {\n\t if (obj) {\n\t if (obj === (0).constructor || obj === (false).constructor || obj === ''.constructor ||\n\t obj === {}.constructor || obj === [].constructor || obj === Function.constructor) {\n\t throw $parseMinErr('isecaf',\n\t 'Assigning to a constructor is disallowed! Expression: {0}', fullExpression);\n\t }\n\t }\n\t}\n\t\n\tvar OPERATORS = createMap();\n\tforEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; });\n\tvar ESCAPE = {\"n\":\"\\n\", \"f\":\"\\f\", \"r\":\"\\r\", \"t\":\"\\t\", \"v\":\"\\v\", \"'\":\"'\", '\"':'\"'};\n\t\n\t\n\t/////////////////////////////////////////\n\t\n\t\n\t/**\n\t * @constructor\n\t */\n\tvar Lexer = function(options) {\n\t this.options = options;\n\t};\n\t\n\tLexer.prototype = {\n\t constructor: Lexer,\n\t\n\t lex: function(text) {\n\t this.text = text;\n\t this.index = 0;\n\t this.tokens = [];\n\t\n\t while (this.index < this.text.length) {\n\t var ch = this.text.charAt(this.index);\n\t if (ch === '\"' || ch === \"'\") {\n\t this.readString(ch);\n\t } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {\n\t this.readNumber();\n\t } else if (this.isIdent(ch)) {\n\t this.readIdent();\n\t } else if (this.is(ch, '(){}[].,;:?')) {\n\t this.tokens.push({index: this.index, text: ch});\n\t this.index++;\n\t } else if (this.isWhitespace(ch)) {\n\t this.index++;\n\t } else {\n\t var ch2 = ch + this.peek();\n\t var ch3 = ch2 + this.peek(2);\n\t var op1 = OPERATORS[ch];\n\t var op2 = OPERATORS[ch2];\n\t var op3 = OPERATORS[ch3];\n\t if (op1 || op2 || op3) {\n\t var token = op3 ? ch3 : (op2 ? ch2 : ch);\n\t this.tokens.push({index: this.index, text: token, operator: true});\n\t this.index += token.length;\n\t } else {\n\t this.throwError('Unexpected next character ', this.index, this.index + 1);\n\t }\n\t }\n\t }\n\t return this.tokens;\n\t },\n\t\n\t is: function(ch, chars) {\n\t return chars.indexOf(ch) !== -1;\n\t },\n\t\n\t peek: function(i) {\n\t var num = i || 1;\n\t return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;\n\t },\n\t\n\t isNumber: function(ch) {\n\t return ('0' <= ch && ch <= '9') && typeof ch === \"string\";\n\t },\n\t\n\t isWhitespace: function(ch) {\n\t // IE treats non-breaking space as \\u00A0\n\t return (ch === ' ' || ch === '\\r' || ch === '\\t' ||\n\t ch === '\\n' || ch === '\\v' || ch === '\\u00A0');\n\t },\n\t\n\t isIdent: function(ch) {\n\t return ('a' <= ch && ch <= 'z' ||\n\t 'A' <= ch && ch <= 'Z' ||\n\t '_' === ch || ch === '$');\n\t },\n\t\n\t isExpOperator: function(ch) {\n\t return (ch === '-' || ch === '+' || this.isNumber(ch));\n\t },\n\t\n\t throwError: function(error, start, end) {\n\t end = end || this.index;\n\t var colStr = (isDefined(start)\n\t ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']'\n\t : ' ' + end);\n\t throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',\n\t error, colStr, this.text);\n\t },\n\t\n\t readNumber: function() {\n\t var number = '';\n\t var start = this.index;\n\t while (this.index < this.text.length) {\n\t var ch = lowercase(this.text.charAt(this.index));\n\t if (ch == '.' || this.isNumber(ch)) {\n\t number += ch;\n\t } else {\n\t var peekCh = this.peek();\n\t if (ch == 'e' && this.isExpOperator(peekCh)) {\n\t number += ch;\n\t } else if (this.isExpOperator(ch) &&\n\t peekCh && this.isNumber(peekCh) &&\n\t number.charAt(number.length - 1) == 'e') {\n\t number += ch;\n\t } else if (this.isExpOperator(ch) &&\n\t (!peekCh || !this.isNumber(peekCh)) &&\n\t number.charAt(number.length - 1) == 'e') {\n\t this.throwError('Invalid exponent');\n\t } else {\n\t break;\n\t }\n\t }\n\t this.index++;\n\t }\n\t this.tokens.push({\n\t index: start,\n\t text: number,\n\t constant: true,\n\t value: Number(number)\n\t });\n\t },\n\t\n\t readIdent: function() {\n\t var start = this.index;\n\t while (this.index < this.text.length) {\n\t var ch = this.text.charAt(this.index);\n\t if (!(this.isIdent(ch) || this.isNumber(ch))) {\n\t break;\n\t }\n\t this.index++;\n\t }\n\t this.tokens.push({\n\t index: start,\n\t text: this.text.slice(start, this.index),\n\t identifier: true\n\t });\n\t },\n\t\n\t readString: function(quote) {\n\t var start = this.index;\n\t this.index++;\n\t var string = '';\n\t var rawString = quote;\n\t var escape = false;\n\t while (this.index < this.text.length) {\n\t var ch = this.text.charAt(this.index);\n\t rawString += ch;\n\t if (escape) {\n\t if (ch === 'u') {\n\t var hex = this.text.substring(this.index + 1, this.index + 5);\n\t if (!hex.match(/[\\da-f]{4}/i)) {\n\t this.throwError('Invalid unicode escape [\\\\u' + hex + ']');\n\t }\n\t this.index += 4;\n\t string += String.fromCharCode(parseInt(hex, 16));\n\t } else {\n\t var rep = ESCAPE[ch];\n\t string = string + (rep || ch);\n\t }\n\t escape = false;\n\t } else if (ch === '\\\\') {\n\t escape = true;\n\t } else if (ch === quote) {\n\t this.index++;\n\t this.tokens.push({\n\t index: start,\n\t text: rawString,\n\t constant: true,\n\t value: string\n\t });\n\t return;\n\t } else {\n\t string += ch;\n\t }\n\t this.index++;\n\t }\n\t this.throwError('Unterminated quote', start);\n\t }\n\t};\n\t\n\tvar AST = function(lexer, options) {\n\t this.lexer = lexer;\n\t this.options = options;\n\t};\n\t\n\tAST.Program = 'Program';\n\tAST.ExpressionStatement = 'ExpressionStatement';\n\tAST.AssignmentExpression = 'AssignmentExpression';\n\tAST.ConditionalExpression = 'ConditionalExpression';\n\tAST.LogicalExpression = 'LogicalExpression';\n\tAST.BinaryExpression = 'BinaryExpression';\n\tAST.UnaryExpression = 'UnaryExpression';\n\tAST.CallExpression = 'CallExpression';\n\tAST.MemberExpression = 'MemberExpression';\n\tAST.Identifier = 'Identifier';\n\tAST.Literal = 'Literal';\n\tAST.ArrayExpression = 'ArrayExpression';\n\tAST.Property = 'Property';\n\tAST.ObjectExpression = 'ObjectExpression';\n\tAST.ThisExpression = 'ThisExpression';\n\tAST.LocalsExpression = 'LocalsExpression';\n\t\n\t// Internal use only\n\tAST.NGValueParameter = 'NGValueParameter';\n\t\n\tAST.prototype = {\n\t ast: function(text) {\n\t this.text = text;\n\t this.tokens = this.lexer.lex(text);\n\t\n\t var value = this.program();\n\t\n\t if (this.tokens.length !== 0) {\n\t this.throwError('is an unexpected token', this.tokens[0]);\n\t }\n\t\n\t return value;\n\t },\n\t\n\t program: function() {\n\t var body = [];\n\t while (true) {\n\t if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))\n\t body.push(this.expressionStatement());\n\t if (!this.expect(';')) {\n\t return { type: AST.Program, body: body};\n\t }\n\t }\n\t },\n\t\n\t expressionStatement: function() {\n\t return { type: AST.ExpressionStatement, expression: this.filterChain() };\n\t },\n\t\n\t filterChain: function() {\n\t var left = this.expression();\n\t var token;\n\t while ((token = this.expect('|'))) {\n\t left = this.filter(left);\n\t }\n\t return left;\n\t },\n\t\n\t expression: function() {\n\t return this.assignment();\n\t },\n\t\n\t assignment: function() {\n\t var result = this.ternary();\n\t if (this.expect('=')) {\n\t result = { type: AST.AssignmentExpression, left: result, right: this.assignment(), operator: '='};\n\t }\n\t return result;\n\t },\n\t\n\t ternary: function() {\n\t var test = this.logicalOR();\n\t var alternate;\n\t var consequent;\n\t if (this.expect('?')) {\n\t alternate = this.expression();\n\t if (this.consume(':')) {\n\t consequent = this.expression();\n\t return { type: AST.ConditionalExpression, test: test, alternate: alternate, consequent: consequent};\n\t }\n\t }\n\t return test;\n\t },\n\t\n\t logicalOR: function() {\n\t var left = this.logicalAND();\n\t while (this.expect('||')) {\n\t left = { type: AST.LogicalExpression, operator: '||', left: left, right: this.logicalAND() };\n\t }\n\t return left;\n\t },\n\t\n\t logicalAND: function() {\n\t var left = this.equality();\n\t while (this.expect('&&')) {\n\t left = { type: AST.LogicalExpression, operator: '&&', left: left, right: this.equality()};\n\t }\n\t return left;\n\t },\n\t\n\t equality: function() {\n\t var left = this.relational();\n\t var token;\n\t while ((token = this.expect('==','!=','===','!=='))) {\n\t left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.relational() };\n\t }\n\t return left;\n\t },\n\t\n\t relational: function() {\n\t var left = this.additive();\n\t var token;\n\t while ((token = this.expect('<', '>', '<=', '>='))) {\n\t left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.additive() };\n\t }\n\t return left;\n\t },\n\t\n\t additive: function() {\n\t var left = this.multiplicative();\n\t var token;\n\t while ((token = this.expect('+','-'))) {\n\t left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.multiplicative() };\n\t }\n\t return left;\n\t },\n\t\n\t multiplicative: function() {\n\t var left = this.unary();\n\t var token;\n\t while ((token = this.expect('*','/','%'))) {\n\t left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.unary() };\n\t }\n\t return left;\n\t },\n\t\n\t unary: function() {\n\t var token;\n\t if ((token = this.expect('+', '-', '!'))) {\n\t return { type: AST.UnaryExpression, operator: token.text, prefix: true, argument: this.unary() };\n\t } else {\n\t return this.primary();\n\t }\n\t },\n\t\n\t primary: function() {\n\t var primary;\n\t if (this.expect('(')) {\n\t primary = this.filterChain();\n\t this.consume(')');\n\t } else if (this.expect('[')) {\n\t primary = this.arrayDeclaration();\n\t } else if (this.expect('{')) {\n\t primary = this.object();\n\t } else if (this.constants.hasOwnProperty(this.peek().text)) {\n\t primary = copy(this.constants[this.consume().text]);\n\t } else if (this.peek().identifier) {\n\t primary = this.identifier();\n\t } else if (this.peek().constant) {\n\t primary = this.constant();\n\t } else {\n\t this.throwError('not a primary expression', this.peek());\n\t }\n\t\n\t var next;\n\t while ((next = this.expect('(', '[', '.'))) {\n\t if (next.text === '(') {\n\t primary = {type: AST.CallExpression, callee: primary, arguments: this.parseArguments() };\n\t this.consume(')');\n\t } else if (next.text === '[') {\n\t primary = { type: AST.MemberExpression, object: primary, property: this.expression(), computed: true };\n\t this.consume(']');\n\t } else if (next.text === '.') {\n\t primary = { type: AST.MemberExpression, object: primary, property: this.identifier(), computed: false };\n\t } else {\n\t this.throwError('IMPOSSIBLE');\n\t }\n\t }\n\t return primary;\n\t },\n\t\n\t filter: function(baseExpression) {\n\t var args = [baseExpression];\n\t var result = {type: AST.CallExpression, callee: this.identifier(), arguments: args, filter: true};\n\t\n\t while (this.expect(':')) {\n\t args.push(this.expression());\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseArguments: function() {\n\t var args = [];\n\t if (this.peekToken().text !== ')') {\n\t do {\n\t args.push(this.expression());\n\t } while (this.expect(','));\n\t }\n\t return args;\n\t },\n\t\n\t identifier: function() {\n\t var token = this.consume();\n\t if (!token.identifier) {\n\t this.throwError('is not a valid identifier', token);\n\t }\n\t return { type: AST.Identifier, name: token.text };\n\t },\n\t\n\t constant: function() {\n\t // TODO check that it is a constant\n\t return { type: AST.Literal, value: this.consume().value };\n\t },\n\t\n\t arrayDeclaration: function() {\n\t var elements = [];\n\t if (this.peekToken().text !== ']') {\n\t do {\n\t if (this.peek(']')) {\n\t // Support trailing commas per ES5.1.\n\t break;\n\t }\n\t elements.push(this.expression());\n\t } while (this.expect(','));\n\t }\n\t this.consume(']');\n\t\n\t return { type: AST.ArrayExpression, elements: elements };\n\t },\n\t\n\t object: function() {\n\t var properties = [], property;\n\t if (this.peekToken().text !== '}') {\n\t do {\n\t if (this.peek('}')) {\n\t // Support trailing commas per ES5.1.\n\t break;\n\t }\n\t property = {type: AST.Property, kind: 'init'};\n\t if (this.peek().constant) {\n\t property.key = this.constant();\n\t } else if (this.peek().identifier) {\n\t property.key = this.identifier();\n\t } else {\n\t this.throwError(\"invalid key\", this.peek());\n\t }\n\t this.consume(':');\n\t property.value = this.expression();\n\t properties.push(property);\n\t } while (this.expect(','));\n\t }\n\t this.consume('}');\n\t\n\t return {type: AST.ObjectExpression, properties: properties };\n\t },\n\t\n\t throwError: function(msg, token) {\n\t throw $parseMinErr('syntax',\n\t 'Syntax Error: Token \\'{0}\\' {1} at column {2} of the expression [{3}] starting at [{4}].',\n\t token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));\n\t },\n\t\n\t consume: function(e1) {\n\t if (this.tokens.length === 0) {\n\t throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n\t }\n\t\n\t var token = this.expect(e1);\n\t if (!token) {\n\t this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());\n\t }\n\t return token;\n\t },\n\t\n\t peekToken: function() {\n\t if (this.tokens.length === 0) {\n\t throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n\t }\n\t return this.tokens[0];\n\t },\n\t\n\t peek: function(e1, e2, e3, e4) {\n\t return this.peekAhead(0, e1, e2, e3, e4);\n\t },\n\t\n\t peekAhead: function(i, e1, e2, e3, e4) {\n\t if (this.tokens.length > i) {\n\t var token = this.tokens[i];\n\t var t = token.text;\n\t if (t === e1 || t === e2 || t === e3 || t === e4 ||\n\t (!e1 && !e2 && !e3 && !e4)) {\n\t return token;\n\t }\n\t }\n\t return false;\n\t },\n\t\n\t expect: function(e1, e2, e3, e4) {\n\t var token = this.peek(e1, e2, e3, e4);\n\t if (token) {\n\t this.tokens.shift();\n\t return token;\n\t }\n\t return false;\n\t },\n\t\n\t\n\t /* `undefined` is not a constant, it is an identifier,\n\t * but using it as an identifier is not supported\n\t */\n\t constants: {\n\t 'true': { type: AST.Literal, value: true },\n\t 'false': { type: AST.Literal, value: false },\n\t 'null': { type: AST.Literal, value: null },\n\t 'undefined': {type: AST.Literal, value: undefined },\n\t 'this': {type: AST.ThisExpression },\n\t '$locals': {type: AST.LocalsExpression }\n\t }\n\t};\n\t\n\tfunction ifDefined(v, d) {\n\t return typeof v !== 'undefined' ? v : d;\n\t}\n\t\n\tfunction plusFn(l, r) {\n\t if (typeof l === 'undefined') return r;\n\t if (typeof r === 'undefined') return l;\n\t return l + r;\n\t}\n\t\n\tfunction isStateless($filter, filterName) {\n\t var fn = $filter(filterName);\n\t return !fn.$stateful;\n\t}\n\t\n\tfunction findConstantAndWatchExpressions(ast, $filter) {\n\t var allConstants;\n\t var argsToWatch;\n\t switch (ast.type) {\n\t case AST.Program:\n\t allConstants = true;\n\t forEach(ast.body, function(expr) {\n\t findConstantAndWatchExpressions(expr.expression, $filter);\n\t allConstants = allConstants && expr.expression.constant;\n\t });\n\t ast.constant = allConstants;\n\t break;\n\t case AST.Literal:\n\t ast.constant = true;\n\t ast.toWatch = [];\n\t break;\n\t case AST.UnaryExpression:\n\t findConstantAndWatchExpressions(ast.argument, $filter);\n\t ast.constant = ast.argument.constant;\n\t ast.toWatch = ast.argument.toWatch;\n\t break;\n\t case AST.BinaryExpression:\n\t findConstantAndWatchExpressions(ast.left, $filter);\n\t findConstantAndWatchExpressions(ast.right, $filter);\n\t ast.constant = ast.left.constant && ast.right.constant;\n\t ast.toWatch = ast.left.toWatch.concat(ast.right.toWatch);\n\t break;\n\t case AST.LogicalExpression:\n\t findConstantAndWatchExpressions(ast.left, $filter);\n\t findConstantAndWatchExpressions(ast.right, $filter);\n\t ast.constant = ast.left.constant && ast.right.constant;\n\t ast.toWatch = ast.constant ? [] : [ast];\n\t break;\n\t case AST.ConditionalExpression:\n\t findConstantAndWatchExpressions(ast.test, $filter);\n\t findConstantAndWatchExpressions(ast.alternate, $filter);\n\t findConstantAndWatchExpressions(ast.consequent, $filter);\n\t ast.constant = ast.test.constant && ast.alternate.constant && ast.consequent.constant;\n\t ast.toWatch = ast.constant ? [] : [ast];\n\t break;\n\t case AST.Identifier:\n\t ast.constant = false;\n\t ast.toWatch = [ast];\n\t break;\n\t case AST.MemberExpression:\n\t findConstantAndWatchExpressions(ast.object, $filter);\n\t if (ast.computed) {\n\t findConstantAndWatchExpressions(ast.property, $filter);\n\t }\n\t ast.constant = ast.object.constant && (!ast.computed || ast.property.constant);\n\t ast.toWatch = [ast];\n\t break;\n\t case AST.CallExpression:\n\t allConstants = ast.filter ? isStateless($filter, ast.callee.name) : false;\n\t argsToWatch = [];\n\t forEach(ast.arguments, function(expr) {\n\t findConstantAndWatchExpressions(expr, $filter);\n\t allConstants = allConstants && expr.constant;\n\t if (!expr.constant) {\n\t argsToWatch.push.apply(argsToWatch, expr.toWatch);\n\t }\n\t });\n\t ast.constant = allConstants;\n\t ast.toWatch = ast.filter && isStateless($filter, ast.callee.name) ? argsToWatch : [ast];\n\t break;\n\t case AST.AssignmentExpression:\n\t findConstantAndWatchExpressions(ast.left, $filter);\n\t findConstantAndWatchExpressions(ast.right, $filter);\n\t ast.constant = ast.left.constant && ast.right.constant;\n\t ast.toWatch = [ast];\n\t break;\n\t case AST.ArrayExpression:\n\t allConstants = true;\n\t argsToWatch = [];\n\t forEach(ast.elements, function(expr) {\n\t findConstantAndWatchExpressions(expr, $filter);\n\t allConstants = allConstants && expr.constant;\n\t if (!expr.constant) {\n\t argsToWatch.push.apply(argsToWatch, expr.toWatch);\n\t }\n\t });\n\t ast.constant = allConstants;\n\t ast.toWatch = argsToWatch;\n\t break;\n\t case AST.ObjectExpression:\n\t allConstants = true;\n\t argsToWatch = [];\n\t forEach(ast.properties, function(property) {\n\t findConstantAndWatchExpressions(property.value, $filter);\n\t allConstants = allConstants && property.value.constant;\n\t if (!property.value.constant) {\n\t argsToWatch.push.apply(argsToWatch, property.value.toWatch);\n\t }\n\t });\n\t ast.constant = allConstants;\n\t ast.toWatch = argsToWatch;\n\t break;\n\t case AST.ThisExpression:\n\t ast.constant = false;\n\t ast.toWatch = [];\n\t break;\n\t case AST.LocalsExpression:\n\t ast.constant = false;\n\t ast.toWatch = [];\n\t break;\n\t }\n\t}\n\t\n\tfunction getInputs(body) {\n\t if (body.length != 1) return;\n\t var lastExpression = body[0].expression;\n\t var candidate = lastExpression.toWatch;\n\t if (candidate.length !== 1) return candidate;\n\t return candidate[0] !== lastExpression ? candidate : undefined;\n\t}\n\t\n\tfunction isAssignable(ast) {\n\t return ast.type === AST.Identifier || ast.type === AST.MemberExpression;\n\t}\n\t\n\tfunction assignableAST(ast) {\n\t if (ast.body.length === 1 && isAssignable(ast.body[0].expression)) {\n\t return {type: AST.AssignmentExpression, left: ast.body[0].expression, right: {type: AST.NGValueParameter}, operator: '='};\n\t }\n\t}\n\t\n\tfunction isLiteral(ast) {\n\t return ast.body.length === 0 ||\n\t ast.body.length === 1 && (\n\t ast.body[0].expression.type === AST.Literal ||\n\t ast.body[0].expression.type === AST.ArrayExpression ||\n\t ast.body[0].expression.type === AST.ObjectExpression);\n\t}\n\t\n\tfunction isConstant(ast) {\n\t return ast.constant;\n\t}\n\t\n\tfunction ASTCompiler(astBuilder, $filter) {\n\t this.astBuilder = astBuilder;\n\t this.$filter = $filter;\n\t}\n\t\n\tASTCompiler.prototype = {\n\t compile: function(expression, expensiveChecks) {\n\t var self = this;\n\t var ast = this.astBuilder.ast(expression);\n\t this.state = {\n\t nextId: 0,\n\t filters: {},\n\t expensiveChecks: expensiveChecks,\n\t fn: {vars: [], body: [], own: {}},\n\t assign: {vars: [], body: [], own: {}},\n\t inputs: []\n\t };\n\t findConstantAndWatchExpressions(ast, self.$filter);\n\t var extra = '';\n\t var assignable;\n\t this.stage = 'assign';\n\t if ((assignable = assignableAST(ast))) {\n\t this.state.computing = 'assign';\n\t var result = this.nextId();\n\t this.recurse(assignable, result);\n\t this.return_(result);\n\t extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l');\n\t }\n\t var toWatch = getInputs(ast.body);\n\t self.stage = 'inputs';\n\t forEach(toWatch, function(watch, key) {\n\t var fnKey = 'fn' + key;\n\t self.state[fnKey] = {vars: [], body: [], own: {}};\n\t self.state.computing = fnKey;\n\t var intoId = self.nextId();\n\t self.recurse(watch, intoId);\n\t self.return_(intoId);\n\t self.state.inputs.push(fnKey);\n\t watch.watchId = key;\n\t });\n\t this.state.computing = 'fn';\n\t this.stage = 'main';\n\t this.recurse(ast);\n\t var fnString =\n\t // The build and minification steps remove the string \"use strict\" from the code, but this is done using a regex.\n\t // This is a workaround for this until we do a better job at only removing the prefix only when we should.\n\t '\"' + this.USE + ' ' + this.STRICT + '\";\\n' +\n\t this.filterPrefix() +\n\t 'var fn=' + this.generateFunction('fn', 's,l,a,i') +\n\t extra +\n\t this.watchFns() +\n\t 'return fn;';\n\t\n\t /* jshint -W054 */\n\t var fn = (new Function('$filter',\n\t 'ensureSafeMemberName',\n\t 'ensureSafeObject',\n\t 'ensureSafeFunction',\n\t 'getStringValue',\n\t 'ensureSafeAssignContext',\n\t 'ifDefined',\n\t 'plus',\n\t 'text',\n\t fnString))(\n\t this.$filter,\n\t ensureSafeMemberName,\n\t ensureSafeObject,\n\t ensureSafeFunction,\n\t getStringValue,\n\t ensureSafeAssignContext,\n\t ifDefined,\n\t plusFn,\n\t expression);\n\t /* jshint +W054 */\n\t this.state = this.stage = undefined;\n\t fn.literal = isLiteral(ast);\n\t fn.constant = isConstant(ast);\n\t return fn;\n\t },\n\t\n\t USE: 'use',\n\t\n\t STRICT: 'strict',\n\t\n\t watchFns: function() {\n\t var result = [];\n\t var fns = this.state.inputs;\n\t var self = this;\n\t forEach(fns, function(name) {\n\t result.push('var ' + name + '=' + self.generateFunction(name, 's'));\n\t });\n\t if (fns.length) {\n\t result.push('fn.inputs=[' + fns.join(',') + '];');\n\t }\n\t return result.join('');\n\t },\n\t\n\t generateFunction: function(name, params) {\n\t return 'function(' + params + '){' +\n\t this.varsPrefix(name) +\n\t this.body(name) +\n\t '};';\n\t },\n\t\n\t filterPrefix: function() {\n\t var parts = [];\n\t var self = this;\n\t forEach(this.state.filters, function(id, filter) {\n\t parts.push(id + '=$filter(' + self.escape(filter) + ')');\n\t });\n\t if (parts.length) return 'var ' + parts.join(',') + ';';\n\t return '';\n\t },\n\t\n\t varsPrefix: function(section) {\n\t return this.state[section].vars.length ? 'var ' + this.state[section].vars.join(',') + ';' : '';\n\t },\n\t\n\t body: function(section) {\n\t return this.state[section].body.join('');\n\t },\n\t\n\t recurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {\n\t var left, right, self = this, args, expression;\n\t recursionFn = recursionFn || noop;\n\t if (!skipWatchIdCheck && isDefined(ast.watchId)) {\n\t intoId = intoId || this.nextId();\n\t this.if_('i',\n\t this.lazyAssign(intoId, this.computedMember('i', ast.watchId)),\n\t this.lazyRecurse(ast, intoId, nameId, recursionFn, create, true)\n\t );\n\t return;\n\t }\n\t switch (ast.type) {\n\t case AST.Program:\n\t forEach(ast.body, function(expression, pos) {\n\t self.recurse(expression.expression, undefined, undefined, function(expr) { right = expr; });\n\t if (pos !== ast.body.length - 1) {\n\t self.current().body.push(right, ';');\n\t } else {\n\t self.return_(right);\n\t }\n\t });\n\t break;\n\t case AST.Literal:\n\t expression = this.escape(ast.value);\n\t this.assign(intoId, expression);\n\t recursionFn(expression);\n\t break;\n\t case AST.UnaryExpression:\n\t this.recurse(ast.argument, undefined, undefined, function(expr) { right = expr; });\n\t expression = ast.operator + '(' + this.ifDefined(right, 0) + ')';\n\t this.assign(intoId, expression);\n\t recursionFn(expression);\n\t break;\n\t case AST.BinaryExpression:\n\t this.recurse(ast.left, undefined, undefined, function(expr) { left = expr; });\n\t this.recurse(ast.right, undefined, undefined, function(expr) { right = expr; });\n\t if (ast.operator === '+') {\n\t expression = this.plus(left, right);\n\t } else if (ast.operator === '-') {\n\t expression = this.ifDefined(left, 0) + ast.operator + this.ifDefined(right, 0);\n\t } else {\n\t expression = '(' + left + ')' + ast.operator + '(' + right + ')';\n\t }\n\t this.assign(intoId, expression);\n\t recursionFn(expression);\n\t break;\n\t case AST.LogicalExpression:\n\t intoId = intoId || this.nextId();\n\t self.recurse(ast.left, intoId);\n\t self.if_(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId));\n\t recursionFn(intoId);\n\t break;\n\t case AST.ConditionalExpression:\n\t intoId = intoId || this.nextId();\n\t self.recurse(ast.test, intoId);\n\t self.if_(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId));\n\t recursionFn(intoId);\n\t break;\n\t case AST.Identifier:\n\t intoId = intoId || this.nextId();\n\t if (nameId) {\n\t nameId.context = self.stage === 'inputs' ? 's' : this.assign(this.nextId(), this.getHasOwnProperty('l', ast.name) + '?l:s');\n\t nameId.computed = false;\n\t nameId.name = ast.name;\n\t }\n\t ensureSafeMemberName(ast.name);\n\t self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)),\n\t function() {\n\t self.if_(self.stage === 'inputs' || 's', function() {\n\t if (create && create !== 1) {\n\t self.if_(\n\t self.not(self.nonComputedMember('s', ast.name)),\n\t self.lazyAssign(self.nonComputedMember('s', ast.name), '{}'));\n\t }\n\t self.assign(intoId, self.nonComputedMember('s', ast.name));\n\t });\n\t }, intoId && self.lazyAssign(intoId, self.nonComputedMember('l', ast.name))\n\t );\n\t if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.name)) {\n\t self.addEnsureSafeObject(intoId);\n\t }\n\t recursionFn(intoId);\n\t break;\n\t case AST.MemberExpression:\n\t left = nameId && (nameId.context = this.nextId()) || this.nextId();\n\t intoId = intoId || this.nextId();\n\t self.recurse(ast.object, left, undefined, function() {\n\t self.if_(self.notNull(left), function() {\n\t if (create && create !== 1) {\n\t self.addEnsureSafeAssignContext(left);\n\t }\n\t if (ast.computed) {\n\t right = self.nextId();\n\t self.recurse(ast.property, right);\n\t self.getStringValue(right);\n\t self.addEnsureSafeMemberName(right);\n\t if (create && create !== 1) {\n\t self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}'));\n\t }\n\t expression = self.ensureSafeObject(self.computedMember(left, right));\n\t self.assign(intoId, expression);\n\t if (nameId) {\n\t nameId.computed = true;\n\t nameId.name = right;\n\t }\n\t } else {\n\t ensureSafeMemberName(ast.property.name);\n\t if (create && create !== 1) {\n\t self.if_(self.not(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));\n\t }\n\t expression = self.nonComputedMember(left, ast.property.name);\n\t if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.property.name)) {\n\t expression = self.ensureSafeObject(expression);\n\t }\n\t self.assign(intoId, expression);\n\t if (nameId) {\n\t nameId.computed = false;\n\t nameId.name = ast.property.name;\n\t }\n\t }\n\t }, function() {\n\t self.assign(intoId, 'undefined');\n\t });\n\t recursionFn(intoId);\n\t }, !!create);\n\t break;\n\t case AST.CallExpression:\n\t intoId = intoId || this.nextId();\n\t if (ast.filter) {\n\t right = self.filter(ast.callee.name);\n\t args = [];\n\t forEach(ast.arguments, function(expr) {\n\t var argument = self.nextId();\n\t self.recurse(expr, argument);\n\t args.push(argument);\n\t });\n\t expression = right + '(' + args.join(',') + ')';\n\t self.assign(intoId, expression);\n\t recursionFn(intoId);\n\t } else {\n\t right = self.nextId();\n\t left = {};\n\t args = [];\n\t self.recurse(ast.callee, right, left, function() {\n\t self.if_(self.notNull(right), function() {\n\t self.addEnsureSafeFunction(right);\n\t forEach(ast.arguments, function(expr) {\n\t self.recurse(expr, self.nextId(), undefined, function(argument) {\n\t args.push(self.ensureSafeObject(argument));\n\t });\n\t });\n\t if (left.name) {\n\t if (!self.state.expensiveChecks) {\n\t self.addEnsureSafeObject(left.context);\n\t }\n\t expression = self.member(left.context, left.name, left.computed) + '(' + args.join(',') + ')';\n\t } else {\n\t expression = right + '(' + args.join(',') + ')';\n\t }\n\t expression = self.ensureSafeObject(expression);\n\t self.assign(intoId, expression);\n\t }, function() {\n\t self.assign(intoId, 'undefined');\n\t });\n\t recursionFn(intoId);\n\t });\n\t }\n\t break;\n\t case AST.AssignmentExpression:\n\t right = this.nextId();\n\t left = {};\n\t if (!isAssignable(ast.left)) {\n\t throw $parseMinErr('lval', 'Trying to assign a value to a non l-value');\n\t }\n\t this.recurse(ast.left, undefined, left, function() {\n\t self.if_(self.notNull(left.context), function() {\n\t self.recurse(ast.right, right);\n\t self.addEnsureSafeObject(self.member(left.context, left.name, left.computed));\n\t self.addEnsureSafeAssignContext(left.context);\n\t expression = self.member(left.context, left.name, left.computed) + ast.operator + right;\n\t self.assign(intoId, expression);\n\t recursionFn(intoId || expression);\n\t });\n\t }, 1);\n\t break;\n\t case AST.ArrayExpression:\n\t args = [];\n\t forEach(ast.elements, function(expr) {\n\t self.recurse(expr, self.nextId(), undefined, function(argument) {\n\t args.push(argument);\n\t });\n\t });\n\t expression = '[' + args.join(',') + ']';\n\t this.assign(intoId, expression);\n\t recursionFn(expression);\n\t break;\n\t case AST.ObjectExpression:\n\t args = [];\n\t forEach(ast.properties, function(property) {\n\t self.recurse(property.value, self.nextId(), undefined, function(expr) {\n\t args.push(self.escape(\n\t property.key.type === AST.Identifier ? property.key.name :\n\t ('' + property.key.value)) +\n\t ':' + expr);\n\t });\n\t });\n\t expression = '{' + args.join(',') + '}';\n\t this.assign(intoId, expression);\n\t recursionFn(expression);\n\t break;\n\t case AST.ThisExpression:\n\t this.assign(intoId, 's');\n\t recursionFn('s');\n\t break;\n\t case AST.LocalsExpression:\n\t this.assign(intoId, 'l');\n\t recursionFn('l');\n\t break;\n\t case AST.NGValueParameter:\n\t this.assign(intoId, 'v');\n\t recursionFn('v');\n\t break;\n\t }\n\t },\n\t\n\t getHasOwnProperty: function(element, property) {\n\t var key = element + '.' + property;\n\t var own = this.current().own;\n\t if (!own.hasOwnProperty(key)) {\n\t own[key] = this.nextId(false, element + '&&(' + this.escape(property) + ' in ' + element + ')');\n\t }\n\t return own[key];\n\t },\n\t\n\t assign: function(id, value) {\n\t if (!id) return;\n\t this.current().body.push(id, '=', value, ';');\n\t return id;\n\t },\n\t\n\t filter: function(filterName) {\n\t if (!this.state.filters.hasOwnProperty(filterName)) {\n\t this.state.filters[filterName] = this.nextId(true);\n\t }\n\t return this.state.filters[filterName];\n\t },\n\t\n\t ifDefined: function(id, defaultValue) {\n\t return 'ifDefined(' + id + ',' + this.escape(defaultValue) + ')';\n\t },\n\t\n\t plus: function(left, right) {\n\t return 'plus(' + left + ',' + right + ')';\n\t },\n\t\n\t return_: function(id) {\n\t this.current().body.push('return ', id, ';');\n\t },\n\t\n\t if_: function(test, alternate, consequent) {\n\t if (test === true) {\n\t alternate();\n\t } else {\n\t var body = this.current().body;\n\t body.push('if(', test, '){');\n\t alternate();\n\t body.push('}');\n\t if (consequent) {\n\t body.push('else{');\n\t consequent();\n\t body.push('}');\n\t }\n\t }\n\t },\n\t\n\t not: function(expression) {\n\t return '!(' + expression + ')';\n\t },\n\t\n\t notNull: function(expression) {\n\t return expression + '!=null';\n\t },\n\t\n\t nonComputedMember: function(left, right) {\n\t return left + '.' + right;\n\t },\n\t\n\t computedMember: function(left, right) {\n\t return left + '[' + right + ']';\n\t },\n\t\n\t member: function(left, right, computed) {\n\t if (computed) return this.computedMember(left, right);\n\t return this.nonComputedMember(left, right);\n\t },\n\t\n\t addEnsureSafeObject: function(item) {\n\t this.current().body.push(this.ensureSafeObject(item), ';');\n\t },\n\t\n\t addEnsureSafeMemberName: function(item) {\n\t this.current().body.push(this.ensureSafeMemberName(item), ';');\n\t },\n\t\n\t addEnsureSafeFunction: function(item) {\n\t this.current().body.push(this.ensureSafeFunction(item), ';');\n\t },\n\t\n\t addEnsureSafeAssignContext: function(item) {\n\t this.current().body.push(this.ensureSafeAssignContext(item), ';');\n\t },\n\t\n\t ensureSafeObject: function(item) {\n\t return 'ensureSafeObject(' + item + ',text)';\n\t },\n\t\n\t ensureSafeMemberName: function(item) {\n\t return 'ensureSafeMemberName(' + item + ',text)';\n\t },\n\t\n\t ensureSafeFunction: function(item) {\n\t return 'ensureSafeFunction(' + item + ',text)';\n\t },\n\t\n\t getStringValue: function(item) {\n\t this.assign(item, 'getStringValue(' + item + ')');\n\t },\n\t\n\t ensureSafeAssignContext: function(item) {\n\t return 'ensureSafeAssignContext(' + item + ',text)';\n\t },\n\t\n\t lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {\n\t var self = this;\n\t return function() {\n\t self.recurse(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck);\n\t };\n\t },\n\t\n\t lazyAssign: function(id, value) {\n\t var self = this;\n\t return function() {\n\t self.assign(id, value);\n\t };\n\t },\n\t\n\t stringEscapeRegex: /[^ a-zA-Z0-9]/g,\n\t\n\t stringEscapeFn: function(c) {\n\t return '\\\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4);\n\t },\n\t\n\t escape: function(value) {\n\t if (isString(value)) return \"'\" + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + \"'\";\n\t if (isNumber(value)) return value.toString();\n\t if (value === true) return 'true';\n\t if (value === false) return 'false';\n\t if (value === null) return 'null';\n\t if (typeof value === 'undefined') return 'undefined';\n\t\n\t throw $parseMinErr('esc', 'IMPOSSIBLE');\n\t },\n\t\n\t nextId: function(skip, init) {\n\t var id = 'v' + (this.state.nextId++);\n\t if (!skip) {\n\t this.current().vars.push(id + (init ? '=' + init : ''));\n\t }\n\t return id;\n\t },\n\t\n\t current: function() {\n\t return this.state[this.state.computing];\n\t }\n\t};\n\t\n\t\n\tfunction ASTInterpreter(astBuilder, $filter) {\n\t this.astBuilder = astBuilder;\n\t this.$filter = $filter;\n\t}\n\t\n\tASTInterpreter.prototype = {\n\t compile: function(expression, expensiveChecks) {\n\t var self = this;\n\t var ast = this.astBuilder.ast(expression);\n\t this.expression = expression;\n\t this.expensiveChecks = expensiveChecks;\n\t findConstantAndWatchExpressions(ast, self.$filter);\n\t var assignable;\n\t var assign;\n\t if ((assignable = assignableAST(ast))) {\n\t assign = this.recurse(assignable);\n\t }\n\t var toWatch = getInputs(ast.body);\n\t var inputs;\n\t if (toWatch) {\n\t inputs = [];\n\t forEach(toWatch, function(watch, key) {\n\t var input = self.recurse(watch);\n\t watch.input = input;\n\t inputs.push(input);\n\t watch.watchId = key;\n\t });\n\t }\n\t var expressions = [];\n\t forEach(ast.body, function(expression) {\n\t expressions.push(self.recurse(expression.expression));\n\t });\n\t var fn = ast.body.length === 0 ? function() {} :\n\t ast.body.length === 1 ? expressions[0] :\n\t function(scope, locals) {\n\t var lastValue;\n\t forEach(expressions, function(exp) {\n\t lastValue = exp(scope, locals);\n\t });\n\t return lastValue;\n\t };\n\t if (assign) {\n\t fn.assign = function(scope, value, locals) {\n\t return assign(scope, locals, value);\n\t };\n\t }\n\t if (inputs) {\n\t fn.inputs = inputs;\n\t }\n\t fn.literal = isLiteral(ast);\n\t fn.constant = isConstant(ast);\n\t return fn;\n\t },\n\t\n\t recurse: function(ast, context, create) {\n\t var left, right, self = this, args, expression;\n\t if (ast.input) {\n\t return this.inputs(ast.input, ast.watchId);\n\t }\n\t switch (ast.type) {\n\t case AST.Literal:\n\t return this.value(ast.value, context);\n\t case AST.UnaryExpression:\n\t right = this.recurse(ast.argument);\n\t return this['unary' + ast.operator](right, context);\n\t case AST.BinaryExpression:\n\t left = this.recurse(ast.left);\n\t right = this.recurse(ast.right);\n\t return this['binary' + ast.operator](left, right, context);\n\t case AST.LogicalExpression:\n\t left = this.recurse(ast.left);\n\t right = this.recurse(ast.right);\n\t return this['binary' + ast.operator](left, right, context);\n\t case AST.ConditionalExpression:\n\t return this['ternary?:'](\n\t this.recurse(ast.test),\n\t this.recurse(ast.alternate),\n\t this.recurse(ast.consequent),\n\t context\n\t );\n\t case AST.Identifier:\n\t ensureSafeMemberName(ast.name, self.expression);\n\t return self.identifier(ast.name,\n\t self.expensiveChecks || isPossiblyDangerousMemberName(ast.name),\n\t context, create, self.expression);\n\t case AST.MemberExpression:\n\t left = this.recurse(ast.object, false, !!create);\n\t if (!ast.computed) {\n\t ensureSafeMemberName(ast.property.name, self.expression);\n\t right = ast.property.name;\n\t }\n\t if (ast.computed) right = this.recurse(ast.property);\n\t return ast.computed ?\n\t this.computedMember(left, right, context, create, self.expression) :\n\t this.nonComputedMember(left, right, self.expensiveChecks, context, create, self.expression);\n\t case AST.CallExpression:\n\t args = [];\n\t forEach(ast.arguments, function(expr) {\n\t args.push(self.recurse(expr));\n\t });\n\t if (ast.filter) right = this.$filter(ast.callee.name);\n\t if (!ast.filter) right = this.recurse(ast.callee, true);\n\t return ast.filter ?\n\t function(scope, locals, assign, inputs) {\n\t var values = [];\n\t for (var i = 0; i < args.length; ++i) {\n\t values.push(args[i](scope, locals, assign, inputs));\n\t }\n\t var value = right.apply(undefined, values, inputs);\n\t return context ? {context: undefined, name: undefined, value: value} : value;\n\t } :\n\t function(scope, locals, assign, inputs) {\n\t var rhs = right(scope, locals, assign, inputs);\n\t var value;\n\t if (rhs.value != null) {\n\t ensureSafeObject(rhs.context, self.expression);\n\t ensureSafeFunction(rhs.value, self.expression);\n\t var values = [];\n\t for (var i = 0; i < args.length; ++i) {\n\t values.push(ensureSafeObject(args[i](scope, locals, assign, inputs), self.expression));\n\t }\n\t value = ensureSafeObject(rhs.value.apply(rhs.context, values), self.expression);\n\t }\n\t return context ? {value: value} : value;\n\t };\n\t case AST.AssignmentExpression:\n\t left = this.recurse(ast.left, true, 1);\n\t right = this.recurse(ast.right);\n\t return function(scope, locals, assign, inputs) {\n\t var lhs = left(scope, locals, assign, inputs);\n\t var rhs = right(scope, locals, assign, inputs);\n\t ensureSafeObject(lhs.value, self.expression);\n\t ensureSafeAssignContext(lhs.context);\n\t lhs.context[lhs.name] = rhs;\n\t return context ? {value: rhs} : rhs;\n\t };\n\t case AST.ArrayExpression:\n\t args = [];\n\t forEach(ast.elements, function(expr) {\n\t args.push(self.recurse(expr));\n\t });\n\t return function(scope, locals, assign, inputs) {\n\t var value = [];\n\t for (var i = 0; i < args.length; ++i) {\n\t value.push(args[i](scope, locals, assign, inputs));\n\t }\n\t return context ? {value: value} : value;\n\t };\n\t case AST.ObjectExpression:\n\t args = [];\n\t forEach(ast.properties, function(property) {\n\t args.push({key: property.key.type === AST.Identifier ?\n\t property.key.name :\n\t ('' + property.key.value),\n\t value: self.recurse(property.value)\n\t });\n\t });\n\t return function(scope, locals, assign, inputs) {\n\t var value = {};\n\t for (var i = 0; i < args.length; ++i) {\n\t value[args[i].key] = args[i].value(scope, locals, assign, inputs);\n\t }\n\t return context ? {value: value} : value;\n\t };\n\t case AST.ThisExpression:\n\t return function(scope) {\n\t return context ? {value: scope} : scope;\n\t };\n\t case AST.LocalsExpression:\n\t return function(scope, locals) {\n\t return context ? {value: locals} : locals;\n\t };\n\t case AST.NGValueParameter:\n\t return function(scope, locals, assign, inputs) {\n\t return context ? {value: assign} : assign;\n\t };\n\t }\n\t },\n\t\n\t 'unary+': function(argument, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = argument(scope, locals, assign, inputs);\n\t if (isDefined(arg)) {\n\t arg = +arg;\n\t } else {\n\t arg = 0;\n\t }\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'unary-': function(argument, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = argument(scope, locals, assign, inputs);\n\t if (isDefined(arg)) {\n\t arg = -arg;\n\t } else {\n\t arg = 0;\n\t }\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'unary!': function(argument, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = !argument(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary+': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var lhs = left(scope, locals, assign, inputs);\n\t var rhs = right(scope, locals, assign, inputs);\n\t var arg = plusFn(lhs, rhs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary-': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var lhs = left(scope, locals, assign, inputs);\n\t var rhs = right(scope, locals, assign, inputs);\n\t var arg = (isDefined(lhs) ? lhs : 0) - (isDefined(rhs) ? rhs : 0);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary*': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) * right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary/': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) / right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary%': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) % right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary===': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) === right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary!==': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) !== right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary==': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) == right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary!=': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) != right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary<': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) < right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary>': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) > right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary<=': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) <= right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary>=': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) >= right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary&&': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) && right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'binary||': function(left, right, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = left(scope, locals, assign, inputs) || right(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t 'ternary?:': function(test, alternate, consequent, context) {\n\t return function(scope, locals, assign, inputs) {\n\t var arg = test(scope, locals, assign, inputs) ? alternate(scope, locals, assign, inputs) : consequent(scope, locals, assign, inputs);\n\t return context ? {value: arg} : arg;\n\t };\n\t },\n\t value: function(value, context) {\n\t return function() { return context ? {context: undefined, name: undefined, value: value} : value; };\n\t },\n\t identifier: function(name, expensiveChecks, context, create, expression) {\n\t return function(scope, locals, assign, inputs) {\n\t var base = locals && (name in locals) ? locals : scope;\n\t if (create && create !== 1 && base && !(base[name])) {\n\t base[name] = {};\n\t }\n\t var value = base ? base[name] : undefined;\n\t if (expensiveChecks) {\n\t ensureSafeObject(value, expression);\n\t }\n\t if (context) {\n\t return {context: base, name: name, value: value};\n\t } else {\n\t return value;\n\t }\n\t };\n\t },\n\t computedMember: function(left, right, context, create, expression) {\n\t return function(scope, locals, assign, inputs) {\n\t var lhs = left(scope, locals, assign, inputs);\n\t var rhs;\n\t var value;\n\t if (lhs != null) {\n\t rhs = right(scope, locals, assign, inputs);\n\t rhs = getStringValue(rhs);\n\t ensureSafeMemberName(rhs, expression);\n\t if (create && create !== 1) {\n\t ensureSafeAssignContext(lhs);\n\t if (lhs && !(lhs[rhs])) {\n\t lhs[rhs] = {};\n\t }\n\t }\n\t value = lhs[rhs];\n\t ensureSafeObject(value, expression);\n\t }\n\t if (context) {\n\t return {context: lhs, name: rhs, value: value};\n\t } else {\n\t return value;\n\t }\n\t };\n\t },\n\t nonComputedMember: function(left, right, expensiveChecks, context, create, expression) {\n\t return function(scope, locals, assign, inputs) {\n\t var lhs = left(scope, locals, assign, inputs);\n\t if (create && create !== 1) {\n\t ensureSafeAssignContext(lhs);\n\t if (lhs && !(lhs[right])) {\n\t lhs[right] = {};\n\t }\n\t }\n\t var value = lhs != null ? lhs[right] : undefined;\n\t if (expensiveChecks || isPossiblyDangerousMemberName(right)) {\n\t ensureSafeObject(value, expression);\n\t }\n\t if (context) {\n\t return {context: lhs, name: right, value: value};\n\t } else {\n\t return value;\n\t }\n\t };\n\t },\n\t inputs: function(input, watchId) {\n\t return function(scope, value, locals, inputs) {\n\t if (inputs) return inputs[watchId];\n\t return input(scope, value, locals);\n\t };\n\t }\n\t};\n\t\n\t/**\n\t * @constructor\n\t */\n\tvar Parser = function(lexer, $filter, options) {\n\t this.lexer = lexer;\n\t this.$filter = $filter;\n\t this.options = options;\n\t this.ast = new AST(this.lexer);\n\t this.astCompiler = options.csp ? new ASTInterpreter(this.ast, $filter) :\n\t new ASTCompiler(this.ast, $filter);\n\t};\n\t\n\tParser.prototype = {\n\t constructor: Parser,\n\t\n\t parse: function(text) {\n\t return this.astCompiler.compile(text, this.options.expensiveChecks);\n\t }\n\t};\n\t\n\tfunction isPossiblyDangerousMemberName(name) {\n\t return name == 'constructor';\n\t}\n\t\n\tvar objectValueOf = Object.prototype.valueOf;\n\t\n\tfunction getValueOf(value) {\n\t return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);\n\t}\n\t\n\t///////////////////////////////////\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $parse\n\t * @kind function\n\t *\n\t * @description\n\t *\n\t * Converts Angular {@link guide/expression expression} into a function.\n\t *\n\t * ```js\n\t * var getter = $parse('user.name');\n\t * var setter = getter.assign;\n\t * var context = {user:{name:'angular'}};\n\t * var locals = {user:{name:'local'}};\n\t *\n\t * expect(getter(context)).toEqual('angular');\n\t * setter(context, 'newValue');\n\t * expect(context.user.name).toEqual('newValue');\n\t * expect(getter(context, locals)).toEqual('local');\n\t * ```\n\t *\n\t *\n\t * @param {string} expression String expression to compile.\n\t * @returns {function(context, locals)} a function which represents the compiled expression:\n\t *\n\t * * `context` – `{object}` – an object against which any expressions embedded in the strings\n\t * are evaluated against (typically a scope object).\n\t * * `locals` – `{object=}` – local variables context object, useful for overriding values in\n\t * `context`.\n\t *\n\t * The returned function also has the following properties:\n\t * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript\n\t * literal.\n\t * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript\n\t * constant literals.\n\t * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be\n\t * set to a function to change its value on the given context.\n\t *\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $parseProvider\n\t *\n\t * @description\n\t * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}\n\t * service.\n\t */\n\tfunction $ParseProvider() {\n\t var cacheDefault = createMap();\n\t var cacheExpensive = createMap();\n\t\n\t this.$get = ['$filter', function($filter) {\n\t var noUnsafeEval = csp().noUnsafeEval;\n\t var $parseOptions = {\n\t csp: noUnsafeEval,\n\t expensiveChecks: false\n\t },\n\t $parseOptionsExpensive = {\n\t csp: noUnsafeEval,\n\t expensiveChecks: true\n\t };\n\t var runningChecksEnabled = false;\n\t\n\t $parse.$$runningExpensiveChecks = function() {\n\t return runningChecksEnabled;\n\t };\n\t\n\t return $parse;\n\t\n\t function $parse(exp, interceptorFn, expensiveChecks) {\n\t var parsedExpression, oneTime, cacheKey;\n\t\n\t expensiveChecks = expensiveChecks || runningChecksEnabled;\n\t\n\t switch (typeof exp) {\n\t case 'string':\n\t exp = exp.trim();\n\t cacheKey = exp;\n\t\n\t var cache = (expensiveChecks ? cacheExpensive : cacheDefault);\n\t parsedExpression = cache[cacheKey];\n\t\n\t if (!parsedExpression) {\n\t if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {\n\t oneTime = true;\n\t exp = exp.substring(2);\n\t }\n\t var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;\n\t var lexer = new Lexer(parseOptions);\n\t var parser = new Parser(lexer, $filter, parseOptions);\n\t parsedExpression = parser.parse(exp);\n\t if (parsedExpression.constant) {\n\t parsedExpression.$$watchDelegate = constantWatchDelegate;\n\t } else if (oneTime) {\n\t parsedExpression.$$watchDelegate = parsedExpression.literal ?\n\t oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;\n\t } else if (parsedExpression.inputs) {\n\t parsedExpression.$$watchDelegate = inputsWatchDelegate;\n\t }\n\t if (expensiveChecks) {\n\t parsedExpression = expensiveChecksInterceptor(parsedExpression);\n\t }\n\t cache[cacheKey] = parsedExpression;\n\t }\n\t return addInterceptor(parsedExpression, interceptorFn);\n\t\n\t case 'function':\n\t return addInterceptor(exp, interceptorFn);\n\t\n\t default:\n\t return addInterceptor(noop, interceptorFn);\n\t }\n\t }\n\t\n\t function expensiveChecksInterceptor(fn) {\n\t if (!fn) return fn;\n\t expensiveCheckFn.$$watchDelegate = fn.$$watchDelegate;\n\t expensiveCheckFn.assign = expensiveChecksInterceptor(fn.assign);\n\t expensiveCheckFn.constant = fn.constant;\n\t expensiveCheckFn.literal = fn.literal;\n\t for (var i = 0; fn.inputs && i < fn.inputs.length; ++i) {\n\t fn.inputs[i] = expensiveChecksInterceptor(fn.inputs[i]);\n\t }\n\t expensiveCheckFn.inputs = fn.inputs;\n\t\n\t return expensiveCheckFn;\n\t\n\t function expensiveCheckFn(scope, locals, assign, inputs) {\n\t var expensiveCheckOldValue = runningChecksEnabled;\n\t runningChecksEnabled = true;\n\t try {\n\t return fn(scope, locals, assign, inputs);\n\t } finally {\n\t runningChecksEnabled = expensiveCheckOldValue;\n\t }\n\t }\n\t }\n\t\n\t function expressionInputDirtyCheck(newValue, oldValueOfValue) {\n\t\n\t if (newValue == null || oldValueOfValue == null) { // null/undefined\n\t return newValue === oldValueOfValue;\n\t }\n\t\n\t if (typeof newValue === 'object') {\n\t\n\t // attempt to convert the value to a primitive type\n\t // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can\n\t // be cheaply dirty-checked\n\t newValue = getValueOf(newValue);\n\t\n\t if (typeof newValue === 'object') {\n\t // objects/arrays are not supported - deep-watching them would be too expensive\n\t return false;\n\t }\n\t\n\t // fall-through to the primitive equality check\n\t }\n\t\n\t //Primitive or NaN\n\t return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);\n\t }\n\t\n\t function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) {\n\t var inputExpressions = parsedExpression.inputs;\n\t var lastResult;\n\t\n\t if (inputExpressions.length === 1) {\n\t var oldInputValueOf = expressionInputDirtyCheck; // init to something unique so that equals check fails\n\t inputExpressions = inputExpressions[0];\n\t return scope.$watch(function expressionInputWatch(scope) {\n\t var newInputValue = inputExpressions(scope);\n\t if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf)) {\n\t lastResult = parsedExpression(scope, undefined, undefined, [newInputValue]);\n\t oldInputValueOf = newInputValue && getValueOf(newInputValue);\n\t }\n\t return lastResult;\n\t }, listener, objectEquality, prettyPrintExpression);\n\t }\n\t\n\t var oldInputValueOfValues = [];\n\t var oldInputValues = [];\n\t for (var i = 0, ii = inputExpressions.length; i < ii; i++) {\n\t oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails\n\t oldInputValues[i] = null;\n\t }\n\t\n\t return scope.$watch(function expressionInputsWatch(scope) {\n\t var changed = false;\n\t\n\t for (var i = 0, ii = inputExpressions.length; i < ii; i++) {\n\t var newInputValue = inputExpressions[i](scope);\n\t if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {\n\t oldInputValues[i] = newInputValue;\n\t oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);\n\t }\n\t }\n\t\n\t if (changed) {\n\t lastResult = parsedExpression(scope, undefined, undefined, oldInputValues);\n\t }\n\t\n\t return lastResult;\n\t }, listener, objectEquality, prettyPrintExpression);\n\t }\n\t\n\t function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n\t var unwatch, lastValue;\n\t return unwatch = scope.$watch(function oneTimeWatch(scope) {\n\t return parsedExpression(scope);\n\t }, function oneTimeListener(value, old, scope) {\n\t lastValue = value;\n\t if (isFunction(listener)) {\n\t listener.apply(this, arguments);\n\t }\n\t if (isDefined(value)) {\n\t scope.$$postDigest(function() {\n\t if (isDefined(lastValue)) {\n\t unwatch();\n\t }\n\t });\n\t }\n\t }, objectEquality);\n\t }\n\t\n\t function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n\t var unwatch, lastValue;\n\t return unwatch = scope.$watch(function oneTimeWatch(scope) {\n\t return parsedExpression(scope);\n\t }, function oneTimeListener(value, old, scope) {\n\t lastValue = value;\n\t if (isFunction(listener)) {\n\t listener.call(this, value, old, scope);\n\t }\n\t if (isAllDefined(value)) {\n\t scope.$$postDigest(function() {\n\t if (isAllDefined(lastValue)) unwatch();\n\t });\n\t }\n\t }, objectEquality);\n\t\n\t function isAllDefined(value) {\n\t var allDefined = true;\n\t forEach(value, function(val) {\n\t if (!isDefined(val)) allDefined = false;\n\t });\n\t return allDefined;\n\t }\n\t }\n\t\n\t function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n\t var unwatch;\n\t return unwatch = scope.$watch(function constantWatch(scope) {\n\t unwatch();\n\t return parsedExpression(scope);\n\t }, listener, objectEquality);\n\t }\n\t\n\t function addInterceptor(parsedExpression, interceptorFn) {\n\t if (!interceptorFn) return parsedExpression;\n\t var watchDelegate = parsedExpression.$$watchDelegate;\n\t var useInputs = false;\n\t\n\t var regularWatch =\n\t watchDelegate !== oneTimeLiteralWatchDelegate &&\n\t watchDelegate !== oneTimeWatchDelegate;\n\t\n\t var fn = regularWatch ? function regularInterceptedExpression(scope, locals, assign, inputs) {\n\t var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs);\n\t return interceptorFn(value, scope, locals);\n\t } : function oneTimeInterceptedExpression(scope, locals, assign, inputs) {\n\t var value = parsedExpression(scope, locals, assign, inputs);\n\t var result = interceptorFn(value, scope, locals);\n\t // we only return the interceptor's result if the\n\t // initial value is defined (for bind-once)\n\t return isDefined(value) ? result : value;\n\t };\n\t\n\t // Propagate $$watchDelegates other then inputsWatchDelegate\n\t if (parsedExpression.$$watchDelegate &&\n\t parsedExpression.$$watchDelegate !== inputsWatchDelegate) {\n\t fn.$$watchDelegate = parsedExpression.$$watchDelegate;\n\t } else if (!interceptorFn.$stateful) {\n\t // If there is an interceptor, but no watchDelegate then treat the interceptor like\n\t // we treat filters - it is assumed to be a pure function unless flagged with $stateful\n\t fn.$$watchDelegate = inputsWatchDelegate;\n\t useInputs = !parsedExpression.inputs;\n\t fn.inputs = parsedExpression.inputs ? parsedExpression.inputs : [parsedExpression];\n\t }\n\t\n\t return fn;\n\t }\n\t }];\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $q\n\t * @requires $rootScope\n\t *\n\t * @description\n\t * A service that helps you run functions asynchronously, and use their return values (or exceptions)\n\t * when they are done processing.\n\t *\n\t * This is an implementation of promises/deferred objects inspired by\n\t * [Kris Kowal's Q](https://github.com/kriskowal/q).\n\t *\n\t * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred\n\t * implementations, and the other which resembles ES6 promises to some degree.\n\t *\n\t * # $q constructor\n\t *\n\t * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`\n\t * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,\n\t * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\t *\n\t * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are\n\t * available yet.\n\t *\n\t * It can be used like so:\n\t *\n\t * ```js\n\t * // for the purpose of this example let's assume that variables `$q` and `okToGreet`\n\t * // are available in the current lexical scope (they could have been injected or passed in).\n\t *\n\t * function asyncGreet(name) {\n\t * // perform some asynchronous operation, resolve or reject the promise when appropriate.\n\t * return $q(function(resolve, reject) {\n\t * setTimeout(function() {\n\t * if (okToGreet(name)) {\n\t * resolve('Hello, ' + name + '!');\n\t * } else {\n\t * reject('Greeting ' + name + ' is not allowed.');\n\t * }\n\t * }, 1000);\n\t * });\n\t * }\n\t *\n\t * var promise = asyncGreet('Robin Hood');\n\t * promise.then(function(greeting) {\n\t * alert('Success: ' + greeting);\n\t * }, function(reason) {\n\t * alert('Failed: ' + reason);\n\t * });\n\t * ```\n\t *\n\t * Note: progress/notify callbacks are not currently supported via the ES6-style interface.\n\t *\n\t * Note: unlike ES6 behavior, an exception thrown in the constructor function will NOT implicitly reject the promise.\n\t *\n\t * However, the more traditional CommonJS-style usage is still available, and documented below.\n\t *\n\t * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an\n\t * interface for interacting with an object that represents the result of an action that is\n\t * performed asynchronously, and may or may not be finished at any given point in time.\n\t *\n\t * From the perspective of dealing with error handling, deferred and promise APIs are to\n\t * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.\n\t *\n\t * ```js\n\t * // for the purpose of this example let's assume that variables `$q` and `okToGreet`\n\t * // are available in the current lexical scope (they could have been injected or passed in).\n\t *\n\t * function asyncGreet(name) {\n\t * var deferred = $q.defer();\n\t *\n\t * setTimeout(function() {\n\t * deferred.notify('About to greet ' + name + '.');\n\t *\n\t * if (okToGreet(name)) {\n\t * deferred.resolve('Hello, ' + name + '!');\n\t * } else {\n\t * deferred.reject('Greeting ' + name + ' is not allowed.');\n\t * }\n\t * }, 1000);\n\t *\n\t * return deferred.promise;\n\t * }\n\t *\n\t * var promise = asyncGreet('Robin Hood');\n\t * promise.then(function(greeting) {\n\t * alert('Success: ' + greeting);\n\t * }, function(reason) {\n\t * alert('Failed: ' + reason);\n\t * }, function(update) {\n\t * alert('Got notification: ' + update);\n\t * });\n\t * ```\n\t *\n\t * At first it might not be obvious why this extra complexity is worth the trouble. The payoff\n\t * comes in the way of guarantees that promise and deferred APIs make, see\n\t * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.\n\t *\n\t * Additionally the promise api allows for composition that is very hard to do with the\n\t * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.\n\t * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the\n\t * section on serial or parallel joining of promises.\n\t *\n\t * # The Deferred API\n\t *\n\t * A new instance of deferred is constructed by calling `$q.defer()`.\n\t *\n\t * The purpose of the deferred object is to expose the associated Promise instance as well as APIs\n\t * that can be used for signaling the successful or unsuccessful completion, as well as the status\n\t * of the task.\n\t *\n\t * **Methods**\n\t *\n\t * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection\n\t * constructed via `$q.reject`, the promise will be rejected instead.\n\t * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to\n\t * resolving it with a rejection constructed via `$q.reject`.\n\t * - `notify(value)` - provides updates on the status of the promise's execution. This may be called\n\t * multiple times before the promise is either resolved or rejected.\n\t *\n\t * **Properties**\n\t *\n\t * - promise – `{Promise}` – promise object associated with this deferred.\n\t *\n\t *\n\t * # The Promise API\n\t *\n\t * A new promise instance is created when a deferred instance is created and can be retrieved by\n\t * calling `deferred.promise`.\n\t *\n\t * The purpose of the promise object is to allow for interested parties to get access to the result\n\t * of the deferred task when it completes.\n\t *\n\t * **Methods**\n\t *\n\t * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or\n\t * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously\n\t * as soon as the result is available. The callbacks are called with a single argument: the result\n\t * or rejection reason. Additionally, the notify callback may be called zero or more times to\n\t * provide a progress indication, before the promise is resolved or rejected.\n\t *\n\t * This method *returns a new promise* which is resolved or rejected via the return value of the\n\t * `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved\n\t * with the value which is resolved in that promise using\n\t * [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)).\n\t * It also notifies via the return value of the `notifyCallback` method. The promise cannot be\n\t * resolved or rejected from the notifyCallback method.\n\t *\n\t * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`\n\t *\n\t * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,\n\t * but to do so without modifying the final value. This is useful to release resources or do some\n\t * clean-up that needs to be done whether the promise was rejected or resolved. See the [full\n\t * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for\n\t * more information.\n\t *\n\t * # Chaining promises\n\t *\n\t * Because calling the `then` method of a promise returns a new derived promise, it is easily\n\t * possible to create a chain of promises:\n\t *\n\t * ```js\n\t * promiseB = promiseA.then(function(result) {\n\t * return result + 1;\n\t * });\n\t *\n\t * // promiseB will be resolved immediately after promiseA is resolved and its value\n\t * // will be the result of promiseA incremented by 1\n\t * ```\n\t *\n\t * It is possible to create chains of any length and since a promise can be resolved with another\n\t * promise (which will defer its resolution further), it is possible to pause/defer resolution of\n\t * the promises at any point in the chain. This makes it possible to implement powerful APIs like\n\t * $http's response interceptors.\n\t *\n\t *\n\t * # Differences between Kris Kowal's Q and $q\n\t *\n\t * There are two main differences:\n\t *\n\t * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation\n\t * mechanism in angular, which means faster propagation of resolution or rejection into your\n\t * models and avoiding unnecessary browser repaints, which would result in flickering UI.\n\t * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains\n\t * all the important functionality needed for common async tasks.\n\t *\n\t * # Testing\n\t *\n\t * ```js\n\t * it('should simulate promise', inject(function($q, $rootScope) {\n\t * var deferred = $q.defer();\n\t * var promise = deferred.promise;\n\t * var resolvedValue;\n\t *\n\t * promise.then(function(value) { resolvedValue = value; });\n\t * expect(resolvedValue).toBeUndefined();\n\t *\n\t * // Simulate resolving of promise\n\t * deferred.resolve(123);\n\t * // Note that the 'then' function does not get called synchronously.\n\t * // This is because we want the promise API to always be async, whether or not\n\t * // it got called synchronously or asynchronously.\n\t * expect(resolvedValue).toBeUndefined();\n\t *\n\t * // Propagate promise resolution to 'then' functions using $apply().\n\t * $rootScope.$apply();\n\t * expect(resolvedValue).toEqual(123);\n\t * }));\n\t * ```\n\t *\n\t * @param {function(function, function)} resolver Function which is responsible for resolving or\n\t * rejecting the newly created promise. The first parameter is a function which resolves the\n\t * promise, the second parameter is a function which rejects the promise.\n\t *\n\t * @returns {Promise} The newly created promise.\n\t */\n\tfunction $QProvider() {\n\t\n\t this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {\n\t return qFactory(function(callback) {\n\t $rootScope.$evalAsync(callback);\n\t }, $exceptionHandler);\n\t }];\n\t}\n\t\n\tfunction $$QProvider() {\n\t this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {\n\t return qFactory(function(callback) {\n\t $browser.defer(callback);\n\t }, $exceptionHandler);\n\t }];\n\t}\n\t\n\t/**\n\t * Constructs a promise manager.\n\t *\n\t * @param {function(function)} nextTick Function for executing functions in the next turn.\n\t * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for\n\t * debugging purposes.\n\t * @returns {object} Promise manager.\n\t */\n\tfunction qFactory(nextTick, exceptionHandler) {\n\t var $qMinErr = minErr('$q', TypeError);\n\t\n\t /**\n\t * @ngdoc method\n\t * @name ng.$q#defer\n\t * @kind function\n\t *\n\t * @description\n\t * Creates a `Deferred` object which represents a task which will finish in the future.\n\t *\n\t * @returns {Deferred} Returns a new instance of deferred.\n\t */\n\t var defer = function() {\n\t var d = new Deferred();\n\t //Necessary to support unbound execution :/\n\t d.resolve = simpleBind(d, d.resolve);\n\t d.reject = simpleBind(d, d.reject);\n\t d.notify = simpleBind(d, d.notify);\n\t return d;\n\t };\n\t\n\t function Promise() {\n\t this.$$state = { status: 0 };\n\t }\n\t\n\t extend(Promise.prototype, {\n\t then: function(onFulfilled, onRejected, progressBack) {\n\t if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) {\n\t return this;\n\t }\n\t var result = new Deferred();\n\t\n\t this.$$state.pending = this.$$state.pending || [];\n\t this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);\n\t if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);\n\t\n\t return result.promise;\n\t },\n\t\n\t \"catch\": function(callback) {\n\t return this.then(null, callback);\n\t },\n\t\n\t \"finally\": function(callback, progressBack) {\n\t return this.then(function(value) {\n\t return handleCallback(value, true, callback);\n\t }, function(error) {\n\t return handleCallback(error, false, callback);\n\t }, progressBack);\n\t }\n\t });\n\t\n\t //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native\n\t function simpleBind(context, fn) {\n\t return function(value) {\n\t fn.call(context, value);\n\t };\n\t }\n\t\n\t function processQueue(state) {\n\t var fn, deferred, pending;\n\t\n\t pending = state.pending;\n\t state.processScheduled = false;\n\t state.pending = undefined;\n\t for (var i = 0, ii = pending.length; i < ii; ++i) {\n\t deferred = pending[i][0];\n\t fn = pending[i][state.status];\n\t try {\n\t if (isFunction(fn)) {\n\t deferred.resolve(fn(state.value));\n\t } else if (state.status === 1) {\n\t deferred.resolve(state.value);\n\t } else {\n\t deferred.reject(state.value);\n\t }\n\t } catch (e) {\n\t deferred.reject(e);\n\t exceptionHandler(e);\n\t }\n\t }\n\t }\n\t\n\t function scheduleProcessQueue(state) {\n\t if (state.processScheduled || !state.pending) return;\n\t state.processScheduled = true;\n\t nextTick(function() { processQueue(state); });\n\t }\n\t\n\t function Deferred() {\n\t this.promise = new Promise();\n\t }\n\t\n\t extend(Deferred.prototype, {\n\t resolve: function(val) {\n\t if (this.promise.$$state.status) return;\n\t if (val === this.promise) {\n\t this.$$reject($qMinErr(\n\t 'qcycle',\n\t \"Expected promise to be resolved with value other than itself '{0}'\",\n\t val));\n\t } else {\n\t this.$$resolve(val);\n\t }\n\t\n\t },\n\t\n\t $$resolve: function(val) {\n\t var then;\n\t var that = this;\n\t var done = false;\n\t try {\n\t if ((isObject(val) || isFunction(val))) then = val && val.then;\n\t if (isFunction(then)) {\n\t this.promise.$$state.status = -1;\n\t then.call(val, resolvePromise, rejectPromise, simpleBind(this, this.notify));\n\t } else {\n\t this.promise.$$state.value = val;\n\t this.promise.$$state.status = 1;\n\t scheduleProcessQueue(this.promise.$$state);\n\t }\n\t } catch (e) {\n\t rejectPromise(e);\n\t exceptionHandler(e);\n\t }\n\t\n\t function resolvePromise(val) {\n\t if (done) return;\n\t done = true;\n\t that.$$resolve(val);\n\t }\n\t function rejectPromise(val) {\n\t if (done) return;\n\t done = true;\n\t that.$$reject(val);\n\t }\n\t },\n\t\n\t reject: function(reason) {\n\t if (this.promise.$$state.status) return;\n\t this.$$reject(reason);\n\t },\n\t\n\t $$reject: function(reason) {\n\t this.promise.$$state.value = reason;\n\t this.promise.$$state.status = 2;\n\t scheduleProcessQueue(this.promise.$$state);\n\t },\n\t\n\t notify: function(progress) {\n\t var callbacks = this.promise.$$state.pending;\n\t\n\t if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {\n\t nextTick(function() {\n\t var callback, result;\n\t for (var i = 0, ii = callbacks.length; i < ii; i++) {\n\t result = callbacks[i][0];\n\t callback = callbacks[i][3];\n\t try {\n\t result.notify(isFunction(callback) ? callback(progress) : progress);\n\t } catch (e) {\n\t exceptionHandler(e);\n\t }\n\t }\n\t });\n\t }\n\t }\n\t });\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $q#reject\n\t * @kind function\n\t *\n\t * @description\n\t * Creates a promise that is resolved as rejected with the specified `reason`. This api should be\n\t * used to forward rejection in a chain of promises. If you are dealing with the last promise in\n\t * a promise chain, you don't need to worry about it.\n\t *\n\t * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of\n\t * `reject` as the `throw` keyword in JavaScript. This also means that if you \"catch\" an error via\n\t * a promise error callback and you want to forward the error to the promise derived from the\n\t * current promise, you have to \"rethrow\" the error by returning a rejection constructed via\n\t * `reject`.\n\t *\n\t * ```js\n\t * promiseB = promiseA.then(function(result) {\n\t * // success: do something and resolve promiseB\n\t * // with the old or a new result\n\t * return result;\n\t * }, function(reason) {\n\t * // error: handle the error if possible and\n\t * // resolve promiseB with newPromiseOrValue,\n\t * // otherwise forward the rejection to promiseB\n\t * if (canHandle(reason)) {\n\t * // handle the error and recover\n\t * return newPromiseOrValue;\n\t * }\n\t * return $q.reject(reason);\n\t * });\n\t * ```\n\t *\n\t * @param {*} reason Constant, message, exception or an object representing the rejection reason.\n\t * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.\n\t */\n\t var reject = function(reason) {\n\t var result = new Deferred();\n\t result.reject(reason);\n\t return result.promise;\n\t };\n\t\n\t var makePromise = function makePromise(value, resolved) {\n\t var result = new Deferred();\n\t if (resolved) {\n\t result.resolve(value);\n\t } else {\n\t result.reject(value);\n\t }\n\t return result.promise;\n\t };\n\t\n\t var handleCallback = function handleCallback(value, isResolved, callback) {\n\t var callbackOutput = null;\n\t try {\n\t if (isFunction(callback)) callbackOutput = callback();\n\t } catch (e) {\n\t return makePromise(e, false);\n\t }\n\t if (isPromiseLike(callbackOutput)) {\n\t return callbackOutput.then(function() {\n\t return makePromise(value, isResolved);\n\t }, function(error) {\n\t return makePromise(error, false);\n\t });\n\t } else {\n\t return makePromise(value, isResolved);\n\t }\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $q#when\n\t * @kind function\n\t *\n\t * @description\n\t * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.\n\t * This is useful when you are dealing with an object that might or might not be a promise, or if\n\t * the promise comes from a source that can't be trusted.\n\t *\n\t * @param {*} value Value or a promise\n\t * @param {Function=} successCallback\n\t * @param {Function=} errorCallback\n\t * @param {Function=} progressCallback\n\t * @returns {Promise} Returns a promise of the passed value or promise\n\t */\n\t\n\t\n\t var when = function(value, callback, errback, progressBack) {\n\t var result = new Deferred();\n\t result.resolve(value);\n\t return result.promise.then(callback, errback, progressBack);\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $q#resolve\n\t * @kind function\n\t *\n\t * @description\n\t * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6.\n\t *\n\t * @param {*} value Value or a promise\n\t * @param {Function=} successCallback\n\t * @param {Function=} errorCallback\n\t * @param {Function=} progressCallback\n\t * @returns {Promise} Returns a promise of the passed value or promise\n\t */\n\t var resolve = when;\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $q#all\n\t * @kind function\n\t *\n\t * @description\n\t * Combines multiple promises into a single promise that is resolved when all of the input\n\t * promises are resolved.\n\t *\n\t * @param {Array.|Object.} promises An array or hash of promises.\n\t * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,\n\t * each value corresponding to the promise at the same index/key in the `promises` array/hash.\n\t * If any of the promises is resolved with a rejection, this resulting promise will be rejected\n\t * with the same rejection value.\n\t */\n\t\n\t function all(promises) {\n\t var deferred = new Deferred(),\n\t counter = 0,\n\t results = isArray(promises) ? [] : {};\n\t\n\t forEach(promises, function(promise, key) {\n\t counter++;\n\t when(promise).then(function(value) {\n\t if (results.hasOwnProperty(key)) return;\n\t results[key] = value;\n\t if (!(--counter)) deferred.resolve(results);\n\t }, function(reason) {\n\t if (results.hasOwnProperty(key)) return;\n\t deferred.reject(reason);\n\t });\n\t });\n\t\n\t if (counter === 0) {\n\t deferred.resolve(results);\n\t }\n\t\n\t return deferred.promise;\n\t }\n\t\n\t var $Q = function Q(resolver) {\n\t if (!isFunction(resolver)) {\n\t throw $qMinErr('norslvr', \"Expected resolverFn, got '{0}'\", resolver);\n\t }\n\t\n\t var deferred = new Deferred();\n\t\n\t function resolveFn(value) {\n\t deferred.resolve(value);\n\t }\n\t\n\t function rejectFn(reason) {\n\t deferred.reject(reason);\n\t }\n\t\n\t resolver(resolveFn, rejectFn);\n\t\n\t return deferred.promise;\n\t };\n\t\n\t // Let's make the instanceof operator work for promises, so that\n\t // `new $q(fn) instanceof $q` would evaluate to true.\n\t $Q.prototype = Promise.prototype;\n\t\n\t $Q.defer = defer;\n\t $Q.reject = reject;\n\t $Q.when = when;\n\t $Q.resolve = resolve;\n\t $Q.all = all;\n\t\n\t return $Q;\n\t}\n\t\n\tfunction $$RAFProvider() { //rAF\n\t this.$get = ['$window', '$timeout', function($window, $timeout) {\n\t var requestAnimationFrame = $window.requestAnimationFrame ||\n\t $window.webkitRequestAnimationFrame;\n\t\n\t var cancelAnimationFrame = $window.cancelAnimationFrame ||\n\t $window.webkitCancelAnimationFrame ||\n\t $window.webkitCancelRequestAnimationFrame;\n\t\n\t var rafSupported = !!requestAnimationFrame;\n\t var raf = rafSupported\n\t ? function(fn) {\n\t var id = requestAnimationFrame(fn);\n\t return function() {\n\t cancelAnimationFrame(id);\n\t };\n\t }\n\t : function(fn) {\n\t var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n\t return function() {\n\t $timeout.cancel(timer);\n\t };\n\t };\n\t\n\t raf.supported = rafSupported;\n\t\n\t return raf;\n\t }];\n\t}\n\t\n\t/**\n\t * DESIGN NOTES\n\t *\n\t * The design decisions behind the scope are heavily favored for speed and memory consumption.\n\t *\n\t * The typical use of scope is to watch the expressions, which most of the time return the same\n\t * value as last time so we optimize the operation.\n\t *\n\t * Closures construction is expensive in terms of speed as well as memory:\n\t * - No closures, instead use prototypical inheritance for API\n\t * - Internal state needs to be stored on scope directly, which means that private state is\n\t * exposed as $$____ properties\n\t *\n\t * Loop operations are optimized by using while(count--) { ... }\n\t * - This means that in order to keep the same order of execution as addition we have to add\n\t * items to the array at the beginning (unshift) instead of at the end (push)\n\t *\n\t * Child scopes are created and removed often\n\t * - Using an array would be slow since inserts in the middle are expensive; so we use linked lists\n\t *\n\t * There are fewer watches than observers. This is why you don't want the observer to be implemented\n\t * in the same way as watch. Watch requires return of the initialization function which is expensive\n\t * to construct.\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $rootScopeProvider\n\t * @description\n\t *\n\t * Provider for the $rootScope service.\n\t */\n\t\n\t/**\n\t * @ngdoc method\n\t * @name $rootScopeProvider#digestTtl\n\t * @description\n\t *\n\t * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and\n\t * assuming that the model is unstable.\n\t *\n\t * The current default is 10 iterations.\n\t *\n\t * In complex applications it's possible that the dependencies between `$watch`s will result in\n\t * several digest iterations. However if an application needs more than the default 10 digest\n\t * iterations for its model to stabilize then you should investigate what is causing the model to\n\t * continuously change during the digest.\n\t *\n\t * Increasing the TTL could have performance implications, so you should not change it without\n\t * proper justification.\n\t *\n\t * @param {number} limit The number of digest iterations.\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $rootScope\n\t * @description\n\t *\n\t * Every application has a single root {@link ng.$rootScope.Scope scope}.\n\t * All other scopes are descendant scopes of the root scope. Scopes provide separation\n\t * between the model and the view, via a mechanism for watching the model for changes.\n\t * They also provide event emission/broadcast and subscription facility. See the\n\t * {@link guide/scope developer guide on scopes}.\n\t */\n\tfunction $RootScopeProvider() {\n\t var TTL = 10;\n\t var $rootScopeMinErr = minErr('$rootScope');\n\t var lastDirtyWatch = null;\n\t var applyAsyncId = null;\n\t\n\t this.digestTtl = function(value) {\n\t if (arguments.length) {\n\t TTL = value;\n\t }\n\t return TTL;\n\t };\n\t\n\t function createChildScopeClass(parent) {\n\t function ChildScope() {\n\t this.$$watchers = this.$$nextSibling =\n\t this.$$childHead = this.$$childTail = null;\n\t this.$$listeners = {};\n\t this.$$listenerCount = {};\n\t this.$$watchersCount = 0;\n\t this.$id = nextUid();\n\t this.$$ChildScope = null;\n\t }\n\t ChildScope.prototype = parent;\n\t return ChildScope;\n\t }\n\t\n\t this.$get = ['$exceptionHandler', '$parse', '$browser',\n\t function($exceptionHandler, $parse, $browser) {\n\t\n\t function destroyChildScope($event) {\n\t $event.currentScope.$$destroyed = true;\n\t }\n\t\n\t function cleanUpScope($scope) {\n\t\n\t if (msie === 9) {\n\t // There is a memory leak in IE9 if all child scopes are not disconnected\n\t // completely when a scope is destroyed. So this code will recurse up through\n\t // all this scopes children\n\t //\n\t // See issue https://github.com/angular/angular.js/issues/10706\n\t $scope.$$childHead && cleanUpScope($scope.$$childHead);\n\t $scope.$$nextSibling && cleanUpScope($scope.$$nextSibling);\n\t }\n\t\n\t // The code below works around IE9 and V8's memory leaks\n\t //\n\t // See:\n\t // - https://code.google.com/p/v8/issues/detail?id=2073#c26\n\t // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909\n\t // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451\n\t\n\t $scope.$parent = $scope.$$nextSibling = $scope.$$prevSibling = $scope.$$childHead =\n\t $scope.$$childTail = $scope.$root = $scope.$$watchers = null;\n\t }\n\t\n\t /**\n\t * @ngdoc type\n\t * @name $rootScope.Scope\n\t *\n\t * @description\n\t * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the\n\t * {@link auto.$injector $injector}. Child scopes are created using the\n\t * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when\n\t * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for\n\t * an in-depth introduction and usage examples.\n\t *\n\t *\n\t * # Inheritance\n\t * A scope can inherit from a parent scope, as in this example:\n\t * ```js\n\t var parent = $rootScope;\n\t var child = parent.$new();\n\t\n\t parent.salutation = \"Hello\";\n\t expect(child.salutation).toEqual('Hello');\n\t\n\t child.salutation = \"Welcome\";\n\t expect(child.salutation).toEqual('Welcome');\n\t expect(parent.salutation).toEqual('Hello');\n\t * ```\n\t *\n\t * When interacting with `Scope` in tests, additional helper methods are available on the\n\t * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional\n\t * details.\n\t *\n\t *\n\t * @param {Object.=} providers Map of service factory which need to be\n\t * provided for the current scope. Defaults to {@link ng}.\n\t * @param {Object.=} instanceCache Provides pre-instantiated services which should\n\t * append/override services provided by `providers`. This is handy\n\t * when unit-testing and having the need to override a default\n\t * service.\n\t * @returns {Object} Newly created scope.\n\t *\n\t */\n\t function Scope() {\n\t this.$id = nextUid();\n\t this.$$phase = this.$parent = this.$$watchers =\n\t this.$$nextSibling = this.$$prevSibling =\n\t this.$$childHead = this.$$childTail = null;\n\t this.$root = this;\n\t this.$$destroyed = false;\n\t this.$$listeners = {};\n\t this.$$listenerCount = {};\n\t this.$$watchersCount = 0;\n\t this.$$isolateBindings = null;\n\t }\n\t\n\t /**\n\t * @ngdoc property\n\t * @name $rootScope.Scope#$id\n\t *\n\t * @description\n\t * Unique scope ID (monotonically increasing) useful for debugging.\n\t */\n\t\n\t /**\n\t * @ngdoc property\n\t * @name $rootScope.Scope#$parent\n\t *\n\t * @description\n\t * Reference to the parent scope.\n\t */\n\t\n\t /**\n\t * @ngdoc property\n\t * @name $rootScope.Scope#$root\n\t *\n\t * @description\n\t * Reference to the root scope.\n\t */\n\t\n\t Scope.prototype = {\n\t constructor: Scope,\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$new\n\t * @kind function\n\t *\n\t * @description\n\t * Creates a new child {@link ng.$rootScope.Scope scope}.\n\t *\n\t * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.\n\t * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.\n\t *\n\t * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is\n\t * desired for the scope and its child scopes to be permanently detached from the parent and\n\t * thus stop participating in model change detection and listener notification by invoking.\n\t *\n\t * @param {boolean} isolate If true, then the scope does not prototypically inherit from the\n\t * parent scope. The scope is isolated, as it can not see parent scope properties.\n\t * When creating widgets, it is useful for the widget to not accidentally read parent\n\t * state.\n\t *\n\t * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`\n\t * of the newly created scope. Defaults to `this` scope if not provided.\n\t * This is used when creating a transclude scope to correctly place it\n\t * in the scope hierarchy while maintaining the correct prototypical\n\t * inheritance.\n\t *\n\t * @returns {Object} The newly created child scope.\n\t *\n\t */\n\t $new: function(isolate, parent) {\n\t var child;\n\t\n\t parent = parent || this;\n\t\n\t if (isolate) {\n\t child = new Scope();\n\t child.$root = this.$root;\n\t } else {\n\t // Only create a child scope class if somebody asks for one,\n\t // but cache it to allow the VM to optimize lookups.\n\t if (!this.$$ChildScope) {\n\t this.$$ChildScope = createChildScopeClass(this);\n\t }\n\t child = new this.$$ChildScope();\n\t }\n\t child.$parent = parent;\n\t child.$$prevSibling = parent.$$childTail;\n\t if (parent.$$childHead) {\n\t parent.$$childTail.$$nextSibling = child;\n\t parent.$$childTail = child;\n\t } else {\n\t parent.$$childHead = parent.$$childTail = child;\n\t }\n\t\n\t // When the new scope is not isolated or we inherit from `this`, and\n\t // the parent scope is destroyed, the property `$$destroyed` is inherited\n\t // prototypically. In all other cases, this property needs to be set\n\t // when the parent scope is destroyed.\n\t // The listener needs to be added after the parent is set\n\t if (isolate || parent != this) child.$on('$destroy', destroyChildScope);\n\t\n\t return child;\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$watch\n\t * @kind function\n\t *\n\t * @description\n\t * Registers a `listener` callback to be executed whenever the `watchExpression` changes.\n\t *\n\t * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest\n\t * $digest()} and should return the value that will be watched. (`watchExpression` should not change\n\t * its value when executed multiple times with the same input because it may be executed multiple\n\t * times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be\n\t * [idempotent](http://en.wikipedia.org/wiki/Idempotence).\n\t * - The `listener` is called only when the value from the current `watchExpression` and the\n\t * previous call to `watchExpression` are not equal (with the exception of the initial run,\n\t * see below). Inequality is determined according to reference inequality,\n\t * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)\n\t * via the `!==` Javascript operator, unless `objectEquality == true`\n\t * (see next point)\n\t * - When `objectEquality == true`, inequality of the `watchExpression` is determined\n\t * according to the {@link angular.equals} function. To save the value of the object for\n\t * later comparison, the {@link angular.copy} function is used. This therefore means that\n\t * watching complex objects will have adverse memory and performance implications.\n\t * - The watch `listener` may change the model, which may trigger other `listener`s to fire.\n\t * This is achieved by rerunning the watchers until no changes are detected. The rerun\n\t * iteration limit is 10 to prevent an infinite loop deadlock.\n\t *\n\t *\n\t * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,\n\t * you can register a `watchExpression` function with no `listener`. (Be prepared for\n\t * multiple calls to your `watchExpression` because it will execute multiple times in a\n\t * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.)\n\t *\n\t * After a watcher is registered with the scope, the `listener` fn is called asynchronously\n\t * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the\n\t * watcher. In rare cases, this is undesirable because the listener is called when the result\n\t * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you\n\t * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the\n\t * listener was called due to initialization.\n\t *\n\t *\n\t *\n\t * # Example\n\t * ```js\n\t // let's assume that scope was dependency injected as the $rootScope\n\t var scope = $rootScope;\n\t scope.name = 'misko';\n\t scope.counter = 0;\n\t\n\t expect(scope.counter).toEqual(0);\n\t scope.$watch('name', function(newValue, oldValue) {\n\t scope.counter = scope.counter + 1;\n\t });\n\t expect(scope.counter).toEqual(0);\n\t\n\t scope.$digest();\n\t // the listener is always called during the first $digest loop after it was registered\n\t expect(scope.counter).toEqual(1);\n\t\n\t scope.$digest();\n\t // but now it will not be called unless the value changes\n\t expect(scope.counter).toEqual(1);\n\t\n\t scope.name = 'adam';\n\t scope.$digest();\n\t expect(scope.counter).toEqual(2);\n\t\n\t\n\t\n\t // Using a function as a watchExpression\n\t var food;\n\t scope.foodCounter = 0;\n\t expect(scope.foodCounter).toEqual(0);\n\t scope.$watch(\n\t // This function returns the value being watched. It is called for each turn of the $digest loop\n\t function() { return food; },\n\t // This is the change listener, called when the value returned from the above function changes\n\t function(newValue, oldValue) {\n\t if ( newValue !== oldValue ) {\n\t // Only increment the counter if the value changed\n\t scope.foodCounter = scope.foodCounter + 1;\n\t }\n\t }\n\t );\n\t // No digest has been run so the counter will be zero\n\t expect(scope.foodCounter).toEqual(0);\n\t\n\t // Run the digest but since food has not changed count will still be zero\n\t scope.$digest();\n\t expect(scope.foodCounter).toEqual(0);\n\t\n\t // Update food and run digest. Now the counter will increment\n\t food = 'cheeseburger';\n\t scope.$digest();\n\t expect(scope.foodCounter).toEqual(1);\n\t\n\t * ```\n\t *\n\t *\n\t *\n\t * @param {(function()|string)} watchExpression Expression that is evaluated on each\n\t * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers\n\t * a call to the `listener`.\n\t *\n\t * - `string`: Evaluated as {@link guide/expression expression}\n\t * - `function(scope)`: called with current `scope` as a parameter.\n\t * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value\n\t * of `watchExpression` changes.\n\t *\n\t * - `newVal` contains the current value of the `watchExpression`\n\t * - `oldVal` contains the previous value of the `watchExpression`\n\t * - `scope` refers to the current scope\n\t * @param {boolean=} [objectEquality=false] Compare for object equality using {@link angular.equals} instead of\n\t * comparing for reference equality.\n\t * @returns {function()} Returns a deregistration function for this listener.\n\t */\n\t $watch: function(watchExp, listener, objectEquality, prettyPrintExpression) {\n\t var get = $parse(watchExp);\n\t\n\t if (get.$$watchDelegate) {\n\t return get.$$watchDelegate(this, listener, objectEquality, get, watchExp);\n\t }\n\t var scope = this,\n\t array = scope.$$watchers,\n\t watcher = {\n\t fn: listener,\n\t last: initWatchVal,\n\t get: get,\n\t exp: prettyPrintExpression || watchExp,\n\t eq: !!objectEquality\n\t };\n\t\n\t lastDirtyWatch = null;\n\t\n\t if (!isFunction(listener)) {\n\t watcher.fn = noop;\n\t }\n\t\n\t if (!array) {\n\t array = scope.$$watchers = [];\n\t }\n\t // we use unshift since we use a while loop in $digest for speed.\n\t // the while loop reads in reverse order.\n\t array.unshift(watcher);\n\t incrementWatchersCount(this, 1);\n\t\n\t return function deregisterWatch() {\n\t if (arrayRemove(array, watcher) >= 0) {\n\t incrementWatchersCount(scope, -1);\n\t }\n\t lastDirtyWatch = null;\n\t };\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$watchGroup\n\t * @kind function\n\t *\n\t * @description\n\t * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.\n\t * If any one expression in the collection changes the `listener` is executed.\n\t *\n\t * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every\n\t * call to $digest() to see if any items changes.\n\t * - The `listener` is called whenever any expression in the `watchExpressions` array changes.\n\t *\n\t * @param {Array.} watchExpressions Array of expressions that will be individually\n\t * watched using {@link ng.$rootScope.Scope#$watch $watch()}\n\t *\n\t * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any\n\t * expression in `watchExpressions` changes\n\t * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching\n\t * those of `watchExpression`\n\t * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching\n\t * those of `watchExpression`\n\t * The `scope` refers to the current scope.\n\t * @returns {function()} Returns a de-registration function for all listeners.\n\t */\n\t $watchGroup: function(watchExpressions, listener) {\n\t var oldValues = new Array(watchExpressions.length);\n\t var newValues = new Array(watchExpressions.length);\n\t var deregisterFns = [];\n\t var self = this;\n\t var changeReactionScheduled = false;\n\t var firstRun = true;\n\t\n\t if (!watchExpressions.length) {\n\t // No expressions means we call the listener ASAP\n\t var shouldCall = true;\n\t self.$evalAsync(function() {\n\t if (shouldCall) listener(newValues, newValues, self);\n\t });\n\t return function deregisterWatchGroup() {\n\t shouldCall = false;\n\t };\n\t }\n\t\n\t if (watchExpressions.length === 1) {\n\t // Special case size of one\n\t return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {\n\t newValues[0] = value;\n\t oldValues[0] = oldValue;\n\t listener(newValues, (value === oldValue) ? newValues : oldValues, scope);\n\t });\n\t }\n\t\n\t forEach(watchExpressions, function(expr, i) {\n\t var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {\n\t newValues[i] = value;\n\t oldValues[i] = oldValue;\n\t if (!changeReactionScheduled) {\n\t changeReactionScheduled = true;\n\t self.$evalAsync(watchGroupAction);\n\t }\n\t });\n\t deregisterFns.push(unwatchFn);\n\t });\n\t\n\t function watchGroupAction() {\n\t changeReactionScheduled = false;\n\t\n\t if (firstRun) {\n\t firstRun = false;\n\t listener(newValues, newValues, self);\n\t } else {\n\t listener(newValues, oldValues, self);\n\t }\n\t }\n\t\n\t return function deregisterWatchGroup() {\n\t while (deregisterFns.length) {\n\t deregisterFns.shift()();\n\t }\n\t };\n\t },\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$watchCollection\n\t * @kind function\n\t *\n\t * @description\n\t * Shallow watches the properties of an object and fires whenever any of the properties change\n\t * (for arrays, this implies watching the array items; for object maps, this implies watching\n\t * the properties). If a change is detected, the `listener` callback is fired.\n\t *\n\t * - The `obj` collection is observed via standard $watch operation and is examined on every\n\t * call to $digest() to see if any items have been added, removed, or moved.\n\t * - The `listener` is called whenever anything within the `obj` has changed. Examples include\n\t * adding, removing, and moving items belonging to an object or array.\n\t *\n\t *\n\t * # Example\n\t * ```js\n\t $scope.names = ['igor', 'matias', 'misko', 'james'];\n\t $scope.dataCount = 4;\n\t\n\t $scope.$watchCollection('names', function(newNames, oldNames) {\n\t $scope.dataCount = newNames.length;\n\t });\n\t\n\t expect($scope.dataCount).toEqual(4);\n\t $scope.$digest();\n\t\n\t //still at 4 ... no changes\n\t expect($scope.dataCount).toEqual(4);\n\t\n\t $scope.names.pop();\n\t $scope.$digest();\n\t\n\t //now there's been a change\n\t expect($scope.dataCount).toEqual(3);\n\t * ```\n\t *\n\t *\n\t * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The\n\t * expression value should evaluate to an object or an array which is observed on each\n\t * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the\n\t * collection will trigger a call to the `listener`.\n\t *\n\t * @param {function(newCollection, oldCollection, scope)} listener a callback function called\n\t * when a change is detected.\n\t * - The `newCollection` object is the newly modified data obtained from the `obj` expression\n\t * - The `oldCollection` object is a copy of the former collection data.\n\t * Due to performance considerations, the`oldCollection` value is computed only if the\n\t * `listener` function declares two or more arguments.\n\t * - The `scope` argument refers to the current scope.\n\t *\n\t * @returns {function()} Returns a de-registration function for this listener. When the\n\t * de-registration function is executed, the internal watch operation is terminated.\n\t */\n\t $watchCollection: function(obj, listener) {\n\t $watchCollectionInterceptor.$stateful = true;\n\t\n\t var self = this;\n\t // the current value, updated on each dirty-check run\n\t var newValue;\n\t // a shallow copy of the newValue from the last dirty-check run,\n\t // updated to match newValue during dirty-check run\n\t var oldValue;\n\t // a shallow copy of the newValue from when the last change happened\n\t var veryOldValue;\n\t // only track veryOldValue if the listener is asking for it\n\t var trackVeryOldValue = (listener.length > 1);\n\t var changeDetected = 0;\n\t var changeDetector = $parse(obj, $watchCollectionInterceptor);\n\t var internalArray = [];\n\t var internalObject = {};\n\t var initRun = true;\n\t var oldLength = 0;\n\t\n\t function $watchCollectionInterceptor(_value) {\n\t newValue = _value;\n\t var newLength, key, bothNaN, newItem, oldItem;\n\t\n\t // If the new value is undefined, then return undefined as the watch may be a one-time watch\n\t if (isUndefined(newValue)) return;\n\t\n\t if (!isObject(newValue)) { // if primitive\n\t if (oldValue !== newValue) {\n\t oldValue = newValue;\n\t changeDetected++;\n\t }\n\t } else if (isArrayLike(newValue)) {\n\t if (oldValue !== internalArray) {\n\t // we are transitioning from something which was not an array into array.\n\t oldValue = internalArray;\n\t oldLength = oldValue.length = 0;\n\t changeDetected++;\n\t }\n\t\n\t newLength = newValue.length;\n\t\n\t if (oldLength !== newLength) {\n\t // if lengths do not match we need to trigger change notification\n\t changeDetected++;\n\t oldValue.length = oldLength = newLength;\n\t }\n\t // copy the items to oldValue and look for changes.\n\t for (var i = 0; i < newLength; i++) {\n\t oldItem = oldValue[i];\n\t newItem = newValue[i];\n\t\n\t bothNaN = (oldItem !== oldItem) && (newItem !== newItem);\n\t if (!bothNaN && (oldItem !== newItem)) {\n\t changeDetected++;\n\t oldValue[i] = newItem;\n\t }\n\t }\n\t } else {\n\t if (oldValue !== internalObject) {\n\t // we are transitioning from something which was not an object into object.\n\t oldValue = internalObject = {};\n\t oldLength = 0;\n\t changeDetected++;\n\t }\n\t // copy the items to oldValue and look for changes.\n\t newLength = 0;\n\t for (key in newValue) {\n\t if (hasOwnProperty.call(newValue, key)) {\n\t newLength++;\n\t newItem = newValue[key];\n\t oldItem = oldValue[key];\n\t\n\t if (key in oldValue) {\n\t bothNaN = (oldItem !== oldItem) && (newItem !== newItem);\n\t if (!bothNaN && (oldItem !== newItem)) {\n\t changeDetected++;\n\t oldValue[key] = newItem;\n\t }\n\t } else {\n\t oldLength++;\n\t oldValue[key] = newItem;\n\t changeDetected++;\n\t }\n\t }\n\t }\n\t if (oldLength > newLength) {\n\t // we used to have more keys, need to find them and destroy them.\n\t changeDetected++;\n\t for (key in oldValue) {\n\t if (!hasOwnProperty.call(newValue, key)) {\n\t oldLength--;\n\t delete oldValue[key];\n\t }\n\t }\n\t }\n\t }\n\t return changeDetected;\n\t }\n\t\n\t function $watchCollectionAction() {\n\t if (initRun) {\n\t initRun = false;\n\t listener(newValue, newValue, self);\n\t } else {\n\t listener(newValue, veryOldValue, self);\n\t }\n\t\n\t // make a copy for the next time a collection is changed\n\t if (trackVeryOldValue) {\n\t if (!isObject(newValue)) {\n\t //primitive\n\t veryOldValue = newValue;\n\t } else if (isArrayLike(newValue)) {\n\t veryOldValue = new Array(newValue.length);\n\t for (var i = 0; i < newValue.length; i++) {\n\t veryOldValue[i] = newValue[i];\n\t }\n\t } else { // if object\n\t veryOldValue = {};\n\t for (var key in newValue) {\n\t if (hasOwnProperty.call(newValue, key)) {\n\t veryOldValue[key] = newValue[key];\n\t }\n\t }\n\t }\n\t }\n\t }\n\t\n\t return this.$watch(changeDetector, $watchCollectionAction);\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$digest\n\t * @kind function\n\t *\n\t * @description\n\t * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and\n\t * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change\n\t * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}\n\t * until no more listeners are firing. This means that it is possible to get into an infinite\n\t * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of\n\t * iterations exceeds 10.\n\t *\n\t * Usually, you don't call `$digest()` directly in\n\t * {@link ng.directive:ngController controllers} or in\n\t * {@link ng.$compileProvider#directive directives}.\n\t * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within\n\t * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.\n\t *\n\t * If you want to be notified whenever `$digest()` is called,\n\t * you can register a `watchExpression` function with\n\t * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.\n\t *\n\t * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.\n\t *\n\t * # Example\n\t * ```js\n\t var scope = ...;\n\t scope.name = 'misko';\n\t scope.counter = 0;\n\t\n\t expect(scope.counter).toEqual(0);\n\t scope.$watch('name', function(newValue, oldValue) {\n\t scope.counter = scope.counter + 1;\n\t });\n\t expect(scope.counter).toEqual(0);\n\t\n\t scope.$digest();\n\t // the listener is always called during the first $digest loop after it was registered\n\t expect(scope.counter).toEqual(1);\n\t\n\t scope.$digest();\n\t // but now it will not be called unless the value changes\n\t expect(scope.counter).toEqual(1);\n\t\n\t scope.name = 'adam';\n\t scope.$digest();\n\t expect(scope.counter).toEqual(2);\n\t * ```\n\t *\n\t */\n\t $digest: function() {\n\t var watch, value, last, fn, get,\n\t watchers,\n\t length,\n\t dirty, ttl = TTL,\n\t next, current, target = this,\n\t watchLog = [],\n\t logIdx, logMsg, asyncTask;\n\t\n\t beginPhase('$digest');\n\t // Check for changes to browser url that happened in sync before the call to $digest\n\t $browser.$$checkUrlChange();\n\t\n\t if (this === $rootScope && applyAsyncId !== null) {\n\t // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then\n\t // cancel the scheduled $apply and flush the queue of expressions to be evaluated.\n\t $browser.defer.cancel(applyAsyncId);\n\t flushApplyAsync();\n\t }\n\t\n\t lastDirtyWatch = null;\n\t\n\t do { // \"while dirty\" loop\n\t dirty = false;\n\t current = target;\n\t\n\t while (asyncQueue.length) {\n\t try {\n\t asyncTask = asyncQueue.shift();\n\t asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals);\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t lastDirtyWatch = null;\n\t }\n\t\n\t traverseScopesLoop:\n\t do { // \"traverse the scopes\" loop\n\t if ((watchers = current.$$watchers)) {\n\t // process our watches\n\t length = watchers.length;\n\t while (length--) {\n\t try {\n\t watch = watchers[length];\n\t // Most common watches are on primitives, in which case we can short\n\t // circuit it with === operator, only when === fails do we use .equals\n\t if (watch) {\n\t get = watch.get;\n\t if ((value = get(current)) !== (last = watch.last) &&\n\t !(watch.eq\n\t ? equals(value, last)\n\t : (typeof value === 'number' && typeof last === 'number'\n\t && isNaN(value) && isNaN(last)))) {\n\t dirty = true;\n\t lastDirtyWatch = watch;\n\t watch.last = watch.eq ? copy(value, null) : value;\n\t fn = watch.fn;\n\t fn(value, ((last === initWatchVal) ? value : last), current);\n\t if (ttl < 5) {\n\t logIdx = 4 - ttl;\n\t if (!watchLog[logIdx]) watchLog[logIdx] = [];\n\t watchLog[logIdx].push({\n\t msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,\n\t newVal: value,\n\t oldVal: last\n\t });\n\t }\n\t } else if (watch === lastDirtyWatch) {\n\t // If the most recently dirty watcher is now clean, short circuit since the remaining watchers\n\t // have already been tested.\n\t dirty = false;\n\t break traverseScopesLoop;\n\t }\n\t }\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t }\n\t }\n\t\n\t // Insanity Warning: scope depth-first traversal\n\t // yes, this code is a bit crazy, but it works and we have tests to prove it!\n\t // this piece should be kept in sync with the traversal in $broadcast\n\t if (!(next = ((current.$$watchersCount && current.$$childHead) ||\n\t (current !== target && current.$$nextSibling)))) {\n\t while (current !== target && !(next = current.$$nextSibling)) {\n\t current = current.$parent;\n\t }\n\t }\n\t } while ((current = next));\n\t\n\t // `break traverseScopesLoop;` takes us to here\n\t\n\t if ((dirty || asyncQueue.length) && !(ttl--)) {\n\t clearPhase();\n\t throw $rootScopeMinErr('infdig',\n\t '{0} $digest() iterations reached. Aborting!\\n' +\n\t 'Watchers fired in the last 5 iterations: {1}',\n\t TTL, watchLog);\n\t }\n\t\n\t } while (dirty || asyncQueue.length);\n\t\n\t clearPhase();\n\t\n\t while (postDigestQueue.length) {\n\t try {\n\t postDigestQueue.shift()();\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t }\n\t },\n\t\n\t\n\t /**\n\t * @ngdoc event\n\t * @name $rootScope.Scope#$destroy\n\t * @eventType broadcast on scope being destroyed\n\t *\n\t * @description\n\t * Broadcasted when a scope and its children are being destroyed.\n\t *\n\t * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n\t * clean up DOM bindings before an element is removed from the DOM.\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$destroy\n\t * @kind function\n\t *\n\t * @description\n\t * Removes the current scope (and all of its children) from the parent scope. Removal implies\n\t * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer\n\t * propagate to the current scope and its children. Removal also implies that the current\n\t * scope is eligible for garbage collection.\n\t *\n\t * The `$destroy()` is usually used by directives such as\n\t * {@link ng.directive:ngRepeat ngRepeat} for managing the\n\t * unrolling of the loop.\n\t *\n\t * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.\n\t * Application code can register a `$destroy` event handler that will give it a chance to\n\t * perform any necessary cleanup.\n\t *\n\t * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n\t * clean up DOM bindings before an element is removed from the DOM.\n\t */\n\t $destroy: function() {\n\t // We can't destroy a scope that has been already destroyed.\n\t if (this.$$destroyed) return;\n\t var parent = this.$parent;\n\t\n\t this.$broadcast('$destroy');\n\t this.$$destroyed = true;\n\t\n\t if (this === $rootScope) {\n\t //Remove handlers attached to window when $rootScope is removed\n\t $browser.$$applicationDestroyed();\n\t }\n\t\n\t incrementWatchersCount(this, -this.$$watchersCount);\n\t for (var eventName in this.$$listenerCount) {\n\t decrementListenerCount(this, this.$$listenerCount[eventName], eventName);\n\t }\n\t\n\t // sever all the references to parent scopes (after this cleanup, the current scope should\n\t // not be retained by any of our references and should be eligible for garbage collection)\n\t if (parent && parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;\n\t if (parent && parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;\n\t if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;\n\t if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;\n\t\n\t // Disable listeners, watchers and apply/digest methods\n\t this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;\n\t this.$on = this.$watch = this.$watchGroup = function() { return noop; };\n\t this.$$listeners = {};\n\t\n\t // Disconnect the next sibling to prevent `cleanUpScope` destroying those too\n\t this.$$nextSibling = null;\n\t cleanUpScope(this);\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$eval\n\t * @kind function\n\t *\n\t * @description\n\t * Executes the `expression` on the current scope and returns the result. Any exceptions in\n\t * the expression are propagated (uncaught). This is useful when evaluating Angular\n\t * expressions.\n\t *\n\t * # Example\n\t * ```js\n\t var scope = ng.$rootScope.Scope();\n\t scope.a = 1;\n\t scope.b = 2;\n\t\n\t expect(scope.$eval('a+b')).toEqual(3);\n\t expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);\n\t * ```\n\t *\n\t * @param {(string|function())=} expression An angular expression to be executed.\n\t *\n\t * - `string`: execute using the rules as defined in {@link guide/expression expression}.\n\t * - `function(scope)`: execute the function with the current `scope` parameter.\n\t *\n\t * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n\t * @returns {*} The result of evaluating the expression.\n\t */\n\t $eval: function(expr, locals) {\n\t return $parse(expr)(this, locals);\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$evalAsync\n\t * @kind function\n\t *\n\t * @description\n\t * Executes the expression on the current scope at a later point in time.\n\t *\n\t * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only\n\t * that:\n\t *\n\t * - it will execute after the function that scheduled the evaluation (preferably before DOM\n\t * rendering).\n\t * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after\n\t * `expression` execution.\n\t *\n\t * Any exceptions from the execution of the expression are forwarded to the\n\t * {@link ng.$exceptionHandler $exceptionHandler} service.\n\t *\n\t * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle\n\t * will be scheduled. However, it is encouraged to always call code that changes the model\n\t * from within an `$apply` call. That includes code evaluated via `$evalAsync`.\n\t *\n\t * @param {(string|function())=} expression An angular expression to be executed.\n\t *\n\t * - `string`: execute using the rules as defined in {@link guide/expression expression}.\n\t * - `function(scope)`: execute the function with the current `scope` parameter.\n\t *\n\t * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n\t */\n\t $evalAsync: function(expr, locals) {\n\t // if we are outside of an $digest loop and this is the first time we are scheduling async\n\t // task also schedule async auto-flush\n\t if (!$rootScope.$$phase && !asyncQueue.length) {\n\t $browser.defer(function() {\n\t if (asyncQueue.length) {\n\t $rootScope.$digest();\n\t }\n\t });\n\t }\n\t\n\t asyncQueue.push({scope: this, expression: $parse(expr), locals: locals});\n\t },\n\t\n\t $$postDigest: function(fn) {\n\t postDigestQueue.push(fn);\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$apply\n\t * @kind function\n\t *\n\t * @description\n\t * `$apply()` is used to execute an expression in angular from outside of the angular\n\t * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).\n\t * Because we are calling into the angular framework we need to perform proper scope life\n\t * cycle of {@link ng.$exceptionHandler exception handling},\n\t * {@link ng.$rootScope.Scope#$digest executing watches}.\n\t *\n\t * ## Life cycle\n\t *\n\t * # Pseudo-Code of `$apply()`\n\t * ```js\n\t function $apply(expr) {\n\t try {\n\t return $eval(expr);\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t } finally {\n\t $root.$digest();\n\t }\n\t }\n\t * ```\n\t *\n\t *\n\t * Scope's `$apply()` method transitions through the following stages:\n\t *\n\t * 1. The {@link guide/expression expression} is executed using the\n\t * {@link ng.$rootScope.Scope#$eval $eval()} method.\n\t * 2. Any exceptions from the execution of the expression are forwarded to the\n\t * {@link ng.$exceptionHandler $exceptionHandler} service.\n\t * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the\n\t * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.\n\t *\n\t *\n\t * @param {(string|function())=} exp An angular expression to be executed.\n\t *\n\t * - `string`: execute using the rules as defined in {@link guide/expression expression}.\n\t * - `function(scope)`: execute the function with current `scope` parameter.\n\t *\n\t * @returns {*} The result of evaluating the expression.\n\t */\n\t $apply: function(expr) {\n\t try {\n\t beginPhase('$apply');\n\t try {\n\t return this.$eval(expr);\n\t } finally {\n\t clearPhase();\n\t }\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t } finally {\n\t try {\n\t $rootScope.$digest();\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t throw e;\n\t }\n\t }\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$applyAsync\n\t * @kind function\n\t *\n\t * @description\n\t * Schedule the invocation of $apply to occur at a later time. The actual time difference\n\t * varies across browsers, but is typically around ~10 milliseconds.\n\t *\n\t * This can be used to queue up multiple expressions which need to be evaluated in the same\n\t * digest.\n\t *\n\t * @param {(string|function())=} exp An angular expression to be executed.\n\t *\n\t * - `string`: execute using the rules as defined in {@link guide/expression expression}.\n\t * - `function(scope)`: execute the function with current `scope` parameter.\n\t */\n\t $applyAsync: function(expr) {\n\t var scope = this;\n\t expr && applyAsyncQueue.push($applyAsyncExpression);\n\t expr = $parse(expr);\n\t scheduleApplyAsync();\n\t\n\t function $applyAsyncExpression() {\n\t scope.$eval(expr);\n\t }\n\t },\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$on\n\t * @kind function\n\t *\n\t * @description\n\t * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for\n\t * discussion of event life cycle.\n\t *\n\t * The event listener function format is: `function(event, args...)`. The `event` object\n\t * passed into the listener has the following attributes:\n\t *\n\t * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or\n\t * `$broadcast`-ed.\n\t * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the\n\t * event propagates through the scope hierarchy, this property is set to null.\n\t * - `name` - `{string}`: name of the event.\n\t * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel\n\t * further event propagation (available only for events that were `$emit`-ed).\n\t * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag\n\t * to true.\n\t * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.\n\t *\n\t * @param {string} name Event name to listen on.\n\t * @param {function(event, ...args)} listener Function to call when the event is emitted.\n\t * @returns {function()} Returns a deregistration function for this listener.\n\t */\n\t $on: function(name, listener) {\n\t var namedListeners = this.$$listeners[name];\n\t if (!namedListeners) {\n\t this.$$listeners[name] = namedListeners = [];\n\t }\n\t namedListeners.push(listener);\n\t\n\t var current = this;\n\t do {\n\t if (!current.$$listenerCount[name]) {\n\t current.$$listenerCount[name] = 0;\n\t }\n\t current.$$listenerCount[name]++;\n\t } while ((current = current.$parent));\n\t\n\t var self = this;\n\t return function() {\n\t var indexOfListener = namedListeners.indexOf(listener);\n\t if (indexOfListener !== -1) {\n\t namedListeners[indexOfListener] = null;\n\t decrementListenerCount(self, 1, name);\n\t }\n\t };\n\t },\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$emit\n\t * @kind function\n\t *\n\t * @description\n\t * Dispatches an event `name` upwards through the scope hierarchy notifying the\n\t * registered {@link ng.$rootScope.Scope#$on} listeners.\n\t *\n\t * The event life cycle starts at the scope on which `$emit` was called. All\n\t * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n\t * notified. Afterwards, the event traverses upwards toward the root scope and calls all\n\t * registered listeners along the way. The event will stop propagating if one of the listeners\n\t * cancels it.\n\t *\n\t * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n\t * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n\t *\n\t * @param {string} name Event name to emit.\n\t * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n\t * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).\n\t */\n\t $emit: function(name, args) {\n\t var empty = [],\n\t namedListeners,\n\t scope = this,\n\t stopPropagation = false,\n\t event = {\n\t name: name,\n\t targetScope: scope,\n\t stopPropagation: function() {stopPropagation = true;},\n\t preventDefault: function() {\n\t event.defaultPrevented = true;\n\t },\n\t defaultPrevented: false\n\t },\n\t listenerArgs = concat([event], arguments, 1),\n\t i, length;\n\t\n\t do {\n\t namedListeners = scope.$$listeners[name] || empty;\n\t event.currentScope = scope;\n\t for (i = 0, length = namedListeners.length; i < length; i++) {\n\t\n\t // if listeners were deregistered, defragment the array\n\t if (!namedListeners[i]) {\n\t namedListeners.splice(i, 1);\n\t i--;\n\t length--;\n\t continue;\n\t }\n\t try {\n\t //allow all listeners attached to the current scope to run\n\t namedListeners[i].apply(null, listenerArgs);\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t }\n\t //if any listener on the current scope stops propagation, prevent bubbling\n\t if (stopPropagation) {\n\t event.currentScope = null;\n\t return event;\n\t }\n\t //traverse upwards\n\t scope = scope.$parent;\n\t } while (scope);\n\t\n\t event.currentScope = null;\n\t\n\t return event;\n\t },\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $rootScope.Scope#$broadcast\n\t * @kind function\n\t *\n\t * @description\n\t * Dispatches an event `name` downwards to all child scopes (and their children) notifying the\n\t * registered {@link ng.$rootScope.Scope#$on} listeners.\n\t *\n\t * The event life cycle starts at the scope on which `$broadcast` was called. All\n\t * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n\t * notified. Afterwards, the event propagates to all direct and indirect scopes of the current\n\t * scope and calls all registered listeners along the way. The event cannot be canceled.\n\t *\n\t * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n\t * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n\t *\n\t * @param {string} name Event name to broadcast.\n\t * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n\t * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}\n\t */\n\t $broadcast: function(name, args) {\n\t var target = this,\n\t current = target,\n\t next = target,\n\t event = {\n\t name: name,\n\t targetScope: target,\n\t preventDefault: function() {\n\t event.defaultPrevented = true;\n\t },\n\t defaultPrevented: false\n\t };\n\t\n\t if (!target.$$listenerCount[name]) return event;\n\t\n\t var listenerArgs = concat([event], arguments, 1),\n\t listeners, i, length;\n\t\n\t //down while you can, then up and next sibling or up and next sibling until back at root\n\t while ((current = next)) {\n\t event.currentScope = current;\n\t listeners = current.$$listeners[name] || [];\n\t for (i = 0, length = listeners.length; i < length; i++) {\n\t // if listeners were deregistered, defragment the array\n\t if (!listeners[i]) {\n\t listeners.splice(i, 1);\n\t i--;\n\t length--;\n\t continue;\n\t }\n\t\n\t try {\n\t listeners[i].apply(null, listenerArgs);\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t }\n\t\n\t // Insanity Warning: scope depth-first traversal\n\t // yes, this code is a bit crazy, but it works and we have tests to prove it!\n\t // this piece should be kept in sync with the traversal in $digest\n\t // (though it differs due to having the extra check for $$listenerCount)\n\t if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||\n\t (current !== target && current.$$nextSibling)))) {\n\t while (current !== target && !(next = current.$$nextSibling)) {\n\t current = current.$parent;\n\t }\n\t }\n\t }\n\t\n\t event.currentScope = null;\n\t return event;\n\t }\n\t };\n\t\n\t var $rootScope = new Scope();\n\t\n\t //The internal queues. Expose them on the $rootScope for debugging/testing purposes.\n\t var asyncQueue = $rootScope.$$asyncQueue = [];\n\t var postDigestQueue = $rootScope.$$postDigestQueue = [];\n\t var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];\n\t\n\t return $rootScope;\n\t\n\t\n\t function beginPhase(phase) {\n\t if ($rootScope.$$phase) {\n\t throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);\n\t }\n\t\n\t $rootScope.$$phase = phase;\n\t }\n\t\n\t function clearPhase() {\n\t $rootScope.$$phase = null;\n\t }\n\t\n\t function incrementWatchersCount(current, count) {\n\t do {\n\t current.$$watchersCount += count;\n\t } while ((current = current.$parent));\n\t }\n\t\n\t function decrementListenerCount(current, count, name) {\n\t do {\n\t current.$$listenerCount[name] -= count;\n\t\n\t if (current.$$listenerCount[name] === 0) {\n\t delete current.$$listenerCount[name];\n\t }\n\t } while ((current = current.$parent));\n\t }\n\t\n\t /**\n\t * function used as an initial value for watchers.\n\t * because it's unique we can easily tell it apart from other values\n\t */\n\t function initWatchVal() {}\n\t\n\t function flushApplyAsync() {\n\t while (applyAsyncQueue.length) {\n\t try {\n\t applyAsyncQueue.shift()();\n\t } catch (e) {\n\t $exceptionHandler(e);\n\t }\n\t }\n\t applyAsyncId = null;\n\t }\n\t\n\t function scheduleApplyAsync() {\n\t if (applyAsyncId === null) {\n\t applyAsyncId = $browser.defer(function() {\n\t $rootScope.$apply(flushApplyAsync);\n\t });\n\t }\n\t }\n\t }];\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $rootElement\n\t *\n\t * @description\n\t * The root element of Angular application. This is either the element where {@link\n\t * ng.directive:ngApp ngApp} was declared or the element passed into\n\t * {@link angular.bootstrap}. The element represents the root element of application. It is also the\n\t * location where the application's {@link auto.$injector $injector} service gets\n\t * published, and can be retrieved using `$rootElement.injector()`.\n\t */\n\t\n\t\n\t// the implementation is in angular.bootstrap\n\t\n\t/**\n\t * @description\n\t * Private service to sanitize uris for links and images. Used by $compile and $sanitize.\n\t */\n\tfunction $$SanitizeUriProvider() {\n\t var aHrefSanitizationWhitelist = /^\\s*(https?|ftp|mailto|tel|file):/,\n\t imgSrcSanitizationWhitelist = /^\\s*((https?|ftp|file|blob):|data:image\\/)/;\n\t\n\t /**\n\t * @description\n\t * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n\t * urls during a[href] sanitization.\n\t *\n\t * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n\t *\n\t * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n\t * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n\t * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n\t * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n\t *\n\t * @param {RegExp=} regexp New regexp to whitelist urls with.\n\t * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n\t * chaining otherwise.\n\t */\n\t this.aHrefSanitizationWhitelist = function(regexp) {\n\t if (isDefined(regexp)) {\n\t aHrefSanitizationWhitelist = regexp;\n\t return this;\n\t }\n\t return aHrefSanitizationWhitelist;\n\t };\n\t\n\t\n\t /**\n\t * @description\n\t * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n\t * urls during img[src] sanitization.\n\t *\n\t * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n\t *\n\t * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n\t * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n\t * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n\t * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n\t *\n\t * @param {RegExp=} regexp New regexp to whitelist urls with.\n\t * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n\t * chaining otherwise.\n\t */\n\t this.imgSrcSanitizationWhitelist = function(regexp) {\n\t if (isDefined(regexp)) {\n\t imgSrcSanitizationWhitelist = regexp;\n\t return this;\n\t }\n\t return imgSrcSanitizationWhitelist;\n\t };\n\t\n\t this.$get = function() {\n\t return function sanitizeUri(uri, isImage) {\n\t var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;\n\t var normalizedVal;\n\t normalizedVal = urlResolve(uri).href;\n\t if (normalizedVal !== '' && !normalizedVal.match(regex)) {\n\t return 'unsafe:' + normalizedVal;\n\t }\n\t return uri;\n\t };\n\t };\n\t}\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Any commits to this file should be reviewed with security in mind. *\n\t * Changes to this file can potentially create security vulnerabilities. *\n\t * An approval from 2 Core members with history of modifying *\n\t * this file is required. *\n\t * *\n\t * Does the change somehow allow for arbitrary javascript to be executed? *\n\t * Or allows for someone to change the prototype of built-in objects? *\n\t * Or gives undesired access to variables likes document or window? *\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\t\n\tvar $sceMinErr = minErr('$sce');\n\t\n\tvar SCE_CONTEXTS = {\n\t HTML: 'html',\n\t CSS: 'css',\n\t URL: 'url',\n\t // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a\n\t // url. (e.g. ng-include, script src, templateUrl)\n\t RESOURCE_URL: 'resourceUrl',\n\t JS: 'js'\n\t};\n\t\n\t// Helper functions follow.\n\t\n\tfunction adjustMatcher(matcher) {\n\t if (matcher === 'self') {\n\t return matcher;\n\t } else if (isString(matcher)) {\n\t // Strings match exactly except for 2 wildcards - '*' and '**'.\n\t // '*' matches any character except those from the set ':/.?&'.\n\t // '**' matches any character (like .* in a RegExp).\n\t // More than 2 *'s raises an error as it's ill defined.\n\t if (matcher.indexOf('***') > -1) {\n\t throw $sceMinErr('iwcard',\n\t 'Illegal sequence *** in string matcher. String: {0}', matcher);\n\t }\n\t matcher = escapeForRegexp(matcher).\n\t replace('\\\\*\\\\*', '.*').\n\t replace('\\\\*', '[^:/.?&;]*');\n\t return new RegExp('^' + matcher + '$');\n\t } else if (isRegExp(matcher)) {\n\t // The only other type of matcher allowed is a Regexp.\n\t // Match entire URL / disallow partial matches.\n\t // Flags are reset (i.e. no global, ignoreCase or multiline)\n\t return new RegExp('^' + matcher.source + '$');\n\t } else {\n\t throw $sceMinErr('imatcher',\n\t 'Matchers may only be \"self\", string patterns or RegExp objects');\n\t }\n\t}\n\t\n\t\n\tfunction adjustMatchers(matchers) {\n\t var adjustedMatchers = [];\n\t if (isDefined(matchers)) {\n\t forEach(matchers, function(matcher) {\n\t adjustedMatchers.push(adjustMatcher(matcher));\n\t });\n\t }\n\t return adjustedMatchers;\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $sceDelegate\n\t * @kind function\n\t *\n\t * @description\n\t *\n\t * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict\n\t * Contextual Escaping (SCE)} services to AngularJS.\n\t *\n\t * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of\n\t * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is\n\t * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to\n\t * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things\n\t * work because `$sce` delegates to `$sceDelegate` for these operations.\n\t *\n\t * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.\n\t *\n\t * The default instance of `$sceDelegate` should work out of the box with little pain. While you\n\t * can override it completely to change the behavior of `$sce`, the common case would\n\t * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting\n\t * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as\n\t * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist\n\t * $sceDelegateProvider.resourceUrlWhitelist} and {@link\n\t * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n\t */\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $sceDelegateProvider\n\t * @description\n\t *\n\t * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate\n\t * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure\n\t * that the URLs used for sourcing Angular templates are safe. Refer {@link\n\t * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and\n\t * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n\t *\n\t * For the general details about this service in Angular, read the main page for {@link ng.$sce\n\t * Strict Contextual Escaping (SCE)}.\n\t *\n\t * **Example**: Consider the following case. \n\t *\n\t * - your app is hosted at url `http://myapp.example.com/`\n\t * - but some of your templates are hosted on other domains you control such as\n\t * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.\n\t * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.\n\t *\n\t * Here is what a secure configuration for this scenario might look like:\n\t *\n\t * ```\n\t * angular.module('myApp', []).config(function($sceDelegateProvider) {\n\t * $sceDelegateProvider.resourceUrlWhitelist([\n\t * // Allow same origin resource loads.\n\t * 'self',\n\t * // Allow loading from our assets domain. Notice the difference between * and **.\n\t * 'http://srv*.assets.example.com/**'\n\t * ]);\n\t *\n\t * // The blacklist overrides the whitelist so the open redirect here is blocked.\n\t * $sceDelegateProvider.resourceUrlBlacklist([\n\t * 'http://myapp.example.com/clickThru**'\n\t * ]);\n\t * });\n\t * ```\n\t */\n\t\n\tfunction $SceDelegateProvider() {\n\t this.SCE_CONTEXTS = SCE_CONTEXTS;\n\t\n\t // Resource URLs can also be trusted by policy.\n\t var resourceUrlWhitelist = ['self'],\n\t resourceUrlBlacklist = [];\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sceDelegateProvider#resourceUrlWhitelist\n\t * @kind function\n\t *\n\t * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value\n\t * provided. This must be an array or null. A snapshot of this array is used so further\n\t * changes to the array are ignored.\n\t *\n\t * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n\t * allowed in this array.\n\t *\n\t *
    \n\t * **Note:** an empty whitelist array will block all URLs!\n\t *
    \n\t *\n\t * @return {Array} the currently set whitelist array.\n\t *\n\t * The **default value** when no whitelist has been explicitly set is `['self']` allowing only\n\t * same origin resource requests.\n\t *\n\t * @description\n\t * Sets/Gets the whitelist of trusted resource URLs.\n\t */\n\t this.resourceUrlWhitelist = function(value) {\n\t if (arguments.length) {\n\t resourceUrlWhitelist = adjustMatchers(value);\n\t }\n\t return resourceUrlWhitelist;\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sceDelegateProvider#resourceUrlBlacklist\n\t * @kind function\n\t *\n\t * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value\n\t * provided. This must be an array or null. A snapshot of this array is used so further\n\t * changes to the array are ignored.\n\t *\n\t * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n\t * allowed in this array.\n\t *\n\t * The typical usage for the blacklist is to **block\n\t * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as\n\t * these would otherwise be trusted but actually return content from the redirected domain.\n\t *\n\t * Finally, **the blacklist overrides the whitelist** and has the final say.\n\t *\n\t * @return {Array} the currently set blacklist array.\n\t *\n\t * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there\n\t * is no blacklist.)\n\t *\n\t * @description\n\t * Sets/Gets the blacklist of trusted resource URLs.\n\t */\n\t\n\t this.resourceUrlBlacklist = function(value) {\n\t if (arguments.length) {\n\t resourceUrlBlacklist = adjustMatchers(value);\n\t }\n\t return resourceUrlBlacklist;\n\t };\n\t\n\t this.$get = ['$injector', function($injector) {\n\t\n\t var htmlSanitizer = function htmlSanitizer(html) {\n\t throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n\t };\n\t\n\t if ($injector.has('$sanitize')) {\n\t htmlSanitizer = $injector.get('$sanitize');\n\t }\n\t\n\t\n\t function matchUrl(matcher, parsedUrl) {\n\t if (matcher === 'self') {\n\t return urlIsSameOrigin(parsedUrl);\n\t } else {\n\t // definitely a regex. See adjustMatchers()\n\t return !!matcher.exec(parsedUrl.href);\n\t }\n\t }\n\t\n\t function isResourceUrlAllowedByPolicy(url) {\n\t var parsedUrl = urlResolve(url.toString());\n\t var i, n, allowed = false;\n\t // Ensure that at least one item from the whitelist allows this url.\n\t for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {\n\t if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {\n\t allowed = true;\n\t break;\n\t }\n\t }\n\t if (allowed) {\n\t // Ensure that no item from the blacklist blocked this url.\n\t for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {\n\t if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {\n\t allowed = false;\n\t break;\n\t }\n\t }\n\t }\n\t return allowed;\n\t }\n\t\n\t function generateHolderType(Base) {\n\t var holderType = function TrustedValueHolderType(trustedValue) {\n\t this.$$unwrapTrustedValue = function() {\n\t return trustedValue;\n\t };\n\t };\n\t if (Base) {\n\t holderType.prototype = new Base();\n\t }\n\t holderType.prototype.valueOf = function sceValueOf() {\n\t return this.$$unwrapTrustedValue();\n\t };\n\t holderType.prototype.toString = function sceToString() {\n\t return this.$$unwrapTrustedValue().toString();\n\t };\n\t return holderType;\n\t }\n\t\n\t var trustedValueHolderBase = generateHolderType(),\n\t byType = {};\n\t\n\t byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);\n\t byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);\n\t byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);\n\t byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);\n\t byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sceDelegate#trustAs\n\t *\n\t * @description\n\t * Returns an object that is trusted by angular for use in specified strict\n\t * contextual escaping contexts (such as ng-bind-html, ng-include, any src\n\t * attribute interpolation, any dom event binding attribute interpolation\n\t * such as for onclick, etc.) that uses the provided value.\n\t * See {@link ng.$sce $sce} for enabling strict contextual escaping.\n\t *\n\t * @param {string} type The kind of context in which this value is safe for use. e.g. url,\n\t * resourceUrl, html, js and css.\n\t * @param {*} value The value that that should be considered trusted/safe.\n\t * @returns {*} A value that can be used to stand in for the provided `value` in places\n\t * where Angular expects a $sce.trustAs() return value.\n\t */\n\t function trustAs(type, trustedValue) {\n\t var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n\t if (!Constructor) {\n\t throw $sceMinErr('icontext',\n\t 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',\n\t type, trustedValue);\n\t }\n\t if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') {\n\t return trustedValue;\n\t }\n\t // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting\n\t // mutable objects, we ensure here that the value passed in is actually a string.\n\t if (typeof trustedValue !== 'string') {\n\t throw $sceMinErr('itype',\n\t 'Attempted to trust a non-string value in a content requiring a string: Context: {0}',\n\t type);\n\t }\n\t return new Constructor(trustedValue);\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sceDelegate#valueOf\n\t *\n\t * @description\n\t * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs\n\t * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link\n\t * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.\n\t *\n\t * If the passed parameter is not a value that had been returned by {@link\n\t * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.\n\t *\n\t * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}\n\t * call or anything else.\n\t * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs\n\t * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns\n\t * `value` unchanged.\n\t */\n\t function valueOf(maybeTrusted) {\n\t if (maybeTrusted instanceof trustedValueHolderBase) {\n\t return maybeTrusted.$$unwrapTrustedValue();\n\t } else {\n\t return maybeTrusted;\n\t }\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sceDelegate#getTrusted\n\t *\n\t * @description\n\t * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and\n\t * returns the originally supplied value if the queried context type is a supertype of the\n\t * created type. If this condition isn't satisfied, throws an exception.\n\t *\n\t *
    \n\t * Disabling auto-escaping is extremely dangerous, it usually creates a Cross Site Scripting\n\t * (XSS) vulnerability in your application.\n\t *
    \n\t *\n\t * @param {string} type The kind of context in which this value is to be used.\n\t * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs\n\t * `$sceDelegate.trustAs`} call.\n\t * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs\n\t * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception.\n\t */\n\t function getTrusted(type, maybeTrusted) {\n\t if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') {\n\t return maybeTrusted;\n\t }\n\t var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n\t if (constructor && maybeTrusted instanceof constructor) {\n\t return maybeTrusted.$$unwrapTrustedValue();\n\t }\n\t // If we get here, then we may only take one of two actions.\n\t // 1. sanitize the value for the requested type, or\n\t // 2. throw an exception.\n\t if (type === SCE_CONTEXTS.RESOURCE_URL) {\n\t if (isResourceUrlAllowedByPolicy(maybeTrusted)) {\n\t return maybeTrusted;\n\t } else {\n\t throw $sceMinErr('insecurl',\n\t 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}',\n\t maybeTrusted.toString());\n\t }\n\t } else if (type === SCE_CONTEXTS.HTML) {\n\t return htmlSanitizer(maybeTrusted);\n\t }\n\t throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n\t }\n\t\n\t return { trustAs: trustAs,\n\t getTrusted: getTrusted,\n\t valueOf: valueOf };\n\t }];\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $sceProvider\n\t * @description\n\t *\n\t * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.\n\t * - enable/disable Strict Contextual Escaping (SCE) in a module\n\t * - override the default implementation with a custom delegate\n\t *\n\t * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.\n\t */\n\t\n\t/* jshint maxlen: false*/\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $sce\n\t * @kind function\n\t *\n\t * @description\n\t *\n\t * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.\n\t *\n\t * # Strict Contextual Escaping\n\t *\n\t * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain\n\t * contexts to result in a value that is marked as safe to use for that context. One example of\n\t * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer\n\t * to these contexts as privileged or SCE contexts.\n\t *\n\t * As of version 1.2, Angular ships with SCE enabled by default.\n\t *\n\t * Note: When enabled (the default), IE<11 in quirks mode is not supported. In this mode, IE<11 allow\n\t * one to execute arbitrary javascript by the use of the expression() syntax. Refer\n\t * to learn more about them.\n\t * You can ensure your document is in standards mode and not quirks mode by adding ``\n\t * to the top of your HTML document.\n\t *\n\t * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for\n\t * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.\n\t *\n\t * Here's an example of a binding in a privileged context:\n\t *\n\t * ```\n\t * \n\t *
    \n\t * ```\n\t *\n\t * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE\n\t * disabled, this application allows the user to render arbitrary HTML into the DIV.\n\t * In a more realistic example, one may be rendering user comments, blog articles, etc. via\n\t * bindings. (HTML is just one example of a context where rendering user controlled input creates\n\t * security vulnerabilities.)\n\t *\n\t * For the case of HTML, you might use a library, either on the client side, or on the server side,\n\t * to sanitize unsafe HTML before binding to the value and rendering it in the document.\n\t *\n\t * How would you ensure that every place that used these types of bindings was bound to a value that\n\t * was sanitized by your library (or returned as safe for rendering by your server?) How can you\n\t * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some\n\t * properties/fields and forgot to update the binding to the sanitized value?\n\t *\n\t * To be secure by default, you want to ensure that any such bindings are disallowed unless you can\n\t * determine that something explicitly says it's safe to use a value for binding in that\n\t * context. You can then audit your code (a simple grep would do) to ensure that this is only done\n\t * for those values that you can easily tell are safe - because they were received from your server,\n\t * sanitized by your library, etc. You can organize your codebase to help with this - perhaps\n\t * allowing only the files in a specific directory to do this. Ensuring that the internal API\n\t * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.\n\t *\n\t * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}\n\t * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to\n\t * obtain values that will be accepted by SCE / privileged contexts.\n\t *\n\t *\n\t * ## How does it work?\n\t *\n\t * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted\n\t * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link\n\t * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the\n\t * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.\n\t *\n\t * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link\n\t * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly\n\t * simplified):\n\t *\n\t * ```\n\t * var ngBindHtmlDirective = ['$sce', function($sce) {\n\t * return function(scope, element, attr) {\n\t * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {\n\t * element.html(value || '');\n\t * });\n\t * };\n\t * }];\n\t * ```\n\t *\n\t * ## Impact on loading templates\n\t *\n\t * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as\n\t * `templateUrl`'s specified by {@link guide/directive directives}.\n\t *\n\t * By default, Angular only loads templates from the same domain and protocol as the application\n\t * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl\n\t * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or\n\t * protocols, you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist\n\t * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.\n\t *\n\t * *Please note*:\n\t * The browser's\n\t * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n\t * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n\t * policy apply in addition to this and may further restrict whether the template is successfully\n\t * loaded. This means that without the right CORS policy, loading templates from a different domain\n\t * won't work on all browsers. Also, loading templates from `file://` URL does not work on some\n\t * browsers.\n\t *\n\t * ## This feels like too much overhead\n\t *\n\t * It's important to remember that SCE only applies to interpolation expressions.\n\t *\n\t * If your expressions are constant literals, they're automatically trusted and you don't need to\n\t * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.\n\t * `
    implicitly trusted'\">
    `) just works.\n\t *\n\t * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them\n\t * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here.\n\t *\n\t * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load\n\t * templates in `ng-include` from your application's domain without having to even know about SCE.\n\t * It blocks loading templates from other domains or loading templates over http from an https\n\t * served document. You can change these by setting your own custom {@link\n\t * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link\n\t * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.\n\t *\n\t * This significantly reduces the overhead. It is far easier to pay the small overhead and have an\n\t * application that's secure and can be audited to verify that with much more ease than bolting\n\t * security onto an application later.\n\t *\n\t * \n\t * ## What trusted context types are supported?\n\t *\n\t * | Context | Notes |\n\t * |---------------------|----------------|\n\t * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |\n\t * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |\n\t * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`
    Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |\n\t * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. |\n\t *\n\t * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist}
    \n\t *\n\t * Each element in these arrays must be one of the following:\n\t *\n\t * - **'self'**\n\t * - The special **string**, `'self'`, can be used to match against all URLs of the **same\n\t * domain** as the application document using the **same protocol**.\n\t * - **String** (except the special value `'self'`)\n\t * - The string is matched against the full *normalized / absolute URL* of the resource\n\t * being tested (substring matches are not good enough.)\n\t * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters\n\t * match themselves.\n\t * - `*`: matches zero or more occurrences of any character other than one of the following 6\n\t * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'. It's a useful wildcard for use\n\t * in a whitelist.\n\t * - `**`: matches zero or more occurrences of *any* character. As such, it's not\n\t * appropriate for use in a scheme, domain, etc. as it would match too much. (e.g.\n\t * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might\n\t * not have been the intention.) Its usage at the very end of the path is ok. (e.g.\n\t * http://foo.example.com/templates/**).\n\t * - **RegExp** (*see caveat below*)\n\t * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax\n\t * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to\n\t * accidentally introduce a bug when one updates a complex expression (imho, all regexes should\n\t * have good test coverage). For instance, the use of `.` in the regex is correct only in a\n\t * small number of cases. A `.` character in the regex used when matching the scheme or a\n\t * subdomain could be matched against a `:` or literal `.` that was likely not intended. It\n\t * is highly recommended to use the string patterns and only fall back to regular expressions\n\t * as a last resort.\n\t * - The regular expression must be an instance of RegExp (i.e. not a string.) It is\n\t * matched against the **entire** *normalized / absolute URL* of the resource being tested\n\t * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags\n\t * present on the RegExp (such as multiline, global, ignoreCase) are ignored.\n\t * - If you are generating your JavaScript from some other templating engine (not\n\t * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),\n\t * remember to escape your regular expression (and be aware that you might need more than\n\t * one level of escaping depending on your templating engine and the way you interpolated\n\t * the value.) Do make use of your platform's escaping mechanism as it might be good\n\t * enough before coding your own. E.g. Ruby has\n\t * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)\n\t * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).\n\t * Javascript lacks a similar built in function for escaping. Take a look at Google\n\t * Closure library's [goog.string.regExpEscape(s)](\n\t * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).\n\t *\n\t * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.\n\t *\n\t * ## Show me an example using SCE.\n\t *\n\t * \n\t * \n\t *
    \n\t *

    \n\t * User comments
    \n\t * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when\n\t * $sanitize is available. If $sanitize isn't available, this results in an error instead of an\n\t * exploit.\n\t *
    \n\t *
    \n\t * {{userComment.name}}:\n\t * \n\t *
    \n\t *
    \n\t *
    \n\t *
    \n\t *
    \n\t *\n\t * \n\t * angular.module('mySceApp', ['ngSanitize'])\n\t * .controller('AppController', ['$http', '$templateCache', '$sce',\n\t * function($http, $templateCache, $sce) {\n\t * var self = this;\n\t * $http.get(\"test_data.json\", {cache: $templateCache}).success(function(userComments) {\n\t * self.userComments = userComments;\n\t * });\n\t * self.explicitlyTrustedHtml = $sce.trustAsHtml(\n\t * 'Hover over this text.');\n\t * }]);\n\t * \n\t *\n\t * \n\t * [\n\t * { \"name\": \"Alice\",\n\t * \"htmlComment\":\n\t * \"Is anyone reading this?\"\n\t * },\n\t * { \"name\": \"Bob\",\n\t * \"htmlComment\": \"Yes! Am I the only other one?\"\n\t * }\n\t * ]\n\t * \n\t *\n\t * \n\t * describe('SCE doc demo', function() {\n\t * it('should sanitize untrusted values', function() {\n\t * expect(element.all(by.css('.htmlComment')).first().getInnerHtml())\n\t * .toBe('Is anyone reading this?');\n\t * });\n\t *\n\t * it('should NOT sanitize explicitly trusted values', function() {\n\t * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(\n\t * 'Hover over this text.');\n\t * });\n\t * });\n\t * \n\t *
    \n\t *\n\t *\n\t *\n\t * ## Can I disable SCE completely?\n\t *\n\t * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits\n\t * for little coding overhead. It will be much harder to take an SCE disabled application and\n\t * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE\n\t * for cases where you have a lot of existing code that was written before SCE was introduced and\n\t * you're migrating them a module at a time.\n\t *\n\t * That said, here's how you can completely disable SCE:\n\t *\n\t * ```\n\t * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {\n\t * // Completely disable SCE. For demonstration purposes only!\n\t * // Do not use in new projects.\n\t * $sceProvider.enabled(false);\n\t * });\n\t * ```\n\t *\n\t */\n\t/* jshint maxlen: 100 */\n\t\n\tfunction $SceProvider() {\n\t var enabled = true;\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sceProvider#enabled\n\t * @kind function\n\t *\n\t * @param {boolean=} value If provided, then enables/disables SCE.\n\t * @return {boolean} true if SCE is enabled, false otherwise.\n\t *\n\t * @description\n\t * Enables/disables SCE and returns the current value.\n\t */\n\t this.enabled = function(value) {\n\t if (arguments.length) {\n\t enabled = !!value;\n\t }\n\t return enabled;\n\t };\n\t\n\t\n\t /* Design notes on the default implementation for SCE.\n\t *\n\t * The API contract for the SCE delegate\n\t * -------------------------------------\n\t * The SCE delegate object must provide the following 3 methods:\n\t *\n\t * - trustAs(contextEnum, value)\n\t * This method is used to tell the SCE service that the provided value is OK to use in the\n\t * contexts specified by contextEnum. It must return an object that will be accepted by\n\t * getTrusted() for a compatible contextEnum and return this value.\n\t *\n\t * - valueOf(value)\n\t * For values that were not produced by trustAs(), return them as is. For values that were\n\t * produced by trustAs(), return the corresponding input value to trustAs. Basically, if\n\t * trustAs is wrapping the given values into some type, this operation unwraps it when given\n\t * such a value.\n\t *\n\t * - getTrusted(contextEnum, value)\n\t * This function should return the a value that is safe to use in the context specified by\n\t * contextEnum or throw and exception otherwise.\n\t *\n\t * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be\n\t * opaque or wrapped in some holder object. That happens to be an implementation detail. For\n\t * instance, an implementation could maintain a registry of all trusted objects by context. In\n\t * such a case, trustAs() would return the same object that was passed in. getTrusted() would\n\t * return the same object passed in if it was found in the registry under a compatible context or\n\t * throw an exception otherwise. An implementation might only wrap values some of the time based\n\t * on some criteria. getTrusted() might return a value and not throw an exception for special\n\t * constants or objects even if not wrapped. All such implementations fulfill this contract.\n\t *\n\t *\n\t * A note on the inheritance model for SCE contexts\n\t * ------------------------------------------------\n\t * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This\n\t * is purely an implementation details.\n\t *\n\t * The contract is simply this:\n\t *\n\t * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)\n\t * will also succeed.\n\t *\n\t * Inheritance happens to capture this in a natural way. In some future, we\n\t * may not use inheritance anymore. That is OK because no code outside of\n\t * sce.js and sceSpecs.js would need to be aware of this detail.\n\t */\n\t\n\t this.$get = ['$parse', '$sceDelegate', function(\n\t $parse, $sceDelegate) {\n\t // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow\n\t // the \"expression(javascript expression)\" syntax which is insecure.\n\t if (enabled && msie < 8) {\n\t throw $sceMinErr('iequirks',\n\t 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +\n\t 'mode. You can fix this by adding the text to the top of your HTML ' +\n\t 'document. See http://docs.angularjs.org/api/ng.$sce for more information.');\n\t }\n\t\n\t var sce = shallowCopy(SCE_CONTEXTS);\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#isEnabled\n\t * @kind function\n\t *\n\t * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you\n\t * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.\n\t *\n\t * @description\n\t * Returns a boolean indicating if SCE is enabled.\n\t */\n\t sce.isEnabled = function() {\n\t return enabled;\n\t };\n\t sce.trustAs = $sceDelegate.trustAs;\n\t sce.getTrusted = $sceDelegate.getTrusted;\n\t sce.valueOf = $sceDelegate.valueOf;\n\t\n\t if (!enabled) {\n\t sce.trustAs = sce.getTrusted = function(type, value) { return value; };\n\t sce.valueOf = identity;\n\t }\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#parseAs\n\t *\n\t * @description\n\t * Converts Angular {@link guide/expression expression} into a function. This is like {@link\n\t * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it\n\t * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,\n\t * *result*)}\n\t *\n\t * @param {string} type The kind of SCE context in which this result will be used.\n\t * @param {string} expression String expression to compile.\n\t * @returns {function(context, locals)} a function which represents the compiled expression:\n\t *\n\t * * `context` – `{object}` – an object against which any expressions embedded in the strings\n\t * are evaluated against (typically a scope object).\n\t * * `locals` – `{object=}` – local variables context object, useful for overriding values in\n\t * `context`.\n\t */\n\t sce.parseAs = function sceParseAs(type, expr) {\n\t var parsed = $parse(expr);\n\t if (parsed.literal && parsed.constant) {\n\t return parsed;\n\t } else {\n\t return $parse(expr, function(value) {\n\t return sce.getTrusted(type, value);\n\t });\n\t }\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#trustAs\n\t *\n\t * @description\n\t * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such,\n\t * returns an object that is trusted by angular for use in specified strict contextual\n\t * escaping contexts (such as ng-bind-html, ng-include, any src attribute\n\t * interpolation, any dom event binding attribute interpolation such as for onclick, etc.)\n\t * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual\n\t * escaping.\n\t *\n\t * @param {string} type The kind of context in which this value is safe for use. e.g. url,\n\t * resourceUrl, html, js and css.\n\t * @param {*} value The value that that should be considered trusted/safe.\n\t * @returns {*} A value that can be used to stand in for the provided `value` in places\n\t * where Angular expects a $sce.trustAs() return value.\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#trustAsHtml\n\t *\n\t * @description\n\t * Shorthand method. `$sce.trustAsHtml(value)` →\n\t * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}\n\t *\n\t * @param {*} value The value to trustAs.\n\t * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml\n\t * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives\n\t * only accept expressions that are either literal constants or are the\n\t * return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#trustAsUrl\n\t *\n\t * @description\n\t * Shorthand method. `$sce.trustAsUrl(value)` →\n\t * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}\n\t *\n\t * @param {*} value The value to trustAs.\n\t * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl\n\t * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives\n\t * only accept expressions that are either literal constants or are the\n\t * return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#trustAsResourceUrl\n\t *\n\t * @description\n\t * Shorthand method. `$sce.trustAsResourceUrl(value)` →\n\t * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}\n\t *\n\t * @param {*} value The value to trustAs.\n\t * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl\n\t * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives\n\t * only accept expressions that are either literal constants or are the return\n\t * value of {@link ng.$sce#trustAs $sce.trustAs}.)\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#trustAsJs\n\t *\n\t * @description\n\t * Shorthand method. `$sce.trustAsJs(value)` →\n\t * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}\n\t *\n\t * @param {*} value The value to trustAs.\n\t * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs\n\t * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives\n\t * only accept expressions that are either literal constants or are the\n\t * return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#getTrusted\n\t *\n\t * @description\n\t * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such,\n\t * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the\n\t * originally supplied value if the queried context type is a supertype of the created type.\n\t * If this condition isn't satisfied, throws an exception.\n\t *\n\t * @param {string} type The kind of context in which this value is to be used.\n\t * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}\n\t * call.\n\t * @returns {*} The value the was originally provided to\n\t * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.\n\t * Otherwise, throws an exception.\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#getTrustedHtml\n\t *\n\t * @description\n\t * Shorthand method. `$sce.getTrustedHtml(value)` →\n\t * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}\n\t *\n\t * @param {*} value The value to pass to `$sce.getTrusted`.\n\t * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#getTrustedCss\n\t *\n\t * @description\n\t * Shorthand method. `$sce.getTrustedCss(value)` →\n\t * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}\n\t *\n\t * @param {*} value The value to pass to `$sce.getTrusted`.\n\t * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#getTrustedUrl\n\t *\n\t * @description\n\t * Shorthand method. `$sce.getTrustedUrl(value)` →\n\t * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}\n\t *\n\t * @param {*} value The value to pass to `$sce.getTrusted`.\n\t * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#getTrustedResourceUrl\n\t *\n\t * @description\n\t * Shorthand method. `$sce.getTrustedResourceUrl(value)` →\n\t * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}\n\t *\n\t * @param {*} value The value to pass to `$sceDelegate.getTrusted`.\n\t * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#getTrustedJs\n\t *\n\t * @description\n\t * Shorthand method. `$sce.getTrustedJs(value)` →\n\t * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}\n\t *\n\t * @param {*} value The value to pass to `$sce.getTrusted`.\n\t * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#parseAsHtml\n\t *\n\t * @description\n\t * Shorthand method. `$sce.parseAsHtml(expression string)` →\n\t * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}\n\t *\n\t * @param {string} expression String expression to compile.\n\t * @returns {function(context, locals)} a function which represents the compiled expression:\n\t *\n\t * * `context` – `{object}` – an object against which any expressions embedded in the strings\n\t * are evaluated against (typically a scope object).\n\t * * `locals` – `{object=}` – local variables context object, useful for overriding values in\n\t * `context`.\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#parseAsCss\n\t *\n\t * @description\n\t * Shorthand method. `$sce.parseAsCss(value)` →\n\t * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}\n\t *\n\t * @param {string} expression String expression to compile.\n\t * @returns {function(context, locals)} a function which represents the compiled expression:\n\t *\n\t * * `context` – `{object}` – an object against which any expressions embedded in the strings\n\t * are evaluated against (typically a scope object).\n\t * * `locals` – `{object=}` – local variables context object, useful for overriding values in\n\t * `context`.\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#parseAsUrl\n\t *\n\t * @description\n\t * Shorthand method. `$sce.parseAsUrl(value)` →\n\t * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}\n\t *\n\t * @param {string} expression String expression to compile.\n\t * @returns {function(context, locals)} a function which represents the compiled expression:\n\t *\n\t * * `context` – `{object}` – an object against which any expressions embedded in the strings\n\t * are evaluated against (typically a scope object).\n\t * * `locals` – `{object=}` – local variables context object, useful for overriding values in\n\t * `context`.\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#parseAsResourceUrl\n\t *\n\t * @description\n\t * Shorthand method. `$sce.parseAsResourceUrl(value)` →\n\t * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}\n\t *\n\t * @param {string} expression String expression to compile.\n\t * @returns {function(context, locals)} a function which represents the compiled expression:\n\t *\n\t * * `context` – `{object}` – an object against which any expressions embedded in the strings\n\t * are evaluated against (typically a scope object).\n\t * * `locals` – `{object=}` – local variables context object, useful for overriding values in\n\t * `context`.\n\t */\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $sce#parseAsJs\n\t *\n\t * @description\n\t * Shorthand method. `$sce.parseAsJs(value)` →\n\t * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}\n\t *\n\t * @param {string} expression String expression to compile.\n\t * @returns {function(context, locals)} a function which represents the compiled expression:\n\t *\n\t * * `context` – `{object}` – an object against which any expressions embedded in the strings\n\t * are evaluated against (typically a scope object).\n\t * * `locals` – `{object=}` – local variables context object, useful for overriding values in\n\t * `context`.\n\t */\n\t\n\t // Shorthand delegations.\n\t var parse = sce.parseAs,\n\t getTrusted = sce.getTrusted,\n\t trustAs = sce.trustAs;\n\t\n\t forEach(SCE_CONTEXTS, function(enumValue, name) {\n\t var lName = lowercase(name);\n\t sce[camelCase(\"parse_as_\" + lName)] = function(expr) {\n\t return parse(enumValue, expr);\n\t };\n\t sce[camelCase(\"get_trusted_\" + lName)] = function(value) {\n\t return getTrusted(enumValue, value);\n\t };\n\t sce[camelCase(\"trust_as_\" + lName)] = function(value) {\n\t return trustAs(enumValue, value);\n\t };\n\t });\n\t\n\t return sce;\n\t }];\n\t}\n\t\n\t/**\n\t * !!! This is an undocumented \"private\" service !!!\n\t *\n\t * @name $sniffer\n\t * @requires $window\n\t * @requires $document\n\t *\n\t * @property {boolean} history Does the browser support html5 history api ?\n\t * @property {boolean} transitions Does the browser support CSS transition events ?\n\t * @property {boolean} animations Does the browser support CSS animation events ?\n\t *\n\t * @description\n\t * This is very simple implementation of testing browser's features.\n\t */\n\tfunction $SnifferProvider() {\n\t this.$get = ['$window', '$document', function($window, $document) {\n\t var eventSupport = {},\n\t android =\n\t toInt((/android (\\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),\n\t boxee = /Boxee/i.test(($window.navigator || {}).userAgent),\n\t document = $document[0] || {},\n\t vendorPrefix,\n\t vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,\n\t bodyStyle = document.body && document.body.style,\n\t transitions = false,\n\t animations = false,\n\t match;\n\t\n\t if (bodyStyle) {\n\t for (var prop in bodyStyle) {\n\t if (match = vendorRegex.exec(prop)) {\n\t vendorPrefix = match[0];\n\t vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);\n\t break;\n\t }\n\t }\n\t\n\t if (!vendorPrefix) {\n\t vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';\n\t }\n\t\n\t transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));\n\t animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));\n\t\n\t if (android && (!transitions || !animations)) {\n\t transitions = isString(bodyStyle.webkitTransition);\n\t animations = isString(bodyStyle.webkitAnimation);\n\t }\n\t }\n\t\n\t\n\t return {\n\t // Android has history.pushState, but it does not update location correctly\n\t // so let's not use the history API at all.\n\t // http://code.google.com/p/android/issues/detail?id=17471\n\t // https://github.com/angular/angular.js/issues/904\n\t\n\t // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has\n\t // so let's not use the history API also\n\t // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined\n\t // jshint -W018\n\t history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),\n\t // jshint +W018\n\t hasEvent: function(event) {\n\t // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have\n\t // it. In particular the event is not fired when backspace or delete key are pressed or\n\t // when cut operation is performed.\n\t // IE10+ implements 'input' event but it erroneously fires under various situations,\n\t // e.g. when placeholder changes, or a form is focused.\n\t if (event === 'input' && msie <= 11) return false;\n\t\n\t if (isUndefined(eventSupport[event])) {\n\t var divElm = document.createElement('div');\n\t eventSupport[event] = 'on' + event in divElm;\n\t }\n\t\n\t return eventSupport[event];\n\t },\n\t csp: csp(),\n\t vendorPrefix: vendorPrefix,\n\t transitions: transitions,\n\t animations: animations,\n\t android: android\n\t };\n\t }];\n\t}\n\t\n\tvar $compileMinErr = minErr('$compile');\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $templateRequestProvider\n\t * @description\n\t * Used to configure the options passed to the {@link $http} service when making a template request.\n\t *\n\t * For example, it can be used for specifying the \"Accept\" header that is sent to the server, when\n\t * requesting a template.\n\t */\n\tfunction $TemplateRequestProvider() {\n\t\n\t var httpOptions;\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $templateRequestProvider#httpOptions\n\t * @description\n\t * The options to be passed to the {@link $http} service when making the request.\n\t * You can use this to override options such as the \"Accept\" header for template requests.\n\t *\n\t * The {@link $templateRequest} will set the `cache` and the `transformResponse` properties of the\n\t * options if not overridden here.\n\t *\n\t * @param {string=} value new value for the {@link $http} options.\n\t * @returns {string|self} Returns the {@link $http} options when used as getter and self if used as setter.\n\t */\n\t this.httpOptions = function(val) {\n\t if (val) {\n\t httpOptions = val;\n\t return this;\n\t }\n\t return httpOptions;\n\t };\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $templateRequest\n\t *\n\t * @description\n\t * The `$templateRequest` service runs security checks then downloads the provided template using\n\t * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request\n\t * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the\n\t * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the\n\t * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted\n\t * when `tpl` is of type string and `$templateCache` has the matching entry.\n\t *\n\t * If you want to pass custom options to the `$http` service, such as setting the Accept header you\n\t * can configure this via {@link $templateRequestProvider#httpOptions}.\n\t *\n\t * @param {string|TrustedResourceUrl} tpl The HTTP request template URL\n\t * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty\n\t *\n\t * @return {Promise} a promise for the HTTP response data of the given URL.\n\t *\n\t * @property {number} totalPendingRequests total amount of pending template requests being downloaded.\n\t */\n\t this.$get = ['$templateCache', '$http', '$q', '$sce', function($templateCache, $http, $q, $sce) {\n\t\n\t function handleRequestFn(tpl, ignoreRequestError) {\n\t handleRequestFn.totalPendingRequests++;\n\t\n\t // We consider the template cache holds only trusted templates, so\n\t // there's no need to go through whitelisting again for keys that already\n\t // are included in there. This also makes Angular accept any script\n\t // directive, no matter its name. However, we still need to unwrap trusted\n\t // types.\n\t if (!isString(tpl) || !$templateCache.get(tpl)) {\n\t tpl = $sce.getTrustedResourceUrl(tpl);\n\t }\n\t\n\t var transformResponse = $http.defaults && $http.defaults.transformResponse;\n\t\n\t if (isArray(transformResponse)) {\n\t transformResponse = transformResponse.filter(function(transformer) {\n\t return transformer !== defaultHttpResponseTransform;\n\t });\n\t } else if (transformResponse === defaultHttpResponseTransform) {\n\t transformResponse = null;\n\t }\n\t\n\t return $http.get(tpl, extend({\n\t cache: $templateCache,\n\t transformResponse: transformResponse\n\t }, httpOptions))\n\t ['finally'](function() {\n\t handleRequestFn.totalPendingRequests--;\n\t })\n\t .then(function(response) {\n\t $templateCache.put(tpl, response.data);\n\t return response.data;\n\t }, handleError);\n\t\n\t function handleError(resp) {\n\t if (!ignoreRequestError) {\n\t throw $compileMinErr('tpload', 'Failed to load template: {0} (HTTP status: {1} {2})',\n\t tpl, resp.status, resp.statusText);\n\t }\n\t return $q.reject(resp);\n\t }\n\t }\n\t\n\t handleRequestFn.totalPendingRequests = 0;\n\t\n\t return handleRequestFn;\n\t }];\n\t}\n\t\n\tfunction $$TestabilityProvider() {\n\t this.$get = ['$rootScope', '$browser', '$location',\n\t function($rootScope, $browser, $location) {\n\t\n\t /**\n\t * @name $testability\n\t *\n\t * @description\n\t * The private $$testability service provides a collection of methods for use when debugging\n\t * or by automated test and debugging tools.\n\t */\n\t var testability = {};\n\t\n\t /**\n\t * @name $$testability#findBindings\n\t *\n\t * @description\n\t * Returns an array of elements that are bound (via ng-bind or {{}})\n\t * to expressions matching the input.\n\t *\n\t * @param {Element} element The element root to search from.\n\t * @param {string} expression The binding expression to match.\n\t * @param {boolean} opt_exactMatch If true, only returns exact matches\n\t * for the expression. Filters and whitespace are ignored.\n\t */\n\t testability.findBindings = function(element, expression, opt_exactMatch) {\n\t var bindings = element.getElementsByClassName('ng-binding');\n\t var matches = [];\n\t forEach(bindings, function(binding) {\n\t var dataBinding = angular.element(binding).data('$binding');\n\t if (dataBinding) {\n\t forEach(dataBinding, function(bindingName) {\n\t if (opt_exactMatch) {\n\t var matcher = new RegExp('(^|\\\\s)' + escapeForRegexp(expression) + '(\\\\s|\\\\||$)');\n\t if (matcher.test(bindingName)) {\n\t matches.push(binding);\n\t }\n\t } else {\n\t if (bindingName.indexOf(expression) != -1) {\n\t matches.push(binding);\n\t }\n\t }\n\t });\n\t }\n\t });\n\t return matches;\n\t };\n\t\n\t /**\n\t * @name $$testability#findModels\n\t *\n\t * @description\n\t * Returns an array of elements that are two-way found via ng-model to\n\t * expressions matching the input.\n\t *\n\t * @param {Element} element The element root to search from.\n\t * @param {string} expression The model expression to match.\n\t * @param {boolean} opt_exactMatch If true, only returns exact matches\n\t * for the expression.\n\t */\n\t testability.findModels = function(element, expression, opt_exactMatch) {\n\t var prefixes = ['ng-', 'data-ng-', 'ng\\\\:'];\n\t for (var p = 0; p < prefixes.length; ++p) {\n\t var attributeEquals = opt_exactMatch ? '=' : '*=';\n\t var selector = '[' + prefixes[p] + 'model' + attributeEquals + '\"' + expression + '\"]';\n\t var elements = element.querySelectorAll(selector);\n\t if (elements.length) {\n\t return elements;\n\t }\n\t }\n\t };\n\t\n\t /**\n\t * @name $$testability#getLocation\n\t *\n\t * @description\n\t * Shortcut for getting the location in a browser agnostic way. Returns\n\t * the path, search, and hash. (e.g. /path?a=b#hash)\n\t */\n\t testability.getLocation = function() {\n\t return $location.url();\n\t };\n\t\n\t /**\n\t * @name $$testability#setLocation\n\t *\n\t * @description\n\t * Shortcut for navigating to a location without doing a full page reload.\n\t *\n\t * @param {string} url The location url (path, search and hash,\n\t * e.g. /path?a=b#hash) to go to.\n\t */\n\t testability.setLocation = function(url) {\n\t if (url !== $location.url()) {\n\t $location.url(url);\n\t $rootScope.$digest();\n\t }\n\t };\n\t\n\t /**\n\t * @name $$testability#whenStable\n\t *\n\t * @description\n\t * Calls the callback when $timeout and $http requests are completed.\n\t *\n\t * @param {function} callback\n\t */\n\t testability.whenStable = function(callback) {\n\t $browser.notifyWhenNoOutstandingRequests(callback);\n\t };\n\t\n\t return testability;\n\t }];\n\t}\n\t\n\tfunction $TimeoutProvider() {\n\t this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',\n\t function($rootScope, $browser, $q, $$q, $exceptionHandler) {\n\t\n\t var deferreds = {};\n\t\n\t\n\t /**\n\t * @ngdoc service\n\t * @name $timeout\n\t *\n\t * @description\n\t * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch\n\t * block and delegates any exceptions to\n\t * {@link ng.$exceptionHandler $exceptionHandler} service.\n\t *\n\t * The return value of calling `$timeout` is a promise, which will be resolved when\n\t * the delay has passed and the timeout function, if provided, is executed.\n\t *\n\t * To cancel a timeout request, call `$timeout.cancel(promise)`.\n\t *\n\t * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to\n\t * synchronously flush the queue of deferred functions.\n\t *\n\t * If you only want a promise that will be resolved after some specified delay\n\t * then you can call `$timeout` without the `fn` function.\n\t *\n\t * @param {function()=} fn A function, whose execution should be delayed.\n\t * @param {number=} [delay=0] Delay in milliseconds.\n\t * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n\t * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n\t * @param {...*=} Pass additional parameters to the executed function.\n\t * @returns {Promise} Promise that will be resolved when the timeout is reached. The promise\n\t * will be resolved with the return value of the `fn` function.\n\t *\n\t */\n\t function timeout(fn, delay, invokeApply) {\n\t if (!isFunction(fn)) {\n\t invokeApply = delay;\n\t delay = fn;\n\t fn = noop;\n\t }\n\t\n\t var args = sliceArgs(arguments, 3),\n\t skipApply = (isDefined(invokeApply) && !invokeApply),\n\t deferred = (skipApply ? $$q : $q).defer(),\n\t promise = deferred.promise,\n\t timeoutId;\n\t\n\t timeoutId = $browser.defer(function() {\n\t try {\n\t deferred.resolve(fn.apply(null, args));\n\t } catch (e) {\n\t deferred.reject(e);\n\t $exceptionHandler(e);\n\t }\n\t finally {\n\t delete deferreds[promise.$$timeoutId];\n\t }\n\t\n\t if (!skipApply) $rootScope.$apply();\n\t }, delay);\n\t\n\t promise.$$timeoutId = timeoutId;\n\t deferreds[timeoutId] = deferred;\n\t\n\t return promise;\n\t }\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $timeout#cancel\n\t *\n\t * @description\n\t * Cancels a task associated with the `promise`. As a result of this, the promise will be\n\t * resolved with a rejection.\n\t *\n\t * @param {Promise=} promise Promise returned by the `$timeout` function.\n\t * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n\t * canceled.\n\t */\n\t timeout.cancel = function(promise) {\n\t if (promise && promise.$$timeoutId in deferreds) {\n\t deferreds[promise.$$timeoutId].reject('canceled');\n\t delete deferreds[promise.$$timeoutId];\n\t return $browser.defer.cancel(promise.$$timeoutId);\n\t }\n\t return false;\n\t };\n\t\n\t return timeout;\n\t }];\n\t}\n\t\n\t// NOTE: The usage of window and document instead of $window and $document here is\n\t// deliberate. This service depends on the specific behavior of anchor nodes created by the\n\t// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and\n\t// cause us to break tests. In addition, when the browser resolves a URL for XHR, it\n\t// doesn't know about mocked locations and resolves URLs to the real document - which is\n\t// exactly the behavior needed here. There is little value is mocking these out for this\n\t// service.\n\tvar urlParsingNode = document.createElement(\"a\");\n\tvar originUrl = urlResolve(window.location.href);\n\t\n\t\n\t/**\n\t *\n\t * Implementation Notes for non-IE browsers\n\t * ----------------------------------------\n\t * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n\t * results both in the normalizing and parsing of the URL. Normalizing means that a relative\n\t * URL will be resolved into an absolute URL in the context of the application document.\n\t * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n\t * properties are all populated to reflect the normalized URL. This approach has wide\n\t * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See\n\t * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n\t *\n\t * Implementation Notes for IE\n\t * ---------------------------\n\t * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other\n\t * browsers. However, the parsed components will not be set if the URL assigned did not specify\n\t * them. (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.) We\n\t * work around that by performing the parsing in a 2nd step by taking a previously normalized\n\t * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the\n\t * properties such as protocol, hostname, port, etc.\n\t *\n\t * References:\n\t * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n\t * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n\t * http://url.spec.whatwg.org/#urlutils\n\t * https://github.com/angular/angular.js/pull/2902\n\t * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n\t *\n\t * @kind function\n\t * @param {string} url The URL to be parsed.\n\t * @description Normalizes and parses a URL.\n\t * @returns {object} Returns the normalized URL as a dictionary.\n\t *\n\t * | member name | Description |\n\t * |---------------|----------------|\n\t * | href | A normalized version of the provided URL if it was not an absolute URL |\n\t * | protocol | The protocol including the trailing colon |\n\t * | host | The host and port (if the port is non-default) of the normalizedUrl |\n\t * | search | The search params, minus the question mark |\n\t * | hash | The hash string, minus the hash symbol\n\t * | hostname | The hostname\n\t * | port | The port, without \":\"\n\t * | pathname | The pathname, beginning with \"/\"\n\t *\n\t */\n\tfunction urlResolve(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // Normalize before parse. Refer Implementation Notes on why this is\n\t // done in two steps on IE.\n\t urlParsingNode.setAttribute(\"href\", href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/')\n\t ? urlParsingNode.pathname\n\t : '/' + urlParsingNode.pathname\n\t };\n\t}\n\t\n\t/**\n\t * Parse a request URL and determine whether this is a same-origin request as the application document.\n\t *\n\t * @param {string|object} requestUrl The url of the request as a string that will be resolved\n\t * or a parsed URL object.\n\t * @returns {boolean} Whether the request is for the same origin as the application document.\n\t */\n\tfunction urlIsSameOrigin(requestUrl) {\n\t var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n\t return (parsed.protocol === originUrl.protocol &&\n\t parsed.host === originUrl.host);\n\t}\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $window\n\t *\n\t * @description\n\t * A reference to the browser's `window` object. While `window`\n\t * is globally available in JavaScript, it causes testability problems, because\n\t * it is a global variable. In angular we always refer to it through the\n\t * `$window` service, so it may be overridden, removed or mocked for testing.\n\t *\n\t * Expressions, like the one defined for the `ngClick` directive in the example\n\t * below, are evaluated with respect to the current scope. Therefore, there is\n\t * no risk of inadvertently coding in a dependency on a global value in such an\n\t * expression.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t \n\t
    \n\t
    \n\t \n\t it('should display the greeting in the input box', function() {\n\t element(by.model('greeting')).sendKeys('Hello, E2E Tests');\n\t // If we click the button it will block the test runner\n\t // element(':button').click();\n\t });\n\t \n\t
    \n\t */\n\tfunction $WindowProvider() {\n\t this.$get = valueFn(window);\n\t}\n\t\n\t/**\n\t * @name $$cookieReader\n\t * @requires $document\n\t *\n\t * @description\n\t * This is a private service for reading cookies used by $http and ngCookies\n\t *\n\t * @return {Object} a key/value map of the current cookies\n\t */\n\tfunction $$CookieReader($document) {\n\t var rawDocument = $document[0] || {};\n\t var lastCookies = {};\n\t var lastCookieString = '';\n\t\n\t function safeDecodeURIComponent(str) {\n\t try {\n\t return decodeURIComponent(str);\n\t } catch (e) {\n\t return str;\n\t }\n\t }\n\t\n\t return function() {\n\t var cookieArray, cookie, i, index, name;\n\t var currentCookieString = rawDocument.cookie || '';\n\t\n\t if (currentCookieString !== lastCookieString) {\n\t lastCookieString = currentCookieString;\n\t cookieArray = lastCookieString.split('; ');\n\t lastCookies = {};\n\t\n\t for (i = 0; i < cookieArray.length; i++) {\n\t cookie = cookieArray[i];\n\t index = cookie.indexOf('=');\n\t if (index > 0) { //ignore nameless cookies\n\t name = safeDecodeURIComponent(cookie.substring(0, index));\n\t // the first value that is seen for a cookie is the most\n\t // specific one. values for the same cookie name that\n\t // follow are for less specific paths.\n\t if (isUndefined(lastCookies[name])) {\n\t lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));\n\t }\n\t }\n\t }\n\t }\n\t return lastCookies;\n\t };\n\t}\n\t\n\t$$CookieReader.$inject = ['$document'];\n\t\n\tfunction $$CookieReaderProvider() {\n\t this.$get = $$CookieReader;\n\t}\n\t\n\t/* global currencyFilter: true,\n\t dateFilter: true,\n\t filterFilter: true,\n\t jsonFilter: true,\n\t limitToFilter: true,\n\t lowercaseFilter: true,\n\t numberFilter: true,\n\t orderByFilter: true,\n\t uppercaseFilter: true,\n\t */\n\t\n\t/**\n\t * @ngdoc provider\n\t * @name $filterProvider\n\t * @description\n\t *\n\t * Filters are just functions which transform input to an output. However filters need to be\n\t * Dependency Injected. To achieve this a filter definition consists of a factory function which is\n\t * annotated with dependencies and is responsible for creating a filter function.\n\t *\n\t *
    \n\t * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.\n\t * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace\n\t * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores\n\t * (`myapp_subsection_filterx`).\n\t *
    \n\t *\n\t * ```js\n\t * // Filter registration\n\t * function MyModule($provide, $filterProvider) {\n\t * // create a service to demonstrate injection (not always needed)\n\t * $provide.value('greet', function(name){\n\t * return 'Hello ' + name + '!';\n\t * });\n\t *\n\t * // register a filter factory which uses the\n\t * // greet service to demonstrate DI.\n\t * $filterProvider.register('greet', function(greet){\n\t * // return the filter function which uses the greet service\n\t * // to generate salutation\n\t * return function(text) {\n\t * // filters need to be forgiving so check input validity\n\t * return text && greet(text) || text;\n\t * };\n\t * });\n\t * }\n\t * ```\n\t *\n\t * The filter function is registered with the `$injector` under the filter name suffix with\n\t * `Filter`.\n\t *\n\t * ```js\n\t * it('should be the same instance', inject(\n\t * function($filterProvider) {\n\t * $filterProvider.register('reverse', function(){\n\t * return ...;\n\t * });\n\t * },\n\t * function($filter, reverseFilter) {\n\t * expect($filter('reverse')).toBe(reverseFilter);\n\t * });\n\t * ```\n\t *\n\t *\n\t * For more information about how angular filters work, and how to create your own filters, see\n\t * {@link guide/filter Filters} in the Angular Developer Guide.\n\t */\n\t\n\t/**\n\t * @ngdoc service\n\t * @name $filter\n\t * @kind function\n\t * @description\n\t * Filters are used for formatting data displayed to the user.\n\t *\n\t * The general syntax in templates is as follows:\n\t *\n\t * {{ expression [| filter_name[:parameter_value] ... ] }}\n\t *\n\t * @param {String} name Name of the filter function to retrieve\n\t * @return {Function} the filter function\n\t * @example\n\t \n\t \n\t
    \n\t

    {{ originalText }}

    \n\t

    {{ filteredText }}

    \n\t
    \n\t
    \n\t\n\t \n\t angular.module('filterExample', [])\n\t .controller('MainCtrl', function($scope, $filter) {\n\t $scope.originalText = 'hello';\n\t $scope.filteredText = $filter('uppercase')($scope.originalText);\n\t });\n\t \n\t
    \n\t */\n\t$FilterProvider.$inject = ['$provide'];\n\tfunction $FilterProvider($provide) {\n\t var suffix = 'Filter';\n\t\n\t /**\n\t * @ngdoc method\n\t * @name $filterProvider#register\n\t * @param {string|Object} name Name of the filter function, or an object map of filters where\n\t * the keys are the filter names and the values are the filter factories.\n\t *\n\t *
    \n\t * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.\n\t * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace\n\t * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores\n\t * (`myapp_subsection_filterx`).\n\t *
    \n\t * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered.\n\t * @returns {Object} Registered filter instance, or if a map of filters was provided then a map\n\t * of the registered filter instances.\n\t */\n\t function register(name, factory) {\n\t if (isObject(name)) {\n\t var filters = {};\n\t forEach(name, function(filter, key) {\n\t filters[key] = register(key, filter);\n\t });\n\t return filters;\n\t } else {\n\t return $provide.factory(name + suffix, factory);\n\t }\n\t }\n\t this.register = register;\n\t\n\t this.$get = ['$injector', function($injector) {\n\t return function(name) {\n\t return $injector.get(name + suffix);\n\t };\n\t }];\n\t\n\t ////////////////////////////////////////\n\t\n\t /* global\n\t currencyFilter: false,\n\t dateFilter: false,\n\t filterFilter: false,\n\t jsonFilter: false,\n\t limitToFilter: false,\n\t lowercaseFilter: false,\n\t numberFilter: false,\n\t orderByFilter: false,\n\t uppercaseFilter: false,\n\t */\n\t\n\t register('currency', currencyFilter);\n\t register('date', dateFilter);\n\t register('filter', filterFilter);\n\t register('json', jsonFilter);\n\t register('limitTo', limitToFilter);\n\t register('lowercase', lowercaseFilter);\n\t register('number', numberFilter);\n\t register('orderBy', orderByFilter);\n\t register('uppercase', uppercaseFilter);\n\t}\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name filter\n\t * @kind function\n\t *\n\t * @description\n\t * Selects a subset of items from `array` and returns it as a new array.\n\t *\n\t * @param {Array} array The source array.\n\t * @param {string|Object|function()} expression The predicate to be used for selecting items from\n\t * `array`.\n\t *\n\t * Can be one of:\n\t *\n\t * - `string`: The string is used for matching against the contents of the `array`. All strings or\n\t * objects with string properties in `array` that match this string will be returned. This also\n\t * applies to nested object properties.\n\t * The predicate can be negated by prefixing the string with `!`.\n\t *\n\t * - `Object`: A pattern object can be used to filter specific properties on objects contained\n\t * by `array`. For example `{name:\"M\", phone:\"1\"}` predicate will return an array of items\n\t * which have property `name` containing \"M\" and property `phone` containing \"1\". A special\n\t * property name `$` can be used (as in `{$:\"text\"}`) to accept a match against any\n\t * property of the object or its nested object properties. That's equivalent to the simple\n\t * substring match with a `string` as described above. The predicate can be negated by prefixing\n\t * the string with `!`.\n\t * For example `{name: \"!M\"}` predicate will return an array of items which have property `name`\n\t * not containing \"M\".\n\t *\n\t * Note that a named property will match properties on the same level only, while the special\n\t * `$` property will match properties on the same level or deeper. E.g. an array item like\n\t * `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but\n\t * **will** be matched by `{$: 'John'}`.\n\t *\n\t * - `function(value, index, array)`: A predicate function can be used to write arbitrary filters.\n\t * The function is called for each element of the array, with the element, its index, and\n\t * the entire array itself as arguments.\n\t *\n\t * The final result is an array of those elements that the predicate returned true for.\n\t *\n\t * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in\n\t * determining if the expected value (from the filter expression) and actual value (from\n\t * the object in the array) should be considered a match.\n\t *\n\t * Can be one of:\n\t *\n\t * - `function(actual, expected)`:\n\t * The function will be given the object value and the predicate value to compare and\n\t * should return true if both values should be considered equal.\n\t *\n\t * - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`.\n\t * This is essentially strict comparison of expected and actual.\n\t *\n\t * - `false|undefined`: A short hand for a function which will look for a substring match in case\n\t * insensitive way.\n\t *\n\t * Primitive values are converted to strings. Objects are not compared against primitives,\n\t * unless they have a custom `toString` method (e.g. `Date` objects).\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    NamePhone
    {{friend.name}}{{friend.phone}}
    \n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    NamePhone
    {{friendObj.name}}{{friendObj.phone}}
    \n\t
    \n\t \n\t var expectFriendNames = function(expectedNames, key) {\n\t element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {\n\t arr.forEach(function(wd, i) {\n\t expect(wd.getText()).toMatch(expectedNames[i]);\n\t });\n\t });\n\t };\n\t\n\t it('should search across all fields when filtering with a string', function() {\n\t var searchText = element(by.model('searchText'));\n\t searchText.clear();\n\t searchText.sendKeys('m');\n\t expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');\n\t\n\t searchText.clear();\n\t searchText.sendKeys('76');\n\t expectFriendNames(['John', 'Julie'], 'friend');\n\t });\n\t\n\t it('should search in specific fields when filtering with a predicate object', function() {\n\t var searchAny = element(by.model('search.$'));\n\t searchAny.clear();\n\t searchAny.sendKeys('i');\n\t expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');\n\t });\n\t it('should use a equal comparison when comparator is true', function() {\n\t var searchName = element(by.model('search.name'));\n\t var strict = element(by.model('strict'));\n\t searchName.clear();\n\t searchName.sendKeys('Julie');\n\t strict.click();\n\t expectFriendNames(['Julie'], 'friendObj');\n\t });\n\t \n\t
    \n\t */\n\tfunction filterFilter() {\n\t return function(array, expression, comparator) {\n\t if (!isArrayLike(array)) {\n\t if (array == null) {\n\t return array;\n\t } else {\n\t throw minErr('filter')('notarray', 'Expected array but received: {0}', array);\n\t }\n\t }\n\t\n\t var expressionType = getTypeForFilter(expression);\n\t var predicateFn;\n\t var matchAgainstAnyProp;\n\t\n\t switch (expressionType) {\n\t case 'function':\n\t predicateFn = expression;\n\t break;\n\t case 'boolean':\n\t case 'null':\n\t case 'number':\n\t case 'string':\n\t matchAgainstAnyProp = true;\n\t //jshint -W086\n\t case 'object':\n\t //jshint +W086\n\t predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp);\n\t break;\n\t default:\n\t return array;\n\t }\n\t\n\t return Array.prototype.filter.call(array, predicateFn);\n\t };\n\t}\n\t\n\t// Helper functions for `filterFilter`\n\tfunction createPredicateFn(expression, comparator, matchAgainstAnyProp) {\n\t var shouldMatchPrimitives = isObject(expression) && ('$' in expression);\n\t var predicateFn;\n\t\n\t if (comparator === true) {\n\t comparator = equals;\n\t } else if (!isFunction(comparator)) {\n\t comparator = function(actual, expected) {\n\t if (isUndefined(actual)) {\n\t // No substring matching against `undefined`\n\t return false;\n\t }\n\t if ((actual === null) || (expected === null)) {\n\t // No substring matching against `null`; only match against `null`\n\t return actual === expected;\n\t }\n\t if (isObject(expected) || (isObject(actual) && !hasCustomToString(actual))) {\n\t // Should not compare primitives against objects, unless they have custom `toString` method\n\t return false;\n\t }\n\t\n\t actual = lowercase('' + actual);\n\t expected = lowercase('' + expected);\n\t return actual.indexOf(expected) !== -1;\n\t };\n\t }\n\t\n\t predicateFn = function(item) {\n\t if (shouldMatchPrimitives && !isObject(item)) {\n\t return deepCompare(item, expression.$, comparator, false);\n\t }\n\t return deepCompare(item, expression, comparator, matchAgainstAnyProp);\n\t };\n\t\n\t return predicateFn;\n\t}\n\t\n\tfunction deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {\n\t var actualType = getTypeForFilter(actual);\n\t var expectedType = getTypeForFilter(expected);\n\t\n\t if ((expectedType === 'string') && (expected.charAt(0) === '!')) {\n\t return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);\n\t } else if (isArray(actual)) {\n\t // In case `actual` is an array, consider it a match\n\t // if ANY of it's items matches `expected`\n\t return actual.some(function(item) {\n\t return deepCompare(item, expected, comparator, matchAgainstAnyProp);\n\t });\n\t }\n\t\n\t switch (actualType) {\n\t case 'object':\n\t var key;\n\t if (matchAgainstAnyProp) {\n\t for (key in actual) {\n\t if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) {\n\t return true;\n\t }\n\t }\n\t return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false);\n\t } else if (expectedType === 'object') {\n\t for (key in expected) {\n\t var expectedVal = expected[key];\n\t if (isFunction(expectedVal) || isUndefined(expectedVal)) {\n\t continue;\n\t }\n\t\n\t var matchAnyProperty = key === '$';\n\t var actualVal = matchAnyProperty ? actual : actual[key];\n\t if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t } else {\n\t return comparator(actual, expected);\n\t }\n\t break;\n\t case 'function':\n\t return false;\n\t default:\n\t return comparator(actual, expected);\n\t }\n\t}\n\t\n\t// Used for easily differentiating between `null` and actual `object`\n\tfunction getTypeForFilter(val) {\n\t return (val === null) ? 'null' : typeof val;\n\t}\n\t\n\tvar MAX_DIGITS = 22;\n\tvar DECIMAL_SEP = '.';\n\tvar ZERO_CHAR = '0';\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name currency\n\t * @kind function\n\t *\n\t * @description\n\t * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default\n\t * symbol for current locale is used.\n\t *\n\t * @param {number} amount Input to filter.\n\t * @param {string=} symbol Currency symbol or identifier to be displayed.\n\t * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale\n\t * @returns {string} Formatted number.\n\t *\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t
    \n\t default currency symbol ($): {{amount | currency}}
    \n\t custom currency identifier (USD$): {{amount | currency:\"USD$\"}}\n\t no fractions (0): {{amount | currency:\"USD$\":0}}\n\t
    \n\t
    \n\t \n\t it('should init with 1234.56', function() {\n\t expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');\n\t expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');\n\t expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');\n\t });\n\t it('should update', function() {\n\t if (browser.params.browser == 'safari') {\n\t // Safari does not understand the minus key. See\n\t // https://github.com/angular/protractor/issues/481\n\t return;\n\t }\n\t element(by.model('amount')).clear();\n\t element(by.model('amount')).sendKeys('-1234');\n\t expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00');\n\t expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00');\n\t expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234');\n\t });\n\t \n\t
    \n\t */\n\tcurrencyFilter.$inject = ['$locale'];\n\tfunction currencyFilter($locale) {\n\t var formats = $locale.NUMBER_FORMATS;\n\t return function(amount, currencySymbol, fractionSize) {\n\t if (isUndefined(currencySymbol)) {\n\t currencySymbol = formats.CURRENCY_SYM;\n\t }\n\t\n\t if (isUndefined(fractionSize)) {\n\t fractionSize = formats.PATTERNS[1].maxFrac;\n\t }\n\t\n\t // if null or undefined pass it through\n\t return (amount == null)\n\t ? amount\n\t : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).\n\t replace(/\\u00A4/g, currencySymbol);\n\t };\n\t}\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name number\n\t * @kind function\n\t *\n\t * @description\n\t * Formats a number as text.\n\t *\n\t * If the input is null or undefined, it will just be returned.\n\t * If the input is infinite (Infinity/-Infinity) the Infinity symbol '∞' is returned.\n\t * If the input is not a number an empty string is returned.\n\t *\n\t *\n\t * @param {number|string} number Number to format.\n\t * @param {(number|string)=} fractionSize Number of decimal places to round the number to.\n\t * If this is not provided then the fraction size is computed from the current locale's number\n\t * formatting pattern. In the case of the default locale, it will be 3.\n\t * @returns {string} Number rounded to fractionSize and places a “,” after each third digit.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t
    \n\t Default formatting: {{val | number}}
    \n\t No fractions: {{val | number:0}}
    \n\t Negative number: {{-val | number:4}}\n\t
    \n\t
    \n\t \n\t it('should format numbers', function() {\n\t expect(element(by.id('number-default')).getText()).toBe('1,234.568');\n\t expect(element(by.binding('val | number:0')).getText()).toBe('1,235');\n\t expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');\n\t });\n\t\n\t it('should update', function() {\n\t element(by.model('val')).clear();\n\t element(by.model('val')).sendKeys('3374.333');\n\t expect(element(by.id('number-default')).getText()).toBe('3,374.333');\n\t expect(element(by.binding('val | number:0')).getText()).toBe('3,374');\n\t expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');\n\t });\n\t \n\t
    \n\t */\n\tnumberFilter.$inject = ['$locale'];\n\tfunction numberFilter($locale) {\n\t var formats = $locale.NUMBER_FORMATS;\n\t return function(number, fractionSize) {\n\t\n\t // if null or undefined pass it through\n\t return (number == null)\n\t ? number\n\t : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,\n\t fractionSize);\n\t };\n\t}\n\t\n\t/**\n\t * Parse a number (as a string) into three components that can be used\n\t * for formatting the number.\n\t *\n\t * (Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/)\n\t *\n\t * @param {string} numStr The number to parse\n\t * @return {object} An object describing this number, containing the following keys:\n\t * - d : an array of digits containing leading zeros as necessary\n\t * - i : the number of the digits in `d` that are to the left of the decimal point\n\t * - e : the exponent for numbers that would need more than `MAX_DIGITS` digits in `d`\n\t *\n\t */\n\tfunction parse(numStr) {\n\t var exponent = 0, digits, numberOfIntegerDigits;\n\t var i, j, zeros;\n\t\n\t // Decimal point?\n\t if ((numberOfIntegerDigits = numStr.indexOf(DECIMAL_SEP)) > -1) {\n\t numStr = numStr.replace(DECIMAL_SEP, '');\n\t }\n\t\n\t // Exponential form?\n\t if ((i = numStr.search(/e/i)) > 0) {\n\t // Work out the exponent.\n\t if (numberOfIntegerDigits < 0) numberOfIntegerDigits = i;\n\t numberOfIntegerDigits += +numStr.slice(i + 1);\n\t numStr = numStr.substring(0, i);\n\t } else if (numberOfIntegerDigits < 0) {\n\t // There was no decimal point or exponent so it is an integer.\n\t numberOfIntegerDigits = numStr.length;\n\t }\n\t\n\t // Count the number of leading zeros.\n\t for (i = 0; numStr.charAt(i) == ZERO_CHAR; i++);\n\t\n\t if (i == (zeros = numStr.length)) {\n\t // The digits are all zero.\n\t digits = [0];\n\t numberOfIntegerDigits = 1;\n\t } else {\n\t // Count the number of trailing zeros\n\t zeros--;\n\t while (numStr.charAt(zeros) == ZERO_CHAR) zeros--;\n\t\n\t // Trailing zeros are insignificant so ignore them\n\t numberOfIntegerDigits -= i;\n\t digits = [];\n\t // Convert string to array of digits without leading/trailing zeros.\n\t for (j = 0; i <= zeros; i++, j++) {\n\t digits[j] = +numStr.charAt(i);\n\t }\n\t }\n\t\n\t // If the number overflows the maximum allowed digits then use an exponent.\n\t if (numberOfIntegerDigits > MAX_DIGITS) {\n\t digits = digits.splice(0, MAX_DIGITS - 1);\n\t exponent = numberOfIntegerDigits - 1;\n\t numberOfIntegerDigits = 1;\n\t }\n\t\n\t return { d: digits, e: exponent, i: numberOfIntegerDigits };\n\t}\n\t\n\t/**\n\t * Round the parsed number to the specified number of decimal places\n\t * This function changed the parsedNumber in-place\n\t */\n\tfunction roundNumber(parsedNumber, fractionSize, minFrac, maxFrac) {\n\t var digits = parsedNumber.d;\n\t var fractionLen = digits.length - parsedNumber.i;\n\t\n\t // determine fractionSize if it is not specified; `+fractionSize` converts it to a number\n\t fractionSize = (isUndefined(fractionSize)) ? Math.min(Math.max(minFrac, fractionLen), maxFrac) : +fractionSize;\n\t\n\t // The index of the digit to where rounding is to occur\n\t var roundAt = fractionSize + parsedNumber.i;\n\t var digit = digits[roundAt];\n\t\n\t if (roundAt > 0) {\n\t digits.splice(roundAt);\n\t } else {\n\t // We rounded to zero so reset the parsedNumber\n\t parsedNumber.i = 1;\n\t digits.length = roundAt = fractionSize + 1;\n\t for (var i=0; i < roundAt; i++) digits[i] = 0;\n\t }\n\t\n\t if (digit >= 5) digits[roundAt - 1]++;\n\t\n\t // Pad out with zeros to get the required fraction length\n\t for (; fractionLen < fractionSize; fractionLen++) digits.push(0);\n\t\n\t\n\t // Do any carrying, e.g. a digit was rounded up to 10\n\t var carry = digits.reduceRight(function(carry, d, i, digits) {\n\t d = d + carry;\n\t digits[i] = d % 10;\n\t return Math.floor(d / 10);\n\t }, 0);\n\t if (carry) {\n\t digits.unshift(carry);\n\t parsedNumber.i++;\n\t }\n\t}\n\t\n\t/**\n\t * Format a number into a string\n\t * @param {number} number The number to format\n\t * @param {{\n\t * minFrac, // the minimum number of digits required in the fraction part of the number\n\t * maxFrac, // the maximum number of digits required in the fraction part of the number\n\t * gSize, // number of digits in each group of separated digits\n\t * lgSize, // number of digits in the last group of digits before the decimal separator\n\t * negPre, // the string to go in front of a negative number (e.g. `-` or `(`))\n\t * posPre, // the string to go in front of a positive number\n\t * negSuf, // the string to go after a negative number (e.g. `)`)\n\t * posSuf // the string to go after a positive number\n\t * }} pattern\n\t * @param {string} groupSep The string to separate groups of number (e.g. `,`)\n\t * @param {string} decimalSep The string to act as the decimal separator (e.g. `.`)\n\t * @param {[type]} fractionSize The size of the fractional part of the number\n\t * @return {string} The number formatted as a string\n\t */\n\tfunction formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {\n\t\n\t if (!(isString(number) || isNumber(number)) || isNaN(number)) return '';\n\t\n\t var isInfinity = !isFinite(number);\n\t var isZero = false;\n\t var numStr = Math.abs(number) + '',\n\t formattedText = '',\n\t parsedNumber;\n\t\n\t if (isInfinity) {\n\t formattedText = '\\u221e';\n\t } else {\n\t parsedNumber = parse(numStr);\n\t\n\t roundNumber(parsedNumber, fractionSize, pattern.minFrac, pattern.maxFrac);\n\t\n\t var digits = parsedNumber.d;\n\t var integerLen = parsedNumber.i;\n\t var exponent = parsedNumber.e;\n\t var decimals = [];\n\t isZero = digits.reduce(function(isZero, d) { return isZero && !d; }, true);\n\t\n\t // pad zeros for small numbers\n\t while (integerLen < 0) {\n\t digits.unshift(0);\n\t integerLen++;\n\t }\n\t\n\t // extract decimals digits\n\t if (integerLen > 0) {\n\t decimals = digits.splice(integerLen);\n\t } else {\n\t decimals = digits;\n\t digits = [0];\n\t }\n\t\n\t // format the integer digits with grouping separators\n\t var groups = [];\n\t if (digits.length > pattern.lgSize) {\n\t groups.unshift(digits.splice(-pattern.lgSize).join(''));\n\t }\n\t while (digits.length > pattern.gSize) {\n\t groups.unshift(digits.splice(-pattern.gSize).join(''));\n\t }\n\t if (digits.length) {\n\t groups.unshift(digits.join(''));\n\t }\n\t formattedText = groups.join(groupSep);\n\t\n\t // append the decimal digits\n\t if (decimals.length) {\n\t formattedText += decimalSep + decimals.join('');\n\t }\n\t\n\t if (exponent) {\n\t formattedText += 'e+' + exponent;\n\t }\n\t }\n\t if (number < 0 && !isZero) {\n\t return pattern.negPre + formattedText + pattern.negSuf;\n\t } else {\n\t return pattern.posPre + formattedText + pattern.posSuf;\n\t }\n\t}\n\t\n\tfunction padNumber(num, digits, trim) {\n\t var neg = '';\n\t if (num < 0) {\n\t neg = '-';\n\t num = -num;\n\t }\n\t num = '' + num;\n\t while (num.length < digits) num = ZERO_CHAR + num;\n\t if (trim) {\n\t num = num.substr(num.length - digits);\n\t }\n\t return neg + num;\n\t}\n\t\n\t\n\tfunction dateGetter(name, size, offset, trim) {\n\t offset = offset || 0;\n\t return function(date) {\n\t var value = date['get' + name]();\n\t if (offset > 0 || value > -offset) {\n\t value += offset;\n\t }\n\t if (value === 0 && offset == -12) value = 12;\n\t return padNumber(value, size, trim);\n\t };\n\t}\n\t\n\tfunction dateStrGetter(name, shortForm) {\n\t return function(date, formats) {\n\t var value = date['get' + name]();\n\t var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\t\n\t return formats[get][value];\n\t };\n\t}\n\t\n\tfunction timeZoneGetter(date, formats, offset) {\n\t var zone = -1 * offset;\n\t var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\t\n\t paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n\t padNumber(Math.abs(zone % 60), 2);\n\t\n\t return paddedZone;\n\t}\n\t\n\tfunction getFirstThursdayOfYear(year) {\n\t // 0 = index of January\n\t var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();\n\t // 4 = index of Thursday (+1 to account for 1st = 5)\n\t // 11 = index of *next* Thursday (+1 account for 1st = 12)\n\t return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);\n\t}\n\t\n\tfunction getThursdayThisWeek(datetime) {\n\t return new Date(datetime.getFullYear(), datetime.getMonth(),\n\t // 4 = index of Thursday\n\t datetime.getDate() + (4 - datetime.getDay()));\n\t}\n\t\n\tfunction weekGetter(size) {\n\t return function(date) {\n\t var firstThurs = getFirstThursdayOfYear(date.getFullYear()),\n\t thisThurs = getThursdayThisWeek(date);\n\t\n\t var diff = +thisThurs - +firstThurs,\n\t result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week\n\t\n\t return padNumber(result, size);\n\t };\n\t}\n\t\n\tfunction ampmGetter(date, formats) {\n\t return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n\t}\n\t\n\tfunction eraGetter(date, formats) {\n\t return date.getFullYear() <= 0 ? formats.ERAS[0] : formats.ERAS[1];\n\t}\n\t\n\tfunction longEraGetter(date, formats) {\n\t return date.getFullYear() <= 0 ? formats.ERANAMES[0] : formats.ERANAMES[1];\n\t}\n\t\n\tvar DATE_FORMATS = {\n\t yyyy: dateGetter('FullYear', 4),\n\t yy: dateGetter('FullYear', 2, 0, true),\n\t y: dateGetter('FullYear', 1),\n\t MMMM: dateStrGetter('Month'),\n\t MMM: dateStrGetter('Month', true),\n\t MM: dateGetter('Month', 2, 1),\n\t M: dateGetter('Month', 1, 1),\n\t dd: dateGetter('Date', 2),\n\t d: dateGetter('Date', 1),\n\t HH: dateGetter('Hours', 2),\n\t H: dateGetter('Hours', 1),\n\t hh: dateGetter('Hours', 2, -12),\n\t h: dateGetter('Hours', 1, -12),\n\t mm: dateGetter('Minutes', 2),\n\t m: dateGetter('Minutes', 1),\n\t ss: dateGetter('Seconds', 2),\n\t s: dateGetter('Seconds', 1),\n\t // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n\t // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n\t sss: dateGetter('Milliseconds', 3),\n\t EEEE: dateStrGetter('Day'),\n\t EEE: dateStrGetter('Day', true),\n\t a: ampmGetter,\n\t Z: timeZoneGetter,\n\t ww: weekGetter(2),\n\t w: weekGetter(1),\n\t G: eraGetter,\n\t GG: eraGetter,\n\t GGG: eraGetter,\n\t GGGG: longEraGetter\n\t};\n\t\n\tvar DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,\n\t NUMBER_STRING = /^\\-?\\d+$/;\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name date\n\t * @kind function\n\t *\n\t * @description\n\t * Formats `date` to a string based on the requested `format`.\n\t *\n\t * `format` string can be composed of the following elements:\n\t *\n\t * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n\t * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n\t * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n\t * * `'MMMM'`: Month in year (January-December)\n\t * * `'MMM'`: Month in year (Jan-Dec)\n\t * * `'MM'`: Month in year, padded (01-12)\n\t * * `'M'`: Month in year (1-12)\n\t * * `'dd'`: Day in month, padded (01-31)\n\t * * `'d'`: Day in month (1-31)\n\t * * `'EEEE'`: Day in Week,(Sunday-Saturday)\n\t * * `'EEE'`: Day in Week, (Sun-Sat)\n\t * * `'HH'`: Hour in day, padded (00-23)\n\t * * `'H'`: Hour in day (0-23)\n\t * * `'hh'`: Hour in AM/PM, padded (01-12)\n\t * * `'h'`: Hour in AM/PM, (1-12)\n\t * * `'mm'`: Minute in hour, padded (00-59)\n\t * * `'m'`: Minute in hour (0-59)\n\t * * `'ss'`: Second in minute, padded (00-59)\n\t * * `'s'`: Second in minute (0-59)\n\t * * `'sss'`: Millisecond in second, padded (000-999)\n\t * * `'a'`: AM/PM marker\n\t * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n\t * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year\n\t * * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year\n\t * * `'G'`, `'GG'`, `'GGG'`: The abbreviated form of the era string (e.g. 'AD')\n\t * * `'GGGG'`: The long form of the era string (e.g. 'Anno Domini')\n\t *\n\t * `format` string can also be one of the following predefined\n\t * {@link guide/i18n localizable formats}:\n\t *\n\t * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n\t * (e.g. Sep 3, 2010 12:05:08 PM)\n\t * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM)\n\t * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale\n\t * (e.g. Friday, September 3, 2010)\n\t * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)\n\t * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)\n\t * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n\t * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)\n\t * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)\n\t *\n\t * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.\n\t * `\"h 'in the morning'\"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence\n\t * (e.g. `\"h 'o''clock'\"`).\n\t *\n\t * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n\t * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its\n\t * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n\t * specified in the string input, the time is considered to be in the local timezone.\n\t * @param {string=} format Formatting rules (see Description). If not specified,\n\t * `mediumDate` is used.\n\t * @param {string=} timezone Timezone to be used for formatting. It understands UTC/GMT and the\n\t * continental US time zone abbreviations, but for general use, use a time zone offset, for\n\t * example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)\n\t * If not specified, the timezone of the browser will be used.\n\t * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n\t *\n\t * @example\n\t \n\t \n\t {{1288323623006 | date:'medium'}}:\n\t {{1288323623006 | date:'medium'}}
    \n\t {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}:\n\t {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}
    \n\t {{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}:\n\t {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
    \n\t {{1288323623006 | date:\"MM/dd/yyyy 'at' h:mma\"}}:\n\t {{'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"}}
    \n\t
    \n\t \n\t it('should format date', function() {\n\t expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n\t toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n\t expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n\t toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n\t expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n\t toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n\t expect(element(by.binding(\"'1288323623006' | date:\\\"MM/dd/yyyy 'at' h:mma\\\"\")).getText()).\n\t toMatch(/10\\/2\\d\\/2010 at \\d{1,2}:\\d{2}(AM|PM)/);\n\t });\n\t \n\t
    \n\t */\n\tdateFilter.$inject = ['$locale'];\n\tfunction dateFilter($locale) {\n\t\n\t\n\t var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n\t // 1 2 3 4 5 6 7 8 9 10 11\n\t function jsonStringToDate(string) {\n\t var match;\n\t if (match = string.match(R_ISO8601_STR)) {\n\t var date = new Date(0),\n\t tzHour = 0,\n\t tzMin = 0,\n\t dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n\t timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\t\n\t if (match[9]) {\n\t tzHour = toInt(match[9] + match[10]);\n\t tzMin = toInt(match[9] + match[11]);\n\t }\n\t dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));\n\t var h = toInt(match[4] || 0) - tzHour;\n\t var m = toInt(match[5] || 0) - tzMin;\n\t var s = toInt(match[6] || 0);\n\t var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n\t timeSetter.call(date, h, m, s, ms);\n\t return date;\n\t }\n\t return string;\n\t }\n\t\n\t\n\t return function(date, format, timezone) {\n\t var text = '',\n\t parts = [],\n\t fn, match;\n\t\n\t format = format || 'mediumDate';\n\t format = $locale.DATETIME_FORMATS[format] || format;\n\t if (isString(date)) {\n\t date = NUMBER_STRING.test(date) ? toInt(date) : jsonStringToDate(date);\n\t }\n\t\n\t if (isNumber(date)) {\n\t date = new Date(date);\n\t }\n\t\n\t if (!isDate(date) || !isFinite(date.getTime())) {\n\t return date;\n\t }\n\t\n\t while (format) {\n\t match = DATE_FORMATS_SPLIT.exec(format);\n\t if (match) {\n\t parts = concat(parts, match, 1);\n\t format = parts.pop();\n\t } else {\n\t parts.push(format);\n\t format = null;\n\t }\n\t }\n\t\n\t var dateTimezoneOffset = date.getTimezoneOffset();\n\t if (timezone) {\n\t dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n\t date = convertTimezoneToLocal(date, timezone, true);\n\t }\n\t forEach(parts, function(value) {\n\t fn = DATE_FORMATS[value];\n\t text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset)\n\t : value === \"''\" ? \"'\" : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n\t });\n\t\n\t return text;\n\t };\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name json\n\t * @kind function\n\t *\n\t * @description\n\t * Allows you to convert a JavaScript object into JSON string.\n\t *\n\t * This filter is mostly useful for debugging. When using the double curly {{value}} notation\n\t * the binding is automatically converted to JSON.\n\t *\n\t * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.\n\t * @param {number=} spacing The number of spaces to use per indentation, defaults to 2.\n\t * @returns {string} JSON string.\n\t *\n\t *\n\t * @example\n\t \n\t \n\t
    {{ {'name':'value'} | json }}
    \n\t
    {{ {'name':'value'} | json:4 }}
    \n\t
    \n\t \n\t it('should jsonify filtered objects', function() {\n\t expect(element(by.id('default-spacing')).getText()).toMatch(/\\{\\n \"name\": ?\"value\"\\n}/);\n\t expect(element(by.id('custom-spacing')).getText()).toMatch(/\\{\\n \"name\": ?\"value\"\\n}/);\n\t });\n\t \n\t
    \n\t *\n\t */\n\tfunction jsonFilter() {\n\t return function(object, spacing) {\n\t if (isUndefined(spacing)) {\n\t spacing = 2;\n\t }\n\t return toJson(object, spacing);\n\t };\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name lowercase\n\t * @kind function\n\t * @description\n\t * Converts string to lowercase.\n\t * @see angular.lowercase\n\t */\n\tvar lowercaseFilter = valueFn(lowercase);\n\t\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name uppercase\n\t * @kind function\n\t * @description\n\t * Converts string to uppercase.\n\t * @see angular.uppercase\n\t */\n\tvar uppercaseFilter = valueFn(uppercase);\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name limitTo\n\t * @kind function\n\t *\n\t * @description\n\t * Creates a new array or string containing only a specified number of elements. The elements\n\t * are taken from either the beginning or the end of the source array, string or number, as specified by\n\t * the value and sign (positive or negative) of `limit`. If a number is used as input, it is\n\t * converted to a string.\n\t *\n\t * @param {Array|string|number} input Source array, string or number to be limited.\n\t * @param {string|number} limit The length of the returned array or string. If the `limit` number\n\t * is positive, `limit` number of items from the beginning of the source array/string are copied.\n\t * If the number is negative, `limit` number of items from the end of the source array/string\n\t * are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined,\n\t * the input will be returned unchanged.\n\t * @param {(string|number)=} begin Index at which to begin limitation. As a negative index, `begin`\n\t * indicates an offset from the end of `input`. Defaults to `0`.\n\t * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array\n\t * had less than `limit` elements.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t

    Output numbers: {{ numbers | limitTo:numLimit }}

    \n\t \n\t

    Output letters: {{ letters | limitTo:letterLimit }}

    \n\t \n\t

    Output long number: {{ longNumber | limitTo:longNumberLimit }}

    \n\t
    \n\t
    \n\t \n\t var numLimitInput = element(by.model('numLimit'));\n\t var letterLimitInput = element(by.model('letterLimit'));\n\t var longNumberLimitInput = element(by.model('longNumberLimit'));\n\t var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));\n\t var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));\n\t var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));\n\t\n\t it('should limit the number array to first three items', function() {\n\t expect(numLimitInput.getAttribute('value')).toBe('3');\n\t expect(letterLimitInput.getAttribute('value')).toBe('3');\n\t expect(longNumberLimitInput.getAttribute('value')).toBe('3');\n\t expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');\n\t expect(limitedLetters.getText()).toEqual('Output letters: abc');\n\t expect(limitedLongNumber.getText()).toEqual('Output long number: 234');\n\t });\n\t\n\t // There is a bug in safari and protractor that doesn't like the minus key\n\t // it('should update the output when -3 is entered', function() {\n\t // numLimitInput.clear();\n\t // numLimitInput.sendKeys('-3');\n\t // letterLimitInput.clear();\n\t // letterLimitInput.sendKeys('-3');\n\t // longNumberLimitInput.clear();\n\t // longNumberLimitInput.sendKeys('-3');\n\t // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');\n\t // expect(limitedLetters.getText()).toEqual('Output letters: ghi');\n\t // expect(limitedLongNumber.getText()).toEqual('Output long number: 342');\n\t // });\n\t\n\t it('should not exceed the maximum size of input array', function() {\n\t numLimitInput.clear();\n\t numLimitInput.sendKeys('100');\n\t letterLimitInput.clear();\n\t letterLimitInput.sendKeys('100');\n\t longNumberLimitInput.clear();\n\t longNumberLimitInput.sendKeys('100');\n\t expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');\n\t expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');\n\t expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');\n\t });\n\t \n\t
    \n\t*/\n\tfunction limitToFilter() {\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = toInt(limit);\n\t }\n\t if (isNaN(limit)) return input;\n\t\n\t if (isNumber(input)) input = input.toString();\n\t if (!isArray(input) && !isString(input)) return input;\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : toInt(begin);\n\t begin = (begin < 0) ? Math.max(0, input.length + begin) : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else {\n\t if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t }\n\t };\n\t}\n\t\n\t/**\n\t * @ngdoc filter\n\t * @name orderBy\n\t * @kind function\n\t *\n\t * @description\n\t * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically\n\t * for strings and numerically for numbers. Note: if you notice numbers are not being sorted\n\t * as expected, make sure they are actually being saved as numbers and not strings.\n\t * Array-like values (e.g. NodeLists, jQuery objects, TypedArrays, Strings, etc) are also supported.\n\t *\n\t * @param {Array} array The array (or array-like object) to sort.\n\t * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be\n\t * used by the comparator to determine the order of elements.\n\t *\n\t * Can be one of:\n\t *\n\t * - `function`: Getter function. The result of this function will be sorted using the\n\t * `<`, `===`, `>` operator.\n\t * - `string`: An Angular expression. The result of this expression is used to compare elements\n\t * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by\n\t * 3 first characters of a property called `name`). The result of a constant expression\n\t * is interpreted as a property name to be used in comparisons (for example `\"special name\"`\n\t * to sort object by the value of their `special name` property). An expression can be\n\t * optionally prefixed with `+` or `-` to control ascending or descending sort order\n\t * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array\n\t * element itself is used to compare where sorting.\n\t * - `Array`: An array of function or string predicates. The first predicate in the array\n\t * is used for sorting, but when two items are equivalent, the next predicate is used.\n\t *\n\t * If the predicate is missing or empty then it defaults to `'+'`.\n\t *\n\t * @param {boolean=} reverse Reverse the order of the array.\n\t * @returns {Array} Sorted copy of the source array.\n\t *\n\t *\n\t * @example\n\t * The example below demonstrates a simple ngRepeat, where the data is sorted\n\t * by age in descending order (predicate is set to `'-age'`).\n\t * `reverse` is not set, which means it defaults to `false`.\n\t \n\t \n\t
    \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    NamePhone NumberAge
    {{friend.name}}{{friend.phone}}{{friend.age}}
    \n\t
    \n\t
    \n\t \n\t angular.module('orderByExample', [])\n\t .controller('ExampleController', ['$scope', function($scope) {\n\t $scope.friends =\n\t [{name:'John', phone:'555-1212', age:10},\n\t {name:'Mary', phone:'555-9876', age:19},\n\t {name:'Mike', phone:'555-4321', age:21},\n\t {name:'Adam', phone:'555-5678', age:35},\n\t {name:'Julie', phone:'555-8765', age:29}];\n\t }]);\n\t \n\t
    \n\t *\n\t * The predicate and reverse parameters can be controlled dynamically through scope properties,\n\t * as shown in the next example.\n\t * @example\n\t \n\t \n\t
    \n\t
    Sorting predicate = {{predicate}}; reverse = {{reverse}}
    \n\t
    \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    {{friend.name}}{{friend.phone}}{{friend.age}}
    \n\t
    \n\t
    \n\t \n\t angular.module('orderByExample', [])\n\t .controller('ExampleController', ['$scope', function($scope) {\n\t $scope.friends =\n\t [{name:'John', phone:'555-1212', age:10},\n\t {name:'Mary', phone:'555-9876', age:19},\n\t {name:'Mike', phone:'555-4321', age:21},\n\t {name:'Adam', phone:'555-5678', age:35},\n\t {name:'Julie', phone:'555-8765', age:29}];\n\t $scope.predicate = 'age';\n\t $scope.reverse = true;\n\t $scope.order = function(predicate) {\n\t $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;\n\t $scope.predicate = predicate;\n\t };\n\t }]);\n\t \n\t \n\t .sortorder:after {\n\t content: '\\25b2';\n\t }\n\t .sortorder.reverse:after {\n\t content: '\\25bc';\n\t }\n\t \n\t
    \n\t *\n\t * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the\n\t * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the\n\t * desired parameters.\n\t *\n\t * Example:\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t
    Sorting predicate = {{predicate}}; reverse = {{reverse}}
    \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
    {{friend.name}}{{friend.phone}}{{friend.age}}
    \n\t
    \n\t
    \n\t\n\t \n\t angular.module('orderByExample', [])\n\t .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {\n\t var orderBy = $filter('orderBy');\n\t $scope.friends = [\n\t { name: 'John', phone: '555-1212', age: 10 },\n\t { name: 'Mary', phone: '555-9876', age: 19 },\n\t { name: 'Mike', phone: '555-4321', age: 21 },\n\t { name: 'Adam', phone: '555-5678', age: 35 },\n\t { name: 'Julie', phone: '555-8765', age: 29 }\n\t ];\n\t $scope.order = function(predicate) {\n\t $scope.predicate = predicate;\n\t $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;\n\t $scope.friends = orderBy($scope.friends, predicate, $scope.reverse);\n\t };\n\t $scope.order('age', true);\n\t }]);\n\t \n\t\n\t \n\t .sortorder:after {\n\t content: '\\25b2';\n\t }\n\t .sortorder.reverse:after {\n\t content: '\\25bc';\n\t }\n\t \n\t
    \n\t */\n\torderByFilter.$inject = ['$parse'];\n\tfunction orderByFilter($parse) {\n\t return function(array, sortPredicate, reverseOrder) {\n\t\n\t if (array == null) return array;\n\t if (!isArrayLike(array)) {\n\t throw minErr('orderBy')('notarray', 'Expected array but received: {0}', array);\n\t }\n\t\n\t if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; }\n\t if (sortPredicate.length === 0) { sortPredicate = ['+']; }\n\t\n\t var predicates = processPredicates(sortPredicate, reverseOrder);\n\t // Add a predicate at the end that evaluates to the element index. This makes the\n\t // sort stable as it works as a tie-breaker when all the input predicates cannot\n\t // distinguish between two elements.\n\t predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1});\n\t\n\t // The next three lines are a version of a Swartzian Transform idiom from Perl\n\t // (sometimes called the Decorate-Sort-Undecorate idiom)\n\t // See https://en.wikipedia.org/wiki/Schwartzian_transform\n\t var compareValues = Array.prototype.map.call(array, getComparisonObject);\n\t compareValues.sort(doComparison);\n\t array = compareValues.map(function(item) { return item.value; });\n\t\n\t return array;\n\t\n\t function getComparisonObject(value, index) {\n\t return {\n\t value: value,\n\t predicateValues: predicates.map(function(predicate) {\n\t return getPredicateValue(predicate.get(value), index);\n\t })\n\t };\n\t }\n\t\n\t function doComparison(v1, v2) {\n\t var result = 0;\n\t for (var index=0, length = predicates.length; index < length; ++index) {\n\t result = compare(v1.predicateValues[index], v2.predicateValues[index]) * predicates[index].descending;\n\t if (result) break;\n\t }\n\t return result;\n\t }\n\t };\n\t\n\t function processPredicates(sortPredicate, reverseOrder) {\n\t reverseOrder = reverseOrder ? -1 : 1;\n\t return sortPredicate.map(function(predicate) {\n\t var descending = 1, get = identity;\n\t\n\t if (isFunction(predicate)) {\n\t get = predicate;\n\t } else if (isString(predicate)) {\n\t if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {\n\t descending = predicate.charAt(0) == '-' ? -1 : 1;\n\t predicate = predicate.substring(1);\n\t }\n\t if (predicate !== '') {\n\t get = $parse(predicate);\n\t if (get.constant) {\n\t var key = get();\n\t get = function(value) { return value[key]; };\n\t }\n\t }\n\t }\n\t return { get: get, descending: descending * reverseOrder };\n\t });\n\t }\n\t\n\t function isPrimitive(value) {\n\t switch (typeof value) {\n\t case 'number': /* falls through */\n\t case 'boolean': /* falls through */\n\t case 'string':\n\t return true;\n\t default:\n\t return false;\n\t }\n\t }\n\t\n\t function objectValue(value, index) {\n\t // If `valueOf` is a valid function use that\n\t if (typeof value.valueOf === 'function') {\n\t value = value.valueOf();\n\t if (isPrimitive(value)) return value;\n\t }\n\t // If `toString` is a valid function and not the one from `Object.prototype` use that\n\t if (hasCustomToString(value)) {\n\t value = value.toString();\n\t if (isPrimitive(value)) return value;\n\t }\n\t // We have a basic object so we use the position of the object in the collection\n\t return index;\n\t }\n\t\n\t function getPredicateValue(value, index) {\n\t var type = typeof value;\n\t if (value === null) {\n\t type = 'string';\n\t value = 'null';\n\t } else if (type === 'string') {\n\t value = value.toLowerCase();\n\t } else if (type === 'object') {\n\t value = objectValue(value, index);\n\t }\n\t return { value: value, type: type };\n\t }\n\t\n\t function compare(v1, v2) {\n\t var result = 0;\n\t if (v1.type === v2.type) {\n\t if (v1.value !== v2.value) {\n\t result = v1.value < v2.value ? -1 : 1;\n\t }\n\t } else {\n\t result = v1.type < v2.type ? -1 : 1;\n\t }\n\t return result;\n\t }\n\t}\n\t\n\tfunction ngDirective(directive) {\n\t if (isFunction(directive)) {\n\t directive = {\n\t link: directive\n\t };\n\t }\n\t directive.restrict = directive.restrict || 'AC';\n\t return valueFn(directive);\n\t}\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name a\n\t * @restrict E\n\t *\n\t * @description\n\t * Modifies the default behavior of the html A tag so that the default action is prevented when\n\t * the href attribute is empty.\n\t *\n\t * This change permits the easy creation of action links with the `ngClick` directive\n\t * without changing the location or causing page reloads, e.g.:\n\t * `Add Item`\n\t */\n\tvar htmlAnchorDirective = valueFn({\n\t restrict: 'E',\n\t compile: function(element, attr) {\n\t if (!attr.href && !attr.xlinkHref) {\n\t return function(scope, element) {\n\t // If the linked element is not an anchor tag anymore, do nothing\n\t if (element[0].nodeName.toLowerCase() !== 'a') return;\n\t\n\t // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n\t var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?\n\t 'xlink:href' : 'href';\n\t element.on('click', function(event) {\n\t // if we have no href url, then don't navigate anywhere.\n\t if (!element.attr(href)) {\n\t event.preventDefault();\n\t }\n\t });\n\t };\n\t }\n\t }\n\t});\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngHref\n\t * @restrict A\n\t * @priority 99\n\t *\n\t * @description\n\t * Using Angular markup like `{{hash}}` in an href attribute will\n\t * make the link go to the wrong URL if the user clicks it before\n\t * Angular has a chance to replace the `{{hash}}` markup with its\n\t * value. Until Angular replaces the markup the link will be broken\n\t * and will most likely return a 404 error. The `ngHref` directive\n\t * solves this problem.\n\t *\n\t * The wrong way to write it:\n\t * ```html\n\t * link1\n\t * ```\n\t *\n\t * The correct way to write it:\n\t * ```html\n\t * link1\n\t * ```\n\t *\n\t * @element A\n\t * @param {template} ngHref any string which can contain `{{}}` markup.\n\t *\n\t * @example\n\t * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes\n\t * in links and their different behaviors:\n\t \n\t \n\t
    \n\t link 1 (link, don't reload)
    \n\t link 2 (link, don't reload)
    \n\t link 3 (link, reload!)
    \n\t anchor (link, don't reload)
    \n\t anchor (no link)
    \n\t link (link, change location)\n\t
    \n\t \n\t it('should execute ng-click but not reload when href without value', function() {\n\t element(by.id('link-1')).click();\n\t expect(element(by.model('value')).getAttribute('value')).toEqual('1');\n\t expect(element(by.id('link-1')).getAttribute('href')).toBe('');\n\t });\n\t\n\t it('should execute ng-click but not reload when href empty string', function() {\n\t element(by.id('link-2')).click();\n\t expect(element(by.model('value')).getAttribute('value')).toEqual('2');\n\t expect(element(by.id('link-2')).getAttribute('href')).toBe('');\n\t });\n\t\n\t it('should execute ng-click and change url when ng-href specified', function() {\n\t expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\\/123$/);\n\t\n\t element(by.id('link-3')).click();\n\t\n\t // At this point, we navigate away from an Angular page, so we need\n\t // to use browser.driver to get the base webdriver.\n\t\n\t browser.wait(function() {\n\t return browser.driver.getCurrentUrl().then(function(url) {\n\t return url.match(/\\/123$/);\n\t });\n\t }, 5000, 'page should navigate to /123');\n\t });\n\t\n\t it('should execute ng-click but not reload when href empty string and name specified', function() {\n\t element(by.id('link-4')).click();\n\t expect(element(by.model('value')).getAttribute('value')).toEqual('4');\n\t expect(element(by.id('link-4')).getAttribute('href')).toBe('');\n\t });\n\t\n\t it('should execute ng-click but not reload when no href but name specified', function() {\n\t element(by.id('link-5')).click();\n\t expect(element(by.model('value')).getAttribute('value')).toEqual('5');\n\t expect(element(by.id('link-5')).getAttribute('href')).toBe(null);\n\t });\n\t\n\t it('should only change url when only ng-href', function() {\n\t element(by.model('value')).clear();\n\t element(by.model('value')).sendKeys('6');\n\t expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\\/6$/);\n\t\n\t element(by.id('link-6')).click();\n\t\n\t // At this point, we navigate away from an Angular page, so we need\n\t // to use browser.driver to get the base webdriver.\n\t browser.wait(function() {\n\t return browser.driver.getCurrentUrl().then(function(url) {\n\t return url.match(/\\/6$/);\n\t });\n\t }, 5000, 'page should navigate to /6');\n\t });\n\t \n\t
    \n\t */\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngSrc\n\t * @restrict A\n\t * @priority 99\n\t *\n\t * @description\n\t * Using Angular markup like `{{hash}}` in a `src` attribute doesn't\n\t * work right: The browser will fetch from the URL with the literal\n\t * text `{{hash}}` until Angular replaces the expression inside\n\t * `{{hash}}`. The `ngSrc` directive solves this problem.\n\t *\n\t * The buggy way to write it:\n\t * ```html\n\t * \"Description\"/\n\t * ```\n\t *\n\t * The correct way to write it:\n\t * ```html\n\t * \"Description\"\n\t * ```\n\t *\n\t * @element IMG\n\t * @param {template} ngSrc any string which can contain `{{}}` markup.\n\t */\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngSrcset\n\t * @restrict A\n\t * @priority 99\n\t *\n\t * @description\n\t * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't\n\t * work right: The browser will fetch from the URL with the literal\n\t * text `{{hash}}` until Angular replaces the expression inside\n\t * `{{hash}}`. The `ngSrcset` directive solves this problem.\n\t *\n\t * The buggy way to write it:\n\t * ```html\n\t * \"Description\"/\n\t * ```\n\t *\n\t * The correct way to write it:\n\t * ```html\n\t * \"Description\"\n\t * ```\n\t *\n\t * @element IMG\n\t * @param {template} ngSrcset any string which can contain `{{}}` markup.\n\t */\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngDisabled\n\t * @restrict A\n\t * @priority 100\n\t *\n\t * @description\n\t *\n\t * This directive sets the `disabled` attribute on the element if the\n\t * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy.\n\t *\n\t * A special directive is necessary because we cannot use interpolation inside the `disabled`\n\t * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t it('should toggle button', function() {\n\t expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();\n\t element(by.model('checked')).click();\n\t expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();\n\t });\n\t \n\t
    \n\t *\n\t * @element INPUT\n\t * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,\n\t * then the `disabled` attribute will be set on the element\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngChecked\n\t * @restrict A\n\t * @priority 100\n\t *\n\t * @description\n\t * Sets the `checked` attribute on the element, if the expression inside `ngChecked` is truthy.\n\t *\n\t * Note that this directive should not be used together with {@link ngModel `ngModel`},\n\t * as this can lead to unexpected behavior.\n\t *\n\t * A special directive is necessary because we cannot use interpolation inside the `checked`\n\t * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t it('should check both checkBoxes', function() {\n\t expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();\n\t element(by.model('master')).click();\n\t expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();\n\t });\n\t \n\t
    \n\t *\n\t * @element INPUT\n\t * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,\n\t * then the `checked` attribute will be set on the element\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngReadonly\n\t * @restrict A\n\t * @priority 100\n\t *\n\t * @description\n\t *\n\t * Sets the `readOnly` attribute on the element, if the expression inside `ngReadonly` is truthy.\n\t *\n\t * A special directive is necessary because we cannot use interpolation inside the `readOnly`\n\t * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t it('should toggle readonly attr', function() {\n\t expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeFalsy();\n\t element(by.model('checked')).click();\n\t expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeTruthy();\n\t });\n\t \n\t
    \n\t *\n\t * @element INPUT\n\t * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,\n\t * then special attribute \"readonly\" will be set on the element\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngSelected\n\t * @restrict A\n\t * @priority 100\n\t *\n\t * @description\n\t *\n\t * Sets the `selected` attribute on the element, if the expression inside `ngSelected` is truthy.\n\t *\n\t * A special directive is necessary because we cannot use interpolation inside the `selected`\n\t * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t it('should select Greetings!', function() {\n\t expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();\n\t element(by.model('selected')).click();\n\t expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();\n\t });\n\t \n\t
    \n\t *\n\t * @element OPTION\n\t * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,\n\t * then special attribute \"selected\" will be set on the element\n\t */\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngOpen\n\t * @restrict A\n\t * @priority 100\n\t *\n\t * @description\n\t *\n\t * Sets the `open` attribute on the element, if the expression inside `ngOpen` is truthy.\n\t *\n\t * A special directive is necessary because we cannot use interpolation inside the `open`\n\t * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n\t *\n\t * @example\n\t \n\t \n\t
    \n\t
    \n\t Show/Hide me\n\t
    \n\t
    \n\t \n\t it('should toggle open', function() {\n\t expect(element(by.id('details')).getAttribute('open')).toBeFalsy();\n\t element(by.model('open')).click();\n\t expect(element(by.id('details')).getAttribute('open')).toBeTruthy();\n\t });\n\t \n\t
    \n\t *\n\t * @element DETAILS\n\t * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,\n\t * then special attribute \"open\" will be set on the element\n\t */\n\t\n\tvar ngAttributeAliasDirectives = {};\n\t\n\t// boolean attrs are evaluated\n\tforEach(BOOLEAN_ATTR, function(propName, attrName) {\n\t // binding to multiple is not supported\n\t if (propName == \"multiple\") return;\n\t\n\t function defaultLinkFn(scope, element, attr) {\n\t scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {\n\t attr.$set(attrName, !!value);\n\t });\n\t }\n\t\n\t var normalized = directiveNormalize('ng-' + attrName);\n\t var linkFn = defaultLinkFn;\n\t\n\t if (propName === 'checked') {\n\t linkFn = function(scope, element, attr) {\n\t // ensuring ngChecked doesn't interfere with ngModel when both are set on the same input\n\t if (attr.ngModel !== attr[normalized]) {\n\t defaultLinkFn(scope, element, attr);\n\t }\n\t };\n\t }\n\t\n\t ngAttributeAliasDirectives[normalized] = function() {\n\t return {\n\t restrict: 'A',\n\t priority: 100,\n\t link: linkFn\n\t };\n\t };\n\t});\n\t\n\t// aliased input attrs are evaluated\n\tforEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {\n\t ngAttributeAliasDirectives[ngAttr] = function() {\n\t return {\n\t priority: 100,\n\t link: function(scope, element, attr) {\n\t //special case ngPattern when a literal regular expression value\n\t //is used as the expression (this way we don't have to watch anything).\n\t if (ngAttr === \"ngPattern\" && attr.ngPattern.charAt(0) == \"/\") {\n\t var match = attr.ngPattern.match(REGEX_STRING_REGEXP);\n\t if (match) {\n\t attr.$set(\"ngPattern\", new RegExp(match[1], match[2]));\n\t return;\n\t }\n\t }\n\t\n\t scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {\n\t attr.$set(ngAttr, value);\n\t });\n\t }\n\t };\n\t };\n\t});\n\t\n\t// ng-src, ng-srcset, ng-href are interpolated\n\tforEach(['src', 'srcset', 'href'], function(attrName) {\n\t var normalized = directiveNormalize('ng-' + attrName);\n\t ngAttributeAliasDirectives[normalized] = function() {\n\t return {\n\t priority: 99, // it needs to run after the attributes are interpolated\n\t link: function(scope, element, attr) {\n\t var propName = attrName,\n\t name = attrName;\n\t\n\t if (attrName === 'href' &&\n\t toString.call(element.prop('href')) === '[object SVGAnimatedString]') {\n\t name = 'xlinkHref';\n\t attr.$attr[name] = 'xlink:href';\n\t propName = null;\n\t }\n\t\n\t attr.$observe(normalized, function(value) {\n\t if (!value) {\n\t if (attrName === 'href') {\n\t attr.$set(name, null);\n\t }\n\t return;\n\t }\n\t\n\t attr.$set(name, value);\n\t\n\t // on IE, if \"ng:src\" directive declaration is used and \"src\" attribute doesn't exist\n\t // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need\n\t // to set the property as well to achieve the desired effect.\n\t // we use attr[attrName] value since $set can sanitize the url.\n\t if (msie && propName) element.prop(propName, attr[name]);\n\t });\n\t }\n\t };\n\t };\n\t});\n\t\n\t/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true\n\t */\n\tvar nullFormCtrl = {\n\t $addControl: noop,\n\t $$renameControl: nullFormRenameControl,\n\t $removeControl: noop,\n\t $setValidity: noop,\n\t $setDirty: noop,\n\t $setPristine: noop,\n\t $setSubmitted: noop\n\t},\n\tSUBMITTED_CLASS = 'ng-submitted';\n\t\n\tfunction nullFormRenameControl(control, name) {\n\t control.$name = name;\n\t}\n\t\n\t/**\n\t * @ngdoc type\n\t * @name form.FormController\n\t *\n\t * @property {boolean} $pristine True if user has not interacted with the form yet.\n\t * @property {boolean} $dirty True if user has already interacted with the form.\n\t * @property {boolean} $valid True if all of the containing forms and controls are valid.\n\t * @property {boolean} $invalid True if at least one containing control or form is invalid.\n\t * @property {boolean} $pending True if at least one containing control or form is pending.\n\t * @property {boolean} $submitted True if user has submitted the form even if its invalid.\n\t *\n\t * @property {Object} $error Is an object hash, containing references to controls or\n\t * forms with failing validators, where:\n\t *\n\t * - keys are validation tokens (error names),\n\t * - values are arrays of controls or forms that have a failing validator for given error name.\n\t *\n\t * Built-in validation tokens:\n\t *\n\t * - `email`\n\t * - `max`\n\t * - `maxlength`\n\t * - `min`\n\t * - `minlength`\n\t * - `number`\n\t * - `pattern`\n\t * - `required`\n\t * - `url`\n\t * - `date`\n\t * - `datetimelocal`\n\t * - `time`\n\t * - `week`\n\t * - `month`\n\t *\n\t * @description\n\t * `FormController` keeps track of all its controls and nested forms as well as the state of them,\n\t * such as being valid/invalid or dirty/pristine.\n\t *\n\t * Each {@link ng.directive:form form} directive creates an instance\n\t * of `FormController`.\n\t *\n\t */\n\t//asks for $scope to fool the BC controller module\n\tFormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];\n\tfunction FormController(element, attrs, $scope, $animate, $interpolate) {\n\t var form = this,\n\t controls = [];\n\t\n\t // init state\n\t form.$error = {};\n\t form.$$success = {};\n\t form.$pending = undefined;\n\t form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n\t form.$dirty = false;\n\t form.$pristine = true;\n\t form.$valid = true;\n\t form.$invalid = false;\n\t form.$submitted = false;\n\t form.$$parentForm = nullFormCtrl;\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$rollbackViewValue\n\t *\n\t * @description\n\t * Rollback all form controls pending updates to the `$modelValue`.\n\t *\n\t * Updates may be pending by a debounced event or because the input is waiting for a some future\n\t * event defined in `ng-model-options`. This method is typically needed by the reset button of\n\t * a form that uses `ng-model-options` to pend updates.\n\t */\n\t form.$rollbackViewValue = function() {\n\t forEach(controls, function(control) {\n\t control.$rollbackViewValue();\n\t });\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$commitViewValue\n\t *\n\t * @description\n\t * Commit all form controls pending updates to the `$modelValue`.\n\t *\n\t * Updates may be pending by a debounced event or because the input is waiting for a some future\n\t * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`\n\t * usually handles calling this in response to input events.\n\t */\n\t form.$commitViewValue = function() {\n\t forEach(controls, function(control) {\n\t control.$commitViewValue();\n\t });\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$addControl\n\t * @param {object} control control object, either a {@link form.FormController} or an\n\t * {@link ngModel.NgModelController}\n\t *\n\t * @description\n\t * Register a control with the form. Input elements using ngModelController do this automatically\n\t * when they are linked.\n\t *\n\t * Note that the current state of the control will not be reflected on the new parent form. This\n\t * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine`\n\t * state.\n\t *\n\t * However, if the method is used programmatically, for example by adding dynamically created controls,\n\t * or controls that have been previously removed without destroying their corresponding DOM element,\n\t * it's the developers responsibility to make sure the current state propagates to the parent form.\n\t *\n\t * For example, if an input control is added that is already `$dirty` and has `$error` properties,\n\t * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form.\n\t */\n\t form.$addControl = function(control) {\n\t // Breaking change - before, inputs whose name was \"hasOwnProperty\" were quietly ignored\n\t // and not added to the scope. Now we throw an error.\n\t assertNotHasOwnProperty(control.$name, 'input');\n\t controls.push(control);\n\t\n\t if (control.$name) {\n\t form[control.$name] = control;\n\t }\n\t\n\t control.$$parentForm = form;\n\t };\n\t\n\t // Private API: rename a form control\n\t form.$$renameControl = function(control, newName) {\n\t var oldName = control.$name;\n\t\n\t if (form[oldName] === control) {\n\t delete form[oldName];\n\t }\n\t form[newName] = control;\n\t control.$name = newName;\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$removeControl\n\t * @param {object} control control object, either a {@link form.FormController} or an\n\t * {@link ngModel.NgModelController}\n\t *\n\t * @description\n\t * Deregister a control from the form.\n\t *\n\t * Input elements using ngModelController do this automatically when they are destroyed.\n\t *\n\t * Note that only the removed control's validation state (`$errors`etc.) will be removed from the\n\t * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be\n\t * different from case to case. For example, removing the only `$dirty` control from a form may or\n\t * may not mean that the form is still `$dirty`.\n\t */\n\t form.$removeControl = function(control) {\n\t if (control.$name && form[control.$name] === control) {\n\t delete form[control.$name];\n\t }\n\t forEach(form.$pending, function(value, name) {\n\t form.$setValidity(name, null, control);\n\t });\n\t forEach(form.$error, function(value, name) {\n\t form.$setValidity(name, null, control);\n\t });\n\t forEach(form.$$success, function(value, name) {\n\t form.$setValidity(name, null, control);\n\t });\n\t\n\t arrayRemove(controls, control);\n\t control.$$parentForm = nullFormCtrl;\n\t };\n\t\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$setValidity\n\t *\n\t * @description\n\t * Sets the validity of a form control.\n\t *\n\t * This method will also propagate to parent forms.\n\t */\n\t addSetValidityMethod({\n\t ctrl: this,\n\t $element: element,\n\t set: function(object, property, controller) {\n\t var list = object[property];\n\t if (!list) {\n\t object[property] = [controller];\n\t } else {\n\t var index = list.indexOf(controller);\n\t if (index === -1) {\n\t list.push(controller);\n\t }\n\t }\n\t },\n\t unset: function(object, property, controller) {\n\t var list = object[property];\n\t if (!list) {\n\t return;\n\t }\n\t arrayRemove(list, controller);\n\t if (list.length === 0) {\n\t delete object[property];\n\t }\n\t },\n\t $animate: $animate\n\t });\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$setDirty\n\t *\n\t * @description\n\t * Sets the form to a dirty state.\n\t *\n\t * This method can be called to add the 'ng-dirty' class and set the form to a dirty\n\t * state (ng-dirty class). This method will also propagate to parent forms.\n\t */\n\t form.$setDirty = function() {\n\t $animate.removeClass(element, PRISTINE_CLASS);\n\t $animate.addClass(element, DIRTY_CLASS);\n\t form.$dirty = true;\n\t form.$pristine = false;\n\t form.$$parentForm.$setDirty();\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$setPristine\n\t *\n\t * @description\n\t * Sets the form to its pristine state.\n\t *\n\t * This method can be called to remove the 'ng-dirty' class and set the form to its pristine\n\t * state (ng-pristine class). This method will also propagate to all the controls contained\n\t * in this form.\n\t *\n\t * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after\n\t * saving or resetting it.\n\t */\n\t form.$setPristine = function() {\n\t $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);\n\t form.$dirty = false;\n\t form.$pristine = true;\n\t form.$submitted = false;\n\t forEach(controls, function(control) {\n\t control.$setPristine();\n\t });\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$setUntouched\n\t *\n\t * @description\n\t * Sets the form to its untouched state.\n\t *\n\t * This method can be called to remove the 'ng-touched' class and set the form controls to their\n\t * untouched state (ng-untouched class).\n\t *\n\t * Setting a form controls back to their untouched state is often useful when setting the form\n\t * back to its pristine state.\n\t */\n\t form.$setUntouched = function() {\n\t forEach(controls, function(control) {\n\t control.$setUntouched();\n\t });\n\t };\n\t\n\t /**\n\t * @ngdoc method\n\t * @name form.FormController#$setSubmitted\n\t *\n\t * @description\n\t * Sets the form to its submitted state.\n\t */\n\t form.$setSubmitted = function() {\n\t $animate.addClass(element, SUBMITTED_CLASS);\n\t form.$submitted = true;\n\t form.$$parentForm.$setSubmitted();\n\t };\n\t}\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name ngForm\n\t * @restrict EAC\n\t *\n\t * @description\n\t * Nestable alias of {@link ng.directive:form `form`} directive. HTML\n\t * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a\n\t * sub-group of controls needs to be determined.\n\t *\n\t * Note: the purpose of `ngForm` is to group controls,\n\t * but not to be a replacement for the `
    ` tag with all of its capabilities\n\t * (e.g. posting to the server, ...).\n\t *\n\t * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into\n\t * related scope, under this name.\n\t *\n\t */\n\t\n\t /**\n\t * @ngdoc directive\n\t * @name form\n\t * @restrict E\n\t *\n\t * @description\n\t * Directive that instantiates\n\t * {@link form.FormController FormController}.\n\t *\n\t * If the `name` attribute is specified, the form controller is published onto the current scope under\n\t * this name.\n\t *\n\t * # Alias: {@link ng.directive:ngForm `ngForm`}\n\t *\n\t * In Angular, forms can be nested. This means that the outer form is valid when all of the child\n\t * forms are valid as well. However, browsers do not allow nesting of `` elements, so\n\t * Angular provides the {@link ng.directive:ngForm `ngForm`} directive, which behaves identically to\n\t * `form` but can be nested. Nested forms can be useful, for example, if the validity of a sub-group\n\t * of controls needs to be determined.\n\t *\n\t * # CSS classes\n\t * - `ng-valid` is set if the form is valid.\n\t * - `ng-invalid` is set if the form is invalid.\n\t * - `ng-pending` is set if the form is pending.\n\t * - `ng-pristine` is set if the form is pristine.\n\t * - `ng-dirty` is set if the form is dirty.\n\t * - `ng-submitted` is set if the form was submitted.\n\t *\n\t * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n\t *\n\t *\n\t * # Submitting a form and preventing the default action\n\t *\n\t * Since the role of forms in client-side Angular applications is different than in classical\n\t * roundtrip apps, it is desirable for the browser not to translate the form submission into a full\n\t * page reload that sends the data to the server. Instead some javascript logic should be triggered\n\t * to handle the form submission in an application-specific way.\n\t *\n\t * For this reason, Angular prevents the default action (form submission to the server) unless the\n\t * `` element has an `action` attribute specified.\n\t *\n\t * You can use one of the following two ways to specify what javascript method should be called when\n\t * a form is submitted:\n\t *\n\t * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element\n\t * - {@link ng.directive:ngClick ngClick} directive on the first\n\t * button or input field of type submit (input[type=submit])\n\t *\n\t * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}\n\t * or {@link ng.directive:ngClick ngClick} directives.\n\t * This is because of the following form submission rules in the HTML specification:\n\t *\n\t * - If a form has only one input field then hitting enter in this field triggers form submit\n\t * (`ngSubmit`)\n\t * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter\n\t * doesn't trigger submit\n\t * - if a form has one or more input fields and one or more buttons or input[type=submit] then\n\t * hitting enter in any of the input fields will trigger the click handler on the *first* button or\n\t * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)\n\t *\n\t * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is\n\t * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`\n\t * to have access to the updated model.\n\t *\n\t * ## Animation Hooks\n\t *\n\t * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.\n\t * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any\n\t * other validations that are performed within the form. Animations in ngForm are similar to how\n\t * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well\n\t * as JS animations.\n\t *\n\t * The following example shows a simple way to utilize CSS transitions to style a form element\n\t * that has been rendered as invalid after it has been validated:\n\t *\n\t *
    \n\t * //be sure to include ngAnimate as a module to hook into more\n\t * //advanced animations\n\t * .my-form {\n\t *   transition:0.5s linear all;\n\t *   background: white;\n\t * }\n\t * .my-form.ng-invalid {\n\t *   background: red;\n\t *   color:white;\n\t * }\n\t * 
    \n\t *\n\t * @example\n\t \n\t \n\t \n\t \n\t \n\t userType: \n\t Required!
    \n\t userType = {{userType}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t \n\t
    \n\t \n\t it('should initialize to model', function() {\n\t var userType = element(by.binding('userType'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t\n\t expect(userType.getText()).toContain('guest');\n\t expect(valid.getText()).toContain('true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t var userType = element(by.binding('userType'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var userInput = element(by.model('userType'));\n\t\n\t userInput.clear();\n\t userInput.sendKeys('');\n\t\n\t expect(userType.getText()).toEqual('userType =');\n\t expect(valid.getText()).toContain('false');\n\t });\n\t \n\t
    \n\t *\n\t * @param {string=} name Name of the form. If specified, the form controller will be published into\n\t * related scope, under this name.\n\t */\n\tvar formDirectiveFactory = function(isNgForm) {\n\t return ['$timeout', '$parse', function($timeout, $parse) {\n\t var formDirective = {\n\t name: 'form',\n\t restrict: isNgForm ? 'EAC' : 'E',\n\t require: ['form', '^^?form'], //first is the form's own ctrl, second is an optional parent form\n\t controller: FormController,\n\t compile: function ngFormCompile(formElement, attr) {\n\t // Setup initial state of the control\n\t formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);\n\t\n\t var nameAttr = attr.name ? 'name' : (isNgForm && attr.ngForm ? 'ngForm' : false);\n\t\n\t return {\n\t pre: function ngFormPreLink(scope, formElement, attr, ctrls) {\n\t var controller = ctrls[0];\n\t\n\t // if `action` attr is not present on the form, prevent the default action (submission)\n\t if (!('action' in attr)) {\n\t // we can't use jq events because if a form is destroyed during submission the default\n\t // action is not prevented. see #1238\n\t //\n\t // IE 9 is not affected because it doesn't fire a submit event and try to do a full\n\t // page reload if the form was destroyed by submission of the form via a click handler\n\t // on a button in the form. Looks like an IE9 specific bug.\n\t var handleFormSubmission = function(event) {\n\t scope.$apply(function() {\n\t controller.$commitViewValue();\n\t controller.$setSubmitted();\n\t });\n\t\n\t event.preventDefault();\n\t };\n\t\n\t addEventListenerFn(formElement[0], 'submit', handleFormSubmission);\n\t\n\t // unregister the preventDefault listener so that we don't not leak memory but in a\n\t // way that will achieve the prevention of the default action.\n\t formElement.on('$destroy', function() {\n\t $timeout(function() {\n\t removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);\n\t }, 0, false);\n\t });\n\t }\n\t\n\t var parentFormCtrl = ctrls[1] || controller.$$parentForm;\n\t parentFormCtrl.$addControl(controller);\n\t\n\t var setter = nameAttr ? getSetter(controller.$name) : noop;\n\t\n\t if (nameAttr) {\n\t setter(scope, controller);\n\t attr.$observe(nameAttr, function(newValue) {\n\t if (controller.$name === newValue) return;\n\t setter(scope, undefined);\n\t controller.$$parentForm.$$renameControl(controller, newValue);\n\t setter = getSetter(controller.$name);\n\t setter(scope, controller);\n\t });\n\t }\n\t formElement.on('$destroy', function() {\n\t controller.$$parentForm.$removeControl(controller);\n\t setter(scope, undefined);\n\t extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards\n\t });\n\t }\n\t };\n\t }\n\t };\n\t\n\t return formDirective;\n\t\n\t function getSetter(expression) {\n\t if (expression === '') {\n\t //create an assignable expression, so forms with an empty name can be renamed later\n\t return $parse('this[\"\"]').assign;\n\t }\n\t return $parse(expression).assign || noop;\n\t }\n\t }];\n\t};\n\t\n\tvar formDirective = formDirectiveFactory();\n\tvar ngFormDirective = formDirectiveFactory(true);\n\t\n\t/* global VALID_CLASS: false,\n\t INVALID_CLASS: false,\n\t PRISTINE_CLASS: false,\n\t DIRTY_CLASS: false,\n\t UNTOUCHED_CLASS: false,\n\t TOUCHED_CLASS: false,\n\t ngModelMinErr: false,\n\t*/\n\t\n\t// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231\n\tvar ISO_DATE_REGEXP = /\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)/;\n\t// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987)\n\t// Note: We are being more lenient, because browsers are too.\n\t// 1. Scheme\n\t// 2. Slashes\n\t// 3. Username\n\t// 4. Password\n\t// 5. Hostname\n\t// 6. Port\n\t// 7. Path\n\t// 8. Query\n\t// 9. Fragment\n\t// 1111111111111111 222 333333 44444 555555555555555555555555 666 77777777 8888888 999\n\tvar URL_REGEXP = /^[a-z][a-z\\d.+-]*:\\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\\s:/?#]+|\\[[a-f\\d:]+\\])(?::\\d+)?(?:\\/[^?#]*)?(?:\\?[^#]*)?(?:#.*)?$/i;\n\tvar EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;\n\tvar NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))([eE][+-]?\\d+)?\\s*$/;\n\tvar DATE_REGEXP = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\tvar DATETIMELOCAL_REGEXP = /^(\\d{4})-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/;\n\tvar WEEK_REGEXP = /^(\\d{4})-W(\\d\\d)$/;\n\tvar MONTH_REGEXP = /^(\\d{4})-(\\d\\d)$/;\n\tvar TIME_REGEXP = /^(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/;\n\t\n\tvar inputType = {\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[text]\n\t *\n\t * @description\n\t * Standard HTML text input with angular data binding, inherited by most of the `input` elements.\n\t *\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} required Adds `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n\t * minlength.\n\t * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n\t * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n\t * any length.\n\t * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n\t * that contains the regular expression body that will be converted to a regular expression\n\t * as in the ngPattern directive.\n\t * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n\t * does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n\t * If the expression evaluates to a RegExp object, then this is used directly.\n\t * If the expression evaluates to a string, then it will be converted to a RegExp\n\t * after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n\t * `new RegExp('^abc$')`.
    \n\t * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n\t * start at the index of the last search's match, thus not taking the whole input value into\n\t * account.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n\t * This parameter is ignored for input[type=password] controls, which will never trim the\n\t * input.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Single word only!\n\t
    \n\t text = {{example.text}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t
    \n\t
    \n\t \n\t var text = element(by.binding('example.text'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('example.text'));\n\t\n\t it('should initialize to model', function() {\n\t expect(text.getText()).toContain('guest');\n\t expect(valid.getText()).toContain('true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t input.clear();\n\t input.sendKeys('');\n\t\n\t expect(text.getText()).toEqual('text =');\n\t expect(valid.getText()).toContain('false');\n\t });\n\t\n\t it('should be invalid if multi word', function() {\n\t input.clear();\n\t input.sendKeys('hello world');\n\t\n\t expect(valid.getText()).toContain('false');\n\t });\n\t \n\t
    \n\t */\n\t 'text': textInputType,\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[date]\n\t *\n\t * @description\n\t * Input with date validation and transformation. In browsers that do not yet support\n\t * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601\n\t * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many\n\t * modern browsers do not yet support this input type, it is important to provide cues to users on the\n\t * expected input format via a placeholder or label.\n\t *\n\t * The model must always be a Date object, otherwise Angular will throw an error.\n\t * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n\t *\n\t * The timezone to be used to read/write the `Date` instance in the model can be defined using\n\t * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a\n\t * valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute\n\t * (e.g. `min=\"{{minDate | date:'yyyy-MM-dd'}}\"`). Note that `min` will also add native HTML5\n\t * constraint validation.\n\t * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be\n\t * a valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute\n\t * (e.g. `max=\"{{maxDate | date:'yyyy-MM-dd'}}\"`). Note that `max` will also add native HTML5\n\t * constraint validation.\n\t * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO date string\n\t * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n\t * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO date string\n\t * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Not a valid date!\n\t
    \n\t value = {{example.value | date: \"yyyy-MM-dd\"}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t
    \n\t
    \n\t \n\t var value = element(by.binding('example.value | date: \"yyyy-MM-dd\"'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('example.value'));\n\t\n\t // currently protractor/webdriver does not support\n\t // sending keys to all known HTML5 input controls\n\t // for various browsers (see https://github.com/angular/protractor/issues/562).\n\t function setInput(val) {\n\t // set the value of the element and force validation.\n\t var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n\t \"ipt.value = '\" + val + \"';\" +\n\t \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n\t browser.executeScript(scr);\n\t }\n\t\n\t it('should initialize to model', function() {\n\t expect(value.getText()).toContain('2013-10-22');\n\t expect(valid.getText()).toContain('myForm.input.$valid = true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t setInput('');\n\t expect(value.getText()).toEqual('value =');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t\n\t it('should be invalid if over max', function() {\n\t setInput('2015-01-01');\n\t expect(value.getText()).toContain('');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t \n\t
    \n\t */\n\t 'date': createDateInputType('date', DATE_REGEXP,\n\t createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),\n\t 'yyyy-MM-dd'),\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[datetime-local]\n\t *\n\t * @description\n\t * Input with datetime validation and transformation. In browsers that do not yet support\n\t * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n\t * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.\n\t *\n\t * The model must always be a Date object, otherwise Angular will throw an error.\n\t * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n\t *\n\t * The timezone to be used to read/write the `Date` instance in the model can be defined using\n\t * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n\t * This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation\n\t * inside this attribute (e.g. `min=\"{{minDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}\"`).\n\t * Note that `min` will also add native HTML5 constraint validation.\n\t * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n\t * This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation\n\t * inside this attribute (e.g. `max=\"{{maxDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}\"`).\n\t * Note that `max` will also add native HTML5 constraint validation.\n\t * @param {(date|string)=} ngMin Sets the `min` validation error key to the Date / ISO datetime string\n\t * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n\t * @param {(date|string)=} ngMax Sets the `max` validation error key to the Date / ISO datetime string\n\t * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Not a valid date!\n\t
    \n\t value = {{example.value | date: \"yyyy-MM-ddTHH:mm:ss\"}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t
    \n\t
    \n\t \n\t var value = element(by.binding('example.value | date: \"yyyy-MM-ddTHH:mm:ss\"'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('example.value'));\n\t\n\t // currently protractor/webdriver does not support\n\t // sending keys to all known HTML5 input controls\n\t // for various browsers (https://github.com/angular/protractor/issues/562).\n\t function setInput(val) {\n\t // set the value of the element and force validation.\n\t var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n\t \"ipt.value = '\" + val + \"';\" +\n\t \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n\t browser.executeScript(scr);\n\t }\n\t\n\t it('should initialize to model', function() {\n\t expect(value.getText()).toContain('2010-12-28T14:57:00');\n\t expect(valid.getText()).toContain('myForm.input.$valid = true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t setInput('');\n\t expect(value.getText()).toEqual('value =');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t\n\t it('should be invalid if over max', function() {\n\t setInput('2015-01-01T23:59:00');\n\t expect(value.getText()).toContain('');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t \n\t
    \n\t */\n\t 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,\n\t createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),\n\t 'yyyy-MM-ddTHH:mm:ss.sss'),\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[time]\n\t *\n\t * @description\n\t * Input with time validation and transformation. In browsers that do not yet support\n\t * the HTML5 time input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n\t * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a\n\t * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.\n\t *\n\t * The model must always be a Date object, otherwise Angular will throw an error.\n\t * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n\t *\n\t * The timezone to be used to read/write the `Date` instance in the model can be defined using\n\t * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n\t * This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this\n\t * attribute (e.g. `min=\"{{minTime | date:'HH:mm:ss'}}\"`). Note that `min` will also add\n\t * native HTML5 constraint validation.\n\t * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n\t * This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this\n\t * attribute (e.g. `max=\"{{maxTime | date:'HH:mm:ss'}}\"`). Note that `max` will also add\n\t * native HTML5 constraint validation.\n\t * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO time string the\n\t * `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n\t * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO time string the\n\t * `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Not a valid date!\n\t
    \n\t value = {{example.value | date: \"HH:mm:ss\"}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t
    \n\t
    \n\t \n\t var value = element(by.binding('example.value | date: \"HH:mm:ss\"'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('example.value'));\n\t\n\t // currently protractor/webdriver does not support\n\t // sending keys to all known HTML5 input controls\n\t // for various browsers (https://github.com/angular/protractor/issues/562).\n\t function setInput(val) {\n\t // set the value of the element and force validation.\n\t var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n\t \"ipt.value = '\" + val + \"';\" +\n\t \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n\t browser.executeScript(scr);\n\t }\n\t\n\t it('should initialize to model', function() {\n\t expect(value.getText()).toContain('14:57:00');\n\t expect(valid.getText()).toContain('myForm.input.$valid = true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t setInput('');\n\t expect(value.getText()).toEqual('value =');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t\n\t it('should be invalid if over max', function() {\n\t setInput('23:59:00');\n\t expect(value.getText()).toContain('');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t \n\t
    \n\t */\n\t 'time': createDateInputType('time', TIME_REGEXP,\n\t createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),\n\t 'HH:mm:ss.sss'),\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[week]\n\t *\n\t * @description\n\t * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support\n\t * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n\t * week format (yyyy-W##), for example: `2013-W02`.\n\t *\n\t * The model must always be a Date object, otherwise Angular will throw an error.\n\t * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n\t *\n\t * The timezone to be used to read/write the `Date` instance in the model can be defined using\n\t * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n\t * This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this\n\t * attribute (e.g. `min=\"{{minWeek | date:'yyyy-Www'}}\"`). Note that `min` will also add\n\t * native HTML5 constraint validation.\n\t * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n\t * This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this\n\t * attribute (e.g. `max=\"{{maxWeek | date:'yyyy-Www'}}\"`). Note that `max` will also add\n\t * native HTML5 constraint validation.\n\t * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string\n\t * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n\t * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string\n\t * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Not a valid date!\n\t
    \n\t value = {{example.value | date: \"yyyy-Www\"}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t
    \n\t
    \n\t \n\t var value = element(by.binding('example.value | date: \"yyyy-Www\"'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('example.value'));\n\t\n\t // currently protractor/webdriver does not support\n\t // sending keys to all known HTML5 input controls\n\t // for various browsers (https://github.com/angular/protractor/issues/562).\n\t function setInput(val) {\n\t // set the value of the element and force validation.\n\t var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n\t \"ipt.value = '\" + val + \"';\" +\n\t \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n\t browser.executeScript(scr);\n\t }\n\t\n\t it('should initialize to model', function() {\n\t expect(value.getText()).toContain('2013-W01');\n\t expect(valid.getText()).toContain('myForm.input.$valid = true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t setInput('');\n\t expect(value.getText()).toEqual('value =');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t\n\t it('should be invalid if over max', function() {\n\t setInput('2015-W01');\n\t expect(value.getText()).toContain('');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t \n\t
    \n\t */\n\t 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[month]\n\t *\n\t * @description\n\t * Input with month validation and transformation. In browsers that do not yet support\n\t * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n\t * month format (yyyy-MM), for example: `2009-01`.\n\t *\n\t * The model must always be a Date object, otherwise Angular will throw an error.\n\t * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n\t * If the model is not set to the first of the month, the next view to model update will set it\n\t * to the first of the month.\n\t *\n\t * The timezone to be used to read/write the `Date` instance in the model can be defined using\n\t * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n\t * This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this\n\t * attribute (e.g. `min=\"{{minMonth | date:'yyyy-MM'}}\"`). Note that `min` will also add\n\t * native HTML5 constraint validation.\n\t * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n\t * This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this\n\t * attribute (e.g. `max=\"{{maxMonth | date:'yyyy-MM'}}\"`). Note that `max` will also add\n\t * native HTML5 constraint validation.\n\t * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string\n\t * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n\t * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string\n\t * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n\t\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Not a valid month!\n\t
    \n\t value = {{example.value | date: \"yyyy-MM\"}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t
    \n\t
    \n\t \n\t var value = element(by.binding('example.value | date: \"yyyy-MM\"'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('example.value'));\n\t\n\t // currently protractor/webdriver does not support\n\t // sending keys to all known HTML5 input controls\n\t // for various browsers (https://github.com/angular/protractor/issues/562).\n\t function setInput(val) {\n\t // set the value of the element and force validation.\n\t var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n\t \"ipt.value = '\" + val + \"';\" +\n\t \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n\t browser.executeScript(scr);\n\t }\n\t\n\t it('should initialize to model', function() {\n\t expect(value.getText()).toContain('2013-10');\n\t expect(valid.getText()).toContain('myForm.input.$valid = true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t setInput('');\n\t expect(value.getText()).toEqual('value =');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t\n\t it('should be invalid if over max', function() {\n\t setInput('2015-01');\n\t expect(value.getText()).toContain('');\n\t expect(valid.getText()).toContain('myForm.input.$valid = false');\n\t });\n\t \n\t
    \n\t */\n\t 'month': createDateInputType('month', MONTH_REGEXP,\n\t createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),\n\t 'yyyy-MM'),\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[number]\n\t *\n\t * @description\n\t * Text input with number validation and transformation. Sets the `number` validation\n\t * error if not a valid number.\n\t *\n\t *
    \n\t * The model must always be of type `number` otherwise Angular will throw an error.\n\t * Be aware that a string containing a number is not enough. See the {@link ngModel:numfmt}\n\t * error docs for more information and an example of how to convert your model if necessary.\n\t *
    \n\t *\n\t * ## Issues with HTML5 constraint validation\n\t *\n\t * In browsers that follow the\n\t * [HTML5 specification](https://html.spec.whatwg.org/multipage/forms.html#number-state-%28type=number%29),\n\t * `input[number]` does not work as expected with {@link ngModelOptions `ngModelOptions.allowInvalid`}.\n\t * If a non-number is entered in the input, the browser will report the value as an empty string,\n\t * which means the view / model values in `ngModel` and subsequently the scope value\n\t * will also be an empty string.\n\t *\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n\t * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n\t * minlength.\n\t * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n\t * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n\t * any length.\n\t * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n\t * that contains the regular expression body that will be converted to a regular expression\n\t * as in the ngPattern directive.\n\t * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n\t * does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n\t * If the expression evaluates to a RegExp object, then this is used directly.\n\t * If the expression evaluates to a string, then it will be converted to a RegExp\n\t * after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n\t * `new RegExp('^abc$')`.
    \n\t * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n\t * start at the index of the last search's match, thus not taking the whole input value into\n\t * account.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Not valid number!\n\t
    \n\t value = {{example.value}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t
    \n\t
    \n\t \n\t var value = element(by.binding('example.value'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('example.value'));\n\t\n\t it('should initialize to model', function() {\n\t expect(value.getText()).toContain('12');\n\t expect(valid.getText()).toContain('true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t input.clear();\n\t input.sendKeys('');\n\t expect(value.getText()).toEqual('value =');\n\t expect(valid.getText()).toContain('false');\n\t });\n\t\n\t it('should be invalid if over max', function() {\n\t input.clear();\n\t input.sendKeys('123');\n\t expect(value.getText()).toEqual('value =');\n\t expect(valid.getText()).toContain('false');\n\t });\n\t \n\t
    \n\t */\n\t 'number': numberInputType,\n\t\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[url]\n\t *\n\t * @description\n\t * Text input with URL validation. Sets the `url` validation error key if the content is not a\n\t * valid URL.\n\t *\n\t *
    \n\t * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex\n\t * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify\n\t * the built-in validators (see the {@link guide/forms Forms guide})\n\t *
    \n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n\t * minlength.\n\t * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n\t * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n\t * any length.\n\t * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n\t * that contains the regular expression body that will be converted to a regular expression\n\t * as in the ngPattern directive.\n\t * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n\t * does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n\t * If the expression evaluates to a RegExp object, then this is used directly.\n\t * If the expression evaluates to a string, then it will be converted to a RegExp\n\t * after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n\t * `new RegExp('^abc$')`.
    \n\t * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n\t * start at the index of the last search's match, thus not taking the whole input value into\n\t * account.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t
    \n\t \n\t var text = element(by.binding('url.text'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('url.text'));\n\t\n\t it('should initialize to model', function() {\n\t expect(text.getText()).toContain('http://google.com');\n\t expect(valid.getText()).toContain('true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t input.clear();\n\t input.sendKeys('');\n\t\n\t expect(text.getText()).toEqual('text =');\n\t expect(valid.getText()).toContain('false');\n\t });\n\t\n\t it('should be invalid if not url', function() {\n\t input.clear();\n\t input.sendKeys('box');\n\t\n\t expect(valid.getText()).toContain('false');\n\t });\n\t \n\t
    \n\t */\n\t 'url': urlInputType,\n\t\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[email]\n\t *\n\t * @description\n\t * Text input with email validation. Sets the `email` validation error key if not a valid email\n\t * address.\n\t *\n\t *
    \n\t * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex\n\t * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can\n\t * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})\n\t *
    \n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n\t * minlength.\n\t * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n\t * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n\t * any length.\n\t * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n\t * that contains the regular expression body that will be converted to a regular expression\n\t * as in the ngPattern directive.\n\t * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n\t * does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n\t * If the expression evaluates to a RegExp object, then this is used directly.\n\t * If the expression evaluates to a string, then it will be converted to a RegExp\n\t * after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n\t * `new RegExp('^abc$')`.
    \n\t * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n\t * start at the index of the last search's match, thus not taking the whole input value into\n\t * account.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t \n\t
    \n\t \n\t Required!\n\t \n\t Not valid email!\n\t
    \n\t text = {{email.text}}
    \n\t myForm.input.$valid = {{myForm.input.$valid}}
    \n\t myForm.input.$error = {{myForm.input.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t myForm.$error.email = {{!!myForm.$error.email}}
    \n\t
    \n\t
    \n\t \n\t var text = element(by.binding('email.text'));\n\t var valid = element(by.binding('myForm.input.$valid'));\n\t var input = element(by.model('email.text'));\n\t\n\t it('should initialize to model', function() {\n\t expect(text.getText()).toContain('me@example.com');\n\t expect(valid.getText()).toContain('true');\n\t });\n\t\n\t it('should be invalid if empty', function() {\n\t input.clear();\n\t input.sendKeys('');\n\t expect(text.getText()).toEqual('text =');\n\t expect(valid.getText()).toContain('false');\n\t });\n\t\n\t it('should be invalid if not email', function() {\n\t input.clear();\n\t input.sendKeys('xxx');\n\t\n\t expect(valid.getText()).toContain('false');\n\t });\n\t \n\t
    \n\t */\n\t 'email': emailInputType,\n\t\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[radio]\n\t *\n\t * @description\n\t * HTML radio button.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string} value The value to which the `ngModel` expression should be set when selected.\n\t * Note that `value` only supports `string` values, i.e. the scope model needs to be a string,\n\t * too. Use `ngValue` if you need complex models (`number`, `object`, ...).\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t * @param {string} ngValue Angular expression to which `ngModel` will be be set when the radio\n\t * is selected. Should be used instead of the `value` attribute if you need\n\t * a non-string `ngModel` (`boolean`, `array`, ...).\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t
    \n\t
    \n\t
    \n\t color = {{color.name | json}}
    \n\t
    \n\t Note that `ng-value=\"specialValue\"` sets radio item's value to be the value of `$scope.specialValue`.\n\t
    \n\t \n\t it('should change state', function() {\n\t var color = element(by.binding('color.name'));\n\t\n\t expect(color.getText()).toContain('blue');\n\t\n\t element.all(by.model('color.name')).get(0).click();\n\t\n\t expect(color.getText()).toContain('red');\n\t });\n\t \n\t
    \n\t */\n\t 'radio': radioInputType,\n\t\n\t\n\t /**\n\t * @ngdoc input\n\t * @name input[checkbox]\n\t *\n\t * @description\n\t * HTML checkbox.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {expression=} ngTrueValue The value to which the expression should be set when selected.\n\t * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t
    \n\t
    \n\t value1 = {{checkboxModel.value1}}
    \n\t value2 = {{checkboxModel.value2}}
    \n\t
    \n\t
    \n\t \n\t it('should change state', function() {\n\t var value1 = element(by.binding('checkboxModel.value1'));\n\t var value2 = element(by.binding('checkboxModel.value2'));\n\t\n\t expect(value1.getText()).toContain('true');\n\t expect(value2.getText()).toContain('YES');\n\t\n\t element(by.model('checkboxModel.value1')).click();\n\t element(by.model('checkboxModel.value2')).click();\n\t\n\t expect(value1.getText()).toContain('false');\n\t expect(value2.getText()).toContain('NO');\n\t });\n\t \n\t
    \n\t */\n\t 'checkbox': checkboxInputType,\n\t\n\t 'hidden': noop,\n\t 'button': noop,\n\t 'submit': noop,\n\t 'reset': noop,\n\t 'file': noop\n\t};\n\t\n\tfunction stringBasedInputType(ctrl) {\n\t ctrl.$formatters.push(function(value) {\n\t return ctrl.$isEmpty(value) ? value : value.toString();\n\t });\n\t}\n\t\n\tfunction textInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n\t baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\t stringBasedInputType(ctrl);\n\t}\n\t\n\tfunction baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n\t var type = lowercase(element[0].type);\n\t\n\t // In composition mode, users are still inputing intermediate text buffer,\n\t // hold the listener until composition is done.\n\t // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent\n\t if (!$sniffer.android) {\n\t var composing = false;\n\t\n\t element.on('compositionstart', function(data) {\n\t composing = true;\n\t });\n\t\n\t element.on('compositionend', function() {\n\t composing = false;\n\t listener();\n\t });\n\t }\n\t\n\t var listener = function(ev) {\n\t if (timeout) {\n\t $browser.defer.cancel(timeout);\n\t timeout = null;\n\t }\n\t if (composing) return;\n\t var value = element.val(),\n\t event = ev && ev.type;\n\t\n\t // By default we will trim the value\n\t // If the attribute ng-trim exists we will avoid trimming\n\t // If input type is 'password', the value is never trimmed\n\t if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {\n\t value = trim(value);\n\t }\n\t\n\t // If a control is suffering from bad input (due to native validators), browsers discard its\n\t // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the\n\t // control's value is the same empty value twice in a row.\n\t if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {\n\t ctrl.$setViewValue(value, event);\n\t }\n\t };\n\t\n\t // if the browser does support \"input\" event, we are fine - except on IE9 which doesn't fire the\n\t // input event on backspace, delete or cut\n\t if ($sniffer.hasEvent('input')) {\n\t element.on('input', listener);\n\t } else {\n\t var timeout;\n\t\n\t var deferListener = function(ev, input, origValue) {\n\t if (!timeout) {\n\t timeout = $browser.defer(function() {\n\t timeout = null;\n\t if (!input || input.value !== origValue) {\n\t listener(ev);\n\t }\n\t });\n\t }\n\t };\n\t\n\t element.on('keydown', function(event) {\n\t var key = event.keyCode;\n\t\n\t // ignore\n\t // command modifiers arrows\n\t if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;\n\t\n\t deferListener(event, this, this.value);\n\t });\n\t\n\t // if user modifies input value using context menu in IE, we need \"paste\" and \"cut\" events to catch it\n\t if ($sniffer.hasEvent('paste')) {\n\t element.on('paste cut', deferListener);\n\t }\n\t }\n\t\n\t // if user paste into input using mouse on older browser\n\t // or form autocomplete on newer browser, we need \"change\" event to catch it\n\t element.on('change', listener);\n\t\n\t ctrl.$render = function() {\n\t // Workaround for Firefox validation #12102.\n\t var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue;\n\t if (element.val() !== value) {\n\t element.val(value);\n\t }\n\t };\n\t}\n\t\n\tfunction weekParser(isoWeek, existingDate) {\n\t if (isDate(isoWeek)) {\n\t return isoWeek;\n\t }\n\t\n\t if (isString(isoWeek)) {\n\t WEEK_REGEXP.lastIndex = 0;\n\t var parts = WEEK_REGEXP.exec(isoWeek);\n\t if (parts) {\n\t var year = +parts[1],\n\t week = +parts[2],\n\t hours = 0,\n\t minutes = 0,\n\t seconds = 0,\n\t milliseconds = 0,\n\t firstThurs = getFirstThursdayOfYear(year),\n\t addDays = (week - 1) * 7;\n\t\n\t if (existingDate) {\n\t hours = existingDate.getHours();\n\t minutes = existingDate.getMinutes();\n\t seconds = existingDate.getSeconds();\n\t milliseconds = existingDate.getMilliseconds();\n\t }\n\t\n\t return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);\n\t }\n\t }\n\t\n\t return NaN;\n\t}\n\t\n\tfunction createDateParser(regexp, mapping) {\n\t return function(iso, date) {\n\t var parts, map;\n\t\n\t if (isDate(iso)) {\n\t return iso;\n\t }\n\t\n\t if (isString(iso)) {\n\t // When a date is JSON'ified to wraps itself inside of an extra\n\t // set of double quotes. This makes the date parsing code unable\n\t // to match the date string and parse it as a date.\n\t if (iso.charAt(0) == '\"' && iso.charAt(iso.length - 1) == '\"') {\n\t iso = iso.substring(1, iso.length - 1);\n\t }\n\t if (ISO_DATE_REGEXP.test(iso)) {\n\t return new Date(iso);\n\t }\n\t regexp.lastIndex = 0;\n\t parts = regexp.exec(iso);\n\t\n\t if (parts) {\n\t parts.shift();\n\t if (date) {\n\t map = {\n\t yyyy: date.getFullYear(),\n\t MM: date.getMonth() + 1,\n\t dd: date.getDate(),\n\t HH: date.getHours(),\n\t mm: date.getMinutes(),\n\t ss: date.getSeconds(),\n\t sss: date.getMilliseconds() / 1000\n\t };\n\t } else {\n\t map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };\n\t }\n\t\n\t forEach(parts, function(part, index) {\n\t if (index < mapping.length) {\n\t map[mapping[index]] = +part;\n\t }\n\t });\n\t return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);\n\t }\n\t }\n\t\n\t return NaN;\n\t };\n\t}\n\t\n\tfunction createDateInputType(type, regexp, parseDate, format) {\n\t return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {\n\t badInputChecker(scope, element, attr, ctrl);\n\t baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\t var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;\n\t var previousDate;\n\t\n\t ctrl.$$parserName = type;\n\t ctrl.$parsers.push(function(value) {\n\t if (ctrl.$isEmpty(value)) return null;\n\t if (regexp.test(value)) {\n\t // Note: We cannot read ctrl.$modelValue, as there might be a different\n\t // parser/formatter in the processing chain so that the model\n\t // contains some different data format!\n\t var parsedDate = parseDate(value, previousDate);\n\t if (timezone) {\n\t parsedDate = convertTimezoneToLocal(parsedDate, timezone);\n\t }\n\t return parsedDate;\n\t }\n\t return undefined;\n\t });\n\t\n\t ctrl.$formatters.push(function(value) {\n\t if (value && !isDate(value)) {\n\t throw ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);\n\t }\n\t if (isValidDate(value)) {\n\t previousDate = value;\n\t if (previousDate && timezone) {\n\t previousDate = convertTimezoneToLocal(previousDate, timezone, true);\n\t }\n\t return $filter('date')(value, format, timezone);\n\t } else {\n\t previousDate = null;\n\t return '';\n\t }\n\t });\n\t\n\t if (isDefined(attr.min) || attr.ngMin) {\n\t var minVal;\n\t ctrl.$validators.min = function(value) {\n\t return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;\n\t };\n\t attr.$observe('min', function(val) {\n\t minVal = parseObservedDateValue(val);\n\t ctrl.$validate();\n\t });\n\t }\n\t\n\t if (isDefined(attr.max) || attr.ngMax) {\n\t var maxVal;\n\t ctrl.$validators.max = function(value) {\n\t return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;\n\t };\n\t attr.$observe('max', function(val) {\n\t maxVal = parseObservedDateValue(val);\n\t ctrl.$validate();\n\t });\n\t }\n\t\n\t function isValidDate(value) {\n\t // Invalid Date: getTime() returns NaN\n\t return value && !(value.getTime && value.getTime() !== value.getTime());\n\t }\n\t\n\t function parseObservedDateValue(val) {\n\t return isDefined(val) && !isDate(val) ? parseDate(val) || undefined : val;\n\t }\n\t };\n\t}\n\t\n\tfunction badInputChecker(scope, element, attr, ctrl) {\n\t var node = element[0];\n\t var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);\n\t if (nativeValidation) {\n\t ctrl.$parsers.push(function(value) {\n\t var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};\n\t return validity.badInput || validity.typeMismatch ? undefined : value;\n\t });\n\t }\n\t}\n\t\n\tfunction numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n\t badInputChecker(scope, element, attr, ctrl);\n\t baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\t\n\t ctrl.$$parserName = 'number';\n\t ctrl.$parsers.push(function(value) {\n\t if (ctrl.$isEmpty(value)) return null;\n\t if (NUMBER_REGEXP.test(value)) return parseFloat(value);\n\t return undefined;\n\t });\n\t\n\t ctrl.$formatters.push(function(value) {\n\t if (!ctrl.$isEmpty(value)) {\n\t if (!isNumber(value)) {\n\t throw ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);\n\t }\n\t value = value.toString();\n\t }\n\t return value;\n\t });\n\t\n\t if (isDefined(attr.min) || attr.ngMin) {\n\t var minVal;\n\t ctrl.$validators.min = function(value) {\n\t return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;\n\t };\n\t\n\t attr.$observe('min', function(val) {\n\t if (isDefined(val) && !isNumber(val)) {\n\t val = parseFloat(val, 10);\n\t }\n\t minVal = isNumber(val) && !isNaN(val) ? val : undefined;\n\t // TODO(matsko): implement validateLater to reduce number of validations\n\t ctrl.$validate();\n\t });\n\t }\n\t\n\t if (isDefined(attr.max) || attr.ngMax) {\n\t var maxVal;\n\t ctrl.$validators.max = function(value) {\n\t return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;\n\t };\n\t\n\t attr.$observe('max', function(val) {\n\t if (isDefined(val) && !isNumber(val)) {\n\t val = parseFloat(val, 10);\n\t }\n\t maxVal = isNumber(val) && !isNaN(val) ? val : undefined;\n\t // TODO(matsko): implement validateLater to reduce number of validations\n\t ctrl.$validate();\n\t });\n\t }\n\t}\n\t\n\tfunction urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n\t // Note: no badInputChecker here by purpose as `url` is only a validation\n\t // in browsers, i.e. we can always read out input.value even if it is not valid!\n\t baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\t stringBasedInputType(ctrl);\n\t\n\t ctrl.$$parserName = 'url';\n\t ctrl.$validators.url = function(modelValue, viewValue) {\n\t var value = modelValue || viewValue;\n\t return ctrl.$isEmpty(value) || URL_REGEXP.test(value);\n\t };\n\t}\n\t\n\tfunction emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n\t // Note: no badInputChecker here by purpose as `url` is only a validation\n\t // in browsers, i.e. we can always read out input.value even if it is not valid!\n\t baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\t stringBasedInputType(ctrl);\n\t\n\t ctrl.$$parserName = 'email';\n\t ctrl.$validators.email = function(modelValue, viewValue) {\n\t var value = modelValue || viewValue;\n\t return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);\n\t };\n\t}\n\t\n\tfunction radioInputType(scope, element, attr, ctrl) {\n\t // make the name unique, if not defined\n\t if (isUndefined(attr.name)) {\n\t element.attr('name', nextUid());\n\t }\n\t\n\t var listener = function(ev) {\n\t if (element[0].checked) {\n\t ctrl.$setViewValue(attr.value, ev && ev.type);\n\t }\n\t };\n\t\n\t element.on('click', listener);\n\t\n\t ctrl.$render = function() {\n\t var value = attr.value;\n\t element[0].checked = (value == ctrl.$viewValue);\n\t };\n\t\n\t attr.$observe('value', ctrl.$render);\n\t}\n\t\n\tfunction parseConstantExpr($parse, context, name, expression, fallback) {\n\t var parseFn;\n\t if (isDefined(expression)) {\n\t parseFn = $parse(expression);\n\t if (!parseFn.constant) {\n\t throw ngModelMinErr('constexpr', 'Expected constant expression for `{0}`, but saw ' +\n\t '`{1}`.', name, expression);\n\t }\n\t return parseFn(context);\n\t }\n\t return fallback;\n\t}\n\t\n\tfunction checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {\n\t var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);\n\t var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);\n\t\n\t var listener = function(ev) {\n\t ctrl.$setViewValue(element[0].checked, ev && ev.type);\n\t };\n\t\n\t element.on('click', listener);\n\t\n\t ctrl.$render = function() {\n\t element[0].checked = ctrl.$viewValue;\n\t };\n\t\n\t // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`\n\t // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert\n\t // it to a boolean.\n\t ctrl.$isEmpty = function(value) {\n\t return value === false;\n\t };\n\t\n\t ctrl.$formatters.push(function(value) {\n\t return equals(value, trueValue);\n\t });\n\t\n\t ctrl.$parsers.push(function(value) {\n\t return value ? trueValue : falseValue;\n\t });\n\t}\n\t\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name textarea\n\t * @restrict E\n\t *\n\t * @description\n\t * HTML textarea element control with angular data-binding. The data-binding and validation\n\t * properties of this element are exactly the same as those of the\n\t * {@link ng.directive:input input element}.\n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n\t * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n\t * `required` when you want to data-bind to the `required` attribute.\n\t * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n\t * minlength.\n\t * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n\t * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any\n\t * length.\n\t * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n\t * does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n\t * If the expression evaluates to a RegExp object, then this is used directly.\n\t * If the expression evaluates to a string, then it will be converted to a RegExp\n\t * after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n\t * `new RegExp('^abc$')`.
    \n\t * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n\t * start at the index of the last search's match, thus not taking the whole input value into\n\t * account.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n\t */\n\t\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name input\n\t * @restrict E\n\t *\n\t * @description\n\t * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,\n\t * input state control, and validation.\n\t * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.\n\t *\n\t *
    \n\t * **Note:** Not every feature offered is available for all input types.\n\t * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.\n\t *
    \n\t *\n\t * @param {string} ngModel Assignable angular expression to data-bind to.\n\t * @param {string=} name Property name of the form under which the control is published.\n\t * @param {string=} required Sets `required` validation error key if the value is not entered.\n\t * @param {boolean=} ngRequired Sets `required` attribute if set to true\n\t * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n\t * minlength.\n\t * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n\t * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any\n\t * length.\n\t * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n\t * value does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n\t * If the expression evaluates to a RegExp object, then this is used directly.\n\t * If the expression evaluates to a string, then it will be converted to a RegExp\n\t * after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n\t * `new RegExp('^abc$')`.
    \n\t * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n\t * start at the index of the last search's match, thus not taking the whole input value into\n\t * account.\n\t * @param {string=} ngChange Angular expression to be executed when input changes due to user\n\t * interaction with the input element.\n\t * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n\t * This parameter is ignored for input[type=password] controls, which will never trim the\n\t * input.\n\t *\n\t * @example\n\t \n\t \n\t \n\t
    \n\t
    \n\t \n\t
    \n\t \n\t Required!\n\t
    \n\t \n\t
    \n\t \n\t Too short!\n\t \n\t Too long!\n\t
    \n\t
    \n\t
    \n\t user = {{user}}
    \n\t myForm.userName.$valid = {{myForm.userName.$valid}}
    \n\t myForm.userName.$error = {{myForm.userName.$error}}
    \n\t myForm.lastName.$valid = {{myForm.lastName.$valid}}
    \n\t myForm.lastName.$error = {{myForm.lastName.$error}}
    \n\t myForm.$valid = {{myForm.$valid}}
    \n\t myForm.$error.required = {{!!myForm.$error.required}}
    \n\t myForm.$error.minlength = {{!!myForm.$error.minlength}}
    \n\t myForm.$error.maxlength = {{!!myForm.$error.maxlength}}
    \n\t
    \n\t
    \n\t \n\t var user = element(by.exactBinding('user'));\n\t var userNameValid = element(by.binding('myForm.userName.$valid'));\n\t var lastNameValid = element(by.binding('myForm.lastName.$valid'));\n\t var lastNameError = element(by.binding('myForm.lastName.$error'));\n\t var formValid = element(by.binding('myForm.$valid'));\n\t var userNameInput = element(by.model('user.name'));\n\t var userLastInput = element(by.model('user.last'));\n\t\n\t it('should initialize to model', function() {\n\t expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"visitor\"}');\n\t expect(userNameValid.getText()).toContain('true');\n\t expect(formValid.getText()).toContain('true');\n\t });\n\t\n\t it('should be invalid if empty when required', function() {\n\t userNameInput.clear();\n\t userNameInput.sendKeys('');\n\t\n\t expect(user.getText()).toContain('{\"last\":\"visitor\"}');\n\t expect(userNameValid.getText()).toContain('false');\n\t expect(formValid.getText()).toContain('false');\n\t });\n\t\n\t it('should be valid if empty when min length is set', function() {\n\t userLastInput.clear();\n\t userLastInput.sendKeys('');\n\t\n\t expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"\"}');\n\t expect(lastNameValid.getText()).toContain('true');\n\t expect(formValid.getText()).toContain('true');\n\t });\n\t\n\t it('should be invalid if less than required min length', function() {\n\t userLastInput.clear();\n\t userLastInput.sendKeys('xx');\n\t\n\t expect(user.getText()).toContain('{\"name\":\"guest\"}');\n\t expect(lastNameValid.getText()).toContain('false');\n\t expect(lastNameError.getText()).toContain('minlength');\n\t expect(formValid.getText()).toContain('false');\n\t });\n\t\n\t it('should be invalid if longer than max length', function() {\n\t userLastInput.clear();\n\t userLastInput.sendKeys('some ridiculously long name');\n\t\n\t expect(user.getText()).toContain('{\"name\":\"guest\"}');\n\t expect(lastNameValid.getText()).toContain('false');\n\t expect(lastNameError.getText()).toContain('maxlength');\n\t expect(formValid.getText()).toContain('false');\n\t });\n\t \n\t
    \n\t */\n\tvar inputDirective = ['$browser', '$sniffer', '$filter', '$parse',\n\t function($browser, $sniffer, $filter, $parse) {\n\t return {\n\t restrict: 'E',\n\t require: ['?ngModel'],\n\t link: {\n\t pre: function(scope, element, attr, ctrls) {\n\t if (ctrls[0]) {\n\t (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,\n\t $browser, $filter, $parse);\n\t }\n\t }\n\t }\n\t };\n\t}];\n\t\n\t\n\t\n\tvar CONSTANT_VALUE_REGEXP = /^(true|false|\\d+)$/;\n\t/**\n\t * @ngdoc directive\n\t * @name ngValue\n\t *\n\t * @description\n\t * Binds the given expression to the value of `