function() {
  var postDigestQueue = new NgMap();
  var postDigestElements = [];

  this.$get = ['$$AnimateRunner', '$rootScope',
       function($$AnimateRunner,   $rootScope) {
    return {
      enabled: noop,
      on: noop,
      off: noop,
      pin: noop,

      push: function(element, event, options, domOperation) {
        if (domOperation) {
          domOperation();
        }

        options = options || {};
        if (options.from) {
          element.css(options.from);
        }
        if (options.to) {
          element.css(options.to);
        }

        if (options.addClass || options.removeClass) {
          addRemoveClassesPostDigest(element, options.addClass, options.removeClass);
        }

        var runner = new $$AnimateRunner();

        // since there are no animations to run the runner needs to be
        // notified that the animation call is complete.
        runner.complete();
        return runner;
      }
    };


    function updateData(data, classes, value) {
      var changed = false;
      if (classes) {
        classes = isString(classes) ? classes.split(' ') :
                  isArray(classes) ? classes : [];
        forEach(classes, function(className) {
          if (className) {
            changed = true;
            data[className] = value;
          }
        });
      }
      return changed;
    }

    function handleCSSClassChanges() {
      forEach(postDigestElements, function(element) {
        var data = postDigestQueue.get(element);
        if (data) {
          var existing = splitClasses(element.attr('class'));
          var toAdd = '';
          var toRemove = '';
          forEach(data, function(status, className) {
            var hasClass = !!existing[className];
            if (status !== hasClass) {
              if (status) {
                toAdd += (toAdd.length ? ' ' : '') + className;
              } else {
                toRemove += (toRemove.length ? ' ' : '') + className;
              }
            }
          });

          forEach(element, function(elm) {
            if (toAdd) {
              jqLiteAddClass(elm, toAdd);
            }
            if (toRemove) {
              jqLiteRemoveClass(elm, toRemove);
            }
          });
          postDigestQueue.delete(element);
        }
      });
      postDigestElements.length = 0;
    }


    function addRemoveClassesPostDigest(element, add, remove) {
      var data = postDigestQueue.get(element) || {};

      var classesAdded = updateData(data, add, true);
      var classesRemoved = updateData(data, remove, false);

      if (classesAdded || classesRemoved) {

        postDigestQueue.set(element, data);
        postDigestElements.push(element);

        if (postDigestElements.length === 1) {
          $rootScope.$$postDigest(handleCSSClassChanges);
        }
      }
    }
  }];
}
function() {
  var postDigestQueue = new NgMap();
  var postDigestElements = [];

  this.$get = ['$$AnimateRunner', '$rootScope',
       function($$AnimateRunner,   $rootScope) {
    return {
      enabled: noop,
      on: noop,
      off: noop,
      pin: noop,

      push: function(element, event, options, domOperation) {
        if (domOperation) {
          domOperation();
        }

        options = options || {};
        if (options.from) {
          element.css(options.from);
        }
        if (options.to) {
          element.css(options.to);
        }

        if (options.addClass || options.removeClass) {
          addRemoveClassesPostDigest(element, options.addClass, options.removeClass);
        }

        var runner = new $$AnimateRunner();

        
        
        runner.complete();
        return runner;
      }
    };


    function updateData(data, classes, value) {
      var changed = false;
      if (classes) {
        classes = isString(classes) ? classes.split(' ') :
                  isArray(classes) ? classes : [];
        forEach(classes, function(className) {
          if (className) {
            changed = true;
            data[className] = value;
          }
        });
      }
      return changed;
    }

    function handleCSSClassChanges() {
      forEach(postDigestElements, function(element) {
        var data = postDigestQueue.get(element);
        if (data) {
          var existing = splitClasses(element.attr('class'));
          var toAdd = '';
          var toRemove = '';
          forEach(data, function(status, className) {
            var hasClass = !!existing[className];
            if (status !== hasClass) {
              if (status) {
                toAdd += (toAdd.length ? ' ' : '') + className;
              } else {
                toRemove += (toRemove.length ? ' ' : '') + className;
              }
            }
          });

          forEach(element, function(elm) {
            if (toAdd) {
              jqLiteAddClass(elm, toAdd);
            }
            if (toRemove) {
              jqLiteRemoveClass(elm, toRemove);
            }
          });
          postDigestQueue.delete(element);
        }
      });
      postDigestElements.length = 0;
    }


    function addRemoveClassesPostDigest(element, add, remove) {
      var data = postDigestQueue.get(element) || {};

      var classesAdded = updateData(data, add, true);
      var classesRemoved = updateData(data, remove, false);

      if (classesAdded || classesRemoved) {

        postDigestQueue.set(element, data);
        postDigestElements.push(element);

        if (postDigestElements.length === 1) {
          $rootScope.$$postDigest(handleCSSClassChanges);
        }
      }
    }
  }];
}
function ( ) { var postDigestQueue = new NgMap ( ) ; var postDigestElements = [ ] ; this . $get = [ '$$AnimateRunner' , '$rootScope' , function ( $$AnimateRunner , $rootScope ) { return { enabled : noop , on : noop , off : noop , pin : noop , push : function ( element , event , options , domOperation ) { if ( domOperation ) { domOperation ( ) ; } options = options || { } ; if ( options . from ) { element . css ( options . from ) ; } if ( options . to ) { element . css ( options . to ) ; } if ( options . addClass || options . removeClass ) { addRemoveClassesPostDigest ( element , options . addClass , options . removeClass ) ; } var runner = new $$AnimateRunner ( ) ; // since there are no animations to run the runner needs to be // notified that the animation call is complete. runner . complete ( ) ; return runner ; } } ; function updateData ( data , classes , value ) { var changed = false ; if ( classes ) { classes = isString ( classes ) ? classes . split ( ' ' ) : isArray ( classes ) ? classes : [ ] ; forEach ( classes , function ( className ) { if ( className ) { changed = true ; data [ className ] = value ; } } ) ; } return changed ; } function handleCSSClassChanges ( ) { forEach ( postDigestElements , function ( element ) { var data = postDigestQueue . get ( element ) ; if ( data ) { var existing = splitClasses ( element . attr ( 'class' ) ) ; var toAdd = '' ; var toRemove = '' ; forEach ( data , function ( status , className ) { var hasClass = ! ! existing [ className ] ; if ( status !== hasClass ) { if ( status ) { toAdd += ( toAdd . length ? ' ' : '' ) + className ; } else { toRemove += ( toRemove . length ? ' ' : '' ) + className ; } } } ) ; forEach ( element , function ( elm ) { if ( toAdd ) { jqLiteAddClass ( elm , toAdd ) ; } if ( toRemove ) { jqLiteRemoveClass ( elm , toRemove ) ; } } ) ; postDigestQueue . delete ( element ) ; } } ) ; postDigestElements . length = 0 ; } function addRemoveClassesPostDigest ( element , add , remove ) { var data = postDigestQueue . get ( element ) || { } ; var classesAdded = updateData ( data , add , true ) ; var classesRemoved = updateData ( data , remove , false ) ; if ( classesAdded || classesRemoved ) { postDigestQueue . set ( element , data ) ; postDigestElements . push ( element ) ; if ( postDigestElements . length === 1 ) { $rootScope . $$postDigest ( handleCSSClassChanges ) ; } } } } ] ; }
this is prefixed with Core since it conflicts with the animateQueueProvider defined in ngAnimate/animateQueue.js
this is prefixed with Core since it conflicts with the animateQueueProvider defined in ngAnimate / animateQueue . js