From 8aa18f0ad036fd4f2dc26f54d80754c70232b4f7 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Fri, 18 May 2012 15:26:09 -0700 Subject: chore($location) switch to use $rootElement --- src/ng/location.js | 8 ++++---- src/ng/rootElement.js | 3 +++ test/ng/locationSpec.js | 23 ++++++++++++----------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/ng/location.js b/src/ng/location.js index 54abf6cb..c7b41605 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -405,7 +405,7 @@ function locationGetterSetter(property, preprocess) { * * @requires $browser * @requires $sniffer - * @requires $document + * @requires $rootElement * * @description * The $location service parses the URL in the browser address bar (based on the {@link https://developer.mozilla.org/en/window.location window.location}) and makes the URL available to your application. Changes to the URL in the address bar are reflected into $location service and changes to $location are reflected into the browser address bar. @@ -468,8 +468,8 @@ function $LocationProvider(){ } }; - this.$get = ['$rootScope', '$browser', '$sniffer', '$document', - function( $rootScope, $browser, $sniffer, $document) { + this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', + function( $rootScope, $browser, $sniffer, $rootElement) { var currentUrl, basePath = $browser.baseHref() || '/', pathPrefix = pathPrefixFromBase(basePath), @@ -487,7 +487,7 @@ function $LocationProvider(){ var u = currentUrl, absUrlPrefix = composeProtocolHostPort(u.protocol(), u.host(), u.port()) + pathPrefix; - $document.bind('click', function(event) { + $rootElement.bind('click', function(event) { // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) // currently we open nice url link and redirect then diff --git a/src/ng/rootElement.js b/src/ng/rootElement.js index 7b72c2de..20e5bfc4 100644 --- a/src/ng/rootElement.js +++ b/src/ng/rootElement.js @@ -11,3 +11,6 @@ * location where the applications {@link angular.module.AUTO.$injector $injector} service gets * published, it can be retrieved using `$rootElement.injector()`. */ + + +// the implementation is in angular.bootstrap diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js index b866b1e3..46079ea6 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -498,8 +498,8 @@ describe('$location', function() { // html5 history enabled, but not supported by browser describe('history on old browser', function() { - afterEach(inject(function($document){ - dealoc($document); + afterEach(inject(function($rootElement){ + dealoc($rootElement); })); it('should use hashbang url with hash prefix', function() { @@ -532,8 +532,8 @@ describe('$location', function() { // html5 history enabled and supported by browser describe('history on new browser', function() { - afterEach(inject(function($document){ - dealoc($document); + afterEach(inject(function($rootElement){ + dealoc($rootElement); })); it('should use new url', function() { @@ -681,7 +681,6 @@ describe('$location', function() { function configureService(linkHref, html5Mode, supportHist, attrs, content) { module(function($provide, $locationProvider) { - var jqRoot = jqLite('
'); attrs = attrs ? ' ' + attrs + ' ' : ''; // fake the base behavior @@ -692,14 +691,16 @@ describe('$location', function() { } link = jqLite('' + content + '')[0]; - root = jqRoot.append(link)[0]; - jqLite(document.body).append(jqRoot); - - $provide.value('$document', jqRoot); $provide.value('$sniffer', {history: supportHist}); $locationProvider.html5Mode(html5Mode); $locationProvider.hashPrefix('!'); + return function($rootElement, $document) { + $rootElement.append(link); + root = $rootElement[0]; + // we need to do this otherwise we can't simulate events + $document.find('body').append($rootElement); + }; }); } @@ -711,11 +712,11 @@ describe('$location', function() { } function initLocation() { - return function($browser, $location, $document) { + return function($browser, $location, $rootElement) { originalBrowser = $browser.url(); // we have to prevent the default operation, as we need to test absolute links (http://...) // and navigating to these links would kill jstd - $document.bind('click', function(e) { + $rootElement.bind('click', function(e) { lastEventPreventDefault = e.isDefaultPrevented(); e.preventDefault(); }); -- cgit v1.2.3