UNPKG

landers.base

Version:

landers.base

51 lines (50 loc) 2.65 kB
; (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);