landers.base
Version:
landers.base
51 lines (50 loc) • 2.65 kB
JavaScript
; (function (window, Landers) {
Landers = Landers || {};
Landers.path = {
type:function(s){
var me = this, ret = {};
s = s || document.location.href;
//确定是web型的直接返回,剩下情况则是local
if (s.indexOf('http://') === 0) ret = {name:'web', id:1}; // 绝对网络全路径
else if (s.indexOf('/') === 0) ret = {name:'web', id:2}; // 相对网络根目录
else if (s.indexOf('/') > 0 && s.indexOf('file:') == -1) {
ret = {name:'web', id:3}; // 相对网络路径
} else ret.name = 'local';
if(ret.name === 'local') {
if (s.indexOf('file:')===0) ret.id = 1; // 绝对本地全路径
else if (s.indexOf(':\\')===1) ret.id = 1; // 绝对本地全路径
else if (s.indexOf('\\')===0) ret.id = 2; // 相对本地根目录
else ret.id = 3; // 相对本地路径
}; return ret;
},
parse:function(url, field){
if (!url) return; var me = this, type = me.type(url);
var ret = {}; if (type.name === 'web'){
if (type.id > 1) {
var parse = Landers.url.parse(document.location.href);
var path = type.id === 3 ? parse.dirname + '/' + url : url;
url = Landers.url.build(parse.protocol, parse.host, path);
};
ret = Landers.url.parse(url);
ret.url = url;
} else {
url = url.replace('file://', '');
url = url.replace('file:\\\\', '');
switch(type.id){
case 1:
var f = {1:'path', 2:'root', 4:'filename',5:'basename', 6:'extname'};
var reg = /((.?:\\)(.*))\\((.*)\.(.*))$/, r = reg.exec(url); break;
case 2:
var f = {1:'path', 2:'filename',3:'basename', 4:'extname'};
var reg = /\\(.*)\\((.*)\.(.*))$/, r = reg.exec(url); break;
case 3:
var f = {1:'path', 2:'filename',3:'basename', 4:'extname'};
var reg = /(.*)\\((.*)\.(.*))$/, r = reg.exec(url); break;
}
if (r) for (var k in r) {if (f[k]===undefined) continue; ret[f[k]] = r[k]};
}
ret.type = type.name;
return field ? ret[field] : ret;
},
};
})(this, Landers);