aboutsummaryrefslogtreecommitdiffstats
path: root/background_scripts
diff options
context:
space:
mode:
authorStephen Blott2016-10-23 16:50:48 +0100
committerStephen Blott2016-10-23 16:50:51 +0100
commit24a6217f26911ba4e934f4a7bff8bcd30c227163 (patch)
tree52aadf4a8a0f639b85740251ff93cca2b8747f28 /background_scripts
parent84b3e7d65d6cd7391f5b00cb77398cb60fe245bb (diff)
downloadvimium-24a6217f26911ba4e934f4a7bff8bcd30c227163.tar.bz2
Move SearchEngines to bg-utils.coffee.
`SearchEngines` was previously in `utils.coffee`, which means it was loaded in *every* content frame. This is unnecessary, since it is only used on the background page. So this PR moves it there. Also: - Simplify some unnecessarily complex logic in `vomnibar.coffee`. - Re-use `Utils.parseLines()` to parse the custom search engine configuation text.
Diffstat (limited to 'background_scripts')
-rw-r--r--background_scripts/bg_utils.coffee31
1 files changed, 31 insertions, 0 deletions
diff --git a/background_scripts/bg_utils.coffee b/background_scripts/bg_utils.coffee
index 26033476..b8e618ff 100644
--- a/background_scripts/bg_utils.coffee
+++ b/background_scripts/bg_utils.coffee
@@ -85,4 +85,35 @@ BgUtils =
continue if line[0] in '#"'
line
+# Utility for parsing and using the custom search-engine configuration. We re-use the previous parse if the
+# search-engine configuration is unchanged.
+SearchEngines =
+ previousSearchEngines: null
+ searchEngines: null
+
+ refresh: (searchEngines) ->
+ unless @previousSearchEngines? and searchEngines == @previousSearchEngines
+ @previousSearchEngines = searchEngines
+ @searchEngines = new AsyncDataFetcher (callback) ->
+ engines = {}
+ for line in BgUtils.parseLines searchEngines
+ tokens = line.split /\s+/
+ if 2 <= tokens.length
+ keyword = tokens[0].split(":")[0]
+ searchUrl = tokens[1]
+ description = tokens[2..].join(" ") || "search (#{keyword})"
+ engines[keyword] = {keyword, searchUrl, description} if Utils.hasFullUrlPrefix searchUrl
+
+ callback engines
+
+ # Use the parsed search-engine configuration, possibly asynchronously.
+ use: (callback) ->
+ @searchEngines.use callback
+
+ # Both set (refresh) the search-engine configuration and use it at the same time.
+ refreshAndUse: (searchEngines, callback) ->
+ @refresh searchEngines
+ @use callback
+
+root.SearchEngines = SearchEngines
root.BgUtils = BgUtils