Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

v1.2.10

  • Loading branch information...
commit ea6eb38a087f3f97e6577770c1a30d83d1ffd57f 1 parent 4662582
@NgDashboard NgDashboard authored
Showing with 82,309 additions and 0 deletions.
  1. BIN  1.2.10/angular-1.2.10.zip
  2. +1,486 −0 1.2.10/angular-animate.js
  3. +25 −0 1.2.10/angular-animate.min.js
  4. +8 −0 1.2.10/angular-animate.min.js.map
  5. +202 −0 1.2.10/angular-cookies.js
  6. +8 −0 1.2.10/angular-cookies.min.js
  7. +8 −0 1.2.10/angular-cookies.min.js.map
  8. +13 −0 1.2.10/angular-csp.css
  9. +410 −0 1.2.10/angular-loader.js
  10. +9 −0 1.2.10/angular-loader.min.js
  11. +8 −0 1.2.10/angular-loader.min.js.map
  12. +2,165 −0 1.2.10/angular-mocks.js
  13. +594 −0 1.2.10/angular-resource.js
  14. +13 −0 1.2.10/angular-resource.min.js
  15. +8 −0 1.2.10/angular-resource.min.js.map
  16. +920 −0 1.2.10/angular-route.js
  17. +14 −0 1.2.10/angular-route.min.js
  18. +8 −0 1.2.10/angular-route.min.js.map
  19. +622 −0 1.2.10/angular-sanitize.js
  20. +14 −0 1.2.10/angular-sanitize.min.js
  21. +8 −0 1.2.10/angular-sanitize.min.js.map
  22. +32,600 −0 1.2.10/angular-scenario.js
  23. +563 −0 1.2.10/angular-touch.js
  24. +13 −0 1.2.10/angular-touch.min.js
  25. +8 −0 1.2.10/angular-touch.min.js.map
  26. +20,594 −0 1.2.10/angular.js
  27. +202 −0 1.2.10/angular.min.js
  28. BIN  1.2.10/angular.min.js.gzip
  29. +8 −0 1.2.10/angular.min.js.map
  30. +19 −0 1.2.10/docs/.htaccess
  31. +381 −0 1.2.10/docs/appcache-offline.manifest
  32. +20 −0 1.2.10/docs/appcache.manifest
  33. +307 −0 1.2.10/docs/components/angular-bootstrap-prettify.js
  34. +392 −0 1.2.10/docs/components/angular-bootstrap.js
  35. +13 −0 1.2.10/docs/components/bootstrap/.bower.json
  36. +686 −0 1.2.10/docs/components/bootstrap/css/bootstrap-responsive.css
  37. +12 −0 1.2.10/docs/components/bootstrap/css/bootstrap-responsive.min.css
  38. +3,990 −0 1.2.10/docs/components/bootstrap/css/bootstrap.css
  39. +689 −0 1.2.10/docs/components/bootstrap/css/bootstrap.min.css
  40. BIN  1.2.10/docs/components/bootstrap/img/glyphicons-halflings-white.png
  41. BIN  1.2.10/docs/components/bootstrap/img/glyphicons-halflings.png
  42. +1,726 −0 1.2.10/docs/components/bootstrap/js/bootstrap.js
  43. +6 −0 1.2.10/docs/components/bootstrap/js/bootstrap.min.js
  44. +24 −0 1.2.10/docs/components/font-awesome/css/font-awesome-ie7.min.css
  45. +24 −0 1.2.10/docs/components/font-awesome/css/font-awesome.css
  46. +24 −0 1.2.10/docs/components/font-awesome/css/font-awesome.min.css
  47. BIN  1.2.10/docs/components/font-awesome/font/FontAwesome.otf
  48. BIN  1.2.10/docs/components/font-awesome/font/fontawesome-webfont.eot
  49. +339 −0 1.2.10/docs/components/font-awesome/font/fontawesome-webfont.svg
  50. BIN  1.2.10/docs/components/font-awesome/font/fontawesome-webfont.ttf
  51. BIN  1.2.10/docs/components/font-awesome/font/fontawesome-webfont.woff
  52. +1,575 −0 1.2.10/docs/components/google-code-prettify.js
  53. +9,789 −0 1.2.10/docs/components/jquery.js
  54. +6 −0 1.2.10/docs/components/jquery.min.js
  55. +1,756 −0 1.2.10/docs/components/lunr.js
