diff options
| -rw-r--r-- | background_page.html | 17 | ||||
| -rw-r--r-- | manifest.json | 1 | ||||
| -rw-r--r-- | settings.html | 37 | ||||
| -rw-r--r-- | vimiumFrontend.js | 31 |
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(); } |
