Permalink
Browse files

v1.2.14

  • Loading branch information...
1 parent 00cd5e2 commit e90f27546f23d8ea38d5145e6eb6ff607be1a4d7 @NgDashboard NgDashboard committed Mar 1, 2014
Showing with 74,583 additions and 0 deletions.
  1. BIN 1.2.14/angular-1.2.14.zip
  2. +1,614 −0 1.2.14/angular-animate.js
  3. +27 −0 1.2.14/angular-animate.min.js
  4. +8 −0 1.2.14/angular-animate.min.js.map
  5. +197 −0 1.2.14/angular-cookies.js
  6. +8 −0 1.2.14/angular-cookies.min.js
  7. +8 −0 1.2.14/angular-cookies.min.js.map
  8. +18 −0 1.2.14/angular-csp.css
  9. +414 −0 1.2.14/angular-loader.js
  10. +9 −0 1.2.14/angular-loader.min.js
  11. +8 −0 1.2.14/angular-loader.min.js.map
  12. +2,160 −0 1.2.14/angular-mocks.js
  13. +597 −0 1.2.14/angular-resource.js
  14. +13 −0 1.2.14/angular-resource.min.js
  15. +8 −0 1.2.14/angular-resource.min.js.map
  16. +922 −0 1.2.14/angular-route.js
  17. +14 −0 1.2.14/angular-route.min.js
  18. +8 −0 1.2.14/angular-route.min.js.map
  19. +624 −0 1.2.14/angular-sanitize.js
  20. +14 −0 1.2.14/angular-sanitize.min.js
  21. +8 −0 1.2.14/angular-sanitize.min.js.map
  22. +33,059 −0 1.2.14/angular-scenario.js
  23. +561 −0 1.2.14/angular-touch.js
  24. +13 −0 1.2.14/angular-touch.min.js
  25. +8 −0 1.2.14/angular-touch.min.js.map
  26. +21,053 −0 1.2.14/angular.js
  27. +206 −0 1.2.14/angular.min.js
  28. +8 −0 1.2.14/angular.min.js.map
  29. +421 −0 1.2.14/docs/components/bootstrap-3.1.1/Gruntfile.js
  30. +21 −0 1.2.14/docs/components/bootstrap-3.1.1/LICENSE
  31. +173 −0 1.2.14/docs/components/bootstrap-3.1.1/README.md
  32. +24 −0 1.2.14/docs/components/bootstrap-3.1.1/bower.json
  33. +347 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/css/bootstrap-theme.css
  34. +1 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/css/bootstrap-theme.css.map
  35. +7 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/css/bootstrap-theme.min.css
  36. +5,785 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/css/bootstrap.css
  37. +1 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/css/bootstrap.css.map
  38. +7 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/css/bootstrap.min.css
  39. BIN 1.2.14/docs/components/bootstrap-3.1.1/dist/fonts/glyphicons-halflings-regular.eot
  40. +229 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/fonts/glyphicons-halflings-regular.svg
  41. BIN 1.2.14/docs/components/bootstrap-3.1.1/dist/fonts/glyphicons-halflings-regular.ttf
  42. BIN 1.2.14/docs/components/bootstrap-3.1.1/dist/fonts/glyphicons-halflings-regular.woff
  43. +1,951 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/js/bootstrap.js
  44. +6 −0 1.2.14/docs/components/bootstrap-3.1.1/dist/js/bootstrap.min.js
  45. BIN 1.2.14/docs/components/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.eot
  46. +229 −0 1.2.14/docs/components/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.svg
  47. BIN 1.2.14/docs/components/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.ttf
  48. BIN 1.2.14/docs/components/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.woff
  49. +34 −0 1.2.14/docs/components/bootstrap-3.1.1/grunt/bs-glyphicons-data-generator.js
  50. +236 −0 1.2.14/docs/components/bootstrap-3.1.1/grunt/bs-lessdoc-parser.js
  51. +31 −0 1.2.14/docs/components/bootstrap-3.1.1/grunt/bs-raw-files-generator.js
  52. +28 −0 1.2.14/docs/components/bootstrap-3.1.1/grunt/shrinkwrap.js
  53. +137 −0 1.2.14/docs/components/bootstrap-3.1.1/js/affix.js
  54. +88 −0 1.2.14/docs/components/bootstrap-3.1.1/js/alert.js
  55. +107 −0 1.2.14/docs/components/bootstrap-3.1.1/js/button.js
  56. +205 −0 1.2.14/docs/components/bootstrap-3.1.1/js/carousel.js
  57. +170 −0 1.2.14/docs/components/bootstrap-3.1.1/js/collapse.js
  58. +147 −0 1.2.14/docs/components/bootstrap-3.1.1/js/dropdown.js
  59. +243 −0 1.2.14/docs/components/bootstrap-3.1.1/js/modal.js
  60. +110 −0 1.2.14/docs/components/bootstrap-3.1.1/js/popover.js
  61. +153 −0 1.2.14/docs/components/bootstrap-3.1.1/js/scrollspy.js
  62. +125 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tab.js
  63. +54 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/index.html
  64. +50 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/affix.js
  65. +62 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/alert.js
  66. +122 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/button.js
  67. +110 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/carousel.js
  68. +164 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/collapse.js
  69. +218 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/dropdown.js
  70. +195 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/modal.js
  71. +69 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/phantom.js
  72. +133 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/popover.js
  73. +36 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/scrollspy.js
  74. +86 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/tab.js
  75. +432 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/unit/tooltip.js
  76. +4 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/vendor/jquery.js
  77. +245 −0 1.2.14/docs/components/bootstrap-3.1.1/js/tests/vendor/qunit.css
