From 3a87b2226954810b392b080f75dc0177ec287866 Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Wed, 11 Nov 2015 15:09:55 -0500 Subject: [PATCH] upgrade angular and angular-animate --- awx/ui/client/lib/angular-animate/.bower.json | 12 +- .../lib/angular-animate/angular-animate.js | 831 +++++--- .../angular-animate/angular-animate.min.js | 98 +- .../angular-animate.min.js.map | 6 +- awx/ui/client/lib/angular-animate/bower.json | 4 +- .../client/lib/angular-animate/package.json | 2 +- awx/ui/client/lib/angular/.bower.json | 10 +- awx/ui/client/lib/angular/angular.js | 1724 +++++++++++------ awx/ui/client/lib/angular/angular.min.js | 574 +++--- awx/ui/client/lib/angular/angular.min.js.gzip | Bin 51629 -> 46451 bytes awx/ui/client/lib/angular/angular.min.js.map | 6 +- awx/ui/client/lib/angular/bower.json | 2 +- awx/ui/client/lib/angular/package.json | 2 +- 13 files changed, 2013 insertions(+), 1258 deletions(-) diff --git a/awx/ui/client/lib/angular-animate/.bower.json b/awx/ui/client/lib/angular-animate/.bower.json index 27ddb8cc93..22ac500bb0 100644 --- a/awx/ui/client/lib/angular-animate/.bower.json +++ b/awx/ui/client/lib/angular-animate/.bower.json @@ -1,19 +1,19 @@ { "name": "angular-animate", - "version": "1.4.3", + "version": "1.4.7", "main": "./angular-animate.js", "ignore": [], "dependencies": { - "angular": "1.4.3" + "angular": "1.4.7" }, "homepage": "https://github.com/angular/bower-angular-animate", - "_release": "1.4.3", + "_release": "1.4.7", "_resolution": { "type": "version", - "tag": "v1.4.3", - "commit": "4ce2a76359401102d2e0146ccf69e6c060799ff8" + "tag": "v1.4.7", + "commit": "3e63136fc3d882828594f3ceb929784eb43aa944" }, "_source": "git://github.com/angular/bower-angular-animate.git", - "_target": "~1.4.3", + "_target": "~1.4.7", "_originalSource": "angular-animate" } \ No newline at end of file diff --git a/awx/ui/client/lib/angular-animate/angular-animate.js b/awx/ui/client/lib/angular-animate/angular-animate.js index fc0e217f7e..1948298182 100644 --- a/awx/ui/client/lib/angular-animate/angular-animate.js +++ b/awx/ui/client/lib/angular-animate/angular-animate.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.4.3 + * @license AngularJS v1.4.7 * (c) 2010-2015 Google, Inc. http://angularjs.org * License: MIT */ @@ -21,12 +21,60 @@ var isElement = angular.isElement; var ELEMENT_NODE = 1; var COMMENT_NODE = 8; +var ADD_CLASS_SUFFIX = '-add'; +var REMOVE_CLASS_SUFFIX = '-remove'; +var EVENT_CLASS_PREFIX = 'ng-'; +var ACTIVE_CLASS_SUFFIX = '-active'; + var NG_ANIMATE_CLASSNAME = 'ng-animate'; var NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren'; +// Detect proper transitionend/animationend event names. +var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT; + +// If unprefixed events are not supported but webkit-prefixed are, use the latter. +// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them. +// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend` +// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`. +// Register both events in case `window.onanimationend` is not supported because of that, +// do the same for `transitionend` as Safari is likely to exhibit similar behavior. +// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit +// therefore there is no reason to test anymore for other vendor prefixes: +// http://caniuse.com/#search=transition +if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) { + CSS_PREFIX = '-webkit-'; + TRANSITION_PROP = 'WebkitTransition'; + TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; +} else { + TRANSITION_PROP = 'transition'; + TRANSITIONEND_EVENT = 'transitionend'; +} + +if (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) { + CSS_PREFIX = '-webkit-'; + ANIMATION_PROP = 'WebkitAnimation'; + ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; +} else { + ANIMATION_PROP = 'animation'; + ANIMATIONEND_EVENT = 'animationend'; +} + +var DURATION_KEY = 'Duration'; +var PROPERTY_KEY = 'Property'; +var DELAY_KEY = 'Delay'; +var TIMING_KEY = 'TimingFunction'; +var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount'; +var ANIMATION_PLAYSTATE_KEY = 'PlayState'; +var SAFE_FAST_FORWARD_DURATION_VALUE = 9999; + +var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY; +var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY; +var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY; +var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY; + var isPromiseLike = function(p) { return p && p.then ? true : false; -} +}; function assertArg(arg, name, reason) { if (!arg) { @@ -177,8 +225,21 @@ function mergeAnimationOptions(element, target, newOptions) { var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || ''); var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove); + if (newOptions.preparationClasses) { + target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses); + delete newOptions.preparationClasses; + } + + // noop is basically when there is no callback; otherwise something has been set + var realDomOperation = target.domOperation !== noop ? target.domOperation : null; + extend(target, newOptions); + // 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. + if (realDomOperation) { + target.domOperation = realDomOperation; + } + if (classes.addClass) { target.addClass = classes.addClass; } else { @@ -256,18 +317,75 @@ function getDomNode(element) { return (element instanceof angular.element) ? element[0] : element; } +function applyGeneratedPreparationClasses(element, event, options) { + var classes = ''; + if (event) { + classes = pendClasses(event, EVENT_CLASS_PREFIX, true); + } + if (options.addClass) { + classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX)); + } + if (options.removeClass) { + classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX)); + } + if (classes.length) { + options.preparationClasses = classes; + element.addClass(classes); + } +} + +function clearGeneratedClasses(element, options) { + if (options.preparationClasses) { + element.removeClass(options.preparationClasses); + options.preparationClasses = null; + } + if (options.activeClasses) { + element.removeClass(options.activeClasses); + options.activeClasses = null; + } +} + +function blockTransitions(node, duration) { + // we use a negative delay value since it performs blocking + // yet it doesn't kill any existing transitions running on the + // same element which makes this safe for class-based animations + var value = duration ? '-' + duration + 's' : ''; + applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]); + return [TRANSITION_DELAY_PROP, value]; +} + +function blockKeyframeAnimations(node, applyBlock) { + var value = applyBlock ? 'paused' : ''; + var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY; + applyInlineStyle(node, [key, value]); + return [key, value]; +} + +function applyInlineStyle(node, styleTuple) { + var prop = styleTuple[0]; + var value = styleTuple[1]; + node.style[prop] = value; +} + +function concatWithSpace(a,b) { + if (!a) return b; + if (!b) return a; + return a + ' ' + b; +} + var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { - var tickQueue = []; - var cancelFn; + var queue, cancelFn; function scheduler(tasks) { // we make a copy since RAFScheduler mutates the state // of the passed in array variable and this would be difficult // to track down on the outside code - tickQueue.push([].concat(tasks)); + queue = queue.concat(tasks); nextTick(); } + queue = scheduler.queue = []; + /* waitUntilQuiet does two things: * 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through * 2. It will delay the next wave of tasks from running until the quiet `fn` has run. @@ -289,17 +407,12 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { return scheduler; function nextTick() { - if (!tickQueue.length) return; + if (!queue.length) return; - var updatedQueue = []; - for (var i = 0; i < tickQueue.length; i++) { - var innerQueue = tickQueue[i]; - runNextTask(innerQueue); - if (innerQueue.length) { - updatedQueue.push(innerQueue); - } + var items = queue.shift(); + for (var i = 0; i < items.length; i++) { + items[i](); } - tickQueue = updatedQueue; if (!cancelFn) { $$rAF(function() { @@ -307,11 +420,6 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { }); } } - - function runNextTask(tasks) { - var nextTask = tasks.shift(); - nextTask(); - } }]; var $$AnimateChildrenDirective = [function() { @@ -328,6 +436,8 @@ var $$AnimateChildrenDirective = [function() { }; }]; +var ANIMATE_TIMER_KEY = '$$animateCss'; + /** * @ngdoc service * @name $animateCss @@ -513,7 +623,7 @@ var $$AnimateChildrenDirective = [function() { * * `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 * 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.) * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both). - * * `transition` - The raw CSS transition style that will be used (e.g. `1s linear all`). + * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`). * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`). * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation. * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition. @@ -528,63 +638,23 @@ var $$AnimateChildrenDirective = [function() { * * `stagger` - A numeric time value representing the delay between successively animated elements * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.}) * * `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 - * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`) - * `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 occuring on the classes being added and removed.) + * * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`) + * * `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 occuring on the classes being added and removed.) + * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once + * the animation is closed. This is useful for when the styles are used purely for the sake of + * the animation and do not have a lasting visual effect on the element (e.g. a colapse and open animation). + * By default this value is set to `false`. * * @return {object} an object with start and end methods and details about the animation. * * * `start` - The method to start the animation. This will return a `Promise` when called. * * `end` - This method will cancel the animation and remove all applied CSS classes and styles. */ - -// Detect proper transitionend/animationend event names. -var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT; - -// If unprefixed events are not supported but webkit-prefixed are, use the latter. -// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them. -// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend` -// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`. -// Register both events in case `window.onanimationend` is not supported because of that, -// do the same for `transitionend` as Safari is likely to exhibit similar behavior. -// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit -// therefore there is no reason to test anymore for other vendor prefixes: -// http://caniuse.com/#search=transition -if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) { - CSS_PREFIX = '-webkit-'; - TRANSITION_PROP = 'WebkitTransition'; - TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; -} else { - TRANSITION_PROP = 'transition'; - TRANSITIONEND_EVENT = 'transitionend'; -} - -if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) { - CSS_PREFIX = '-webkit-'; - ANIMATION_PROP = 'WebkitAnimation'; - ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; -} else { - ANIMATION_PROP = 'animation'; - ANIMATIONEND_EVENT = 'animationend'; -} - -var DURATION_KEY = 'Duration'; -var PROPERTY_KEY = 'Property'; -var DELAY_KEY = 'Delay'; -var TIMING_KEY = 'TimingFunction'; -var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount'; -var ANIMATION_PLAYSTATE_KEY = 'PlayState'; -var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; -var CLOSING_TIME_BUFFER = 1.5; var ONE_SECOND = 1000; var BASE_TEN = 10; -var SAFE_FAST_FORWARD_DURATION_VALUE = 9999; - -var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY; -var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY; - -var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY; -var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY; +var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; +var CLOSING_TIME_BUFFER = 1.5; var DETECT_CSS_PROPERTIES = { transitionDuration: TRANSITION_DURATION_PROP, @@ -602,6 +672,15 @@ var DETECT_STAGGER_CSS_PROPERTIES = { animationDelay: ANIMATION_DELAY_PROP }; +function getCssKeyframeDurationStyle(duration) { + return [ANIMATION_DURATION_PROP, duration + 's']; +} + +function getCssDelayStyle(delay, isKeyframeAnimation) { + var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP; + return [prop, delay + 's']; +} + function computeCssStyles($window, element, properties) { var styles = Object.create(null); var detectedStyles = $window.getComputedStyle(element) || {}; @@ -658,37 +737,6 @@ function getCssTransitionDurationStyle(duration, applyOnlyDuration) { return [style, value]; } -function getCssKeyframeDurationStyle(duration) { - return [ANIMATION_DURATION_PROP, duration + 's']; -} - -function getCssDelayStyle(delay, isKeyframeAnimation) { - var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP; - return [prop, delay + 's']; -} - -function blockTransitions(node, duration) { - // we use a negative delay value since it performs blocking - // yet it doesn't kill any existing transitions running on the - // same element which makes this safe for class-based animations - var value = duration ? '-' + duration + 's' : ''; - applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]); - return [TRANSITION_DELAY_PROP, value]; -} - -function blockKeyframeAnimations(node, applyBlock) { - var value = applyBlock ? 'paused' : ''; - var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY; - applyInlineStyle(node, [key, value]); - return [key, value]; -} - -function applyInlineStyle(node, styleTuple) { - var prop = styleTuple[0]; - var value = styleTuple[1]; - node.style[prop] = value; -} - function createLocalCacheLookup() { var cache = Object.create(null); return { @@ -716,14 +764,31 @@ function createLocalCacheLookup() { }; } +// we do not reassign an already present style value since +// if we detect the style property value again we may be +// detecting styles that were added via the `from` styles. +// We make use of `isDefined` here since an empty string +// or null value (which is what getPropertyValue will return +// for a non-existing style) will still be marked as a valid +// value for the style (a falsy value implies that the style +// is to be removed at the end of the animation). If we had a simple +// "OR" statement then it would not be enough to catch that. +function registerRestorableStyles(backup, node, properties) { + forEach(properties, function(prop) { + backup[prop] = isDefined(backup[prop]) + ? backup[prop] + : node.style.getPropertyValue(prop); + }); +} + var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { var gcsLookup = createLocalCacheLookup(); var gcsStaggerLookup = createLocalCacheLookup(); this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout', - '$document', '$sniffer', '$$rAFScheduler', + '$$forceReflow', '$sniffer', '$$rAFScheduler', '$animate', function($window, $$jqLite, $$AnimateRunner, $timeout, - $document, $sniffer, $$rAFScheduler) { + $$forceReflow, $sniffer, $$rAFScheduler, $animate) { var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); @@ -780,7 +845,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return stagger || {}; } - var bod = getDomNode($document).body; + var cancelLastRAFRequest; var rafWaitQueue = []; function waitUntilQuiet(callback) { rafWaitQueue.push(callback); @@ -788,27 +853,19 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { gcsLookup.flush(); gcsStaggerLookup.flush(); - //the line below will force the browser to perform a repaint so - //that all the animated elements within the animation frame will - //be properly updated and drawn on screen. This is required to - //ensure that the preparation animation is properly flushed so that - //the active state picks up from there. DO NOT REMOVE THIS LINE. - //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH - //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND - //WILL TAKE YEARS AWAY FROM YOUR LIFE. - var width = bod.offsetWidth + 1; + // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable. + // PLEASE EXAMINE THE `$$forceReflow` service to understand why. + var pageWidth = $$forceReflow(); // we use a for loop to ensure that if the queue is changed // during this looping then it will consider new requests for (var i = 0; i < rafWaitQueue.length; i++) { - rafWaitQueue[i](width); + rafWaitQueue[i](pageWidth); } rafWaitQueue.length = 0; }); } - return init; - function computeTimings(node, className, cacheKey) { var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES); var aD = timings.animationDelay; @@ -823,9 +880,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return timings; } - function init(element, options) { + return function init(element, options) { + var restoreStyles = {}; var node = getDomNode(element); - if (!node || !node.parentNode) { + if (!node + || !node.parentNode + || !$animate.enabled()) { return closeAndReturnNoopAnimator(); } @@ -857,20 +917,20 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { var addRemoveClassName = ''; if (isStructural) { - structuralClassName = pendClasses(method, 'ng-', true); + structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true); } else if (method) { structuralClassName = method; } if (options.addClass) { - addRemoveClassName += pendClasses(options.addClass, '-add'); + addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX); } if (options.removeClass) { if (addRemoveClassName.length) { addRemoveClassName += ' '; } - addRemoveClassName += pendClasses(options.removeClass, '-remove'); + addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX); } // there may be a situation where a structural animation is combined together @@ -881,12 +941,11 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { // there actually is a detected transition or keyframe animation if (options.applyClassesEarly && addRemoveClassName.length) { applyAnimationClasses(element, options); - addRemoveClassName = ''; } - var setupClasses = [structuralClassName, addRemoveClassName].join(' ').trim(); - var fullClassName = classes + ' ' + setupClasses; - var activeClasses = pendClasses(setupClasses, '-active'); + var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim(); + var fullClassName = classes + ' ' + preparationClasses; + var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX); var hasToStyles = styles.to && Object.keys(styles.to).length > 0; var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0; @@ -895,7 +954,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { // unless there a is raw keyframe value that is applied to the element. if (!containsKeyframeAnimation && !hasToStyles - && !setupClasses) { + && !preparationClasses) { return closeAndReturnNoopAnimator(); } @@ -910,10 +969,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { }; } else { cacheKey = gcsHashFn(node, fullClassName); - stagger = computeCachedCssStaggerStyles(node, setupClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES); + stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES); } - $$jqLite.addClass(element, setupClasses); + if (!options.$$skipPreparationClasses) { + $$jqLite.addClass(element, preparationClasses); + } var applyOnlyDuration; @@ -952,7 +1013,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { // transition delay to allow for the transition to naturally do it's thing. The beauty here is // that if there is no transition defined then nothing will happen and this will also allow // other transitions to be stacked on top of each other without any chopping them out. - if (isFirst) { + if (isFirst && !options.skipBlocking) { blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE); } @@ -994,6 +1055,18 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return closeAndReturnNoopAnimator(); } + if (options.delay != null) { + var delayStyle = parseFloat(options.delay); + + if (flags.applyTransitionDelay) { + temporaryStyles.push(getCssDelayStyle(delayStyle)); + } + + if (flags.applyAnimationDelay) { + temporaryStyles.push(getCssDelayStyle(delayStyle, true)); + } + } + // we need to recalculate the delay value since we used a pre-emptive negative // delay value and the delay value is required for the final event checking. This // property will ensure that this will happen after the RAF phase has passed. @@ -1010,12 +1083,18 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { stagger.animationDuration === 0; } - applyAnimationFromStyles(element, options); - if (!flags.blockTransition) { - blockTransitions(node, false); + if (options.from) { + if (options.cleanupStyles) { + registerRestorableStyles(restoreStyles, node, Object.keys(options.from)); + } + applyAnimationFromStyles(element, options); } - applyBlocking(maxDuration); + if (flags.blockTransition || flags.blockKeyframeAnimation) { + applyBlocking(maxDuration); + } else if (!options.skipBlocking) { + blockTransitions(node, false); + } // TODO(matsko): for 1.5 change this code to have an animator object for better debugging return { @@ -1058,7 +1137,9 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { animationClosed = true; animationPaused = false; - $$jqLite.removeClass(element, setupClasses); + if (!options.$$skipPreparationClasses) { + $$jqLite.removeClass(element, preparationClasses); + } $$jqLite.removeClass(element, activeClasses); blockKeyframeAnimations(node, false); @@ -1074,6 +1155,13 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { applyAnimationClasses(element, options); applyAnimationStyles(element, options); + if (Object.keys(restoreStyles).length) { + forEach(restoreStyles, function(value, prop) { + value ? node.style.setProperty(prop, value) + : node.style.removeProperty(prop); + }); + } + // the reason why we have this option is to allow a synchronous closing callback // that is fired as SOON as the animation ends (when the CSS is removed) or if // the animation never takes off at all. A good example is a leave animation since @@ -1105,6 +1193,8 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { cancel: cancelFn }); + // should flush the cache animation + waitUntilQuiet(noop); close(); return { @@ -1185,7 +1275,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { $$jqLite.addClass(element, activeClasses); if (flags.recalculateTimingStyles) { - fullClassName = node.className + ' ' + setupClasses; + fullClassName = node.className + ' ' + preparationClasses; cacheKey = gcsHashFn(node, fullClassName); timings = computeTimings(node, fullClassName, cacheKey); @@ -1202,27 +1292,16 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { flags.hasAnimations = timings.animationDuration > 0; } - if (flags.applyTransitionDelay || flags.applyAnimationDelay) { + if (flags.applyAnimationDelay) { relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay) ? parseFloat(options.delay) : relativeDelay; maxDelay = Math.max(relativeDelay, 0); - - var delayStyle; - if (flags.applyTransitionDelay) { - timings.transitionDelay = relativeDelay; - delayStyle = getCssDelayStyle(relativeDelay); - temporaryStyles.push(delayStyle); - node.style[delayStyle[0]] = delayStyle[1]; - } - - if (flags.applyAnimationDelay) { - timings.animationDelay = relativeDelay; - delayStyle = getCssDelayStyle(relativeDelay, true); - temporaryStyles.push(delayStyle); - node.style[delayStyle[0]] = delayStyle[1]; - } + timings.animationDelay = relativeDelay; + delayStyle = getCssDelayStyle(relativeDelay, true); + temporaryStyles.push(delayStyle); + node.style[delayStyle[0]] = delayStyle[1]; } maxDelayTime = maxDelay * ONE_SECOND; @@ -1251,17 +1330,52 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { } startTime = Date.now(); - element.on(events.join(' '), onAnimationProgress); - $timeout(onAnimationExpired, maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime); + var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime; + var endTime = startTime + timerTime; - applyAnimationToStyles(element, options); + var animationsData = element.data(ANIMATE_TIMER_KEY) || []; + var setupFallbackTimer = true; + if (animationsData.length) { + var currentTimerData = animationsData[0]; + setupFallbackTimer = endTime > currentTimerData.expectedEndTime; + if (setupFallbackTimer) { + $timeout.cancel(currentTimerData.timer); + } else { + animationsData.push(close); + } + } + + if (setupFallbackTimer) { + var timer = $timeout(onAnimationExpired, timerTime, false); + animationsData[0] = { + timer: timer, + expectedEndTime: endTime + }; + animationsData.push(close); + element.data(ANIMATE_TIMER_KEY, animationsData); + } + + element.on(events.join(' '), onAnimationProgress); + if (options.to) { + if (options.cleanupStyles) { + registerRestorableStyles(restoreStyles, node, Object.keys(options.to)); + } + applyAnimationToStyles(element, options); + } } function onAnimationExpired() { - // although an expired animation is a failed animation, getting to - // this outcome is very easy if the CSS code screws up. Therefore we - // should still continue normally as if the animation completed correctly. - close(); + var animationsData = element.data(ANIMATE_TIMER_KEY); + + // this will be false in the event that the element was + // removed from the DOM (via a leave animation or something + // similar) + if (animationsData) { + for (var i = 1; i < animationsData.length; i++) { + animationsData[i](); + } + element.removeData(ANIMATE_TIMER_KEY); + } } function onAnimationProgress(event) { @@ -1288,7 +1402,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { } } } - } + }; }]; }]; @@ -1301,16 +1415,27 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out'; var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in'; - this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$document', '$sniffer', - function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $document, $sniffer) { + function isDocumentFragment(node) { + return node.parentNode && node.parentNode.nodeType === 11; + } + + this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document', + function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) { // only browsers that support these properties can render animations if (!$sniffer.animations && !$sniffer.transitions) return noop; - var bodyNode = getDomNode($document).body; + var bodyNode = $document[0].body; var rootNode = getDomNode($rootElement); - var rootBodyElement = jqLite(bodyNode.parentNode === rootNode ? bodyNode : rootNode); + var rootBodyElement = jqLite( + // this is to avoid using something that exists outside of the body + // we also special case the doc fragement case because our unit test code + // appends the $rootElement to the body after the app has been bootstrapped + isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode + ); + + var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); return function initDriverFn(animationDetails) { return animationDetails.from && animationDetails.to @@ -1462,8 +1587,8 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro } function prepareFromToAnchorAnimation(from, to, classes, anchors) { - var fromAnimation = prepareRegularAnimation(from); - var toAnimation = prepareRegularAnimation(to); + var fromAnimation = prepareRegularAnimation(from, noop); + var toAnimation = prepareRegularAnimation(to, noop); var anchorAnimations = []; forEach(anchors, function(anchor) { @@ -1519,19 +1644,23 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro var options = animationDetails.options || {}; if (animationDetails.structural) { - // structural animations ensure that the CSS classes are always applied - // before the detection starts. - options.structural = options.applyClassesEarly = true; + options.event = animationDetails.event; + options.structural = true; + options.applyClassesEarly = true; // we special case the leave animation since we want to ensure that // the element is removed as soon as the animation is over. Otherwise // a flicker might appear or the element may not be removed at all - options.event = animationDetails.event; - if (options.event === 'leave') { + if (animationDetails.event === 'leave') { options.onDone = options.domOperation; } - } else { - options.event = null; + } + + // We assign the preparationClasses as the actual animation event since + // the internals of $animateCss will just suffix the event token values + // with `-active` to trigger the animation. + if (options.preparationClasses) { + options.event = concatWithSpace(options.event, options.preparationClasses); } var animator = $animateCss(element, options); @@ -1550,8 +1679,8 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro // by the time... var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) { - this.$get = ['$injector', '$$AnimateRunner', '$$rAFMutex', '$$jqLite', - function($injector, $$AnimateRunner, $$rAFMutex, $$jqLite) { + this.$get = ['$injector', '$$AnimateRunner', '$$jqLite', + function($injector, $$AnimateRunner, $$jqLite) { var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); // $animateJs(element, 'enter'); @@ -1908,8 +2037,8 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }); rules.skip.push(function(element, newAnimation, currentAnimation) { - // if there is a current animation then skip the class-based animation - return currentAnimation.structural && !newAnimation.structural; + // if there is an ongoing current animation then don't even bother running the class-based animation + return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural; }); rules.cancel.push(function(element, newAnimation, currentAnimation) { @@ -1932,15 +2061,32 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }); this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap', - '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', + '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow', function($$rAF, $rootScope, $rootElement, $document, $$HashMap, - $$animation, $$AnimateRunner, $templateRequest, $$jqLite) { + $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow) { var activeAnimationsLookup = new $$HashMap(); var disabledElementsLookup = new $$HashMap(); - var animationsEnabled = null; + function postDigestTaskFactory() { + var postDigestCalled = false; + return function(fn) { + // we only issue a call to postDigest before + // it has first passed. This prevents any callbacks + // from not firing once the animation has completed + // since it will be out of the digest cycle. + if (postDigestCalled) { + fn(); + } else { + $rootScope.$$postDigest(function() { + postDigestCalled = true; + fn(); + }); + } + }; + } + // Wait until all directive and route-related templates are downloaded and // compiled. The $templateRequest.totalPendingRequests variable keeps track of // all of the remote templates being currently downloaded. If there are no @@ -1970,8 +2116,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { } ); - var bodyElement = jqLite($document[0].body); - var callbackRegistry = {}; // remember that the classNameFilter is set during the provider/config @@ -2005,14 +2149,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return matches; } - function triggerCallback(event, element, phase, data) { - $$rAF(function() { - forEach(findCallbacks(element, event), function(callback) { - callback(element, phase, data); - }); - }); - } - return { on: function(event, container, callback) { var node = extractElementNode(container); @@ -2107,22 +2243,25 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { // These methods will become available after the digest has passed var runner = new $$AnimateRunner(); - // there are situations where a directive issues an animation for - // a jqLite wrapper that contains only comment nodes... If this - // happens then there is no way we can perform an animation - if (!node) { - close(); - return runner; - } + // this is used to trigger callbacks in postDigest mode + var runInNextPostDigestOrNow = postDigestTaskFactory(); if (isArray(options.addClass)) { options.addClass = options.addClass.join(' '); } + if (options.addClass && !isString(options.addClass)) { + options.addClass = null; + } + if (isArray(options.removeClass)) { options.removeClass = options.removeClass.join(' '); } + if (options.removeClass && !isString(options.removeClass)) { + options.removeClass = null; + } + if (options.from && !isObject(options.from)) { options.from = null; } @@ -2131,6 +2270,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { options.to = null; } + // there are situations where a directive issues an animation for + // a jqLite wrapper that contains only comment nodes... If this + // happens then there is no way we can perform an animation + if (!node) { + close(); + return runner; + } + var className = [node.className, options.addClass, options.removeClass].join(' '); if (!isAnimatableClassName(className)) { close(); @@ -2195,8 +2342,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { // method which will call the runner methods in async. existingAnimation.close(); } else { - // this will merge the existing animation options into this new follow-up animation - mergeAnimationOptions(element, newAnimation.options, existingAnimation.options); + // this will merge the new animation options into existing animation options + mergeAnimationOptions(element, existingAnimation.options, newAnimation.options); + return existingAnimation.runner; } } else { // a joined animation means that this animation will take over the existing one @@ -2207,9 +2355,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { if (existingAnimation.state === RUNNING_STATE) { normalizeAnimationOptions(element, options); } else { + applyGeneratedPreparationClasses(element, isStructural ? event : null, options); + event = newAnimation.event = existingAnimation.event; options = mergeAnimationOptions(element, existingAnimation.options, newAnimation.options); - return runner; + + //we return the same runner since only the option values of this animation will + //be fed into the `existingAnimation`. + return existingAnimation.runner; } } } @@ -2235,10 +2388,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return runner; } - if (isStructural) { - closeParentClassBasedAnimations(parent); - } - // the counter keeps track of cancelled animations var counter = (existingAnimation.counter || 0) + 1; newAnimation.counter = counter; @@ -2296,12 +2445,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { ? 'setClass' : animationDetails.event; - if (animationDetails.structural) { - closeParentClassBasedAnimations(parentElement); - } - markElementAnimationState(element, RUNNING_STATE); var realRunner = $$animation(element, event, animationDetails.options); + realRunner.done(function(status) { close(!status); var animationDetails = activeAnimationsLookup.get(node); @@ -2320,11 +2466,25 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return runner; function notifyProgress(runner, event, phase, data) { - triggerCallback(event, element, phase, data); + runInNextPostDigestOrNow(function() { + var callbacks = findCallbacks(element, event); + if (callbacks.length) { + // do not optimize this call here to RAF because + // we don't know how heavy the callback code here will + // be and if this code is buffered then this can + // lead to a performance regression. + $$rAF(function() { + forEach(callbacks, function(callback) { + callback(element, phase, data); + }); + }); + } + }); runner.progress(event, phase, data); } function close(reject) { // jshint ignore:line + clearGeneratedClasses(element, options); applyAnimationClasses(element, options); applyAnimationStyles(element, options); options.domOperation(); @@ -2361,36 +2521,10 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB); } - function closeParentClassBasedAnimations(startingElement) { - var parentNode = getDomNode(startingElement); - do { - if (!parentNode || parentNode.nodeType !== ELEMENT_NODE) break; - - var animationDetails = activeAnimationsLookup.get(parentNode); - if (animationDetails) { - examineParentAnimation(parentNode, animationDetails); - } - - parentNode = parentNode.parentNode; - } while (true); - - // since animations are detected from CSS classes, we need to flush all parent - // class-based animations so that the parent classes are all present for child - // animations to properly function (otherwise any CSS selectors may not work) - function examineParentAnimation(node, animationDetails) { - // enter/leave/move always have priority - if (animationDetails.structural || !hasAnimationClasses(animationDetails.options)) return; - - if (animationDetails.state === RUNNING_STATE) { - animationDetails.runner.end(); - } - clearElementAnimationState(node); - } - } - function areAnimationsAllowed(element, parentElement, event) { - var bodyElementDetected = false; - var rootElementDetected = false; + var bodyElement = jqLite($document[0].body); + var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML'; + var rootElementDetected = isMatchingElement(element, $rootElement); var parentAnimationDetected = false; var animateChildren; @@ -2471,19 +2605,34 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }]; }]; -var $$rAFMutexFactory = ['$$rAF', function($$rAF) { +var $$AnimateAsyncRunFactory = ['$$rAF', function($$rAF) { + var waitQueue = []; + + function waitForTick(fn) { + waitQueue.push(fn); + if (waitQueue.length > 1) return; + $$rAF(function() { + for (var i = 0; i < waitQueue.length; i++) { + waitQueue[i](); + } + waitQueue = []; + }); + } + return function() { var passed = false; - $$rAF(function() { + waitForTick(function() { passed = true; }); - return function(fn) { - passed ? fn() : $$rAF(fn); + return function(callback) { + passed ? callback() : waitForTick(callback); }; }; }]; -var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) { +var $$AnimateRunnerFactory = ['$q', '$sniffer', '$$animateAsyncRun', + function($q, $sniffer, $$animateAsyncRun) { + var INITIAL_STATE = 0; var DONE_PENDING_STATE = 1; var DONE_COMPLETE_STATE = 2; @@ -2528,7 +2677,7 @@ var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) { this.setHost(host); this._doneCallbacks = []; - this._runInAnimationFrame = $$rAFMutex(); + this._runInAnimationFrame = $$animateAsyncRun(); this._state = 0; } @@ -2640,15 +2789,93 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { return element.data(RUNNER_STORAGE_KEY); } - this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$rAFScheduler', - function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$rAFScheduler) { + this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler', + function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap, $$rAFScheduler) { var animationQueue = []; var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - var totalPendingClassBasedAnimations = 0; - var totalActiveClassBasedAnimations = 0; - var classBasedAnimationsQueue = []; + function sortAnimations(animations) { + var tree = { children: [] }; + var i, lookup = new $$HashMap(); + + // this is done first beforehand so that the hashmap + // is filled with a list of the elements that will be animated + for (i = 0; i < animations.length; i++) { + var animation = animations[i]; + lookup.put(animation.domNode, animations[i] = { + domNode: animation.domNode, + fn: animation.fn, + children: [] + }); + } + + for (i = 0; i < animations.length; i++) { + processNode(animations[i]); + } + + return flatten(tree); + + function processNode(entry) { + if (entry.processed) return entry; + entry.processed = true; + + var elementNode = entry.domNode; + var parentNode = elementNode.parentNode; + lookup.put(elementNode, entry); + + var parentEntry; + while (parentNode) { + parentEntry = lookup.get(parentNode); + if (parentEntry) { + if (!parentEntry.processed) { + parentEntry = processNode(parentEntry); + } + break; + } + parentNode = parentNode.parentNode; + } + + (parentEntry || tree).children.push(entry); + return entry; + } + + function flatten(tree) { + var result = []; + var queue = []; + var i; + + for (i = 0; i < tree.children.length; i++) { + queue.push(tree.children[i]); + } + + var remainingLevelEntries = queue.length; + var nextLevelEntries = 0; + var row = []; + + for (i = 0; i < queue.length; i++) { + var entry = queue[i]; + if (remainingLevelEntries <= 0) { + remainingLevelEntries = nextLevelEntries; + nextLevelEntries = 0; + result.push(row); + row = []; + } + row.push(entry.fn); + entry.children.forEach(function(childEntry) { + nextLevelEntries++; + queue.push(childEntry); + }); + remainingLevelEntries--; + } + + if (row.length) { + result.push(row); + } + + return result; + } + } // TODO(matsko): document the signature in a better way return function(element, event, options) { @@ -2678,19 +2905,12 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { options.tempClasses = null; } - var classBasedIndex; - if (!isStructural) { - classBasedIndex = totalPendingClassBasedAnimations; - totalPendingClassBasedAnimations += 1; - } - animationQueue.push({ // this data is used by the postDigest code and passed into // the driver step function element: element, classes: classes, event: event, - classBasedIndex: classBasedIndex, structural: isStructural, options: options, beforeStart: beforeStart, @@ -2705,10 +2925,6 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { if (animationQueue.length > 1) return runner; $rootScope.$$postDigest(function() { - totalActiveClassBasedAnimations = totalPendingClassBasedAnimations; - totalPendingClassBasedAnimations = 0; - classBasedAnimationsQueue.length = 0; - var animations = []; forEach(animationQueue, function(entry) { // the element was destroyed early on which removed the runner @@ -2716,67 +2932,58 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { // at all and it already has been closed due to destruction. if (getRunner(entry.element)) { animations.push(entry); + } else { + entry.close(); } }); // now any future animations will be in another postDigest animationQueue.length = 0; - forEach(groupAnimations(animations), function(animationEntry) { - if (animationEntry.structural) { - triggerAnimationStart(); - } else { - classBasedAnimationsQueue.push({ - node: getDomNode(animationEntry.element), - fn: triggerAnimationStart - }); + var groupedAnimations = groupAnimations(animations); + var toBeSortedAnimations = []; - if (animationEntry.classBasedIndex === totalActiveClassBasedAnimations - 1) { - // we need to sort each of the animations in order of parent to child - // relationships. This ensures that the child classes are applied at the - // right time. - classBasedAnimationsQueue = classBasedAnimationsQueue.sort(function(a,b) { - return b.node.contains(a.node); - }).map(function(entry) { - return entry.fn; - }); + forEach(groupedAnimations, function(animationEntry) { + toBeSortedAnimations.push({ + domNode: getDomNode(animationEntry.from ? animationEntry.from.element : animationEntry.element), + fn: function triggerAnimationStart() { + // it's important that we apply the `ng-animate` CSS class and the + // temporary classes before we do any driver invoking since these + // CSS classes may be required for proper CSS detection. + animationEntry.beforeStart(); - $$rAFScheduler(classBasedAnimationsQueue); - } - } + var startAnimationFn, closeFn = animationEntry.close; - function triggerAnimationStart() { - // it's important that we apply the `ng-animate` CSS class and the - // temporary classes before we do any driver invoking since these - // CSS classes may be required for proper CSS detection. - animationEntry.beforeStart(); + // in the event that the element was removed before the digest runs or + // during the RAF sequencing then we should not trigger the animation. + var targetElement = animationEntry.anchors + ? (animationEntry.from.element || animationEntry.to.element) + : animationEntry.element; - var startAnimationFn, closeFn = animationEntry.close; + if (getRunner(targetElement)) { + var operation = invokeFirstDriver(animationEntry); + if (operation) { + startAnimationFn = operation.start; + } + } - // in the event that the element was removed before the digest runs or - // during the RAF sequencing then we should not trigger the animation. - var targetElement = animationEntry.anchors - ? (animationEntry.from.element || animationEntry.to.element) - : animationEntry.element; - - if (getRunner(targetElement) && getDomNode(targetElement).parentNode) { - var operation = invokeFirstDriver(animationEntry); - if (operation) { - startAnimationFn = operation.start; + if (!startAnimationFn) { + closeFn(); + } else { + var animationRunner = startAnimationFn(); + animationRunner.done(function(status) { + closeFn(!status); + }); + updateAnimationRunners(animationEntry, animationRunner); } } - - if (!startAnimationFn) { - closeFn(); - } else { - var animationRunner = startAnimationFn(); - animationRunner.done(function(status) { - closeFn(!status); - }); - updateAnimationRunners(animationEntry, animationRunner); - } - } + }); }); + + // we need to sort each of the animations in order of parent to child + // relationships. This ensures that the child classes are applied at the + // right time. + $$rAFScheduler(sortAnimations(toBeSortedAnimations)); }); return runner; @@ -2963,7 +3170,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { /* global angularAnimateModule: true, - $$rAFMutexFactory, + $$AnimateAsyncRunFactory, $$rAFSchedulerFactory, $$AnimateChildrenDirective, $$AnimateRunnerFactory, @@ -2981,7 +3188,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * @description * * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via - * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` then the animation hooks are enabled for an Angular app. + * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an Angular app. * *
* @@ -3014,7 +3221,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * 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 * and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation. * - * The example below shows how an `enter` animation can be made possible on a element using `ng-if`: + * The example below shows how an `enter` animation can be made possible on an element using `ng-if`: * * ```html *
@@ -3149,8 +3356,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * /* this will have a 100ms delay between each successive leave animation */ * transition-delay: 0.1s; * - * /* in case the stagger doesn't work then the duration value - * must be set to 0 to avoid an accidental CSS inheritance */ + * /* As of 1.4.4, this must always be set: it signals ngAnimate + * to not accidentally inherit a delay property from another CSS class */ * transition-duration: 0s; * } * .my-animation.ng-enter.ng-enter-active { @@ -3348,6 +3555,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * enter: function(element, doneFn) { * var runner = $animateCss(element, { * event: 'enter', + * structural: true, * addClass: 'maroon-setting', * from: { height:0 }, * to: { height: 200 } @@ -3698,15 +3906,14 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * @description * The ngAnimate `$animate` service documentation is the same for the core `$animate` service. * - * Click here {@link ng.$animate $animate to learn more about animations with `$animate`}. + * Click here {@link ng.$animate to learn more about animations with `$animate`}. */ angular.module('ngAnimate', []) .directive('ngAnimateChildren', $$AnimateChildrenDirective) - - .factory('$$rAFMutex', $$rAFMutexFactory) .factory('$$rAFScheduler', $$rAFSchedulerFactory) .factory('$$AnimateRunner', $$AnimateRunnerFactory) + .factory('$$animateAsyncRun', $$AnimateAsyncRunFactory) .provider('$$animateQueue', $$AnimateQueueProvider) .provider('$$animation', $$AnimationProvider) diff --git a/awx/ui/client/lib/angular-animate/angular-animate.min.js b/awx/ui/client/lib/angular-animate/angular-animate.min.js index a99eac13cc..c24d9e066b 100644 --- a/awx/ui/client/lib/angular-animate/angular-animate.min.js +++ b/awx/ui/client/lib/angular-animate/angular-animate.min.js @@ -1,52 +1,56 @@ /* - AngularJS v1.4.3 + AngularJS v1.4.7 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT */ -(function(F,t,W){'use strict';function ua(a,b,c){if(!a)throw ngMinErr("areq",b||"?",c||"required");return a}function va(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Ea(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function ba(a,b,c){var d="";a=X(a)?a:a&&U(a)&&a.length?a.split(/\s+/):[];u(a,function(a,s){a&&0=F&&b>=J&&(C=!0,m())}if(!K)if(g.parentNode){var x,p=[],k=function(a){if(C)D&&a&&(D=!1,m());else if(D=!a,y.animationDuration)if(a= -ma(g,D),D)l.push(a);else{var b=l,c=b.indexOf(a);0<=a&&b.splice(c,1)}},r=0=a&&(a=m,m=0,b.push(f),f=[]);f.push(g.fn);g.children.forEach(function(a){m++;c.push(a)});a--}f.length&&b.push(f);return b}(c)}var $=[],t=P(a);return function(h,x,A){function Y(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];q(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function E(a){var b=[], +c={};q(a,function(a,e){var d=H(a.element),v=0<=["enter","move"].indexOf(a.event),d=a.structural?Y(d):[];if(d.length){var m=v?"to":"from";q(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][m]={animationID:e,element:J(a)}})}else b.push(a)});var e={},d={};q(c,function(c,m){var f=c.from,y=c.to;if(f&&y){var g=a[f.animationID],r=a[y.animationID],s=f.animationID.toString();if(!d[s]){var h=d[s]={structural:!0,beforeStart:function(){g.beforeStart();r.beforeStart()},close:function(){g.close(); +r.close()},classes:w(g.classes,r.classes),from:g,to:r,anchors:[]};h.classes.length?b.push(h):(b.push(g),b.push(r))}d[s].anchors.push({out:f.element,"in":y.element})}else f=f?f.animationID:y.animationID,y=f.toString(),e[y]||(e[y]=!0,b.push(a[f]))});return b}function w(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],e=0;eF.expectedEndTime)?z.cancel(F.timer):k.push(m)}x&&(l=z(d,l,!1),k[0]={timer:l,expectedEndTime:s},k.push(m),a.data("$$animateCss",k));a.on(h.join(" "),f);c.to&&(c.cleanupStyles&&Da(v,n,Object.keys(c.to)),ya(a,c))}}function d(){var b=a.data("$$animateCss");if(b){for(var c=1;c=M&&b>=K&&(ua=!0,m())}if(!E)if(n.parentNode){var r,h=[],s=function(a){if(ua)l&&a&&(l=!1,m());else if(l=!a,B.animationDuration)if(a=ma(n,l),l)w.push(a);else{var b=w,c=b.indexOf(a);0<=a&&b.splice(c,1)}},k=0} */ function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; + var obj = {}; forEach((keyValue || "").split('&'), function(keyValue) { + var splitPoint, key, val; if (keyValue) { - key_value = keyValue.replace(/\+/g,'%20').split('='); - key = tryDecodeURIComponent(key_value[0]); + key = keyValue = keyValue.replace(/\+/g,'%20'); + splitPoint = keyValue.indexOf('='); + if (splitPoint !== -1) { + key = keyValue.substring(0, splitPoint); + val = keyValue.substring(splitPoint + 1); + } + key = tryDecodeURIComponent(key); if (isDefined(key)) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; + val = isDefined(val) ? tryDecodeURIComponent(val) : true; if (!hasOwnProperty.call(obj, key)) { obj[key] = val; } else if (isArray(obj[key])) { @@ -1715,10 +1742,9 @@ function bindJQuery() { // bind to jQuery if present; var jqName = jq(); - jQuery = window.jQuery; // use default jQuery. - if (isDefined(jqName)) { // `ngJq` present - jQuery = jqName === null ? undefined : window[jqName]; // if empty; use jqLite. if not empty, use jQuery specified by `ngJq`. - } + jQuery = isUndefined(jqName) ? window.jQuery : // use jQuery (if present) + !jqName ? undefined : // use jqLite + window[jqName]; // use jQuery specified by `ngJq` // Use jQuery if it exists with proper functionality, otherwise default to us. // Angular 1.2+ requires jQuery 1.7+ for on()/off() support. @@ -1823,22 +1849,24 @@ function getter(obj, path, bindFnToScope) { /** * Return the DOM siblings between the first and last node in the given array. * @param {Array} array like object - * @returns {jqLite} jqLite collection containing the nodes + * @returns {Array} the inputted object or a jqLite collection containing the nodes */ function getBlockNodes(nodes) { - // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original - // collection, otherwise update the original collection. + // TODO(perf): update `nodes` instead of creating a new object? var node = nodes[0]; var endNode = nodes[nodes.length - 1]; - var blockNodes = [node]; + var blockNodes; - do { - node = node.nextSibling; - if (!node) break; - blockNodes.push(node); - } while (node !== endNode); + for (var i = 1; node !== endNode && (node = node.nextSibling); i++) { + if (blockNodes || nodes[i] !== node) { + if (!blockNodes) { + blockNodes = jqLite(slice.call(nodes, 0, i)); + } + blockNodes.push(node); + } + } - return jqLite(blockNodes); + return blockNodes || nodes; } @@ -1902,8 +1930,8 @@ function setupModuleLoader(window) { * All modules (angular core or 3rd party) that should be available to an application must be * registered using this mechanism. * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. + * Passing one argument retrieves an existing {@link angular.Module}, + * whereas passing more than one argument creates a new {@link angular.Module} * * * # Module @@ -2222,7 +2250,7 @@ function serializeObject(obj) { val = toJsonReplacer(key, val); if (isObject(val)) { - if (seen.indexOf(val) >= 0) return '<>'; + if (seen.indexOf(val) >= 0) return '...'; seen.push(val); } @@ -2233,7 +2261,7 @@ function serializeObject(obj) { function toDebugString(obj) { if (typeof obj === 'function') { return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { + } else if (isUndefined(obj)) { return 'undefined'; } else if (typeof obj !== 'string') { return serializeObject(obj); @@ -2244,7 +2272,6 @@ function toDebugString(obj) { /* global angularModule: true, version: true, - $LocaleProvider, $CompileProvider, htmlAnchorDirective, @@ -2261,7 +2288,6 @@ function toDebugString(obj) { ngClassDirective, ngClassEvenDirective, ngClassOddDirective, - ngCspDirective, ngCloakDirective, ngControllerDirective, ngFormDirective, @@ -2298,6 +2324,7 @@ function toDebugString(obj) { $AnchorScrollProvider, $AnimateProvider, + $CoreAnimateCssProvider, $$CoreAnimateQueueProvider, $$CoreAnimateRunnerProvider, $BrowserProvider, @@ -2306,6 +2333,7 @@ function toDebugString(obj) { $DocumentProvider, $ExceptionHandlerProvider, $FilterProvider, + $$ForceReflowProvider, $InterpolateProvider, $IntervalProvider, $$HashMapProvider, @@ -2313,6 +2341,7 @@ function toDebugString(obj) { $HttpParamSerializerProvider, $HttpParamSerializerJQLikeProvider, $HttpBackendProvider, + $xhrFactoryProvider, $LocationProvider, $LogProvider, $ParseProvider, @@ -2339,8 +2368,9 @@ function toDebugString(obj) { * @name angular.version * @module ng * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: + * An object that contains information about the current AngularJS version. + * + * This object has the following properties: * * - `full` – `{string}` – Full version string, such as "0.9.18". * - `major` – `{number}` – Major version number, such as "0". @@ -2349,11 +2379,11 @@ function toDebugString(obj) { * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.4.3', // all of these placeholder strings will be replaced by grunt's + full: '1.4.7', // all of these placeholder strings will be replaced by grunt's major: 1, // package task minor: 4, - dot: 3, - codeName: 'foam-acceleration' + dot: 7, + codeName: 'dark-luminescence' }; @@ -2392,11 +2422,6 @@ function publishExternalAPI(angular) { }); angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } angularModule('ng', ['ngLocale'], ['$provide', function ngModule($provide) { @@ -2459,6 +2484,7 @@ function publishExternalAPI(angular) { $provide.provider({ $anchorScroll: $AnchorScrollProvider, $animate: $AnimateProvider, + $animateCss: $CoreAnimateCssProvider, $$animateQueue: $$CoreAnimateQueueProvider, $$AnimateRunner: $$CoreAnimateRunnerProvider, $browser: $BrowserProvider, @@ -2467,12 +2493,14 @@ function publishExternalAPI(angular) { $document: $DocumentProvider, $exceptionHandler: $ExceptionHandlerProvider, $filter: $FilterProvider, + $$forceReflow: $$ForceReflowProvider, $interpolate: $InterpolateProvider, $interval: $IntervalProvider, $http: $HttpProvider, $httpParamSerializer: $HttpParamSerializerProvider, $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider, $httpBackend: $HttpBackendProvider, + $xhrFactory: $xhrFactoryProvider, $location: $LocationProvider, $log: $LogProvider, $parse: $ParseProvider, @@ -2561,7 +2589,7 @@ function publishExternalAPI(angular) { * - [`html()`](http://api.jquery.com/html/) * - [`next()`](http://api.jquery.com/next/) - Does not support selectors * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors + * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors * - [`prepend()`](http://api.jquery.com/prepend/) @@ -2575,7 +2603,7 @@ function publishExternalAPI(angular) { * - [`text()`](http://api.jquery.com/text/) * - [`toggleClass()`](http://api.jquery.com/toggleClass/) * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces + * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces or event object as parameter * - [`val()`](http://api.jquery.com/val/) * - [`wrap()`](http://api.jquery.com/wrap/) * @@ -2647,10 +2675,10 @@ function camelCase(name) { replace(MOZ_HACK_REGEXP, 'Moz$1'); } -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; +var SINGLE_TAG_REGEXP = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/; var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; +var TAG_NAME_REGEXP = /<([\w:-]+)/; +var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi; var wrapMap = { 'option': [1, ''], @@ -2946,7 +2974,7 @@ function jqLiteInheritedData(element, name, value) { while (element) { for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = jqLite.data(element, names[i])) !== undefined) return value; + if (isDefined(value = jqLite.data(element, names[i]))) return value; } // If dealing with a document fragment node with a host element, and no parent, use the host @@ -3052,9 +3080,8 @@ function getBooleanAttrName(element, name) { return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr; } -function getAliasedAttrName(element, name) { - var nodeName = element.nodeName; - return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name]; +function getAliasedAttrName(name) { + return ALIASED_ATTR[name]; } forEach({ @@ -3191,7 +3218,7 @@ forEach({ // in a way that survives minification. // jqLiteEmpty takes no arguments but is a setter. if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { + (isUndefined((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) { if (isObject(arg1)) { // we are a write, but the object properties are the key/values @@ -3212,7 +3239,7 @@ forEach({ // TODO: do we still need this? var value = fn.$dv; // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount; + var jj = (isUndefined(value)) ? Math.min(nodeCount, 1) : nodeCount; for (var j = 0; j < jj; j++) { var nodeValue = fn(this[j], arg1, arg2); value = value ? value + nodeValue : nodeValue; @@ -3686,7 +3713,7 @@ var $$HashMapProvider = [function() { * Implicit module which gets automatically added to each {@link auto.$injector $injector}. */ -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARGS = /^[^\(]*\(\s*([^\)]*)\)/m; var FN_ARG_SPLIT = /,/; var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; @@ -4342,6 +4369,7 @@ function createInjector(modulesToLoad, strictDi) { // Module Loading //////////////////////////////////// function loadModules(modulesToLoad) { + assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array'); var runBlocks = [], moduleFn; forEach(modulesToLoad, function(module) { if (loadedModules.get(module)) return; @@ -4850,61 +4878,66 @@ var $$CoreAnimateQueueProvider = function() { } }; - function addRemoveClassesPostDigest(element, add, remove) { - var data = postDigestQueue.get(element); - var classVal; - if (!data) { - postDigestQueue.put(element, data = {}); - postDigestElements.push(element); - } - - if (add) { - forEach(add.split(' '), function(className) { + function updateData(data, classes, value) { + var changed = false; + if (classes) { + classes = isString(classes) ? classes.split(' ') : + isArray(classes) ? classes : []; + forEach(classes, function(className) { if (className) { - data[className] = true; + changed = true; + data[className] = value; } }); } + return changed; + } - if (remove) { - forEach(remove.split(' '), function(className) { - if (className) { - data[className] = false; - } - }); - } - - if (postDigestElements.length > 1) return; - - $rootScope.$$postDigest(function() { - forEach(postDigestElements, function(element) { - var data = postDigestQueue.get(element); - if (data) { - var existing = splitClasses(element.attr('class')); - var toAdd = ''; - var toRemove = ''; - forEach(data, function(status, className) { - var hasClass = !!existing[className]; - if (status !== hasClass) { - if (status) { - toAdd += (toAdd.length ? ' ' : '') + className; - } else { - toRemove += (toRemove.length ? ' ' : '') + className; - } + function handleCSSClassChanges() { + forEach(postDigestElements, function(element) { + var data = postDigestQueue.get(element); + if (data) { + var existing = splitClasses(element.attr('class')); + var toAdd = ''; + var toRemove = ''; + forEach(data, function(status, className) { + var hasClass = !!existing[className]; + if (status !== hasClass) { + if (status) { + toAdd += (toAdd.length ? ' ' : '') + className; + } else { + toRemove += (toRemove.length ? ' ' : '') + className; } - }); + } + }); - forEach(element, function(elm) { - toAdd && jqLiteAddClass(elm, toAdd); - toRemove && jqLiteRemoveClass(elm, toRemove); - }); - postDigestQueue.remove(element); - } - }); - - postDigestElements.length = 0; + forEach(element, function(elm) { + toAdd && jqLiteAddClass(elm, toAdd); + toRemove && jqLiteRemoveClass(elm, toRemove); + }); + postDigestQueue.remove(element); + } }); + postDigestElements.length = 0; + } + + + function addRemoveClassesPostDigest(element, add, remove) { + var data = postDigestQueue.get(element) || {}; + + var classesAdded = updateData(data, add, true); + var classesRemoved = updateData(data, remove, false); + + if (classesAdded || classesRemoved) { + + postDigestQueue.put(element, data); + postDigestElements.push(element); + + if (postDigestElements.length === 1) { + $rootScope.$$postDigest(handleCSSClassChanges); + } + } } }]; }; @@ -5334,15 +5367,95 @@ var $AnimateProvider = ['$provide', function($provide) { }]; }]; -function $$AsyncCallbackProvider() { - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); +/** + * @ngdoc service + * @name $animateCss + * @kind object + * + * @description + * This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included, + * then the `$animateCss` service will actually perform animations. + * + * Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}. + */ +var $CoreAnimateCssProvider = function() { + this.$get = ['$$rAF', '$q', function($$rAF, $q) { + + var RAFPromise = function() {}; + RAFPromise.prototype = { + done: function(cancel) { + this.defer && this.defer[cancel === true ? 'reject' : 'resolve'](); + }, + end: function() { + this.done(); + }, + cancel: function() { + this.done(true); + }, + getPromise: function() { + if (!this.defer) { + this.defer = $q.defer(); + } + return this.defer.promise; + }, + then: function(f1,f2) { + return this.getPromise().then(f1,f2); + }, + 'catch': function(f1) { + return this.getPromise()['catch'](f1); + }, + 'finally': function(f1) { + return this.getPromise()['finally'](f1); + } + }; + + return function(element, options) { + // there is no point in applying the styles since + // there is no animation that goes on at all in + // this version of $animateCss. + if (options.cleanupStyles) { + options.from = options.to = null; + } + + if (options.from) { + element.css(options.from); + options.from = null; + } + + var closed, runner = new RAFPromise(); + return { + start: run, + end: run }; + + function run() { + $$rAF(function() { + close(); + if (!closed) { + runner.done(); + } + closed = true; + }); + return runner; + } + + function close() { + if (options.addClass) { + element.addClass(options.addClass); + options.addClass = null; + } + if (options.removeClass) { + element.removeClass(options.removeClass); + options.removeClass = null; + } + if (options.to) { + element.css(options.to); + options.to = null; + } + } + }; }]; -} +}; /* global stripHash: true */ @@ -5432,7 +5545,7 @@ function Browser(window, document, $log, $sniffer) { var cachedState, lastHistoryState, lastBrowserUrl = location.href, baseElement = document.find('base'), - reloadLocation = null; + pendingLocation = null; cacheState(); lastHistoryState = cachedState; @@ -5492,8 +5605,8 @@ function Browser(window, document, $log, $sniffer) { // Do the assignment again so that those two variables are referentially identical. lastHistoryState = cachedState; } else { - if (!sameBase || reloadLocation) { - reloadLocation = url; + if (!sameBase || pendingLocation) { + pendingLocation = url; } if (replace) { location.replace(url); @@ -5502,14 +5615,18 @@ function Browser(window, document, $log, $sniffer) { } else { location.hash = getHash(url); } + if (location.href !== url) { + pendingLocation = url; + } } return self; // getter } else { - // - reloadLocation is needed as browsers don't allow to read out - // the new location.href if a reload happened. + // - pendingLocation is needed as browsers don't allow to read out + // the new location.href if a reload happened or if there is a bug like in iOS 9 (see + // https://openradar.appspot.com/22186109). // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return reloadLocation || location.href.replace(/%27/g,"'"); + return pendingLocation || location.href.replace(/%27/g,"'"); } }; @@ -5531,6 +5648,7 @@ function Browser(window, document, $log, $sniffer) { urlChangeInit = false; function cacheStateAndFireUrlChange() { + pendingLocation = null; cacheState(); fireUrlChange(); } @@ -5766,10 +5884,10 @@ function $BrowserProvider() { $scope.keys = []; $scope.cache = $cacheFactory('cacheId'); $scope.put = function(key, value) { - if ($scope.cache.get(key) === undefined) { + if (angular.isUndefined($scope.cache.get(key))) { $scope.keys.push(key); } - $scope.cache.put(key, value === undefined ? null : value); + $scope.cache.put(key, angular.isUndefined(value) ? null : value); }; }]); @@ -6245,18 +6363,24 @@ function $TemplateCacheProvider() { * and other directives used in the directive's template will also be excluded from execution. * * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. + * The scope property can be `true`, an object or a falsy value: * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. + * * **falsy:** No scope will be created for the directive. The directive will use its parent's scope. * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: + * * **`true`:** A new child scope that prototypically inherits from its parent will be created for + * the directive's element. If multiple directives on the same element request a new scope, + * only one new scope is created. The new scope rule does not apply for the root of the template + * since the root of the template always gets a new scope. + * + * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's element. The + * 'isolate' scope differs from normal scope in that it does not prototypically inherit from its parent + * scope. This is useful when creating reusable components, which should not accidentally read or modify + * data in the parent scope. + * + * The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the + * directive's element. These local properties are useful for aliasing values for templates. The keys in + * the object hash map to the name of the property on the isolate scope; the values define how the property + * is bound to the parent scope, via matching attributes on the directive's element: * * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is * always a string since DOM attributes are strings. If no `attr` name is specified then the @@ -6289,6 +6413,20 @@ function $TemplateCacheProvider() { * For example, if the expression is `increment(amount)` then we can specify the amount value * by calling the `localFn` as `localFn({amount: 22})`. * + * In general it's possible to apply more than one directive to one element, but there might be limitations + * depending on the type of scope required by the directives. The following points will help explain these limitations. + * For simplicity only two directives are taken into account, but it is also applicable for several directives: + * + * * **no scope** + **no scope** => Two directives which don't require their own scope will use their parent's scope + * * **child scope** + **no scope** => Both directives will share one single child scope + * * **child scope** + **child scope** => Both directives will share one single child scope + * * **isolated scope** + **no scope** => The isolated directive will use it's own created isolated scope. The other directive will use + * its parent's scope + * * **isolated scope** + **child scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives cannot + * be applied to the same element. + * * **isolated scope** + **isolated scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives + * cannot be applied to the same element. + * * * #### `bindToController` * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will @@ -6297,7 +6435,7 @@ function $TemplateCacheProvider() { * * #### `controller` * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see + * pre-linking phase and can be accessed by other directives (see * `require` attribute). This allows the directives to communicate with each other and augment * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: * @@ -6337,9 +6475,10 @@ function $TemplateCacheProvider() { * * #### `controllerAs` * Identifier name for a reference to the controller in the directive's scope. - * This allows the controller to be referenced from the directive template. The directive - * needs to define a scope for this configuration to be used. Useful in the case when - * directive is used as component. + * This allows the controller to be referenced from the directive template. This is especially + * useful when a directive is used as component, i.e. with an `isolate` scope. It's also possible + * to use it in a directive without an `isolate` / `new` scope, but you need to be aware that the + * `controllerAs` reference might overwrite a property that already exists on the parent scope. * * * #### `restrict` @@ -6506,7 +6645,7 @@ function $TemplateCacheProvider() { * otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown. * * Note that you can also require the directive's own controller - it will be made available like - * like any other controller. + * any other controller. * * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. * This is the same as the `$transclude` @@ -6532,7 +6671,7 @@ function $TemplateCacheProvider() { * * ### Transclusion * - * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and + * Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and * copying them to another part of the DOM, while maintaining their connection to the original AngularJS * scope from where they were taken. * @@ -7176,7 +7315,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { var node = this.$$element[0], booleanKey = getBooleanAttrName(node, key), - aliasedKey = getAliasedAttrName(node, key), + aliasedKey = getAliasedAttrName(key), observer = key, nodeName; @@ -7243,7 +7382,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (writeAttr !== false) { - if (value === null || value === undefined) { + if (value === null || isUndefined(value)) { this.$$element.removeAttr(attrName); } else { this.$$element.attr(attrName, value); @@ -7287,7 +7426,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { listeners.push(fn); $rootScope.$evalAsync(function() { - if (!listeners.$$inter && attrs.hasOwnProperty(key)) { + if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) { // no one registered attribute interpolation function, so lets call it manually fn(attrs[key]); } @@ -8209,7 +8348,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { i = 0, ii = directives.length; i < ii; i++) { try { directive = directives[i]; - if ((maxPriority === undefined || maxPriority > directive.priority) && + if ((isUndefined(maxPriority) || maxPriority > directive.priority) && directive.restrict.indexOf(location) != -1) { if (startAttrName) { directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); @@ -8505,7 +8644,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { compile: function() { return { pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); + var $$observers = (attr.$$observers || (attr.$$observers = createMap())); if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { throw $compileMinErr('nodomevents', @@ -8666,24 +8805,19 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { lastValue, parentGet, parentSet, compare; - if (!hasOwnProperty.call(attrs, attrName)) { - // In the case of user defined a binding with the same name as a method in Object.prototype but didn't set - // the corresponding attribute. We need to make sure subsequent code won't access to the prototype function - attrs[attrName] = undefined; - } - switch (mode) { case '@': - if (!attrs[attrName] && !optional) { - destination[scopeName] = undefined; + if (!optional && !hasOwnProperty.call(attrs, attrName)) { + destination[scopeName] = attrs[attrName] = void 0; } - attrs.$observe(attrName, function(value) { - destination[scopeName] = value; + if (isString(value)) { + destination[scopeName] = value; + } }); attrs.$$observers[attrName].$$scope = scope; - if (attrs[attrName]) { + if (isString(attrs[attrName])) { // If the attribute has been provided then we trigger an interpolation to ensure // the value is there for use in the link fn destination[scopeName] = $interpolate(attrs[attrName])(scope); @@ -8691,11 +8825,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { break; case '=': - if (optional && !attrs[attrName]) { - return; + if (!hasOwnProperty.call(attrs, attrName)) { + if (optional) break; + attrs[attrName] = void 0; } - parentGet = $parse(attrs[attrName]); + if (optional && !attrs[attrName]) break; + parentGet = $parse(attrs[attrName]); if (parentGet.literal) { compare = equals; } else { @@ -8734,7 +8870,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { break; case '&': - parentGet = $parse(attrs[attrName]); + // Don't assign Object.prototype method to scope + parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop; // Don't assign noop to destination if expression is not valid if (parentGet === noop && optional) break; @@ -9111,6 +9248,29 @@ function $ExceptionHandlerProvider() { }]; } +var $$ForceReflowProvider = function() { + this.$get = ['$document', function($document) { + return function(domNode) { + //the line below will force the browser to perform a repaint so + //that all the animated elements within the animation frame will + //be properly updated and drawn on screen. This is required to + //ensure that the preparation animation is properly flushed so that + //the active state picks up from there. DO NOT REMOVE THIS LINE. + //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH + //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND + //WILL TAKE YEARS AWAY FROM YOUR LIFE. + if (domNode) { + if (!domNode.nodeType && domNode instanceof jqLite) { + domNode = domNode[0]; + } + } else { + domNode = $document[0].body; + } + return domNode.offsetWidth + 1; + }; + }]; +}; + var APPLICATION_JSON = 'application/json'; var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'}; var JSON_START = /^\[|^\{(?!\{)/; @@ -9119,6 +9279,12 @@ var JSON_ENDS = { '{': /}$/ }; var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/; +var $httpMinErr = minErr('$http'); +var $httpMinErrLegacyFn = function(method) { + return function() { + throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method); + }; +}; function serializeValue(v) { if (isObject(v)) { @@ -9219,8 +9385,8 @@ function $HttpParamSerializerJQLikeProvider() { function serialize(toSerialize, prefix, topLevel) { if (toSerialize === null || isUndefined(toSerialize)) return; if (isArray(toSerialize)) { - forEach(toSerialize, function(value) { - serialize(value, prefix + '[]'); + forEach(toSerialize, function(value, index) { + serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']'); }); } else if (isObject(toSerialize) && !isDate(toSerialize)) { forEachSorted(toSerialize, function(value, key) { @@ -9441,6 +9607,30 @@ function $HttpProvider() { return useApplyAsync; }; + var useLegacyPromise = true; + /** + * @ngdoc method + * @name $httpProvider#useLegacyPromiseExtensions + * @description + * + * Configure `$http` service to return promises without the shorthand methods `success` and `error`. + * This should be used to make sure that applications work without these methods. + * + * Defaults to false. If no value is specified, returns the current configured value. + * + * @param {boolean=} value If true, `$http` will return a normal promise without the `success` and `error` methods. + * + * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining. + * otherwise, returns the current configured value. + **/ + this.useLegacyPromiseExtensions = function(value) { + if (isDefined(value)) { + useLegacyPromise = !!value; + return this; + } + return useLegacyPromise; + }; + /** * @ngdoc property * @name $httpProvider#interceptors @@ -9506,66 +9696,47 @@ function $HttpProvider() { * * * ## General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. + * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} — + * that is used to generate an HTTP request and returns a {@link ng.$q promise}. * * ```js - * // Simple GET request example : - * $http.get('/someUrl'). - * success(function(data, status, headers, config) { + * // Simple GET request example: + * $http({ + * method: 'GET', + * url: '/someUrl' + * }).then(function successCallback(response) { * // this callback will be called asynchronously * // when the response is available - * }). - * error(function(data, status, headers, config) { + * }, function errorCallback(response) { * // called asynchronously if an error occurs * // or server returns response with an error status. * }); * ``` * - * ```js - * // Simple POST request example (passing data) : - * $http.post('/someUrl', {msg:'hello word!'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` + * The response object has these properties: * - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. + * - **data** – `{string|Object}` – The response body transformed with the transform + * functions. + * - **status** – `{number}` – HTTP status code of the response. + * - **headers** – `{function([headerName])}` – Header getter function. + * - **config** – `{Object}` – The configuration object that was used to generate the request. + * - **statusText** – `{string}` – HTTP status text of the response. * * A response status code between 200 and 299 is considered a success status and * will result in the success callback being called. Note that if the response is a redirect, * XMLHttpRequest will transparently follow it, meaning that the error callback will not be * called for such responses. * - * ## Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` * * ## Shortcut methods * * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. + * request data must be passed in for POST/PUT requests. An optional config can be passed as the + * last argument. * * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); + * $http.get('/someUrl', config).then(successCallback, errorCallback); + * $http.post('/someUrl', data, config).then(successCallback, errorCallback); * ``` * * Complete list of shortcut methods: @@ -9579,6 +9750,25 @@ function $HttpProvider() { * - {@link ng.$http#patch $http.patch} * * + * ## Writing Unit Tests that use $http + * When unit testing (using {@link ngMock ngMock}), it is necessary to call + * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending + * request using trained responses. + * + * ``` + * $httpBackend.expectGET(...); + * $http.get(...); + * $httpBackend.flush(); + * ``` + * + * ## Deprecation Notice + *
+ * The `$http` legacy promise methods `success` and `error` have been deprecated. + * Use the standard `then` method instead. + * If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to + * `false` then these methods will throw {@link $http:legacy `$http/legacy`} error. + *
+ * * ## Setting HTTP Headers * * The $http service will automatically add certain HTTP headers to all requests. These defaults @@ -9622,7 +9812,7 @@ function $HttpProvider() { * data: { test: 'test' } * } * - * $http(req).success(function(){...}).error(function(){...}); + * $http(req).then(function(){...}, function(){...}); * ``` * * ## Transforming Requests and Responses @@ -9728,7 +9918,7 @@ function $HttpProvider() { * * There are two kinds of interceptors (and two kinds of rejection interceptors): * - * * `request`: interceptors get called with a http `config` object. The function is free to + * * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to * modify the `config` object or create a new one. The function needs to return the `config` * object directly, or a promise containing the `config` or a new `config` object. * * `requestError`: interceptor gets called when a previous interceptor threw an error or @@ -9854,7 +10044,6 @@ function $HttpProvider() { * In order to prevent collisions in environments where multiple Angular apps share the * same domain or subdomain, we recommend that each application uses unique cookie name. * - * * @param {object} config Object describing the request to be made and how it should be * processed. The object has following properties: * @@ -9899,20 +10088,9 @@ function $HttpProvider() { * - **responseType** - `{string}` - see * [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype). * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: + * @returns {HttpPromise} Returns a {@link ng.$q `Promise}` that will be resolved to a response object + * when the request succeeds or fails. * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. * * @property {Array.} pendingRequests Array of config objects for currently pending * requests. This is primarily meant to be used for debugging purposes. @@ -9954,13 +10132,12 @@ function $HttpProvider() { $scope.response = null; $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; + then(function(response) { + $scope.status = response.status; + $scope.data = response.data; + }, function(response) { + $scope.data = response.data || "Request failed"; + $scope.status = response.status; }); }; @@ -10065,23 +10242,28 @@ function $HttpProvider() { promise = promise.then(thenFn, rejectFn); } - promise.success = function(fn) { - assertArgFn(fn, 'fn'); + if (useLegacyPromise) { + promise.success = function(fn) { + assertArgFn(fn, 'fn'); - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; + promise.then(function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; - promise.error = function(fn) { - assertArgFn(fn, 'fn'); + promise.error = function(fn) { + assertArgFn(fn, 'fn'); - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; + promise.then(null, function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; + } else { + promise.success = $httpMinErrLegacyFn('success'); + promise.error = $httpMinErrLegacyFn('error'); + } return promise; @@ -10370,8 +10552,8 @@ function $HttpProvider() { * Resolves the raw $http promise. */ function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); + //status: HTTP response status code, 0, -1 (aborted by timeout / promise) + status = status >= -1 ? status : 0; (isSuccess(status) ? deferred.resolve : deferred.reject)({ data: response, @@ -10402,8 +10584,33 @@ function $HttpProvider() { }]; } -function createXhr() { - return new window.XMLHttpRequest(); +/** + * @ngdoc service + * @name $xhrFactory + * + * @description + * Factory function used to create XMLHttpRequest objects. + * + * Replace or decorate this service to create your own custom XMLHttpRequest objects. + * + * ``` + * angular.module('myApp', []) + * .factory('$xhrFactory', function() { + * return function createXhr(method, url) { + * return new window.XMLHttpRequest({mozSystem: true}); + * }; + * }); + * ``` + * + * @param {string} method HTTP method of the request (GET, POST, PUT, ..) + * @param {string} url URL of the request. + */ +function $xhrFactoryProvider() { + this.$get = function() { + return function createXhr() { + return new window.XMLHttpRequest(); + }; + }; } /** @@ -10411,6 +10618,7 @@ function createXhr() { * @name $httpBackend * @requires $window * @requires $document + * @requires $xhrFactory * * @description * HTTP backend used by the {@link ng.$http service} that delegates to @@ -10423,8 +10631,8 @@ function createXhr() { * $httpBackend} which can be trained with responses. */ function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); + this.$get = ['$browser', '$window', '$document', '$xhrFactory', function($browser, $window, $document, $xhrFactory) { + return createHttpBackend($browser, $xhrFactory, $browser.defer, $window.angular.callbacks, $document[0]); }]; } @@ -10448,7 +10656,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc }); } else { - var xhr = createXhr(); + var xhr = createXhr(method, url); xhr.open(method, url, true); forEach(headers, function(value, key) { @@ -10460,7 +10668,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc xhr.onload = function requestLoaded() { var statusText = xhr.statusText || ''; - // responseText is the old-school way of retrieving response (supported by IE8 & 9) + // responseText is the old-school way of retrieving response (supported by IE9) // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) var response = ('response' in xhr) ? xhr.response : xhr.responseText; @@ -10511,7 +10719,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc } } - xhr.send(post); + xhr.send(isUndefined(post) ? null : post); } if (timeout > 0) { @@ -10528,7 +10736,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc function completeRequest(callback, status, response, headersString, statusText) { // cancel timeout and subsequent timeout promise resolution - if (timeoutId !== undefined) { + if (isDefined(timeoutId)) { $browserDefer.cancel(timeoutId); } jsonpDone = xhr = null; @@ -10714,7 +10922,7 @@ function $InterpolateProvider() { * ```js * var $interpolate = ...; // injected * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); + * expect(exp({name:'Angular'})).toEqual('Hello ANGULAR!'); * ``` * * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is @@ -11098,7 +11306,7 @@ function $IntervalProvider() { * @description * Cancels a task associated with the `promise`. * - * @param {promise} promise returned by the `$interval` function. + * @param {Promise=} promise returned by the `$interval` function. * @returns {boolean} Returns `true` if the task was successfully canceled. */ interval.cancel = function(promise) { @@ -11125,75 +11333,6 @@ function $IntervalProvider() { * * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) */ -function $LocaleProvider() { - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - 'short': 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a', - ERANAMES: [ - "Before Christ", - "Anno Domini" - ], - ERAS: [ - "BC", - "AD" - ] - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; @@ -11284,12 +11423,12 @@ function serverBase(url) { * * @constructor * @param {string} appBase application base URL + * @param {string} appBaseNoFile application base URL stripped of any filename * @param {string} basePrefix url path prefix */ -function LocationHtml5Url(appBase, basePrefix) { +function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) { this.$$html5 = true; basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); parseAbsoluteUrl(appBase, this); @@ -11336,14 +11475,14 @@ function LocationHtml5Url(appBase, basePrefix) { var appUrl, prevAppUrl; var rewrittenUrl; - if ((appUrl = beginsWith(appBase, url)) !== undefined) { + if (isDefined(appUrl = beginsWith(appBase, url))) { prevAppUrl = appUrl; - if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) { + if (isDefined(appUrl = beginsWith(basePrefix, appUrl))) { rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl); } else { rewrittenUrl = appBase + prevAppUrl; } - } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) { + } else if (isDefined(appUrl = beginsWith(appBaseNoFile, url))) { rewrittenUrl = appBaseNoFile + appUrl; } else if (appBaseNoFile == url + '/') { rewrittenUrl = appBaseNoFile; @@ -11363,10 +11502,10 @@ function LocationHtml5Url(appBase, basePrefix) { * * @constructor * @param {string} appBase application base URL + * @param {string} appBaseNoFile application base URL stripped of any filename * @param {string} hashPrefix hashbang prefix */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); +function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) { parseAbsoluteUrl(appBase, this); @@ -11475,14 +11614,13 @@ function LocationHashbangUrl(appBase, hashPrefix) { * * @constructor * @param {string} appBase application base URL + * @param {string} appBaseNoFile application base URL stripped of any filename * @param {string} hashPrefix hashbang prefix */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { +function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) { this.$$html5 = true; LocationHashbangUrl.apply(this, arguments); - var appBaseNoFile = stripFile(appBase); - this.$$parseLinkUrl = function(url, relHref) { if (relHref && relHref[0] === '#') { // special case for links to hash fragments: @@ -11512,7 +11650,7 @@ function LocationHashbangInHtml5Url(appBase, hashPrefix) { hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#' + // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#' this.$$absUrl = appBase + hashPrefix + this.$$url; }; @@ -12021,7 +12159,9 @@ function $LocationProvider() { appBase = stripHash(initialUrl); LocationMode = LocationHashbangUrl; } - $location = new LocationMode(appBase, '#' + hashPrefix); + var appBaseNoFile = stripFile(appBase); + + $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix); $location.$$parseLinkUrl(initialUrl, initialUrl); $location.$$state = $browser.state(); @@ -12101,6 +12241,13 @@ function $LocationProvider() { // update $location when $browser url changes $browser.onUrlChange(function(newUrl, newState) { + + if (isUndefined(beginsWith(appBaseNoFile, newUrl))) { + // If we are navigating outside of the app then force a reload + $window.location.href = newUrl; + return; + } + $rootScope.$evalAsync(function() { var oldUrl = $location.absUrl(); var oldState = $location.$$state; @@ -12388,6 +12535,25 @@ function ensureSafeMemberName(name, fullExpression) { return name; } +function getStringValue(name, fullExpression) { + // From the JavaScript docs: + // Property names must be strings. This means that non-string objects cannot be used + // as keys in an object. Any non-string object, including a number, is typecasted + // into a string via the toString method. + // + // So, to ensure that we are checking the same `name` that JavaScript would use, + // we cast it to a string, if possible. + // Doing `name + ''` can cause a repl error if the result to `toString` is not a string, + // this is, this will handle objects that misbehave. + name = name + ''; + if (!isString(name)) { + throw $parseMinErr('iseccst', + 'Cannot convert object to primitive value! ' + + 'Expression: {0}', fullExpression); + } + return name; +} + function ensureSafeObject(obj, fullExpression) { // nifty check if obj is Function that is fast and works across iframes and other contexts if (obj) { @@ -12433,6 +12599,16 @@ function ensureSafeFunction(obj, fullExpression) { } } +function ensureSafeAssignContext(obj, fullExpression) { + if (obj) { + if (obj === (0).constructor || obj === (false).constructor || obj === ''.constructor || + obj === {}.constructor || obj === [].constructor || obj === Function.constructor) { + throw $parseMinErr('isecaf', + 'Assigning to a constructor is disallowed! Expression: {0}', fullExpression); + } + } +} + var OPERATORS = createMap(); forEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; }); var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; @@ -13114,6 +13290,7 @@ ASTCompiler.prototype = { this.state.computing = 'assign'; var result = this.nextId(); this.recurse(assignable, result); + this.return_(result); extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l'); } var toWatch = getInputs(ast.body); @@ -13146,6 +13323,8 @@ ASTCompiler.prototype = { 'ensureSafeMemberName', 'ensureSafeObject', 'ensureSafeFunction', + 'getStringValue', + 'ensureSafeAssignContext', 'ifDefined', 'plus', 'text', @@ -13154,6 +13333,8 @@ ASTCompiler.prototype = { ensureSafeMemberName, ensureSafeObject, ensureSafeFunction, + getStringValue, + ensureSafeAssignContext, ifDefined, plusFn, expression); @@ -13297,6 +13478,7 @@ ASTCompiler.prototype = { if (ast.computed) { right = self.nextId(); self.recurse(ast.property, right); + self.getStringValue(right); self.addEnsureSafeMemberName(right); if (create && create !== 1) { self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}')); @@ -13380,6 +13562,7 @@ ASTCompiler.prototype = { self.if_(self.notNull(left.context), function() { self.recurse(ast.right, right); self.addEnsureSafeObject(self.member(left.context, left.name, left.computed)); + self.addEnsureSafeAssignContext(left.context); expression = self.member(left.context, left.name, left.computed) + ast.operator + right; self.assign(intoId, expression); recursionFn(intoId || expression); @@ -13505,6 +13688,10 @@ ASTCompiler.prototype = { this.current().body.push(this.ensureSafeFunction(item), ';'); }, + addEnsureSafeAssignContext: function(item) { + this.current().body.push(this.ensureSafeAssignContext(item), ';'); + }, + ensureSafeObject: function(item) { return 'ensureSafeObject(' + item + ',text)'; }, @@ -13517,6 +13704,14 @@ ASTCompiler.prototype = { return 'ensureSafeFunction(' + item + ',text)'; }, + getStringValue: function(item) { + this.assign(item, 'getStringValue(' + item + ',text)'); + }, + + ensureSafeAssignContext: function(item) { + return 'ensureSafeAssignContext(' + item + ',text)'; + }, + lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) { var self = this; return function() { @@ -13694,6 +13889,7 @@ ASTInterpreter.prototype = { var lhs = left(scope, locals, assign, inputs); var rhs = right(scope, locals, assign, inputs); ensureSafeObject(lhs.value, self.expression); + ensureSafeAssignContext(lhs.context); lhs.context[lhs.name] = rhs; return context ? {value: rhs} : rhs; }; @@ -13891,6 +14087,7 @@ ASTInterpreter.prototype = { var value; if (lhs != null) { rhs = right(scope, locals, assign, inputs); + rhs = getStringValue(rhs); ensureSafeMemberName(rhs, expression); if (create && create !== 1 && lhs && !(lhs[rhs])) { lhs[rhs] = {}; @@ -13950,29 +14147,6 @@ Parser.prototype = { } }; -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, path, setValue, fullExp) { - ensureSafeObject(obj, fullExp); - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = ensureSafeObject(obj[key], fullExp); - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = propertyObj; - } - key = ensureSafeMemberName(element.shift(), fullExp); - ensureSafeObject(obj[key], fullExp); - obj[key] = setValue; - return setValue; -} - var getterFnCacheDefault = createMap(); var getterFnCacheExpensive = createMap(); @@ -14041,13 +14215,14 @@ function $ParseProvider() { var cacheDefault = createMap(); var cacheExpensive = createMap(); - this.$get = ['$filter', '$sniffer', function($filter, $sniffer) { + this.$get = ['$filter', function($filter) { + var noUnsafeEval = csp().noUnsafeEval; var $parseOptions = { - csp: $sniffer.csp, + csp: noUnsafeEval, expensiveChecks: false }, $parseOptionsExpensive = { - csp: $sniffer.csp, + csp: noUnsafeEval, expensiveChecks: true }; @@ -14522,8 +14697,11 @@ function qFactory(nextTick, exceptionHandler) { this.$$state = { status: 0 }; } - Promise.prototype = { + extend(Promise.prototype, { then: function(onFulfilled, onRejected, progressBack) { + if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) { + return this; + } var result = new Deferred(); this.$$state.pending = this.$$state.pending || []; @@ -14544,7 +14722,7 @@ function qFactory(nextTick, exceptionHandler) { return handleCallback(error, false, callback); }, progressBack); } - }; + }); //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native function simpleBind(context, fn) { @@ -14591,7 +14769,7 @@ function qFactory(nextTick, exceptionHandler) { this.notify = simpleBind(this, this.notify); } - Deferred.prototype = { + extend(Deferred.prototype, { resolve: function(val) { if (this.promise.$$state.status) return; if (val === this.promise) { @@ -14654,7 +14832,7 @@ function qFactory(nextTick, exceptionHandler) { }); } } - }; + }); /** * @ngdoc method @@ -14737,6 +14915,9 @@ function qFactory(nextTick, exceptionHandler) { * the promise comes from a source that can't be trusted. * * @param {*} value Value or a promise + * @param {Function=} successCallback + * @param {Function=} errorCallback + * @param {Function=} progressCallback * @returns {Promise} Returns a promise of the passed value or promise */ @@ -14756,6 +14937,9 @@ function qFactory(nextTick, exceptionHandler) { * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6. * * @param {*} value Value or a promise + * @param {Function=} successCallback + * @param {Function=} errorCallback + * @param {Function=} progressCallback * @returns {Promise} Returns a promise of the passed value or promise */ var resolve = when; @@ -14844,7 +15028,7 @@ function $$RAFProvider() { //rAF $window.webkitCancelRequestAnimationFrame; var rafSupported = !!requestAnimationFrame; - var rafFn = rafSupported + var raf = rafSupported ? function(fn) { var id = requestAnimationFrame(fn); return function() { @@ -14858,47 +15042,9 @@ function $$RAFProvider() { //rAF }; }; - queueFn.supported = rafSupported; + raf.supported = rafSupported; - var cancelLastRAF; - var taskCount = 0; - var taskQueue = []; - return queueFn; - - function flush() { - for (var i = 0; i < taskQueue.length; i++) { - var task = taskQueue[i]; - if (task) { - taskQueue[i] = null; - task(); - } - } - taskCount = taskQueue.length = 0; - } - - function queueFn(asyncFn) { - var index = taskQueue.length; - - taskCount++; - taskQueue.push(asyncFn); - - if (index === 0) { - cancelLastRAF = rafFn(flush); - } - - return function cancelQueueFn() { - if (index >= 0) { - taskQueue[index] = null; - index = null; - - if (--taskCount === 0 && cancelLastRAF) { - cancelLastRAF(); - cancelLastRAF = null; - taskQueue.length = 0; - } - } - }; - } + return raf; }]; } @@ -15011,12 +15157,9 @@ function $RootScopeProvider() { * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the * {@link auto.$injector $injector}. Child scopes are created using the * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) + * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for + * an in-depth introduction and usage examples. * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * - * ``` * * # Inheritance * A scope can inherit from a parent scope, as in this example: @@ -15158,10 +15301,10 @@ function $RootScopeProvider() { * Registers a `listener` callback to be executed whenever the `watchExpression` changes. * * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) + * $digest()} and should return the value that will be watched. (`watchExpression` should not change + * its value when executed multiple times with the same input because it may be executed multiple + * times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be + * [idempotent](http://en.wikipedia.org/wiki/Idempotence). * - The `listener` is called only when the value from the current `watchExpression` and the * previous call to `watchExpression` are not equal (with the exception of the initial run, * see below). Inequality is determined according to reference inequality, @@ -15178,9 +15321,9 @@ function $RootScopeProvider() { * * * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) + * you can register a `watchExpression` function with no `listener`. (Be prepared for + * multiple calls to your `watchExpression` because it will execute multiple times in a + * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.) * * After a watcher is registered with the scope, the `listener` fn is called asynchronously * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the @@ -15510,7 +15653,7 @@ function $RootScopeProvider() { // copy the items to oldValue and look for changes. newLength = 0; for (key in newValue) { - if (newValue.hasOwnProperty(key)) { + if (hasOwnProperty.call(newValue, key)) { newLength++; newItem = newValue[key]; oldItem = oldValue[key]; @@ -15532,7 +15675,7 @@ function $RootScopeProvider() { // we used to have more keys, need to find them and destroy them. changeDetected++; for (key in oldValue) { - if (!newValue.hasOwnProperty(key)) { + if (!hasOwnProperty.call(newValue, key)) { oldLength--; delete oldValue[key]; } @@ -15942,11 +16085,14 @@ function $RootScopeProvider() { $apply: function(expr) { try { beginPhase('$apply'); - return this.$eval(expr); + try { + return this.$eval(expr); + } finally { + clearPhase(); + } } catch (e) { $exceptionHandler(e); } finally { - clearPhase(); try { $rootScope.$digest(); } catch (e) { @@ -16614,7 +16760,7 @@ function $SceDelegateProvider() { 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', type, trustedValue); } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { + if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') { return trustedValue; } // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting @@ -16669,7 +16815,7 @@ function $SceDelegateProvider() { * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. */ function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { + if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') { return maybeTrusted; } var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); @@ -16862,10 +17008,10 @@ function $SceDelegateProvider() { * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters * match themselves. * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use + * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'. It's a useful wildcard for use * in a whitelist. * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. + * appropriate for use in a scheme, domain, etc. as it would match too much. (e.g. * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might * not have been the intention.) Its usage at the very end of the path is ok. (e.g. * http://foo.example.com/templates/**). @@ -16873,11 +17019,11 @@ function $SceDelegateProvider() { * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a + * have good test coverage). For instance, the use of `.` in the regex is correct only in a * small number of cases. A `.` character in the regex used when matching the scheme or a * subdomain could be matched against a `:` or literal `.` that was likely not intended. It * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. + * as a last resort. * - The regular expression must be an instance of RegExp (i.e. not a string.) It is * matched against the **entire** *normalized / absolute URL* of the resource being tested * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags @@ -16887,7 +17033,7 @@ function $SceDelegateProvider() { * remember to escape your regular expression (and be aware that you might need more than * one level of escaping depending on your templating engine and the way you interpolated * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has + * enough before coding your own. E.g. Ruby has * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). * Javascript lacks a similar built in function for escaping. Take a look at Google @@ -17775,20 +17921,13 @@ var originUrl = urlResolve(window.location.href); * * Implementation Notes for IE * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other + * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other * browsers. However, the parsed components will not be set if the URL assigned did not specify * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We * work around that by performing the parsing in a 2nd step by taking a previously normalized * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the * properties such as protocol, hostname, port, etc. * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * * References: * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html @@ -17937,7 +18076,7 @@ function $$CookieReader($document) { // the first value that is seen for a cookie is the most // specific one. values for the same cookie name that // follow are for less specific paths. - if (lastCookies[name] === undefined) { + if (isUndefined(lastCookies[name])) { lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1)); } } @@ -18068,6 +18207,7 @@ function $FilterProvider($provide) { * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores * (`myapp_subsection_filterx`). * + * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered. * @returns {Object} Registered filter instance, or if a map of filters was provided then a map * of the registered filter instances. */ @@ -18415,9 +18555,9 @@ function getTypeForFilter(val) { } element(by.model('amount')).clear(); element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)'); + expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00'); + expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00'); + expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234'); }); @@ -18584,6 +18724,7 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { if (fractionSize > 0 && number < 1) { formatedText = number.toFixed(fractionSize); number = parseFloat(formatedText); + formatedText = formatedText.replace(DECIMAL_SEP, decimalSep); } } @@ -19257,6 +19398,10 @@ function orderByFilter($parse) { if (sortPredicate.length === 0) { sortPredicate = ['+']; } var predicates = processPredicates(sortPredicate, reverseOrder); + // Add a predicate at the end that evaluates to the element index. This makes the + // sort stable as it works as a tie-breaker when all the input predicates cannot + // distinguish between two elements. + predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1}); // The next three lines are a version of a Swartzian Transform idiom from Perl // (sometimes called the Decorate-Sort-Undecorate idiom) @@ -19878,6 +20023,7 @@ function nullFormRenameControl(control, name) { * @property {boolean} $dirty True if user has already interacted with the form. * @property {boolean} $valid True if all of the containing forms and controls are valid. * @property {boolean} $invalid True if at least one containing control or form is invalid. + * @property {boolean} $pending True if at least one containing control or form is pending. * @property {boolean} $submitted True if user has submitted the form even if its invalid. * * @property {Object} $error Is an object hash, containing references to controls or @@ -19917,8 +20063,6 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { var form = this, controls = []; - var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl; - // init state form.$error = {}; form.$$success = {}; @@ -19929,8 +20073,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { form.$valid = true; form.$invalid = false; form.$submitted = false; - - parentForm.$addControl(form); + form.$$parentForm = nullFormCtrl; /** * @ngdoc method @@ -19969,11 +20112,23 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { /** * @ngdoc method * @name form.FormController#$addControl + * @param {object} control control object, either a {@link form.FormController} or an + * {@link ngModel.NgModelController} * * @description - * Register a control with the form. + * Register a control with the form. Input elements using ngModelController do this automatically + * when they are linked. * - * Input elements using ngModelController do this automatically when they are linked. + * Note that the current state of the control will not be reflected on the new parent form. This + * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine` + * state. + * + * However, if the method is used programmatically, for example by adding dynamically created controls, + * or controls that have been previously removed without destroying their corresponding DOM element, + * it's the developers responsiblity to make sure the current state propagates to the parent form. + * + * For example, if an input control is added that is already `$dirty` and has `$error` properties, + * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form. */ form.$addControl = function(control) { // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored @@ -19984,6 +20139,8 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { if (control.$name) { form[control.$name] = control; } + + control.$$parentForm = form; }; // Private API: rename a form control @@ -20000,11 +20157,18 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { /** * @ngdoc method * @name form.FormController#$removeControl + * @param {object} control control object, either a {@link form.FormController} or an + * {@link ngModel.NgModelController} * * @description * Deregister a control from the form. * * Input elements using ngModelController do this automatically when they are destroyed. + * + * Note that only the removed control's validation state (`$errors`etc.) will be removed from the + * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be + * different from case to case. For example, removing the only `$dirty` control from a form may or + * may not mean that the form is still `$dirty`. */ form.$removeControl = function(control) { if (control.$name && form[control.$name] === control) { @@ -20021,6 +20185,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { }); arrayRemove(controls, control); + control.$$parentForm = nullFormCtrl; }; @@ -20057,7 +20222,6 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { delete object[property]; } }, - parentForm: parentForm, $animate: $animate }); @@ -20076,7 +20240,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { $animate.addClass(element, DIRTY_CLASS); form.$dirty = true; form.$pristine = false; - parentForm.$setDirty(); + form.$$parentForm.$setDirty(); }; /** @@ -20132,7 +20296,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { form.$setSubmitted = function() { $animate.addClass(element, SUBMITTED_CLASS); form.$submitted = true; - parentForm.$setSubmitted(); + form.$$parentForm.$setSubmitted(); }; } @@ -20182,6 +20346,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { * # CSS classes * - `ng-valid` is set if the form is valid. * - `ng-invalid` is set if the form is invalid. + * - `ng-pending` is set if the form is pending. * - `ng-pristine` is set if the form is pristine. * - `ng-dirty` is set if the form is dirty. * - `ng-submitted` is set if the form was submitted. @@ -20257,7 +20422,6 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { '); \ No newline at end of file +!window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend(''); \ No newline at end of file diff --git a/awx/ui/client/lib/angular/angular.min.js b/awx/ui/client/lib/angular/angular.min.js index 2c28ef96f2..272101ec7c 100644 --- a/awx/ui/client/lib/angular/angular.min.js +++ b/awx/ui/client/lib/angular/angular.min.js @@ -1,290 +1,294 @@ /* - AngularJS v1.4.3 + AngularJS v1.4.7 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT */ -(function(O,U,t){'use strict';function J(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.3/"+(b?b+"/":"")+a;for(a=1;a").append(b).html();try{return b[0].nodeType===Na?M(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+M(b)})}catch(d){return M(c)}}function yc(b){try{return decodeURIComponent(b)}catch(a){}}function zc(b){var a={},c,d;m((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g, -"%20").split("="),d=yc(c[0]),w(d)&&(b=w(c[1])?yc(c[1]):!0,Xa.call(a,d)?G(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Qb(b){var a=[];m(b,function(b,d){G(b)?m(b,function(b){a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))}):a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))});return a.length?a.join("&"):""}function ob(b){return ma(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ma(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g, -"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Yd(b,a){var c,d,e=Oa.length;for(d=0;d/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=eb(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},e= -/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;O&&e.test(O.name)&&(c.debugInfoEnabled=!0,O.name=O.name.replace(e,""));if(O&&!f.test(O.name))return d();O.name=O.name.replace(f,"");ca.resumeBootstrap=function(b){m(b,function(b){a.push(b)});return d()};z(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()}function $d(){O.name="NG_ENABLE_DEBUG_INFO!"+O.name;O.location.reload()}function ae(b){b=ca.element(b).injector();if(!b)throw Fa("test");return b.get("$$testability")}function Bc(b,a){a=a|| -"_";return b.replace(be,function(b,d){return(d?a:"")+b.toLowerCase()})}function ce(){var b;if(!Cc){var a=pb();la=O.jQuery;w(a)&&(la=null===a?t:O[a]);la&&la.fn.on?(y=la,P(la.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),b=la.cleanData,la.cleanData=function(a){var d;if(Rb)Rb=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d=la._data(f,"events"))&&d.$destroy&&la(f).triggerHandler("$destroy");b(a)}):y=Q;ca.element=y;Cc=!0}}function Sb(b, -a,c){if(!b)throw Fa("areq",a||"?",c||"required");return b}function Qa(b,a,c){c&&G(b)&&(b=b[b.length-1]);Sb(z(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ra(b,a){if("hasOwnProperty"===b)throw Fa("badname",a);}function Dc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g")+d[2];for(d=d[0];d--;)c=c.lastChild;f=cb(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";m(f,function(a){e.appendChild(a)});return e}function Q(b){if(b instanceof Q)return b;var a;L(b)&&(b=R(b),a=!0);if(!(this instanceof Q)){if(a&&"<"!=b.charAt(0))throw Ub("nosel");return new Q(b)}if(a){a=U; -var c;b=(c=Cf.exec(b))?[a.createElement(c[1])]:(c=Nc(b,a))?c.childNodes:[]}Oc(this,b)}function Vb(b){return b.cloneNode(!0)}function tb(b,a){a||ub(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;dk&&this.remove(s.key);return b}},get:function(a){if(k").parent()[0])});var f=S(a,b,a,c,d,e);Z.$$addScopeClass(a); -var g=null;return function(b,c,d){Sb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?y(Yb(g,y("
").append(a).html())):c?Pa.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);Z.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){function g(a, -c,d,e){var f,k,l,s,n,B,C;if(p)for(C=Array(c.length),s=0;sE.priority)break;if(v=E.scope)E.templateUrl|| -(H(v)?(O("new/isolated scope",u||$,E,ba),u=E):O("new/isolated scope",u,E,ba)),$=$||E;w=E.name;!E.templateUrl&&E.controller&&(v=E.controller,N=N||ga(),O("'"+w+"' controller",N[w],E,ba),N[w]=E);if(v=E.transclude)K=!0,E.$$tlb||(O("transclusion",m,E,ba),m=E),"element"==v?(q=!0,F=E.priority,v=ba,ba=d.$$element=y(U.createComment(" "+w+": "+d[w]+" ")),b=ba[0],T(f,za.call(v,0),b),A=Z(v,e,F,g&&g.name,{nonTlbTranscludeDirective:m})):(v=y(Vb(b)).contents(),ba.empty(),A=Z(v,e));if(E.template)if(I=!0,O("template", -D,E,ba),D=E,v=z(E.template)?E.template(ba,d):E.template,v=fa(v),E.replace){g=E;v=Tb.test(v)?$c(Yb(E.templateNamespace,R(v))):[];b=v[0];if(1!=v.length||b.nodeType!==qa)throw ea("tplrt",w,"");T(f,ba,b);Ta={$attr:{}};v=ha(b,[],Ta);var Q=a.splice(xa+1,a.length-(xa+1));u&&ad(v);a=a.concat(v).concat(Q);J(d,Ta);Ta=a.length}else ba.html(v);if(E.templateUrl)I=!0,O("template",D,E,ba),D=E,E.replace&&(g=E),S=Lf(a.splice(xa,a.length-xa),ba,d,f,K&&A,h,k,{controllerDirectives:N,newScopeDirective:$!==E&&$,newIsolateScopeDirective:u, -templateDirective:D,nonTlbTranscludeDirective:m}),Ta=a.length;else if(E.compile)try{Aa=E.compile(ba,d,A),z(Aa)?n(null,Aa,M,P):Aa&&n(Aa.pre,Aa.post,M,P)}catch(Kf){c(Kf,ua(ba))}E.terminal&&(S.terminal=!0,F=Math.max(F,E.priority))}S.scope=$&&!0===$.scope;S.transcludeOnThisElement=K;S.templateOnThisElement=I;S.transclude=A;s.hasElementTranscludeDirective=q;return S}function ad(a){for(var b=0,c=a.length;bn.priority)&&-1!=n.restrict.indexOf(f)&&(k&&(n=Ob(n,{$$start:k,$$end:l})),b.push(n),h=n)}catch(x){c(x)}}return h}function A(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d"+b+"";return c.childNodes[0].childNodes;default:return b}}function Q(a,b){if("srcdoc"==b)return I.HTML;var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b|| -"ngSrc"==b))return I.RESOURCE_URL}function V(a,c,d,e,f){var g=Q(a,e);f=h[e]||f;var l=b(d,!0,g,f);if(l){if("multiple"===e&&"select"===ta(a))throw ea("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers={});if(k.test(e))throw ea("nodomevents");var s=h[e];s!==d&&(l=s&&b(s,!0,g,f),d=s);l&&(h[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e, -a)}))}}}})}}function T(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g=a)return b;for(;a--;)8=== -b[a].nodeType&&Mf.call(b,a,1);return b}function Xe(){var b={},a=!1;this.register=function(a,d){Ra(a,"controller");H(a)?P(b,a):b[a]=d};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(c,d){function e(a,b,c,d){if(!a||!H(a.$scope))throw J("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,l){var k,n,r;h=!0===h;l&&L(l)&&(r=l);if(L(f)){l=f.match(Xc);if(!l)throw Nf("ctrlfmt",f);n=l[1];r=r||l[3];f=b.hasOwnProperty(n)?b[n]:Dc(g.$scope,n,!0)||(a?Dc(d,n,!0):t);Qa(f, -n,!0)}if(h)return h=(G(f)?f[f.length-1]:f).prototype,k=Object.create(h||null),r&&e(g,r,k,n||f.name),P(function(){var a=c.invoke(f,k,g,n);a!==k&&(H(a)||z(a))&&(k=a,r&&e(g,r,k,n||f.name));return k},{instance:k,identifier:r});k=c.instantiate(f,g,n);r&&e(g,r,k,n||f.name);return k}}]}function Ye(){this.$get=["$window",function(b){return y(b.document)}]}function Ze(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Zb(b){return H(b)?aa(b)?b.toISOString():db(b):b} -function cf(){this.$get=function(){return function(b){if(!b)return"";var a=[];oc(b,function(b,d){null===b||A(b)||(G(b)?m(b,function(b,c){a.push(ma(d)+"="+ma(Zb(b)))}):a.push(ma(d)+"="+ma(Zb(b))))});return a.join("&")}}}function df(){this.$get=function(){return function(b){function a(b,e,f){null===b||A(b)||(G(b)?m(b,function(b){a(b,e+"[]")}):H(b)&&!aa(b)?oc(b,function(b,c){a(b,e+(f?"":"[")+c+(f?"":"]"))}):c.push(ma(e)+"="+ma(Zb(b))))}if(!b)return"";var c=[];a(b,"",!0);return c.join("&")}}}function $b(b, -a){if(L(b)){var c=b.replace(Of,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(cd))||(d=(d=c.match(Pf))&&Qf[d[0]].test(c));d&&(b=wc(c))}}return b}function dd(b){var a=ga(),c;L(b)?m(b.split("\n"),function(b){c=b.indexOf(":");var e=M(R(b.substr(0,c)));b=R(b.substr(c+1));e&&(a[e]=a[e]?a[e]+", "+b:b)}):H(b)&&m(b,function(b,c){var f=M(c),g=R(b);f&&(a[f]=a[f]?a[f]+", "+g:g)});return a}function ed(b){var a;return function(c){a||(a=dd(b));return c?(c=a[M(c)],void 0===c&&(c=null),c):a}}function fd(b, -a,c,d){if(z(d))return d(b,a,c);m(d,function(d){b=d(b,a,c)});return b}function bf(){var b=this.defaults={transformResponse:[$b],transformRequest:[function(a){return H(a)&&"[object File]"!==sa.call(a)&&"[object Blob]"!==sa.call(a)&&"[object FormData]"!==sa.call(a)?db(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ia(ac),put:ia(ac),patch:ia(ac)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},a=!1;this.useApplyAsync=function(b){return w(b)? -(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=P({},a);b.data=a.data?fd(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}function d(a,b){var c,e={};m(a,function(a,d){z(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}if(!ca.isObject(a))throw J("$http")("badreq",a);var e=P({method:"get",transformRequest:b.transformRequest, -transformResponse:b.transformResponse,paramSerializer:b.paramSerializer},a);e.headers=function(a){var c=b.headers,e=P({},a.headers),f,g,h,c=P({},c.common,c[M(a.method)]);a:for(f in c){g=M(f);for(h in e)if(M(h)===g)continue a;e[f]=c[f]}return d(e,ia(a))}(a);e.method=rb(e.method);e.paramSerializer=L(e.paramSerializer)?l.get(e.paramSerializer):e.paramSerializer;var f=[function(a){var d=a.headers,e=fd(a.data,ed(d),t,a.transformRequest);A(e)&&m(d,function(a,b){"content-type"===M(b)&&delete d[b]});A(a.withCredentials)&& -!A(b.withCredentials)&&(a.withCredentials=b.withCredentials);return n(a,e).then(c,c)},t],g=h.when(e);for(m(x,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){Qa(a,"fn");g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=function(a){Qa(a,"fn");g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g} -function n(c,f){function l(b,c,d,e){function f(){n(c,b,d,e)}N&&(200<=b&&300>b?N.put(S,[b,c,dd(d),e]):N.remove(S));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function n(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?I.resolve:I.reject)({data:a,status:b,headers:ed(d),config:c,statusText:e})}function x(a){n(a.data,a.status,ia(a.headers()),a.statusText)}function m(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,1)}var I=h.defer(),B=I.promise,N,D,q=c.headers,S=r(c.url,c.paramSerializer(c.params)); -k.pendingRequests.push(c);B.then(m,m);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(N=H(c.cache)?c.cache:H(b.cache)?b.cache:s);N&&(D=N.get(S),w(D)?D&&z(D.then)?D.then(x,x):G(D)?n(D[1],D[0],ia(D[2]),D[3]):n(D,200,{},"OK"):N.put(S,B));A(D)&&((D=gd(c.url)?e()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(q[c.xsrfHeaderName||b.xsrfHeaderName]=D),d(c.method,S,f,l,q,c.timeout,c.withCredentials,c.responseType));return B}function r(a,b){0=l&&(u.resolve(C),x(p.$$intervalId),delete f[p.$$intervalId]);F||b.$apply()},h);f[p.$$intervalId]=u;return p}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function ge(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".", -GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), -SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a",ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"]},pluralCat:function(b){return 1===b?"one":"other"}}}}function bc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=ob(b[a]);return b.join("/")}function hd(b,a){var c=Ba(b);a.$$protocol=c.protocol; -a.$$host=c.hostname;a.$$port=W(c.port)||Tf[c.protocol]||null}function id(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=zc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ya(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ja(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Bb(b){return b.replace(/(#.+)|#$/, -"$1")}function cc(b){return b.substr(0,Ja(b).lastIndexOf("/")+1)}function dc(b,a){this.$$html5=!0;a=a||"";var c=cc(b);hd(b,this);this.$$parse=function(a){var b=ya(c,a);if(!L(b))throw Cb("ipthprfx",a,c);id(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),b=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)), -!0;var f,g;(f=ya(b,d))!==t?(g=f,g=(f=ya(a,f))!==t?c+(ya("/",f)||f):b+g):(f=ya(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ec(b,a){var c=cc(b);hd(b,this);this.$$parse=function(d){var e=ya(b,d)||ya(c,d),f;A(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",A(e)&&(b=d,this.replace())):(f=ya(a,e),A(f)&&(f=e));id(f,this);d=this.$$path;var e=b,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(d=(f=g.exec(d))?f[1]:d);this.$$path=d;this.$$compose()};this.$$compose= -function(){var c=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ja(b)==Ja(a)?(this.$$parse(a),!0):!1}}function jd(b,a){this.$$html5=!0;ec.apply(this,arguments);var c=cc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ja(d)?f=d:(g=ya(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c= -Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Db(b){return function(){return this[b]}}function kd(b,a){return function(c){if(A(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ff(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return w(a)?(b=a,this):b};this.html5Mode=function(b){return ab(b)?(a.enabled=b,this):H(b)?(ab(b.enabled)&&(a.enabled=b.enabled), -ab(b.requireBase)&&(a.requireBase=b.requireBase),ab(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var r=d.url(),s;if(a.enabled){if(!n&&a.requireBase)throw Cb("nobase");s=r.substring(0, -r.indexOf("/",r.indexOf("//")+2))+(n||"/");n=e.history?dc:jd}else s=Ja(r),n=ec;k=new n(s,"#"+b);k.$$parseLinkUrl(r,r);k.$$state=d.state();var x=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=y(b.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Ba(h.animVal).href);x.test(h)|| -!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});Bb(k.absUrl())!=Bb(r)&&d.url(k.absUrl(),!0);var C=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(C=!1,l(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a= -Bb(d.url()),b=Bb(k.absUrl()),f=d.state(),g=k.$$replace,n=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(C||n)C=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(n&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function gf(){var b=!0,a=this;this.debugEnabled=function(a){return w(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&& -(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||v;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];m(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]} -function Ca(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw da("isecfld",a);return b}function oa(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b.window===b)throw da("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw da("isecdom",a);if(b===Object)throw da("isecobj",a);}return b}function ld(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b===Uf||b===Vf||b===Wf)throw da("isecff",a); -}}function Xf(b,a){return"undefined"!==typeof b?b:a}function md(b,a){return"undefined"===typeof b?a:"undefined"===typeof a?b:b+a}function T(b,a){var c,d;switch(b.type){case q.Program:c=!0;m(b.body,function(b){T(b.expression,a);c=c&&b.expression.constant});b.constant=c;break;case q.Literal:b.constant=!0;b.toWatch=[];break;case q.UnaryExpression:T(b.argument,a);b.constant=b.argument.constant;b.toWatch=b.argument.toWatch;break;case q.BinaryExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&& -b.right.constant;b.toWatch=b.left.toWatch.concat(b.right.toWatch);break;case q.LogicalExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.constant?[]:[b];break;case q.ConditionalExpression:T(b.test,a);T(b.alternate,a);T(b.consequent,a);b.constant=b.test.constant&&b.alternate.constant&&b.consequent.constant;b.toWatch=b.constant?[]:[b];break;case q.Identifier:b.constant=!1;b.toWatch=[b];break;case q.MemberExpression:T(b.object,a);b.computed&&T(b.property,a); -b.constant=b.object.constant&&(!b.computed||b.property.constant);b.toWatch=[b];break;case q.CallExpression:c=b.filter?!a(b.callee.name).$stateful:!1;d=[];m(b.arguments,function(b){T(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=b.filter&&!a(b.callee.name).$stateful?d:[b];break;case q.AssignmentExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=[b];break;case q.ArrayExpression:c=!0;d=[];m(b.elements,function(b){T(b,a);c= -c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=d;break;case q.ObjectExpression:c=!0;d=[];m(b.properties,function(b){T(b.value,a);c=c&&b.value.constant;b.value.constant||d.push.apply(d,b.value.toWatch)});b.constant=c;b.toWatch=d;break;case q.ThisExpression:b.constant=!1,b.toWatch=[]}}function nd(b){if(1==b.length){b=b[0].expression;var a=b.toWatch;return 1!==a.length?a:a[0]!==b?a:t}}function od(b){return b.type===q.Identifier||b.type===q.MemberExpression}function pd(b){if(1=== -b.body.length&&od(b.body[0].expression))return{type:q.AssignmentExpression,left:b.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function qd(b){return 0===b.body.length||1===b.body.length&&(b.body[0].expression.type===q.Literal||b.body[0].expression.type===q.ArrayExpression||b.body[0].expression.type===q.ObjectExpression)}function rd(b,a){this.astBuilder=b;this.$filter=a}function sd(b,a){this.astBuilder=b;this.$filter=a}function Eb(b,a,c,d){oa(b,d);a=a.split(".");for(var e,f=0;1< -a.length;f++){e=Ca(a.shift(),d);var g=oa(b[e],d);g||(g={},b[e]=g);b=g}e=Ca(a.shift(),d);oa(b[e],d);return b[e]=c}function Fb(b){return"constructor"==b}function fc(b){return z(b.valueOf)?b.valueOf():Yf.call(b)}function hf(){var b=ga(),a=ga();this.$get=["$filter","$sniffer",function(c,d){function e(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function f(a,b,c,d,f){var g=d.inputs,h;if(1===g.length){var k=e,g=g[0];return a.$watch(function(a){var b= -g(a);e(b,k)||(h=d(a,t,t,[b]),k=b&&fc(b));return h},b,c,f)}for(var l=[],n=[],r=0,m=g.length;r=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;fa)for(b in l++,f)e.hasOwnProperty(b)|| -(m--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1m&&(E=4-m,u[E]||(u[E]=[]),u[E].push({msg:z(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:h}));else if(b===d){s=!1;break a}}catch(A){g(A)}if(!(k=x.$$watchersCount&&x.$$childHead||x!==this&&x.$$nextSibling))for(;x!== -this&&!(k=x.$$nextSibling);)x=x.$parent}while(x=k);if((s||t.length)&&!m--)throw p.$$phase=null,c("infdig",a,u);}while(s||t.length);for(p.$$phase=null;w.length;)try{w.shift()()}catch(y){g(y)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===p&&l.$$applicationDestroyed();s(this,-this.$$watchersCount);for(var b in this.$$listenerCount)x(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail== -this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=v;this.$on=this.$watch=this.$watchGroup=function(){return v};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}},$eval:function(a,b){return h(a)(this,b)}, -$evalAsync:function(a,b){p.$$phase||t.length||l.defer(function(){t.length&&p.$digest()});t.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){w.push(a)},$apply:function(a){try{return r("$apply"),this.$eval(a)}catch(b){g(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&I.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]|| -(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,x(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=cb([h],arguments,1),l,n;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(n=d.length;lUa)throw Da("iequirks");var d=ia(pa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs= -d.getTrusted=function(a,b){return b},d.valueOf=Ya);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;m(pa,function(a,b){var c=M(b);d[hb("parse_as_"+c)]=function(b){return e(a,b)};d[hb("get_trusted_"+c)]=function(b){return f(a,b)};d[hb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function of(){this.$get=["$window","$document",function(b,a){var c={},d=W((/android (\d+)/.exec(M((b.navigator|| -{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var r in l)if(k=h.exec(r)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);n=!!("animation"in l||g+"Animation"in l);!d||k&&n||(k=L(l.webkitTransition),n=L(l.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"=== -a&&11>=Ua)return!1;if(A(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:fb(),vendorPrefix:g,transitions:k,animations:n,android:d}}]}function qf(){this.$get=["$templateCache","$http","$q","$sce",function(b,a,c,d){function e(f,g){e.totalPendingRequests++;L(f)&&b.get(f)||(f=d.getTrustedResourceUrl(f));var h=a.defaults&&a.defaults.transformResponse;G(h)?h=h.filter(function(a){return a!==$b}):h===$b&&(h=null);return a.get(f,{cache:b,transformResponse:h})["finally"](function(){e.totalPendingRequests--}).then(function(a){b.put(f, -a.data);return a.data},function(a){if(!g)throw ea("tpload",f,a.status,a.statusText);return c.reject(a)})}e.totalPendingRequests=0;return e}]}function rf(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];m(a,function(a){var d=ca.element(a).data("$binding");d&&m(d,function(d){c?(new RegExp("(^|\\s)"+ud(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a, -b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;hb;b=Math.abs(b);var g=Infinity===b;if(!g&&!isFinite(b))return"";var h=b+"",l="",k=!1,n=[];g&&(l="\u221e"); -if(!g&&-1!==h.indexOf("e")){var r=h.match(/([\d\.]+)e(-?)(\d+)/);r&&"-"==r[2]&&r[3]>e+1?b=0:(l=h,k=!0)}if(g||k)0b&&(l=b.toFixed(e),b=parseFloat(l));else{g=(h.split(Dd)[1]||"").length;A(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(Dd),h=g[0],g=g[1]||"",r=0,s=a.lgSize,m=a.gSize;if(h.length>=s+m)for(r=h.length-s,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=rb(a?"SHORT"+b:b);return d[f][e]}}function Ed(b){var a= -(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Fd(b){return function(a){var c=Ed(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function jc(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function zd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=W(b[9]+b[10]),g=W(b[9]+b[11]));h.call(a,W(b[1]), -W(b[2])-1,W(b[3]));f=W(b[4]||0)-f;g=W(b[5]||0)-g;h=W(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;L(c)&&(c=fg.test(c)?W(c):a(c));V(c)&&(c=new Date(c));if(!aa(c)||!isFinite(c.getTime()))return c;for(;e;)(k=gg.exec(e))?(h=cb(h,k,1),e=h.pop()):(h.push(e),e=null);var n=c.getTimezoneOffset(); -f&&(n=xc(f,c.getTimezoneOffset()),c=Pb(c,f,!0));m(h,function(a){l=hg[a];g+=l?l(c,b.DATETIME_FORMATS,n):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function ag(){return function(b,a){A(a)&&(a=2);return db(b,a)}}function bg(){return function(b,a,c){a=Infinity===Math.abs(Number(a))?Number(a):W(a);if(isNaN(a))return b;V(b)&&(b=b.toString());if(!G(b)&&!L(b))return b;c=!c||isNaN(c)?0:W(c);c=0>c&&c>=-b.length?b.length+c:c;return 0<=a?b.slice(c,c+a):0===c?b.slice(a,b.length):b.slice(Math.max(0, -c+a),c)}}function Bd(b){function a(a,c){c=c?-1:1;return a.map(function(a){var d=1,h=Ya;if(z(a))h=a;else if(L(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))d="-"==a.charAt(0)?-1:1,a=a.substring(1);if(""!==a&&(h=b(a),h.constant))var l=h(),h=function(a){return a[l]}}return{get:h,descending:d*c}})}function c(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(b,e,f){if(!Ea(b))return b;G(e)||(e=[e]);0===e.length&&(e=["+"]);var g=a(e,f);b=Array.prototype.map.call(b, -function(a,b){return{value:a,predicateValues:g.map(function(d){var e=d.get(a);d=typeof e;if(null===e)d="string",e="null";else if("string"===d)e=e.toLowerCase();else if("object"===d)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),c(e)))break a;if(rc(e)&&(e=e.toString(),c(e)))break a;e=b}return{value:e,type:d}})}});b.sort(function(a,b){for(var c=0,d=0,e=g.length;db||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Kb(b,a){return function(c,d){var e,f;if(aa(c))return c;if(L(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1)); -if(ig.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},m(e,function(b,c){c=F};g.$observe("min",function(a){F=s(a);h.$validate()})}if(w(g.max)||g.ngMax){var u; -h.$validators.max=function(a){return!r(a)||A(u)||c(a)<=u};g.$observe("max",function(a){u=s(a);h.$validate()})}}}function Id(b,a,c,d){(d.$$hasNativeValidators=H(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function Jd(b,a,c,d,e){if(w(d)){b=b(d);if(!b.constant)throw J("ngModel")("constexpr",c,d);return b(a)}return e}function lc(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,Af=/<([\w:]+)/,Bf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,na={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};na.optgroup=na.option;na.tbody=na.tfoot=na.colgroup=na.caption=na.thead; -na.th=na.td;var Pa=Q.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),Q(O).on("load",a))},toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0,push:kg,sort:[].sort,splice:[].splice},Ab={};m("multiple selected checked disabled readOnly required open".split(" "),function(b){Ab[M(b)]=b});var Tc={};m("input select option textarea button form details".split(" "), -function(b){Tc[b]=!0});var Uc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};m({data:Wb,removeData:ub,hasData:function(b){for(var a in ib[b.ng339])return!0;return!1}},function(b,a){Q[a]=b});m({data:Wb,inheritedData:zb,scope:function(b){return y.data(b,"$scope")||zb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return y.data(b,"$isolateScope")||y.data(b,"$isolateScopeNoTemplate")},controller:Qc,injector:function(b){return zb(b, -"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:wb,css:function(b,a,c){a=hb(a);if(w(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=b.nodeType;if(d!==Na&&2!==d&&8!==d)if(d=M(a),Ab[d])if(w(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||v).specified?d:t;else if(w(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(w(c))b[a]=c;else return b[a]}, -text:function(){function b(a,b){if(A(b)){var d=a.nodeType;return d===qa||d===Na?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(A(a)){if(b.multiple&&"select"===ta(b)){var c=[];m(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(A(a))return b.innerHTML;tb(b,!0);b.innerHTML=a},empty:Rc},function(b,a){Q.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Rc&&(2==b.length&&b!==wb&&b!==Qc? -a:d)===t){if(H(a)){for(e=0;e <= >= && || ! = |".split(" "),function(a){Mb[a]=!0});var qg={n:"\n",f:"\f",r:"\r", -t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a|| -"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=w(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw da("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">=");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:c.text, -left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=fa(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant(): -this.throwError("not a primary expression",this.peek());for(var c;c=this.expect("(","[",".");)"("===c.text?(a={type:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===c.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===c.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var c={type:q.CallExpression,callee:this.identifier(), -arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break; -a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:q.ArrayExpression,elements:a}},object:function(){var a=[],c;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;c={type:q.Property,kind:"init"};this.peek().constant?c.key=this.constant():this.peek().identifier?c.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");c.value=this.expression();a.push(c)}while(this.expect(","))}this.consume("}");return{type:q.ObjectExpression,properties:a}}, -throwError:function(a,c){throw da("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},consume:function(a){if(0===this.tokens.length)throw da("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},peekToken:function(){if(0===this.tokens.length)throw da("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a]; -var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},constants:{"true":{type:q.Literal,value:!0},"false":{type:q.Literal,value:!1},"null":{type:q.Literal,value:null},undefined:{type:q.Literal,value:t},"this":{type:q.ThisExpression}}};rd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:c,fn:{vars:[],body:[],own:{}},assign:{vars:[], -body:[],own:{}},inputs:[]};T(e,d.$filter);var f="",g;this.stage="assign";if(g=pd(e))this.state.computing="assign",f=this.nextId(),this.recurse(g,f),f="fn.assign="+this.generateFunction("assign","s,v,l");g=nd(e.body);d.stage="inputs";m(g,function(a,c){var e="fn"+c;d.state[e]={vars:[],body:[],own:{}};d.state.computing=e;var f=d.nextId();d.recurse(a,f);d.return_(f);d.state.inputs.push(e);a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(e);f='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+ -"var fn="+this.generateFunction("fn","s,l,a,i")+f+this.watchFns()+"return fn;";f=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","ifDefined","plus","text",f))(this.$filter,Ca,oa,ld,Xf,md,a);this.state=this.stage=t;f.literal=qd(e);f.constant=e.constant;return f},USE:"use",STRICT:"strict",watchFns:function(){var a=[],c=this.state.inputs,d=this;m(c,function(c){a.push("var "+c+"="+d.generateFunction(c,"s"))});c.length&&a.push("fn.inputs=["+c.join(",")+"];");return a.join("")}, -generateFunction:function(a,c){return"function("+c+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],c=this;m(this.state.filters,function(d,e){a.push(d+"=$filter("+c.escape(e)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,c,d,e,f,g){var h,l,k=this,n,r;e=e||v;if(!g&&w(a.watchId))c=c||this.nextId(),this.if_("i", -this.lazyAssign(c,this.computedMember("i",a.watchId)),this.lazyRecurse(a,c,d,e,f,!0));else switch(a.type){case q.Program:m(a.body,function(c,d){k.recurse(c.expression,t,t,function(a){l=a});d!==a.body.length-1?k.current().body.push(l,";"):k.return_(l)});break;case q.Literal:r=this.escape(a.value);this.assign(c,r);e(r);break;case q.UnaryExpression:this.recurse(a.argument,t,t,function(a){l=a});r=a.operator+"("+this.ifDefined(l,0)+")";this.assign(c,r);e(r);break;case q.BinaryExpression:this.recurse(a.left, -t,t,function(a){h=a});this.recurse(a.right,t,t,function(a){l=a});r="+"===a.operator?this.plus(h,l):"-"===a.operator?this.ifDefined(h,0)+a.operator+this.ifDefined(l,0):"("+h+")"+a.operator+"("+l+")";this.assign(c,r);e(r);break;case q.LogicalExpression:c=c||this.nextId();k.recurse(a.left,c);k.if_("&&"===a.operator?c:k.not(c),k.lazyRecurse(a.right,c));e(c);break;case q.ConditionalExpression:c=c||this.nextId();k.recurse(a.test,c);k.if_(c,k.lazyRecurse(a.alternate,c),k.lazyRecurse(a.consequent,c));e(c); -break;case q.Identifier:c=c||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ca(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){f&&1!==f&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(c,k.nonComputedMember("s",a.name))})},c&&k.lazyAssign(c,k.nonComputedMember("l", -a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(c);e(c);break;case q.MemberExpression:h=d&&(d.context=this.nextId())||this.nextId();c=c||this.nextId();k.recurse(a.object,h,t,function(){k.if_(k.notNull(h),function(){if(a.computed)l=k.nextId(),k.recurse(a.property,l),k.addEnsureSafeMemberName(l),f&&1!==f&&k.if_(k.not(k.computedMember(h,l)),k.lazyAssign(k.computedMember(h,l),"{}")),r=k.ensureSafeObject(k.computedMember(h,l)),k.assign(c,r),d&&(d.computed=!0,d.name=l);else{Ca(a.property.name); -f&&1!==f&&k.if_(k.not(k.nonComputedMember(h,a.property.name)),k.lazyAssign(k.nonComputedMember(h,a.property.name),"{}"));r=k.nonComputedMember(h,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))r=k.ensureSafeObject(r);k.assign(c,r);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(c,"undefined")});e(c)},!!f);break;case q.CallExpression:c=c||this.nextId();a.filter?(l=k.filter(a.callee.name),n=[],m(a.arguments,function(a){var c=k.nextId();k.recurse(a,c);n.push(c)}),r=l+ -"("+n.join(",")+")",k.assign(c,r),e(c)):(l=k.nextId(),h={},n=[],k.recurse(a.callee,l,h,function(){k.if_(k.notNull(l),function(){k.addEnsureSafeFunction(l);m(a.arguments,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(k.ensureSafeObject(a))})});h.name?(k.state.expensiveChecks||k.addEnsureSafeObject(h.context),r=k.member(h.context,h.name,h.computed)+"("+n.join(",")+")"):r=l+"("+n.join(",")+")";r=k.ensureSafeObject(r);k.assign(c,r)},function(){k.assign(c,"undefined")});e(c)}));break;case q.AssignmentExpression:l= -this.nextId();h={};if(!od(a.left))throw da("lval");this.recurse(a.left,t,h,function(){k.if_(k.notNull(h.context),function(){k.recurse(a.right,l);k.addEnsureSafeObject(k.member(h.context,h.name,h.computed));r=k.member(h.context,h.name,h.computed)+a.operator+l;k.assign(c,r);e(c||r)})},1);break;case q.ArrayExpression:n=[];m(a.elements,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(a)})});r="["+n.join(",")+"]";this.assign(c,r);e(r);break;case q.ObjectExpression:n=[];m(a.properties,function(a){k.recurse(a.value, -k.nextId(),t,function(c){n.push(k.escape(a.key.type===q.Identifier?a.key.name:""+a.key.value)+":"+c)})});r="{"+n.join(",")+"}";this.assign(c,r);e(r);break;case q.ThisExpression:this.assign(c,"s");e("s");break;case q.NGValueParameter:this.assign(c,"v"),e("v")}},getHasOwnProperty:function(a,c){var d=a+"."+c,e=this.current().own;e.hasOwnProperty(d)||(e[d]=this.nextId(!1,a+"&&("+this.escape(c)+" in "+a+")"));return e[d]},assign:function(a,c){if(a)return this.current().body.push(a,"=",c,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)|| -(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,c){return"ifDefined("+a+","+this.escape(c)+")"},plus:function(a,c){return"plus("+a+","+c+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,c,d){if(!0===a)c();else{var e=this.current().body;e.push("if(",a,"){");c();e.push("}");d&&(e.push("else{"),d(),e.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,c){return a+ -"."+c},computedMember:function(a,c){return a+"["+c+"]"},member:function(a,c,d){return d?this.computedMember(a,c):this.nonComputedMember(a,c)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+ -a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},lazyRecurse:function(a,c,d,e,f,g){var h=this;return function(){h.recurse(a,c,d,e,f,g)}},lazyAssign:function(a,c){var d=this;return function(){d.assign(a,c)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(L(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(V(a))return a.toString();if(!0===a)return"true"; -if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw da("esc");},nextId:function(a,c){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(c?"="+c:""));return d},current:function(){return this.state[this.state.computing]}};sd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=c;T(e,d.$filter);var f,g;if(f=pd(e))g=this.recurse(f);f=nd(e.body);var h;f&&(h=[],m(f,function(a,c){var e=d.recurse(a); -a.input=e;h.push(e);a.watchId=c}));var l=[];m(e.body,function(a){l.push(d.recurse(a.expression))});f=0===e.body.length?function(){}:1===e.body.length?l[0]:function(a,c){var d;m(l,function(e){d=e(a,c)});return d};g&&(f.assign=function(a,c,d){return g(a,d,c)});h&&(f.inputs=h);f.literal=qd(e);f.constant=e.constant;return f},recurse:function(a,c,d){var e,f,g=this,h;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case q.Literal:return this.value(a.value,c);case q.UnaryExpression:return f= -this.recurse(a.argument),this["unary"+a.operator](f,c);case q.BinaryExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.LogicalExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),c);case q.Identifier:return Ca(a.name,g.expression),g.identifier(a.name,g.expensiveChecks||Fb(a.name), -c,d,g.expression);case q.MemberExpression:return e=this.recurse(a.object,!1,!!d),a.computed||(Ca(a.property.name,g.expression),f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(e,f,c,d,g.expression):this.nonComputedMember(e,f,g.expensiveChecks,c,d,g.expression);case q.CallExpression:return h=[],m(a.arguments,function(a){h.push(g.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?function(a,d,e,g){for(var m= -[],q=0;q":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>c(e,f,g,h);return d?{value:e}:e}},"binary<=":function(a,c,d){return function(e, -f,g,h){e=a(e,f,g,h)<=c(e,f,g,h);return d?{value:e}:e}},"binary>=":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>=c(e,f,g,h);return d?{value:e}:e}},"binary&&":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)&&c(e,f,g,h);return d?{value:e}:e}},"binary||":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)||c(e,f,g,h);return d?{value:e}:e}},"ternary?:":function(a,c,d,e){return function(f,g,h,l){f=a(f,g,h,l)?c(f,g,h,l):d(f,g,h,l);return e?{value:f}:f}},value:function(a,c){return function(){return c? -{context:t,name:t,value:a}:a}},identifier:function(a,c,d,e,f){return function(g,h,l,k){g=h&&a in h?h:g;e&&1!==e&&g&&!g[a]&&(g[a]={});h=g?g[a]:t;c&&oa(h,f);return d?{context:g,name:a,value:h}:h}},computedMember:function(a,c,d,e,f){return function(g,h,l,k){var n=a(g,h,l,k),m,s;null!=n&&(m=c(g,h,l,k),Ca(m,f),e&&1!==e&&n&&!n[m]&&(n[m]={}),s=n[m],oa(s,f));return d?{context:n,name:m,value:s}:s}},nonComputedMember:function(a,c,d,e,f,g){return function(h,l,k,n){h=a(h,l,k,n);f&&1!==f&&h&&!h[c]&&(h[c]={}); -l=null!=h?h[c]:t;(d||Fb(c))&&oa(l,g);return e?{context:h,name:c,value:l}:l}},inputs:function(a,c){return function(d,e,f,g){return g?g[c]:a(d,e,f)}}};var hc=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d;this.ast=new q(this.lexer);this.astCompiler=d.csp?new sd(this.ast,c):new rd(this.ast,c)};hc.prototype={constructor:hc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};ga();ga();var Yf=Object.prototype.valueOf,Da=J("$sce"),pa={HTML:"html",CSS:"css",URL:"url", -RESOURCE_URL:"resourceUrl",JS:"js"},ea=J("$compile"),X=U.createElement("a"),wd=Ba(O.location.href);xd.$inject=["$document"];Lc.$inject=["$provide"];yd.$inject=["$locale"];Ad.$inject=["$locale"];var Dd=".",hg={yyyy:Y("FullYear",4),yy:Y("FullYear",2,0,!0),y:Y("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:Y("Month",2,1),M:Y("Month",1,1),dd:Y("Date",2),d:Y("Date",1),HH:Y("Hours",2),H:Y("Hours",1),hh:Y("Hours",2,-12),h:Y("Hours",1,-12),mm:Y("Minutes",2),m:Y("Minutes",1),ss:Y("Seconds",2),s:Y("Seconds", -1),sss:Y("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a,c,d){a=-1*d;return a=(0<=a?"+":"")+(Gb(Math[0=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1]}},gg=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,fg=/^\-?\d+$/;zd.$inject=["$locale"];var cg=ra(M),dg=ra(rb);Bd.$inject= -["$parse"];var ie=ra({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===sa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),sb={};m(Ab,function(a,c){function d(a,d,f){a.$watch(f[e],function(a){f.$set(c,!!a)})}if("multiple"!=a){var e=wa("ng-"+c),f=d;"checked"===a&&(f=function(a,c,f){f.ngModel!==f[e]&&d(a,c,f)});sb[e]=function(){return{restrict:"A", -priority:100,link:f}}}});m(Uc,function(a,c){sb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(jg))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});m(["src","srcset","href"],function(a){var c=wa("ng-"+a);sb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===sa.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href", -g=null);f.$observe(c,function(c){c?(f.$set(h,c),Ua&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Ib={$addControl:v,$$renameControl:function(a,c){a.$name=c},$removeControl:v,$setValidity:v,$setDirty:v,$setPristine:v,$setSubmitted:v};Gd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Od=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Gd,compile:function(d,e){d.addClass(Va).addClass(mb);var f=e.name?"name":a&&e.ngForm?"ngForm": -!1;return{pre:function(a,d,e,k){if(!("action"in e)){var n=function(c){a.$apply(function(){k.$commitViewValue();k.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",n,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",n,!1)},0,!1)})}var m=k.$$parentForm;f&&(Eb(a,k.$name,k,k.$name),e.$observe(f,function(c){k.$name!==c&&(Eb(a,k.$name,t,k.$name),m.$$renameControl(k,c),Eb(a,k.$name,k,k.$name))}));d.on("$destroy",function(){m.$removeControl(k);f&&Eb(a,e[f],t, -k.$name);P(k,Ib)})}}}}}]},je=Od(),we=Od(!0),ig=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,rg=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,sg=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,tg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Pd=/^(\d{4})-(\d{2})-(\d{2})$/,Qd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,mc=/^(\d{4})-W(\d\d)$/,Rd=/^(\d{4})-(\d\d)$/, -Sd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Td={text:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e)},date:lb("date",Pd,Kb(Pd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":lb("datetimelocal",Qd,Kb(Qd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:lb("time",Sd,Kb(Sd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:lb("week",mc,function(a,c){if(aa(a))return a;if(L(a)){mc.lastIndex=0;var d=mc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=Ed(e),f=7*(f-1);c&&(d=c.getHours(),g= -c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:lb("month",Rd,Kb(Rd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){Id(a,c,d,e);kb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:tg.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw Lb("numfmt",a);a=a.toString()}return a});if(w(d.min)||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)|| -A(h)||a>=h};d.$observe("min",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));h=V(a)&&!isNaN(a)?a:t;e.$validate()})}if(w(d.max)||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||A(l)||a<=l};d.$observe("max",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||rg.test(d)}},email:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e); -e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||sg.test(d)}},radio:function(a,c,d,e){A(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=Jd(l,a,"ngTrueValue",d.ngTrueValue,!0),n=Jd(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&& -a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ka(a,k)});e.$parsers.push(function(a){return a?k:n})},hidden:v,button:v,submit:v,reset:v,file:v},Fc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Td[M(h.type)]||Td.text)(f,g,h,l[0],c,a,d,e)}}}}],ug=/^(true|false|\d+)$/,Oe=function(){return{restrict:"A",priority:100,compile:function(a, -c){return ug.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},oe=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],qe=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate)); -c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===t?"":a})}}}}],pe=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],Ne=ra({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), -re=lc("",!0),te=lc("Odd",0),se=lc("Even",1),ue=Ma({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),ve=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Kc={},vg={blur:!0,focus:!0};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=wa("ng-"+a);Kc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h= -d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};vg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ye=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=U.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k= -qb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],ze=["$templateRequest","$anchorScroll","$animate",function(a,c,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(e,f){var g=f.ngInclude||f.src,h=f.onload||"",l=f.autoscroll;return function(e,f,m,s,q){var t=0,F,u,p,v=function(){u&&(u.remove(),u=null);F&&(F.$destroy(),F=null);p&&(d.leave(p).then(function(){u=null}),u=p,p=null)};e.$watch(g,function(g){var m=function(){!w(l)||l&&!e.$eval(l)|| -c()},r=++t;g?(a(g,!0).then(function(a){if(r===t){var c=e.$new();s.template=a;a=q(c,function(a){v();d.enter(a,null,f).then(m)});F=c;p=a;F.$emit("$includeContentLoaded",g);e.$eval(h)}},function(){r===t&&(v(),e.$emit("$includeContentError",g))}),e.$emit("$includeContentRequested",g)):(v(),s.template=null)})}}}}],Qe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Nc(f.template,U).childNodes)(c,function(a){d.append(a)}, -{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],Ae=Ma({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Me=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?R(f):f;e.$parsers.push(function(a){if(!A(a)){var c=[];a&&m(a.split(h),function(a){a&&c.push(g?R(a):a)});return c}});e.$formatters.push(function(a){return G(a)?a.join(f):t});e.$isEmpty=function(a){return!a|| -!a.length}}}},mb="ng-valid",Kd="ng-invalid",Va="ng-pristine",Jb="ng-dirty",Md="ng-pending",Lb=new J("ngModel"),wg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty= -!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=n(d.name||"",!1)(a);var r=f(d.ngModel),s=r.assign,q=r,C=s,F=null,u,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");q=function(a){var d=r(a);z(d)&&(d=c(a));return d};C=function(a,c){z(r(a))?g(a,{$$$p:p.$modelValue}):s(a,p.$modelValue)}}else if(!r.assign)throw Lb("nonassign",d.ngModel,ua(e));};this.$render=v;this.$isEmpty=function(a){return A(a)|| -""===a||null===a||a!==a};var K=e.inheritedData("$formController")||Ib,y=0;Hd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:K,$animate:g});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;g.removeClass(e,Jb);g.addClass(e,Va)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;g.removeClass(e,Va);g.addClass(e,Jb);K.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched= -function(){p.$touched=!0;p.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(F);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!V(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,c=p.$valid,d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(f){e||c===f||(p.$modelValue=f?a:t,p.$modelValue!==d&&p.$$writeModelToScope())})}};this.$$runValidators= -function(a,c,d){function e(){var d=!0;m(p.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d?!0:(m(p.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;m(p.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!z(k.then))throw Lb("$asyncValidators",k);g(h,t);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},v):h(!0)}function g(a,c){l===y&&p.$setValidity(a,c)}function h(a){l===y&&d(a)}y++;var l=y;(function(){var a= -p.$$parserName||"parse";if(u===t)g(a,null);else return u||(m(p.$validators,function(a,c){g(c,null)}),m(p.$asyncValidators,function(a,c){g(c,null)})),g(a,u),u;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=p.$viewValue;h.cancel(F);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=p.$$lastCommittedViewValue;if(u=A(c)?t:!0)for(var d= -0;df||e.$isEmpty(c)||c.length<=f}}}}},Ic=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=W(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};O.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(ce(),ee(ca),y(U).ready(function(){Zd(U,Ac)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document.head).prepend(''); +(function(Q,X,w){'use strict';function I(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.7/"+(b?b+"/":"")+a;for(a=1;a").append(b).html();try{return b[0].nodeType===Pa?F(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+F(b)})}catch(d){return F(c)}}function xc(b){try{return decodeURIComponent(b)}catch(a){}} +function yc(b){var a={};m((b||"").split("&"),function(b){var d,e,f;b&&(e=b=b.replace(/\+/g,"%20"),d=b.indexOf("="),-1!==d&&(e=b.substring(0,d),f=b.substring(d+1)),e=xc(e),A(e)&&(f=A(f)?xc(f):!0,ta.call(a,e)?J(a[e])?a[e].push(f):a[e]=[a[e],f]:a[e]=f))});return a}function Pb(b){var a=[];m(b,function(b,d){J(b)?m(b,function(b){a.push(la(d,!0)+(!0===b?"":"="+la(b,!0)))}):a.push(la(d,!0)+(!0===b?"":"="+la(b,!0)))});return a.length?a.join("&"):""}function ob(b){return la(b,!0).replace(/%26/gi,"&").replace(/%3D/gi, +"=").replace(/%2B/gi,"+")}function la(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Yd(b,a){var c,d,e=Qa.length;for(d=0;d/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=fb(a,c.strictDi);d.invoke(["$rootScope", +"$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;Q&&e.test(Q.name)&&(c.debugInfoEnabled=!0,Q.name=Q.name.replace(e,""));if(Q&&!f.test(Q.name))return d();Q.name=Q.name.replace(f,"");da.resumeBootstrap=function(b){m(b,function(b){a.push(b)});return d()};x(da.resumeDeferredBootstrap)&&da.resumeDeferredBootstrap()}function $d(){Q.name="NG_ENABLE_DEBUG_INFO!"+Q.name;Q.location.reload()} +function ae(b){b=da.element(b).injector();if(!b)throw Ea("test");return b.get("$$testability")}function Ac(b,a){a=a||"_";return b.replace(be,function(b,d){return(d?a:"")+b.toLowerCase()})}function ce(){var b;if(!Bc){var a=pb();(ra=v(a)?Q.jQuery:a?Q[a]:w)&&ra.fn.on?(B=ra,P(ra.fn,{scope:Ra.scope,isolateScope:Ra.isolateScope,controller:Ra.controller,injector:Ra.injector,inheritedData:Ra.inheritedData}),b=ra.cleanData,ra.cleanData=function(a){var d;if(Qb)Qb=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d= +ra._data(f,"events"))&&d.$destroy&&ra(f).triggerHandler("$destroy");b(a)}):B=R;da.element=B;Bc=!0}}function qb(b,a,c){if(!b)throw Ea("areq",a||"?",c||"required");return b}function Sa(b,a,c){c&&J(b)&&(b=b[b.length-1]);qb(x(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ta(b,a){if("hasOwnProperty"===b)throw Ea("badname",a);}function Cc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,h=0;h")+d[2];for(d=d[0];d--;)c=c.lastChild;f=db(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";m(f,function(a){e.appendChild(a)});return e}function R(b){if(b instanceof R)return b;var a;G(b)&&(b=T(b), +a=!0);if(!(this instanceof R)){if(a&&"<"!=b.charAt(0))throw Tb("nosel");return new R(b)}if(a){a=X;var c;b=(c=Ef.exec(b))?[a.createElement(c[1])]:(c=Mc(b,a))?c.childNodes:[]}Nc(this,b)}function Ub(b){return b.cloneNode(!0)}function ub(b,a){a||vb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;dk&&this.remove(r.key);return b}},get:function(a){if(k").parent()[0])});var f= +S(a,b,a,c,d,e);W.$$addScopeClass(a);var g=null;return function(b,c,d){qb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==wa(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?B(Xb(g,B("
").append(a).html())):c?Ra.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);W.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a, +b,c,d,e,f){function g(a,c,d,e){var f,k,l,r,n,t,O;if(q)for(O=Array(c.length),r=0;rD.priority)break;if(M=D.scope)D.templateUrl||(C(M)?(Q("new/isolated scope", +u||S,D,v),u=D):Q("new/isolated scope",u,D,v)),S=S||D;y=D.name;!D.templateUrl&&D.controller&&(M=D.controller,ba=ba||fa(),Q("'"+y+"' controller",ba[y],D,v),ba[y]=D);if(M=D.transclude)N=!0,D.$$tlb||(Q("transclusion",z,D,v),z=D),"element"==M?(ia=!0,H=D.priority,M=v,v=d.$$element=B(X.createComment(" "+y+": "+d[y]+" ")),b=v[0],U(f,ua.call(M,0),b),Ka=W(M,e,H,g&&g.name,{nonTlbTranscludeDirective:z})):(M=B(Ub(b)).contents(),v.empty(),Ka=W(M,e));if(D.template)if(m=!0,Q("template",L,D,v),L=D,M=x(D.template)? +D.template(v,d):D.template,M=ha(M),D.replace){g=D;M=Sb.test(M)?Xc(Xb(D.templateNamespace,T(M))):[];b=M[0];if(1!=M.length||b.nodeType!==pa)throw ga("tplrt",y,"");U(f,v,b);F={$attr:{}};M=ca(b,[],F);var Lf=a.splice(I+1,a.length-(I+1));u&&A(M);a=a.concat(M).concat(Lf);Yc(d,F);F=a.length}else v.html(M);if(D.templateUrl)m=!0,Q("template",L,D,v),L=D,D.replace&&(g=D),K=Mf(a.splice(I,a.length-I),v,d,f,N&&Ka,h,k,{controllerDirectives:ba,newScopeDirective:S!==D&&S,newIsolateScopeDirective:u,templateDirective:L, +nonTlbTranscludeDirective:z}),F=a.length;else if(D.compile)try{na=D.compile(v,d,Ka),x(na)?n(null,na,P,R):na&&n(na.pre,na.post,P,R)}catch(V){c(V,xa(v))}D.terminal&&(K.terminal=!0,H=Math.max(H,D.priority))}K.scope=S&&!0===S.scope;K.transcludeOnThisElement=N;K.templateOnThisElement=m;K.transclude=Ka;r.hasElementTranscludeDirective=ia;return K}function A(a){for(var b=0,c=a.length;bn.priority)&&-1!=n.restrict.indexOf(f)&&(k&&(n=Nb(n,{$$start:k,$$end:l})),b.push(n),h=n)}catch(H){c(H)}}return h}function I(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d"+b+"";return c.childNodes[0].childNodes;default:return b}}function R(a,b){if("srcdoc"==b)return ia.HTML;var c=wa(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b|| +"ngSrc"==b))return ia.RESOURCE_URL}function V(a,c,d,e,f){var h=R(a,e);f=g[e]||f;var l=b(d,!0,h,f);if(l){if("multiple"===e&&"select"===wa(a))throw ga("selmulti",xa(a));c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers=fa());if(k.test(e))throw ga("nodomevents");var r=g[e];r!==d&&(l=r&&b(r,!0,h,f),d=r);l&&(g[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!=b?g.$updateClass(a,b):g.$set(e, +a)}))}}}})}}function U(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g=a)return b;for(;a--;)8===b[a].nodeType&&Nf.call(b,a,1);return b}function Xe(){var b={},a=!1;this.register=function(a,d){Ta(a,"controller");C(a)?P(b,a):b[a]=d};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(c,d){function e(a,b,c,d){if(!a||!C(a.$scope))throw I("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,h,g,l){var k,n,p;g=!0===g;l&&G(l)&&(p=l);if(G(f)){l=f.match(Vc);if(!l)throw Of("ctrlfmt",f); +n=l[1];p=p||l[3];f=b.hasOwnProperty(n)?b[n]:Cc(h.$scope,n,!0)||(a?Cc(d,n,!0):w);Sa(f,n,!0)}if(g)return g=(J(f)?f[f.length-1]:f).prototype,k=Object.create(g||null),p&&e(h,p,k,n||f.name),P(function(){var a=c.invoke(f,k,h,n);a!==k&&(C(a)||x(a))&&(k=a,p&&e(h,p,k,n||f.name));return k},{instance:k,identifier:p});k=c.instantiate(f,h,n);p&&e(h,p,k,n||f.name);return k}}]}function Ye(){this.$get=["$window",function(b){return B(b.document)}]}function Ze(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b, +arguments)}}]}function Yb(b){return C(b)?ea(b)?b.toISOString():eb(b):b}function df(){this.$get=function(){return function(b){if(!b)return"";var a=[];nc(b,function(b,d){null===b||v(b)||(J(b)?m(b,function(b,c){a.push(la(d)+"="+la(Yb(b)))}):a.push(la(d)+"="+la(Yb(b))))});return a.join("&")}}}function ef(){this.$get=function(){return function(b){function a(b,e,f){null===b||v(b)||(J(b)?m(b,function(b,c){a(b,e+"["+(C(b)?c:"")+"]")}):C(b)&&!ea(b)?nc(b,function(b,c){a(b,e+(f?"":"[")+c+(f?"":"]"))}):c.push(la(e)+ +"="+la(Yb(b))))}if(!b)return"";var c=[];a(b,"",!0);return c.join("&")}}}function Zb(b,a){if(G(b)){var c=b.replace(Pf,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(ad))||(d=(d=c.match(Qf))&&Rf[d[0]].test(c));d&&(b=vc(c))}}return b}function bd(b){var a=fa(),c;G(b)?m(b.split("\n"),function(b){c=b.indexOf(":");var e=F(T(b.substr(0,c)));b=T(b.substr(c+1));e&&(a[e]=a[e]?a[e]+", "+b:b)}):C(b)&&m(b,function(b,c){var f=F(c),h=T(b);f&&(a[f]=a[f]?a[f]+", "+h:h)});return a}function cd(b){var a; +return function(c){a||(a=bd(b));return c?(c=a[F(c)],void 0===c&&(c=null),c):a}}function dd(b,a,c,d){if(x(d))return d(b,a,c);m(d,function(d){b=d(b,a,c)});return b}function cf(){var b=this.defaults={transformResponse:[Zb],transformRequest:[function(a){return C(a)&&"[object File]"!==va.call(a)&&"[object Blob]"!==va.call(a)&&"[object FormData]"!==va.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ja($b),put:ja($b),patch:ja($b)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN", +paramSerializer:"$httpParamSerializer"},a=!1;this.useApplyAsync=function(b){return A(b)?(a=!!b,this):a};var c=!0;this.useLegacyPromiseExtensions=function(a){return A(a)?(c=!!a,this):c};var d=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,h,g,l,k){function n(a){function d(a){var b=P({},a);b.data=a.data?dd(a.data,a.headers,a.status,f.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:l.reject(b)}function e(a,b){var c, +d={};m(a,function(a,e){x(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!da.isObject(a))throw I("$http")("badreq",a);var f=P({method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse,paramSerializer:b.paramSerializer},a);f.headers=function(a){var c=b.headers,d=P({},a.headers),f,g,h,c=P({},c.common,c[F(a.method)]);a:for(f in c){g=F(f);for(h in d)if(F(h)===g)continue a;d[f]=c[f]}return e(d,ja(a))}(a);f.method=sb(f.method);f.paramSerializer=G(f.paramSerializer)?k.get(f.paramSerializer): +f.paramSerializer;var g=[function(a){var c=a.headers,e=dd(a.data,cd(c),w,a.transformRequest);v(e)&&m(c,function(a,b){"content-type"===F(b)&&delete c[b]});v(a.withCredentials)&&!v(b.withCredentials)&&(a.withCredentials=b.withCredentials);return p(a,e).then(d,d)},w],h=l.when(f);for(m(E,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){a=g.shift();var r=g.shift(),h=h.then(a,r)}c?(h.success=function(a){Sa(a, +"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Sa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=ed("success"),h.error=ed("error"));return h}function p(c,d){function h(b,c,d,e){function f(){k(c,b,d,e)}L&&(200<=b&&300>b?L.put(ba,[b,c,bd(d),e]):L.remove(ba));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function k(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?O.resolve:O.reject)({data:a,status:b,headers:cd(d),config:c,statusText:e})} +function p(a){k(a.data,a.status,ja(a.headers()),a.statusText)}function E(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var O=l.defer(),H=O.promise,L,m,S=c.headers,ba=r(c.url,c.paramSerializer(c.params));n.pendingRequests.push(c);H.then(E,E);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(L=C(c.cache)?c.cache:C(b.cache)?b.cache:t);L&&(m=L.get(ba),A(m)?m&&x(m.then)?m.then(p,p):J(m)?k(m[1],m[0],ja(m[2]),m[3]):k(m,200,{},"OK"):L.put(ba,H));v(m)&&((m= +fd(c.url)?f()[c.xsrfCookieName||b.xsrfCookieName]:w)&&(S[c.xsrfHeaderName||b.xsrfHeaderName]=m),e(c.method,ba,d,h,S,c.timeout,c.withCredentials,c.responseType));return H}function r(a,b){0=l&&(u.resolve(E), +t(q.$$intervalId),delete f[q.$$intervalId]);K||b.$apply()},g);f[q.$$intervalId]=u;return q}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function ac(b){b=b.split("/");for(var a=b.length;a--;)b[a]=ob(b[a]);return b.join("/")}function gd(b,a){var c=Aa(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=Y(c.port)||Tf[c.protocol]||null}function hd(b,a){var c="/"!==b.charAt(0); +c&&(b="/"+b);var d=Aa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=yc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function sa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ja(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Cb(b){return b.replace(/(#.+)|#$/,"$1")}function bc(b,a,c){this.$$html5=!0;c=c||"";gd(b,this);this.$$parse=function(b){var c=sa(a, +b);if(!G(c))throw Db("ipthprfx",b,a);hd(c,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var b=Pb(this.$$search),c=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=ac(this.$$path)+(b?"?"+b:"")+c;this.$$absUrl=a+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,h;A(f=sa(b,d))?(h=f,h=A(f=sa(c,f))?a+(sa("/",f)||f):b+h):A(f=sa(a,d))?h=a+f:a==d+"/"&&(h=a);h&&this.$$parse(h);return!!h}}function cc(b,a,c){gd(b,this); +this.$$parse=function(d){var e=sa(b,d)||sa(a,d),f;v(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",v(e)&&(b=d,this.replace())):(f=sa(c,e),v(f)&&(f=e));hd(f,this);d=this.$$path;var e=b,h=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));h.exec(f)||(d=(f=h.exec(d))?f[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var a=Pb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+e;this.$$absUrl=b+(this.$$url?c+this.$$url:"")};this.$$parseLinkUrl= +function(a,c){return Ja(b)==Ja(a)?(this.$$parse(a),!0):!1}}function id(b,a,c){this.$$html5=!0;cc.apply(this,arguments);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,h;b==Ja(d)?f=d:(h=sa(a,d))?f=b+c+h:a===d+"/"&&(f=a);f&&this.$$parse(f);return!!f};this.$$compose=function(){var a=Pb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+e;this.$$absUrl=b+c+this.$$url}}function Eb(b){return function(){return this[b]}}function jd(b, +a){return function(c){if(v(c))return this[b];this[b]=a(c);this.$$compose();return this}}function hf(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return A(a)?(b=a,this):b};this.html5Mode=function(b){return bb(b)?(a.enabled=b,this):C(b)?(bb(b.enabled)&&(a.enabled=b.enabled),bb(b.requireBase)&&(a.requireBase=b.requireBase),bb(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c, +d,e,f,h){function g(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var p=d.url(),r;if(a.enabled){if(!n&&a.requireBase)throw Db("nobase");r=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(n||"/");n=e.history?bc:id}else r=Ja(p),n=cc;var t=r.substr(0,Ja(r).lastIndexOf("/")+1);k=new n(r,t,"#"+b);k.$$parseLinkUrl(p,p);k.$$state=d.state(); +var E=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=B(b.target);"a"!==wa(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");C(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=Aa(g.animVal).href);E.test(g)||!g||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(g,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),h.angular["ff-684208-preventDefault"]= +!0))}});Cb(k.absUrl())!=Cb(p)&&d.url(k.absUrl(),!0);var K=!0;d.onUrlChange(function(a,b){v(sa(t,a))?h.location.href=a:(c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,g(d,!1,e)):(K=!1,l(d,e)))}),c.$$phase||c.$digest())});c.$watch(function(){var a=Cb(d.url()),b=Cb(k.absUrl()),f=d.state(),h=k.$$replace,r=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(K||r)K=!1, +c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(r&&g(b,h,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function jf(){var b=!0,a=this;this.debugEnabled=function(a){return A(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a= +a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||y;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];m(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function Xa(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"=== +b||"__proto__"===b)throw Z("isecfld",a);return b}function kd(b,a){b+="";if(!G(b))throw Z("iseccst",a);return b}function Ba(b,a){if(b){if(b.constructor===b)throw Z("isecfn",a);if(b.window===b)throw Z("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw Z("isecdom",a);if(b===Object)throw Z("isecobj",a);}return b}function ld(b,a){if(b){if(b.constructor===b)throw Z("isecfn",a);if(b===Uf||b===Vf||b===Wf)throw Z("isecff",a);}}function md(b,a){if(b&&(b===(0).constructor||b===(!1).constructor|| +b==="".constructor||b==={}.constructor||b===[].constructor||b===Function.constructor))throw Z("isecaf",a);}function Xf(b,a){return"undefined"!==typeof b?b:a}function nd(b,a){return"undefined"===typeof b?a:"undefined"===typeof a?b:b+a}function U(b,a){var c,d;switch(b.type){case s.Program:c=!0;m(b.body,function(b){U(b.expression,a);c=c&&b.expression.constant});b.constant=c;break;case s.Literal:b.constant=!0;b.toWatch=[];break;case s.UnaryExpression:U(b.argument,a);b.constant=b.argument.constant;b.toWatch= +b.argument.toWatch;break;case s.BinaryExpression:U(b.left,a);U(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.left.toWatch.concat(b.right.toWatch);break;case s.LogicalExpression:U(b.left,a);U(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.constant?[]:[b];break;case s.ConditionalExpression:U(b.test,a);U(b.alternate,a);U(b.consequent,a);b.constant=b.test.constant&&b.alternate.constant&&b.consequent.constant;b.toWatch=b.constant?[]:[b];break;case s.Identifier:b.constant= +!1;b.toWatch=[b];break;case s.MemberExpression:U(b.object,a);b.computed&&U(b.property,a);b.constant=b.object.constant&&(!b.computed||b.property.constant);b.toWatch=[b];break;case s.CallExpression:c=b.filter?!a(b.callee.name).$stateful:!1;d=[];m(b.arguments,function(b){U(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=b.filter&&!a(b.callee.name).$stateful?d:[b];break;case s.AssignmentExpression:U(b.left,a);U(b.right,a);b.constant=b.left.constant&&b.right.constant; +b.toWatch=[b];break;case s.ArrayExpression:c=!0;d=[];m(b.elements,function(b){U(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=d;break;case s.ObjectExpression:c=!0;d=[];m(b.properties,function(b){U(b.value,a);c=c&&b.value.constant;b.value.constant||d.push.apply(d,b.value.toWatch)});b.constant=c;b.toWatch=d;break;case s.ThisExpression:b.constant=!1,b.toWatch=[]}}function od(b){if(1==b.length){b=b[0].expression;var a=b.toWatch;return 1!==a.length?a:a[0]!==b?a:w}} +function pd(b){return b.type===s.Identifier||b.type===s.MemberExpression}function qd(b){if(1===b.body.length&&pd(b.body[0].expression))return{type:s.AssignmentExpression,left:b.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function rd(b){return 0===b.body.length||1===b.body.length&&(b.body[0].expression.type===s.Literal||b.body[0].expression.type===s.ArrayExpression||b.body[0].expression.type===s.ObjectExpression)}function sd(b,a){this.astBuilder=b;this.$filter=a}function td(b, +a){this.astBuilder=b;this.$filter=a}function Fb(b){return"constructor"==b}function dc(b){return x(b.valueOf)?b.valueOf():Yf.call(b)}function kf(){var b=fa(),a=fa();this.$get=["$filter",function(c){function d(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=dc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function e(a,b,c,e,f){var g=e.inputs,h;if(1===g.length){var k=d,g=g[0];return a.$watch(function(a){var b=g(a);d(b,k)||(h=e(a,w,w,[b]),k=b&&dc(b));return h},b,c,f)}for(var l=[],n=[],p=0, +m=g.length;p=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;fa)for(b in l++,f)ta.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1 +t&&(D=4-t,u[D]||(u[D]=[]),u[D].push({msg:x(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:g}));else if(b===d){r=!1;break a}}catch(y){h(y)}if(!(k=m.$$watchersCount&&m.$$childHead||m!==this&&m.$$nextSibling))for(;m!==this&&!(k=m.$$nextSibling);)m=m.$parent}while(m=k);if((r||z.length)&&!t--)throw q.$$phase=null,c("infdig",a,u);}while(r||z.length);for(q.$$phase=null;N.length;)try{N.shift()()}catch(A){h(A)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy"); +this.$$destroyed=!0;this===q&&l.$$applicationDestroyed();r(this,-this.$$watchersCount);for(var b in this.$$listenerCount)t(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=y;this.$on= +this.$watch=this.$watchGroup=function(){return y};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){q.$$phase||z.length||l.defer(function(){z.length&&q.$digest()});z.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){N.push(a)},$apply:function(a){try{p("$apply");try{return this.$eval(a)}finally{q.$$phase=null}}catch(b){h(b)}finally{try{q.$digest()}catch(c){throw h(c), +c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&w.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,t(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,g={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){g.defaultPrevented=!0},defaultPrevented:!1}, +k=db([g],arguments,1),l,n;do{d=e.$$listeners[a]||c;g.currentScope=e;l=0;for(n=d.length;lWa)throw Ca("iequirks");var d=ja(oa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=$a);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,h=d.trustAs;m(oa,function(a,b){var c=F(b);d[gb("parse_as_"+c)]=function(b){return e(a,b)};d[gb("get_trusted_"+c)]=function(b){return f(a,b)};d[gb("trust_as_"+ +c)]=function(b){return h(a,b)}});return d}]}function qf(){this.$get=["$window","$document",function(b,a){var c={},d=Y((/android (\d+)/.exec(F((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},h,g=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var p in l)if(k=g.exec(p)){h=k[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||h+"Transition"in l);n=!!("animation"in l||h+"Animation"in +l);!d||k&&n||(k=G(l.webkitTransition),n=G(l.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===a&&11>=Wa)return!1;if(v(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:Fa(),vendorPrefix:h,transitions:k,animations:n,android:d}}]}function sf(){this.$get=["$templateCache","$http","$q","$sce",function(b,a,c,d){function e(f,h){e.totalPendingRequests++;G(f)&&b.get(f)||(f=d.getTrustedResourceUrl(f));var g=a.defaults&&a.defaults.transformResponse; +J(g)?g=g.filter(function(a){return a!==Zb}):g===Zb&&(g=null);return a.get(f,{cache:b,transformResponse:g})["finally"](function(){e.totalPendingRequests--}).then(function(a){b.put(f,a.data);return a.data},function(a){if(!h)throw ga("tpload",f,a.status,a.statusText);return c.reject(a)})}e.totalPendingRequests=0;return e}]}function tf(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var h=[];m(a,function(a){var d= +da.element(a).data("$binding");d&&m(d,function(d){c?(new RegExp("(^|\\s)"+vd(b)+"(\\s|\\||$)")).test(d)&&h.push(a):-1!=d.indexOf(b)&&h.push(a)})});return h},findModels:function(a,b,c){for(var h=["ng-","data-ng-","ng\\:"],g=0;gb;b=Math.abs(b);var h=Infinity===b;if(!h&&!isFinite(b))return"";var g=b+"",l="",k=!1,n=[];h&&(l="\u221e");if(!h&&-1!==g.indexOf("e")){var p=g.match(/([\d\.]+)e(-?)(\d+)/);p&&"-"==p[2]&&p[3]>e+1?b=0:(l=g,k=!0)}if(h||k)0b&&(l=b.toFixed(e),b=parseFloat(l),l=l.replace(hc,d));else{h=(g.split(hc)[1]||"").length;v(e)&&(e=Math.min(Math.max(a.minFrac,h),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var h=(""+b).split(hc),g=h[0],h=h[1]||"",p=0, +r=a.lgSize,t=a.gSize;if(g.length>=r+t)for(p=g.length-r,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=sb(a?"SHORT"+b:b);return d[f][e]}}function Ed(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Fd(b){return function(a){var c=Ed(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function ic(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function Ad(b){function a(a){var b;if(b= +a.match(c)){a=new Date(0);var f=0,h=0,g=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=Y(b[9]+b[10]),h=Y(b[9]+b[11]));g.call(a,Y(b[1]),Y(b[2])-1,Y(b[3]));f=Y(b[4]||0)-f;h=Y(b[5]||0)-h;g=Y(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,h,g,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var h="",g=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;G(c)&&(c= +fg.test(c)?Y(c):a(c));V(c)&&(c=new Date(c));if(!ea(c)||!isFinite(c.getTime()))return c;for(;e;)(k=gg.exec(e))?(g=db(g,k,1),e=g.pop()):(g.push(e),e=null);var n=c.getTimezoneOffset();f&&(n=wc(f,c.getTimezoneOffset()),c=Ob(c,f,!0));m(g,function(a){l=hg[a];h+=l?l(c,b.DATETIME_FORMATS,n):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return h}}function ag(){return function(b,a){v(a)&&(a=2);return eb(b,a)}}function bg(){return function(b,a,c){a=Infinity===Math.abs(Number(a))?Number(a):Y(a);if(isNaN(a))return b; +V(b)&&(b=b.toString());if(!J(b)&&!G(b))return b;c=!c||isNaN(c)?0:Y(c);c=0>c&&c>=-b.length?b.length+c:c;return 0<=a?b.slice(c,c+a):0===c?b.slice(a,b.length):b.slice(Math.max(0,c+a),c)}}function Cd(b){function a(a,c){c=c?-1:1;return a.map(function(a){var d=1,g=$a;if(x(a))g=a;else if(G(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))d="-"==a.charAt(0)?-1:1,a=a.substring(1);if(""!==a&&(g=b(a),g.constant))var l=g(),g=function(a){return a[l]}}return{get:g,descending:d*c}})}function c(a){switch(typeof a){case "number":case "boolean":case "string":return!0; +default:return!1}}return function(b,e,f){if(!Da(b))return b;J(e)||(e=[e]);0===e.length&&(e=["+"]);var h=a(e,f);h.push({get:function(){return{}},descending:f?-1:1});b=Array.prototype.map.call(b,function(a,b){return{value:a,predicateValues:h.map(function(d){var e=d.get(a);d=typeof e;if(null===e)d="string",e="null";else if("string"===d)e=e.toLowerCase();else if("object"===d)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),c(e)))break a;if(qc(e)&&(e=e.toString(),c(e)))break a;e=b}return{value:e,type:d}})}}); +b.sort(function(a,b){for(var c=0,d=0,e=h.length;db||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){var b=d.$isEmpty(d.$viewValue)? +"":d.$viewValue;a.val()!==b&&a.val(b)}}function Kb(b,a){return function(c,d){var e,f;if(ea(c))return c;if(G(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(ig.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},m(e,function(b,c){c=s};h.$observe("min",function(a){s=r(a);g.$validate()})}if(A(h.max)||h.ngMax){var u;g.$validators.max=function(a){return!p(a)||v(u)||c(a)<=u};h.$observe("max",function(a){u=r(a);g.$validate()})}}}function Id(b,a,c,d){(d.$$hasNativeValidators=C(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?w:b})}function Jd(b,a,c,d,e){if(A(d)){b= +b(d);if(!b.constant)throw lb("constexpr",c,d);return b(a)}return e}function kc(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d(?:<\/\1>|)$/,Sb=/<|&#?\w+;/,Cf=/<([\w:-]+)/,Df=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, +ma={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option;ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead;ma.th=ma.td;var Ra=R.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),R(Q).on("load",a))}, +toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?B(this[b]):B(this[this.length+b])},length:0,push:kg,sort:[].sort,splice:[].splice},Bb={};m("multiple selected checked disabled readOnly required open".split(" "),function(b){Bb[F(b)]=b});var Sc={};m("input select option textarea button form details".split(" "),function(b){Sc[b]=!0});var $c={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"}; +m({data:Vb,removeData:vb,hasData:function(b){for(var a in hb[b.ng339])return!0;return!1}},function(b,a){R[a]=b});m({data:Vb,inheritedData:Ab,scope:function(b){return B.data(b,"$scope")||Ab(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return B.data(b,"$isolateScope")||B.data(b,"$isolateScopeNoTemplate")},controller:Pc,injector:function(b){return Ab(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:xb,css:function(b,a,c){a=gb(a);if(A(c))b.style[a]=c;else return b.style[a]}, +attr:function(b,a,c){var d=b.nodeType;if(d!==Pa&&2!==d&&8!==d)if(d=F(a),Bb[d])if(A(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||y).specified?d:w;else if(A(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?w:b},prop:function(b,a,c){if(A(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(v(b)){var d=a.nodeType;return d===pa||d===Pa?a.textContent:""}a.textContent=b}b.$dv="";return b}(), +val:function(b,a){if(v(a)){if(b.multiple&&"select"===wa(b)){var c=[];m(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(v(a))return b.innerHTML;ub(b,!0);b.innerHTML=a},empty:Qc},function(b,a){R.prototype[a]=function(a,d){var e,f,h=this.length;if(b!==Qc&&v(2==b.length&&b!==xb&&b!==Pc?a:d)){if(C(a)){for(e=0;e <= >= && || ! = |".split(" "),function(a){Lb[a]=!0});var rg={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},ec=function(a){this.options=a};ec.prototype={constructor:ec,lex:function(a){this.text=a;this.index=0;for(this.tokens= +[];this.index=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"=== +a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=A(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw Z("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">=");)a={type:s.BinaryExpression,operator:c.text, +left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a={type:s.BinaryExpression,operator:c.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:c.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()}, +primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=ha(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var c;c=this.expect("(","[",".");)"("===c.text?(a={type:s.CallExpression,callee:a,arguments:this.parseArguments()}, +this.consume(")")):"["===c.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===c.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var c={type:s.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression()); +while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:s.ArrayExpression,elements:a}},object:function(){var a=[],c;if("}"!==this.peekToken().text){do{if(this.peek("}"))break; +c={type:s.Property,kind:"init"};this.peek().constant?c.key=this.constant():this.peek().identifier?c.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");c.value=this.expression();a.push(c)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}},throwError:function(a,c){throw Z("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},consume:function(a){if(0===this.tokens.length)throw Z("ueoe",this.text);var c=this.expect(a); +c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},peekToken:function(){if(0===this.tokens.length)throw Z("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var h=a.text;if(h===c||h===d||h===e||h===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},constants:{"true":{type:s.Literal,value:!0}, +"false":{type:s.Literal,value:!1},"null":{type:s.Literal,value:null},undefined:{type:s.Literal,value:w},"this":{type:s.ThisExpression}}};sd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:c,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};U(e,d.$filter);var f="",h;this.stage="assign";if(h=qd(e))this.state.computing="assign",f=this.nextId(),this.recurse(h,f),this.return_(f),f="fn.assign="+this.generateFunction("assign", +"s,v,l");h=od(e.body);d.stage="inputs";m(h,function(a,c){var e="fn"+c;d.state[e]={vars:[],body:[],own:{}};d.state.computing=e;var f=d.nextId();d.recurse(a,f);d.return_(f);d.state.inputs.push(e);a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(e);f='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+f+this.watchFns()+"return fn;";f=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue", +"ensureSafeAssignContext","ifDefined","plus","text",f))(this.$filter,Xa,Ba,ld,kd,md,Xf,nd,a);this.state=this.stage=w;f.literal=rd(e);f.constant=e.constant;return f},USE:"use",STRICT:"strict",watchFns:function(){var a=[],c=this.state.inputs,d=this;m(c,function(c){a.push("var "+c+"="+d.generateFunction(c,"s"))});c.length&&a.push("fn.inputs=["+c.join(",")+"];");return a.join("")},generateFunction:function(a,c){return"function("+c+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a= +[],c=this;m(this.state.filters,function(d,e){a.push(d+"=$filter("+c.escape(e)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,c,d,e,f,h){var g,l,k=this,n,p;e=e||y;if(!h&&A(a.watchId))c=c||this.nextId(),this.if_("i",this.lazyAssign(c,this.computedMember("i",a.watchId)),this.lazyRecurse(a,c,d,e,f,!0));else switch(a.type){case s.Program:m(a.body, +function(c,d){k.recurse(c.expression,w,w,function(a){l=a});d!==a.body.length-1?k.current().body.push(l,";"):k.return_(l)});break;case s.Literal:p=this.escape(a.value);this.assign(c,p);e(p);break;case s.UnaryExpression:this.recurse(a.argument,w,w,function(a){l=a});p=a.operator+"("+this.ifDefined(l,0)+")";this.assign(c,p);e(p);break;case s.BinaryExpression:this.recurse(a.left,w,w,function(a){g=a});this.recurse(a.right,w,w,function(a){l=a});p="+"===a.operator?this.plus(g,l):"-"===a.operator?this.ifDefined(g, +0)+a.operator+this.ifDefined(l,0):"("+g+")"+a.operator+"("+l+")";this.assign(c,p);e(p);break;case s.LogicalExpression:c=c||this.nextId();k.recurse(a.left,c);k.if_("&&"===a.operator?c:k.not(c),k.lazyRecurse(a.right,c));e(c);break;case s.ConditionalExpression:c=c||this.nextId();k.recurse(a.test,c);k.if_(c,k.lazyRecurse(a.alternate,c),k.lazyRecurse(a.consequent,c));e(c);break;case s.Identifier:c=c||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l", +a.name)+"?l:s"),d.computed=!1,d.name=a.name);Xa(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){f&&1!==f&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(c,k.nonComputedMember("s",a.name))})},c&&k.lazyAssign(c,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(c);e(c);break;case s.MemberExpression:g=d&&(d.context=this.nextId())|| +this.nextId();c=c||this.nextId();k.recurse(a.object,g,w,function(){k.if_(k.notNull(g),function(){if(a.computed)l=k.nextId(),k.recurse(a.property,l),k.getStringValue(l),k.addEnsureSafeMemberName(l),f&&1!==f&&k.if_(k.not(k.computedMember(g,l)),k.lazyAssign(k.computedMember(g,l),"{}")),p=k.ensureSafeObject(k.computedMember(g,l)),k.assign(c,p),d&&(d.computed=!0,d.name=l);else{Xa(a.property.name);f&&1!==f&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name), +"{}"));p=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))p=k.ensureSafeObject(p);k.assign(c,p);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(c,"undefined")});e(c)},!!f);break;case s.CallExpression:c=c||this.nextId();a.filter?(l=k.filter(a.callee.name),n=[],m(a.arguments,function(a){var c=k.nextId();k.recurse(a,c);n.push(c)}),p=l+"("+n.join(",")+")",k.assign(c,p),e(c)):(l=k.nextId(),g={},n=[],k.recurse(a.callee,l,g,function(){k.if_(k.notNull(l), +function(){k.addEnsureSafeFunction(l);m(a.arguments,function(a){k.recurse(a,k.nextId(),w,function(a){n.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),p=k.member(g.context,g.name,g.computed)+"("+n.join(",")+")"):p=l+"("+n.join(",")+")";p=k.ensureSafeObject(p);k.assign(c,p)},function(){k.assign(c,"undefined")});e(c)}));break;case s.AssignmentExpression:l=this.nextId();g={};if(!pd(a.left))throw Z("lval");this.recurse(a.left,w,g,function(){k.if_(k.notNull(g.context), +function(){k.recurse(a.right,l);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);p=k.member(g.context,g.name,g.computed)+a.operator+l;k.assign(c,p);e(c||p)})},1);break;case s.ArrayExpression:n=[];m(a.elements,function(a){k.recurse(a,k.nextId(),w,function(a){n.push(a)})});p="["+n.join(",")+"]";this.assign(c,p);e(p);break;case s.ObjectExpression:n=[];m(a.properties,function(a){k.recurse(a.value,k.nextId(),w,function(c){n.push(k.escape(a.key.type=== +s.Identifier?a.key.name:""+a.key.value)+":"+c)})});p="{"+n.join(",")+"}";this.assign(c,p);e(p);break;case s.ThisExpression:this.assign(c,"s");e("s");break;case s.NGValueParameter:this.assign(c,"v"),e("v")}},getHasOwnProperty:function(a,c){var d=a+"."+c,e=this.current().own;e.hasOwnProperty(d)||(e[d]=this.nextId(!1,a+"&&("+this.escape(c)+" in "+a+")"));return e[d]},assign:function(a,c){if(a)return this.current().body.push(a,"=",c,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]= +this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,c){return"ifDefined("+a+","+this.escape(c)+")"},plus:function(a,c){return"plus("+a+","+c+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,c,d){if(!0===a)c();else{var e=this.current().body;e.push("if(",a,"){");c();e.push("}");d&&(e.push("else{"),d(),e.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,c){return a+"."+c},computedMember:function(a, +c){return a+"["+c+"]"},member:function(a,c,d){return d?this.computedMember(a,c):this.nonComputedMember(a,c)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+ +a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+",text)")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+a+",text)"},lazyRecurse:function(a,c,d,e,f,h){var g=this;return function(){g.recurse(a,c,d,e,f,h)}},lazyAssign:function(a,c){var d=this;return function(){d.assign(a,c)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g, +stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(G(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(V(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw Z("esc");},nextId:function(a,c){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(c?"="+c:""));return d},current:function(){return this.state[this.state.computing]}}; +td.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=c;U(e,d.$filter);var f,h;if(f=qd(e))h=this.recurse(f);f=od(e.body);var g;f&&(g=[],m(f,function(a,c){var e=d.recurse(a);a.input=e;g.push(e);a.watchId=c}));var l=[];m(e.body,function(a){l.push(d.recurse(a.expression))});f=0===e.body.length?function(){}:1===e.body.length?l[0]:function(a,c){var d;m(l,function(e){d=e(a,c)});return d};h&&(f.assign=function(a,c,d){return h(a,d,c)});g&&(f.inputs= +g);f.literal=rd(e);f.constant=e.constant;return f},recurse:function(a,c,d){var e,f,h=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,c);case s.UnaryExpression:return f=this.recurse(a.argument),this["unary"+a.operator](f,c);case s.BinaryExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case s.LogicalExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e, +f,c);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),c);case s.Identifier:return Xa(a.name,h.expression),h.identifier(a.name,h.expensiveChecks||Fb(a.name),c,d,h.expression);case s.MemberExpression:return e=this.recurse(a.object,!1,!!d),a.computed||(Xa(a.property.name,h.expression),f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(e,f,c,d,h.expression):this.nonComputedMember(e,f, +h.expensiveChecks,c,d,h.expression);case s.CallExpression:return g=[],m(a.arguments,function(a){g.push(h.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?function(a,d,e,h){for(var r=[],m=0;m":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)>c(e,f,h,g);return d?{value:e}:e}},"binary<=":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)<=c(e,f,h,g);return d?{value:e}:e}},"binary>=":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)>=c(e,f,h,g);return d?{value:e}:e}},"binary&&":function(a,c,d){return function(e, +f,h,g){e=a(e,f,h,g)&&c(e,f,h,g);return d?{value:e}:e}},"binary||":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)||c(e,f,h,g);return d?{value:e}:e}},"ternary?:":function(a,c,d,e){return function(f,h,g,l){f=a(f,h,g,l)?c(f,h,g,l):d(f,h,g,l);return e?{value:f}:f}},value:function(a,c){return function(){return c?{context:w,name:w,value:a}:a}},identifier:function(a,c,d,e,f){return function(h,g,l,k){h=g&&a in g?g:h;e&&1!==e&&h&&!h[a]&&(h[a]={});g=h?h[a]:w;c&&Ba(g,f);return d?{context:h,name:a,value:g}: +g}},computedMember:function(a,c,d,e,f){return function(h,g,l,k){var n=a(h,g,l,k),p,m;null!=n&&(p=c(h,g,l,k),p=kd(p),Xa(p,f),e&&1!==e&&n&&!n[p]&&(n[p]={}),m=n[p],Ba(m,f));return d?{context:n,name:p,value:m}:m}},nonComputedMember:function(a,c,d,e,f,h){return function(g,l,k,n){g=a(g,l,k,n);f&&1!==f&&g&&!g[c]&&(g[c]={});l=null!=g?g[c]:w;(d||Fb(c))&&Ba(l,h);return e?{context:g,name:c,value:l}:l}},inputs:function(a,c){return function(d,e,f,h){return h?h[c]:a(d,e,f)}}};var fc=function(a,c,d){this.lexer= +a;this.$filter=c;this.options=d;this.ast=new s(this.lexer);this.astCompiler=d.csp?new td(this.ast,c):new sd(this.ast,c)};fc.prototype={constructor:fc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};fa();fa();var Yf=Object.prototype.valueOf,Ca=I("$sce"),oa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ga=I("$compile"),$=X.createElement("a"),xd=Aa(Q.location.href);yd.$inject=["$document"];Kc.$inject=["$provide"];zd.$inject=["$locale"];Bd.$inject= +["$locale"];var hc=".",hg={yyyy:aa("FullYear",4),yy:aa("FullYear",2,0,!0),y:aa("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:aa("Month",2,1),M:aa("Month",1,1),dd:aa("Date",2),d:aa("Date",1),HH:aa("Hours",2),H:aa("Hours",1),hh:aa("Hours",2,-12),h:aa("Hours",1,-12),mm:aa("Minutes",2),m:aa("Minutes",1),ss:aa("Seconds",2),s:aa("Seconds",1),sss:aa("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a,c,d){a=-1*d;return a=(0<= +a?"+":"")+(Gb(Math[0=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1]}},gg=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,fg=/^\-?\d+$/;Ad.$inject=["$locale"];var cg=qa(F),dg=qa(sb);Cd.$inject=["$parse"];var he=qa({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"=== +va.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),tb={};m(Bb,function(a,c){function d(a,d,f){a.$watch(f[e],function(a){f.$set(c,!!a)})}if("multiple"!=a){var e=ya("ng-"+c),f=d;"checked"===a&&(f=function(a,c,f){f.ngModel!==f[e]&&d(a,c,f)});tb[e]=function(){return{restrict:"A",priority:100,link:f}}}});m($c,function(a,c){tb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(jg))){f.$set("ngPattern", +new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});m(["src","srcset","href"],function(a){var c=ya("ng-"+a);tb[c]=function(){return{priority:99,link:function(d,e,f){var h=a,g=a;"href"===a&&"[object SVGAnimatedString]"===va.call(e.prop("href"))&&(g="xlinkHref",f.$attr[g]="xlink:href",h=null);f.$observe(c,function(c){c?(f.$set(g,c),Wa&&h&&e.prop(h,f[g])):"href"===a&&f.$set(g,null)})}}}});var Ib={$addControl:y,$$renameControl:function(a,c){a.$name=c},$removeControl:y,$setValidity:y, +$setDirty:y,$setPristine:y,$setSubmitted:y};Gd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Od=function(a){return["$timeout","$parse",function(c,d){function e(a){return""===a?d('this[""]').assign:d(a).assign||y}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Gd,compile:function(d,h){d.addClass(Ya).addClass(mb);var g=h.name?"name":a&&h.ngForm?"ngForm":!1;return{pre:function(a,d,f,h){var m=h[0];if(!("action"in f)){var t=function(c){a.$apply(function(){m.$commitViewValue(); +m.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",t,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",t,!1)},0,!1)})}(h[1]||m.$$parentForm).$addControl(m);var s=g?e(m.$name):y;g&&(s(a,m),f.$observe(g,function(c){m.$name!==c&&(s(a,w),m.$$parentForm.$$renameControl(m,c),s=e(m.$name),s(a,m))}));d.on("$destroy",function(){m.$$parentForm.$removeControl(m);s(a,w);P(m,Ib)})}}}}}]},ie=Od(),ve=Od(!0),ig=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/, +sg=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,tg=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,ug=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Pd=/^(\d{4})-(\d{2})-(\d{2})$/,Qd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,lc=/^(\d{4})-W(\d\d)$/,Rd=/^(\d{4})-(\d\d)$/,Sd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Td={text:function(a,c,d,e,f,h){jb(a,c,d,e,f,h);jc(e)},date:kb("date", +Pd,Kb(Pd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Qd,Kb(Qd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Sd,Kb(Sd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",lc,function(a,c){if(ea(a))return a;if(G(a)){lc.lastIndex=0;var d=lc.exec(a);if(d){var e=+d[1],f=+d[2],h=d=0,g=0,l=0,k=Ed(e),f=7*(f-1);c&&(d=c.getHours(),h=c.getMinutes(),g=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,h,g,l)}}return NaN},"yyyy-Www"), +month:kb("month",Rd,Kb(Rd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,h){Id(a,c,d,e);jb(a,c,d,e,f,h);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:ug.test(a)?parseFloat(a):w});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw lb("numfmt",a);a=a.toString()}return a});if(A(d.min)||d.ngMin){var g;e.$validators.min=function(a){return e.$isEmpty(a)||v(g)||a>=g};d.$observe("min",function(a){A(a)&&!V(a)&&(a=parseFloat(a,10));g=V(a)&&!isNaN(a)?a:w;e.$validate()})}if(A(d.max)|| +d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||v(l)||a<=l};d.$observe("max",function(a){A(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:w;e.$validate()})}},url:function(a,c,d,e,f,h){jb(a,c,d,e,f,h);jc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||sg.test(d)}},email:function(a,c,d,e,f,h){jb(a,c,d,e,f,h);jc(e);e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||tg.test(d)}},radio:function(a,c, +d,e){v(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,h,g,l){var k=Jd(l,a,"ngTrueValue",d.ngTrueValue,!0),n=Jd(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ka(a, +k)});e.$parsers.push(function(a){return a?k:n})},hidden:y,button:y,submit:y,reset:y,file:y},Ec=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,h,g,l){l[0]&&(Td[F(g.type)]||Td.text)(f,h,g,l[0],c,a,d,e)}}}}],vg=/^(true|false|\d+)$/,Ne=function(){return{restrict:"A",priority:100,compile:function(a,c){return vg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value", +a)})}}}},ne=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=v(a)?"":a})}}}}],pe=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,h){d=a(f.attr(h.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0];h.$observe("ngBindTemplate",function(a){f.textContent=v(a)?"":a})}}}}],oe=["$sce","$parse", +"$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var h=c(f.ngBindHtml),g=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(g,function(){e.html(a.getTrustedHtml(h(c))||"")})}}}}],Me=qa({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),qe=kc("",!0),se=kc("Odd",0),re=kc("Even",1),te=Na({compile:function(a,c){c.$set("ngCloak", +w);a.removeClass("ng-cloak")}}),ue=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Jc={},wg={blur:!0,focus:!0};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ya("ng-"+a);Jc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,h){var g=d(h[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){g(c,{$event:d})}; +wg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var xe=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,h){var g,l,k;c.$watch(e.ngIf,function(c){c?l||h(function(c,f){l=f;c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+" ");g={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),g&&(k=rb(g.clone),a.leave(k).then(function(){k=null}),g=null))})}}}],ye=["$templateRequest","$anchorScroll", +"$animate",function(a,c,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:da.noop,compile:function(e,f){var h=f.ngInclude||f.src,g=f.onload||"",l=f.autoscroll;return function(e,f,m,r,t){var s=0,v,u,q,z=function(){u&&(u.remove(),u=null);v&&(v.$destroy(),v=null);q&&(d.leave(q).then(function(){u=null}),u=q,q=null)};e.$watch(h,function(h){var m=function(){!A(l)||l&&!e.$eval(l)||c()},p=++s;h?(a(h,!0).then(function(a){if(p===s){var c=e.$new();r.template=a;a=t(c,function(a){z(); +d.enter(a,null,f).then(m)});v=c;q=a;v.$emit("$includeContentLoaded",h);e.$eval(g)}},function(){p===s&&(z(),e.$emit("$includeContentError",h))}),e.$emit("$includeContentRequested",h)):(z(),r.template=null)})}}}}],Pe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Mc(f.template,X).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ze=Na({priority:450, +compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Le=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",h="false"!==d.ngTrim,g=h?T(f):f;e.$parsers.push(function(a){if(!v(a)){var c=[];a&&m(a.split(g),function(a){a&&c.push(h?T(a):a)});return c}});e.$formatters.push(function(a){return J(a)?a.join(f):w});e.$isEmpty=function(a){return!a||!a.length}}}},mb="ng-valid",Kd="ng-invalid",Ya="ng-pristine",Jb="ng-dirty",Md= +"ng-pending",lb=I("ngModel"),xg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,h,g,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=w;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending= +w;this.$name=n(d.name||"",!1)(a);this.$$parentForm=Ib;var p=f(d.ngModel),r=p.assign,t=p,s=r,K=null,u,q=this;this.$$setOptions=function(a){if((q.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");t=function(a){var d=p(a);x(d)&&(d=c(a));return d};s=function(a,c){x(p(a))?g(a,{$$$p:q.$modelValue}):r(a,q.$modelValue)}}else if(!p.assign)throw lb("nonassign",d.ngModel,xa(e));};this.$render=y;this.$isEmpty=function(a){return v(a)||""===a||null===a||a!==a};var z=0;Hd({ctrl:this,$element:e, +set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},$animate:h});this.$setPristine=function(){q.$dirty=!1;q.$pristine=!0;h.removeClass(e,Jb);h.addClass(e,Ya)};this.$setDirty=function(){q.$dirty=!0;q.$pristine=!1;h.removeClass(e,Ya);h.addClass(e,Jb);q.$$parentForm.$setDirty()};this.$setUntouched=function(){q.$touched=!1;q.$untouched=!0;h.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){q.$touched=!0;q.$untouched=!1;h.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue= +function(){g.cancel(K);q.$viewValue=q.$$lastCommittedViewValue;q.$render()};this.$validate=function(){if(!V(q.$modelValue)||!isNaN(q.$modelValue)){var a=q.$$rawModelValue,c=q.$valid,d=q.$modelValue,e=q.$options&&q.$options.allowInvalid;q.$$runValidators(a,q.$$lastCommittedViewValue,function(f){e||c===f||(q.$modelValue=f?a:w,q.$modelValue!==d&&q.$$writeModelToScope())})}};this.$$runValidators=function(a,c,d){function e(){var d=!0;m(q.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d? +!0:(m(q.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;m(q.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!x(k.then))throw lb("$asyncValidators",k);g(h,w);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},y):h(!0)}function g(a,c){l===z&&q.$setValidity(a,c)}function h(a){l===z&&d(a)}z++;var l=z;(function(){var a=q.$$parserName||"parse";if(v(u))g(a,null);else return u||(m(q.$validators,function(a,c){g(c,null)}),m(q.$asyncValidators, +function(a,c){g(c,null)})),g(a,u),u;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=q.$viewValue;g.cancel(K);if(q.$$lastCommittedViewValue!==a||""===a&&q.$$hasNativeValidators)q.$$lastCommittedViewValue=a,q.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=q.$$lastCommittedViewValue;if(u=v(c)?w:!0)for(var d=0;df||e.$isEmpty(c)||c.length<=f}}}}},Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=Y(a)||0;e.$validate()}); +e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};Q.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(ce(),ee(da),da.module("ngLocale",[],["$provide",function(a){function c(a){a+="";var c=a.indexOf(".");return-1==c?0:a.length-c-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "), +SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3, +maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",pluralCat:function(a,e){var f=a|0,h=e;w===h&&(h=Math.min(c(a),3));Math.pow(10,h);return 1==f&&0==h?"one":"other"}})}]),B(X).ready(function(){Zd(X,zc)}))})(window,document);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend(''); //# sourceMappingURL=angular.min.js.map diff --git a/awx/ui/client/lib/angular/angular.min.js.gzip b/awx/ui/client/lib/angular/angular.min.js.gzip index 64c240da579b476704f002c98edcb65eab1470a9..ede8ca32658dde9a1f3b56bf8944e090bfb929bc 100644 GIT binary patch literal 46451 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","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","ngFormCompile","formElement","nameAttr","ngFormPreLink","handleFormSubmission","parentFormCtrl","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","ctrls","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","getStringValue","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","updateOptionElement","addOrReuseElement","removeExcessElements","skipEmptyAndUnknownOptions","emptyOption_","emptyOption","unknownOption_","unknownOption","updateOptions","previousValue","selectCtrl","readValue","groupMap","providedEmptyOption","updateOption","optionElement","groupElement","currentOptionElement","ngModelCtrl","nextValue","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","addOption","self.addOption","removeOption","self.removeOption","self.hasOption","ngModelCtrl.$render","lastView","lastViewRef","selectMultipleWatch","chromeHack","selectCtrlName","interpolateWatchAction","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","$$csp","head"] +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","Object","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","baseExtend","dst","objs","deep","ii","isObject","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","hasCustomToString","toString","prototype","isUndefined","isDefined","getPrototypeOf","isNumber","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","ngMinErr","TYPED_ARRAY_REGEXP","test","push","constructor","getTime","match","lastIndex","cloneNode","emptyObject","shallowCopy","charAt","equals","o1","o2","t1","t2","keySet","createMap","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","isNaN","convertTimezoneToLocal","date","reverse","timezoneOffset","getTimezoneOffset","setMinutes","getMinutes","minutes","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$CoreAnimateRunnerProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","listenerFns","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","$inject","$$annotate","Type","instance","returnedValue","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","Array","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","history","state","cachedState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","bindToController","controllerAs","CNTRL_REG","$$bindings","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","destroyBindings","$new","$$destroyBindings","$on","transcludeOnThisElement","createBoundTranscludeFn","transclude","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","directiveNName","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","msie","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","inheritType","dataName","setupControllers","controllerDirectives","controllerKey","$scope","$attrs","$transclude","controllerInstance","hasElementTranscludeDirective","linkNode","thisLinkFn","controllersBoundTransclude","cloneAttachFn","scopeToChild","templateDirective","$$originalDirective","initializeDirectiveBindings","scopeDirective","newScopeDirective","controllerForBindings","identifier","controllerResult","invokeLinkFn","template","templateUrl","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","hasData","expando","k","kk","annotation","newScope","onNewScopeDestroyed","lastValue","parentGet","parentSet","compare","$observe","literal","assign","parentValueWatch","parentValue","$stateful","unwatch","$watchCollection","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","this.useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","$httpMinErrLegacyFn","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","rawDocument","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","mustHaveExpression","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","throwNoconcat","compute","interpolationFn","$$watchDelegate","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","base","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","target","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","Function","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","objectEquality","parsedExpression","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","watchDelegate","regularInterceptedExpression","oneTimeInterceptedExpression","noUnsafeEval","$parseOptions","expensiveChecks","$parseOptionsExpensive","oneTime","cacheKey","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","all","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","Scope","$parent","$$prevSibling","$root","beginPhase","phase","incrementWatchersCount","current","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","getTrustedResourceUrl","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","item","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","groupSep","decimalSep","isNegative","abs","isInfinity","Infinity","isFinite","numStr","formatedText","hasExponent","toFixed","parseFloat","fractionLen","min","minFrac","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","num","digits","neg","dateGetter","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","dateTimezoneOffset","DATE_FORMATS","spacing","limit","processPredicates","sortPredicate","reverseOrder","map","predicate","descending","predicates","compareValues","getComparisonObject","predicateValues","doComparison","v1","v2","ngDirective","FormController","controls","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","$addControl","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","validity","VALIDITY_STATE_PROPERTY","badInput","typeMismatch","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeData","jqLiteHasData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","AnimateRunner","end","resume","pause","complete","pass","fail","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","runner","enter","move","leave","addclass","animate","tempClasses","RAFPromise","getPromise","f1","f2","closed","cleanupStyles","start","domNode","offsetWidth","APPLICATION_JSON","$httpMinErr","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","constants","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","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","addEnsureSafeMemberName","addEnsureSafeFunction","member","addEnsureSafeAssignContext","filterName","defaultValue","stringEscapeRegex","stringEscapeFn","c","charCodeAt","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","updateOptionElement","addOrReuseElement","removeExcessElements","skipEmptyAndUnknownOptions","emptyOption_","emptyOption","unknownOption_","unknownOption","updateOptions","previousValue","selectCtrl","readValue","groupMap","providedEmptyOption","updateOption","optionElement","groupElement","currentOptionElement","ngModelCtrl","nextValue","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","addOption","self.addOption","removeOption","self.removeOption","self.hasOption","ngModelCtrl.$render","lastView","lastViewRef","selectMultipleWatch","valueInterpolated","optionValue","selectCtrlName","valueAttributeObserveAction","interpolateWatchAction","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","getDecimals","opt_precision","pow","ONE","OTHER","$$csp","head"] } diff --git a/awx/ui/client/lib/angular/bower.json b/awx/ui/client/lib/angular/bower.json index 25dbde948b..12b4e8cf9c 100644 --- a/awx/ui/client/lib/angular/bower.json +++ b/awx/ui/client/lib/angular/bower.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.4.3", + "version": "1.4.7", "main": "./angular.js", "ignore": [], "dependencies": { diff --git a/awx/ui/client/lib/angular/package.json b/awx/ui/client/lib/angular/package.json index 28ac057ca6..c39a534caa 100644 --- a/awx/ui/client/lib/angular/package.json +++ b/awx/ui/client/lib/angular/package.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.4.3", + "version": "1.4.7", "description": "HTML enhanced for web apps", "main": "index.js", "scripts": {