diff options
Diffstat (limited to 'src/services.js')
| -rw-r--r-- | src/services.js | 79 |
1 files changed, 39 insertions, 40 deletions
diff --git a/src/services.js b/src/services.js index 79bc75c4..f9133aca 100644 --- a/src/services.js +++ b/src/services.js @@ -25,62 +25,61 @@ angularServiceInject("$location", function(browser) { scope.$eval(); } }); - + this.$onEval(PRIORITY_FIRST, updateBrowser); this.$onEval(PRIORITY_LAST, updateBrowser); - + update(lastLocationHref); lastLocationHash = location.hash; - + return location; - + // PUBLIC METHODS - + /** * Update location object * Does not immediately update the browser * Browser is updated at the end of $eval() - * + * * @example * scope.$location.update('http://www.angularjs.org/path#hash?search=x'); * scope.$location.update({host: 'www.google.com', protocol: 'https'}); * scope.$location.update({hashPath: '/path', hashSearch: {a: 'b', x: true}}); - * + * * @param {String | Object} Full href as a string or hash object with properties */ function update(href) { if (isString(href)) { extend(location, parseHref(href)); - } - else { + } else { if (isDefined(href.hash)) { extend(href, parseHash(href.hash)); } - + extend(location, href); - + if (isDefined(href.hashPath || href.hashSearch)) { location.hash = composeHash(location); } - + location.href = composeHref(location); } } - + /** * Update location hash * @see update() - * + * * @example * scope.$location.updateHash('/hp') * ==> update({hashPath: '/hp'}) - * + * * scope.$location.updateHash({a: true, b: 'val'}) * ==> update({hashSearch: {a: true, b: 'val'}}) - * + * * scope.$location.updateHash('/hp', {a: true}) * ==> update({hashPath: '/hp', hashSearch: {a: true}}) - * + * * @param {String | Object} hashPath as String or hashSearch as Object * @param {String | Object} hashPath as String or hashSearch as Object [optional] */ @@ -91,42 +90,42 @@ angularServiceInject("$location", function(browser) { } update(hash); } - + /** * Returns string representation - href - * + * * @return {String} Location's href property */ function toString() { updateLocation(); return location.href; } - + /** * Cancel change of the location - * + * * Calling update(), updateHash() or setting a property does not immediately * change the browser's url. Url is changed at the end of $eval() - * + * * By calling this method, you can cancel the change (before end of $eval()) - * + * */ function cancel() { update(lastLocationHref); } - + // INNER METHODS /** * Update location object - * + * * User is allowed to change properties, so after property change, * location object is not in consistent state. - * + * * @example * scope.$location.href = 'http://www.angularjs.org/path#a/b' * immediately after this call, other properties are still the old ones... - * + * * This method checks the changes and update location to the consistent state */ function updateLocation() { @@ -138,14 +137,14 @@ angularServiceInject("$location", function(browser) { } update(location.href); } - + /** * If location has changed, update the browser * This method is called at the end of $eval() phase */ function updateBrowser() { updateLocation(); - + if (location.href != lastLocationHref) { browser.setUrl(lastLocationHref = location.href); lastLocationHash = location.hash; @@ -154,7 +153,7 @@ angularServiceInject("$location", function(browser) { /** * Compose href string from a location object - * + * * @param {Object} Location object with all properties * @return {String} Composed href */ @@ -166,10 +165,10 @@ angularServiceInject("$location", function(browser) { (port ? ':' + port : '') + loc.path + (url ? '?' + url : '') + (loc.hash ? '#' + loc.hash : ''); } - + /** * Compose hash string from location object - * + * * @param {Object} Object with hashPath and hashSearch properties * @return {String} Hash string */ @@ -180,14 +179,14 @@ angularServiceInject("$location", function(browser) { /** * Parse href string into location object - * + * * @param {String} Href * @return {Object} Location */ function parseHref(href) { var loc = {}; var match = URL_MATCH.exec(href); - + if (match) { loc.href = href.replace('#$', ''); loc.protocol = match[1]; @@ -196,29 +195,29 @@ angularServiceInject("$location", function(browser) { loc.path = match[6]; loc.search = parseKeyValue(match[8]); loc.hash = match[10] || ''; - + extend(loc, parseHash(loc.hash)); } - + return loc; } - + /** * Parse hash string into object - * + * * @param {String} Hash * @param {Object} Object with hashPath and hashSearch properties */ function parseHash(hash) { var h = {}; var match = HASH_MATCH.exec(hash); - + if (match) { h.hash = hash; h.hashPath = unescape(match[1] || ''); h.hashSearch = parseKeyValue(match[3]); } - + return h; } }, ['$browser'], EAGER_PUBLISHED); |
