parent
f914d76ce8
commit
09c5247dba
7 changed files with 70 additions and 61 deletions
@ -0,0 +1,25 @@ |
|||||||
|
const trimStart = (str) => { |
||||||
|
// NOTE String.trimStart is available on Firefox 61
|
||||||
|
return str.replace(/^\s+/, ''); |
||||||
|
}; |
||||||
|
|
||||||
|
const normalizeUrl = (keywords, searchSettings) => { |
||||||
|
try { |
||||||
|
return new URL(keywords).href; |
||||||
|
} catch (e) { |
||||||
|
if (keywords.includes('.') && !keywords.includes(' ')) { |
||||||
|
return 'http://' + keywords; |
||||||
|
} |
||||||
|
let template = searchSettings.engines[searchSettings.default]; |
||||||
|
let query = keywords; |
||||||
|
|
||||||
|
let first = trimStart(keywords).split(' ')[0]; |
||||||
|
if (Object.keys(searchSettings.engines).includes(first)) { |
||||||
|
template = searchSettings.engines[first]; |
||||||
|
query = trimStart(trimStart(keywords).slice(first.length)); |
||||||
|
} |
||||||
|
return template.replace('{}', encodeURIComponent(query)); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
export { normalizeUrl }; |
@ -0,0 +1,30 @@ |
|||||||
|
import * as parsers from 'shared/urls'; |
||||||
|
|
||||||
|
describe("shared/commands/parsers", () => { |
||||||
|
describe('#normalizeUrl', () => { |
||||||
|
const config = { |
||||||
|
default: 'google', |
||||||
|
engines: { |
||||||
|
google: 'https://google.com/search?q={}', |
||||||
|
yahoo: 'https://yahoo.com/search?q={}', |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
it('convertes search url', () => { |
||||||
|
expect(parsers.normalizeUrl('google apple', config)) |
||||||
|
.to.equal('https://google.com/search?q=apple'); |
||||||
|
expect(parsers.normalizeUrl('yahoo apple', config)) |
||||||
|
.to.equal('https://yahoo.com/search?q=apple'); |
||||||
|
expect(parsers.normalizeUrl('google apple banana', config)) |
||||||
|
.to.equal('https://google.com/search?q=apple%20banana'); |
||||||
|
expect(parsers.normalizeUrl('yahoo C++CLI', config)) |
||||||
|
.to.equal('https://yahoo.com/search?q=C%2B%2BCLI'); |
||||||
|
}); |
||||||
|
|
||||||
|
it('user default search engine', () => { |
||||||
|
expect(parsers.normalizeUrl('apple banana', config)) |
||||||
|
.to.equal('https://google.com/search?q=apple%20banana'); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
Reference in new issue