aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--background_scripts/completion.coffee20
-rw-r--r--lib/utils.coffee15
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) ->