aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/location.js6
-rw-r--r--test/ng/locationSpec.js13
2 files changed, 16 insertions, 3 deletions
diff --git a/src/ng/location.js b/src/ng/location.js
index ba3901b2..40d39282 100644
--- a/src/ng/location.js
+++ b/src/ng/location.js
@@ -69,7 +69,7 @@ function stripFile(url) {
return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
}
-/* return the server only */
+/* return the server only (scheme://host:port) */
function serverBase(url) {
return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
}
@@ -497,12 +497,12 @@ function $LocationProvider(){
function( $rootScope, $browser, $sniffer, $rootElement) {
var $location,
LocationMode,
- baseHref = $browser.baseHref(),
+ baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
initialUrl = $browser.url(),
appBase;
if (html5Mode) {
- appBase = baseHref ? serverBase(initialUrl) + baseHref : initialUrl;
+ appBase = serverBase(initialUrl) + (baseHref || '/');
LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
} else {
appBase = stripHash(initialUrl);
diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js
index 2bce3e64..df8043a3 100644
--- a/test/ng/locationSpec.js
+++ b/test/ng/locationSpec.js
@@ -635,6 +635,19 @@ describe('$location', function() {
}
);
});
+
+
+ it('should set appBase to serverBase if base[href] is missing', function() {
+ initService(true, '!', true);
+ inject(
+ initBrowser('http://domain.com/my/view1#anchor1', ''),
+ function($rootScope, $location, $browser) {
+ expect($browser.url()).toBe('http://domain.com/my/view1#anchor1');
+ expect($location.path()).toBe('/my/view1');
+ expect($location.hash()).toBe('anchor1');
+ }
+ );
+ });
});