feat: session persistence

backup
flop 3 weeks ago
parent dd4d7d25c7
commit db865a7666
  1. 29
      ts/src/browser.ts

@ -112,10 +112,38 @@ function showConfirm(
}); });
} }
// --- Persistence -------------------------------------------------------------
const STORAGE_KEY = "monodisplay_autosave";
function saveToStorage() {
try {
const buf = file.toBuffer();
const b64 = btoa(String.fromCharCode(...buf));
localStorage.setItem(STORAGE_KEY, JSON.stringify({ filename: currentFilename, data: b64 }));
} catch {}
}
function loadFromStorage() {
try {
const raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return;
const { filename, data } = JSON.parse(raw);
const bytes = Uint8Array.from(atob(data), c => c.charCodeAt(0));
const parsed = new MonoDisplay.MonoDisplayParser().parse(bytes.buffer);
file = new MonoDisplayFile(parsed.sections);
currentFilename = filename;
const filenameEl = document.getElementById("filename");
if (filenameEl) filenameEl.textContent = filename;
isDirty = true;
document.getElementById("filename")?.classList.add("dirty");
} catch {}
}
// --- Dirty tracking ---------------------------------------------------------- // --- Dirty tracking ----------------------------------------------------------
function markDirty() { function markDirty() {
isDirty = true; isDirty = true;
document.getElementById("filename")?.classList.add("dirty"); document.getElementById("filename")?.classList.add("dirty");
saveToStorage();
} }
function markClean() { function markClean() {
isDirty = false; isDirty = false;
@ -797,4 +825,5 @@ window.addEventListener("beforeunload", (e) => {
if (isDirty) e.preventDefault(); if (isDirty) e.preventDefault();
}); });
loadFromStorage();
triggerPreview(); triggerPreview();

Loading…
Cancel
Save