@@ -205,9 +205,9 @@ angular.module('ngAnimate', ['ng'])
205
205
var ELEMENT_NODE = 1 ;
206
206
var NG_ANIMATE_STATE = '$$ngAnimateState' ;
207
207
var NG_ANIMATE_CLASS_NAME = 'ng-animate' ;
208
- var rootAnimateState = { running :true } ;
209
- $provide . decorator ( '$animate' , [ '$delegate' , '$injector' , '$sniffer' , '$rootElement' , '$timeout' , '$rootScope' ,
210
- function ( $delegate , $injector , $sniffer , $rootElement , $timeout , $rootScope ) {
208
+ var rootAnimateState = { disabled :true } ;
209
+ $provide . decorator ( '$animate' , [ '$delegate' , '$injector' , '$sniffer' , '$rootElement' , '$timeout' , '$rootScope' , '$document' ,
210
+ function ( $delegate , $injector , $sniffer , $rootElement , $timeout , $rootScope , $document ) {
211
211
212
212
$rootElement . data ( NG_ANIMATE_STATE , rootAnimateState ) ;
213
213
@@ -466,18 +466,17 @@ angular.module('ngAnimate', ['ng'])
466
466
}
467
467
else {
468
468
var data = element . data ( NG_ANIMATE_STATE ) || { } ;
469
- data . structural = true ;
470
- data . running = true ;
469
+ data . disabled = true ;
471
470
element . data ( NG_ANIMATE_STATE , data ) ;
472
471
}
473
472
break ;
474
473
475
474
case 1 :
476
- rootAnimateState . running = ! value ;
475
+ rootAnimateState . disabled = ! value ;
477
476
break ;
478
477
479
478
default :
480
- value = ! rootAnimateState . running ;
479
+ value = ! rootAnimateState . disabled ;
481
480
break ;
482
481
}
483
482
return ! ! value ;
@@ -498,7 +497,6 @@ angular.module('ngAnimate', ['ng'])
498
497
parent = after ? after . parent ( ) : element . parent ( ) ;
499
498
}
500
499
501
- var disabledAnimation = { running : true } ;
502
500
var matches = lookup ( animationLookup ) ;
503
501
var isClassBased = event == 'addClass' || event == 'removeClass' ;
504
502
var ngAnimateState = element . data ( NG_ANIMATE_STATE ) || { } ;
@@ -507,7 +505,7 @@ angular.module('ngAnimate', ['ng'])
507
505
//the element is not currently attached to the document body or then completely close
508
506
//the animation if any matching animations are not found at all.
509
507
//NOTE: IE8 + IE9 should close properly (run done()) in case a NO animation is not found.
510
- if ( ( parent . inheritedData ( NG_ANIMATE_STATE ) || disabledAnimation ) . running || matches . length == 0 ) {
508
+ if ( animationsDisabled ( element , parent ) || matches . length = == 0 ) {
511
509
done ( ) ;
512
510
return ;
513
511
}
@@ -528,7 +526,7 @@ angular.module('ngAnimate', ['ng'])
528
526
529
527
//this would mean that an animation was not allowed so let the existing
530
528
//animation do it's thing and close this one early
531
- if ( animations . length == 0 ) {
529
+ if ( animations . length === 0 ) {
532
530
onComplete && onComplete ( ) ;
533
531
return ;
534
532
}
@@ -622,8 +620,39 @@ angular.module('ngAnimate', ['ng'])
622
620
}
623
621
624
622
function cleanup ( element ) {
625
- element . removeClass ( NG_ANIMATE_CLASS_NAME ) ;
626
- element . removeData ( NG_ANIMATE_STATE ) ;
623
+ if ( element [ 0 ] == $rootElement [ 0 ] ) {
624
+ if ( ! rootAnimateState . disabled ) {
625
+ rootAnimateState . running = false ;
626
+ rootAnimateState . structural = false ;
627
+ }
628
+ }
629
+ else {
630
+ element . removeClass ( NG_ANIMATE_CLASS_NAME ) ;
631
+ element . removeData ( NG_ANIMATE_STATE ) ;
632
+ }
633
+ }
634
+
635
+ function animationsDisabled ( element , parent ) {
636
+ if ( element == $rootElement ) {
637
+ return rootAnimateState . disabled || rootAnimateState . running ;
638
+ }
639
+
640
+ var validState ;
641
+ do {
642
+ //the element did not reach the root element which means that it
643
+ //is not apart of the DOM. Therefore there is no reason to do
644
+ //any animations on it
645
+ if ( parent . length === 0 || parent [ 0 ] == $document [ 0 ] ) return true ;
646
+
647
+ var state = parent . data ( NG_ANIMATE_STATE ) ;
648
+ if ( state && ( state . disabled != null || state . running != null ) ) {
649
+ validState = state ;
650
+ break ;
651
+ }
652
+ }
653
+ while ( parent = parent . parent ( ) ) ;
654
+
655
+ return validState ? ( validState . disabled || validState . running ) : true ;
627
656
}
628
657
} ] ) ;
629
658
0 commit comments