aboutsummaryrefslogtreecommitdiffstats
path: root/src/ngAnimate/animate.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/ngAnimate/animate.js')
-rw-r--r--src/ngAnimate/animate.js18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/ngAnimate/animate.js b/src/ngAnimate/animate.js
index 02706c2b..3b94a651 100644
--- a/src/ngAnimate/animate.js
+++ b/src/ngAnimate/animate.js
@@ -564,7 +564,7 @@ angular.module('ngAnimate', ['ng'])
//the animation if any matching animations are not found at all.
//NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case a NO animation is not found.
if (animationsDisabled(element, parentElement) || matches.length === 0) {
- domOperation();
+ fireDOMOperation();
closeAnimation();
return;
}
@@ -597,7 +597,7 @@ angular.module('ngAnimate', ['ng'])
//this would mean that an animation was not allowed so let the existing
//animation do it's thing and close this one early
if(animations.length === 0) {
- domOperation();
+ fireDOMOperation();
fireDoneCallbackAsync();
return;
}
@@ -617,7 +617,7 @@ angular.module('ngAnimate', ['ng'])
//is so that the CSS classes present on the element can be properly examined.
if((animationEvent == 'addClass' && element.hasClass(className)) ||
(animationEvent == 'removeClass' && !element.hasClass(className))) {
- domOperation();
+ fireDOMOperation();
fireDoneCallbackAsync();
return;
}
@@ -628,6 +628,7 @@ angular.module('ngAnimate', ['ng'])
element.data(NG_ANIMATE_STATE, {
running:true,
+ className:className,
structural:!isClassBased,
animations:animations,
done:onBeforeAnimationsComplete
@@ -638,7 +639,7 @@ angular.module('ngAnimate', ['ng'])
invokeRegisteredAnimationFns(animations, 'before', onBeforeAnimationsComplete);
function onBeforeAnimationsComplete(cancelled) {
- domOperation();
+ fireDOMOperation();
if(cancelled === true) {
closeAnimation();
return;
@@ -696,6 +697,15 @@ angular.module('ngAnimate', ['ng'])
doneCallback && $timeout(doneCallback, 0, false);
}
+ //it is less complicated to use a flag than managing and cancelling
+ //timeouts containing multiple callbacks.
+ function fireDOMOperation() {
+ if(!fireDOMOperation.hasBeenRun) {
+ fireDOMOperation.hasBeenRun = true;
+ domOperation();
+ }
+ }
+
function closeAnimation() {
if(!closeAnimation.hasBeenRun) {
closeAnimation.hasBeenRun = true;