diff options
| author | Phil Crosby | 2012-06-10 23:29:13 -0700 |
|---|---|---|
| committer | Phil Crosby | 2012-06-12 22:00:34 -0700 |
| commit | c7ce35423e3871dc121830f38de9cd79aebd704a (patch) | |
| tree | ec7795b370b8f772547da576c7b5115b89b09b5b | |
| parent | d4c6b5708a6c388026dc348b81dd168b345d60de (diff) | |
| download | vimium-c7ce35423e3871dc121830f38de9cd79aebd704a.tar.bz2 | |
Port settings.js to coffeescript
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | background_page.html | 34 | ||||
| -rw-r--r-- | background_scripts/settings.coffee | 67 | ||||
| -rw-r--r-- | background_scripts/settings.js | 81 | ||||
| -rw-r--r-- | options.html | 2 |
5 files changed, 86 insertions, 99 deletions
@@ -3,3 +3,4 @@ background_scripts/commands.js tests/completion_test.js tests/test_helper.js tests/utils_test.js +background_scripts/settings.js diff --git a/background_page.html b/background_page.html index bf1af077..f3b68d3e 100644 --- a/background_page.html +++ b/background_page.html @@ -119,7 +119,7 @@ */ function isEnabledForUrl(request) { // excludedUrls are stored as a series of URL expressions separated by newlines. - var excludedUrls = settings.get("excludedUrls").split("\n"); + var excludedUrls = Settings.get("excludedUrls").split("\n"); var isEnabled = true; for (var i = 0; i < excludedUrls.length; i++) { // The user can add "*" to the URL which means ".*" @@ -137,9 +137,9 @@ url = trim(url); if (url === "") { return; } - var excludedUrls = settings.get("excludedUrls"); + var excludedUrls = Settings.get("excludedUrls"); excludedUrls += "\n" + url; - settings.set("excludedUrls", excludedUrls); + Settings.set("excludedUrls", excludedUrls); chrome.tabs.query({ windowId: chrome.windows.WINDOW_ID_CURRENT, active: true }, function(tabs) { updateActiveState(tabs[0].id); @@ -147,7 +147,7 @@ } function saveHelpDialogSettings(request) { - settings.set("helpDialog_showAdvancedCommands", request.showAdvancedCommands); + Settings.set("helpDialog_showAdvancedCommands", request.showAdvancedCommands); } function showHelp(callback, frameId) { @@ -174,7 +174,7 @@ dialogHtml = dialogHtml.replace("{{version}}", currentVersion); dialogHtml = dialogHtml.replace("{{title}}", customTitle || "Help"); dialogHtml = dialogHtml.replace("{{showAdvancedCommands}}", - settings.get("helpDialog_showAdvancedCommands")); + Settings.get("helpDialog_showAdvancedCommands")); return dialogHtml; } @@ -249,7 +249,7 @@ * Returns the user-provided CSS overrides. */ function getLinkHintCss(request) { - return { linkHintCss: (settings.get("userDefinedLinkHintCss") || "") }; + return { linkHintCss: (Settings.get("userDefinedLinkHintCss") || "") }; } /* @@ -257,7 +257,7 @@ * We should now dismiss that message in all tabs. */ function upgradeNotificationClosed(request) { - settings.set("previousVersion", currentVersion); + Settings.set("previousVersion", currentVersion); sendRequestToAllTabs({ name: "hideUpgradeNotification" }); } @@ -280,11 +280,11 @@ */ function handleSettings(args, port) { if (args.operation == "get") { - var value = settings.get(args.key); + var value = Settings.get(args.key); port.postMessage({ key: args.key, value: value }); } else { // operation == "set" - settings.set(args.key, args.value); + Settings.set(args.key, args.value); } } @@ -686,9 +686,9 @@ function shouldShowUpgradeMessage() { // Avoid showing the upgrade notification when previousVersion is undefined, which is the case for new // installs. - if (!settings.get("previousVersion")) - settings.set("previousVersion", currentVersion); - return compareVersions(currentVersion, settings.get("previousVersion")) == 1; + if (!Settings.get("previousVersion")) + Settings.set("previousVersion", currentVersion); + return compareVersions(currentVersion, Settings.get("previousVersion")) == 1; } function openOptionsPageInNewTab() { @@ -766,20 +766,20 @@ function init() { Commands.clearKeyMappingsAndSetDefaults(); - if (settings.has("keyMappings")) - Commands.parseCustomKeyMappings(settings.get("keyMappings")); + if (Settings.has("keyMappings")) + Commands.parseCustomKeyMappings(Settings.get("keyMappings")); // In version 1.22, we changed the mapping for "d" and "u" to be scroll page down/up instead of close // and restore tab. For existing users, we want to preserve existing behavior for them by adding some // custom key mappings on their behalf. - if (settings.get("previousVersion") == "1.21") { - var customKeyMappings = settings.get("keyMappings") || ""; + if (Settings.get("previousVersion") == "1.21") { + var customKeyMappings = Settings.get("keyMappings") || ""; if ((Commands.keyToCommandRegistry["d"] || {}).command == "scrollPageDown") customKeyMappings += "\nmap d removeTab"; if ((Commands.keyToCommandRegistry["u"] || {}).command == "scrollPageUp") customKeyMappings += "\nmap u restoreTab"; if (customKeyMappings != "") { - settings.set("keyMappings", customKeyMappings); + Settings.set("keyMappings", customKeyMappings); Commands.parseCustomKeyMappings(customKeyMappings); } } diff --git a/background_scripts/settings.coffee b/background_scripts/settings.coffee new file mode 100644 index 00000000..ba9d1831 --- /dev/null +++ b/background_scripts/settings.coffee @@ -0,0 +1,67 @@ +# +# Used by everyone to manipulate localStorage. +# +Settings = + defaults: + scrollStepSize: 60 + linkHintCharacters: "sadfjklewcmpgh" + filterLinkHints: false + hideHud: false + userDefinedLinkHintCss: + "div > .vimiumHintMarker {" + "\n" + + "/* linkhint boxes */ " + "\n" + + "background-color: yellow;" + "\n" + + "border: 1px solid #E3BE23;" + "\n" + + "}" + "\n\n" + + "div > .vimiumHintMarker span {" + "\n" + + "/* linkhint text */ " + "\n" + + "color: black;" + "\n" + + "font-weight: bold;" + "\n" + + "font-size: 12px;" + "\n" + + "}" + "\n\n" + + "div > .vimiumHintMarker > .matchingCharacter {" + "\n" + + "}" + excludedUrls: "http*://mail.google.com/*\n" + + "http*://www.google.com/reader/*\n" + + # NOTE : If a page contains both a single angle-bracket link and a double angle-bracket link, then in + # most cases the single bracket link will be "prev/next page" and the double bracket link will be + # "first/last page", so we put the single bracket first in the pattern string so that it gets searched + # for first. + + # "\bprev\b,\bprevious\b,\bback\b,<,←,«,≪,<<" + previousPatterns: "prev,previous,back,<,\u2190,\xab,\u226a,<<" + # "\bnext\b,\bmore\b,>,→,»,≫,>>" + nextPatterns: "next,more,>,\u2192,\xbb,\u226b,>>" + + init: -> + # settingsVersion was introduced in v1.31, and is used to coordinate data migration. We do not use + # previousVersion as it is used to coordinate the display of the upgrade message, and is not updated + # early enough when the extension loads. + # 1.31 was also the version where we converted all localStorage values to JSON. + if (!this.has("settingsVersion")) + for key of localStorage + # filterLinkHints' checkbox state used to be stored as a string + if (key == "filterLinkHints") + localStorage[key] = if (localStorage[key] == "true") then true else false + else + localStorage[key] = JSON.stringify(localStorage[key]) + this.set("settingsVersion", utils.getCurrentVersion()) + + get: (key) -> + if (key of localStorage) then JSON.parse(localStorage[key]) else this.defaults[key] + + set: (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.defaults[key]) + this.clear(key) + else + localStorage[key] = JSON.stringify(value) + + clear: (key) -> delete localStorage[key] + + has: (key) -> key of localStorage + +Settings.init() +root = exports ? window +root.Settings = Settings diff --git a/background_scripts/settings.js b/background_scripts/settings.js deleted file mode 100644 index a00317b0..00000000 --- a/background_scripts/settings.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Used by everyone to manipulate localStorage. - */ -var settings = { - - defaults: { - scrollStepSize: 60, - linkHintCharacters: "sadfjklewcmpgh", - filterLinkHints: false, - hideHud: false, - userDefinedLinkHintCss: - "div > .vimiumHintMarker {" + "\n" + - "/* linkhint boxes */ " + "\n" + - "background-color: yellow;" + "\n" + - "border: 1px solid #E3BE23;" + "\n" + - "}" + "\n\n" + - "div > .vimiumHintMarker span {" + "\n" + - "/* linkhint text */ " + "\n" + - "color: black;" + "\n" + - "font-weight: bold;" + "\n" + - "font-size: 12px;" + "\n" + - "}" + "\n\n" + - "div > .vimiumHintMarker > .matchingCharacter {" + "\n" + - "}", - excludedUrls: "http*://mail.google.com/*\n" + - "http*://www.google.com/reader/*\n", - - // NOTE : If a page contains both a single angle-bracket link and a double angle-bracket link, then in - // most cases the single bracket link will be "prev/next page" and the double bracket link will be - // "first/last page", so we put the single bracket first in the pattern string so that it gets searched - // for first. - - // "\bprev\b,\bprevious\b,\bback\b,<,←,«,≪,<<" - previousPatterns: "prev,previous,back,<,\u2190,\xab,\u226a,<<", - // "\bnext\b,\bmore\b,>,→,»,≫,>>" - nextPatterns: "next,more,>,\u2192,\xbb,\u226b,>>", - }, - - init: function() { - // settingsVersion was introduced in v1.31, and is used to coordinate data migration. We do not use - // previousVersion as it is used to coordinate the display of the upgrade message, and is not updated - // early enough when the extension loads. - // 1.31 was also the version where we converted all localStorage values to JSON. - if (!this.has("settingsVersion")) { - for (var key in localStorage) { - // filterLinkHints' checkbox state used to be stored as a string - if (key == "filterLinkHints") - localStorage[key] = localStorage[key] === "true" ? true : false; - else - localStorage[key] = JSON.stringify(localStorage[key]); - } - this.set("settingsVersion", utils.getCurrentVersion()); - } - }, - - get: function(key) { - if (!(key in localStorage)) - 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.defaults[key]) - this.clear(key); - else - localStorage[key] = JSON.stringify(value); - }, - - clear: function(key) { - delete localStorage[key]; - }, - - has: function(key) { - return key in localStorage; - }, - -}; - -settings.init(); diff --git a/options.html b/options.html index ba97d0ab..f4b17997 100644 --- a/options.html +++ b/options.html @@ -86,7 +86,7 @@ <script type="text/javascript"> $ = function(id) { return document.getElementById(id); }; - var bgSettings = chrome.extension.getBackgroundPage().settings; + var bgSettings = chrome.extension.getBackgroundPage().Settings; var editableFields = ["scrollStepSize", "excludedUrls", "linkHintCharacters", "userDefinedLinkHintCss", "keyMappings", "filterLinkHints", "previousPatterns", "nextPatterns", "hideHud"]; |
