diff --git a/config/current.ver b/config/current.ver index d28d401..98924ab 100644 --- a/config/current.ver +++ b/config/current.ver @@ -1 +1 @@ -1.1.33 \ No newline at end of file +1.1.35 \ No newline at end of file diff --git a/public/editor/bridge-core.js b/public/editor/bridge-core.js index b623566..503504b 100644 --- a/public/editor/bridge-core.js +++ b/public/editor/bridge-core.js @@ -403,6 +403,23 @@ try { console.log('[PLAIN TEXT RESTORE] Inhalt wiederhergestellt.'); } catch {} } catch {} }; + const ensureViewMatchesModel = (model) => { + const target = resolveTextModel(model); + if (!isTextLike(target) || !target.view || !target.view.el) return; + const el = target.view.el; + if (el.isContentEditable || el.getAttribute('contenteditable') === 'true') return; + const modelHtml = String(target.get ? target.get('content') || '' : '').trim(); + if (!modelHtml) return; + const apply = () => { + try { + const current = String(el.innerHTML || '').trim(); + if (current !== modelHtml) el.innerHTML = modelHtml; + } catch {} + }; + apply(); + setTimeout(apply, 0); + setTimeout(apply, 60); + }; const syncTextFromViewOnDeselect = (model) => { const target = resolveTextModel(model); if (!isTextLike(target) || !target.view || !target.view.el || syncing.has(target)) return; @@ -427,11 +444,15 @@ syncing.delete(target); } }; - editor.on('component:update', (model) => restoreIfEmpty(model)); + editor.on('component:update', (model) => { + restoreIfEmpty(model); + ensureViewMatchesModel(model); + }); editor.on('component:input', (model) => restoreIfEmpty(model)); editor.on('component:deselected', (model) => { syncTextFromViewOnDeselect(model); restoreIfEmpty(model); + ensureViewMatchesModel(model); }); editor.on('component:add', (model) => rememberIfPresent(model)); };