/* parseUri 1.2.1 (c) 2007 Steven Levithan MIT License */ He.Bootstrap('He.Framework.Uri'); He.Framework.Uri.Parse = function(str) { var o = He.Framework.Uri.options, m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), uri = {}, i = 14; while (i--) uri[o.key[i]] = m[i] || ""; uri[o.q.name] = {}; uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { if ($1) uri[o.q.name][$1] = $2; }); return uri; }; He.Framework.Uri.options = { strictMode: false, key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], q: { name: "queryKey", parser: /(?:^|&)([^&=]*)=?([^&]*)/g }, parser: { strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } }; He.Framework.Uri.IsAbsolute = function(_url) { var url = He.Framework.Uri.Parse(_url); return url.host != ''; }; He.Framework.Uri.MakeAbsolute = function(_url) { if(!_url) { return _url; } var url = He.Framework.Uri.Parse(_url); if(!url.protocol) { var base = He.Framework.Uri.Parse(document.location.href); if(_url.charAt(0) != '/') { var spath = base.relative.replace(/\/#\//,'').split('/'); var dpath = _url.replace(/\/#\//,'').split('/'); while(dpath.length) { if(dpath[0] == '..') { spath.pop(); } else { spath.push(dpath[0]); } dpath.shift(); } _url = base.protocol + '://' + base.host + '/' + spath.join('/'); } else { _url = base.protocol + '://' + base.host + _url; } } return _url if(_url.charAt(0) == '/') { _url = _url.substr(1); } var url = He.Framework.Uri.Parse(_url); var root = url.protocol + '://' + url.authority; return root + '/' + _url; }; He.Framework.Uri.IsRelative = function(_url) { return !He.Framework.Uri.IsAbsolute(_url); }; He.Framework.Uri.MakeRelative = function(_url) { var url = He.Framework.Uri.Parse(_url); if(url.protocol || url.authority) { var root = url.protocol + '://' + url.authority; _url = _url.replace(new RegExp('\/#\/'),'/').replace(new RegExp(root),''); if(!_url) { _url = '/'; } } return _url; };