aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2015-05-06 05:18:59 +0100
committerStephen Blott2015-05-06 05:46:20 +0100
commit1f97221aef5cfe28200df81a68a139a3f2b07784 (patch)
tree62b6031f5d384d69d353976b6eb5e3a246c4fd81
parent7d11b1699454366bf99e8e5033ba39b127687fcb (diff)
downloadvimium-1f97221aef5cfe28200df81a68a139a3f2b07784.tar.bz2
Search completion; move all filter messages to a single port.
-rw-r--r--background_scripts/completion.coffee2
-rw-r--r--background_scripts/main.coffee26
-rw-r--r--pages/vomnibar.coffee24
3 files changed, 23 insertions, 29 deletions
diff --git a/background_scripts/completion.coffee b/background_scripts/completion.coffee
index c91825b5..8a69b645 100644
--- a/background_scripts/completion.coffee
+++ b/background_scripts/completion.coffee
@@ -331,7 +331,7 @@ class SearchEngineCompleter
searchEngines: {}
userIsTyping: ->
- SearchEngines.userIsTyping()
+ CompletionEngines.userIsTyping()
filter: (queryTerms, onComplete) ->
{ keyword: keyword, url: url, description: description } = @getSearchEngineMatches queryTerms
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee
index 09a6b89f..066e4cb6 100644
--- a/background_scripts/main.coffee
+++ b/background_scripts/main.coffee
@@ -60,6 +60,17 @@ completers =
bookmarks: new MultiCompleter([completionSources.bookmarks])
tabs: new MultiCompleter([completionSources.tabs])
+completionHandlers =
+ filter: (completer, args, port) ->
+ queryTerms = args.query.split(/\s+/).filter (s) -> 0 < s.length
+ completer.filter queryTerms, (results) -> port.postMessage id: args.id, results: results
+
+ refreshCompleter: (completer) -> completer.refresh()
+ userIsTyping: (completer) -> completer.userIsTyping()
+
+handleCompletions = (args, port) ->
+ completionHandlers[args.handler] completers[args.name], args, port
+
chrome.runtime.onConnect.addListener (port, name) ->
senderTabId = if port.sender.tab then port.sender.tab.id else null
# If this is a tab we've been waiting to open, execute any "tab loaded" handlers, e.g. to restore
@@ -217,18 +228,6 @@ handleSettings = (request, port) ->
values[key] = Settings.get key for own key of values
port.postMessage { values }
-refreshCompleter = (request) -> completers[request.name].refresh()
-
-whitespaceRegexp = /\s+/
-filterCompleter = (args, port) ->
- if args.name? and args.userIsTyping
- completers[args.name].userIsTyping?()
-
- if args.id? and args.name? and args.query?
- queryTerms = if (args.query == "") then [] else args.query.split(whitespaceRegexp)
- completers[args.name].filter queryTerms, (results) ->
- port.postMessage id: args.id, results: results
-
chrome.tabs.onSelectionChanged.addListener (tabId, selectionInfo) ->
if (selectionChangedHandlers.length > 0)
selectionChangedHandlers.pop().call()
@@ -643,7 +642,7 @@ bgLog = (request, sender) ->
portHandlers =
keyDown: handleKeyDown,
settings: handleSettings,
- filterCompleter: filterCompleter
+ completions: handleCompletions
sendRequestHandlers =
getCompletionKeys: getCompletionKeysRequest
@@ -661,7 +660,6 @@ sendRequestHandlers =
pasteFromClipboard: pasteFromClipboard
isEnabledForUrl: isEnabledForUrl
selectSpecificTab: selectSpecificTab
- refreshCompleter: refreshCompleter
createMark: Marks.create.bind(Marks)
gotoMark: Marks.goto.bind(Marks)
setIcon: setIcon
diff --git a/pages/vomnibar.coffee b/pages/vomnibar.coffee
index d9a86a3f..a2d4df85 100644
--- a/pages/vomnibar.coffee
+++ b/pages/vomnibar.coffee
@@ -220,15 +220,14 @@ class VomnibarUI
document.body.addEventListener "click", => @hide()
#
-# Sends filter and refresh requests to a Vomnibox completer on the background page.
+# Sends requests to a Vomnibox completer on the background page.
#
class BackgroundCompleter
- # - name: The background page completer that you want to interface with. Either "omni", "tabs", or
- # "bookmarks". */
+ # name is background-page completer to connect to: "omni", "tabs", or "bookmarks".
constructor: (@name) ->
@messageId = null
- @filterPort = chrome.runtime.connect name: "filterCompleter"
- @filterPort.onMessage.addListener handler = @messageHandler
+ @port = chrome.runtime.connect name: "completions"
+ @port.onMessage.addListener handler = @messageHandler
messageHandler: (msg) =>
# We ignore messages which arrive too late.
@@ -236,29 +235,26 @@ class BackgroundCompleter
# The result objects coming from the background page will be of the form:
# { html: "", type: "", url: "" }
# type will be one of [tab, bookmark, history, domain].
- results = msg.results.map (result) ->
+ results = msg.results.map (result) =>
functionToCall = if result.type == "tab"
- BackgroundCompleter.completionActions.switchToTab.curry result.tabId
+ @completionActions.switchToTab.curry result.tabId
else
- BackgroundCompleter.completionActions.navigateToUrl.curry result.url
+ @completionActions.navigateToUrl.curry result.url
result.performAction = functionToCall
result
@mostRecentCallback results
filter: (query, @mostRecentCallback) ->
@messageId = Utils.createUniqueId()
- @filterPort.postMessage id: @messageId, name: @name, query: query
+ @port.postMessage name: @name, handler: "filter", id: @messageId, query: query
refresh: ->
- chrome.runtime.sendMessage handler: "refreshCompleter", name: @name
+ @port.postMessage name: @name, handler: "refreshCompleter"
userIsTyping: ->
- @filterPort.postMessage name: @name, userIsTyping: true
+ @port.postMessage name: @name, handler: "userIsTyping"
-extend BackgroundCompleter,
- #
# These are the actions we can perform when the user selects a result in the Vomnibox.
- #
completionActions:
navigateToUrl: (url, openInNewTab) ->
# If the URL is a bookmarklet prefixed with javascript:, we shouldn't open that in a new tab.