]> git.wh0rd.org - tt-rss.git/blob - lib/dojo/_base/url.js.uncompressed.js
update dojo to 1.7.3
[tt-rss.git] / lib / dojo / _base / url.js.uncompressed.js
1 define("dojo/_base/url", ["./kernel"], function(dojo) {
2 // module:
3 // dojo/url
4 // summary:
5 // This module contains dojo._Url
6
7 var
8 ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),
9 ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
10 _Url = function(){
11 var n = null,
12 _a = arguments,
13 uri = [_a[0]];
14 // resolve uri components relative to each other
15 for(var i = 1; i<_a.length; i++){
16 if(!_a[i]){ continue; }
17
18 // Safari doesn't support this.constructor so we have to be explicit
19 // FIXME: Tracked (and fixed) in Webkit bug 3537.
20 // http://bugs.webkit.org/show_bug.cgi?id=3537
21 var relobj = new _Url(_a[i]+""),
22 uriobj = new _Url(uri[0]+"");
23
24 if(
25 relobj.path == "" &&
26 !relobj.scheme &&
27 !relobj.authority &&
28 !relobj.query
29 ){
30 if(relobj.fragment != n){
31 uriobj.fragment = relobj.fragment;
32 }
33 relobj = uriobj;
34 }else if(!relobj.scheme){
35 relobj.scheme = uriobj.scheme;
36
37 if(!relobj.authority){
38 relobj.authority = uriobj.authority;
39
40 if(relobj.path.charAt(0) != "/"){
41 var path = uriobj.path.substring(0,
42 uriobj.path.lastIndexOf("/") + 1) + relobj.path;
43
44 var segs = path.split("/");
45 for(var j = 0; j < segs.length; j++){
46 if(segs[j] == "."){
47 // flatten "./" references
48 if(j == segs.length - 1){
49 segs[j] = "";
50 }else{
51 segs.splice(j, 1);
52 j--;
53 }
54 }else if(j > 0 && !(j == 1 && segs[0] == "") &&
55 segs[j] == ".." && segs[j-1] != ".."){
56 // flatten "../" references
57 if(j == (segs.length - 1)){
58 segs.splice(j, 1);
59 segs[j - 1] = "";
60 }else{
61 segs.splice(j - 1, 2);
62 j -= 2;
63 }
64 }
65 }
66 relobj.path = segs.join("/");
67 }
68 }
69 }
70
71 uri = [];
72 if(relobj.scheme){
73 uri.push(relobj.scheme, ":");
74 }
75 if(relobj.authority){
76 uri.push("//", relobj.authority);
77 }
78 uri.push(relobj.path);
79 if(relobj.query){
80 uri.push("?", relobj.query);
81 }
82 if(relobj.fragment){
83 uri.push("#", relobj.fragment);
84 }
85 }
86
87 this.uri = uri.join("");
88
89 // break the uri into its main components
90 var r = this.uri.match(ore);
91
92 this.scheme = r[2] || (r[1] ? "" : n);
93 this.authority = r[4] || (r[3] ? "" : n);
94 this.path = r[5]; // can never be undefined
95 this.query = r[7] || (r[6] ? "" : n);
96 this.fragment = r[9] || (r[8] ? "" : n);
97
98 if(this.authority != n){
99 // server based naming authority
100 r = this.authority.match(ire);
101
102 this.user = r[3] || n;
103 this.password = r[4] || n;
104 this.host = r[6] || r[7]; // ipv6 || ipv4
105 this.port = r[9] || n;
106 }
107 };
108 _Url.prototype.toString = function(){ return this.uri; };
109
110 return dojo._Url = _Url;
111 });