fix($animator): ensure animations are always disabled for an element that is not attached to the DOM

This commit is contained in:
Matias Niemelä 2013-06-17 22:40:01 -04:00 committed by Igor Minar
parent 14626d0bc5
commit 031da1f96b
7 changed files with 62 additions and 33 deletions

View file

@ -91,13 +91,21 @@ describe('Docs Annotations', function() {
}
});
});
inject(function($rootScope, $compile, $templateCache) {
inject(function($rootScope, $compile, $templateCache, $rootElement, $animator) {
$animator.enabled(true);
url = '/page.html';
$scope = $rootScope.$new();
parent = angular.element('<div class="parent"></div>');
element = angular.element('<div data-url="' + url + '" foldout></div>');
body.append(parent);
//we're injecting the element to the $rootElement since the changes in
//$animator only detect and perform animations if the root element has
//animations enabled. If the element is not apart of the DOM
//then animations are skipped.
parent.append(element);
$rootElement.append(parent);
body.append($rootElement);
$compile(parent)($scope);
$scope.$apply();
});

View file

@ -290,8 +290,9 @@ var $AnimatorProvider = function() {
if (!parent) {
parent = after ? after.parent() : element.parent();
}
var disabledAnimation = { running : true };
if ((!$sniffer.transitions && !polyfillSetup && !polyfillStart) ||
(parent.inheritedData(NG_ANIMATE_CONTROLLER) || noop).running) {
(parent.inheritedData(NG_ANIMATE_CONTROLLER) || disabledAnimation).running) {
beforeFn(element, parent, after);
afterFn(element, parent, after);
return;

View file

@ -77,18 +77,22 @@ describe('ngIf', function () {
describe('ngIf ngAnimate', function () {
var vendorPrefix, window;
var body, element;
var body, element, $rootElement;
function html(html) {
body.html(html);
element = body.children().eq(0);
$rootElement.html(html);
element = $rootElement.children().eq(0);
return element;
}
beforeEach(function() {
beforeEach(module(function() {
// we need to run animation on attached elements;
body = jqLite(document.body);
});
return function(_$rootElement_) {
$rootElement = _$rootElement_;
body = jqLite(document.body);
body.append($rootElement);
};
}));
afterEach(function(){
dealoc(body);

View file

@ -299,11 +299,11 @@ describe('ngInclude', function() {
describe('ngInclude ngAnimate', function() {
var vendorPrefix, window;
var body, element;
var body, element, $rootElement;
function html(html) {
body.html(html);
element = body.children().eq(0);
$rootElement.html(html);
element = $rootElement.children().eq(0);
return element;
}
@ -312,10 +312,14 @@ describe('ngInclude ngAnimate', function() {
element.css(vendorPrefix + cssProp, cssValue);
}
beforeEach(function() {
beforeEach(module(function() {
// we need to run animation on attached elements;
body = jqLite(document.body);
});
return function(_$rootElement_) {
$rootElement = _$rootElement_;
body = jqLite(document.body);
body.append($rootElement);
};
}));
afterEach(function(){
dealoc(body);

View file

@ -708,11 +708,11 @@ describe('ngRepeat', function() {
describe('ngRepeat ngAnimate', function() {
var vendorPrefix, window;
var body, element;
var body, element, $rootElement;
function html(html) {
body.html(html);
element = body.children().eq(0);
$rootElement.html(html);
element = $rootElement.children().eq(0);
return element;
}
@ -721,10 +721,14 @@ describe('ngRepeat ngAnimate', function() {
element.css(vendorPrefix + cssProp, cssValue);
}
beforeEach(function() {
beforeEach(module(function() {
// we need to run animation on attached elements;
body = jqLite(document.body);
});
return function(_$rootElement_) {
$rootElement = _$rootElement_;
body = jqLite(document.body);
body.append($rootElement);
};
}));
afterEach(function(){
dealoc(body);

View file

@ -216,18 +216,22 @@ describe('ngSwitch', function() {
describe('ngSwitch ngAnimate', function() {
var vendorPrefix, window;
var body, element;
var body, element, $rootElement;
function html(html) {
body.html(html);
element = body.children().eq(0);
$rootElement.html(html);
element = $rootElement.children().eq(0);
return element;
}
beforeEach(function() {
beforeEach(module(function() {
// we need to run animation on attached elements;
body = jqLite(document.body);
});
return function(_$rootElement_) {
$rootElement = _$rootElement_;
body = jqLite(document.body);
body.append($rootElement);
};
}));
afterEach(function(){
dealoc(body);

View file

@ -511,11 +511,12 @@ describe('ngView', function() {
describe('ngAnimate ', function() {
var window, vendorPrefix;
var body, element;
var body, element, $rootElement;
function html(html) {
body.html(html);
element = body.children().eq(0);
$rootElement.html(html);
body.append($rootElement);
element = $rootElement.children().eq(0);
return element;
}
@ -524,10 +525,13 @@ describe('ngView', function() {
element.css(vendorPrefix + cssProp, cssValue);
}
beforeEach(function() {
beforeEach(module(function() {
// we need to run animation on attached elements;
body = jqLite(document.body);
});
return function(_$rootElement_) {
$rootElement = _$rootElement_;
body = jqLite(document.body);
};
}));
afterEach(function(){
dealoc(body);