From 1df3da361d62726bf1dafe629a7fca845b6a8733 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Wed, 6 Nov 2013 23:00:10 +0000 Subject: fix(bootstrap-prettify): share $animate and $$postDigestQueue with demo apps Although demo apps run in an isolated environment, we need to be able to tell them to disable animations when we are running end-to-end tests. By sharing the same instance of $animate between the two environments we can disable animation across the board. The $animate service uses the $$postDigestQueue to run animations. The outer $animate service uses the outer $$postDigestQueue and to queue up these animations. This means that when we run a digest inside the embedded scope, the animations are never performed - they just sit in the outer scope's queue and are only run when a digest is run on the outer scope. By sharing this queue across the two scopes the animations are performed correctly. --- docs/components/angular-bootstrap/bootstrap-prettify.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/components/angular-bootstrap/bootstrap-prettify.js b/docs/components/angular-bootstrap/bootstrap-prettify.js index 101bc801..43248943 100644 --- a/docs/components/angular-bootstrap/bootstrap-prettify.js +++ b/docs/components/angular-bootstrap/bootstrap-prettify.js @@ -192,7 +192,7 @@ directive.ngEvalJavascript = ['getEmbeddedTemplate', function(getEmbeddedTemplat directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', '$sniffer', '$animate', - function($templateCache, $browser, docsRootScope, $location, $sniffer, $animate) { + function($templateCache, $browser, docsRootScope, $location, $sniffer, $animate) { return { terminal: true, link: function(scope, element, attrs) { @@ -205,6 +205,7 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', $provide.value('$anchorScroll', angular.noop); $provide.value('$browser', $browser); $provide.value('$sniffer', $sniffer); + $provide.value('$animate', $animate); $provide.provider('$location', function() { this.$get = ['$rootScope', function($rootScope) { docsRootScope.$on('$locationChangeSuccess', function(event, oldUrl, newUrl) { @@ -227,6 +228,11 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', }]); $provide.decorator('$rootScope', ['$delegate', function($delegate) { embedRootScope = $delegate; + + // Since we are teleporting the $animate service, which relies on the $$postDigestQueue + // we need the embedded scope to use the same $$postDigestQueue as the outer scope + embedRootScope.$$postDigestQueue = docsRootScope.$$postDigestQueue; + deregisterEmbedRootScope = docsRootScope.$watch(function embedRootScopeDigestWatch() { embedRootScope.$digest(); }); -- cgit v1.2.3