wordIn/src/js/wordsets.js

181 lines
5.0 KiB
JavaScript

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);
}
}
}