From 3af1c2751b60c7e36a29ae4ca322f532fb381fbf Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Fri, 14 Sep 2012 16:18:18 -0500 Subject: [PATCH] webutil.js: add localStorage/chrome.storage settings. Add routines to store/read settings in either localStorage or in chrome.storage.sync (which is synchronized between browsers for extensions/apps). Before using chrome.storage.sync the initSettings routine must to called setup the intermediate cache which speeds up access and allows multiple setting changes to be coallesced to avoid hitting storage change frequency limits/quotas. --- include/webutil.js | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/include/webutil.js b/include/webutil.js index fd153e4a..70a0e8ff 100644 --- a/include/webutil.js +++ b/include/webutil.js @@ -118,6 +118,67 @@ WebUtil.eraseCookie = function(name) { WebUtil.createCookie(name,"",-1); }; +/* + * Setting handling. + */ + +WebUtil.initSettings = function(callback) { + var callbackArgs = Array.prototype.slice.call(arguments, 1); + if (chrome && chrome.storage) { + chrome.storage.sync.get(function (cfg) { + WebUtil.settings = cfg; + console.log(WebUtil.settings); + if (callback) { + callback.apply(this, callbackArgs); + } + }); + } else { + // No-op + if (callback) { + callback.apply(this, callbackArgs); + } + } +}; + +// No days means only for this browser session +WebUtil.writeSetting = function(name, value) { + if (chrome && chrome.storage) { + //console.log("writeSetting:", name, value); + if (WebUtil.settings[name] !== value) { + WebUtil.settings[name] = value; + chrome.storage.sync.set(WebUtil.settings); + } + } else { + localStorage.setItem(name, value); + } +}; + +WebUtil.readSetting = function(name, defaultValue) { + var value; + if (chrome && chrome.storage) { + value = WebUtil.settings[name]; + } else { + value = localStorage.getItem(name); + } + if (typeof value === "undefined") { + value = null; + } + if (value === null && typeof defaultValue !== undefined) { + return defaultValue; + } else { + return value; + } +}; + +WebUtil.eraseSetting = function(name) { + if (chrome && chrome.storage) { + chrome.storage.sync.remove(name); + delete WebUtil.settings[name]; + } else { + localStorage.removeItem(name); + } +}; + /* * Alternate stylesheet selection */