aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJez Ng2012-01-25 12:53:19 -0500
committerJez Ng2012-01-26 02:48:00 -0500
commit8e746c4125066e7eda03126f0fd86c421eacfc44 (patch)
treef0bc75b677e882f6c4c33f05befb9639da5f9234
parentb8789c56b0ee96ee1eca75291028017c4f9d89cc (diff)
downloadvimium-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.js6
-rw-r--r--options.html15
-rw-r--r--vimiumFrontend.js20
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();