Rev 1318 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*Copyright (c) 2004-2006, The Dojo FoundationAll Rights Reserved.Licensed under the Academic Free License version 2.1 or above OR themodified 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;};};};