diff options
| author | Jez Ng | 2012-01-25 12:53:19 -0500 |
|---|---|---|
| committer | Jez Ng | 2012-01-26 02:48:00 -0500 |
| commit | 8e746c4125066e7eda03126f0fd86c421eacfc44 (patch) | |
| tree | f0bc75b677e882f6c4c33f05befb9639da5f9234 | |
| parent | b8789c56b0ee96ee1eca75291028017c4f9d89cc (diff) | |
| download | vimium-8e746c4125066e7eda03126f0fd86c421eacfc44.tar.bz2 | |
Re-enable Vimium on the options page.
The options page now modifies localStorage using the same settings
interface as the content scripts.
| -rw-r--r-- | background/settings.js | 6 | ||||
| -rw-r--r-- | options.html | 15 | ||||
| -rw-r--r-- | vimiumFrontend.js | 20 |
3 files changed, 30 insertions, 11 deletions
diff --git a/background/settings.js b/background/settings.js index 51ac053c..c30e15ac 100644 --- a/background/settings.js +++ b/background/settings.js @@ -3,7 +3,7 @@ */ var settings = { - defaultSettings: { + defaults: { scrollStepSize: 60, linkHintCharacters: "sadfjklewcmpgh", filterLinkHints: false, @@ -50,14 +50,14 @@ var settings = { get: function(key) { if (!(key in localStorage)) - return this.defaultSettings[key]; + return this.defaults[key]; else return JSON.parse(localStorage[key]); }, set: function(key, value) { // don't store the value if it is equal to the default, so we can change the defaults in the future - if (value === this.defaultSettings[key]) + if (value === this.defaults[key]) this.clear(key); else localStorage[key] = JSON.stringify(value); diff --git a/options.html b/options.html index 02186412..037aabbc 100644 --- a/options.html +++ b/options.html @@ -2,7 +2,13 @@ <head> <title>Vimium Options</title> <script src="lib/utils.js"></script> - <script src="background/settings.js"></script> + <script src="lib/keyboardUtils.js"></script> + <script src="lib/domUtils.js"></script> + <script src="lib/clipboard.js"></script> + <script src="linkHints.js"></script> + <script src="vimiumFrontend.js"></script> + <script src="completionDialog.js"></script> + <script src="bookmarks.js"></script> <style type="text/css" media="screen"> body { font-family:"helvetica neue", "helvetica", "arial", "sans"; @@ -80,7 +86,7 @@ <script type="text/javascript"> $ = function(id) { return document.getElementById(id); }; - var defaultSettings = chrome.extension.getBackgroundPage().defaultSettings; + var defaultSettings = chrome.extension.getBackgroundPage().settings.defaults; var editableFields = ["scrollStepSize", "excludedUrls", "linkHintCharacters", "userDefinedLinkHintCss", "keyMappings", "filterLinkHints", "previousPatterns", "nextPatterns"]; @@ -97,7 +103,10 @@ }; function initializeOptions() { - populateOptions(); + if (settings.isLoaded) + populateOptions(); + else + settings.addEventListener("load", populateOptions); for (var i = 0; i < editableFields.length; i++) { $(editableFields[i]).addEventListener("keyup", onOptionKeyup, false); diff --git a/vimiumFrontend.js b/vimiumFrontend.js index a175f0eb..3d1c9c87 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -47,6 +47,8 @@ var settings = { loadedValues: 0, valuesToLoad: ["scrollStepSize", "linkHintCharacters", "filterLinkHints", "previousPatterns", "nextPatterns", "findModeRawQuery"], + isLoaded: false, + eventListeners: {}, init: function () { this.port = chrome.extension.connect({ name: "settings" }); @@ -77,13 +79,20 @@ var settings = { settings.values[args.key] = args.value; // since load() can be called more than once, loadedValues can be greater than valuesToLoad, but we test // for equality so initializeOnReady only runs once - if (++settings.loadedValues == settings.valuesToLoad.length) - settings.initializeOnReady(); + if (++settings.loadedValues == settings.valuesToLoad.length) { + settings.isLoaded = true; + var listener; + while (listener = settings.eventListeners["load"].pop()) + listener(); + } + }, + + addEventListener: function(eventName, callback) { + if (!(eventName in this.eventListeners)) + this.eventListeners[eventName] = []; + this.eventListeners[eventName].push(callback); }, - initializeOnReady: function () { - linkHints.init(); - } }; /* @@ -98,6 +107,7 @@ var googleRegex = /:\/\/[^/]*google[^/]+/; * Complete initialization work that sould be done prior to DOMReady. */ function initializePreDomReady() { + settings.addEventListener("load", linkHints.init.bind(linkHints)); settings.load(); checkIfEnabledForUrl(); |
