search with engines

jh-changes
Shin'ya Ueoka 7 years ago
parent 8a8222158c
commit 0e924a27d1
  1. 31
      src/actions/command.js

@ -2,12 +2,37 @@ import * as tabs from '../background/tabs';
import * as histories from '../background/histories'; import * as histories from '../background/histories';
import * as consoleActions from './console'; import * as consoleActions from './console';
const normalizeUrl = (string) => { const DEFAULT_SEARCH_ENGINES = {
default: 'google',
engines: {
'google': 'https://google.com/search?q={}',
'yahoo': 'https://search.yahoo.com/search?p={}',
'bing': 'https://www.bing.com/search?q={}',
'duckduckgo': 'https://duckduckgo.com/?q={}',
'twitter': 'https://twitter.com/search?q={}',
'wikipedia': 'https://en.wikipedia.org/w/index.php?search={}'
}
};
const normalizeUrl = (string, searchConfig) => {
try { try {
return new URL(string).href; return new URL(string).href;
} catch (e) { } catch (e) {
if (string.includes('.') && !string.includes(' ')) {
return 'http://' + string; return 'http://' + string;
} }
let query = encodeURI(string);
let template = searchConfig.engines[
searchConfig.default
];
for (let key in searchConfig.engines) {
if (string.startsWith(key + ' ')) {
query = encodeURI(string.replace(key + ' ', ''));
template = searchConfig.engines[key];
}
}
return template.replace('{}', query);
}
}; };
const openCommand = (url) => { const openCommand = (url) => {
@ -43,10 +68,10 @@ const doCommand = (name, remaining) => {
case 'o': case 'o':
case 'open': case 'open':
// TODO use search engined and pass keywords to them // TODO use search engined and pass keywords to them
return openCommand(normalizeUrl(remaining)); return openCommand(normalizeUrl(remaining, DEFAULT_SEARCH_ENGINES));
case 't': case 't':
case 'tabopen': case 'tabopen':
return tabopenCommand(normalizeUrl(remaining)); return tabopenCommand(normalizeUrl(remaining, DEFAULT_SEARCH_ENGINES));
case 'b': case 'b':
case 'buffer': case 'buffer':
return bufferCommand(remaining); return bufferCommand(remaining);