diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/location.js | 22 | 
1 files changed, 19 insertions, 3 deletions
diff --git a/src/ng/location.js b/src/ng/location.js index 730d2433..7b0c6ec0 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -84,6 +84,7 @@ function serverBase(url) {   * @param {string} basePrefix url path prefix   */  function LocationHtml5Url(appBase, basePrefix) { +  this.$$html5 = true;    basePrefix = basePrefix || '';    var appBaseNoFile = stripFile(appBase);    /** @@ -140,7 +141,8 @@ function LocationHtml5Url(appBase, basePrefix) {  /**   * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is disabled or not supported + * This object is exposed as $location service when developer doesn't opt into html5 mode. + * It also serves as the base class for html5 mode fallback on legacy browsers.   *   * @constructor   * @param {string} appBase application base URL @@ -149,18 +151,25 @@ function LocationHtml5Url(appBase, basePrefix) {  function LocationHashbangUrl(appBase, hashPrefix) {    var appBaseNoFile = stripFile(appBase); +  matchUrl(appBase, this); + +    /**     * Parse given hashbang url into properties     * @param {string} url Hashbang url     * @private     */    this.$$parse = function(url) { -    matchUrl(url, this);      var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);      if (!isString(withoutBaseUrl)) {        throw $locationMinErr('istart', 'Invalid url "{0}", does not start with "{1}".', url, appBase);      } -    var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' ? beginsWith(hashPrefix, withoutBaseUrl) : withoutBaseUrl; +    var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' +        ? beginsWith(hashPrefix, withoutBaseUrl) +        : (this.$$html5) +          ? withoutBaseUrl +          : ''; +      if (!isString(withoutHashUrl)) {        throw $locationMinErr('nohash', 'Invalid url "{0}", missing hash prefix "{1}".', url, hashPrefix);      } @@ -198,6 +207,7 @@ function LocationHashbangUrl(appBase, hashPrefix) {   * @param {string} hashPrefix hashbang prefix   */  function LocationHashbangInHtml5Url(appBase, hashPrefix) { +  this.$$html5 = true;    LocationHashbangUrl.apply(this, arguments);    var appBaseNoFile = stripFile(appBase); @@ -221,6 +231,12 @@ LocationHashbangInHtml5Url.prototype =    LocationHtml5Url.prototype = {    /** +   * Are we in html5 mode? +   * @private +   */ +  $$html5: false, + +  /**     * Has any change been replacing ?     * @private     */  | 
