diff options
| -rw-r--r-- | background_scripts/completion.coffee | 20 | ||||
| -rw-r--r-- | lib/utils.coffee | 15 |
2 files changed, 21 insertions, 14 deletions
diff --git a/background_scripts/completion.coffee b/background_scripts/completion.coffee index 66546708..eb80f3cd 100644 --- a/background_scripts/completion.coffee +++ b/background_scripts/completion.coffee @@ -230,26 +230,18 @@ class HistoryCompleter results = [] HistoryCache.use (history) => searchUrl = Settings.get "searchUrl" - searchUrlTerminator = new RegExp "[?&#/]" results = if queryTerms.length > 0 history.filter (entry) -> RankingUtils.matches(queryTerms, entry.url, entry.title) else [] onComplete results.map (entry) => - # If this history URL starts with the search URL, we reconstruct the original search terms, and insert - # them into the vomnibar when this suggestion is selected. We use try/catch because - # decodeURIComponent() can throw an error. - insertText = - try - if entry.url.startsWith searchUrl - # This maps "https://www.google.ie/search?q=star+wars&..." to "star wars". - entry.url[searchUrl.length..].split(searchUrlTerminator)[0].split("+").map(decodeURIComponent).join " " - catch - null - - # If this history item does not have a title and we found its query text above, then use its query - # text as its title. + # This entry's URL might match the default search engine, in which case we'll insert its query text + # into the vomnibar input whenever this entry is selected. + insertText = Utils.extractQuery searchUrl, entry.url + + # If this history item does not have a title and we successfully extracted query text above, then use + # that text in lieu of a title. entry.title ||= insertText if insertText? new Suggestion diff --git a/lib/utils.coffee b/lib/utils.coffee index cbc937b6..cd466b9b 100644 --- a/lib/utils.coffee +++ b/lib/utils.coffee @@ -114,6 +114,21 @@ Utils = searchUrl += "%s" unless 0 <= searchUrl.indexOf "%s" searchUrl.replace /%s/g, @createSearchQuery query + # Extract a query from url if it appears to be a URL created by createSearchQuery. + # For example, map "https://www.google.ie/search?q=star+wars&foo&bar" to "star wars". + extractQuery: do => + queryTerminator = new RegExp "[?&#/]" + httpProtocolRegexp = new RegExp "^https?://" + (searchUrl, url) -> + url = url.replace httpProtocolRegexp + searchUrl = searchUrl.split("%s")[0].replace httpProtocolRegexp + # We use try/catch because decodeURIComponent can throw an exception. + try + if url.startsWith searchUrl + url[searchUrl.length..].split(queryTerminator)[0].split("+").map(decodeURIComponent).join " " + catch + null + # Converts :string into a Google search if it's not already a URL. We don't bother with escaping characters # as Chrome will do that for us. convertToUrl: (string) -> |
