Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
fix($location): correctly rewrite html5 url to hashbang url
Browse files Browse the repository at this point in the history
In situations where path() matched basepath and we needed to
convert from html5 url to hashbang url, the $location service
considered the url to be already rewritten, which resulted in
an error.
  • Loading branch information
tleruitte authored and IgorMinar committed Mar 11, 2013
1 parent e88d617 commit 9befe37
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
3 changes: 2 additions & 1 deletion src/ng/location.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ function convertToHashbangUrl(url, basePath, hashPrefix) {
var match = matchUrl(url);

// already hashbang url
if (decodeURIComponent(match.path) == basePath) {
if (decodeURIComponent(match.path) == basePath && !isUndefined(match.hash) &&
match.hash.indexOf(hashPrefix) === 0) {
return url;
// convert html5 url -> hashbang url
} else {
Expand Down
19 changes: 15 additions & 4 deletions test/ng/locationSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,16 @@ describe('$location', function() {
}
);
});

it('should correctly convert html5 url with path matching basepath to hashbang url', function () {
initService(true, '!', false);
inject(
initBrowser('http://domain.com/base/index.html', '/base/index.html'),
function($browser, $location) {
expect($browser.url()).toBe('http://domain.com/base/index.html#!/index.html');
}
);
});
});


Expand Down Expand Up @@ -1209,7 +1219,7 @@ describe('$location', function() {
);


it('should listen on click events on href and prevent browser default in hashbang mode', function() {
it('should listen on click events on href and prevent browser default in hashbang mode', function() {
module(function() {
return function($rootElement, $compile, $rootScope) {
$rootElement.html('<a href="http://server/#/somePath">link</a>');
Expand Down Expand Up @@ -1253,20 +1263,21 @@ describe('$location', function() {

inject(function($location, $rootScope, $browser, $rootElement) {
var log = '',
link = $rootElement.find('a');
link = $rootElement.find('a'),
browserUrlBefore = $browser.url();

$rootScope.$on('$locationChangeStart', function(event) {
event.preventDefault();
log += '$locationChangeStart';
});
$rootScope.$on('$locationChangeSuccess', function() {
throw new Error('after cancelation in html5 mode');
throw new Error('after cancellation in html5 mode');
});

browserTrigger(link, 'click');

expect(log).toEqual('$locationChangeStart');
expect($browser.url()).toEqual('http://server/');
expect($browser.url()).toBe(browserUrlBefore);

dealoc($rootElement);
});
Expand Down

0 comments on commit 9befe37

Please sign in to comment.