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