Skip to content

Instantly share code, notes, and snippets.

@mikermcneil
Created November 19, 2012 04:57
Show Gist options
  • Select an option

  • Save mikermcneil/4109043 to your computer and use it in GitHub Desktop.

Select an option

Save mikermcneil/4109043 to your computer and use it in GitHub Desktop.
Agnostic storage adapter for HTML localStorage + Chrome sync storage
var Storage;
// If this is running as a chrome extension, use chrome sync storage
if (chrome && chrome.storage && chrome.storage.sync) {
Storage = {
get: function (key,cb) {
chrome.storage.sync.get(key,function(result) {
cb(null,result && result[key]);
});
},
set: function (key,val,cb) {
var args = normalizeSetArgs(key,val,cb);
chrome.storage.sync.set(args.data,function() {
args.callback && args.callback();
});
}
};
}
// Otherwise fall back to window.localStorage
else {
Storage = {
get: function (key,cb) {
cb(null,window.localStorage.getItem(key));
},
set: function (key,val,cb) {
var args = normalizeSetArgs(key,val,cb);
_.each(args,function(v,k) {
window.localStorage.setItem(k,v);
});
args.callback && args.callback();
}
};
}
// Assign to Mast
Mast.LocalStorage = Storage;
function normalizeSetArgs(key,val,cb) {
// Normalize arguments
var toStore,callback;
if (_.isObject(key)) {
toStore = key;
callback = val;
}
else {
toStore = {};
toStore[key] = val;
callback = cb;
}
return {
data: toStore,
callback: callback
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment