NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/xe-utils/methods/url/parseUrl.js
2023-09-14 14:47:11 +08:00

52 lines
1.6 KiB
JavaScript

var staticLocation = require('../static/staticLocation')
var unserialize = require('./unserialize')
var helperGetLocatOrigin = require('../web/helperGetLocatOrigin')
function parseURLQuery (uri) {
return unserialize(uri.split('?')[1] || '')
}
function parseUrl (url) {
var hashs, portText, searchs, parsed
var href = '' + url
if (href.indexOf('//') === 0) {
href = (staticLocation ? staticLocation.protocol : '') + href
} else if (href.indexOf('/') === 0) {
href = helperGetLocatOrigin() + href
}
searchs = href.replace(/#.*/, '').match(/(\?.*)/)
parsed = {
href: href,
hash: '',
host: '',
hostname: '',
protocol: '',
port: '',
search: searchs && searchs[1] && searchs[1].length > 1 ? searchs[1] : ''
}
parsed.path = href.replace(/^([a-z0-9.+-]*:)\/\//, function (text, protocol) {
parsed.protocol = protocol
return ''
}).replace(/^([a-z0-9.+-]*)(:\d+)?\/?/, function (text, hostname, port) {
portText = port || ''
parsed.port = portText.replace(':', '')
parsed.hostname = hostname
parsed.host = hostname + portText
return '/'
}).replace(/(#.*)/, function (text, hash) {
parsed.hash = hash.length > 1 ? hash : ''
return ''
})
hashs = parsed.hash.match(/#((.*)\?|(.*))/)
parsed.pathname = parsed.path.replace(/(\?|#.*).*/, '')
parsed.origin = parsed.protocol + '//' + parsed.host
parsed.hashKey = hashs ? (hashs[2] || hashs[1] || '') : ''
parsed.hashQuery = parseURLQuery(parsed.hash)
parsed.searchQuery = parseURLQuery(parsed.search)
return parsed
}
module.exports = parseUrl