aboutsummaryrefslogtreecommitdiffstats
path: root/background_scripts/settings.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'background_scripts/settings.coffee')
-rw-r--r--background_scripts/settings.coffee67
1 files changed, 67 insertions, 0 deletions
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