From 3899c71ffee9a95b67c54889f1765e7737c6da47 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 4 Feb 2026 00:48:11 +0100 Subject: [PATCH] =?UTF-8?q?Speichern=20bei=20=C3=84nderungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/current.ver | 2 +- public/assets/js/ui-editor.js | 56 ++++++++++++++++++++++++----------- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/config/current.ver b/config/current.ver index 2aa6561..84e3118 100644 --- a/config/current.ver +++ b/config/current.ver @@ -1 +1 @@ -1.2.35 \ No newline at end of file +1.2.36 \ No newline at end of file diff --git a/public/assets/js/ui-editor.js b/public/assets/js/ui-editor.js index dc19ff4..ab8f8a6 100644 --- a/public/assets/js/ui-editor.js +++ b/public/assets/js/ui-editor.js @@ -59,6 +59,8 @@ export function initEditor() { let versionMap = new Map(); let currentVersionId = 0; let currentVersionMeta = null; + let pendingSaveResolve = null; + let pendingSaveTimer = null; const ok  = (m) => toast(m, true); const err = (m) => toast(m, false); @@ -481,7 +483,7 @@ export function initEditor() { const fields = extractContentFields(payload); savedSnapshot = buildSnapshot(fields); clearDirty(); - baselineReady = false; + baselineReady = true; } async function syncSnapshotFromEditor() { @@ -1058,14 +1060,18 @@ export function initEditor() {         // NEU: Wenn der Editor meldet, dass er *gespeichert* hat,         // aktualisieren wir die Liste im Elternfenster -        if (d.type === 'save:success') { -          ok('Gespeichert'); -          try { -            if (typeof window.reloadActiveList === 'function') window.reloadActiveList(); -            else if (typeof window.__reloadList === 'function') window.__reloadList(current.section); -          } catch {} -          return; -        } + if (d.type === 'save:success') { + ok('Gespeichert'); + try { + if (typeof window.reloadActiveList === 'function') window.reloadActiveList(); + else if (typeof window.__reloadList === 'function') window.__reloadList(current.section); + } catch {} + if (pendingSaveResolve) { + pendingSaveResolve(true); + pendingSaveResolve = null; + } + return; + }                  // neue Bridge meldet gjs:ready; ältere evtl. core-ready/bridge:ready         if (d.type === 'gjs:ready' || d.type === 'core-ready' || d.type === 'bridge:ready' || d.type === 'bridge:booted') { @@ -1174,16 +1180,30 @@ export function initEditor() { } } const okSave = await delegateCommand('save-data'); - if (okSave) { - setTimeout(async () => { - await loadVersionsForCurrent(); - try { - const res = await apiAction('content.get', { method: 'GET', data: { id: current.id, section_id: current.section.id } }); - setSavedSnapshotFromData(res || {}); - } catch {} - }, 800); + if (!okSave) return false; + if (pendingSaveTimer) { + clearTimeout(pendingSaveTimer); + pendingSaveTimer = null; } - return okSave; + const saved = await new Promise((resolve) => { + pendingSaveResolve = resolve; + pendingSaveTimer = setTimeout(() => { + pendingSaveTimer = null; + if (pendingSaveResolve) { + pendingSaveResolve(false); + pendingSaveResolve = null; + } + }, 3000); + }); + if (!saved) return false; + setTimeout(async () => { + await loadVersionsForCurrent(); + try { + const res = await apiAction('content.get', { method: 'GET', data: { id: current.id, section_id: current.section.id } }); + setSavedSnapshotFromData(res || {}); + } catch {} + }, 200); + return true; }   // ... (Der Rest der Funktionen bleibt unverändert) ...