diff options
| -rw-r--r-- | src/actions/command.js | 33 | 
1 files changed, 29 insertions, 4 deletions
| diff --git a/src/actions/command.js b/src/actions/command.js index 3e879a6..022e4f6 100644 --- a/src/actions/command.js +++ b/src/actions/command.js @@ -2,11 +2,36 @@ import * as tabs from '../background/tabs';  import * as histories from '../background/histories';  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 {      return new URL(string).href;    } catch (e) { -    return 'http://' + string; +    if (string.includes('.') && !string.includes(' ')) { +      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);    }  }; @@ -43,10 +68,10 @@ const doCommand = (name, remaining) => {    case 'o':    case 'open':      // TODO use search engined and pass keywords to them -    return openCommand(normalizeUrl(remaining)); +    return openCommand(normalizeUrl(remaining, DEFAULT_SEARCH_ENGINES));    case 't':    case 'tabopen': -    return tabopenCommand(normalizeUrl(remaining)); +    return tabopenCommand(normalizeUrl(remaining, DEFAULT_SEARCH_ENGINES));    case 'b':    case 'buffer':      return bufferCommand(remaining); | 
