diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/location.js | 16 | ||||
| -rw-r--r-- | src/ng/urlUtils.js | 32 | 
2 files changed, 30 insertions, 18 deletions
diff --git a/src/ng/location.js b/src/ng/location.js index 6ec7d337..f06a5f81 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -22,8 +22,8 @@ function encodePath(path) {    return segments.join('/');  } -function parseAbsoluteUrl(absoluteUrl, locationObj) { -  var parsedUrl = urlResolve(absoluteUrl); +function parseAbsoluteUrl(absoluteUrl, locationObj, appBase) { +  var parsedUrl = urlResolve(absoluteUrl, appBase);    locationObj.$$protocol = parsedUrl.protocol;    locationObj.$$host = parsedUrl.hostname; @@ -31,12 +31,12 @@ function parseAbsoluteUrl(absoluteUrl, locationObj) {  } -function parseAppUrl(relativeUrl, locationObj) { +function parseAppUrl(relativeUrl, locationObj, appBase) {    var prefixed = (relativeUrl.charAt(0) !== '/');    if (prefixed) {      relativeUrl = '/' + relativeUrl;    } -  var match = urlResolve(relativeUrl); +  var match = urlResolve(relativeUrl, appBase);    locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?        match.pathname.substring(1) : match.pathname);    locationObj.$$search = parseKeyValue(match.search); @@ -91,7 +91,7 @@ function LocationHtml5Url(appBase, basePrefix) {    this.$$html5 = true;    basePrefix = basePrefix || '';    var appBaseNoFile = stripFile(appBase); -  parseAbsoluteUrl(appBase, this); +  parseAbsoluteUrl(appBase, this, appBase);    /** @@ -106,7 +106,7 @@ function LocationHtml5Url(appBase, basePrefix) {            appBaseNoFile);      } -    parseAppUrl(pathUrl, this); +    parseAppUrl(pathUrl, this, appBase);      if (!this.$$path) {        this.$$path = '/'; @@ -158,7 +158,7 @@ function LocationHtml5Url(appBase, basePrefix) {  function LocationHashbangUrl(appBase, hashPrefix) {    var appBaseNoFile = stripFile(appBase); -  parseAbsoluteUrl(appBase, this); +  parseAbsoluteUrl(appBase, this, appBase);    /** @@ -178,7 +178,7 @@ function LocationHashbangUrl(appBase, hashPrefix) {        throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url,            hashPrefix);      } -    parseAppUrl(withoutHashUrl, this); +    parseAppUrl(withoutHashUrl, this, appBase);      this.$$compose();    }; diff --git a/src/ng/urlUtils.js b/src/ng/urlUtils.js index 51d40f9e..cba8981c 100644 --- a/src/ng/urlUtils.js +++ b/src/ng/urlUtils.js @@ -67,7 +67,7 @@ var originUrl = urlResolve(window.location.href, true);   *   | pathname      | The pathname, beginning with "/"   *   */ -function urlResolve(url) { +function urlResolve(url, base) {    var href = url,        pathname; @@ -92,10 +92,9 @@ function urlResolve(url) {     * do not include drive names for routing.     */ -  pathname = removeWindowsDriveName(urlParsingNode.pathname); +  pathname = removeWindowsDriveName(urlParsingNode.pathname, url, base);    pathname = (pathname.charAt(0) === '/') ? pathname : '/' + pathname; -    // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils    return {      href: urlParsingNode.href, @@ -107,13 +106,6 @@ function urlResolve(url) {      port: urlParsingNode.port,      pathname: pathname    }; - -  function removeWindowsDriveName (path) { -    var firstPathSegmentMatch; - -    firstPathSegmentMatch = windowsFilePathExp.exec(path); -    return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; -  }  } @@ -129,3 +121,23 @@ function urlIsSameOrigin(requestUrl) {    return (parsed.protocol === originUrl.protocol &&            parsed.host === originUrl.host);  } + +function removeWindowsDriveName (path, url, base) { +  var firstPathSegmentMatch; + +  //Get the relative path from the input URL. +  if (url.indexOf(base) === 0) { +    url = url.replace(base, ''); +  } + +  /* +   * The input URL intentionally contains a +   * first path segment that ends with a colon. +   */ +  if (windowsFilePathExp.exec(url)) { +    return path; +  } + +  firstPathSegmentMatch = windowsFilePathExp.exec(path); +  return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; +}
\ No newline at end of file  | 
