diff options
| author | Misko Hevery | 2013-05-02 10:47:30 -0400 |
|---|---|---|
| committer | Misko Hevery | 2013-05-02 15:22:16 -0400 |
| commit | fd21c7502f0a25364a810c26ebeecb678e5783c5 (patch) | |
| tree | 27137cbebe756dbda887690e6fd0f779b443e8e1 /src/ng/animator.js | |
| parent | 80341cb9badd952fdc80094df4123629313b4cc4 (diff) | |
| download | angular.js-fd21c7502f0a25364a810c26ebeecb678e5783c5.tar.bz2 | |
fix(ngAnamite): eval ng-animate expression on each animation
Diffstat (limited to 'src/ng/animator.js')
| -rw-r--r-- | src/ng/animator.js | 102 |
1 files changed, 49 insertions, 53 deletions
diff --git a/src/ng/animator.js b/src/ng/animator.js index d79822f7..f2143f59 100644 --- a/src/ng/animator.js +++ b/src/ng/animator.js @@ -147,8 +147,6 @@ var $AnimatorProvider = function() { * @return {object} the animator object which contains the enter, leave, move, show, hide and animate methods. */ var AnimatorService = function(scope, attrs) { - var ngAnimateAttr = attrs.ngAnimate; - var ngAnimateValue = ngAnimateAttr && scope.$eval(ngAnimateAttr); var animator = {}; /** @@ -223,24 +221,22 @@ var $AnimatorProvider = function() { return animator; function animateActionFactory(type, beforeFn, afterFn) { - var className = ngAnimateAttr - ? isObject(ngAnimateValue) ? ngAnimateValue[type] : ngAnimateValue + '-' + type - : ''; - var animationPolyfill = $animation(className); - - var polyfillSetup = animationPolyfill && animationPolyfill.setup; - var polyfillStart = animationPolyfill && animationPolyfill.start; - - if (!className) { - return function(element, parent, after) { + return function(element, parent, after) { + var ngAnimateValue = scope.$eval(attrs.ngAnimate); + var className = ngAnimateValue + ? isObject(ngAnimateValue) ? ngAnimateValue[type] : ngAnimateValue + '-' + type + : ''; + var animationPolyfill = $animation(className); + var polyfillSetup = animationPolyfill && animationPolyfill.setup; + var polyfillStart = animationPolyfill && animationPolyfill.start; + + if (!className) { beforeFn(element, parent, after); afterFn(element, parent, after); - } - } else { - var setupClass = className + '-setup'; - var startClass = className + '-start'; - - return function(element, parent, after) { + } else { + var setupClass = className + '-setup'; + var startClass = className + '-start'; + if (!parent) { parent = after ? after.parent() : element.parent(); } @@ -255,48 +251,48 @@ var $AnimatorProvider = function() { element.addClass(setupClass); beforeFn(element, parent, after); if (element.length == 0) return done(); - + var memento = (polyfillSetup || noop)(element); - + // $window.setTimeout(beginAnimation, 0); this was causing the element not to animate // keep at 1 for animation dom rerender $window.setTimeout(beginAnimation, 1); - - function beginAnimation() { - element.addClass(startClass); - if (polyfillStart) { - polyfillStart(element, done, memento); - } else if (isFunction($window.getComputedStyle)) { - var vendorTransitionProp = $sniffer.vendorPrefix + 'Transition'; - var w3cTransitionProp = 'transition'; //one day all browsers will have this - - var durationKey = 'Duration'; - var duration = 0; + }; - //we want all the styles defined before and after - forEach(element, function(element) { - if (element.nodeType == 1) { - var globalStyles = $window.getComputedStyle(element) || {}; - duration = Math.max( - parseFloat(globalStyles[w3cTransitionProp + durationKey]) || - parseFloat(globalStyles[vendorTransitionProp + durationKey]) || - 0, - duration); - } - }); - $window.setTimeout(done, duration * 1000); - } else { - done(); - } - } - - function done() { - afterFn(element, parent, after); - element.removeClass(setupClass); - element.removeClass(startClass); - element.removeData(NG_ANIMATE_CONTROLLER); + function beginAnimation() { + element.addClass(startClass); + if (polyfillStart) { + polyfillStart(element, done, memento); + } else if (isFunction($window.getComputedStyle)) { + var vendorTransitionProp = $sniffer.vendorPrefix + 'Transition'; + var w3cTransitionProp = 'transition'; //one day all browsers will have this + + var durationKey = 'Duration'; + var duration = 0; + + //we want all the styles defined before and after + forEach(element, function(element) { + if (element.nodeType == 1) { + var globalStyles = $window.getComputedStyle(element) || {}; + duration = Math.max( + parseFloat(globalStyles[w3cTransitionProp + durationKey]) || + parseFloat(globalStyles[vendorTransitionProp + durationKey]) || + 0, + duration); + } + }); + $window.setTimeout(done, duration * 1000); + } else { + done(); } } + + function done() { + afterFn(element, parent, after); + element.removeClass(setupClass); + element.removeClass(startClass); + element.removeData(NG_ANIMATE_CONTROLLER); + } } } |
