New file |
0,0 → 1,115 |
/* |
Copyright (c) 2004-2006, The Dojo Foundation |
All Rights Reserved. |
|
Licensed under the Academic Free License version 2.1 or above OR the |
modified BSD license. For more information on Dojo licensing, see: |
|
http://dojotoolkit.org/community/licensing.shtml |
*/ |
|
|
|
dojo.provide("dojo.uri.Uri"); |
dojo.uri = new function () { |
this.dojoUri = function (uri) { |
return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri); |
}; |
this.moduleUri = function (module, uri) { |
var loc = dojo.hostenv.getModuleSymbols(module).join("/"); |
if (!loc) { |
return null; |
} |
if (loc.lastIndexOf("/") != loc.length - 1) { |
loc += "/"; |
} |
var colonIndex = loc.indexOf(":"); |
var slashIndex = loc.indexOf("/"); |
if (loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > slashIndex)) { |
loc = dojo.hostenv.getBaseScriptUri() + loc; |
} |
return new dojo.uri.Uri(loc, uri); |
}; |
this.Uri = function () { |
var uri = arguments[0]; |
for (var i = 1; i < arguments.length; i++) { |
if (!arguments[i]) { |
continue; |
} |
var relobj = new dojo.uri.Uri(arguments[i].toString()); |
var uriobj = new dojo.uri.Uri(uri.toString()); |
if ((relobj.path == "") && (relobj.scheme == null) && (relobj.authority == null) && (relobj.query == null)) { |
if (relobj.fragment != null) { |
uriobj.fragment = relobj.fragment; |
} |
relobj = uriobj; |
} else { |
if (relobj.scheme == null) { |
relobj.scheme = uriobj.scheme; |
if (relobj.authority == null) { |
relobj.authority = uriobj.authority; |
if (relobj.path.charAt(0) != "/") { |
var path = uriobj.path.substring(0, uriobj.path.lastIndexOf("/") + 1) + relobj.path; |
var segs = path.split("/"); |
for (var j = 0; j < segs.length; j++) { |
if (segs[j] == ".") { |
if (j == segs.length - 1) { |
segs[j] = ""; |
} else { |
segs.splice(j, 1); |
j--; |
} |
} else { |
if (j > 0 && !(j == 1 && segs[0] == "") && segs[j] == ".." && segs[j - 1] != "..") { |
if (j == segs.length - 1) { |
segs.splice(j, 1); |
segs[j - 1] = ""; |
} else { |
segs.splice(j - 1, 2); |
j -= 2; |
} |
} |
} |
} |
relobj.path = segs.join("/"); |
} |
} |
} |
} |
uri = ""; |
if (relobj.scheme != null) { |
uri += relobj.scheme + ":"; |
} |
if (relobj.authority != null) { |
uri += "//" + relobj.authority; |
} |
uri += relobj.path; |
if (relobj.query != null) { |
uri += "?" + relobj.query; |
} |
if (relobj.fragment != null) { |
uri += "#" + relobj.fragment; |
} |
} |
this.uri = uri.toString(); |
var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"; |
var r = this.uri.match(new RegExp(regexp)); |
this.scheme = r[2] || (r[1] ? "" : null); |
this.authority = r[4] || (r[3] ? "" : null); |
this.path = r[5]; |
this.query = r[7] || (r[6] ? "" : null); |
this.fragment = r[9] || (r[8] ? "" : null); |
if (this.authority != null) { |
regexp = "^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$"; |
r = this.authority.match(new RegExp(regexp)); |
this.user = r[3] || null; |
this.password = r[4] || null; |
this.host = r[5]; |
this.port = r[7] || null; |
} |
this.toString = function () { |
return this.uri; |
}; |
}; |
}; |
|