diff options
| author | Vojta Jina | 2011-07-19 15:52:27 +0200 |
|---|---|---|
| committer | Vojta Jina | 2011-09-08 20:37:28 +0200 |
| commit | 91ccb4ba6e203f1b80a1aa7187d8773434948fc2 (patch) | |
| tree | 2ae5b853a818ec67a081e86177e9669706010cf7 | |
| parent | d0f459c56fdb3dae692c359a2915acb2fd063c79 (diff) | |
| download | angular.js-91ccb4ba6e203f1b80a1aa7187d8773434948fc2.tar.bz2 | |
feat($browser): add $browser.baseHref()
This method abstracts <base href="" /> in document.head - returns the value.
If absolute href set, it converts the href to relative.
| -rw-r--r-- | src/Browser.js | 11 | ||||
| -rw-r--r-- | src/angular-mocks.js | 5 | ||||
| -rw-r--r-- | test/BrowserSpecs.js | 36 |
3 files changed, 52 insertions, 0 deletions
diff --git a/src/Browser.js b/src/Browser.js index 8e8f511a..62e5b116 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -509,4 +509,15 @@ function Browser(window, document, body, XHR, $log, $sniffer) { return script; }; + + /** + * Returns current <base href> + * (always relative - without domain) + * + * @returns {string=} + */ + self.baseHref = function() { + var href = document.find('base').attr('href'); + return href ? href.replace(/^https?\:\/\/[^\/]*/, '') : href; + }; } diff --git a/src/angular-mocks.js b/src/angular-mocks.js index 8410dc8c..f533bee0 100644 --- a/src/angular-mocks.js +++ b/src/angular-mocks.js @@ -302,6 +302,11 @@ function MockBrowser() { self.deferredFns.shift().fn(); } }; + + self.$$baseHref = ''; + self.baseHref = function() { + return this.$$baseHref; + }; } MockBrowser.prototype = { diff --git a/test/BrowserSpecs.js b/test/BrowserSpecs.js index f92a21af..de4354a0 100644 --- a/test/BrowserSpecs.js +++ b/test/BrowserSpecs.js @@ -691,4 +691,40 @@ describe('browser', function(){ expect(script).toBe(scripts[0]); }); }); + + describe('baseHref', function() { + var jqDocHead; + + function setDocumentBaseHrefTo(href) { + clearDocumentBaseHref(); + jqDocHead.append('<base href="' + href +'" />'); + } + + function clearDocumentBaseHref() { + jqDocHead.find('base').remove(); + } + + beforeEach(function() { + jqDocHead = jqLite(document).find('head'); + }); + + afterEach(clearDocumentBaseHref); + + it('should return value from <base href>', function() { + setDocumentBaseHrefTo('/base/path/'); + expect(browser.baseHref()).toEqual('/base/path/'); + }); + + it('should return undefined if no <base href>', function() { + expect(browser.baseHref()).toBeUndefined(); + }); + + it('should remove domain from <base href>', function() { + setDocumentBaseHrefTo('http://host.com/base/path/'); + expect(browser.baseHref()).toEqual('/base/path/'); + + setDocumentBaseHrefTo('http://host.com/base/path/index.html'); + expect(browser.baseHref()).toEqual('/base/path/index.html'); + }); + }); }); |