Sorry, we could not display the entire diff because too many files (1,754) changed.
View
BIN 1.2.14/angular-1.2.14.zip
Binary file not shown.
View
1,614 1.2.14/angular-animate.js
@@ -0,0 +1,1614 @@
+/**
+ * @license AngularJS v1.2.14
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* jshint maxlen: false */
+
+/**
+ * @ngdoc module
+ * @name ngAnimate
+ * @description
+ *
+ * # ngAnimate
+ *
+ * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.
+ *
+ *
+ * <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) |
+ * | {@link ng.directive:form#usage_animations form} | add and remove (dirty, pristine, valid, invalid & all other validations) |
+ * | {@link ng.directive:ngModel#usage_animations ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) |
+ *
+ * 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:
+ *
+ * ```html
+ * <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>
+ * ```
+ *
+ * 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:
+ *
+ * ```html
+ * <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>
+ * ```
+ *
+ * The following code below demonstrates how to perform animations using **CSS animations** with Angular:
+ *
+ * ```html
+ * <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>
+ * ```
+ *
+ * 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).
+ *
+ * ```css
+ * .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;
+ * }
+ * ```
+ *
+ * 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:
+ *
+ * ```js
+ * 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);
+ * ```
+ *
+ * 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.
+ *
+ * ```js
+ * //!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) { }
+ * };
+ * });
+ * ```
+ *
+ * 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 provider
+ * @name $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.
+ *
+ */
+
+ //this private service is only used within CSS-enabled animations
+ //IE8 + IE9 do not support rAF natively, but that is fine since they
+ //also don't support transitions and keyframes which means that the code
+ //below will never be used by the two browsers.
+ .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) {
+ var bod = $document[0].body;
+ return function(fn) {
+ //the returned function acts as the cancellation function
+ return $$rAF(function() {
+ //the line below will force the browser to perform a repaint
+ //so that all the animated elements within the animation frame
+ //will be properly updated and drawn on screen. This is
+ //required to perform multi-class CSS based animations with
+ //Firefox. DO NOT REMOVE THIS LINE.
+ var a = bod.offsetWidth + 1;
+ fn();
+ });
+ };
+ }])
+
+ .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 stripCommentsFromElement(element) {
+ return angular.element(extractElementNode(element));
+ }
+
+ function isMatchingElement(elm1, elm2) {
+ return extractElementNode(elm1) == extractElementNode(elm2);
+ }
+
+ $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document',
+ function($delegate, $injector, $sniffer, $rootElement, $$asyncCallback, $rootScope, $document) {
+
+ var globalAnimationCounter = 0;
+ $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 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;
+ }
+ }
+
+ function animationRunner(element, animationEvent, 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
+ var node = element[0];
+ if(!node) {
+ return;
+ }
+
+ var isSetClassOperation = animationEvent == 'setClass';
+ var isClassBased = isSetClassOperation ||
+ animationEvent == 'addClass' ||
+ animationEvent == 'removeClass';
+
+ var classNameAdd, classNameRemove;
+ if(angular.isArray(className)) {
+ classNameAdd = className[0];
+ classNameRemove = className[1];
+ className = classNameAdd + ' ' + classNameRemove;
+ }
+
+ var currentClassName = element.attr('class');
+ var classes = currentClassName + ' ' + className;
+ if(!isAnimatableClassName(classes)) {
+ return;
+ }
+
+ var beforeComplete = noop,
+ beforeCancel = [],
+ before = [],
+ afterComplete = noop,
+ afterCancel = [],
+ after = [];
+
+ var animationLookup = (' ' + classes).replace(/\s+/g,'.');
+ forEach(lookup(animationLookup), function(animationFactory) {
+ var created = registerAnimation(animationFactory, animationEvent);
+ if(!created && isSetClassOperation) {
+ registerAnimation(animationFactory, 'addClass');
+ registerAnimation(animationFactory, 'removeClass');
+ }
+ });
+
+ function registerAnimation(animationFactory, event) {
+ var afterFn = animationFactory[event];
+ var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)];
+ if(afterFn || beforeFn) {
+ if(event == 'leave') {
+ beforeFn = afterFn;
+ //when set as null then animation knows to skip this phase
+ afterFn = null;
+ }
+ after.push({
+ event : event, fn : afterFn
+ });
+ before.push({
+ event : event, fn : beforeFn
+ });
+ return true;
+ }
+ }
+
+ function run(fns, cancellations, allCompleteFn) {
+ var animations = [];
+ forEach(fns, function(animation) {
+ animation.fn && animations.push(animation);
+ });
+
+ var count = 0;
+ function afterAnimationComplete(index) {
+ if(cancellations) {
+ (cancellations[index] || noop)();
+ if(++count < animations.length) return;
+ cancellations = null;
+ }
+ allCompleteFn();
+ }
+
+ //The code below adds directly to the array in order to work with
+ //both sync and async animations. Sync animations are when the done()
+ //operation is called right away. DO NOT REFACTOR!
+ forEach(animations, function(animation, index) {
+ var progress = function() {
+ afterAnimationComplete(index);
+ };
+ switch(animation.event) {
+ case 'setClass':
+ cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress));
+ break;
+ case 'addClass':
+ cancellations.push(animation.fn(element, classNameAdd || className, progress));
+ break;
+ case 'removeClass':
+ cancellations.push(animation.fn(element, classNameRemove || className, progress));
+ break;
+ default:
+ cancellations.push(animation.fn(element, progress));
+ break;
+ }
+ });
+
+ if(cancellations && cancellations.length === 0) {
+ allCompleteFn();
+ }
+ }
+
+ return {
+ node : node,
+ event : animationEvent,
+ className : className,
+ isClassBased : isClassBased,
+ isSetClassOperation : isSetClassOperation,
+ before : function(allCompleteFn) {
+ beforeComplete = allCompleteFn;
+ run(before, beforeCancel, function() {
+ beforeComplete = noop;
+ allCompleteFn();
+ });
+ },
+ after : function(allCompleteFn) {
+ afterComplete = allCompleteFn;
+ run(after, afterCancel, function() {
+ afterComplete = noop;
+ allCompleteFn();
+ });
+ },
+ cancel : function() {
+ if(beforeCancel) {
+ forEach(beforeCancel, function(cancelFn) {
+ (cancelFn || noop)(true);
+ });
+ beforeComplete(true);
+ }
+ if(afterCancel) {
+ forEach(afterCancel, function(cancelFn) {
+ (cancelFn || noop)(true);
+ });
+ afterComplete(true);
+ }
+ }
+ };
+ }
+
+ /**
+ * @ngdoc service
+ * @name $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 method
+ * @name $animate#enter
+ * @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 {DOMElement} element the element that will be the focus of the enter animation
+ * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation
+ * @param {DOMElement} 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() {
+ element = stripCommentsFromElement(element);
+ performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback);
+ });
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#leave
+ * @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 {DOMElement} 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', stripCommentsFromElement(element), null, null, function() {
+ $delegate.leave(element);
+ }, doneCallback);
+ });
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#move
+ * @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 {DOMElement} element the element that will be the focus of the move animation
+ * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation
+ * @param {DOMElement} 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() {
+ element = stripCommentsFromElement(element);
+ performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback);
+ });
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#addClass
+ *
+ * @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 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 {DOMElement} 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) {
+ element = stripCommentsFromElement(element);
+ performAnimation('addClass', className, element, null, null, function() {
+ $delegate.addClass(element, className);
+ }, doneCallback);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#removeClass
+ *
+ * @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 {DOMElement} 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) {
+ element = stripCommentsFromElement(element);
+ performAnimation('removeClass', className, element, null, null, function() {
+ $delegate.removeClass(element, className);
+ }, doneCallback);
+ },
+
+ /**
+ *
+ * @ngdoc function
+ * @name ng.$animate#setClass
+ * @methodOf ng.$animate
+ * @function
+ * @description Adds and/or removes the given CSS classes to and from the element.
+ * Once complete, the done() callback will be fired (if provided).
+ * @param {DOMElement} element the element which will it's CSS classes changed
+ * removed from it
+ * @param {string} add the CSS classes which will be added to the element
+ * @param {string} remove the CSS class which will be removed from the element
+ * @param {Function=} done the callback function (if provided) that will be fired after the
+ * CSS classes have been set on the element
+ */
+ setClass : function(element, add, remove, doneCallback) {
+ element = stripCommentsFromElement(element);
+ performAnimation('setClass', [add, remove], element, null, null, function() {
+ $delegate.setClass(element, add, remove);
+ }, doneCallback);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#enabled
+ * @function
+ *
+ * @param {boolean=} value If provided then set the animation on or off.
+ * @param {DOMElement=} 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 runner = animationRunner(element, animationEvent, className);
+ if(!runner) {
+ fireDOMOperation();
+ fireBeforeCallbackAsync();
+ fireAfterCallbackAsync();
+ fireDoneCallbackAsync();
+ return;
+ }
+
+ className = runner.className;
+ var elementEvents = angular.element._data(runner.node);
+ elementEvents = elementEvents && elementEvents.events;
+
+ if (!parentElement) {
+ parentElement = afterElement ? afterElement.parent() : element.parent();
+ }
+
+ var ngAnimateState = element.data(NG_ANIMATE_STATE) || {};
+ var runningAnimations = ngAnimateState.active || {};
+ var totalActiveAnimations = ngAnimateState.totalActive || 0;
+ var lastAnimation = ngAnimateState.last;
+
+ //only allow animations if the currently running animation is not structural
+ //or if there is no animation running at all
+ var skipAnimations = runner.isClassBased ?
+ ngAnimateState.disabled || (lastAnimation && !lastAnimation.isClassBased) :
+ false;
+
+ //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 an animation was found.
+ if (skipAnimations || animationsDisabled(element, parentElement)) {
+ fireDOMOperation();
+ fireBeforeCallbackAsync();
+ fireAfterCallbackAsync();
+ closeAnimation();
+ return;
+ }
+
+ var skipAnimation = false;
+ if(totalActiveAnimations > 0) {
+ var animationsToCancel = [];
+ if(!runner.isClassBased) {
+ if(animationEvent == 'leave' && runningAnimations['ng-leave']) {
+ skipAnimation = true;
+ } else {
+ //cancel all animations when a structural animation takes place
+ for(var klass in runningAnimations) {
+ animationsToCancel.push(runningAnimations[klass]);
+ cleanup(element, klass);
+ }
+ runningAnimations = {};
+ totalActiveAnimations = 0;
+ }
+ } else if(lastAnimation.event == 'setClass') {
+ animationsToCancel.push(lastAnimation);
+ cleanup(element, className);
+ }
+ else if(runningAnimations[className]) {
+ var current = runningAnimations[className];
+ if(current.event == animationEvent) {
+ skipAnimation = true;
+ } else {
+ animationsToCancel.push(current);
+ cleanup(element, className);
+ }
+ }
+
+ if(animationsToCancel.length > 0) {
+ forEach(animationsToCancel, function(operation) {
+ operation.cancel();
+ });
+ }
+ }
+
+ if(runner.isClassBased && !runner.isSetClassOperation && !skipAnimation) {
+ skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR
+ }
+
+ if(skipAnimation) {
+ fireBeforeCallbackAsync();
+ fireAfterCallbackAsync();
+ fireDoneCallbackAsync();
+ return;
+ }
+
+ if(animationEvent == 'leave') {
+ //there's no need to ever remove the listener since the element
+ //will be removed (destroyed) after the leave animation ends or
+ //is cancelled midway
+ element.one('$destroy', function(e) {
+ var element = angular.element(this);
+ var state = element.data(NG_ANIMATE_STATE);
+ if(state) {
+ var activeLeaveAnimation = state.active['ng-leave'];
+ if(activeLeaveAnimation) {
+ activeLeaveAnimation.cancel();
+ cleanup(element, 'ng-leave');
+ }
+ }
+ });
+ }
+
+ //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);
+
+ var localAnimationCount = globalAnimationCounter++;
+ totalActiveAnimations++;
+ runningAnimations[className] = runner;
+
+ element.data(NG_ANIMATE_STATE, {
+ last : runner,
+ active : runningAnimations,
+ index : localAnimationCount,
+ totalActive : totalActiveAnimations
+ });
+
+ //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
+ fireBeforeCallbackAsync();
+ runner.before(function(cancelled) {
+ var data = element.data(NG_ANIMATE_STATE);
+ cancelled = cancelled ||
+ !data || !data.active[className] ||
+ (runner.isClassBased && data.active[className].event != animationEvent);
+
+ fireDOMOperation();
+ if(cancelled === true) {
+ closeAnimation();
+ } else {
+ fireAfterCallbackAsync();
+ runner.after(closeAnimation);
+ }
+ });
+
+ function fireDOMCallback(animationPhase) {
+ var eventName = '$animate:' + animationPhase;
+ if(elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) {
+ $$asyncCallback(function() {
+ element.triggerHandler(eventName, {
+ event : animationEvent,
+ className : className
+ });
+ });
+ }
+ }
+
+ function fireBeforeCallbackAsync() {
+ fireDOMCallback('before');
+ }
+
+ function fireAfterCallbackAsync() {
+ fireDOMCallback('after');
+ }
+
+ function fireDoneCallbackAsync() {
+ fireDOMCallback('close');
+ if(doneCallback) {
+ $$asyncCallback(function() {
+ doneCallback();
+ });
+ }
+ }
+
+ //it is less complicated to use a flag than managing and canceling
+ //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(runner.isClassBased) {
+ cleanup(element, className);
+ } else {
+ $$asyncCallback(function() {
+ var data = element.data(NG_ANIMATE_STATE) || {};
+ if(localAnimationCount == data.index) {
+ cleanup(element, className, animationEvent);
+ }
+ });
+ element.data(NG_ANIMATE_STATE, data);
+ }
+ }
+ fireDoneCallbackAsync();
+ }
+ }
+ }
+
+ function cancelChildAnimations(element) {
+ var node = extractElementNode(element);
+ if (node) {
+ var nodes = angular.isFunction(node.getElementsByClassName) ?
+ node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) :
+ node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME);
+ forEach(nodes, function(element) {
+ element = angular.element(element);
+ var data = element.data(NG_ANIMATE_STATE);
+ if(data && data.active) {
+ forEach(data.active, function(runner) {
+ runner.cancel();
+ });
+ }
+ });
+ }
+ }
+
+ function cleanup(element, className) {
+ if(isMatchingElement(element, $rootElement)) {
+ if(!rootAnimateState.disabled) {
+ rootAnimateState.running = false;
+ rootAnimateState.structural = false;
+ }
+ } else if(className) {
+ var data = element.data(NG_ANIMATE_STATE) || {};
+
+ var removeAnimations = className === true;
+ if(!removeAnimations && data.active && data.active[className]) {
+ data.totalActive--;
+ delete data.active[className];
+ }
+
+ if(removeAnimations || !data.totalActive) {
+ 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 || state.totalActive > 0);
+ 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 NG_ANIMATE_BLOCK_CLASS_NAME = 'ng-animate-block-transitions';
+ var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
+ var CLOSING_TIME_BUFFER = 1.5;
+ var ONE_SECOND = 1000;
+
+ var lookupCache = {};
+ var parentCounter = 0;
+ var animationReflowQueue = [];
+ var cancelAnimationReflow;
+ function afterReflow(element, callback) {
+ if(cancelAnimationReflow) {
+ cancelAnimationReflow();
+ }
+ animationReflowQueue.push(callback);
+ cancelAnimationReflow = $$animateReflow(function() {
+ forEach(animationReflowQueue, function(fn) {
+ fn();
+ });
+
+ animationReflowQueue = [];
+ cancelAnimationReflow = null;
+ lookupCache = {};
+ });
+ }
+
+ var closingTimer = null;
+ var closingTimestamp = 0;
+ var animationElementQueue = [];
+ function animationCloseHandler(element, totalTime) {
+ var node = extractElementNode(element);
+ element = angular.element(node);
+
+ //this item will be garbage collected by the closing
+ //animation timeout
+ animationElementQueue.push(element);
+
+ //but it may not need to cancel out the existing timeout
+ //if the timestamp is less than the previous one
+ var futureTimestamp = Date.now() + (totalTime * 1000);
+ if(futureTimestamp <= closingTimestamp) {
+ return;
+ }
+
+ $timeout.cancel(closingTimer);
+
+ closingTimestamp = futureTimestamp;
+ closingTimer = $timeout(function() {
+ closeAllAnimations(animationElementQueue);
+ animationElementQueue = [];
+ }, totalTime, false);
+ }
+
+ function closeAllAnimations(elements) {
+ forEach(elements, function(element) {
+ var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
+ if(elementData) {
+ (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(animationEvent, element, className, calculationDecorator) {
+ var cacheKey = getCacheKey(element);
+ var eventCacheKey = cacheKey + ' ' + className;
+ var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0;
+
+ var stagger = {};
+ 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 formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {};
+
+ var timings = calculationDecorator(function() {
+ return getElementAnimationDetails(element, eventCacheKey);
+ });
+
+ var transitionDuration = timings.transitionDuration;
+ var animationDuration = timings.animationDuration;
+ if(transitionDuration === 0 && animationDuration === 0) {
+ element.removeClass(className);
+ return false;
+ }
+
+ element.data(NG_ANIMATE_CSS_DATA_KEY, {
+ running : formerData.running || 0,
+ itemIndex : itemIndex,
+ stagger : stagger,
+ timings : timings,
+ closeAnimationFn : noop
+ });
+
+ //temporarily disable the transition so that the enter styles
+ //don't animate twice (this is here to avoid a bug in Chrome/FF).
+ var isCurrentlyAnimating = formerData.running > 0 || animationEvent == 'setClass';
+ if(transitionDuration > 0) {
+ blockTransitions(element, className, isCurrentlyAnimating);
+ }
+
+ //staggering keyframe animations work by adjusting the `animation-delay` CSS property
+ //on the given element, however, the delay value can only calculated after the reflow
+ //since by that time $animate knows how many elements are being animated. Therefore,
+ //until the reflow occurs the element needs to be blocked (where the keyframe animation
+ //is set to `none 0s`). This blocking mechanism should only be set for when a stagger
+ //animation is detected and when the element item index is greater than 0.
+ if(animationDuration > 0 && stagger.animationDelay > 0 && stagger.animationDuration === 0) {
+ blockKeyframeAnimations(element);
+ }
+
+ return true;
+ }
+
+ function isStructuralAnimation(className) {
+ return className == 'ng-enter' || className == 'ng-move' || className == 'ng-leave';
+ }
+
+ function blockTransitions(element, className, isAnimating) {
+ if(isStructuralAnimation(className) || !isAnimating) {
+ extractElementNode(element).style[TRANSITION_PROP + PROPERTY_KEY] = 'none';
+ } else {
+ element.addClass(NG_ANIMATE_BLOCK_CLASS_NAME);
+ }
+ }
+
+ function blockKeyframeAnimations(element) {
+ extractElementNode(element).style[ANIMATION_PROP] = 'none 0s';
+ }
+
+ function unblockTransitions(element, className) {
+ var prop = TRANSITION_PROP + PROPERTY_KEY;
+ var node = extractElementNode(element);
+ if(node.style[prop] && node.style[prop].length > 0) {
+ node.style[prop] = '';
+ }
+ element.removeClass(NG_ANIMATE_BLOCK_CLASS_NAME);
+ }
+
+ 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(animationEvent, element, className, activeAnimationComplete) {
+ var node = extractElementNode(element);
+ var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
+ if(node.className.indexOf(className) == -1 || !elementData) {
+ activeAnimationComplete();
+ return;
+ }
+
+ var activeClassName = '';
+ forEach(className.split(' '), function(klass, i) {
+ activeClassName += (i > 0 ? ' ' : '') + klass + '-active';
+ });
+
+ var stagger = elementData.stagger;
+ var timings = elementData.timings;
+ var itemIndex = elementData.itemIndex;
+ var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration);
+ var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay);
+ var maxDelayTime = maxDelay * ONE_SECOND;
+
+ var startTime = Date.now();
+ var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT;
+
+ 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();
+ };
+
+ var staggerTime = itemIndex * (Math.max(stagger.animationDelay, stagger.transitionDelay) || 0);
+ var animationTime = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER;
+ var totalTime = (staggerTime + animationTime) * ONE_SECOND;
+
+ elementData.running++;
+ animationCloseHandler(element, totalTime);
+ 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(animationEvent, element, className, calculationDecorator) {
+ if(animateSetup(animationEvent, element, className, calculationDecorator)) {
+ return function(cancelled) {
+ cancelled && animateClose(element, className);
+ };
+ }
+ }
+
+ function animateAfter(animationEvent, element, className, afterAnimationComplete) {
+ if(element.data(NG_ANIMATE_CSS_DATA_KEY)) {
+ return animateRun(animationEvent, element, className, afterAnimationComplete);
+ } else {
+ animateClose(element, className);
+ afterAnimationComplete();
+ }
+ }
+
+ function animate(animationEvent, 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(animationEvent, 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, className);
+ 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(animationEvent, element, className, animationComplete);
+ });
+
+ return function(cancelled) {
+ (cancel || noop)(cancelled);
+ };
+ }
+
+ function animateClose(element, className) {
+ element.removeClass(className);
+ var data = element.data(NG_ANIMATE_CSS_DATA_KEY);
+ if(data) {
+ if(data.running) {
+ data.running--;
+ }
+ if(!data.running || data.running === 0) {
+ element.removeData(NG_ANIMATE_CSS_DATA_KEY);
+ }
+ }
+ }
+
+ return {
+ enter : function(element, animationCompleted) {
+ return animate('enter', element, 'ng-enter', animationCompleted);
+ },
+
+ leave : function(element, animationCompleted) {
+ return animate('leave', element, 'ng-leave', animationCompleted);
+ },
+
+ move : function(element, animationCompleted) {
+ return animate('move', element, 'ng-move', animationCompleted);
+ },
+
+ beforeSetClass : function(element, add, remove, animationCompleted) {
+ var className = suffixClasses(remove, '-remove') + ' ' +
+ suffixClasses(add, '-add');
+ var cancellationMethod = animateBefore('setClass', element, className, 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(remove);
+ element.addClass(add);
+ var timings = fn();
+ element.attr('class', klass);
+ return timings;
+ });
+
+ if(cancellationMethod) {
+ afterReflow(element, function() {
+ unblockTransitions(element, className);
+ unblockKeyframeAnimations(element);
+ animationCompleted();
+ });
+ return cancellationMethod;
+ }
+ animationCompleted();
+ },
+
+ beforeAddClass : function(element, className, animationCompleted) {
+ var cancellationMethod = animateBefore('addClass', 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, className);
+ unblockKeyframeAnimations(element);
+ animationCompleted();
+ });
+ return cancellationMethod;
+ }
+ animationCompleted();
+ },
+
+ setClass : function(element, add, remove, animationCompleted) {
+ remove = suffixClasses(remove, '-remove');
+ add = suffixClasses(add, '-add');
+ var className = remove + ' ' + add;
+ return animateAfter('setClass', element, className, animationCompleted);
+ },
+
+ addClass : function(element, className, animationCompleted) {
+ return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted);
+ },
+
+ beforeRemoveClass : function(element, className, animationCompleted) {
+ var cancellationMethod = animateBefore('removeClass', 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, className);
+ unblockKeyframeAnimations(element);
+ animationCompleted();
+ });
+ return cancellationMethod;
+ }
+ animationCompleted();
+ },
+
+ removeClass : function(element, className, animationCompleted) {
+ return animateAfter('removeClass', 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
27 1.2.14/angular-animate.min.js
@@ -0,0 +1,27 @@
+/*
+ AngularJS v1.2.14
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(G,g,Q){'use strict';g.module("ngAnimate",["ng"]).factory("$$animateReflow",["$$rAF","$document",function(g,G){return function(e){return g(function(){e()})}}]).config(["$provide","$animateProvider",function(W,H){function e(e){for(var m=0;m<e.length;m++){var g=e[m];if(g.nodeType==ba)return g}}function B(m){return g.element(e(m))}var r=g.noop,m=g.forEach,ga=H.$$selectors,ba=1,h="$$ngAnimateState",K="ng-animate",q={running:!0};W.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement",
+"$$asyncCallback","$rootScope","$document",function(x,G,aa,L,F,I,Q){function R(a){if(a){var b=[],c={};a=a.substr(1).split(".");(aa.transitions||aa.animations)&&a.push("");for(var d=0;d<a.length;d++){var f=a[d],e=ga[f];e&&!c[f]&&(b.push(G.get(e)),c[f]=!0)}return b}}function M(a,b,c){function d(a,b){var c=a[b],d=a["before"+b.charAt(0).toUpperCase()+b.substr(1)];if(c||d)return"leave"==b&&(d=c,c=null),u.push({event:b,fn:c}),p.push({event:b,fn:d}),!0}function f(b,d,e){var f=[];m(b,function(a){a.fn&&f.push(a)});
+var l=0;m(f,function(b,m){var C=function(){a:{if(d){(d[m]||r)();if(++l<f.length)break a;d=null}e()}};switch(b.event){case "setClass":d.push(b.fn(a,n,A,C));break;case "addClass":d.push(b.fn(a,n||c,C));break;case "removeClass":d.push(b.fn(a,A||c,C));break;default:d.push(b.fn(a,C))}});d&&0===d.length&&e()}var e=a[0];if(e){var h="setClass"==b,q=h||"addClass"==b||"removeClass"==b,n,A;g.isArray(c)&&(n=c[0],A=c[1],c=n+" "+A);var y=a.attr("class")+" "+c;if(T(y)){var v=r,z=[],p=[],w=r,l=[],u=[],y=(" "+y).replace(/\s+/g,
+".");m(R(y),function(a){!d(a,b)&&h&&(d(a,"addClass"),d(a,"removeClass"))});return{node:e,event:b,className:c,isClassBased:q,isSetClassOperation:h,before:function(a){v=a;f(p,z,function(){v=r;a()})},after:function(a){w=a;f(u,l,function(){w=r;a()})},cancel:function(){z&&(m(z,function(a){(a||r)(!0)}),v(!0));l&&(m(l,function(a){(a||r)(!0)}),w(!0))}}}}}function s(a,b,c,d,f,e,q){function r(d){var e="$animate:"+d;w&&(w[e]&&0<w[e].length)&&F(function(){c.triggerHandler(e,{event:a,className:b})})}function n(){r("before")}
+function A(){r("after")}function y(){r("close");q&&F(function(){q()})}function v(){v.hasBeenRun||(v.hasBeenRun=!0,e())}function z(){if(!z.hasBeenRun){z.hasBeenRun=!0;var d=c.data(h);d&&(p.isClassBased?E(c,b):(F(function(){var d=c.data(h)||{};s==d.index&&E(c,b,a)}),c.data(h,d)));y()}}var p=M(c,a,b);if(p){b=p.className;var w=g.element._data(p.node),w=w&&w.events;d||(d=f?f.parent():c.parent());var l=c.data(h)||{};f=l.active||{};var u=l.totalActive||0,C=l.last;if(p.isClassBased&&(l.disabled||C&&!C.isClassBased)||
+O(c,d))v(),n(),A(),z();else{d=!1;if(0<u){l=[];if(p.isClassBased)"setClass"==C.event?(l.push(C),E(c,b)):f[b]&&(x=f[b],x.event==a?d=!0:(l.push(x),E(c,b)));else if("leave"==a&&f["ng-leave"])d=!0;else{for(var x in f)l.push(f[x]),E(c,x);f={};u=0}0<l.length&&m(l,function(a){a.cancel()})}!p.isClassBased||(p.isSetClassOperation||d)||(d="addClass"==a==c.hasClass(b));if(d)n(),A(),y();else{if("leave"==a)c.one("$destroy",function(a){a=g.element(this);var b=a.data(h);b&&(b=b.active["ng-leave"])&&(b.cancel(),E(a,
+"ng-leave"))});c.addClass(K);var s=P++;u++;f[b]=p;c.data(h,{last:p,active:f,index:s,totalActive:u});n();p.before(function(d){var e=c.data(h);d=d||!e||!e.active[b]||p.isClassBased&&e.active[b].event!=a;v();!0===d?z():(A(),p.after(z))})}}}else v(),n(),A(),y()}function U(a){if(a=e(a))a=g.isFunction(a.getElementsByClassName)?a.getElementsByClassName(K):a.querySelectorAll("."+K),m(a,function(a){a=g.element(a);(a=a.data(h))&&a.active&&m(a.active,function(a){a.cancel()})})}function E(a,b){if(e(a)==e(L))q.disabled||
+(q.running=!1,q.structural=!1);else if(b){var c=a.data(h)||{},d=!0===b;!d&&(c.active&&c.active[b])&&(c.totalActive--,delete c.active[b]);if(d||!c.totalActive)a.removeClass(K),a.removeData(h)}}function O(a,b){if(q.disabled)return!0;if(e(a)==e(L))return q.disabled||q.running;do{if(0===b.length)break;var c=e(b)==e(L),d=c?q:b.data(h),d=d&&(!!d.disabled||d.running||0<d.totalActive);if(c||d)return d;if(c)break}while(b=b.parent());return!0}var P=0;L.data(h,q);I.$$postDigest(function(){I.$$postDigest(function(){q.running=
+!1})});var V=H.classNameFilter(),T=V?function(a){return V.test(a)}:function(){return!0};return{enter:function(a,b,c,d){this.enabled(!1,a);x.enter(a,b,c);I.$$postDigest(function(){a=B(a);s("enter","ng-enter",a,b,c,r,d)})},leave:function(a,b){U(a);this.enabled(!1,a);I.$$postDigest(function(){s("leave","ng-leave",B(a),null,null,function(){x.leave(a)},b)})},move:function(a,b,c,d){U(a);this.enabled(!1,a);x.move(a,b,c);I.$$postDigest(function(){a=B(a);s("move","ng-move",a,b,c,r,d)})},addClass:function(a,
+b,c){a=B(a);s("addClass",b,a,null,null,function(){x.addClass(a,b)},c)},removeClass:function(a,b,c){a=B(a);s("removeClass",b,a,null,null,function(){x.removeClass(a,b)},c)},setClass:function(a,b,c,d){a=B(a);s("setClass",[b,c],a,null,null,function(){x.setClass(a,b,c)},d)},enabled:function(a,b){switch(arguments.length){case 2:if(a)E(b);else{var c=b.data(h)||{};c.disabled=!0;b.data(h,c)}break;case 1:q.disabled=!a;break;default:a=!q.disabled}return!!a}}}]);H.register("",["$window","$sniffer","$timeout",
+"$$animateReflow",function(h,q,B,L){function F(a,k){S&&S();X.push(k);S=L(function(){m(X,function(a){a()});X=[];S=null;N={}})}function I(a,k){var b=e(a);a=g.element(b);Z.push(a);b=Date.now()+1E3*k;b<=fa||(B.cancel(ea),fa=b,ea=B(function(){K(Z);Z=[]},k,!1))}function K(a){m(a,function(a){(a=a.data(l))&&(a.closeAnimationFn||r)()})}function R(a,k){var b=k?N[k]:null;if(!b){var c=0,d=0,e=0,f=0,l,$,t,g;m(a,function(a){if(a.nodeType==ba){a=h.getComputedStyle(a)||{};t=a[J+y];c=Math.max(M(t),c);g=a[J+v];l=a[J+
+z];d=Math.max(M(l),d);$=a[n+z];f=Math.max(M($),f);var k=M(a[n+y]);0<k&&(k*=parseInt(a[n+p],10)||1);e=Math.max(k,e)}});b={total:0,transitionPropertyStyle:g,transitionDurationStyle:t,transitionDelayStyle:l,transitionDelay:d,transitionDuration:c,animationDelayStyle:$,animationDelay:f,animationDuration:e};k&&(N[k]=b)}return b}function M(a){var k=0;a=g.isString(a)?a.split(/\s*,\s*/):[];m(a,function(a){k=Math.max(parseFloat(a)||0,k)});return k}function s(a){var k=a.parent(),b=k.data(w);b||(k.data(w,++da),
+b=da);return b+"-"+e(a).className}function U(a,k,b,c){var d=s(k),f=d+" "+b,m=N[f]?++N[f].total:0,g={};if(0<m){var h=b+"-stagger",g=d+" "+h;(d=!N[g])&&k.addClass(h);g=R(k,g);d&&k.removeClass(h)}c=c||function(a){return a()};k.addClass(b);var h=k.data(l)||{},t=c(function(){return R(k,f)});c=t.transitionDuration;d=t.animationDuration;if(0===c&&0===d)return k.removeClass(b),!1;k.data(l,{running:h.running||0,itemIndex:m,stagger:g,timings:t,closeAnimationFn:r});a=0<h.running||"setClass"==a;0<c&&E(k,b,a);
+0<d&&(0<g.animationDelay&&0===g.animationDuration)&&(e(k).style[n]="none 0s");return!0}function E(a,b,c){"ng-enter"!=b&&("ng-move"!=b&&"ng-leave"!=b)&&c?a.addClass(u):e(a).style[J+v]="none"}function O(a,b){var c=J+v,d=e(a);d.style[c]&&0<d.style[c].length&&(d.style[c]="");a.removeClass(u)}function P(a){var b=n;a=e(a);a.style[b]&&0<a.style[b].length&&(a.style[b]="")}function V(a,b,c,f){function g(a){b.off(y,h);b.removeClass(q);d(b,c);a=e(b);for(var Y in u)a.style.removeProperty(u[Y])}function h(a){a.stopPropagation();
+var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(C));Math.max(a-z,0)>=x&&b>=v&&f()}var p=e(b);a=b.data(l);if(-1!=p.className.indexOf(c)&&a){var q="";m(c.split(" "),function(a,b){q+=(0<b?" ":"")+a+"-active"});var n=a.stagger,t=a.timings,r=a.itemIndex,v=Math.max(t.transitionDuration,t.animationDuration),w=Math.max(t.transitionDelay,t.animationDelay),x=w*ca,z=Date.now(),y=A+" "+H,s="",u=[];if(0<t.transitionDuration){var B=t.transitionPropertyStyle;
+-1==B.indexOf("all")&&(s+=D+"transition-property: "+B+";",s+=D+"transition-duration: "+t.transitionDurationStyle+";",u.push(D+"transition-property"),u.push(D+"transition-duration"))}0<r&&(0<n.transitionDelay&&0===n.transitionDuration&&(s+=D+"transition-delay: "+T(t.transitionDelayStyle,n.transitionDelay,r)+"; ",u.push(D+"transition-delay")),0<n.animationDelay&&0===n.animationDuration&&(s+=D+"animation-delay: "+T(t.animationDelayStyle,n.animationDelay,r)+"; ",u.push(D+"animation-delay")));0<u.length&&
+(t=p.getAttribute("style")||"",p.setAttribute("style",t+" "+s));b.on(y,h);b.addClass(q);a.closeAnimationFn=function(){g();f()};p=(r*(Math.max(n.animationDelay,n.transitionDelay)||0)+(w+v)*W)*ca;a.running++;I(b,p);return g}f()}function T(a,b,c){var d="";m(a.split(","),function(a,Y){d+=(0<Y?",":"")+(c*b+parseInt(a,10))+"s"});return d}function a(a,b,c,e){if(U(a,b,c,e))return function(a){a&&d(b,c)}}function b(a,b,c,e){if(b.data(l))return V(a,b,c,e);d(b,c);e()}function c(c,d,e,f){var g=a(c,d,e);if(g){var h=
+g;F(d,function(){O(d,e);P(d);h=b(c,d,e,f)});return function(a){(h||r)(a)}}f()}function d(a,b){a.removeClass(b);var c=a.data(l);c&&(c.running&&c.running--,c.running&&0!==c.running||a.removeData(l))}function f(a,b){var c="";a=g.isArray(a)?a:a.split(/\s+/);m(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var D="",J,H,n,A;G.ontransitionend===Q&&G.onwebkittransitionend!==Q?(D="-webkit-",J="WebkitTransition",H="webkitTransitionEnd transitionend"):(J="transition",H="transitionend");G.onanimationend===
+Q&&G.onwebkitanimationend!==Q?(D="-webkit-",n="WebkitAnimation",A="webkitAnimationEnd animationend"):(n="animation",A="animationend");var y="Duration",v="Property",z="Delay",p="IterationCount",w="$$ngAnimateKey",l="$$ngAnimateCSS3Data",u="ng-animate-block-transitions",C=3,W=1.5,ca=1E3,N={},da=0,X=[],S,ea=null,fa=0,Z=[];return{enter:function(a,b){return c("enter",a,"ng-enter",b)},leave:function(a,b){return c("leave",a,"ng-leave",b)},move:function(a,b){return c("move",a,"ng-move",b)},beforeSetClass:function(b,
+c,d,e){var g=f(d,"-remove")+" "+f(c,"-add"),h=a("setClass",b,g,function(a){var e=b.attr("class");b.removeClass(d);b.addClass(c);a=a();b.attr("class",e);return a});if(h)return F(b,function(){O(b,g);P(b);e()}),h;e()},beforeAddClass:function(b,c,d){var e=a("addClass",b,f(c,"-add"),function(a){b.addClass(c);a=a();b.removeClass(c);return a});if(e)return F(b,function(){O(b,c);P(b);d()}),e;d()},setClass:function(a,c,d,e){d=f(d,"-remove");c=f(c,"-add");return b("setClass",a,d+" "+c,e)},addClass:function(a,
+c,d){return b("addClass",a,f(c,"-add"),d)},beforeRemoveClass:function(b,c,d){var e=a("removeClass",b,f(c,"-remove"),function(a){var d=b.attr("class");b.removeClass(c);a=a();b.attr("class",d);return a});if(e)return F(b,function(){O(b,c);P(b);d()}),e;d()},removeClass:function(a,c,d){return b("removeClass",a,f(c,"-remove"),d)}}}])}])})(window,window.angular);
+//# sourceMappingURL=angular-animate.min.js.map
View
8 1.2.14/angular-animate.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-animate.min.js",
+"lineCount":26,
+"mappings":"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",
+"sources":["angular-animate.js"],
+"names":["window","angular","undefined","module","factory","$$rAF","$document","fn","config","$provide","$animateProvider","extractElementNode","element","i","length","elm","nodeType","ELEMENT_NODE","stripCommentsFromElement","noop","forEach","selectors","$$selectors","NG_ANIMATE_STATE","NG_ANIMATE_CLASS_NAME","rootAnimateState","decorator","$delegate","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","lookup","name","matches","flagMap","classes","substr","split","transitions","animations","push","klass","selectorFactoryName","get","animationRunner","animationEvent","className","registerAnimation","animationFactory","event","afterFn","beforeFn","charAt","toUpperCase","after","before","run","fns","cancellations","allCompleteFn","animation","count","index","progress","classNameAdd","classNameRemove","node","isSetClassOperation","isClassBased","isArray","attr","currentClassName","isAnimatableClassName","beforeComplete","beforeCancel","afterComplete","afterCancel","animationLookup","replace","created","cancel","cancelFn","performAnimation","parentElement","afterElement","domOperation","doneCallback","fireDOMCallback","animationPhase","eventName","elementEvents","triggerHandler","fireBeforeCallbackAsync","fireAfterCallbackAsync","fireDoneCallbackAsync","fireDOMOperation","hasBeenRun","closeAnimation","data","runner","cleanup","localAnimationCount","_data","events","parent","ngAnimateState","runningAnimations","active","totalActiveAnimations","totalActive","lastAnimation","last","disabled","animationsDisabled","skipAnimation","animationsToCancel","current","operation","hasClass","one","e","state","activeLeaveAnimation","addClass","globalAnimationCounter","cancelled","cancelChildAnimations","nodes","isFunction","getElementsByClassName","querySelectorAll","running","structural","removeAnimations","removeClass","removeData","isRoot","result","$$postDigest","classNameFilter","test","enter","enabled","leave","move","setClass","add","remove","value","arguments","register","$window","$timeout","$$animateReflow","afterReflow","callback","cancelAnimationReflow","animationReflowQueue","lookupCache","animationCloseHandler","totalTime","animationElementQueue","futureTimestamp","Date","now","closingTimestamp","closingTimer","closeAllAnimations","elements","elementData","NG_ANIMATE_CSS_DATA_KEY","closeAnimationFn","getElementAnimationDetails","cacheKey","transitionDuration","transitionDelay","animationDuration","animationDelay","transitionDelayStyle","animationDelayStyle","transitionDurationStyle","transitionPropertyStyle","elementStyles","getComputedStyle","TRANSITION_PROP","DURATION_KEY","Math","max","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","itemIndex","total","stagger","staggerClassName","staggerCacheKey","applyClasses","formerData","timings","isCurrentlyAnimating","blockTransitions","style","isAnimating","NG_ANIMATE_BLOCK_CLASS_NAME","unblockTransitions","prop","unblockKeyframeAnimations","animateRun","activeAnimationComplete","onEnd","off","css3AnimationEvents","onAnimationProgress","activeClassName","animateClose","appliedStyles","removeProperty","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","maxDuration","indexOf","maxDelay","ONE_SECOND","ANIMATIONEND_EVENT","TRANSITIONEND_EVENT","propertyStyle","CSS_PREFIX","prepareStaggerDelay","oldStyle","getAttribute","setAttribute","on","elementData.closeAnimationFn","CLOSING_TIME_BUFFER","delayStyle","staggerDelay","val","animateBefore","animateAfter","afterAnimationComplete","animate","animationComplete","preReflowCancellation","suffixClasses","suffix","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","animationCompleted","beforeSetClass","cancellationMethod","beforeAddClass","beforeRemoveClass"]
+}
View
197 1.2.14/angular-cookies.js
@@ -0,0 +1,197 @@
+/**
+ * @license AngularJS v1.2.14
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngCookies
+ * @description
+ *
+ * # ngCookies
+ *
+ * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
+ *
+ *
+ * <div doc-module-components="ngCookies"></div>
+ *
+ * See {@link ngCookies.$cookies `$cookies`} and
+ * {@link ngCookies.$cookieStore `$cookieStore`} for usage.
+ */
+
+
+angular.module('ngCookies', ['ng']).
+ /**
+ * @ngdoc service
+ * @name $cookies
+ *
+ * @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
+ <example>
+ <file name="index.html">
+ <script>
+ function ExampleController($cookies) {
+ // Retrieving a cookie
+ var favoriteCookie = $cookies.myFavorite;
+ // Setting a cookie
+ $cookies.myFavorite = 'oatmeal';
+ }
+ </script>
+ </file>
+ </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 service
+ * @name $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 $cookieStore#get
+ *
+ * @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 $cookieStore#put
+ *
+ * @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 $cookieStore#remove
+ *
+ * @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.14/angular-cookies.min.js
@@ -0,0 +1,8 @@
+/*
+ AngularJS v1.2.14
+ (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.14/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,CAmBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA2BW,UA3BX,CA2BuB,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,CA3BvB,CAAAH,QAAA,CA2HW,cA3HX,CA2H2B,CAAC,UAAD,CAAa,QAAQ,CAACoB,CAAD,CAAW,CAErD,MAAO,KAWAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHP,CACG,CADKK,CAAA,CAASE,CAAT,CACL,EAAQzB,CAAA0B,SAAA,CAAiBR,CAAjB,CAAR,CAAkCA,CAFxB,CAXd,KA0BAS,QAAQ,CAACF,CAAD,CAAMP,CAAN,CAAa,CACxBK,CAAA,CAASE,CAAT,CAAA,CAAgBzB,CAAA4B,OAAA,CAAeV,CAAf,CADQ,CA1BrB,QAuCGW,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CAvCjB,CAF8C,CAAhC,CA3H3B,CAnBsC,CAArC,CAAA,CA+LE1B,MA/LF,CA+LUA,MAAAC,QA/LV;",
+"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
18 1.2.14/angular-csp.css
@@ -0,0 +1,18 @@
+/* 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;
+}
+
+.ng-animate-block-transitions {
+ transition:0s all!important;
+ -webkit-transition:0s all!important;
+}
View
414 1.2.14/angular-loader.js
@@ -0,0 +1,414 @@
+/**
+ * @license AngularJS v1.2.14
+ * (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(code:string, template:string, ...templateArgs): Error} minErr 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.14/' +
+ (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 type
+ * @name angular.Module
+ * @module ng
+ * @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
+ * @module ng
+ * @description