forked from GitHub/gf-core
If you stored "false" and tried to retrieve it with a default value, you got the default value instead of "false".
61 lines
1.4 KiB
JavaScript
61 lines
1.4 KiB
JavaScript
|
|
|
|
// See http://diveintohtml5.info/storage.html
|
|
|
|
function supports_html5_storage() {
|
|
try {
|
|
return 'localStorage' in window && window['localStorage'] !== null;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
var fakedLocalStorage = [] // a shared substitute for persistent localStorage
|
|
|
|
// An interface to localStorage, to store JSON data under a unique prefix
|
|
function appLocalStorage(appPrefix,privateStorage) {
|
|
|
|
function parse(s,def) {
|
|
try { return JSON.parse(s) } catch(e) { return def }
|
|
}
|
|
|
|
function methods(storage) {
|
|
return {
|
|
get: function (name,def) {
|
|
var id=appPrefix+name
|
|
return parse(storage[id]||"",def);
|
|
},
|
|
put: function (name,value) {
|
|
var id=appPrefix+name;
|
|
storage[id]=JSON.stringify(value);
|
|
},
|
|
remove: function(name) {
|
|
var id=appPrefix+name;
|
|
delete storage[id]
|
|
},
|
|
ls: function(prefix) {
|
|
var pre=appPrefix+(prefix||"")
|
|
var files=[]
|
|
for(var i in storage)
|
|
if(hasPrefix(i,pre)) files.push(i.substr(pre.length))
|
|
files.sort()
|
|
return files
|
|
},
|
|
get count() { return this.get("count",0); },
|
|
set count(v) { this.put("count",v); }
|
|
}
|
|
}
|
|
|
|
function get_html5_storage() {
|
|
try {
|
|
return 'localStorage' in window
|
|
&& window['localStorage']
|
|
|| fakedLocalStorage
|
|
} catch (e) {
|
|
return fakedLocalStorage; // fake it
|
|
}
|
|
}
|
|
|
|
return methods(privateStorage || get_html5_storage())
|
|
}
|