Sorry, we could not display the entire diff because too many files (652) changed.
View
BIN  1.2.10/angular-1.2.10.zip
Binary file not shown
View
1,486 1.2.10/angular-animate.js
@@ -0,0 +1,1486 @@
+/**
+ * @license AngularJS v1.2.10
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* jshint maxlen: false */
+
+/**
+ * @ngdoc overview
+ * @name ngAnimate
+ * @description
+ *
+ * # ngAnimate
+ *
+ * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.
+ *
+ * {@installModule animate}
+ *
+ * <div doc-module-components="ngAnimate"></div>
+ *
+ * # Usage
+ *
+ * To see animations in action, all that is required is to define the appropriate CSS classes
+ * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are:
+ * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation
+ * by using the `$animate` service.
+ *
+ * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives:
+ *
+ * | Directive | Supported Animations |
+ * |---------------------------------------------------------- |----------------------------------------------------|
+ * | {@link ng.directive:ngRepeat#usage_animations ngRepeat} | enter, leave and move |
+ * | {@link ngRoute.directive:ngView#usage_animations ngView} | enter and leave |
+ * | {@link ng.directive:ngInclude#usage_animations ngInclude} | enter and leave |
+ * | {@link ng.directive:ngSwitch#usage_animations ngSwitch} | enter and leave |
+ * | {@link ng.directive:ngIf#usage_animations ngIf} | enter and leave |
+ * | {@link ng.directive:ngClass#usage_animations ngClass} | add and remove |
+ * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide} | add and remove (the ng-hide class value) |
+ *
+ * You can find out more information about animations upon visiting each directive page.
+ *
+ * Below is an example of how to apply animations to a directive that supports animation hooks:
+ *
+ * <pre>
+ * <style type="text/css">
+ * .slide.ng-enter, .slide.ng-leave {
+ * -webkit-transition:0.5s linear all;
+ * transition:0.5s linear all;
+ * }
+ *
+ * .slide.ng-enter { } /&#42; starting animations for enter &#42;/
+ * .slide.ng-enter-active { } /&#42; terminal animations for enter &#42;/
+ * .slide.ng-leave { } /&#42; starting animations for leave &#42;/
+ * .slide.ng-leave-active { } /&#42; terminal animations for leave &#42;/
+ * </style>
+ *
+ * <!--
+ * the animate service will automatically add .ng-enter and .ng-leave to the element
+ * to trigger the CSS transition/animations
+ * -->
+ * <ANY class="slide" ng-include="..."></ANY>
+ * </pre>
+ *
+ * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's
+ * animation has completed.
+ *
+ * <h2>CSS-defined Animations</h2>
+ * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes
+ * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported
+ * and can be used to play along with this naming structure.
+ *
+ * The following code below demonstrates how to perform animations using **CSS transitions** with Angular:
+ *
+ * <pre>
+ * <style type="text/css">
+ * /&#42;
+ * The animate class is apart of the element and the ng-enter class
+ * is attached to the element once the enter animation event is triggered
+ * &#42;/
+ * .reveal-animation.ng-enter {
+ * -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/
+ * transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/
+ *
+ * /&#42; The animation preparation code &#42;/
+ * opacity: 0;
+ * }
+ *
+ * /&#42;
+ * Keep in mind that you want to combine both CSS
+ * classes together to avoid any CSS-specificity
+ * conflicts
+ * &#42;/
+ * .reveal-animation.ng-enter.ng-enter-active {
+ * /&#42; The animation code itself &#42;/
+ * opacity: 1;
+ * }
+ * </style>
+ *
+ * <div class="view-container">
+ * <div ng-view class="reveal-animation"></div>
+ * </div>
+ * </pre>
+ *
+ * The following code below demonstrates how to perform animations using **CSS animations** with Angular:
+ *
+ * <pre>
+ * <style type="text/css">
+ * .reveal-animation.ng-enter {
+ * -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/
+ * animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/
+ * }
+ * &#64-webkit-keyframes enter_sequence {
+ * from { opacity:0; }
+ * to { opacity:1; }
+ * }
+ * &#64keyframes enter_sequence {
+ * from { opacity:0; }
+ * to { opacity:1; }
+ * }
+ * </style>
+ *
+ * <div class="view-container">
+ * <div ng-view class="reveal-animation"></div>
+ * </div>
+ * </pre>
+ *
+ * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing.
+ *
+ * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add
+ * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically
+ * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be
+ * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end
+ * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element
+ * has no CSS transition/animation classes applied to it.
+ *
+ * <h3>CSS Staggering Animations</h3>
+ * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a
+ * curtain-like effect. The ngAnimate module, as of 1.2.0, supports staggering animations and the stagger effect can be
+ * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for
+ * the animation. The style property expected within the stagger class can either be a **transition-delay** or an
+ * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).
+ *
+ * <pre>
+ * .my-animation.ng-enter {
+ * /&#42; standard transition code &#42;/
+ * -webkit-transition: 1s linear all;
+ * transition: 1s linear all;
+ * opacity:0;
+ * }
+ * .my-animation.ng-enter-stagger {
+ * /&#42; this will have a 100ms delay between each successive leave animation &#42;/
+ * -webkit-transition-delay: 0.1s;
+ * transition-delay: 0.1s;
+ *
+ * /&#42; in case the stagger doesn't work then these two values
+ * must be set to 0 to avoid an accidental CSS inheritance &#42;/
+ * -webkit-transition-duration: 0s;
+ * transition-duration: 0s;
+ * }
+ * .my-animation.ng-enter.ng-enter-active {
+ * /&#42; standard transition styles &#42;/
+ * opacity:1;
+ * }
+ * </pre>
+ *
+ * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations
+ * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this
+ * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation
+ * will also be reset if more than 10ms has passed after the last animation has been fired.
+ *
+ * The following code will issue the **ng-leave-stagger** event on the element provided:
+ *
+ * <pre>
+ * var kids = parent.children();
+ *
+ * $animate.leave(kids[0]); //stagger index=0
+ * $animate.leave(kids[1]); //stagger index=1
+ * $animate.leave(kids[2]); //stagger index=2
+ * $animate.leave(kids[3]); //stagger index=3
+ * $animate.leave(kids[4]); //stagger index=4
+ *
+ * $timeout(function() {
+ * //stagger has reset itself
+ * $animate.leave(kids[5]); //stagger index=0
+ * $animate.leave(kids[6]); //stagger index=1
+ * }, 100, false);
+ * </pre>
+ *
+ * Stagger animations are currently only supported within CSS-defined animations.
+ *
+ * <h2>JavaScript-defined Animations</h2>
+ * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not
+ * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module.
+ *
+ * <pre>
+ * //!annotate="YourApp" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.
+ * var ngModule = angular.module('YourApp', ['ngAnimate']);
+ * ngModule.animation('.my-crazy-animation', function() {
+ * return {
+ * enter: function(element, done) {
+ * //run the animation here and call done when the animation is complete
+ * return function(cancelled) {
+ * //this (optional) function will be called when the animation
+ * //completes or when the animation is cancelled (the cancelled
+ * //flag will be set to true if cancelled).
+ * };
+ * },
+ * leave: function(element, done) { },
+ * move: function(element, done) { },
+ *
+ * //animation that can be triggered before the class is added
+ * beforeAddClass: function(element, className, done) { },
+ *
+ * //animation that can be triggered after the class is added
+ * addClass: function(element, className, done) { },
+ *
+ * //animation that can be triggered before the class is removed
+ * beforeRemoveClass: function(element, className, done) { },
+ *
+ * //animation that can be triggered after the class is removed
+ * removeClass: function(element, className, done) { }
+ * };
+ * });
+ * </pre>
+ *
+ * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run
+ * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits
+ * the element's CSS class attribute value and then run the matching animation event function (if found).
+ * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will
+ * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported).
+ *
+ * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned.
+ * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run,
+ * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation
+ * or transition code that is defined via a stylesheet).
+ *
+ */
+
+angular.module('ngAnimate', ['ng'])
+
+ /**
+ * @ngdoc object
+ * @name ngAnimate.$animateProvider
+ * @description
+ *
+ * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module.
+ * When an animation is triggered, the $animate service will query the $animate service to find any animations that match
+ * the provided name value.
+ *
+ * Requires the {@link ngAnimate `ngAnimate`} module to be installed.
+ *
+ * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.
+ *
+ */
+ .factory('$$animateReflow', ['$window', '$timeout', function($window, $timeout) {
+ var requestAnimationFrame = $window.requestAnimationFrame ||
+ $window.webkitRequestAnimationFrame ||
+ function(fn) {
+ return $timeout(fn, 10, false);
+ };
+
+ var cancelAnimationFrame = $window.cancelAnimationFrame ||
+ $window.webkitCancelAnimationFrame ||
+ function(timer) {
+ return $timeout.cancel(timer);
+ };
+ return function(fn) {
+ var id = requestAnimationFrame(fn);
+ return function() {
+ cancelAnimationFrame(id);
+ };
+ };
+ }])
+
+ .config(['$provide', '$animateProvider', function($provide, $animateProvider) {
+ var noop = angular.noop;
+ var forEach = angular.forEach;
+ var selectors = $animateProvider.$$selectors;
+
+ var ELEMENT_NODE = 1;
+ var NG_ANIMATE_STATE = '$$ngAnimateState';
+ var NG_ANIMATE_CLASS_NAME = 'ng-animate';
+ var rootAnimateState = {running: true};
+
+ function extractElementNode(element) {
+ for(var i = 0; i < element.length; i++) {
+ var elm = element[i];
+ if(elm.nodeType == ELEMENT_NODE) {
+ return elm;
+ }
+ }
+ }
+
+ function isMatchingElement(elm1, elm2) {
+ return extractElementNode(elm1) == extractElementNode(elm2);
+ }
+
+ $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout', '$rootScope', '$document',
+ function($delegate, $injector, $sniffer, $rootElement, $timeout, $rootScope, $document) {
+
+ $rootElement.data(NG_ANIMATE_STATE, rootAnimateState);
+
+ // disable animations during bootstrap, but once we bootstrapped, wait again
+ // for another digest until enabling animations. The reason why we digest twice
+ // is because all structural animations (enter, leave and move) all perform a
+ // post digest operation before animating. If we only wait for a single digest
+ // to pass then the structural animation would render its animation on page load.
+ // (which is what we're trying to avoid when the application first boots up.)
+ $rootScope.$$postDigest(function() {
+ $rootScope.$$postDigest(function() {
+ rootAnimateState.running = false;
+ });
+ });
+
+ var classNameFilter = $animateProvider.classNameFilter();
+ var isAnimatableClassName = !classNameFilter
+ ? function() { return true; }
+ : function(className) {
+ return classNameFilter.test(className);
+ };
+
+ function async(fn) {
+ return $timeout(fn, 0, false);
+ }
+
+ function lookup(name) {
+ if (name) {
+ var matches = [],
+ flagMap = {},
+ classes = name.substr(1).split('.');
+
+ //the empty string value is the default animation
+ //operation which performs CSS transition and keyframe
+ //animations sniffing. This is always included for each
+ //element animation procedure if the browser supports
+ //transitions and/or keyframe animations
+ if ($sniffer.transitions || $sniffer.animations) {
+ classes.push('');
+ }
+
+ for(var i=0; i < classes.length; i++) {
+ var klass = classes[i],
+ selectorFactoryName = selectors[klass];
+ if(selectorFactoryName && !flagMap[klass]) {
+ matches.push($injector.get(selectorFactoryName));
+ flagMap[klass] = true;
+ }
+ }
+ return matches;
+ }
+ }
+
+ /**
+ * @ngdoc object
+ * @name ngAnimate.$animate
+ * @function
+ *
+ * @description
+ * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations.
+ * When any of these operations are run, the $animate service
+ * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object)
+ * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.
+ *
+ * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives
+ * will work out of the box without any extra configuration.
+ *
+ * Requires the {@link ngAnimate `ngAnimate`} module to be installed.
+ *
+ * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.
+ *
+ */
+ return {
+ /**
+ * @ngdoc function
+ * @name ngAnimate.$animate#enter
+ * @methodOf ngAnimate.$animate
+ * @function
+ *
+ * @description
+ * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once
+ * the animation is started, the following CSS classes will be present on the element for the duration of the animation:
+ *
+ * Below is a breakdown of each step that occurs during enter animation:
+ *
+ * | Animation Step | What the element class attribute looks like |
+ * |----------------------------------------------------------------------------------------------|---------------------------------------------|
+ * | 1. $animate.enter(...) is called | class="my-animation" |
+ * | 2. element is inserted into the parentElement element or beside the afterElement element | class="my-animation" |
+ * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
+ * | 4. the .ng-enter class is added to the element | class="my-animation ng-animate ng-enter" |
+ * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-enter" |
+ * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-enter" |
+ * | 7. the .ng-enter-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" |
+ * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" |
+ * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
+ * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" |
+ *
+ * @param {jQuery/jqLite element} element the element that will be the focus of the enter animation
+ * @param {jQuery/jqLite element} parentElement the parent element of the element that will be the focus of the enter animation
+ * @param {jQuery/jqLite element} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
+ */
+ enter : function(element, parentElement, afterElement, doneCallback) {
+ this.enabled(false, element);
+ $delegate.enter(element, parentElement, afterElement);
+ $rootScope.$$postDigest(function() {
+ performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback);
+ });
+ },
+
+ /**
+ * @ngdoc function
+ * @name ngAnimate.$animate#leave
+ * @methodOf ngAnimate.$animate
+ * @function
+ *
+ * @description
+ * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once
+ * the animation is started, the following CSS classes will be added for the duration of the animation:
+ *
+ * Below is a breakdown of each step that occurs during leave animation:
+ *
+ * | Animation Step | What the element class attribute looks like |
+ * |----------------------------------------------------------------------------------------------|---------------------------------------------|
+ * | 1. $animate.leave(...) is called | class="my-animation" |
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
+ * | 3. the .ng-leave class is added to the element | class="my-animation ng-animate ng-leave" |
+ * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-leave" |
+ * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-leave" |
+ * | 6. the .ng-leave-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" |
+ * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" |
+ * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
+ * | 9. The element is removed from the DOM | ... |
+ * | 10. The doneCallback() callback is fired (if provided) | ... |
+ *
+ * @param {jQuery/jqLite element} element the element that will be the focus of the leave animation
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
+ */
+ leave : function(element, doneCallback) {
+ cancelChildAnimations(element);
+ this.enabled(false, element);
+ $rootScope.$$postDigest(function() {
+ performAnimation('leave', 'ng-leave', element, null, null, function() {
+ $delegate.leave(element);
+ }, doneCallback);
+ });
+ },
+
+ /**
+ * @ngdoc function
+ * @name ngAnimate.$animate#move
+ * @methodOf ngAnimate.$animate
+ * @function
+ *
+ * @description
+ * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or
+ * add the element directly after the afterElement element if present. Then the move animation will be run. Once
+ * the animation is started, the following CSS classes will be added for the duration of the animation:
+ *
+ * Below is a breakdown of each step that occurs during move animation:
+ *
+ * | Animation Step | What the element class attribute looks like |
+ * |----------------------------------------------------------------------------------------------|---------------------------------------------|
+ * | 1. $animate.move(...) is called | class="my-animation" |
+ * | 2. element is moved into the parentElement element or beside the afterElement element | class="my-animation" |
+ * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
+ * | 4. the .ng-move class is added to the element | class="my-animation ng-animate ng-move" |
+ * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-move" |
+ * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-move" |
+ * | 7. the .ng-move-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" |
+ * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" |
+ * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
+ * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" |
+ *
+ * @param {jQuery/jqLite element} element the element that will be the focus of the move animation
+ * @param {jQuery/jqLite element} parentElement the parentElement element of the element that will be the focus of the move animation
+ * @param {jQuery/jqLite element} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
+ */
+ move : function(element, parentElement, afterElement, doneCallback) {
+ cancelChildAnimations(element);
+ this.enabled(false, element);
+ $delegate.move(element, parentElement, afterElement);
+ $rootScope.$$postDigest(function() {
+ performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback);
+ });
+ },
+
+ /**
+ * @ngdoc function
+ * @name ngAnimate.$animate#addClass
+ * @methodOf ngAnimate.$animate
+ *
+ * @description
+ * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class.
+ * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide
+ * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions
+ * or keyframes are defined on the -add or base CSS class).
+ *
+ * Below is a breakdown of each step that occurs during addClass animation:
+ *
+ * | Animation Step | What the element class attribute looks like |
+ * |------------------------------------------------------------------------------------------------|---------------------------------------------|
+ * | 1. $animate.addClass(element, 'super') is called | class="my-animation" |
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
+ * | 3. the .super-add class are added to the element | class="my-animation ng-animate super-add" |
+ * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate super-add" |
+ * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate super-add" |
+ * | 6. the .super, .super-add-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super super-add super-add-active" |
+ * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation super-add super-add-active" |
+ * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation super" |
+ * | 9. The super class is kept on the element | class="my-animation super" |
+ * | 10. The doneCallback() callback is fired (if provided) | class="my-animation super" |
+ *
+ * @param {jQuery/jqLite element} element the element that will be animated
+ * @param {string} className the CSS class that will be added to the element and then animated
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
+ */
+ addClass : function(element, className, doneCallback) {
+ performAnimation('addClass', className, element, null, null, function() {
+ $delegate.addClass(element, className);
+ }, doneCallback);
+ },
+
+ /**
+ * @ngdoc function
+ * @name ngAnimate.$animate#removeClass
+ * @methodOf ngAnimate.$animate
+ *
+ * @description
+ * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value
+ * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in
+ * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if
+ * no CSS transitions or keyframes are defined on the -remove or base CSS classes).
+ *
+ * Below is a breakdown of each step that occurs during removeClass animation:
+ *
+ * | Animation Step | What the element class attribute looks like |
+ * |-----------------------------------------------------------------------------------------------|---------------------------------------------|
+ * | 1. $animate.removeClass(element, 'super') is called | class="my-animation super" |
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation super ng-animate" |
+ * | 3. the .super-remove class are added to the element | class="my-animation super ng-animate super-remove"|
+ * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation super ng-animate super-remove" |
+ * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation super ng-animate super-remove" |
+ * | 6. the .super-remove-active and .ng-animate-active classes are added and .super is removed (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" |
+ * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" |
+ * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
+ * | 9. The doneCallback() callback is fired (if provided) | class="my-animation" |
+ *
+ *
+ * @param {jQuery/jqLite element} element the element that will be animated
+ * @param {string} className the CSS class that will be animated and then removed from the element
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
+ */
+ removeClass : function(element, className, doneCallback) {
+ performAnimation('removeClass', className, element, null, null, function() {
+ $delegate.removeClass(element, className);
+ }, doneCallback);
+ },
+
+ /**
+ * @ngdoc function
+ * @name ngAnimate.$animate#enabled
+ * @methodOf ngAnimate.$animate
+ * @function
+ *
+ * @param {boolean=} value If provided then set the animation on or off.
+ * @param {jQuery/jqLite element=} element If provided then the element will be used to represent the enable/disable operation
+ * @return {boolean} Current animation state.
+ *
+ * @description
+ * Globally enables/disables animations.
+ *
+ */
+ enabled : function(value, element) {
+ switch(arguments.length) {
+ case 2:
+ if(value) {
+ cleanup(element);
+ } else {
+ var data = element.data(NG_ANIMATE_STATE) || {};
+ data.disabled = true;
+ element.data(NG_ANIMATE_STATE, data);
+ }
+ break;
+
+ case 1:
+ rootAnimateState.disabled = !value;
+ break;
+
+ default:
+ value = !rootAnimateState.disabled;
+ break;
+ }
+ return !!value;
+ }
+ };
+
+ /*
+ all animations call this shared animation triggering function internally.
+ The animationEvent variable refers to the JavaScript animation event that will be triggered
+ and the className value is the name of the animation that will be applied within the
+ CSS code. Element, parentElement and afterElement are provided DOM elements for the animation
+ and the onComplete callback will be fired once the animation is fully complete.
+ */
+ function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) {
+ var currentClassName, classes, node = extractElementNode(element);
+ if(node) {
+ currentClassName = node.className;
+ classes = currentClassName + ' ' + className;
+ }
+
+ //transcluded directives may sometimes fire an animation using only comment nodes
+ //best to catch this early on to prevent any animation operations from occurring
+ if(!node || !isAnimatableClassName(classes)) {
+ fireDOMOperation();
+ fireBeforeCallbackAsync();
+ fireAfterCallbackAsync();
+ closeAnimation();
+ return;
+ }
+
+ var animationLookup = (' ' + classes).replace(/\s+/g,'.');
+ if (!parentElement) {
+ parentElement = afterElement ? afterElement.parent() : element.parent();
+ }
+
+ var matches = lookup(animationLookup);
+ var isClassBased = animationEvent == 'addClass' || animationEvent == 'removeClass';
+ var ngAnimateState = element.data(NG_ANIMATE_STATE) || {};
+
+ //skip the animation if animations are disabled, a parent is already being animated,
+ //the element is not currently attached to the document body or then completely close
+ //the animation if any matching animations are not found at all.
+ //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case a NO animation is not found.
+ if (animationsDisabled(element, parentElement) || matches.length === 0) {
+ fireDOMOperation();
+ fireBeforeCallbackAsync();
+ fireAfterCallbackAsync();
+ closeAnimation();
+ return;
+ }
+
+ var animations = [];
+
+ //only add animations if the currently running animation is not structural
+ //or if there is no animation running at all
+ var allowAnimations = isClassBased ?
+ !ngAnimateState.disabled && (!ngAnimateState.running || !ngAnimateState.structural) :
+ true;
+
+ if(allowAnimations) {
+ forEach(matches, function(animation) {
+ //add the animation to the queue to if it is allowed to be cancelled
+ if(!animation.allowCancel || animation.allowCancel(element, animationEvent, className)) {
+ var beforeFn, afterFn = animation[animationEvent];
+
+ //Special case for a leave animation since there is no point in performing an
+ //animation on a element node that has already been removed from the DOM
+ if(animationEvent == 'leave') {
+ beforeFn = afterFn;
+ afterFn = null; //this must be falsy so that the animation is skipped for leave
+ } else {
+ beforeFn = animation['before' + animationEvent.charAt(0).toUpperCase() + animationEvent.substr(1)];
+ }
+ animations.push({
+ before : beforeFn,
+ after : afterFn
+ });
+ }
+ });
+ }
+
+ //this would mean that an animation was not allowed so let the existing
+ //animation do it's thing and close this one early
+ if(animations.length === 0) {
+ fireDOMOperation();
+ fireBeforeCallbackAsync();
+ fireAfterCallbackAsync();
+ fireDoneCallbackAsync();
+ return;
+ }
+
+ var ONE_SPACE = ' ';
+ //this value will be searched for class-based CSS className lookup. Therefore,
+ //we prefix and suffix the current className value with spaces to avoid substring
+ //lookups of className tokens
+ var futureClassName = ONE_SPACE + currentClassName + ONE_SPACE;
+ if(ngAnimateState.running) {
+ //if an animation is currently running on the element then lets take the steps
+ //to cancel that animation and fire any required callbacks
+ $timeout.cancel(ngAnimateState.closeAnimationTimeout);
+ cleanup(element);
+ cancelAnimations(ngAnimateState.animations);
+
+ //in the event that the CSS is class is quickly added and removed back
+ //then we don't want to wait until after the reflow to add/remove the CSS
+ //class since both class animations may run into a race condition.
+ //The code below will check to see if that is occurring and will
+ //immediately remove the former class before the reflow so that the
+ //animation can snap back to the original animation smoothly
+ var isFullyClassBasedAnimation = isClassBased && !ngAnimateState.structural;
+ var isRevertingClassAnimation = isFullyClassBasedAnimation &&
+ ngAnimateState.className == className &&
+ animationEvent != ngAnimateState.event;
+
+ //if the class is removed during the reflow then it will revert the styles temporarily
+ //back to the base class CSS styling causing a jump-like effect to occur. This check
+ //here ensures that the domOperation is only performed after the reflow has commenced
+ if(ngAnimateState.beforeComplete || isRevertingClassAnimation) {
+ (ngAnimateState.done || noop)(true);
+ } else if(isFullyClassBasedAnimation) {
+ //class-based animations will compare element className values after cancelling the
+ //previous animation to see if the element properties already contain the final CSS
+ //class and if so then the animation will be skipped. Since the domOperation will
+ //be performed only after the reflow is complete then our element's className value
+ //will be invalid. Therefore the same string manipulation that would occur within the
+ //DOM operation will be performed below so that the class comparison is valid...
+ futureClassName = ngAnimateState.event == 'removeClass' ?
+ futureClassName.replace(ONE_SPACE + ngAnimateState.className + ONE_SPACE, ONE_SPACE) :
+ futureClassName + ngAnimateState.className + ONE_SPACE;
+ }
+ }
+
+ //There is no point in perform a class-based animation if the element already contains
+ //(on addClass) or doesn't contain (on removeClass) the className being animated.
+ //The reason why this is being called after the previous animations are cancelled
+ //is so that the CSS classes present on the element can be properly examined.
+ var classNameToken = ONE_SPACE + className + ONE_SPACE;
+ if((animationEvent == 'addClass' && futureClassName.indexOf(classNameToken) >= 0) ||
+ (animationEvent == 'removeClass' && futureClassName.indexOf(classNameToken) == -1)) {
+ fireDOMOperation();
+ fireBeforeCallbackAsync();
+ fireAfterCallbackAsync();
+ fireDoneCallbackAsync();
+ return;
+ }
+
+ //the ng-animate class does nothing, but it's here to allow for
+ //parent animations to find and cancel child animations when needed
+ element.addClass(NG_ANIMATE_CLASS_NAME);
+
+ element.data(NG_ANIMATE_STATE, {
+ running:true,
+ event:animationEvent,
+ className:className,
+ structural:!isClassBased,
+ animations:animations,
+ done:onBeforeAnimationsComplete
+ });
+
+ //first we run the before animations and when all of those are complete
+ //then we perform the DOM operation and run the next set of animations
+ invokeRegisteredAnimationFns(animations, 'before', onBeforeAnimationsComplete);
+
+ function onBeforeAnimationsComplete(cancelled) {
+ fireDOMOperation();
+ if(cancelled === true) {
+ closeAnimation();
+ return;
+ }
+
+ //set the done function to the final done function
+ //so that the DOM event won't be executed twice by accident
+ //if the after animation is cancelled as well
+ var data = element.data(NG_ANIMATE_STATE);
+ if(data) {
+ data.done = closeAnimation;
+ element.data(NG_ANIMATE_STATE, data);
+ }
+ invokeRegisteredAnimationFns(animations, 'after', closeAnimation);
+ }
+
+ function invokeRegisteredAnimationFns(animations, phase, allAnimationFnsComplete) {
+ phase == 'after' ?
+ fireAfterCallbackAsync() :
+ fireBeforeCallbackAsync();
+
+ var endFnName = phase + 'End';
+ forEach(animations, function(animation, index) {
+ var animationPhaseCompleted = function() {
+ progress(index, phase);
+ };
+
+ //there are no before functions for enter + move since the DOM
+ //operations happen before the performAnimation method fires
+ if(phase == 'before' && (animationEvent == 'enter' || animationEvent == 'move')) {
+ animationPhaseCompleted();
+ return;
+ }
+
+ if(animation[phase]) {
+ animation[endFnName] = isClassBased ?
+ animation[phase](element, className, animationPhaseCompleted) :
+ animation[phase](element, animationPhaseCompleted);
+ } else {
+ animationPhaseCompleted();
+ }
+ });
+
+ function progress(index, phase) {
+ var phaseCompletionFlag = phase + 'Complete';
+ var currentAnimation = animations[index];
+ currentAnimation[phaseCompletionFlag] = true;
+ (currentAnimation[endFnName] || noop)();
+
+ for(var i=0;i<animations.length;i++) {
+ if(!animations[i][phaseCompletionFlag]) return;
+ }
+
+ allAnimationFnsComplete();
+ }
+ }
+
+ function fireDOMCallback(animationPhase) {
+ element.triggerHandler('$animate:' + animationPhase, {
+ event : animationEvent,
+ className : className
+ });
+ }
+
+ function fireBeforeCallbackAsync() {
+ async(function() {
+ fireDOMCallback('before');
+ });
+ }
+
+ function fireAfterCallbackAsync() {
+ async(function() {
+ fireDOMCallback('after');
+ });
+ }
+
+ function fireDoneCallbackAsync() {
+ async(function() {
+ fireDOMCallback('close');
+ doneCallback && doneCallback();
+ });
+ }
+
+ //it is less complicated to use a flag than managing and cancelling
+ //timeouts containing multiple callbacks.
+ function fireDOMOperation() {
+ if(!fireDOMOperation.hasBeenRun) {
+ fireDOMOperation.hasBeenRun = true;
+ domOperation();
+ }
+ }
+
+ function closeAnimation() {
+ if(!closeAnimation.hasBeenRun) {
+ closeAnimation.hasBeenRun = true;
+ var data = element.data(NG_ANIMATE_STATE);
+ if(data) {
+ /* only structural animations wait for reflow before removing an
+ animation, but class-based animations don't. An example of this
+ failing would be when a parent HTML tag has a ng-class attribute
+ causing ALL directives below to skip animations during the digest */
+ if(isClassBased) {
+ cleanup(element);
+ } else {
+ data.closeAnimationTimeout = async(function() {
+ cleanup(element);
+ });
+ element.data(NG_ANIMATE_STATE, data);
+ }
+ }
+ fireDoneCallbackAsync();
+ }
+ }
+ }
+
+ function cancelChildAnimations(element) {
+ var node = extractElementNode(element);
+ forEach(node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME), function(element) {
+ element = angular.element(element);
+ var data = element.data(NG_ANIMATE_STATE);
+ if(data) {
+ cancelAnimations(data.animations);
+ cleanup(element);
+ }
+ });
+ }
+
+ function cancelAnimations(animations) {
+ var isCancelledFlag = true;
+ forEach(animations, function(animation) {
+ if(!animation.beforeComplete) {
+ (animation.beforeEnd || noop)(isCancelledFlag);
+ }
+ if(!animation.afterComplete) {
+ (animation.afterEnd || noop)(isCancelledFlag);
+ }
+ });
+ }
+
+ function cleanup(element) {
+ if(isMatchingElement(element, $rootElement)) {
+ if(!rootAnimateState.disabled) {
+ rootAnimateState.running = false;
+ rootAnimateState.structural = false;
+ }
+ } else {
+ element.removeClass(NG_ANIMATE_CLASS_NAME);
+ element.removeData(NG_ANIMATE_STATE);
+ }
+ }
+
+ function animationsDisabled(element, parentElement) {
+ if (rootAnimateState.disabled) return true;
+
+ if(isMatchingElement(element, $rootElement)) {
+ return rootAnimateState.disabled || rootAnimateState.running;
+ }
+
+ do {
+ //the element did not reach the root element which means that it
+ //is not apart of the DOM. Therefore there is no reason to do
+ //any animations on it
+ if(parentElement.length === 0) break;
+
+ var isRoot = isMatchingElement(parentElement, $rootElement);
+ var state = isRoot ? rootAnimateState : parentElement.data(NG_ANIMATE_STATE);
+ var result = state && (!!state.disabled || !!state.running);
+ if(isRoot || result) {
+ return result;
+ }
+
+ if(isRoot) return true;
+ }
+ while(parentElement = parentElement.parent());
+
+ return true;
+ }
+ }]);
+
+ $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow',
+ function($window, $sniffer, $timeout, $$animateReflow) {
+ // 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 ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';
+ var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey';
+ var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data';
+ var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
+ var CLOSING_TIME_BUFFER = 1.5;
+ var ONE_SECOND = 1000;
+
+ var animationCounter = 0;
+ var lookupCache = {};
+ var parentCounter = 0;
+ var animationReflowQueue = [];
+ var animationElementQueue = [];
+ var cancelAnimationReflow;
+ var closingAnimationTime = 0;
+ var timeOut = false;
+ function afterReflow(element, callback) {
+ if(cancelAnimationReflow) {
+ cancelAnimationReflow();
+ }
+
+ animationReflowQueue.push(callback);
+
+ var node = extractElementNode(element);
+ element = angular.element(node);
+ animationElementQueue.push(element);
+
+ var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
+
+ var stagger = elementData.stagger;
+ var staggerTime = elementData.itemIndex * (Math.max(stagger.animationDelay, stagger.transitionDelay) || 0);
+
+ var animationTime = (elementData.maxDelay + elementData.maxDuration) * CLOSING_TIME_BUFFER;
+ closingAnimationTime = Math.max(closingAnimationTime, (staggerTime + animationTime) * ONE_SECOND);
+
+ //by placing a counter we can avoid an accidental
+ //race condition which may close an animation when
+ //a follow-up animation is midway in its animation
+ elementData.animationCount = animationCounter;
+
+ cancelAnimationReflow = $$animateReflow(function() {
+ forEach(animationReflowQueue, function(fn) {
+ fn();
+ });
+
+ //copy the list of elements so that successive
+ //animations won't conflict if they're added before
+ //the closing animation timeout has run
+ var elementQueueSnapshot = [];
+ var animationCounterSnapshot = animationCounter;
+ forEach(animationElementQueue, function(elm) {
+ elementQueueSnapshot.push(elm);
+ });
+
+ $timeout(function() {
+ closeAllAnimations(elementQueueSnapshot, animationCounterSnapshot);
+ elementQueueSnapshot = null;
+ }, closingAnimationTime, false);
+
+ animationReflowQueue = [];
+ animationElementQueue = [];
+ cancelAnimationReflow = null;
+ lookupCache = {};
+ closingAnimationTime = 0;
+ animationCounter++;
+ });
+ }
+
+ function closeAllAnimations(elements, count) {
+ forEach(elements, function(element) {
+ var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
+ if(elementData && elementData.animationCount == count) {
+ (elementData.closeAnimationFn || noop)();
+ }
+ });
+ }
+
+ function getElementAnimationDetails(element, cacheKey) {
+ var data = cacheKey ? lookupCache[cacheKey] : null;
+ if(!data) {
+ var transitionDuration = 0;
+ var transitionDelay = 0;
+ var animationDuration = 0;
+ var animationDelay = 0;
+ var transitionDelayStyle;
+ var animationDelayStyle;
+ var transitionDurationStyle;
+ var transitionPropertyStyle;
+
+ //we want all the styles defined before and after
+ forEach(element, function(element) {
+ if (element.nodeType == ELEMENT_NODE) {
+ var elementStyles = $window.getComputedStyle(element) || {};
+
+ transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY];
+
+ transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration);
+
+ transitionPropertyStyle = elementStyles[TRANSITION_PROP + PROPERTY_KEY];
+
+ transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY];
+
+ transitionDelay = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay);
+
+ animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY];
+
+ animationDelay = Math.max(parseMaxTime(animationDelayStyle), animationDelay);
+
+ var aDuration = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]);
+
+ if(aDuration > 0) {
+ aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1;
+ }
+
+ animationDuration = Math.max(aDuration, animationDuration);
+ }
+ });
+ data = {
+ total : 0,
+ transitionPropertyStyle: transitionPropertyStyle,
+ transitionDurationStyle: transitionDurationStyle,
+ transitionDelayStyle: transitionDelayStyle,
+ transitionDelay: transitionDelay,
+ transitionDuration: transitionDuration,
+ animationDelayStyle: animationDelayStyle,
+ animationDelay: animationDelay,
+ animationDuration: animationDuration
+ };
+ if(cacheKey) {
+ lookupCache[cacheKey] = data;
+ }
+ }
+ return data;
+ }
+
+ function parseMaxTime(str) {
+ var maxValue = 0;
+ var values = angular.isString(str) ?
+ str.split(/\s*,\s*/) :
+ [];
+ forEach(values, function(value) {
+ maxValue = Math.max(parseFloat(value) || 0, maxValue);
+ });
+ return maxValue;
+ }
+
+ function getCacheKey(element) {
+ var parentElement = element.parent();
+ var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY);
+ if(!parentID) {
+ parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter);
+ parentID = parentCounter;
+ }
+ return parentID + '-' + extractElementNode(element).className;
+ }
+
+ function animateSetup(element, className, calculationDecorator) {
+ var cacheKey = getCacheKey(element);
+ var eventCacheKey = cacheKey + ' ' + className;
+ var stagger = {};
+ var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0;
+
+ if(itemIndex > 0) {
+ var staggerClassName = className + '-stagger';
+ var staggerCacheKey = cacheKey + ' ' + staggerClassName;
+ var applyClasses = !lookupCache[staggerCacheKey];
+
+ applyClasses && element.addClass(staggerClassName);
+
+ stagger = getElementAnimationDetails(element, staggerCacheKey);
+
+ applyClasses && element.removeClass(staggerClassName);
+ }
+
+ /* the animation itself may need to add/remove special CSS classes
+ * before calculating the anmation styles */
+ calculationDecorator = calculationDecorator ||
+ function(fn) { return fn(); };
+
+ element.addClass(className);
+
+ var timings = calculationDecorator(function() {
+ return getElementAnimationDetails(element, eventCacheKey);
+ });
+
+ /* there is no point in performing a reflow if the animation
+ timeout is empty (this would cause a flicker bug normally
+ in the page. There is also no point in performing an animation
+ that only has a delay and no duration */
+ var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay);
+ var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration);
+ if(maxDuration === 0) {
+ element.removeClass(className);
+ return false;
+ }
+
+ //temporarily disable the transition so that the enter styles
+ //don't animate twice (this is here to avoid a bug in Chrome/FF).
+ var activeClassName = '';
+ timings.transitionDuration > 0 ?
+ blockTransitions(element) :
+ blockKeyframeAnimations(element);
+
+ forEach(className.split(' '), function(klass, i) {
+ activeClassName += (i > 0 ? ' ' : '') + klass + '-active';
+ });
+
+ element.data(NG_ANIMATE_CSS_DATA_KEY, {
+ className : className,
+ activeClassName : activeClassName,
+ maxDuration : maxDuration,
+ maxDelay : maxDelay,
+ classes : className + ' ' + activeClassName,
+ timings : timings,
+ stagger : stagger,
+ itemIndex : itemIndex
+ });
+
+ return true;
+ }
+
+ function blockTransitions(element) {
+ extractElementNode(element).style[TRANSITION_PROP + PROPERTY_KEY] = 'none';
+ }
+
+ function blockKeyframeAnimations(element) {
+ extractElementNode(element).style[ANIMATION_PROP] = 'none 0s';
+ }
+
+ function unblockTransitions(element) {
+ var prop = TRANSITION_PROP + PROPERTY_KEY;
+ var node = extractElementNode(element);
+ if(node.style[prop] && node.style[prop].length > 0) {
+ node.style[prop] = '';
+ }
+ }
+
+ function unblockKeyframeAnimations(element) {
+ var prop = ANIMATION_PROP;
+ var node = extractElementNode(element);
+ if(node.style[prop] && node.style[prop].length > 0) {
+ node.style[prop] = '';
+ }
+ }
+
+ function animateRun(element, className, activeAnimationComplete) {
+ var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
+ var node = extractElementNode(element);
+ if(node.className.indexOf(className) == -1 || !elementData) {
+ activeAnimationComplete();
+ return;
+ }
+
+ var timings = elementData.timings;
+ var stagger = elementData.stagger;
+ var maxDuration = elementData.maxDuration;
+ var activeClassName = elementData.activeClassName;
+ var maxDelayTime = Math.max(timings.transitionDelay, timings.animationDelay) * ONE_SECOND;
+ var startTime = Date.now();
+ var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT;
+ var itemIndex = elementData.itemIndex;
+
+ var style = '', appliedStyles = [];
+ if(timings.transitionDuration > 0) {
+ var propertyStyle = timings.transitionPropertyStyle;
+ if(propertyStyle.indexOf('all') == -1) {
+ style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ';';
+ style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ';';
+ appliedStyles.push(CSS_PREFIX + 'transition-property');
+ appliedStyles.push(CSS_PREFIX + 'transition-duration');
+ }
+ }
+
+ if(itemIndex > 0) {
+ if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) {
+ var delayStyle = timings.transitionDelayStyle;
+ style += CSS_PREFIX + 'transition-delay: ' +
+ prepareStaggerDelay(delayStyle, stagger.transitionDelay, itemIndex) + '; ';
+ appliedStyles.push(CSS_PREFIX + 'transition-delay');
+ }
+
+ if(stagger.animationDelay > 0 && stagger.animationDuration === 0) {
+ style += CSS_PREFIX + 'animation-delay: ' +
+ prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, itemIndex) + '; ';
+ appliedStyles.push(CSS_PREFIX + 'animation-delay');
+ }
+ }
+
+ if(appliedStyles.length > 0) {
+ //the element being animated may sometimes contain comment nodes in
+ //the jqLite object, so we're safe to use a single variable to house
+ //the styles since there is always only one element being animated
+ var oldStyle = node.getAttribute('style') || '';
+ node.setAttribute('style', oldStyle + ' ' + style);
+ }
+
+ element.on(css3AnimationEvents, onAnimationProgress);
+ element.addClass(activeClassName);
+ elementData.closeAnimationFn = function() {
+ onEnd();
+ activeAnimationComplete();
+ };
+ return onEnd;
+
+ // This will automatically be called by $animate so
+ // there is no need to attach this internally to the
+ // timeout done method.
+ function onEnd(cancelled) {
+ element.off(css3AnimationEvents, onAnimationProgress);
+ element.removeClass(activeClassName);
+ animateClose(element, className);
+ var node = extractElementNode(element);
+ for (var i in appliedStyles) {
+ node.style.removeProperty(appliedStyles[i]);
+ }
+ }
+
+ function onAnimationProgress(event) {
+ event.stopPropagation();
+ var ev = event.originalEvent || event;
+ var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();
+
+ /* Firefox (or possibly just Gecko) likes to not round values up
+ * when a ms measurement is used for the animation */
+ var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));
+
+ /* $manualTimeStamp is a mocked timeStamp value which is set
+ * within browserTrigger(). This is only here so that tests can
+ * mock animations properly. Real events fallback to event.timeStamp,
+ * or, if they don't, then a timeStamp is automatically created for them.
+ * We're checking to see if the timeStamp surpasses the expected delay,
+ * but we're using elapsedTime instead of the timeStamp on the 2nd
+ * pre-condition since animations sometimes close off early */
+ if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {
+ activeAnimationComplete();
+ }
+ }
+ }
+
+ function prepareStaggerDelay(delayStyle, staggerDelay, index) {
+ var style = '';
+ forEach(delayStyle.split(','), function(val, i) {
+ style += (i > 0 ? ',' : '') +
+ (index * staggerDelay + parseInt(val, 10)) + 's';
+ });
+ return style;
+ }
+
+ function animateBefore(element, className, calculationDecorator) {
+ if(animateSetup(element, className, calculationDecorator)) {
+ return function(cancelled) {
+ cancelled && animateClose(element, className);
+ };
+ }
+ }
+
+ function animateAfter(element, className, afterAnimationComplete) {
+ if(element.data(NG_ANIMATE_CSS_DATA_KEY)) {
+ return animateRun(element, className, afterAnimationComplete);
+ } else {
+ animateClose(element, className);
+ afterAnimationComplete();
+ }
+ }
+
+ function animate(element, className, animationComplete) {
+ //If the animateSetup function doesn't bother returning a
+ //cancellation function then it means that there is no animation
+ //to perform at all
+ var preReflowCancellation = animateBefore(element, className);
+ if(!preReflowCancellation) {
+ animationComplete();
+ return;
+ }
+
+ //There are two cancellation functions: one is before the first
+ //reflow animation and the second is during the active state
+ //animation. The first function will take care of removing the
+ //data from the element which will not make the 2nd animation
+ //happen in the first place
+ var cancel = preReflowCancellation;
+ afterReflow(element, function() {
+ unblockTransitions(element);
+ unblockKeyframeAnimations(element);
+ //once the reflow is complete then we point cancel to
+ //the new cancellation function which will remove all of the
+ //animation properties from the active animation
+ cancel = animateAfter(element, className, animationComplete);
+ });
+
+ return function(cancelled) {
+ (cancel || noop)(cancelled);
+ };
+ }
+
+ function animateClose(element, className) {
+ element.removeClass(className);
+ element.removeData(NG_ANIMATE_CSS_DATA_KEY);
+ }
+
+ return {
+ allowCancel : function(element, animationEvent, className) {
+ //always cancel the current animation if it is a
+ //structural animation
+ var oldClasses = (element.data(NG_ANIMATE_CSS_DATA_KEY) || {}).classes;
+ if(!oldClasses || ['enter','leave','move'].indexOf(animationEvent) >= 0) {
+ return true;
+ }
+
+ var parentElement = element.parent();
+ var clone = angular.element(extractElementNode(element).cloneNode());
+
+ //make the element super hidden and override any CSS style values
+ clone.attr('style','position:absolute; top:-9999px; left:-9999px');
+ clone.removeAttr('id');
+ clone.empty();
+
+ forEach(oldClasses.split(' '), function(klass) {
+ clone.removeClass(klass);
+ });
+
+ var suffix = animationEvent == 'addClass' ? '-add' : '-remove';
+ clone.addClass(suffixClasses(className, suffix));
+ parentElement.append(clone);
+
+ var timings = getElementAnimationDetails(clone);
+ clone.remove();
+
+ return Math.max(timings.transitionDuration, timings.animationDuration) > 0;
+ },
+
+ enter : function(element, animationCompleted) {
+ return animate(element, 'ng-enter', animationCompleted);
+ },
+
+ leave : function(element, animationCompleted) {
+ return animate(element, 'ng-leave', animationCompleted);
+ },
+
+ move : function(element, animationCompleted) {
+ return animate(element, 'ng-move', animationCompleted);
+ },
+
+ beforeAddClass : function(element, className, animationCompleted) {
+ var cancellationMethod = animateBefore(element, suffixClasses(className, '-add'), function(fn) {
+
+ /* when a CSS class is added to an element then the transition style that
+ * is applied is the transition defined on the element when the CSS class
+ * is added at the time of the animation. This is how CSS3 functions
+ * outside of ngAnimate. */
+ element.addClass(className);
+ var timings = fn();
+ element.removeClass(className);
+ return timings;
+ });
+
+ if(cancellationMethod) {
+ afterReflow(element, function() {
+ unblockTransitions(element);
+ unblockKeyframeAnimations(element);
+ animationCompleted();
+ });
+ return cancellationMethod;
+ }
+ animationCompleted();
+ },
+
+ addClass : function(element, className, animationCompleted) {
+ return animateAfter(element, suffixClasses(className, '-add'), animationCompleted);
+ },
+
+ beforeRemoveClass : function(element, className, animationCompleted) {
+ var cancellationMethod = animateBefore(element, suffixClasses(className, '-remove'), function(fn) {
+ /* when classes are removed from an element then the transition style
+ * that is applied is the transition defined on the element without the
+ * CSS class being there. This is how CSS3 functions outside of ngAnimate.
+ * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */
+ var klass = element.attr('class');
+ element.removeClass(className);
+ var timings = fn();
+ element.attr('class', klass);
+ return timings;
+ });
+
+ if(cancellationMethod) {
+ afterReflow(element, function() {
+ unblockTransitions(element);
+ unblockKeyframeAnimations(element);
+ animationCompleted();
+ });
+ return cancellationMethod;
+ }
+ animationCompleted();
+ },
+
+ removeClass : function(element, className, animationCompleted) {
+ return animateAfter(element, suffixClasses(className, '-remove'), animationCompleted);
+ }
+ };
+
+ function suffixClasses(classes, suffix) {
+ var className = '';
+ classes = angular.isArray(classes) ? classes : classes.split(/\s+/);
+ forEach(classes, function(klass, i) {
+ if(klass && klass.length > 0) {
+ className += (i > 0 ? ' ' : '') + klass + suffix;
+ }
+ });
+ return className;
+ }
+ }]);
+ }]);
+
+
+})(window, window.angular);
View
25 1.2.10/angular-animate.min.js
@@ -0,0 +1,25 @@
+/*
+ AngularJS v1.2.10
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(v,k,t){'use strict';k.module("ngAnimate",["ng"]).factory("$$animateReflow",["$window","$timeout",function(k,B){var d=k.requestAnimationFrame||k.webkitRequestAnimationFrame||function(d){return B(d,10,!1)},q=k.cancelAnimationFrame||k.webkitCancelAnimationFrame||function(d){return B.cancel(d)};return function(p){var k=d(p);return function(){q(k)}}}]).config(["$provide","$animateProvider",function(R,B){function d(d){for(var k=0;k<d.length;k++){var p=d[k];if(p.nodeType==X)return p}}var q=k.noop,
+p=k.forEach,$=B.$$selectors,X=1,l="$$ngAnimateState",K="ng-animate",m={running:!0};R.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement","$timeout","$rootScope","$document",function(C,v,t,H,y,w,N){function I(a){if(a){var g=[],e={};a=a.substr(1).split(".");(t.transitions||t.animations)&&a.push("");for(var c=0;c<a.length;c++){var f=a[c],d=$[f];d&&!e[f]&&(g.push(v.get(d)),e[f]=!0)}return g}}function r(a,g,e,c,f,k,m){function t(a){n();if(!0===a)z();else{if(a=e.data(l))a.done=z,e.data(l,
+a);C(D,"after",z)}}function C(c,d,f){"after"==d?r():E();var k=d+"End";p(c,function(b,aa){var h=function(){a:{var b=d+"Complete",a=c[aa];a[b]=!0;(a[k]||q)();for(a=0;a<c.length;a++)if(!c[a][b])break a;f()}};"before"!=d||"enter"!=a&&"move"!=a?b[d]?b[k]=u?b[d](e,g,h):b[d](e,h):h():h()})}function w(c){e.triggerHandler("$animate:"+c,{event:a,className:g})}function E(){y(function(){w("before")},0,!1)}function r(){y(function(){w("after")},0,!1)}function v(){y(function(){w("close");m&&m()},0,!1)}function n(){n.hasBeenRun||
+(n.hasBeenRun=!0,k())}function z(){if(!z.hasBeenRun){z.hasBeenRun=!0;var a=e.data(l);a&&(u?A(e):(a.closeAnimationTimeout=y(function(){A(e)},0,!1),e.data(l,a)));v()}}var s,x,G=d(e);G&&(s=G.className,x=s+" "+g);if(G&&L(x)){x=(" "+x).replace(/\s+/g,".");c||(c=f?f.parent():e.parent());x=I(x);var u="addClass"==a||"removeClass"==a;f=e.data(l)||{};if(ba(e,c)||0===x.length)n(),E(),r(),z();else{var D=[];u&&(f.disabled||f.running&&f.structural)||p(x,function(c){if(!c.allowCancel||c.allowCancel(e,a,g)){var d=
+c[a];"leave"==a?(c=d,d=null):c=c["before"+a.charAt(0).toUpperCase()+a.substr(1)];D.push({before:c,after:d})}});0===D.length?(n(),E(),r(),v()):(c=" "+s+" ",f.running&&(y.cancel(f.closeAnimationTimeout),A(e),J(f.animations),x=(s=u&&!f.structural)&&f.className==g&&a!=f.event,f.beforeComplete||x?(f.done||q)(!0):s&&(c="removeClass"==f.event?c.replace(" "+f.className+" "," "):c+f.className+" ")),s=" "+g+" ","addClass"==a&&0<=c.indexOf(s)||"removeClass"==a&&-1==c.indexOf(s)?(n(),E(),r(),v()):(e.addClass(K),
+e.data(l,{running:!0,event:a,className:g,structural:!u,animations:D,done:t}),C(D,"before",t)))}}else n(),E(),r(),z()}function Q(a){a=d(a);p(a.querySelectorAll("."+K),function(a){a=k.element(a);var e=a.data(l);e&&(J(e.animations),A(a))})}function J(a){p(a,function(a){a.beforeComplete||(a.beforeEnd||q)(!0);a.afterComplete||(a.afterEnd||q)(!0)})}function A(a){d(a)==d(H)?m.disabled||(m.running=!1,m.structural=!1):(a.removeClass(K),a.removeData(l))}function ba(a,g){if(m.disabled)return!0;if(d(a)==d(H))return m.disabled||
+m.running;do{if(0===g.length)break;var e=d(g)==d(H),c=e?m:g.data(l),c=c&&(!!c.disabled||!!c.running);if(e||c)return c;if(e)break}while(g=g.parent());return!0}H.data(l,m);w.$$postDigest(function(){w.$$postDigest(function(){m.running=!1})});var M=B.classNameFilter(),L=M?function(a){return M.test(a)}:function(){return!0};return{enter:function(a,d,e,c){this.enabled(!1,a);C.enter(a,d,e);w.$$postDigest(function(){r("enter","ng-enter",a,d,e,q,c)})},leave:function(a,d){Q(a);this.enabled(!1,a);w.$$postDigest(function(){r("leave",
+"ng-leave",a,null,null,function(){C.leave(a)},d)})},move:function(a,d,e,c){Q(a);this.enabled(!1,a);C.move(a,d,e);w.$$postDigest(function(){r("move","ng-move",a,d,e,q,c)})},addClass:function(a,d,e){r("addClass",d,a,null,null,function(){C.addClass(a,d)},e)},removeClass:function(a,d,e){r("removeClass",d,a,null,null,function(){C.removeClass(a,d)},e)},enabled:function(a,d){switch(arguments.length){case 2:if(a)A(d);else{var e=d.data(l)||{};e.disabled=!0;d.data(l,e)}break;case 1:m.disabled=!a;break;default:a=
+!m.disabled}return!!a}}}]);B.register("",["$window","$sniffer","$timeout","$$animateReflow",function(m,l,B,H){function y(b,a){O&&O();U.push(a);var h=d(b);b=k.element(h);V.push(b);var h=b.data(n),c=h.stagger,c=h.itemIndex*(Math.max(c.animationDelay,c.transitionDelay)||0);P=Math.max(P,(c+(h.maxDelay+h.maxDuration)*s)*x);h.animationCount=G;O=H(function(){p(U,function(b){b()});var b=[],a=G;p(V,function(a){b.push(a)});B(function(){w(b,a);b=null},P,!1);U=[];V=[];O=null;u={};P=0;G++})}function w(b,a){p(b,
+function(b){(b=b.data(n))&&b.animationCount==a&&(b.closeAnimationFn||q)()})}function N(b,a){var h=a?u[a]:null;if(!h){var d=0,c=0,e=0,k=0,g,n,l,r;p(b,function(b){if(b.nodeType==X){b=m.getComputedStyle(b)||{};l=b[f+Y];d=Math.max(I(l),d);r=b[f+W];g=b[f+E];c=Math.max(I(g),c);n=b[F+E];k=Math.max(I(n),k);var a=I(b[F+Y]);0<a&&(a*=parseInt(b[F+R],10)||1);e=Math.max(a,e)}});h={total:0,transitionPropertyStyle:r,transitionDurationStyle:l,transitionDelayStyle:g,transitionDelay:c,transitionDuration:d,animationDelayStyle:n,
+animationDelay:k,animationDuration:e};a&&(u[a]=h)}return h}function I(b){var a=0;b=k.isString(b)?b.split(/\s*,\s*/):[];p(b,function(b){a=Math.max(parseFloat(b)||0,a)});return a}function r(b){var a=b.parent(),h=a.data(Z);h||(a.data(Z,++D),h=D);return h+"-"+d(b).className}function Q(b,a,h){var c=r(b),e=c+" "+a,k={},g=u[e]?++u[e].total:0;if(0<g){var l=a+"-stagger",k=c+" "+l;(c=!u[k])&&b.addClass(l);k=N(b,k);c&&b.removeClass(l)}h=h||function(b){return b()};b.addClass(a);h=h(function(){return N(b,e)});
+l=Math.max(h.transitionDelay,h.animationDelay);c=Math.max(h.transitionDuration,h.animationDuration);if(0===c)return b.removeClass(a),!1;var m="";0<h.transitionDuration?d(b).style[f+W]="none":d(b).style[F]="none 0s";p(a.split(" "),function(b,a){m+=(0<a?" ":"")+b+"-active"});b.data(n,{className:a,activeClassName:m,maxDuration:c,maxDelay:l,classes:a+" "+m,timings:h,stagger:k,itemIndex:g});return!0}function J(b){var a=f+W;b=d(b);b.style[a]&&0<b.style[a].length&&(b.style[a]="")}function A(b){var a=F;b=
+d(b);b.style[a]&&0<b.style[a].length&&(b.style[a]="")}function K(b,a,h){function e(c){b.off(v,k);b.removeClass(r);c=b;c.removeClass(a);c.removeData(n);c=d(b);for(var h in s)c.style.removeProperty(s[h])}function k(b){b.stopPropagation();var a=b.originalEvent||b;b=a.$manualTimeStamp||a.timeStamp||Date.now();a=parseFloat(a.elapsedTime.toFixed(z));Math.max(b-w,0)>=u&&a>=p&&h()}var f=b.data(n),g=d(b);if(-1!=g.className.indexOf(a)&&f){var l=f.timings,m=f.stagger,p=f.maxDuration,r=f.activeClassName,u=Math.max(l.transitionDelay,
+l.animationDelay)*x,w=Date.now(),v=T+" "+S,t=f.itemIndex,q="",s=[];if(0<l.transitionDuration){var y=l.transitionPropertyStyle;-1==y.indexOf("all")&&(q+=c+"transition-property: "+y+";",q+=c+"transition-duration: "+l.transitionDurationStyle+";",s.push(c+"transition-property"),s.push(c+"transition-duration"))}0<t&&(0<m.transitionDelay&&0===m.transitionDuration&&(q+=c+"transition-delay: "+M(l.transitionDelayStyle,m.transitionDelay,t)+"; ",s.push(c+"transition-delay")),0<m.animationDelay&&0===m.animationDuration&&
+(q+=c+"animation-delay: "+M(l.animationDelayStyle,m.animationDelay,t)+"; ",s.push(c+"animation-delay")));0<s.length&&(l=g.getAttribute("style")||"",g.setAttribute("style",l+" "+q));b.on(v,k);b.addClass(r);f.closeAnimationFn=function(){e();h()};return e}h()}function M(b,a,c){var d="";p(b.split(","),function(b,e){d+=(0<e?",":"")+(c*a+parseInt(b,10))+"s"});return d}function L(b,a,c){if(Q(b,a,c))return function(c){c&&(b.removeClass(a),b.removeData(n))}}function a(a,c,d){if(a.data(n))return K(a,c,d);a.removeClass(c);
+a.removeData(n);d()}function g(b,c,d){var e=L(b,c);if(e){var f=e;y(b,function(){J(b);A(b);f=a(b,c,d)});return function(a){(f||q)(a)}}d()}function e(a,c){var d="";a=k.isArray(a)?a:a.split(/\s+/);p(a,function(a,b){a&&0<a.length&&(d+=(0<b?" ":"")+a+c)});return d}var c="",f,S,F,T;v.ontransitionend===t&&v.onwebkittransitionend!==t?(c="-webkit-",f="WebkitTransition",S="webkitTransitionEnd transitionend"):(f="transition",S="transitionend");v.onanimationend===t&&v.onwebkitanimationend!==t?(c="-webkit-",F=
+"WebkitAnimation",T="webkitAnimationEnd animationend"):(F="animation",T="animationend");var Y="Duration",W="Property",E="Delay",R="IterationCount",Z="$$ngAnimateKey",n="$$ngAnimateCSS3Data",z=3,s=1.5,x=1E3,G=0,u={},D=0,U=[],V=[],O,P=0;return{allowCancel:function(a,c,h){var f=(a.data(n)||{}).classes;if(!f||0<=["enter","leave","move"].indexOf(c))return!0;var l=a.parent(),g=k.element(d(a).cloneNode());g.attr("style","position:absolute; top:-9999px; left:-9999px");g.removeAttr("id");g.empty();p(f.split(" "),
+function(a){g.removeClass(a)});g.addClass(e(h,"addClass"==c?"-add":"-remove"));l.append(g);a=N(g);g.remove();return 0<Math.max(a.transitionDuration,a.animationDuration)},enter:function(a,c){return g(a,"ng-enter",c)},leave:function(a,c){return g(a,"ng-leave",c)},move:function(a,c){return g(a,"ng-move",c)},beforeAddClass:function(a,c,d){var f=L(a,e(c,"-add"),function(d){a.addClass(c);d=d();a.removeClass(c);return d});if(f)return y(a,function(){J(a);A(a);d()}),f;d()},addClass:function(b,c,d){return a(b,
+e(c,"-add"),d)},beforeRemoveClass:function(a,c,d){var f=L(a,e(c,"-remove"),function(d){var e=a.attr("class");a.removeClass(c);d=d();a.attr("class",e);return d});if(f)return y(a,function(){J(a);A(a);d()}),f;d()},removeClass:function(b,c,d){return a(b,e(c,"-remove"),d)}}}])}])})(window,window.angular);
+//# sourceMappingURL=angular-animate.min.js.map
View
8 1.2.10/angular-animate.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-animate.min.js",
+"lineCount":24,
+"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CA2OtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CAgBW,iBAhBX,CAgB8B,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAACC,CAAD,CAAUC,CAAV,CAAoB,CAC9E,IAAIC,EAAwBF,CAAAE,sBAAxBA,EACwBF,CAAAG,4BADxBD,EAEwB,QAAQ,CAACE,CAAD,CAAK,CACX,MAAOH,EAAA,CAASG,CAAT,CAAa,EAAb,CAAiB,CAAA,CAAjB,CADI,CAFzC,CAMIC,EAAuBL,CAAAK,qBAAvBA,EACuBL,CAAAM,2BADvBD,EAEuB,QAAQ,CAACE,CAAD,CAAQ,CACd,MAAON,EAAAO,OAAA,CAAgBD,CAAhB,CADO,CAG3C,OAAO,SAAQ,CAACH,CAAD,CAAK,CAClB,IAAIK,EAAKP,CAAA,CAAsBE,CAAtB,CACT,OAAO,SAAQ,EAAG,CAChBC,CAAA,CAAqBI,CAArB,CADgB,CAFA,CAZ0D,CAApD,CAhB9B,CAAAC,OAAA,CAoCU,CAAC,UAAD,CAAa,kBAAb,CAAiC,QAAQ,CAACC,CAAD,CAAWC,CAAX,CAA6B,CAU5EC,QAASA,EAAkB,CAACC,CAAD,CAAU,CACnC,IAAI,IAAIC,EAAI,CAAZ,CAAeA,CAAf,CAAmBD,CAAAE,OAAnB,CAAmCD,CAAA,EAAnC,CAAwC,CACtC,IAAIE,EAAMH,CAAA,CAAQC,CAAR,CACV,IAAGE,CAAAC,SAAH,EAAmBC,CAAnB,CACE,MAAOF,EAH6B,CADL,CATrC,IAAIG,EAAOxB,CAAAwB,KAAX;AACIC,EAAUzB,CAAAyB,QADd,CAEIC,EAAYV,CAAAW,YAFhB,CAIIJ,EAAe,CAJnB,CAKIK,EAAmB,kBALvB,CAMIC,EAAwB,YAN5B,CAOIC,EAAmB,SAAU,CAAA,CAAV,CAevBf,EAAAgB,UAAA,CAAmB,UAAnB,CAA+B,CAAC,WAAD,CAAc,WAAd,CAA2B,UAA3B,CAAuC,cAAvC,CAAuD,UAAvD,CAAmE,YAAnE,CAAiF,WAAjF,CACP,QAAQ,CAACC,CAAD,CAAcC,CAAd,CAA2BC,CAA3B,CAAuCC,CAAvC,CAAuD9B,CAAvD,CAAmE+B,CAAnE,CAAiFC,CAAjF,CAA4F,CA2B1HC,QAASA,EAAM,CAACC,CAAD,CAAO,CACpB,GAAIA,CAAJ,CAAU,CAAA,IACJC,EAAU,EADN,CAEJC,EAAU,EACVC,EAAAA,CAAUH,CAAAI,OAAA,CAAY,CAAZ,CAAAC,MAAA,CAAqB,GAArB,CAOd,EAAIV,CAAAW,YAAJ,EAA4BX,CAAAY,WAA5B,GACEJ,CAAAK,KAAA,CAAa,EAAb,CAGF,KAAI,IAAI5B,EAAE,CAAV,CAAaA,CAAb,CAAiBuB,CAAAtB,OAAjB,CAAiCD,CAAA,EAAjC,CAAsC,CAAA,IAChC6B,EAAQN,CAAA,CAAQvB,CAAR,CADwB,CAEhC8B,EAAsBvB,CAAA,CAAUsB,CAAV,CACvBC,EAAH,EAA2B,CAAAR,CAAA,CAAQO,CAAR,CAA3B,GACER,CAAAO,KAAA,CAAad,CAAAiB,IAAA,CAAcD,CAAd,CAAb,CACA,CAAAR,CAAA,CAAQO,CAAR,CAAA,CAAiB,CAAA,CAFnB,CAHoC,CAQtC,MAAOR,EAtBC,CADU,CAwRtBW,QAASA,EAAgB,CAACC,CAAD,CAAiBC,CAAjB,CAA4BnC,CAA5B,CAAqCoC,CAArC,CAAoDC,CAApD,CAAkEC,CAAlE,CAAgFC,CAAhF,CAA8F,CAsJrHC,QAASA,EAA0B,CAACC,CAAD,CAAY,CAC7CC,CAAA,EACA,IAAiB,CAAA,CAAjB,GAAGD,CAAH,CACEE,CAAA,EADF,KAAA,CASA,GADIC,CACJ,CADW5C,CAAA4C,KAAA,CAAalC,CAAb,CACX,CACEkC,CAAAC,KACA,CADYF,CACZ,CAAA3C,CAAA4C,KAAA,CAAalC,CAAb;AAA+BkC,CAA/B,CAEFE,EAAA,CAA6BlB,CAA7B,CAAyC,OAAzC,CAAkDe,CAAlD,CAbA,CAF6C,CAkB/CG,QAASA,EAA4B,CAAClB,CAAD,CAAamB,CAAb,CAAoBC,CAApB,CAA6C,CACvE,OAAT,EAAAD,CAAA,CACEE,CAAA,EADF,CAEEC,CAAA,EAEF,KAAIC,EAAYJ,CAAZI,CAAoB,KACxB5C,EAAA,CAAQqB,CAAR,CAAoB,QAAQ,CAACwB,CAAD,CAAYC,EAAZ,CAAmB,CAC7C,IAAIC,EAA0BA,QAAQ,EAAG,CAoBX,CAAA,CAAA,CAC9B,IAAIC,EApBcR,CAoBdQ,CAA8B,UAAlC,CACIC,EAAmB5B,CAAA,CArBZyB,EAqBY,CACvBG,EAAA,CAAiBD,CAAjB,CAAA,CAAwC,CAAA,CACvC,EAAAC,CAAA,CAAiBL,CAAjB,CAAA,EAA+B7C,CAA/B,GAED,KAAQL,CAAR,CAAU,CAAV,CAAYA,CAAZ,CAAc2B,CAAA1B,OAAd,CAAgCD,CAAA,EAAhC,CACE,GAAG,CAAC2B,CAAA,CAAW3B,CAAX,CAAA,CAAcsD,CAAd,CAAJ,CAAwC,MAAA,CAG1CP,EAAA,EAV8B,CApBW,CAM7B,SAAZ,EAAGD,CAAH,EAA2C,OAA3C,EAAyBb,CAAzB,EAAwE,MAAxE,EAAsDA,CAAtD,CAKGkB,CAAA,CAAUL,CAAV,CAAH,CACEK,CAAA,CAAUD,CAAV,CADF,CACyBM,CAAA,CACrBL,CAAA,CAAUL,CAAV,CAAA,CAAiB/C,CAAjB,CAA0BmC,CAA1B,CAAqCmB,CAArC,CADqB,CAErBF,CAAA,CAAUL,CAAV,CAAA,CAAiB/C,CAAjB,CAA0BsD,CAA1B,CAHJ,CAKEA,CAAA,EAVF,CACEA,CAAA,EAR2C,CAA/C,CANgF,CAyClFI,QAASA,EAAe,CAACC,CAAD,CAAiB,CACvC3D,CAAA4D,eAAA,CAAuB,WAAvB,CAAqCD,CAArC,CAAqD,OAC3CzB,CAD2C,WAEvCC,CAFuC,CAArD,CADuC,CAOzCe,QAASA,EAAuB,EAAG,CAnf5B/D,CAAA,CAofCG,QAAQ,EAAG,CACfoE,CAAA,CAAgB,QAAhB,CADe,CApfZ,CAAa,CAAb,CAAgB,CAAA,CAAhB,CAmf4B,CAMnCT,QAASA,EAAsB,EAAG,CAzf3B9D,CAAA,CA0fCG,QAAQ,EAAG,CACfoE,CAAA,CAAgB,OAAhB,CADe,CA1fZ,CAAa,CAAb,CAAgB,CAAA,CAAhB,CAyf2B,CAMlCG,QAASA,EAAqB,EAAG,CA/f1B1E,CAAA,CAggBCG,QAAQ,EAAG,CACfoE,CAAA,CAAgB,OAAhB,CACAnB,EAAA,EAAgBA,CAAA,EAFD,CAhgBZ,CAAa,CAAb,CAAgB,CAAA,CAAhB,CA+f0B,CASjCG,QAASA,EAAgB,EAAG,CACtBA,CAAAoB,WAAJ;CACEpB,CAAAoB,WACA,CAD8B,CAAA,CAC9B,CAAAxB,CAAA,EAFF,CAD0B,CAO5BK,QAASA,EAAc,EAAG,CACxB,GAAG,CAACA,CAAAmB,WAAJ,CAA+B,CAC7BnB,CAAAmB,WAAA,CAA4B,CAAA,CAC5B,KAAIlB,EAAO5C,CAAA4C,KAAA,CAAalC,CAAb,CACRkC,EAAH,GAKKa,CAAH,CACEM,CAAA,CAAQ/D,CAAR,CADF,EAGE4C,CAAAoB,sBAGA,CA9hBD7E,CAAA,CA2hBoCG,QAAQ,EAAG,CAC5CyE,CAAA,CAAQ/D,CAAR,CAD4C,CA3hB/C,CAAa,CAAb,CAAgB,CAAA,CAAhB,CA8hBC,CAAAA,CAAA4C,KAAA,CAAalC,CAAb,CAA+BkC,CAA/B,CANF,CALF,CAcAiB,EAAA,EAjB6B,CADP,CApP2F,IACjHI,CADiH,CAC/FzC,CAD+F,CACtF0C,EAAOnE,CAAA,CAAmBC,CAAnB,CACnCkE,EAAH,GACED,CACA,CADmBC,CAAA/B,UACnB,CAAAX,CAAA,CAAUyC,CAAV,CAA6B,GAA7B,CAAmC9B,CAFrC,CAOA,IAAI+B,CAAJ,EAAaC,CAAA,CAAsB3C,CAAtB,CAAb,CAAA,CAQI4C,CAAAA,CAAmBC,CAAA,GAAAA,CAAM7C,CAAN6C,SAAA,CAAuB,MAAvB,CAA8B,GAA9B,CAClBjC,EAAL,GACEA,CADF,CACkBC,CAAA,CAAeA,CAAAiC,OAAA,EAAf,CAAuCtE,CAAAsE,OAAA,EADzD,CAIIhD,EAAAA,CAAUF,CAAA,CAAOgD,CAAP,CACd,KAAIX,EAAiC,UAAjCA,EAAevB,CAAfuB,EAAiE,aAAjEA,EAA+CvB,CAC/CqC,EAAAA,CAAiBvE,CAAA4C,KAAA,CAAalC,CAAb,CAAjB6D,EAAmD,EAMvD,IAAIC,EAAA,CAAmBxE,CAAnB,CAA4BoC,CAA5B,CAAJ,EAAqE,CAArE,GAAkDd,CAAApB,OAAlD,CACEwC,CAAA,EAGA,CAFAQ,CAAA,EAEA,CADAD,CAAA,EACA,CAAAN,CAAA,EAJF,KAAA,CAQA,IAAIf,EAAa,EAIK6B,EAItB,GAHGc,CAAAE,SAGH,EAHgCF,CAAAG,QAGhC,EAH2DH,CAAAI,WAG3D,GACEpE,CAAA,CAAQe,CAAR,CAAiB,QAAQ,CAAC8B,CAAD,CAAY,CAEnC,GAAG,CAACA,CAAAwB,YAAJ,EAA6BxB,CAAAwB,YAAA,CAAsB5E,CAAtB,CAA+BkC,CAA/B,CAA+CC,CAA/C,CAA7B,CAAwF,CACtF,IAAc0C;AAAUzB,CAAA,CAAUlB,CAAV,CAIH,QAArB,EAAGA,CAAH,EACE4C,CACA,CADWD,CACX,CAAAA,CAAA,CAAU,IAFZ,EAIEC,CAJF,CAIa1B,CAAA,CAAU,QAAV,CAAqBlB,CAAA6C,OAAA,CAAsB,CAAtB,CAAAC,YAAA,EAArB,CAA8D9C,CAAAT,OAAA,CAAsB,CAAtB,CAA9D,CAEbG,EAAAC,KAAA,CAAgB,QACLiD,CADK,OAEND,CAFM,CAAhB,CAXsF,CAFrD,CAArC,CAuBuB,EAAzB,GAAGjD,CAAA1B,OAAH,EACEwC,CAAA,EAGA,CAFAQ,CAAA,EAEA,CADAD,CAAA,EACA,CAAAY,CAAA,EAJF,GAYIoB,CA0CJ,CA9CgBC,GA8ChB,CA1CkCjB,CA0ClC,CA9CgBiB,GA8ChB,CAzCGX,CAAAG,QAyCH,GAtCEvF,CAAAO,OAAA,CAAgB6E,CAAAP,sBAAhB,CAkBA,CAjBAD,CAAA,CAAQ/D,CAAR,CAiBA,CAhBAmF,CAAA,CAAiBZ,CAAA3C,WAAjB,CAgBA,CAPIwD,CAOJ,EARIC,CAQJ,CARiC5B,CAQjC,EARiD,CAACc,CAAAI,WAQlD,GANgCJ,CAAApC,UAMhC,EAN4DA,CAM5D,EALgCD,CAKhC,EALkDqC,CAAAe,MAKlD,CAAGf,CAAAgB,eAAH,EAAoCH,CAApC,CACG,CAAAb,CAAA1B,KAAA,EAAuBvC,CAAvB,EAA6B,CAAA,CAA7B,CADH,CAEU+E,CAFV,GASEJ,CATF,CAS4C,aAAxB,EAAAV,CAAAe,MAAA,CAChBL,CAAAZ,QAAA,CApCUa,GAoCV,CAAoCX,CAAApC,UAApC,CApCU+C,GAoCV,CApCUA,GAoCV,CADgB,CAEhBD,CAFgB,CAEEV,CAAApC,UAFF,CAnCN+C,GA0Bd,CAoBF,EADIM,CACJ,CA9CgBN,GA8ChB,CADiC/C,CACjC,CA9CgB+C,GA8ChB,CAAsB,UAAtB,EAAIhD,CAAJ,EAAkF,CAAlF,EAAuC+C,CAAAQ,QAAA,CAAwBD,CAAxB,CAAvC,EACsB,aADtB,EACItD,CADJ,EACmF,EADnF,EACuC+C,CAAAQ,QAAA,CAAwBD,CAAxB,CADvC,EAEE9C,CAAA,EAGA,CAFAQ,CAAA,EAEA,CADAD,CAAA,EACA,CAAAY,CAAA,EALF,GAWA7D,CAAA0F,SAAA,CAAiB/E,CAAjB,CAaA;AAXAX,CAAA4C,KAAA,CAAalC,CAAb,CAA+B,SACrB,CAAA,CADqB,OAEvBwB,CAFuB,WAGnBC,CAHmB,YAIlB,CAACsB,CAJiB,YAKlB7B,CALkB,MAMxBY,CANwB,CAA/B,CAWA,CAAAM,CAAA,CAA6BlB,CAA7B,CAAyC,QAAzC,CAAmDY,CAAnD,CAxBA,CAtDA,CAxCA,CArBA,CAAA,IACEE,EAAA,EAGA,CAFAQ,CAAA,EAEA,CADAD,CAAA,EACA,CAAAN,CAAA,EAbmH,CA2QvHgD,QAASA,EAAqB,CAAC3F,CAAD,CAAU,CAClCkE,CAAAA,CAAOnE,CAAA,CAAmBC,CAAnB,CACXO,EAAA,CAAQ2D,CAAA0B,iBAAA,CAAsB,GAAtB,CAA4BjF,CAA5B,CAAR,CAA4D,QAAQ,CAACX,CAAD,CAAU,CAC5EA,CAAA,CAAUlB,CAAAkB,QAAA,CAAgBA,CAAhB,CACV,KAAI4C,EAAO5C,CAAA4C,KAAA,CAAalC,CAAb,CACRkC,EAAH,GACEuC,CAAA,CAAiBvC,CAAAhB,WAAjB,CACA,CAAAmC,CAAA,CAAQ/D,CAAR,CAFF,CAH4E,CAA9E,CAFsC,CAYxCmF,QAASA,EAAgB,CAACvD,CAAD,CAAa,CAEpCrB,CAAA,CAAQqB,CAAR,CAAoB,QAAQ,CAACwB,CAAD,CAAY,CAClCA,CAAAmC,eAAJ,EACG,CAAAnC,CAAAyC,UAAA,EAAuBvF,CAAvB,EAHiBwF,CAAAA,CAGjB,CAEC1C,EAAA2C,cAAJ,EACG,CAAA3C,CAAA4C,SAAA,EAAsB1F,CAAtB,EANiBwF,CAAAA,CAMjB,CALmC,CAAxC,CAFoC,CAYtC/B,QAASA,EAAO,CAAC/D,CAAD,CAAU,CA1lBnBD,CAAA,CA2lBgBC,CA3lBhB,CA2lBL,EA3lBiCD,CAAA,CA2lBHkB,CA3lBG,CA2lBjC,CACML,CAAA6D,SADN,GAEI7D,CAAA8D,QACA,CAD2B,CAAA,CAC3B,CAAA9D,CAAA+D,WAAA,CAA8B,CAAA,CAHlC,GAME3E,CAAAiG,YAAA,CAAoBtF,CAApB,CACA,CAAAX,CAAAkG,WAAA,CAAmBxF,CAAnB,CAPF,CADwB,CAY1B8D,QAASA,GAAkB,CAACxE,CAAD,CAAUoC,CAAV,CAAyB,CAClD,GAAIxB,CAAA6D,SAAJ,CAA+B,MAAO,CAAA,CAEtC,IAzmBK1E,CAAA,CAymBgBC,CAzmBhB,CAymBL,EAzmBiCD,CAAA,CAymBHkB,CAzmBG,CAymBjC,CACE,MAAOL,EAAA6D,SAAP;AAAoC7D,CAAA8D,QAGtC,GAAG,CAID,GAA4B,CAA5B,GAAGtC,CAAAlC,OAAH,CAA+B,KAE/B,KAAIiG,EAnnBDpG,CAAA,CAmnB4BqC,CAnnB5B,CAmnBC+D,EAnnB2BpG,CAAA,CAmnBekB,CAnnBf,CAmnB/B,CACImF,EAAQD,CAAA,CAASvF,CAAT,CAA4BwB,CAAAQ,KAAA,CAAmBlC,CAAnB,CADxC,CAEI2F,EAASD,CAATC,GAAmB,CAAC,CAACD,CAAA3B,SAArB4B,EAAuC,CAAC,CAACD,CAAA1B,QAAzC2B,CACJ,IAAGF,CAAH,EAAaE,CAAb,CACE,MAAOA,EAGT,IAAGF,CAAH,CAAW,KAbV,CAAH,MAeM/D,CAfN,CAesBA,CAAAkC,OAAA,EAftB,CAiBA,OAAO,CAAA,CAxB2C,CAhmBpDrD,CAAA2B,KAAA,CAAkBlC,CAAlB,CAAoCE,CAApC,CAQAM,EAAAoF,aAAA,CAAwB,QAAQ,EAAG,CACjCpF,CAAAoF,aAAA,CAAwB,QAAQ,EAAG,CACjC1F,CAAA8D,QAAA,CAA2B,CAAA,CADM,CAAnC,CADiC,CAAnC,CAMA,KAAI6B,EAAkBzG,CAAAyG,gBAAA,EAAtB,CACIpC,EAAyBoC,CACD,CAClB,QAAQ,CAACpE,CAAD,CAAY,CACpB,MAAOoE,EAAAC,KAAA,CAAqBrE,CAArB,CADa,CADF,CAAlB,QAAQ,EAAG,CAAE,MAAO,CAAA,CAAT,CAuDrB,OAAO,OA+BGsE,QAAQ,CAACzG,CAAD,CAAUoC,CAAV,CAAyBC,CAAzB,CAAuCE,CAAvC,CAAqD,CACnE,IAAAmE,QAAA,CAAa,CAAA,CAAb,CAAoB1G,CAApB,CACAc,EAAA2F,MAAA,CAAgBzG,CAAhB,CAAyBoC,CAAzB,CAAwCC,CAAxC,CACAnB,EAAAoF,aAAA,CAAwB,QAAQ,EAAG,CACjCrE,CAAA,CAAiB,OAAjB,CAA0B,UAA1B,CAAsCjC,CAAtC,CAA+CoC,CAA/C,CAA8DC,CAA9D,CAA4E/B,CAA5E,CAAkFiC,CAAlF,CADiC,CAAnC,CAHmE,CA/BhE,OAmEGoE,QAAQ,CAAC3G,CAAD,CAAUuC,CAAV,CAAwB,CACtCoD,CAAA,CAAsB3F,CAAtB,CACA,KAAA0G,QAAA,CAAa,CAAA,CAAb,CAAoB1G,CAApB,CACAkB,EAAAoF,aAAA,CAAwB,QAAQ,EAAG,CACjCrE,CAAA,CAAiB,OAAjB;AAA0B,UAA1B,CAAsCjC,CAAtC,CAA+C,IAA/C,CAAqD,IAArD,CAA2D,QAAQ,EAAG,CACpEc,CAAA6F,MAAA,CAAgB3G,CAAhB,CADoE,CAAtE,CAEGuC,CAFH,CADiC,CAAnC,CAHsC,CAnEnC,MA4GEqE,QAAQ,CAAC5G,CAAD,CAAUoC,CAAV,CAAyBC,CAAzB,CAAuCE,CAAvC,CAAqD,CAClEoD,CAAA,CAAsB3F,CAAtB,CACA,KAAA0G,QAAA,CAAa,CAAA,CAAb,CAAoB1G,CAApB,CACAc,EAAA8F,KAAA,CAAe5G,CAAf,CAAwBoC,CAAxB,CAAuCC,CAAvC,CACAnB,EAAAoF,aAAA,CAAwB,QAAQ,EAAG,CACjCrE,CAAA,CAAiB,MAAjB,CAAyB,SAAzB,CAAoCjC,CAApC,CAA6CoC,CAA7C,CAA4DC,CAA5D,CAA0E/B,CAA1E,CAAgFiC,CAAhF,CADiC,CAAnC,CAJkE,CA5G/D,UAmJMmD,QAAQ,CAAC1F,CAAD,CAAUmC,CAAV,CAAqBI,CAArB,CAAmC,CACpDN,CAAA,CAAiB,UAAjB,CAA6BE,CAA7B,CAAwCnC,CAAxC,CAAiD,IAAjD,CAAuD,IAAvD,CAA6D,QAAQ,EAAG,CACtEc,CAAA4E,SAAA,CAAmB1F,CAAnB,CAA4BmC,CAA5B,CADsE,CAAxE,CAEGI,CAFH,CADoD,CAnJjD,aAuLS0D,QAAQ,CAACjG,CAAD,CAAUmC,CAAV,CAAqBI,CAArB,CAAmC,CACvDN,CAAA,CAAiB,aAAjB,CAAgCE,CAAhC,CAA2CnC,CAA3C,CAAoD,IAApD,CAA0D,IAA1D,CAAgE,QAAQ,EAAG,CACzEc,CAAAmF,YAAA,CAAsBjG,CAAtB,CAA+BmC,CAA/B,CADyE,CAA3E,CAEGI,CAFH,CADuD,CAvLpD,SA2MKmE,QAAQ,CAACG,CAAD,CAAQ7G,CAAR,CAAiB,CACjC,OAAO8G,SAAA5G,OAAP,EACE,KAAK,CAAL,CACE,GAAG2G,CAAH,CACE9C,CAAA,CAAQ/D,CAAR,CADF,KAEO,CACL,IAAI4C,EAAO5C,CAAA4C,KAAA,CAAalC,CAAb,CAAPkC,EAAyC,EAC7CA,EAAA6B,SAAA,CAAgB,CAAA,CAChBzE,EAAA4C,KAAA,CAAalC,CAAb,CAA+BkC,CAA/B,CAHK,CAKT,KAEA,MAAK,CAAL,CACEhC,CAAA6D,SAAA,CAA4B,CAACoC,CAC/B,MAEA,SACEA,CAAA;AAAQ,CAACjG,CAAA6D,SAhBb,CAmBA,MAAO,CAAC,CAACoC,CApBwB,CA3M9B,CAzEmH,CAD7F,CAA/B,CA+nBA/G,EAAAiH,SAAA,CAA0B,EAA1B,CAA8B,CAAC,SAAD,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,iBAApC,CACP,QAAQ,CAAC7H,CAAD,CAAY8B,CAAZ,CAAwB7B,CAAxB,CAAoC6H,CAApC,CAAqD,CAgDlFC,QAASA,EAAW,CAACjH,CAAD,CAAUkH,CAAV,CAAoB,CACnCC,CAAH,EACEA,CAAA,EAGFC,EAAAvF,KAAA,CAA0BqF,CAA1B,CAEA,KAAIhD,EAAOnE,CAAA,CAAmBC,CAAnB,CACXA,EAAA,CAAUlB,CAAAkB,QAAA,CAAgBkE,CAAhB,CACVmD,EAAAxF,KAAA,CAA2B7B,CAA3B,CAEIsH,KAAAA,EAActH,CAAA4C,KAAA,CAAa2E,CAAb,CAAdD,CAEAE,EAAUF,CAAAE,QAFVF,CAGAG,EAAcH,CAAAI,UAAdD,EAAuCE,IAAAC,IAAA,CAASJ,CAAAK,eAAT,CAAiCL,CAAAM,gBAAjC,CAAvCL,EAAoG,CAApGA,CAGJM,EAAA,CAAuBJ,IAAAC,IAAA,CAASG,CAAT,EAAgCN,CAAhC,EADFH,CAAAU,SACE,CADqBV,CAAAW,YACrB,EADgDC,CAChD,EAA+DC,CAA/D,CAKvBb,EAAAc,eAAA,CAA6BC,CAE7BlB,EAAA,CAAwBH,CAAA,CAAgB,QAAQ,EAAG,CACjDzG,CAAA,CAAQ6G,CAAR,CAA8B,QAAQ,CAAC9H,CAAD,CAAK,CACzCA,CAAA,EADyC,CAA3C,CAOA,KAAIgJ,EAAuB,EAA3B,CACIC,EAA2BF,CAC/B9H,EAAA,CAAQ8G,CAAR,CAA+B,QAAQ,CAAClH,CAAD,CAAM,CAC3CmI,CAAAzG,KAAA,CAA0B1B,CAA1B,CAD2C,CAA7C,CAIAhB,EAAA,CAAS,QAAQ,EAAG,CAClBqJ,CAAA,CAAmBF,CAAnB,CAAyCC,CAAzC,CACAD,EAAA,CAAuB,IAFL,CAApB,CAGGP,CAHH,CAGyB,CAAA,CAHzB,CAKAX,EAAA,CAAuB,EACvBC,EAAA,CAAwB,EACxBF,EAAA,CAAwB,IACxBsB,EAAA,CAAc,EACdV,EAAA,CAAuB,CACvBM,EAAA,EAxBiD,CAA3B,CAxBc,CAoDxCG,QAASA,EAAkB,CAACE,CAAD,CAAWC,CAAX,CAAkB,CAC3CpI,CAAA,CAAQmI,CAAR;AAAkB,QAAQ,CAAC1I,CAAD,CAAU,CAElC,CADIsH,CACJ,CADkBtH,CAAA4C,KAAA,CAAa2E,CAAb,CAClB,GAAkBD,CAAAc,eAAlB,EAAgDO,CAAhD,EACG,CAAArB,CAAAsB,iBAAA,EAAgCtI,CAAhC,GAH+B,CAApC,CAD2C,CAS7CuI,QAASA,EAA0B,CAAC7I,CAAD,CAAU8I,CAAV,CAAoB,CACrD,IAAIlG,EAAOkG,CAAA,CAAWL,CAAA,CAAYK,CAAZ,CAAX,CAAmC,IAC9C,IAAG,CAAClG,CAAJ,CAAU,CACR,IAAImG,EAAqB,CAAzB,CACIjB,EAAkB,CADtB,CAEIkB,EAAoB,CAFxB,CAGInB,EAAiB,CAHrB,CAIIoB,CAJJ,CAKIC,CALJ,CAMIC,CANJ,CAOIC,CAGJ7I,EAAA,CAAQP,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjC,GAAIA,CAAAI,SAAJ,EAAwBC,CAAxB,CAAsC,CAChCgJ,CAAAA,CAAgBnK,CAAAoK,iBAAA,CAAyBtJ,CAAzB,CAAhBqJ,EAAqD,EAEzDF,EAAA,CAA0BE,CAAA,CAAcE,CAAd,CAAgCC,CAAhC,CAE1BT,EAAA,CAAqBpB,IAAAC,IAAA,CAAS6B,CAAA,CAAaN,CAAb,CAAT,CAAgDJ,CAAhD,CAErBK,EAAA,CAA0BC,CAAA,CAAcE,CAAd,CAAgCG,CAAhC,CAE1BT,EAAA,CAAuBI,CAAA,CAAcE,CAAd,CAAgCI,CAAhC,CAEvB7B,EAAA,CAAmBH,IAAAC,IAAA,CAAS6B,CAAA,CAAaR,CAAb,CAAT,CAA6CnB,CAA7C,CAEnBoB,EAAA,CAAsBG,CAAA,CAAcO,CAAd,CAA+BD,CAA/B,CAEtB9B,EAAA,CAAmBF,IAAAC,IAAA,CAAS6B,CAAA,CAAaP,CAAb,CAAT,CAA4CrB,CAA5C,CAEnB,KAAIgC,EAAaJ,CAAA,CAAaJ,CAAA,CAAcO,CAAd,CAA+BJ,CAA/B,CAAb,CAEF,EAAf,CAAGK,CAAH,GACEA,CADF,EACeC,QAAA,CAAST,CAAA,CAAcO,CAAd,CAA+BG,CAA/B,CAAT,CAAwE,EAAxE,CADf,EAC8F,CAD9F,CAIAf,EAAA,CAAoBrB,IAAAC,IAAA,CAASiC,CAAT,CAAoBb,CAApB,CAvBgB,CADL,CAAnC,CA2BApG,EAAA,CAAO,OACG,CADH,yBAEoBwG,CAFpB,yBAGoBD,CAHpB,sBAIiBF,CAJjB,iBAKYnB,CALZ,oBAMeiB,CANf,qBAOgBG,CAPhB;eAQWrB,CARX,mBAScmB,CATd,CAWJF,EAAH,GACEL,CAAA,CAAYK,CAAZ,CADF,CAC0BlG,CAD1B,CAjDQ,CAqDV,MAAOA,EAvD8C,CA0DvD6G,QAASA,EAAY,CAACO,CAAD,CAAM,CACzB,IAAIC,EAAW,CACXC,EAAAA,CAASpL,CAAAqL,SAAA,CAAiBH,CAAjB,CAAA,CACXA,CAAAtI,MAAA,CAAU,SAAV,CADW,CAEX,EACFnB,EAAA,CAAQ2J,CAAR,CAAgB,QAAQ,CAACrD,CAAD,CAAQ,CAC9BoD,CAAA,CAAWtC,IAAAC,IAAA,CAASwC,UAAA,CAAWvD,CAAX,CAAT,EAA8B,CAA9B,CAAiCoD,CAAjC,CADmB,CAAhC,CAGA,OAAOA,EARkB,CAW3BI,QAASA,EAAW,CAACrK,CAAD,CAAU,CAC5B,IAAIoC,EAAgBpC,CAAAsE,OAAA,EAApB,CACIgG,EAAWlI,CAAAQ,KAAA,CAAmB2H,CAAnB,CACXD,EAAJ,GACElI,CAAAQ,KAAA,CAAmB2H,CAAnB,CAA0C,EAAEC,CAA5C,CACA,CAAAF,CAAA,CAAWE,CAFb,CAIA,OAAOF,EAAP,CAAkB,GAAlB,CAAwBvK,CAAA,CAAmBC,CAAnB,CAAAmC,UAPI,CAU9BsI,QAASA,EAAY,CAACzK,CAAD,CAAUmC,CAAV,CAAqBuI,CAArB,CAA2C,CAC9D,IAAI5B,EAAWuB,CAAA,CAAYrK,CAAZ,CAAf,CACI2K,EAAgB7B,CAAhB6B,CAA2B,GAA3BA,CAAiCxI,CADrC,CAEIqF,EAAU,EAFd,CAGIE,EAAYe,CAAA,CAAYkC,CAAZ,CAAA,CAA6B,EAAElC,CAAA,CAAYkC,CAAZ,CAAAC,MAA/B,CAAkE,CAElF,IAAe,CAAf,CAAGlD,CAAH,CAAkB,CAChB,IAAImD,EAAmB1I,CAAnB0I,CAA+B,UAAnC,CACIC,EAAkBhC,CAAlBgC,CAA6B,GAA7BA,CAAmCD,CAGvC,EAFIE,CAEJ,CAFmB,CAACtC,CAAA,CAAYqC,CAAZ,CAEpB,GAAgB9K,CAAA0F,SAAA,CAAiBmF,CAAjB,CAEhBrD,EAAA,CAAUqB,CAAA,CAA2B7I,CAA3B,CAAoC8K,CAApC,CAEVC,EAAA,EAAgB/K,CAAAiG,YAAA,CAAoB4E,CAApB,CATA,CAclBH,CAAA,CAAuBA,CAAvB,EACuB,QAAQ,CAACpL,CAAD,CAAK,CAAE,MAAOA,EAAA,EAAT,CAEpCU,EAAA0F,SAAA,CAAiBvD,CAAjB,CAEI6I,EAAAA,CAAUN,CAAA,CAAqB,QAAQ,EAAG,CAC5C,MAAO7B,EAAA,CAA2B7I,CAA3B,CAAoC2K,CAApC,CADqC,CAAhC,CAQV3C;CAAAA,CAAWL,IAAAC,IAAA,CAASoD,CAAAlD,gBAAT,CAAkCkD,CAAAnD,eAAlC,CACXI,EAAAA,CAAcN,IAAAC,IAAA,CAASoD,CAAAjC,mBAAT,CAAqCiC,CAAAhC,kBAArC,CAClB,IAAmB,CAAnB,GAAGf,CAAH,CAEE,MADAjI,EAAAiG,YAAA,CAAoB9D,CAApB,CACO,CAAA,CAAA,CAKT,KAAI8I,EAAkB,EACO,EAA7B,CAAAD,CAAAjC,mBAAA,CAuBAhJ,CAAA,CAtBmBC,CAsBnB,CAAAkL,MAAA,CAAkC3B,CAAlC,CAAoDG,CAApD,CAvBA,CAuBoE,MAvBpE,CA2BA3J,CAAA,CAzB0BC,CAyB1B,CAAAkL,MAAA,CAAkCtB,CAAlC,CA3BA,CA2BoD,SAvBpDrJ,EAAA,CAAQ4B,CAAAT,MAAA,CAAgB,GAAhB,CAAR,CAA8B,QAAQ,CAACI,CAAD,CAAQ7B,CAAR,CAAW,CAC/CgL,CAAA,GAAwB,CAAJ,CAAAhL,CAAA,CAAQ,GAAR,CAAc,EAAlC,EAAwC6B,CAAxC,CAAgD,SADD,CAAjD,CAIA9B,EAAA4C,KAAA,CAAa2E,CAAb,CAAsC,WACxBpF,CADwB,iBAElB8I,CAFkB,aAGtBhD,CAHsB,UAIzBD,CAJyB,SAK1B7F,CAL0B,CAKd,GALc,CAKR8I,CALQ,SAM1BD,CAN0B,SAO1BxD,CAP0B,WAQxBE,CARwB,CAAtC,CAWA,OAAO,CAAA,CA9DuD,CAyEhEyD,QAASA,EAAkB,CAACnL,CAAD,CAAU,CACnC,IAAIoL,EAAO7B,CAAP6B,CAAyB1B,CACzBxF,EAAAA,CAAOnE,CAAA,CAAmBC,CAAnB,CACRkE,EAAAgH,MAAA,CAAWE,CAAX,CAAH,EAAiD,CAAjD,CAAuBlH,CAAAgH,MAAA,CAAWE,CAAX,CAAAlL,OAAvB,GACEgE,CAAAgH,MAAA,CAAWE,CAAX,CADF,CACqB,EADrB,CAHmC,CAQrCC,QAASA,EAAyB,CAACrL,CAAD,CAAU,CAC1C,IAAIoL,EAAOxB,CACP1F,EAAAA;AAAOnE,CAAA,CAAmBC,CAAnB,CACRkE,EAAAgH,MAAA,CAAWE,CAAX,CAAH,EAAiD,CAAjD,CAAuBlH,CAAAgH,MAAA,CAAWE,CAAX,CAAAlL,OAAvB,GACEgE,CAAAgH,MAAA,CAAWE,CAAX,CADF,CACqB,EADrB,CAH0C,CAQ5CE,QAASA,EAAU,CAACtL,CAAD,CAAUmC,CAAV,CAAqBoJ,CAArB,CAA8C,CA8D/DC,QAASA,EAAK,CAAC/I,CAAD,CAAY,CACxBzC,CAAAyL,IAAA,CAAYC,CAAZ,CAAiCC,CAAjC,CACA3L,EAAAiG,YAAA,CAAoBgF,CAApB,CACajL,EAAAA,CAAAA,CAsFfA,EAAAiG,YAAA,CAtFwB9D,CAsFxB,CACAnC,EAAAkG,WAAA,CAAmBqB,CAAnB,CAtFMrD,EAAAA,CAAOnE,CAAA,CAAmBC,CAAnB,CACX,KAAKC,IAAIA,CAAT,GAAc2L,EAAd,CACE1H,CAAAgH,MAAAW,eAAA,CAA0BD,CAAA,CAAc3L,CAAd,CAA1B,CANsB,CAU1B0L,QAASA,EAAmB,CAACrG,CAAD,CAAQ,CAClCA,CAAAwG,gBAAA,EACA,KAAIC,EAAKzG,CAAA0G,cAALD,EAA4BzG,CAC5B2G,EAAAA,CAAYF,CAAAG,iBAAZD,EAAmCF,CAAAE,UAAnCA,EAAmDE,IAAAC,IAAA,EAInDC,EAAAA,CAAcjC,UAAA,CAAW2B,CAAAM,YAAAC,QAAA,CAAuBC,CAAvB,CAAX,CASf5E,KAAAC,IAAA,CAASqE,CAAT,CAAqBO,CAArB,CAAgC,CAAhC,CAAH,EAAyCC,CAAzC,EAAyDJ,CAAzD,EAAwEpE,CAAxE,EACEsD,CAAA,EAjBgC,CAvEpC,IAAIjE,EAActH,CAAA4C,KAAA,CAAa2E,CAAb,CAAlB,CACIrD,EAAOnE,CAAA,CAAmBC,CAAnB,CACX,IAAyC,EAAzC,EAAGkE,CAAA/B,UAAAsD,QAAA,CAAuBtD,CAAvB,CAAH,EAA+CmF,CAA/C,CAAA,CAKA,IAAI0D,EAAU1D,CAAA0D,QAAd,CACIxD,EAAUF,CAAAE,QADd,CAEIS,EAAcX,CAAAW,YAFlB,CAGIgD,EAAkB3D,CAAA2D,gBAHtB,CAIIwB,EAAe9E,IAAAC,IAAA,CAASoD,CAAAlD,gBAAT;AAAkCkD,CAAAnD,eAAlC,CAAf4E,CAA2EtE,CAJ/E,CAKIqE,EAAYL,IAAAC,IAAA,EALhB,CAMIV,EAAsBgB,CAAtBhB,CAA2C,GAA3CA,CAAiDiB,CANrD,CAOIjF,EAAYJ,CAAAI,UAPhB,CASIwD,EAAQ,EATZ,CASgBU,EAAgB,EAChC,IAAgC,CAAhC,CAAGZ,CAAAjC,mBAAH,CAAmC,CACjC,IAAI6D,EAAgB5B,CAAA5B,wBACgB,GAApC,EAAGwD,CAAAnH,QAAA,CAAsB,KAAtB,CAAH,GACEyF,CAGA,EAHS2B,CAGT,CAHsB,uBAGtB,CAHgDD,CAGhD,CAHgE,GAGhE,CAFA1B,CAEA,EAFS2B,CAET,CAFsB,uBAEtB,CAFgD7B,CAAA7B,wBAEhD,CAFkF,GAElF,CADAyC,CAAA/J,KAAA,CAAmBgL,CAAnB,CAAgC,qBAAhC,CACA,CAAAjB,CAAA/J,KAAA,CAAmBgL,CAAnB,CAAgC,qBAAhC,CAJF,CAFiC,CAUpB,CAAf,CAAGnF,CAAH,GAC+B,CAO7B,CAPGF,CAAAM,gBAOH,EAPiE,CAOjE,GAPkCN,CAAAuB,mBAOlC,GALEmC,CAEA,EAFS2B,CAET,CAFsB,oBAEtB,CADSC,CAAA,CAFQ9B,CAAA/B,qBAER,CAAgCzB,CAAAM,gBAAhC,CAAyDJ,CAAzD,CACT,CAD+E,IAC/E,CAAAkE,CAAA/J,KAAA,CAAmBgL,CAAnB,CAAgC,kBAAhC,CAGF,EAA4B,CAA5B,CAAGrF,CAAAK,eAAH,EAA+D,CAA/D,GAAiCL,CAAAwB,kBAAjC;CACEkC,CAEA,EAFS2B,CAET,CAFsB,mBAEtB,CADSC,CAAA,CAAoB9B,CAAA9B,oBAApB,CAAiD1B,CAAAK,eAAjD,CAAyEH,CAAzE,CACT,CAD+F,IAC/F,CAAAkE,CAAA/J,KAAA,CAAmBgL,CAAnB,CAAgC,iBAAhC,CAHF,CARF,CAe0B,EAA1B,CAAGjB,CAAA1L,OAAH,GAIM6M,CACJ,CADe7I,CAAA8I,aAAA,CAAkB,OAAlB,CACf,EAD6C,EAC7C,CAAA9I,CAAA+I,aAAA,CAAkB,OAAlB,CAA2BF,CAA3B,CAAsC,GAAtC,CAA4C7B,CAA5C,CALF,CAQAlL,EAAAkN,GAAA,CAAWxB,CAAX,CAAgCC,CAAhC,CACA3L,EAAA0F,SAAA,CAAiBuF,CAAjB,CACA3D,EAAAsB,iBAAA,CAA+BuE,QAAQ,EAAG,CACxC3B,CAAA,EACAD,EAAA,EAFwC,CAI1C,OAAOC,EAtDP,CACED,CAAA,EAJ6D,CA8FjEuB,QAASA,EAAmB,CAACM,CAAD,CAAaC,CAAb,CAA2BhK,CAA3B,CAAkC,CAC5D,IAAI6H,EAAQ,EACZ3K,EAAA,CAAQ6M,CAAA1L,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAAC4L,CAAD,CAAMrN,CAAN,CAAS,CAC9CiL,CAAA,GAAc,CAAJ,CAAAjL,CAAA,CAAQ,GAAR,CAAc,EAAxB,GACUoD,CADV,CACkBgK,CADlB,CACiCvD,QAAA,CAASwD,CAAT,CAAc,EAAd,CADjC,EACsD,GAFR,CAAhD,CAIA,OAAOpC,EANqD,CAS9DqC,QAASA,EAAa,CAACvN,CAAD,CAAUmC,CAAV,CAAqBuI,CAArB,CAA2C,CAC/D,GAAGD,CAAA,CAAazK,CAAb,CAAsBmC,CAAtB,CAAiCuI,CAAjC,CAAH,CACE,MAAO,SAAQ,CAACjI,CAAD,CAAY,CACzBA,CAAA,GAA0BzC,CA6C9BiG,YAAA,CA7CuC9D,CA6CvC,CACA,CA9C8BnC,CA8C9BkG,WAAA,CAAmBqB,CAAnB,CA9CI,CADyB,CAFkC,CAQjEiG,QAASA,EAAY,CAACxN,CAAD,CAAUmC,CAAV,CAAqBsL,CAArB,CAA6C,CAChE,GAAGzN,CAAA4C,KAAA,CAAa2E,CAAb,CAAH,CACE,MAAO+D,EAAA,CAAWtL,CAAX,CAAoBmC,CAApB,CAA+BsL,CAA/B,CAEMzN,EAoCfiG,YAAA,CApCwB9D,CAoCxB,CApCenC;CAqCfkG,WAAA,CAAmBqB,CAAnB,CApCEkG,EAAA,EAL8D,CASlEC,QAASA,EAAO,CAAC1N,CAAD,CAAUmC,CAAV,CAAqBwL,CAArB,CAAwC,CAItD,IAAIC,EAAwBL,CAAA,CAAcvN,CAAd,CAAuBmC,CAAvB,CAC5B,IAAIyL,CAAJ,CAAA,CAUA,IAAIlO,EAASkO,CACb3G,EAAA,CAAYjH,CAAZ,CAAqB,QAAQ,EAAG,CAC9BmL,CAAA,CAAmBnL,CAAnB,CACAqL,EAAA,CAA0BrL,CAA1B,CAIAN,EAAA,CAAS8N,CAAA,CAAaxN,CAAb,CAAsBmC,CAAtB,CAAiCwL,CAAjC,CANqB,CAAhC,CASA,OAAO,SAAQ,CAAClL,CAAD,CAAY,CACxB,CAAA/C,CAAA,EAAUY,CAAV,EAAgBmC,CAAhB,CADwB,CApB3B,CACEkL,CAAA,EANoD,CAuIxDE,QAASA,EAAa,CAACrM,CAAD,CAAUsM,CAAV,CAAkB,CACtC,IAAI3L,EAAY,EAChBX,EAAA,CAAU1C,CAAAiP,QAAA,CAAgBvM,CAAhB,CAAA,CAA2BA,CAA3B,CAAqCA,CAAAE,MAAA,CAAc,KAAd,CAC/CnB,EAAA,CAAQiB,CAAR,CAAiB,QAAQ,CAACM,CAAD,CAAQ7B,CAAR,CAAW,CAC/B6B,CAAH,EAA2B,CAA3B,CAAYA,CAAA5B,OAAZ,GACEiC,CADF,GACoB,CAAJ,CAAAlC,CAAA,CAAQ,GAAR,CAAc,EAD9B,EACoC6B,CADpC,CAC4CgM,CAD5C,CADkC,CAApC,CAKA,OAAO3L,EAR+B,CAphB0C,IAE9E0K,EAAa,EAFiE,CAE7DtD,CAF6D,CAE5CoD,CAF4C,CAEvB/C,CAFuB,CAEP8C,CAUvE7N,EAAAmP,gBAAJ,GAA+BjP,CAA/B,EAA4CF,CAAAoP,sBAA5C,GAA6ElP,CAA7E,EACE8N,CAEA,CAFa,UAEb,CADAtD,CACA,CADkB,kBAClB,CAAAoD,CAAA,CAAsB,mCAHxB,GAKEpD,CACA,CADkB,YAClB,CAAAoD,CAAA,CAAsB,eANxB,CASI9N,EAAAqP,eAAJ,GAA8BnP,CAA9B,EAA2CF,CAAAsP,qBAA3C,GAA2EpP,CAA3E,EACE8N,CAEA,CAFa,UAEb,CADAjD,CACA;AADiB,iBACjB,CAAA8C,CAAA,CAAqB,iCAHvB,GAKE9C,CACA,CADiB,WACjB,CAAA8C,CAAA,CAAqB,cANvB,CASA,KAAIlD,EAAe,UAAnB,CACIE,EAAe,UADnB,CAEIC,EAAY,OAFhB,CAGII,EAAgC,gBAHpC,CAIIQ,EAAwB,gBAJ5B,CAKIhD,EAA0B,qBAL9B,CAMIgF,EAAkC,CANtC,CAOIrE,EAAsB,GAP1B,CAQIC,EAAa,GARjB,CAUIE,EAAmB,CAVvB,CAWII,EAAc,EAXlB,CAYI+B,EAAgB,CAZpB,CAaIpD,EAAuB,EAb3B,CAcIC,EAAwB,EAd5B,CAeIF,CAfJ,CAgBIY,EAAuB,CAkY3B,OAAO,aACSnD,QAAQ,CAAC5E,CAAD,CAAUkC,CAAV,CAA0BC,CAA1B,CAAqC,CAGzD,IAAIiM,EAAc5M,CAAAxB,CAAA4C,KAAA,CAAa2E,CAAb,CAAA/F,EAAyC,EAAzCA,SAClB,IAAG,CAAC4M,CAAJ,EAAsE,CAAtE,EAAkB,CAAC,OAAD,CAAS,OAAT,CAAiB,MAAjB,CAAA3I,QAAA,CAAiCvD,CAAjC,CAAlB,CACE,MAAO,CAAA,CAGT,KAAIE,EAAgBpC,CAAAsE,OAAA,EAApB,CACI+J,EAAQvP,CAAAkB,QAAA,CAAgBD,CAAA,CAAmBC,CAAnB,CAAAsO,UAAA,EAAhB,CAGZD,EAAAE,KAAA,CAAW,OAAX,CAAmB,8CAAnB,CACAF,EAAAG,WAAA,CAAiB,IAAjB,CACAH,EAAAI,MAAA,EAEAlO,EAAA,CAAQ6N,CAAA1M,MAAA,CAAiB,GAAjB,CAAR;AAA+B,QAAQ,CAACI,CAAD,CAAQ,CAC7CuM,CAAApI,YAAA,CAAkBnE,CAAlB,CAD6C,CAA/C,CAKAuM,EAAA3I,SAAA,CAAemI,CAAA,CAAc1L,CAAd,CADgB,UAAlB2L,EAAA5L,CAAA4L,CAA+B,MAA/BA,CAAwC,SACtC,CAAf,CACA1L,EAAAsM,OAAA,CAAqBL,CAArB,CAEIrD,EAAAA,CAAUnC,CAAA,CAA2BwF,CAA3B,CACdA,EAAAM,OAAA,EAEA,OAAyE,EAAzE,CAAOhH,IAAAC,IAAA,CAASoD,CAAAjC,mBAAT,CAAqCiC,CAAAhC,kBAArC,CA3BkD,CADtD,OA+BGvC,QAAQ,CAACzG,CAAD,CAAU4O,CAAV,CAA8B,CAC5C,MAAOlB,EAAA,CAAQ1N,CAAR,CAAiB,UAAjB,CAA6B4O,CAA7B,CADqC,CA/BzC,OAmCGjI,QAAQ,CAAC3G,CAAD,CAAU4O,CAAV,CAA8B,CAC5C,MAAOlB,EAAA,CAAQ1N,CAAR,CAAiB,UAAjB,CAA6B4O,CAA7B,CADqC,CAnCzC,MAuCEhI,QAAQ,CAAC5G,CAAD,CAAU4O,CAAV,CAA8B,CAC3C,MAAOlB,EAAA,CAAQ1N,CAAR,CAAiB,SAAjB,CAA4B4O,CAA5B,CADoC,CAvCxC,gBA2CYC,QAAQ,CAAC7O,CAAD,CAAUmC,CAAV,CAAqByM,CAArB,CAAyC,CAChE,IAAIE,EAAqBvB,CAAA,CAAcvN,CAAd,CAAuB6N,CAAA,CAAc1L,CAAd,CAAyB,MAAzB,CAAvB,CAAyD,QAAQ,CAAC7C,CAAD,CAAK,CAM7FU,CAAA0F,SAAA,CAAiBvD,CAAjB,CACI6I,EAAAA,CAAU1L,CAAA,EACdU,EAAAiG,YAAA,CAAoB9D,CAApB,CACA,OAAO6I,EATsF,CAAtE,CAYzB,IAAG8D,CAAH,CAME,MALA7H,EAAA,CAAYjH,CAAZ,CAAqB,QAAQ,EAAG,CAC9BmL,CAAA,CAAmBnL,CAAnB,CACAqL,EAAA,CAA0BrL,CAA1B,CACA4O,EAAA,EAH8B,CAAhC,CAKOE,CAAAA,CAETF,EAAA,EArBgE,CA3C7D,UAmEMlJ,QAAQ,CAAC1F,CAAD,CAAUmC,CAAV,CAAqByM,CAArB,CAAyC,CAC1D,MAAOpB,EAAA,CAAaxN,CAAb;AAAsB6N,CAAA,CAAc1L,CAAd,CAAyB,MAAzB,CAAtB,CAAwDyM,CAAxD,CADmD,CAnEvD,mBAuEeG,QAAQ,CAAC/O,CAAD,CAAUmC,CAAV,CAAqByM,CAArB,CAAyC,CACnE,IAAIE,EAAqBvB,CAAA,CAAcvN,CAAd,CAAuB6N,CAAA,CAAc1L,CAAd,CAAyB,SAAzB,CAAvB,CAA4D,QAAQ,CAAC7C,CAAD,CAAK,CAKhG,IAAIwC,EAAQ9B,CAAAuO,KAAA,CAAa,OAAb,CACZvO,EAAAiG,YAAA,CAAoB9D,CAApB,CACI6I,EAAAA,CAAU1L,CAAA,EACdU,EAAAuO,KAAA,CAAa,OAAb,CAAsBzM,CAAtB,CACA,OAAOkJ,EATyF,CAAzE,CAYzB,IAAG8D,CAAH,CAME,MALA7H,EAAA,CAAYjH,CAAZ,CAAqB,QAAQ,EAAG,CAC9BmL,CAAA,CAAmBnL,CAAnB,CACAqL,EAAA,CAA0BrL,CAA1B,CACA4O,EAAA,EAH8B,CAAhC,CAKOE,CAAAA,CAETF,EAAA,EArBmE,CAvEhE,aA+FS3I,QAAQ,CAACjG,CAAD,CAAUmC,CAAV,CAAqByM,CAArB,CAAyC,CAC7D,MAAOpB,EAAA,CAAaxN,CAAb,CAAsB6N,CAAA,CAAc1L,CAAd,CAAyB,SAAzB,CAAtB,CAA2DyM,CAA3D,CADsD,CA/F1D,CAhb2E,CADtD,CAA9B,CAtpB4E,CAAtE,CApCV,CA3OsC,CAArC,CAAA,CAw8CE/P,MAx8CF,CAw8CUA,MAAAC,QAx8CV;",
+"sources":["angular-animate.js"],
+"names":["window","angular","undefined","module","factory","$window","$timeout","requestAnimationFrame","webkitRequestAnimationFrame","fn","cancelAnimationFrame","webkitCancelAnimationFrame","timer","cancel","id","config","$provide","$animateProvider","extractElementNode","element","i","length","elm","nodeType","ELEMENT_NODE","noop","forEach","selectors","$$selectors","NG_ANIMATE_STATE","NG_ANIMATE_CLASS_NAME","rootAnimateState","decorator","$delegate","$injector","$sniffer","$rootElement","$rootScope","$document","lookup","name","matches","flagMap","classes","substr","split","transitions","animations","push","klass","selectorFactoryName","get","performAnimation","animationEvent","className","parentElement","afterElement","domOperation","doneCallback","onBeforeAnimationsComplete","cancelled","fireDOMOperation","closeAnimation","data","done","invokeRegisteredAnimationFns","phase","allAnimationFnsComplete","fireAfterCallbackAsync","fireBeforeCallbackAsync","endFnName","animation","index","animationPhaseCompleted","phaseCompletionFlag","currentAnimation","isClassBased","fireDOMCallback","animationPhase","triggerHandler","fireDoneCallbackAsync","hasBeenRun","cleanup","closeAnimationTimeout","currentClassName","node","isAnimatableClassName","animationLookup","replace","parent","ngAnimateState","animationsDisabled","disabled","running","structural","allowCancel","afterFn","beforeFn","charAt","toUpperCase","futureClassName","ONE_SPACE","cancelAnimations","isRevertingClassAnimation","isFullyClassBasedAnimation","event","beforeComplete","classNameToken","indexOf","addClass","cancelChildAnimations","querySelectorAll","beforeEnd","isCancelledFlag","afterComplete","afterEnd","removeClass","removeData","isRoot","state","result","$$postDigest","classNameFilter","test","enter","enabled","leave","move","value","arguments","register","$$animateReflow","afterReflow","callback","cancelAnimationReflow","animationReflowQueue","animationElementQueue","elementData","NG_ANIMATE_CSS_DATA_KEY","stagger","staggerTime","itemIndex","Math","max","animationDelay","transitionDelay","closingAnimationTime","maxDelay","maxDuration","CLOSING_TIME_BUFFER","ONE_SECOND","animationCount","animationCounter","elementQueueSnapshot","animationCounterSnapshot","closeAllAnimations","lookupCache","elements","count","closeAnimationFn","getElementAnimationDetails","cacheKey","transitionDuration","animationDuration","transitionDelayStyle","animationDelayStyle","transitionDurationStyle","transitionPropertyStyle","elementStyles","getComputedStyle","TRANSITION_PROP","DURATION_KEY","parseMaxTime","PROPERTY_KEY","DELAY_KEY","ANIMATION_PROP","aDuration","parseInt","ANIMATION_ITERATION_COUNT_KEY","str","maxValue","values","isString","parseFloat","getCacheKey","parentID","NG_ANIMATE_PARENT_KEY","parentCounter","animateSetup","calculationDecorator","eventCacheKey","total","staggerClassName","staggerCacheKey","applyClasses","timings","activeClassName","style","unblockTransitions","prop","unblockKeyframeAnimations","animateRun","activeAnimationComplete","onEnd","off","css3AnimationEvents","onAnimationProgress","appliedStyles","removeProperty","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","ANIMATIONEND_EVENT","TRANSITIONEND_EVENT","propertyStyle","CSS_PREFIX","prepareStaggerDelay","oldStyle","getAttribute","setAttribute","on","elementData.closeAnimationFn","delayStyle","staggerDelay","val","animateBefore","animateAfter","afterAnimationComplete","animate","animationComplete","preReflowCancellation","suffixClasses","suffix","isArray","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","oldClasses","clone","cloneNode","attr","removeAttr","empty","append","remove","animationCompleted","beforeAddClass","cancellationMethod","beforeRemoveClass"]
+}
View
202 1.2.10/angular-cookies.js
@@ -0,0 +1,202 @@
+/**
+ * @license AngularJS v1.2.10
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc overview
+ * @name ngCookies
+ * @description
+ *
+ * # ngCookies
+ *
+ * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
+ *
+ * {@installModule cookies}
+ *
+ * <div doc-module-components="ngCookies"></div>
+ *
+ * See {@link ngCookies.$cookies `$cookies`} and
+ * {@link ngCookies.$cookieStore `$cookieStore`} for usage.
+ */
+
+
+angular.module('ngCookies', ['ng']).
+ /**
+ * @ngdoc object
+ * @name ngCookies.$cookies
+ * @requires $browser
+ *
+ * @description
+ * Provides read/write access to browser's cookies.
+ *
+ * Only a simple Object is exposed and by adding or removing properties to/from
+ * this object, new cookies are created/deleted at the end of current $eval.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * @example
+ <doc:example>
+ <doc:source>
+ <script>
+ function ExampleController($cookies) {
+ // Retrieving a cookie
+ var favoriteCookie = $cookies.myFavorite;
+ // Setting a cookie
+ $cookies.myFavorite = 'oatmeal';
+ }
+ </script>
+ </doc:source>
+ </doc:example>
+ */
+ factory('$cookies', ['$rootScope', '$browser', function ($rootScope, $browser) {
+ var cookies = {},
+ lastCookies = {},
+ lastBrowserCookies,
+ runEval = false,
+ copy = angular.copy,
+ isUndefined = angular.isUndefined;
+
+ //creates a poller fn that copies all cookies from the $browser to service & inits the service
+ $browser.addPollFn(function() {
+ var currentCookies = $browser.cookies();
+ if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl
+ lastBrowserCookies = currentCookies;
+ copy(currentCookies, lastCookies);
+ copy(currentCookies, cookies);
+ if (runEval) $rootScope.$apply();
+ }
+ })();
+
+ runEval = true;
+
+ //at the end of each eval, push cookies
+ //TODO: this should happen before the "delayed" watches fire, because if some cookies are not
+ // strings or browser refuses to store some cookies, we update the model in the push fn.
+ $rootScope.$watch(push);
+
+ return cookies;
+
+
+ /**
+ * Pushes all the cookies from the service to the browser and verifies if all cookies were
+ * stored.
+ */
+ function push() {
+ var name,
+ value,
+ browserCookies,
+ updated;
+
+ //delete any cookies deleted in $cookies
+ for (name in lastCookies) {
+ if (isUndefined(cookies[name])) {
+ $browser.cookies(name, undefined);
+ }
+ }
+
+ //update all cookies updated in $cookies
+ for(name in cookies) {
+ value = cookies[name];
+ if (!angular.isString(value)) {
+ if (angular.isDefined(lastCookies[name])) {
+ cookies[name] = lastCookies[name];
+ } else {
+ delete cookies[name];
+ }
+ } else if (value !== lastCookies[name]) {
+ $browser.cookies(name, value);
+ updated = true;
+ }
+ }
+
+ //verify what was actually stored
+ if (updated){
+ updated = false;
+ browserCookies = $browser.cookies();
+
+ for (name in cookies) {
+ if (cookies[name] !== browserCookies[name]) {
+ //delete or reset all cookies that the browser dropped from $cookies
+ if (isUndefined(browserCookies[name])) {
+ delete cookies[name];
+ } else {
+ cookies[name] = browserCookies[name];
+ }
+ updated = true;
+ }
+ }
+ }
+ }
+ }]).
+
+
+ /**
+ * @ngdoc object
+ * @name ngCookies.$cookieStore
+ * @requires $cookies
+ *
+ * @description
+ * Provides a key-value (string-object) storage, that is backed by session cookies.
+ * Objects put or retrieved from this storage are automatically serialized or
+ * deserialized by angular's toJson/fromJson.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * @example
+ */
+ factory('$cookieStore', ['$cookies', function($cookies) {
+
+ return {
+ /**
+ * @ngdoc method
+ * @name ngCookies.$cookieStore#get
+ * @methodOf ngCookies.$cookieStore
+ *
+ * @description
+ * Returns the value of given cookie key
+ *
+ * @param {string} key Id to use for lookup.
+ * @returns {Object} Deserialized cookie value.
+ */
+ get: function(key) {
+ var value = $cookies[key];
+ return value ? angular.fromJson(value) : value;
+ },
+
+ /**
+ * @ngdoc method
+ * @name ngCookies.$cookieStore#put
+ * @methodOf ngCookies.$cookieStore
+ *
+ * @description
+ * Sets a value for given cookie key
+ *
+ * @param {string} key Id for the `value`.
+ * @param {Object} value Value to be stored.
+ */
+ put: function(key, value) {
+ $cookies[key] = angular.toJson(value);
+ },
+
+ /**
+ * @ngdoc method
+ * @name ngCookies.$cookieStore#remove
+ * @methodOf ngCookies.$cookieStore
+ *
+ * @description
+ * Remove given cookie
+ *
+ * @param {string} key Id of the key-value pair to delete.
+ */
+ remove: function(key) {
+ delete $cookies[key];
+ }
+ };
+
+ }]);
+
+
+})(window, window.angular);
View
8 1.2.10/angular-cookies.min.js
@@ -0,0 +1,8 @@
+/*
+ AngularJS v1.2.10
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&d.$apply())})();k=!0;d.$watch(function(){var a,e,d;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)(e=c[a],f.isString(e))?e!==g[a]&&(b.cookies(a,e),d=!0):f.isDefined(g[a])?c[a]=g[a]:delete c[a];if(d)for(a in e=b.cookies(),c)c[a]!==e[a]&&(m(e[a])?delete c[a]:c[a]=e[a])});
+return c}]).factory("$cookieStore",["$cookies",function(d){return{get:function(b){return(b=d[b])?f.fromJson(b):b},put:function(b,c){d[b]=f.toJson(c)},remove:function(b){delete d[b]}}}])})(window,window.angular);
+//# sourceMappingURL=angular-cookies.min.js.map
View
8 1.2.10/angular-cookies.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-cookies.min.js",
+"lineCount":7,
+"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAoBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA4BW,UA5BX,CA4BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CASAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CAEE,CADAY,CACK,CADGZ,CAAA,CAAQW,CAAR,CACH,CAAAjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAAL,EAMWA,CANX,GAMqBX,CAAA,CAAYU,CAAZ,CANrB,GAOEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CARZ,EACMnB,CAAAqB,UAAA,CAAkBd,CAAA,CAAYU,CAAZ,CAAlB,CAAJ,CACEX,CAAA,CAAQW,CAAR,CADF,CACkBV,CAAA,CAAYU,CAAZ,CADlB,CAGE,OAAOX,CAAA,CAAQW,CAAR,CASb,IAAIE,CAAJ,CAIE,IAAKF,CAAL,GAFAK,EAEahB,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBK,CAAA,CAAeL,CAAf,CAAtB,GAEMN,CAAA,CAAYW,CAAA,CAAeL,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBK,CAAA,CAAeL,CAAf,CALpB,CAlCU,CAThB,CAEA;MAAOX,EA1BqE,CAA3D,CA5BvB,CAAAH,QAAA,CA4HW,cA5HX,CA4H2B,CAAC,UAAD,CAAa,QAAQ,CAACoB,CAAD,CAAW,CAErD,MAAO,KAYAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHP,CACG,CADKK,CAAA,CAASE,CAAT,CACL,EAAQzB,CAAA0B,SAAA,CAAiBR,CAAjB,CAAR,CAAkCA,CAFxB,CAZd,KA4BAS,QAAQ,CAACF,CAAD,CAAMP,CAAN,CAAa,CACxBK,CAAA,CAASE,CAAT,CAAA,CAAgBzB,CAAA4B,OAAA,CAAeV,CAAf,CADQ,CA5BrB,QA0CGW,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CA1CjB,CAF8C,CAAhC,CA5H3B,CApBsC,CAArC,CAAA,CAoME1B,MApMF,CAoMUA,MAAAC,QApMV;",
+"sources":["angular-cookies.js"],
+"names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","isDefined","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"]
+}
View
13 1.2.10/angular-csp.css
@@ -0,0 +1,13 @@
+/* Include this file in your html if you are using the CSP mode. */
+
+@charset "UTF-8";
+
+[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
+.ng-cloak, .x-ng-cloak,
+.ng-hide {
+ display: none !important;
+}
+
+ng\:form {
+ display: block;
+}
View
410 1.2.10/angular-loader.js
@@ -0,0 +1,410 @@
+/**
+ * @license AngularJS v1.2.10
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+
+(function() {'use strict';
+
+/**
+ * @description
+ *
+ * This object provides a utility for producing rich Error messages within
+ * Angular. It can be called as follows:
+ *
+ * var exampleMinErr = minErr('example');
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
+ *
+ * The above creates an instance of minErr in the example namespace. The
+ * resulting error will have a namespaced error code of example.one. The
+ * resulting error will replace {0} with the value of foo, and {1} with the
+ * value of bar. The object is not restricted in the number of arguments it can
+ * take.
+ *
+ * If fewer arguments are specified than necessary for interpolation, the extra
+ * interpolation markers will be preserved in the final string.
+ *
+ * Since data will be parsed statically during a build step, some restrictions
+ * are applied with respect to how minErr instances are created and called.
+ * Instances should have names of the form namespaceMinErr for a minErr created
+ * using minErr('namespace') . Error codes, namespaces and template strings
+ * should all be static strings, not variables or general expressions.
+ *
+ * @param {string} module The namespace to use for the new minErr instance.
+ * @returns {function(string, string, ...): Error} instance
+ */
+
+function minErr(module) {
+ return function () {
+ var code = arguments[0],
+ prefix = '[' + (module ? module + ':' : '') + code + '] ',
+ template = arguments[1],
+ templateArgs = arguments,
+ stringify = function (obj) {
+ if (typeof obj === 'function') {
+ return obj.toString().replace(/ \{[\s\S]*$/, '');
+ } else if (typeof obj === 'undefined') {
+ return 'undefined';
+ } else if (typeof obj !== 'string') {
+ return JSON.stringify(obj);
+ }
+ return obj;
+ },
+ message, i;
+
+ message = prefix + template.replace(/\{\d+\}/g, function (match) {
+ var index = +match.slice(1, -1), arg;
+
+ if (index + 2 < templateArgs.length) {
+ arg = templateArgs[index + 2];
+ if (typeof arg === 'function') {
+ return arg.toString().replace(/ ?\{[\s\S]*$/, '');
+ } else if (typeof arg === 'undefined') {
+ return 'undefined';
+ } else if (typeof arg !== 'string') {
+ return toJson(arg);
+ }
+ return arg;
+ }
+ return match;
+ });
+
+ message = message + '\nhttp://errors.angularjs.org/1.2.10/' +
+ (module ? module + '/' : '') + code;
+ for (i = 2; i < arguments.length; i++) {
+ message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
+ encodeURIComponent(stringify(arguments[i]));
+ }
+
+ return new Error(message);
+ };
+}
+
+/**
+ * @ngdoc interface
+ * @name angular.Module
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+ var $injectorMinErr = minErr('$injector');
+ var ngMinErr = minErr('ng');
+
+ function ensure(obj, name, factory) {
+ return obj[name] || (obj[name] = factory());
+ }
+
+ var angular = ensure(window, 'angular', Object);
+
+ // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
+ angular.$$minErr = angular.$$minErr || minErr;
+
+ return ensure(angular, 'module', function() {
+ /** @type {Object.<string, angular.Module>} */
+ var modules = {};
+
+ /**
+ * @ngdoc function
+ * @name angular.module
+ * @description
+ *
+ * The `angular.module` is a global place for creating, registering and retrieving Angular
+ * modules.
+ * 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.
+ *
+ *
+ * # Module
+ *
+ * A module is a collection of services, directives, filters, and configuration information.
+ * `angular.module` is used to configure the {@link AUTO.$injector $injector}.
+ *
+ * <pre>
+ * // Create a new module
+ * var myModule = angular.module('myModule', []);
+ *
+ * // register a new service
+ * myModule.value('appName', 'MyCoolApp');
+ *
+ * // configure existing services inside initialization blocks.
+ * myModule.config(function($locationProvider) {
+ * // Configure existing providers
+ * $locationProvider.hashPrefix('!');
+ * });
+ * </pre>
+ *
+ * Then you can create an injector and load your modules like this:
+ *
+ * <pre>
+ * var injector = angular.injector(['ng', 'MyModule'])
+ * </pre>
+ *
+ * However it's more likely that you'll just use
+ * {@link ng.directive:ngApp ngApp} or
+ * {@link angular.bootstrap} to simplify this process for you.
+ *
+ * @param {!string} name The name of the module to create or retrieve.
+ * @param {Array.<string>=} requires If specified then new module is being created. If
+ * unspecified then the the module is being retrieved for further configuration.
+ * @param {Function} configFn Optional configuration function for the module. Same as
+ * {@link angular.Module#methods_config Module#config()}.
+ * @returns {module} new module with the {@link angular.Module} api.
+ */
+ return function module(name, requires, configFn) {
+ var assertNotHasOwnProperty = function(name, context) {
+ if (name === 'hasOwnProperty') {
+ throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
+ }
+ };
+
+ assertNotHasOwnProperty(name, 'module');
+ if (requires && modules.hasOwnProperty(name)) {
+ modules[name] = null;
+ }
+ return ensure(modules, name, function() {
+ if (!requires) {
+ throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
+ "the module name or forgot to load it. If registering a module ensure that you " +
+ "specify the dependencies as the second argument.", name);
+ }
+
+ /** @type {!Array.<Array.<*>>} */
+ var invokeQueue = [];
+
+ /** @type {!Array.<Function>} */
+ var runBlocks = [];
+
+ var config = invokeLater('$injector', 'invoke');
+
+ /** @type {angular.Module} */
+ var moduleInstance = {
+ // Private state
+ _invokeQueue: invokeQueue,
+ _runBlocks: runBlocks,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#requires
+ * @propertyOf angular.Module
+ * @returns {Array.<string>} List of module names which must be loaded before this module.
+ * @description
+ * Holds the list of modules which the injector will load before the current module is
+ * loaded.
+ */
+ requires: requires,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#name
+ * @propertyOf angular.Module
+ * @returns {string} Name of the module.
+ * @description
+ */
+ name: name,
+
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#provider
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {Function} providerType Construction function for creating new instance of the
+ * service.
+ * @description
+ * See {@link AUTO.$provide#provider $provide.provider()}.
+ */
+ provider: invokeLater('$provide', 'provider'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#factory
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {Function} providerFunction Function for creating new instance of the service.
+ * @description
+ * See {@link AUTO.$provide#factory $provide.factory()}.
+ */
+ factory: invokeLater('$provide', 'factory'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#service
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {Function} constructor A constructor function that will be instantiated.
+ * @description
+ * See {@link AUTO.$provide#service $provide.service()}.
+ */
+ service: invokeLater('$provide', 'service'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#value
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {*} object Service instance object.
+ * @description
+ * See {@link AUTO.$provide#value $provide.value()}.
+ */
+ value: invokeLater('$provide', 'value'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#constant
+ * @methodOf angular.Module
+ * @param {string} name constant name
+ * @param {*} object Constant value.
+ * @description
+ * Because the constant are fixed, they get applied before other provide methods.
+ * See {@link AUTO.$provide#constant $provide.constant()}.
+ */
+ constant: invokeLater('$provide', 'constant', 'unshift'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#animation
+ * @methodOf angular.Module
+ * @param {string} name animation name
+ * @param {Function} animationFactory Factory function for creating new instance of an
+ * animation.
+ * @description
+ *
+ * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
+ *
+ *
+ * Defines an animation hook that can be later used with
+ * {@link ngAnimate.$animate $animate} service and directives that use this service.
+ *
+ * <pre>
+ * module.animation('.animation-name', function($inject1, $inject2) {
+ * return {
+ * eventName : function(element, done) {
+ * //code to run the animation
+ * //once complete, then run done()
+ * return function cancellationFunction(element) {
+ * //code to cancel the animation
+ * }
+ * }
+ * }
+ * })
+ * </pre>
+ *
+ * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and
+ * {@link ngAnimate ngAnimate module} for more information.
+ */
+ animation: invokeLater('$animateProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#filter
+ * @methodOf angular.Module
+ * @param {string} name Filter name.
+ * @param {Function} filterFactory Factory function for creating new instance of filter.
+ * @description
+ * See {@link ng.$filterProvider#register $filterProvider.register()}.
+ */
+ filter: invokeLater('$filterProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#controller
+ * @methodOf angular.Module
+ * @param {string|Object} name Controller name, or an object map of controllers where the
+ * keys are the names and the values are the constructors.
+ * @param {Function} constructor Controller constructor function.
+ * @description
+ * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+ */
+ controller: invokeLater('$controllerProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#directive
+ * @methodOf angular.Module
+ * @param {string|Object} name Directive name, or an object map of directives where the
+ * keys are the names and the values are the factories.
+ * @param {Function} directiveFactory Factory function for creating new instance of
+ * directives.
+ * @description
+ * See {@link ng.$compileProvider#methods_directive $compileProvider.directive()}.
+ */
+ directive: invokeLater('$compileProvider', 'directive'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#config
+ * @methodOf angular.Module
+ * @param {Function} configFn Execute this function on module load. Useful for service
+ * configuration.
+ * @description
+ * Use this method to register work which needs to be performed on module loading.
+ */
+ config: config,
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#run
+ * @methodOf angular.Module
+ * @param {Function} initializationFn Execute this function after injector creation.
+ * Useful for application initialization.
+ * @description
+ * Use this method to register work which should be performed when the injector is done
+ * loading all modules.
+ */
+ run: function(block) {
+ runBlocks.push(block);
+ return this;
+ }
+ };
+
+ if (configFn) {
+ config(configFn);
+ }
+
+ return moduleInstance;
+
+ /**
+ * @param {string} provider
+ * @param {string} method
+ * @param {String=} insertMethod
+ * @returns {angular.Module}
+ */
+ function invokeLater(provider, method, insertMethod) {
+ return function() {
+ invokeQueue[insertMethod || 'push']([provider, method, arguments]);
+ return moduleInstance;
+ };
+ }
+ });
+ };
+ });
+
+}
+
+setupModuleLoader(window);
+})(window);
+
+/**
+ * Closure compiler type information
+ *
+ * @typedef { {
+ * requires: !Array.<string>,
+ * invokeQueue: !Array.<Array.<*>>,
+ *
+ * service: function(string, Function):angular.Module,
+