class StorageFolder { constructor(restoreSettings) { this.Name = "Folder"; this.CreationDate = Date.now(); this.LastModifiedDate = Date.now(); this.Folder = undefined; this.Designs = new Array(); this.Folders = new Array(); if (restoreSettings) { if (restoreSettings.Name) this.Name = restoreSettings.Name; if (restoreSettings.CreationDate) this.CreationDate = restoreSettings.CreationDate; if (restoreSettings.LastModifiedDate) this.LastModifiedDate = restoreSettings.LastModifiedDate; if (restoreSettings.Folders) { for (let a = 0; a < restoreSettings.Folders.length;a ++) { let sf = new StorageFolder(restoreSettings.Folders[a]); sf.Folder = this; this.Folders.push(sf); } } if (restoreSettings.Designs) { for (let a = 0; a < restoreSettings.Designs.length;a ++) { let sd = new StorageDesign(restoreSettings.Designs[a]); sd.Folder = this; this.Designs.push(sd); } } } } toJSON(key) { let sfjson = {}; sfjson.Name = this.Name; sfjson.CreationDate = this.CreationDate; sfjson.LastModifiedDate = this.LastModifiedDate; sfjson.Designs = this.Designs; sfjson.Folders = this.Folders; return sfjson; } PathString(ChildrenString = "") { if (this.Folder) { let pathString = `${this.Name} ${(ChildrenString != "") ? "/" : ""} ${ChildrenString}`; pathString = this.Folder.PathString(pathString); return pathString; } else { if (ChildrenString == "") { return `/ `; } else { return `/ ${ChildrenString}`; } } } HasFolder(folder = undefined) { if (!folder) return false; for (let a = 0; a < this.Folders.length; a++) { if (folder === this.Folders[a] || folder === this.Folders[a].Name) return this.Folders[a]; } return false; } AddFolder(folder) { if (!folder) return false; let nameCounter = 1; let ogName = folder.Name; folder.Folder = this; while (this.HasFolder(folder.Name)) { // There is a name conflict! folder.Name = ogName + " (" + nameCounter + ")"; nameCounter++; } this.Folders.push(folder); this.LastModifiedDate = Date.now(); return folder; } RemoveFolder(folder,overide=false) { if (!folder) return false; for (let a = 0; a < this.Folders; a++) { if (folder === this.Folders[a] || folder == this.Folders[a].Name) { if (this.Folders[a].Designs > 0 && !overide) return -1; this.Folders.splice(a,1); this.LastModifiedDate = Date.now(); return true; } } return false; } HasDesign(design) { if (!design) return false; for (let a = 0; a < this.Designs; a++) { if (design === this.Designs[a] || design == this.Designs[a].Name) this.Designs[a]; } return false; } AddDesign(design) { if (!design) return false; let nameCounter = 1; let ogName = design.Name; design.Folder = this; while (this.HasDesign(design.Name)) { // There is a name conflict! design.Name = ogName + " (" + nameCounter + ")"; nameCounter++; } this.Designs.push(design); this.LastModifiedDate = Date.now(); return design; } RemoveDesign(design) { if (!design) return false; for (let a = 0; a < this.Designs; a++) { if (design === this.Designs[a] || design == this.Designs[a].Name) { this.Designs.splice(a,1); this.LastModifiedDate = Date.now(); return true; } } return false; } } class StorageDesign { constructor(restoreSettings) { this.Name = "My Design"; this.Creator = "Anonymous"; this.CreationDate = Date.now(); this.LastModifiedDate = Date.now(); this.Description = ""; this.FileIndex = 0; this.Folder = undefined; if (restoreSettings) { if (restoreSettings.Name) this.Name = restoreSettings.Name; if (restoreSettings.Creator) this.Creator = restoreSettings.Creator; if (restoreSettings.CreationDate) this.CreationDate = restoreSettings.CreationDate; if (restoreSettings.LastModifiedDate) this.LastModifiedDate = restoreSettings.LastModifiedDate; if (restoreSettings.Description) this.Description = restoreSettings.Description; if (restoreSettings.FileIndex) this.FileIndex = restoreSettings.FileIndex; } } toJSON(key) { let sdjson = {}; sdjson.Name = this.Name; sdjson.Creator = this.Creator; sdjson.CreationDate = this.CreationDate; sdjson.LastModifiedDate = this.LastModifiedDate; sdjson.Description = this.Description; sdjson.FileIndex = this.FileIndex; return sdjson; } GetFile() { let file = JSON.parse(LZString.decompressFromUTF16(localStorage.getItem("LogicPartsfile" + this.FileIndex))); return file; } SaveFile(container) { let saveState = createSaveState(container,true); console.log(saveState); } } class LocalStorage { constructor() { this._FileIndex = 0; this.RootFolder = new StorageFolder({Name: "ROOT"}); if (localStorage.getItem('LogicEngineFileTable')) { let LSFT = json.parse(localStorage.getItem('LogicEngineFileTable')); if (LSFT?.Index >= 0) { this._FileIndex = LSFT.Index; if (LSFT.RootFolder) { this.RootFolder = new StorageFolder(LSFT.RootFolder); } } } else { // No file table yet! } } } class LocalBrowser { constructor(folder = undefined) { this.DOMElement = document.getElementById("LocalStorageBrowser"); this.DOMPath = document.getElementById("lsbPath"); this.DOMFolders = document.getElementById("lsbfoldersContainer"); this.DOMFiles = document.getElementById("lsbFilesContainer"); this.DOMFolders.innerHTML = ""; this.DOMFiles.innerHTML = "Empty Folder"; this.Folder = (folder instanceof StorageFolder) ? folder : new StorageFolder({Name: "ROOT"}); this.DOMPath.innerHTML = this.Folder.PathString(); this.redrawFolders(); this.redrawFiles(); //this.DOMFolders.addEventListener("contextmenu",function(evt){}); } redrawFolders() { this.DOMFolders.innerHTML=""; for (let a = 0; a < this.Folder.Folders.length; a++) { this.DOMFolders.innerHTML += `