From 81923f1e41560327f7de6e8fddfda0d2612658f3 Mon Sep 17 00:00:00 2001
From: Matias Niemelä
Date: Tue, 18 Jun 2013 13:59:57 -0400
Subject: feat(ngAnimate): complete rewrite of animations
- ngAnimate directive is gone and was replaced with class based animations/transitions
- support for triggering animations on css class additions and removals
- done callback was added to all animation apis
- $animation and $animator where merged into a single $animate service with api:
- $animate.enter(element, parent, after, done);
- $animate.leave(element, done);
- $animate.move(element, parent, after, done);
- $animate.addClass(element, className, done);
- $animate.removeClass(element, className, done);
BREAKING CHANGE: too many things changed, we'll write up a separate doc with migration instructions
---
docs/component-spec/annotationsSpec.js | 39 ++++++-------
.../angular-bootstrap/bootstrap-prettify.js | 5 +-
docs/components/angular-bootstrap/bootstrap.js | 9 ++-
docs/src/example.js | 2 +-
docs/src/ngdoc.js | 67 +++++-----------------
docs/src/templates/css/animations.css | 43 +++++++-------
docs/src/templates/index.html | 13 +++--
docs/src/templates/js/docs.js | 2 +-
8 files changed, 68 insertions(+), 112 deletions(-)
(limited to 'docs')
diff --git a/docs/component-spec/annotationsSpec.js b/docs/component-spec/annotationsSpec.js
index 321118ad..a17c906c 100644
--- a/docs/component-spec/annotationsSpec.js
+++ b/docs/component-spec/annotationsSpec.js
@@ -67,41 +67,33 @@ describe('Docs Annotations', function() {
var $scope, parent, element, url, window;
beforeEach(function() {
- module(function($provide, $animationProvider) {
+ module(function($provide, $animateProvider) {
$provide.value('$window', window = angular.mock.createMockWindow());
- $animationProvider.register('foldout-enter', function($window) {
+ $animateProvider.register('.foldout', function($window) {
return {
- start : function(element, done) {
+ enter : function(element, done) {
$window.setTimeout(done, 1000);
- }
- }
- });
- $animationProvider.register('foldout-hide', function($window) {
- return {
- start : function(element, done) {
+ },
+ show : function(element, done) {
$window.setTimeout(done, 500);
- }
- }
- });
- $animationProvider.register('foldout-show', function($window) {
- return {
- start : function(element, done) {
+ },
+ hide : function(element, done) {
$window.setTimeout(done, 200);
}
}
});
});
- inject(function($rootScope, $compile, $templateCache, $rootElement, $animator) {
- $animator.enabled(true);
+ inject(function($rootScope, $compile, $templateCache, $rootElement, $animate) {
+ $animate.enabled(true);
url = '/page.html';
$scope = $rootScope.$new();
parent = angular.element('
');
- element = angular.element('');
//we're injecting the element to the $rootElement since the changes in
- //$animator only detect and perform animations if the root element has
+ //$animate 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.
+ element = angular.element('');
parent.append(element);
$rootElement.append(parent);
body.append($rootElement);
@@ -142,16 +134,19 @@ describe('Docs Annotations', function() {
$httpBackend.flush();
window.setTimeout.expect(1).process();
window.setTimeout.expect(1000).process();
+ window.setTimeout.expect(0).process();
//hide
element.triggerHandler('click');
window.setTimeout.expect(1).process();
- window.setTimeout.expect(500).process();
+ window.setTimeout.expect(200).process();
+ window.setTimeout.expect(0).process();
//show
element.triggerHandler('click');
window.setTimeout.expect(1).process();
- window.setTimeout.expect(200).process();
+ window.setTimeout.expect(500).process();
+ window.setTimeout.expect(0).process();
}));
});
@@ -160,7 +155,7 @@ describe('Docs Annotations', function() {
var window, $scope, ctrl;
beforeEach(function() {
- module(function($provide, $animationProvider) {
+ module(function($provide, $animateProvider) {
$provide.value('$window', window = angular.mock.createMockWindow());
});
inject(function($rootScope, $controller, $location, $cookies, sections) {
diff --git a/docs/components/angular-bootstrap/bootstrap-prettify.js b/docs/components/angular-bootstrap/bootstrap-prettify.js
index ad5340e5..fa40c6e7 100644
--- a/docs/components/angular-bootstrap/bootstrap-prettify.js
+++ b/docs/components/angular-bootstrap/bootstrap-prettify.js
@@ -183,8 +183,8 @@ directive.ngEvalJavascript = ['getEmbeddedTemplate', function(getEmbeddedTemplat
}];
-directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', '$sniffer',
- function($templateCache, $browser, docsRootScope, $location, $sniffer) {
+directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', '$sniffer', '$animate',
+ function($templateCache, $browser, docsRootScope, $location, $sniffer, $animate) {
return {
terminal: true,
link: function(scope, element, attrs) {
@@ -193,6 +193,7 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location',
deregisterEmbedRootScope;
modules.push(['$provide', function($provide) {
+ $provide.value('$animate', $animate);
$provide.value('$templateCache', $templateCache);
$provide.value('$anchorScroll', angular.noop);
$provide.value('$browser', $browser);
diff --git a/docs/components/angular-bootstrap/bootstrap.js b/docs/components/angular-bootstrap/bootstrap.js
index 170e8805..20a5741d 100644
--- a/docs/components/angular-bootstrap/bootstrap.js
+++ b/docs/components/angular-bootstrap/bootstrap.js
@@ -335,12 +335,11 @@ directive.tabPane = function() {
};
};
-directive.foldout = ['$http', '$animator','$window', function($http, $animator, $window) {
+directive.foldout = ['$http', '$animate','$window', function($http, $animate, $window) {
return {
restrict: 'A',
priority : 500,
link: function(scope, element, attrs) {
- var animator = $animator(scope, { ngAnimate: "'foldout'" });
var container, loading, url = attrs.url;
if(/\/build\//.test($window.location.href)) {
url = '/build/docs' + url;
@@ -353,7 +352,7 @@ directive.foldout = ['$http', '$animator','$window', function($http, $animator,
loading = true;
var par = element.parent();
container = angular.element('loading...
');
- animator.enter(container, null, par);
+ $animate.enter(container, null, par);
$http.get(url, { cache : true }).success(function(html) {
loading = false;
@@ -367,12 +366,12 @@ directive.foldout = ['$http', '$animator','$window', function($http, $animator,
//avoid showing the element if the user has already closed it
if(container.css('display') == 'block') {
container.css('display','none');
- animator.show(container);
+ $animate.show(container);
}
});
}
else {
- container.css('display') == 'none' ? animator.show(container) : animator.hide(container);
+ container.hasClass('ng-hide') ? $animate.show(container) : $animate.hide(container);
}
});
});
diff --git a/docs/src/example.js b/docs/src/example.js
index cdbc24a7..9471b3fa 100644
--- a/docs/src/example.js
+++ b/docs/src/example.js
@@ -134,7 +134,7 @@ exports.Example.prototype.toHtmlTabs = function() {
exports.Example.prototype.toHtmlEmbed = function() {
var out = [];
- out.push('');
+ var animations = animations.split("\n");
+ animations.forEach(function(ani) {
+ dom.html('
');
+ dom.text(ani);
+ dom.html('');
+ });
+ dom.html('');
+ });
+ dom.html('
Click here to learn more about the steps involved in the animation.');
+ }
if(params.length > 0) {
dom.html('
Parameters
');
dom.html('
');
@@ -538,18 +551,6 @@ Doc.prototype = {
dom.html('');
dom.html('
');
}
- if(this.animations) {
- dom.h('Animations', this.animations, function(animations){
- dom.html('
');
- var animations = animations.split("\n");
- animations.forEach(function(ani) {
- dom.html('- ');
- dom.text(ani);
- dom.html('
');
- });
- dom.html('
');
- });
- }
},
html_usage_returns: function(dom) {
@@ -665,48 +666,6 @@ Doc.prototype = {
dom.text('' + element + '>');
});
}
- if(self.animations) {
- var animations = [], matches = self.animations.split("\n");
- matches.forEach(function(ani) {
- var name = ani.match(/^\s*(.+?)\s*-/)[1];
- animations.push(name);
- });
-
- dom.html('with
animations');
- var comment;
- if(animations.length == 1) {
- comment = 'The ' + animations[0] + ' animation is supported';
- }
- else {
- var rhs = animations[animations.length-1];
- var lhs = '';
- for(var i=0;i
0) {
- lhs += ', ';
- }
- lhs += animations[i];
- }
- comment = 'The ' + lhs + ' and ' + rhs + ' animations are supported';
- }
- var element = self.element || 'ANY';
- dom.code(function() {
- dom.text('//' + comment + "\n");
- dom.text('<' + element + ' ');
- dom.text(dashCase(self.shortName));
- renderParams('\n ', '="', '"', true);
- dom.text(' ng-animate="{');
- animations.forEach(function(ani, index) {
- if (index) {
- dom.text(', ');
- }
- dom.text(ani + ': \'' + ani + '-animation\'');
- });
- dom.text('}">\n ...\n');
- dom.text('' + element + '>');
- });
-
- dom.html('Click here to learn more about the steps involved in the animation.');
- }
}
self.html_usage_directiveInfo(dom);
self.html_usage_parameters(dom);
diff --git a/docs/src/templates/css/animations.css b/docs/src/templates/css/animations.css
index 2d54bbfb..7324a8a1 100644
--- a/docs/src/templates/css/animations.css
+++ b/docs/src/templates/css/animations.css
@@ -1,4 +1,4 @@
-.reveal {
+.reveal.ng-enter {
-webkit-transition:1s linear all;
-moz-transition:1s linear all;
-o-transition:1s linear all;
@@ -6,7 +6,7 @@
opacity:0;
}
-.reveal.reveal-active {
+.reveal.ng-enter.ng-enter-active {
opacity:1;
}
@@ -15,48 +15,45 @@
overflow:hidden;
}
-.slide-reveal {
+.slide-reveal > .ng-enter {
-webkit-transition:0.5s linear all;
-moz-transition:0.5s linear all;
-o-transition:0.5s linear all;
transition:0.5s linear all;
- opacity:0.5;
+ opacity:0.5;
position:relative;
opacity:0;
top:10px;
}
-.slide-reveal.slide-reveal-active {
+.slide-reveal > .ng-enter.ng-enter-active {
top:0;
opacity:1;
}
-.expand-enter {
+.expand.ng-enter,
+.expand.ng-leave {
-webkit-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-moz-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-o-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-
+}
+.expand.ng-enter {
opacity:0;
line-height:0;
height:0!important;
}
-.expand-enter.expand-enter-active {
+.expand.ng-enter.expand.ng-enter-active {
opacity:1;
line-height:20px;
height:20px!important;
}
-.expand-leave {
- -webkit-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- -moz-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- -o-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-
+.expand.ng-leave {
opacity:1;
height:20px;
}
-.expand-leave.expand-leave-active {
+.expand.ng-leave.expand.ng-leave-active {
opacity:0;
height:0;
}
@@ -73,32 +70,36 @@
padding:1em;
}
-.animator-container.animations-off * {
+.animate-container.animations-off * {
-webkit-transition: none;
-moz-transition: none;
-o-transition: color 0 ease-in; /* opera is special :) */
transition: none;
}
-.foldout-show, .foldout-enter, .foldout-hide {
+.foldout.ng-enter,
+.foldout.ng-hide-add,
+.foldout.ng-hide-remove {
-webkit-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-moz-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-o-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
}
-.foldout-show, .foldout-enter {
+.foldout.ng-hide-remove,
+.foldout.ng-enter {
opacity:0;
}
-.foldout-show.foldout-show-active, .foldout-hide.foldout-hide-active {
+.foldout.ng-hide-remove.ng-hide-remove-active,
+.foldout.ng-enter.ng-enter-active {
opacity:1;
}
-.foldout-hide {
+.foldout.ng-hide-add {
opacity:1;
}
-.foldout-hide.foldout-hide-active {
+.foldout.ng-hide-add.ng-hide-active {
opacity:0;
}
diff --git a/docs/src/templates/index.html b/docs/src/templates/index.html
index 82a5c87e..3f3e83c8 100644
--- a/docs/src/templates/index.html
+++ b/docs/src/templates/index.html
@@ -43,6 +43,7 @@
addTag('script', {src: path('angular-cookies.js') }, sync);
addTag('script', {src: path('angular-sanitize.js') }, sync);
addTag('script', {src: path('angular-mobile.js') }, sync);
+ addTag('script', {src: path('angular-animate.js') }, sync);
addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
addTag('script', {src: 'components/google-code-prettify.js' }, sync);
@@ -201,7 +202,7 @@
-