'use strict'; /** * @ngdoc object * @name ng.$animateProvider * * @description * Default implementation of $animate that doesn't perform any animations, instead just synchronously performs DOM * updates and calls done() callbacks. * * In order to enable animations the ngAnimate module has to be loaded. * * To see the functional implementation check out src/ngAnimate/animate.js */ var $AnimateProvider = ['$provide', function($provide) { this.$$selectors = []; /** * @ngdoc function * @name ng.$animateProvider#register * @methodOf ng.$animateProvider * * @description * Registers a new injectable animation factory function. The factory function produces the animation object which * contains callback functions for each event that is expected to be animated. * * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` must be called once the * element animation is complete. If a function is returned then the animation service will use this function to * cancel the animation whenever a cancel event is triggered. * * *
   *   return {
     *     eventFn : function(element, done) {
     *       //code to run the animation
     *       //once complete, then run done()
     *       return function cancellationFunction() {
     *         //code to cancel the animation
     *       }
     *     }
     *   }
   *
* * @param {string} name The name of the animation. * @param {function} factory The factory function that will be executed to return the animation object. */ this.register = function(name, factory) { var classes = name.substr(1).split('.'); name += '-animation'; this.$$selectors.push({ selectors : classes, name : name }); $provide.factory(name, factory); }; this.$get = function() { return { enter : function(element, parent, after, done) { var afterNode = after && after[after.length - 1]; var parentNode = parent && parent[0] || afterNode && afterNode.parentNode; // IE does not like undefined so we have to pass null. var afterNextSibling = (afterNode && afterNode.nextSibling) || null; forEach(element, function(node) { parentNode.insertBefore(node, afterNextSibling); }); (done || noop)(); }, leave : function(element, done) { element.remove(); (done || noop)(); }, move : function(element, parent, after, done) { // Do not remove element before insert. Removing will cause data associated with the // element to be dropped. Insert will implicitly do the remove. this.enter(element, parent, after, done); }, show : function(element, done) { element.removeClass('ng-hide'); (done || noop)(); }, hide : function(element, done) { element.addClass('ng-hide'); (done || noop)(); }, addClass : function(element, className, done) { className = isString(className) ? className : isArray(className) ? className.join(' ') : ''; element.addClass(className); (done || noop)(); }, removeClass : function(element, className, done) { className = isString(className) ? className : isArray(className) ? className.join(' ') : ''; element.removeClass(className); (done || noop)(); }, enabled : noop }; }; }];