UNPKG

ismart-doc

Version:

API documentation generator,base in https://github.com/mhbseal/modoc

98 lines (89 loc) 3.4 kB
/** * 解析url * @author hbmu * @date 2014/11/7 * * @name ParseUrl * @more url注解 * ===================================================================== * * http://username:password@www.example.com:80/path/file.name?query=string#anchor * |__| |______| |______| |_____________||_||___||________||___________||_____| * | | | | | | | | | * protocol user password host port directory file query anchor * |_______________| |_____________| * | | * userInfo path * |___________________________________||_________________________________| * | | * authority relative * |___________________________________________________________________________| * | * source * * ===================================================================== */ define(function () { "use strict"; var names = ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"], // 匹配正则来自https://github.com/allmarkedup/purl/blob/master/purl.js中parser.loose rUrl = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; /** * 构造函数 * * @param {string} 默认为location.href * * @name ParseUrl * @grammar new ParseUrl(url) * @example * var parseUrl = new ParseUrl('http://username:password@www.example.com:80/path/file.name?query=string#anchor'); */ function ParseUrl(url) { if (!url) url = window.location.href; var resources = rUrl.exec(url), result = this.result = {Attr: {}, Param: {}}, query, i = 14; while (i--) result.Attr[names[i]] = resources[i] || ''; if (query = result.Attr['query']) { query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) { if ($1) result.Param[$1] = $2; }); }; }; /** * 读取url中的attr,name为空,则返回所有attr * * @param {string} name,可选 范围"source", "protocol", "authority", "userInfo", "user", * "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor" * @return {string} value * * @name getAttr * @grammar parseUrl.getAttr([name]) * @example * parseUrl.getAttr('port') => '80' * url.getAttr('protocol') => 'http' */ ParseUrl.prototype.getAttr = function(name) { var attrs = this.result.Attr; return name ? attrs[name] : attrs; }; /** * 读取url中的param,name为空,则返回所有param * * @param {string} name * @return {string} value * * @name getParam * @grammar parseUrl.getParam([name]) * @example * parseUrl.getParam() => {query: 'string'} * parseUrl.getParam('query') => 'string' */ ParseUrl.prototype.getParam = function(name) { var params = this.result.Param; return name ? params[name] : params; }; return ParseUrl; });