Get and set typed preference values
This commit is contained in:
parent
110c31d495
commit
e7f6c62e01
50
storage.js
50
storage.js
|
@ -168,3 +168,53 @@ function loadPrefs(prefs) {
|
||||||
el.addEventListener("change", changePref);
|
el.addEventListener("change", changePref);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var prefs = {
|
||||||
|
// NB: localStorage["not_key"] is undefined, localStorage.getItem("not_key") is null
|
||||||
|
|
||||||
|
// defaults
|
||||||
|
"openEditInWindow": false, // new editor opens in a own browser window
|
||||||
|
"show-badge": false, // display text on popup menu icon
|
||||||
|
"smart-indent": true, // CodeMirror smart indent
|
||||||
|
|
||||||
|
"popup.breadcrumbs": true, // display "New style" links as URL breadcrumbs
|
||||||
|
"popup.breadcrumbs.usePath": false, // use URL path for "this URL"
|
||||||
|
|
||||||
|
"popup.enabledFirst": true, // display enabled styles before disabled styles
|
||||||
|
"manage.enabledFirst": true, // display enabled styles before disabled styles
|
||||||
|
|
||||||
|
"observer.observeFrameContent": false, // [hh] add MutationObserver inside IFRAMEs
|
||||||
|
"observer.observeFrameLoad": false, // [hh] add onLoad listener to IFRAMEs
|
||||||
|
// https://github.com/JasonBarnabe/stylish-chrome/pull/39#issuecomment-76681235
|
||||||
|
|
||||||
|
NO_DEFAULT_PREFERENCE: "No default preference for '%s'",
|
||||||
|
UNHANDLED_DATA_TYPE: "Default '%s' is of type '%s' - what should be done with it?",
|
||||||
|
|
||||||
|
getPref: function(key, ifUndefined) {
|
||||||
|
// Returns localStorage[key], ifUndefined, this[key], or undefined
|
||||||
|
// as type of ifUndefined, this[key], or localStorage[key]
|
||||||
|
if (ifUndefined === undefined) ifUndefined = this[key]; // default value
|
||||||
|
var value = localStorage[key];
|
||||||
|
if (undefined === value) { // no user preference
|
||||||
|
if (ifUndefined === undefined) console.error(this.NO_DEFAULT_PREFERENCE, key);
|
||||||
|
return ifUndefined;
|
||||||
|
}
|
||||||
|
switch (typeof ifUndefined) {
|
||||||
|
case "boolean": return value.toLowerCase() === "true";
|
||||||
|
case "number": return Number(value);
|
||||||
|
case "object": return JSON.parse(value);
|
||||||
|
case "string": break;
|
||||||
|
case "undefined": console.warn(this.NO_DEFAULT_PREFERENCE, key); break;
|
||||||
|
default: console.error(UNHANDLED_DATA_TYPE, key, typeof ifUndefined);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
},
|
||||||
|
setPref: function(key, value) {
|
||||||
|
if (!(key in this)) console.warn(this.NO_DEFAULT_PREFERENCE, key);
|
||||||
|
if (value === undefined) localStorage.removeItem(key);
|
||||||
|
else localStorage.setItem(key, JSON.stringify(value));
|
||||||
|
|
||||||
|
notifyAllTabs({method: "prefChanged", prefName: key, value: value});
|
||||||
|
},
|
||||||
|
removePref: function(key) { setPref(key, undefined) }
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user