import uuid from 'node-uuid'; export default class _wordset { constructor() { this.sets = {}; let wordsets = localStorage.getItem("wordsets"); if (wordsets) { this.sets = JSON.parse(wordsets); } } save() { localStorage.setItem("wordsets", JSON.stringify(this.sets)); } get _inner() { return this.sets; } get _firstClass(){ return Object.keys(this.sets)[0] || null; } get _allclass(){ return Object.keys(this.sets); } get _allsets(){ return Object.values(this.sets); } getClass(class_name) { if (this.sets[class_name]) { return this.sets[class_name]; } else return null; } getSetStatus(class_name,id){ let set_class = this.getClass(class_name); if(set_class){ for(let i of set_class){ if(i.id === id){ return i; } } } return null; } getId(class_name,id){ let set_class = this.sets[class_name]; for(let index in set_class){ if(set_class[index].id === id){ return index; } } } getSet(id) { let sets = JSON.parse(localStorage.getItem(id)); if (sets) { return sets; } else return []; } delSet(class_name, index) { let set_class = this.sets[class_name]; if (set_class) { if (set_class[index]) { localStorage.removeItem(set_class[index].id); this.sets[class_name].splice(index, 1); if (!this.sets[class_name].length) { delete this.sets[class_name]; } localStorage.setItem("wordsets", JSON.stringify(this.sets)); return true; } } return false; } addSet(class_name,name) { if (!this.sets[class_name]) { this.sets[class_name] = []; } let id = uuid.v1(); let time = (new Date()).getTime() this.sets[class_name].push({ name: name, id: id, created: time, }); localStorage.setItem(id, JSON.stringify([])); this.save(); return id; } saveSet(id,data){ localStorage.setItem(id, JSON.stringify(data)); } renameSet(class_name,id,new_name){ let set_class = this.getClass(class_name); if(set_class){ for(let i of set_class){ if(i.id === id){ i.name = new_name; this.save(); return; } } } } addSetTo(origin_id,dest_id){ let origin_set = this.getSet(origin_id); let dest_set = this.getSet(dest_id); let set={}; origin_set.forEach(element => { set[element.word] = element; }); dest_set.forEach(element => { set[element.word] = element; }); set = Object.values(set); this.saveSet(dest_id,set); return origin_set.length + dest_set.length - set.length; } fromArray(arr,class_name,name){ let id = this.addSet(class_name,name); this.saveSet(id,arr); } async import_set(callback){ let [fileHandle] = await window.showOpenFilePicker({ types: [ { description: "JSON file", accept: { 'text/json': ['.json'], }, }, ], }); let file = await fileHandle.getFile(); let data = JSON.parse(await file.text()); let cnt = 0; for (let i of Object.keys(data.wordsets)) { for (let j of data.wordsets[i]) { if (!localStorage.getItem(j.id)) { if (!this.sets[i]) this.sets[i] = []; this.sets[i].push(j); localStorage.setItem(j.id, data.words[j.id]); cnt++; } } } this.save(); if(typeof callback === "function"){ callback(cnt); } } async export_set(callback) { let fileHandle = await window.showSaveFilePicker({ types: [ { description: "JSON file", accept: { 'text/json': ['.json'], }, }, ], }); let writestream = await fileHandle.createWritable(); let data = { wordsets: this.sets, words: {} }; let cnt = 0; for (let i of Object.values(this.sets)) { for (let j of i) { let temp = localStorage.getItem(j.id); data.words[j.id] = temp; cnt++; } } writestream.write(JSON.stringify(data)); writestream.close(); if(typeof callback === "function"){ callback(cnt); } } }