aboutsummaryrefslogtreecommitdiffstats
path: root/src/ng/animator.js
diff options
context:
space:
mode:
authorMisko Hevery2013-05-02 10:47:30 -0400
committerMisko Hevery2013-05-02 15:22:16 -0400
commitfd21c7502f0a25364a810c26ebeecb678e5783c5 (patch)
tree27137cbebe756dbda887690e6fd0f779b443e8e1 /src/ng/animator.js
parent80341cb9badd952fdc80094df4123629313b4cc4 (diff)
downloadangular.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.js102
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);
+ }
}
}