aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--background_page.html17
-rw-r--r--manifest.json1
-rw-r--r--settings.html37
-rw-r--r--vimiumFrontend.js31
4 files changed, 78 insertions, 8 deletions
diff --git a/background_page.html b/background_page.html
index ca55ada8..d8f28df4 100644
--- a/background_page.html
+++ b/background_page.html
@@ -4,10 +4,13 @@
var tabQueue = {}; // windowId -> Array
var keyQueue = ""; // Queue of keys typed
+ var defaultSettings = { "scrollStepSize": 60 };
+
// Port handler mapping
var portHandlers = { "keyDown": handleKeyDown,
"returnScrollPosition": handleReturnScrollPosition,
- "getCurrentTabUrl": getCurrentTabUrl };
+ "getCurrentTabUrl": getCurrentTabUrl,
+ "getSetting": getSetting};
// Event handlers
var selectionChangedHandlers = [];
@@ -50,6 +53,18 @@
});
}
+ /*
+ * Used by the content scripts to get settings from the local storage.
+ */
+ function getSetting(args) {
+ var value = localStorage[args.key] ? localStorage[args.key] : defaultSettings[args.key];
+
+ chrome.tabs.getSelected(null, function (tab) {
+ var returnPort = chrome.tabs.connect(tab.id, { name: "returnSetting" });
+ returnPort.postMessage({ key: args.key, value: value });
+ });
+ }
+
chrome.tabs.onSelectionChanged.addListener(function (tabId, selectionInfo) {
if (selectionChangedHandlers.length > 0) { selectionChangedHandlers.pop().call(); }
});
diff --git a/manifest.json b/manifest.json
index d5498c00..6ac8ecb0 100644
--- a/manifest.json
+++ b/manifest.json
@@ -3,6 +3,7 @@
"version": "1.0",
"description": "The Hacker's Browser.",
"background_page": "background_page.html",
+ "options_page": "settings.html",
"permissions": [
"tabs"
],
diff --git a/settings.html b/settings.html
new file mode 100644
index 00000000..8e89de92
--- /dev/null
+++ b/settings.html
@@ -0,0 +1,37 @@
+<html>
+ <head>
+ <title>Vimium Settings</title>
+ </head>
+
+ <script type="text/javascript">
+
+ // Saves options to localStorage.
+ function save_options() {
+ var scrollStepSize = document.getElementById("scrollStepSize").value;
+ localStorage["scrollStepSize"] = scrollStepSize;
+
+ // Update status to let user know options were saved.
+ var status = document.getElementById("status");
+ status.innerHTML = "Settings Saved.";
+ setTimeout(function() { status.innerHTML = ""; }, 750);
+ }
+
+ // Restores select box state to saved value from localStorage.
+ function restore_options() {
+ // TODO(ilya): Create a single option list with defaults somewhere to share across various scripts.
+ var scrollStepSize = localStorage["scrollStepSize"];
+ if (!scrollStepSize) { scrollStepSize = 60; }
+
+ document.getElementById("scrollStepSize").value = scrollStepSize;
+ }
+ </script>
+
+ <body onload="restore_options()">
+ <h1>Vimium - Settings</h1>
+ Scroll Step Size: <input id="scrollStepSize" type="text"> px (default: 60)
+ <br>
+
+ <button onclick="save_options()">Save Settings</button>
+ <div id="status"></div>
+ </body>
+</html>
diff --git a/vimiumFrontend.js b/vimiumFrontend.js
index e1fd3ec2..3424a52e 100644
--- a/vimiumFrontend.js
+++ b/vimiumFrontend.js
@@ -1,14 +1,29 @@
-var SCROLL_STEP_SIZE = 60; // Pixels
+var settings = {};
+var settingsToLoad = ["scrollStepSize"];
+
var getCurrentUrlHandlers = []; // function (url)
var keyCodes = { ESC: 27 };
var insertMode = false;
var keyPort;
+var settingPort;
// TODO(philc): This should be pulled from the extension's storage when the page loads.
var currentZoomLevel = 100;
+function getSetting(key) {
+ if (!settingPort)
+ {
+ settingPort = chrome.extension.connect({ name: "getSetting" });
+ }
+ settingPort.postMessage({ key: key });
+}
+
+function setSetting(args) { settings[args.key] = args.value; }
+
function initializeFrontend() {
+ for (var i in settingsToLoad) { getSetting(settingsToLoad[i]); }
+
document.addEventListener("keydown", onKeydown);
document.addEventListener("focus", onFocusCapturePhase, true);
document.addEventListener("blur", onBlurCapturePhase, true);
@@ -42,6 +57,8 @@ function initializeFrontend() {
port.onMessage.addListener(function (args) {
if (getCurrentUrlHandlers.length > 0) { getCurrentUrlHandlers.pop()(args.url); }
});
+ } else if (port.name == "returnSetting") {
+ port.onMessage.addListener(setSetting);
}
});
@@ -60,12 +77,12 @@ function zoomOut() { document.body.style.zoom = (currentZoomLevel -= 20) + "%";
function scrollToBottom() { window.scrollTo(0, document.body.scrollHeight); }
function scrollToTop() { window.scrollTo(0, 0); }
-function scrollUp() { window.scrollBy(0, -1 * SCROLL_STEP_SIZE); }
-function scrollDown() { window.scrollBy(0, SCROLL_STEP_SIZE); }
-function scrollPageUp() { window.scrollBy(0, -6 * SCROLL_STEP_SIZE); }
-function scrollPageDown() { window.scrollBy(0, 6 * SCROLL_STEP_SIZE); }
-function scrollLeft() { window.scrollBy(-1 * SCROLL_STEP_SIZE, 0); }
-function scrollRight() { window.scrollBy(SCROLL_STEP_SIZE, 0); }
+function scrollUp() { window.scrollBy(0, -1 * settings["scrollStepSize"]); }
+function scrollDown() { window.scrollBy(0, settings["scrollStepSize"]); }
+function scrollPageUp() { window.scrollBy(0, -6 * settings["scrollStepSize"]); }
+function scrollPageDown() { window.scrollBy(0, 6 * settings["scrollStepSize"]); }
+function scrollLeft() { window.scrollBy(-1 * settings["scrollStepSize"], 0); }
+function scrollRight() { window.scrollBy(settings["scrollStepSize"], 0); }
function reload() { window.location.reload(); }
function goBack() { history.back(); }