UNPKG

yonui-ys

Version:
186 lines (151 loc) 4.5 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } var url = { scope: 'search', paramReg: /^(?:([A-Za-z]+):(\/{0,3}))?([0-9.\-A-Za-z]+\.[0-9A-Za-z]+)?(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/, names: ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'], query: function query(name, scope) { if (scope === 'hash') { return this.queryHash(name, scope); } var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); var scope = scope || this.scope; var r = location[scope].substr(1).match(reg); if (r != null) { return decodeURIComponent(r[2]); } return null; }, queryHash: function queryHash(name, scope) { var url = location[scope] + ''; var regstr = '/(\\?|\\&)' + name + '=([^\\&]+)/'; var reg = eval(regstr); var result = url.match(reg); if (result && result[2]) { return result[2]; } }, addParam: function addParam(url, data) { if (typeof data === 'undefined') { return; } var hashReg = /#.*$/gi; var hashMatch = url.match(hashReg); var hash = ''; if (hashMatch) { hash = hashMatch[0]; } // 去除hash值的url var preUrl = url.replace(hash, ''); var searchReg = /\?(.*?)$/gi; var result = searchReg.exec(preUrl); var query, newUrl; if (result) { query = result[1].split('#')[0]; } var id = !query ? '' : '&'; return preUrl + (query && query.length > 0 ? '' : '?') + (id + $.param(data)) + hash; }, delQuery: function delQuery(url, key) { var path = ''; var param = ''; var hash = ''; if (url.indexOf('?') == -1) { path = url; } else { path = url.substr(0, url.indexOf('?')); param = url.substr(url.indexOf('?') + 1); if (param.indexOf('#') != -1) { hash = param.substr(param.indexOf('#') + 1); param = param.substr(0, param.indexOf('#')); } } var params = param.split('&'); for (var i = params.length - 1; i >= 0; i--) { if (params[i].indexOf(key + '=') > -1) { params.splice(i, 1); break; } } return path + (params.join('&') ? '?' + params.join('&') : '') + (hash ? '#' + hash : ''); }, /** * 将URL query的字符串解析成对象 */ parseQuery: function parseQuery(query) { var ret = {}; var qs; var q; var _qs; if (_typeof(query) === 'object') { for (var p in query) { if (query.hasOwnProperty(p) && query[p] !== null) { ret[p] = query[p]; } } } else { qs = query.split('&'); for (var i = 0; i < qs.length; i++) { if ((q = qs[i]) && (_qs = q.split('=')) && _qs[0]) { ret[_qs[0]] = _qs[1] ? decodeURIComponent(_qs[1]) : ''; } } } return ret; }, /** * 将URL解析为对象 * @name parse * @return { * url: '', * hash: '', * query: '', * host: '' * ... * } */ parse: function parse(url) { var results = this.paramReg.exec(url); var names = this.names; var ret = {}; var key; for (var i = 0, len = names.length; i < len; i += 1) { key = names[i]; ret[key] = (key == 'path' ? '/' : '') + (results[i] || ''); } return ret; }, /** * 将对象解析为URL字符串 */ stringify: function stringify(data) { var ret = ''; var names = this.names; for (var i = 1; i < names.length; i++) { var key = names[i]; var value = data[key]; if (typeof value !== 'undefined') { ret += function (key, value) { if (key == 'scheme') { return value + ':'; } if (key == 'port') { return value ? ':' + value : ''; } if (key == 'host') { return value; } if (key == 'query') { return value ? '?' + value : ''; } if (key == 'hash') { return value ? '#' + value : ''; } return value; }(key, value); } } return ret; } }; module.exports = url; //# sourceMappingURL=index.js.map