diff options
| author | Stephen Blott | 2015-06-06 12:01:23 +0100 | 
|---|---|---|
| committer | Stephen Blott | 2015-06-06 12:01:25 +0100 | 
| commit | 4eda19de339212f86a9b008a4f3142a61d62829e (patch) | |
| tree | dc9c314b327baf8cdebb05062087413431090cab /background_scripts/completion_engines.coffee | |
| parent | 2d5a01c9791a81aa87eaa935a1183f10950bdc84 (diff) | |
| download | vimium-4eda19de339212f86a9b008a4f3142a61d62829e.tar.bz2 | |
Re-work completions: extend engine wrapper to handle prefixes.
This commit contains the bulk og the material changes for which the
previous commits established the basis.
1) Add a general framework for detecting query prefixes in search URLs,
adding them to query sent to the completion engine, and stripping them
from the resulting suggestions.  This allows the user to have a
search engine...
   j: http://www.google.com/search?q=javascript+%s Javascript
and have the prefix "javascript" included (automatically) in queries
sent to completion engines, which results in substantially better
suggestions.
2) Re-work completion for Google Maps in a simpler form.
Diffstat (limited to 'background_scripts/completion_engines.coffee')
| -rw-r--r-- | background_scripts/completion_engines.coffee | 55 | 
1 files changed, 26 insertions, 29 deletions
| diff --git a/background_scripts/completion_engines.coffee b/background_scripts/completion_engines.coffee index afbb2040..b572375d 100644 --- a/background_scripts/completion_engines.coffee +++ b/background_scripts/completion_engines.coffee @@ -15,9 +15,9 @@  #      successfully), and returns a list of suggestions (a list of strings).  This method is always executed  #      within the context of a try/catch block, so errors do not propagate.  # -#   4. For documentation only, each completion engine *must* and example custom search engine.  The example -#      must include an example "keyword" and and example "searchUrl", and may include and example -#      "description". +#   4. Each completion engine *must* include an example custom search engine.  The example must include an +#      example "keyword" and an example "searchUrl", and may include an example "description" and an +#      "explanation".  #  # Each new completion engine must be added to the list "CompletionEngines" at the bottom of this file.  # @@ -45,37 +45,34 @@ class GoogleXMLBaseEngine extends BaseEngine        suggestion  class Google extends GoogleXMLBaseEngine -  constructor: (regexps = null) -> +  constructor: () ->      super        engineUrl: "http://suggestqueries.google.com/complete/search?ss_protocol=legace&client=toolbar&q=%s" -      regexps: regexps ? "^https?://[a-z]+\\.google\\.(com|ie|co\\.uk|ca|com\\.au)/" +      regexps: "^https?://[a-z]+\\.google\\.(com|ie|co\\.uk|ca|com\\.au)/"        example:          searchUrl: "http://www.google.com/search?q=%s"          keyword: "g" -## # A wrapper class for Google completions.  This adds prefix terms to the query, and strips those terms from -## # the resulting suggestions.  For example, for Google Maps, we add "map of" as a prefix, then strip "map of" -## # from the resulting suggestions. -## class GoogleWithPrefix extends Google -##   constructor: (prefix, args...) -> -##     super args... -##     prefix = prefix.trim() -##     @prefix = "#{prefix} " -##     @queryTerms = prefix.split /\s+/ -##   getUrl: (queryTerms) -> super [ @queryTerms..., queryTerms... ] -##   parse: (xhr) -> -##     super(xhr) -##       .filter (suggestion) => suggestion.startsWith @prefix -##       .map (suggestion) => suggestion[@prefix.length..].ltrim() -## -## # For Google Maps, we add the prefix "map of" to the query, and send it to Google's general search engine, -## # then strip "map of" from the resulting suggestions. -## class GoogleMaps extends GoogleWithPrefix -##   constructor: -> -##     super "map of", "^https?://[a-z]+\\.google\\.(com|ie|co\\.uk|ca|com\\.au)/maps" -##     @exampleSearchUrl = "https://www.google.com/maps?q=%s" -##     @exampleKeyword = "m" -##     @exampleDescription = "Google maps" +class GoogleMaps extends GoogleXMLBaseEngine +  prefix: "map of " +  constructor: () -> +    super +      engineUrl: "http://suggestqueries.google.com/complete/search?ss_protocol=legace&client=toolbar&q=#{@prefix.split(' ').join '+'}%s" +      regexps: "^https?://[a-z]+\\.google\\.(com|ie|co\\.uk|ca|com\\.au)/maps" +      example: +        searchUrl: "https://www.google.com/maps?q=%s" +        keyword: "m" +        explanation: +          """ +          This uses regular Google completion, but prepends the text "<tt>map of</tt>" to the query.  It works +          well for places, countries, states, geographical regions and the like, but will not perform address +          search. +          """ + +  parse: (xhr) -> +    for suggestion in super xhr +      continue unless suggestion.startsWith @prefix +      suggestion[@prefix.length..]  class Youtube extends GoogleXMLBaseEngine    constructor: -> @@ -154,7 +151,7 @@ class DummyCompletionEngine extends BaseEngine  # Note: Order matters here.  CompletionEngines = [    Youtube -  # GoogleMaps +  GoogleMaps    Google    DuckDuckGo    Wikipedia | 
