// 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())
}