let running = false; let pending = false; async function save() { if (running) { pending = true; return; } running = true; try { const indicator = document.getElementById("save-indicator"); indicator.innerHTML = "Saving..."; indicator.classList.remove("hidden"); let responseHTML; do { pending = false; const response = await fetch("/notepad/autosave", { method: "POST", body: new FormData(document.getElementById("form")), }); responseHTML = await response.text(); } while (pending); // Who needs HTMX? document.getElementById("save-indicator-wrapper").innerHTML = responseHTML; } finally { running = false; } } let autosaveTimer; function autosave(key) { document.getElementById("save-indicator").classList.add("hidden"); clearTimeout(autosaveTimer); autosaveTimer = setTimeout(() => save(key), 1000); }