Skip to content

Commit

Permalink
fix($animate): ensure enable/disable animations work when the documen…
Browse files Browse the repository at this point in the history
…t node is used

Closes angular#4669
  • Loading branch information
matsko authored and jamesdaily committed Jan 27, 2014
1 parent 6dba697 commit 0f47dd7
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/ngAnimate/animate.js
Original file line number Diff line number Diff line change
Expand Up @@ -705,13 +705,16 @@ angular.module('ngAnimate', ['ng'])
//the element did not reach the root element which means that it
//is not apart of the DOM. Therefore there is no reason to do
//any animations on it
if(parent.length === 0 || parent[0] == $document[0]) return true;
if(parent.length === 0) return true;

var state = parent.data(NG_ANIMATE_STATE);
var isRoot = parent[0] == $rootElement[0];
var state = isRoot ? rootAnimateState : parent.data(NG_ANIMATE_STATE);
if(state && (state.disabled != null || state.running != null)) {
validState = state;
break;
}

if(isRoot) return true;
}
while(parent = parent.parent());

Expand Down
40 changes: 40 additions & 0 deletions test/ngAnimate/animateSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,46 @@ describe("ngAnimate", function() {
expect(count).toBe(0);
});
});

it('should check enable/disable animations up until the $rootElement element', function() {
var rootElm = jqLite('<div></div>');

var captured = false;
module(function($provide, $animateProvider) {
$provide.value('$rootElement', rootElm);
$animateProvider.register('.ani', function() {
return {
addClass : function(element, className, done) {
captured = true;
done();
}
}
});
});
inject(function($animate, $rootElement, $rootScope, $compile, $timeout) {
var initialState;
angular.bootstrap(rootElm, ['ngAnimate']);

$animate.enabled(true);

var element = $compile('<div class="ani"></div>')($rootScope);
rootElm.append(element);

expect(captured).toBe(false);
$animate.addClass(element, 'red');
expect(captured).toBe(true);

captured = false;
$animate.enabled(false);

$animate.addClass(element, 'blue');
expect(captured).toBe(false);

//clean up the mess
$animate.enabled(false, rootElm);
dealoc(rootElm);
});
});
});

describe("with polyfill", function() {
Expand Down

0 comments on commit 0f47dd7

Please sign in to comment.