diff --git a/public/editor/bridge-core.js b/public/editor/bridge-core.js index 64f9e32..284c8bb 100644 --- a/public/editor/bridge-core.js +++ b/public/editor/bridge-core.js @@ -724,6 +724,7 @@ const isTextLike = (model) => !!(model && model.is && (model.is('text') || model.is('button') || model.is('link'))); let lastTextSelection = { id: null, ts: 0 }; + let lastTextComponent = null; editor.on('component:selected', (model) => { ensureTextToolbarButton(editor, model); if (!isTextLike(model)) return; @@ -731,8 +732,14 @@ if (lastTextSelection.id === model.cid && (now - lastTextSelection.ts) < 450) { openRichTextModal(editor, model); } + lastTextComponent = model; lastTextSelection = { id: model.cid, ts: now }; }); + editor.on('component:deselected', (model) => { + if (isTextLike(model)) { + lastTextComponent = model; + } + }); editor.on('component:add', (model) => ensureTextToolbarButton(editor, model)); editor.on('component:dblclick', (model) => { if (isTextLike(model)) { @@ -754,9 +761,32 @@ if (!target) return; const isEditable = !!(target.isContentEditable || (target.getAttribute && target.getAttribute('contenteditable') === 'true')); if (!isEditable) return; + const selected = lastTextComponent || (editor.getSelected && editor.getSelected()); + const selectedEl = selected && selected.view && selected.view.el; + if (selected && selectedEl && (selectedEl === target || selectedEl.contains(target))) { + const html = String(target.innerHTML || '').trim(); + if (html) { + try { + if (selected.components) { + selected.components(html); + } + if (selected.set) { + selected.set('content', html); + selected.trigger && selected.trigger('change:content'); + selected.trigger && selected.trigger('change:components'); + } + if (selected.view && selected.view.render) { + selected.view.render(); + } + if (editor && typeof editor.trigger === 'function') { + editor.trigger('component:update', selected); + } + try { console.log('[RTE BLUR UPDATE] content aktualisiert.'); } catch {} + } catch {} + } + } let contentInfo = ''; try { - const selected = editor.getSelected && editor.getSelected(); const content = selected && selected.get ? selected.get('content') : ''; contentInfo = String(content || '').trim() ? 'Content vorhanden' : 'Content leer'; } catch {}