]> git.wh0rd.org Git - 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 });