46 lines
830 B
JavaScript
46 lines
830 B
JavaScript
const protocols = ['http', 'https', 'mailto', 'tel']
|
|
|
|
/**
|
|
* @param {string} uri
|
|
* @returns {string}
|
|
*/
|
|
export function uriTransformer(uri) {
|
|
const url = (uri || '').trim()
|
|
const first = url.charAt(0)
|
|
|
|
if (first === '#' || first === '/') {
|
|
return url
|
|
}
|
|
|
|
const colon = url.indexOf(':')
|
|
if (colon === -1) {
|
|
return url
|
|
}
|
|
|
|
let index = -1
|
|
|
|
while (++index < protocols.length) {
|
|
const protocol = protocols[index]
|
|
|
|
if (
|
|
colon === protocol.length &&
|
|
url.slice(0, protocol.length).toLowerCase() === protocol
|
|
) {
|
|
return url
|
|
}
|
|
}
|
|
|
|
index = url.indexOf('?')
|
|
if (index !== -1 && colon > index) {
|
|
return url
|
|
}
|
|
|
|
index = url.indexOf('#')
|
|
if (index !== -1 && colon > index) {
|
|
return url
|
|
}
|
|
|
|
// eslint-disable-next-line no-script-url
|
|
return 'javascript:void(0)'
|
|
}
|