A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
45 lines
1.2 KiB
import Search from './settings/Search'; |
|
|
|
const trimStart = (str: string): string => { |
|
// NOTE String.trimStart is available on Firefox 61 |
|
return str.replace(/^\s+/, ''); |
|
}; |
|
|
|
const SUPPORTED_PROTOCOLS = ['http:', 'https:', 'ftp:', 'mailto:', 'about:']; |
|
|
|
const searchUrl = (keywords: string, search: Search): string => { |
|
try { |
|
let u = new URL(keywords); |
|
if (SUPPORTED_PROTOCOLS.includes(u.protocol.toLowerCase())) { |
|
return u.href; |
|
} |
|
} catch (e) { |
|
// fallthrough |
|
} |
|
if (keywords.includes('.') && !keywords.includes(' ')) { |
|
return 'http://' + keywords; |
|
} |
|
let template = search.engines[search.defaultEngine]; |
|
let query = keywords; |
|
|
|
let first = trimStart(keywords).split(' ')[0]; |
|
if (Object.keys(search.engines).includes(first)) { |
|
template = search.engines[first]; |
|
query = trimStart(trimStart(keywords).slice(first.length)); |
|
} |
|
return template.replace('{}', encodeURIComponent(query)); |
|
}; |
|
|
|
const normalizeUrl = (url: string): string => { |
|
try { |
|
let u = new URL(url); |
|
if (SUPPORTED_PROTOCOLS.includes(u.protocol.toLowerCase())) { |
|
return u.href; |
|
} |
|
} catch (e) { |
|
// fallthrough |
|
} |
|
return 'http://' + url; |
|
}; |
|
|
|
export { searchUrl, normalizeUrl };
|
|
|