Speichern bei Änderungen

This commit is contained in:
2026-02-04 00:48:11 +01:00
parent 140da342bd
commit 3899c71ffe
2 changed files with 39 additions and 19 deletions

View File

@@ -1 +1 @@
1.2.35 1.2.36

View File

@@ -59,6 +59,8 @@ export function initEditor() {
let versionMap = new Map(); let versionMap = new Map();
let currentVersionId = 0; let currentVersionId = 0;
let currentVersionMeta = null; let currentVersionMeta = null;
let pendingSaveResolve = null;
let pendingSaveTimer = null;
const ok  = (m) => toast(m, true); const ok  = (m) => toast(m, true);
const err = (m) => toast(m, false); const err = (m) => toast(m, false);
@@ -481,7 +483,7 @@ export function initEditor() {
const fields = extractContentFields(payload); const fields = extractContentFields(payload);
savedSnapshot = buildSnapshot(fields); savedSnapshot = buildSnapshot(fields);
clearDirty(); clearDirty();
baselineReady = false; baselineReady = true;
} }
async function syncSnapshotFromEditor() { async function syncSnapshotFromEditor() {
@@ -1058,14 +1060,18 @@ export function initEditor() {
        // NEU: Wenn der Editor meldet, dass er *gespeichert* hat,         // NEU: Wenn der Editor meldet, dass er *gespeichert* hat,
        // aktualisieren wir die Liste im Elternfenster         // aktualisieren wir die Liste im Elternfenster
        if (d.type === 'save:success') { if (d.type === 'save:success') {
          ok('Gespeichert'); ok('Gespeichert');
          try { try {
            if (typeof window.reloadActiveList === 'function') window.reloadActiveList(); if (typeof window.reloadActiveList === 'function') window.reloadActiveList();
            else if (typeof window.__reloadList === 'function') window.__reloadList(current.section); else if (typeof window.__reloadList === 'function') window.__reloadList(current.section);
          } catch {} } catch {}
          return; if (pendingSaveResolve) {
        } pendingSaveResolve(true);
pendingSaveResolve = null;
}
return;
}
                 
        // neue Bridge meldet gjs:ready; ältere evtl. core-ready/bridge:ready         // 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') {         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'); const okSave = await delegateCommand('save-data');
if (okSave) { if (!okSave) return false;
setTimeout(async () => { if (pendingSaveTimer) {
await loadVersionsForCurrent(); clearTimeout(pendingSaveTimer);
try { pendingSaveTimer = null;
const res = await apiAction('content.get', { method: 'GET', data: { id: current.id, section_id: current.section.id } });
setSavedSnapshotFromData(res || {});
} catch {}
}, 800);
} }
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) ...   // ... (Der Rest der Funktionen bleibt unverändert) ...