aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMisko Hevery2010-07-30 10:56:36 -0700
committerMisko Hevery2010-07-30 10:56:36 -0700
commitcdda664f8990351453baa26fc3dcd53329e72e68 (patch)
tree77cb533770c67d2a032a259bd093c3fa3a16899d /src
parentaf1eb6914e6e4b72e6baabb075138b7716184ff7 (diff)
downloadangular.js-cdda664f8990351453baa26fc3dcd53329e72e68.tar.bz2
fix up the $location encoding
Diffstat (limited to 'src')
-rw-r--r--src/Angular.js6
-rw-r--r--src/services.js12
2 files changed, 13 insertions, 5 deletions
diff --git a/src/Angular.js b/src/Angular.js
index 33bf86ea..a6fc28b3 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -352,8 +352,8 @@ function parseKeyValue(keyValue) {
foreach((keyValue || "").split('&'), function(keyValue){
if (keyValue) {
key_value = keyValue.split('=');
- key = decodeURIComponent(key_value[0]);
- obj[key] = key_value[1] ? decodeURIComponent(key_value[1]) : true;
+ key = unescape(key_value[0]);
+ obj[key] = key_value[1] ? unescape(key_value[1]) : true;
}
});
return obj;
@@ -362,7 +362,7 @@ function parseKeyValue(keyValue) {
function toKeyValue(obj) {
var parts = [];
foreach(obj, function(value, key){
- parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ parts.push(escape(key) + '=' + escape(value));
});
return parts.length ? parts.join('&') : '';
}
diff --git a/src/services.js b/src/services.js
index 3dd7df09..6a52d25a 100644
--- a/src/services.js
+++ b/src/services.js
@@ -26,7 +26,7 @@ angularService("$location", function(browser){
} else {
href = check('href') || check('protocol', '://', 'host', ':', 'port', '', 'path', '?', 'search');
var hash = check('hash');
- if (isUndefined(hash)) hash = check('hashPath', '?', 'hashSearch');
+ if (isUndefined(hash)) hash = checkHashPathSearch();
if (isDefined(hash)) {
href = (href || location.href).split('#')[0];
href+= '#' + hash;
@@ -53,6 +53,14 @@ angularService("$location", function(browser){
return same ? undefined : parts.join('');
}
+ function checkHashPathSearch(){
+ if (lastLocation.hashPath === location.hashPath &&
+ equals(lastLocation.hashSearch, location.hashSearch) )
+ return undefined;
+ var url = toKeyValue(location.hashSearch);
+ return escape(location.hashPath) + (url ? '?' + url : '');
+ }
+
function parseUrl(url){
if (isDefined(url)) {
var match = URL_MATCH.exec(url);
@@ -67,7 +75,7 @@ angularService("$location", function(browser){
if (location.hash)
location.hash = location.hash.substr(1);
match = HASH_MATCH.exec(location.hash);
- location.hashPath = match[1] || '';
+ location.hashPath = unescape(match[1] || '');
location.hashSearch = parseKeyValue(match[3]);
copy(location, lastLocation);