70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
/** @typedef {{Save:(key:string, data:object)=>void, Load:(key:string)=>object, ID:string, List:Record<string, object>, Dump:()=>void}} SaveLoad<T=object> */
|
|
|
|
/** @type {Record<string, SaveLoad>} */
|
|
const Master = {};
|
|
const Prefix = "SL:";
|
|
const Delimiter = "_"
|
|
/** @type {(keyOuter:string)=>SaveLoad} */
|
|
function SaveLoad(keyOuter)
|
|
{
|
|
/** @type {SaveLoad} */
|
|
const sl = {
|
|
ID: keyOuter,
|
|
Save(key, data)
|
|
{
|
|
localStorage.setItem(Prefix+keyOuter+Delimiter+key, JSON.stringify(data));
|
|
},
|
|
Load(key)
|
|
{
|
|
const obj = JSON.parse( localStorage.getItem(Prefix+keyOuter+Delimiter+key) || "{}" );
|
|
this.List[key] = obj;
|
|
return obj;
|
|
},
|
|
List:{},
|
|
Dump(){this.List = {};}
|
|
};
|
|
|
|
Master[keyOuter] = sl;
|
|
return sl;
|
|
}
|
|
|
|
/** @type {()=>void} */
|
|
function MassLoad()
|
|
{
|
|
let loaded = 0;
|
|
let scanned = 0;
|
|
for (let i = 0; i < localStorage.length; i++) {
|
|
|
|
scanned++;
|
|
|
|
const fullKey = localStorage.key(i) || "";
|
|
|
|
if(fullKey.substring(0, Prefix.length) == Prefix)
|
|
{
|
|
const delim = fullKey.indexOf(Delimiter);
|
|
const typeKey = fullKey.substring(Prefix.length, delim);
|
|
const type = Master[typeKey];
|
|
if(type)
|
|
{
|
|
const actualKey = fullKey.substring(delim+1);
|
|
type.Load(actualKey) && loaded++;
|
|
}
|
|
}
|
|
}
|
|
console.log("mass load complete. loaded:", loaded, "scanned:", scanned);
|
|
}
|
|
|
|
const Node = SaveLoad("Node");
|
|
const Link = SaveLoad("Link");
|
|
MassLoad();
|
|
console.log(Node.List);
|
|
console.log(Link.List);
|
|
|
|
|
|
|
|
Node.Save("n1", {name:"n1"});
|
|
Node.Save("n2", {name:"n2"});
|
|
Link.Save("l1", ["n1", "n2", {time:123}]);
|
|
|
|
Node.Save("n1", {name:"n1", updated:true});
|