From 93e0724c6e478a55c8725eaae5946064464df1e5 Mon Sep 17 00:00:00 2001 From: Maciej Borzecki Date: Fri, 3 Aug 2012 09:45:36 +0100 Subject: [PATCH] Changing angular.scenario.Application.prototype.executeAction method so it calls AngularInit when application is manually bootstrapped. Original code works only with auto bootstrapped applications (by using ng-app directive). This work is part of blinkbox tfs ticket 23957. --- src/ngScenario/Application.js | 58 ++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/src/ngScenario/Application.js b/src/ngScenario/Application.js index 2ca6c8fdf555..f37af5a90583 100644 --- a/src/ngScenario/Application.js +++ b/src/ngScenario/Application.js @@ -81,27 +81,43 @@ angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorF * @param {function()} action The callback to execute. function($window, $document) * $document is a jQuery wrapped document. */ -angular.scenario.Application.prototype.executeAction = function(action) { - var self = this; - var $window = this.getWindow_(); - if (!$window.document) { - throw 'Sandbox Error: Application document not accessible.'; - } - if (!$window.angular) { - return action.call(this, $window, _jQuery($window.document)); - } - angularInit($window.document, function(element) { - var $injector = $window.angular.element(element).injector(); - var $element = _jQuery(element); +angular.scenario.Application.prototype.executeAction = function(action) +{ + var self = this; + var $window = this.getWindow_(); + if (!$window.document) { + throw 'Sandbox Error: Application document not accessible.'; + } + + if (!$window.angular) { + return action.call(this, $window, _jQuery($window.document)); + } + + var initialisedWithNgAppDirective = false; + + // angularInit calls this function only if ng-app directive is detected + var initFn = function(element) { + initialisedWithNgAppDirective = true; + + var $injector = $window.angular.element(element).injector(); + var $element = _jQuery(element); + + $element.injector = function() { + return $injector; + }; + + $injector.invoke(function($browser) { + $browser.notifyWhenNoOutstandingRequests(function() { + action.call(self, $window, $element); + }); + }); + }; - $element.injector = function() { - return $injector; - }; + // original implementation searches for ng-app and attaches to angular if found + angularInit($window.document, initFn); - $injector.invoke(function($browser){ - $browser.notifyWhenNoOutstandingRequests(function() { - action.call(self, $window, $element); - }); - }); - }); + if (!initialisedWithNgAppDirective) { + // ng-app not found so manually attaching to the root of document + initFn($window.document); + } };