From 2841654f22f4fd23e18a5d83086a35118eeb69dd Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Sun, 11 Jan 2026 23:26:46 +0100 Subject: [PATCH] adasds --- public/editor/bridge-core.js | 45 +++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/public/editor/bridge-core.js b/public/editor/bridge-core.js index d9bf314..c0708b4 100644 --- a/public/editor/bridge-core.js +++ b/public/editor/bridge-core.js @@ -340,6 +340,29 @@ return type === 'text' || type === 'link' || type === 'button'; }; + const attachRteTracker = (cmp) => { + if (!cmp || !cmp.view || !cmp.view.el) return; + if (cmp.__bridgeRteTracker && cmp.__bridgeRteTracker.el === cmp.view.el) return; + const el = cmp.view.el; + const handler = () => { + cmp.__bridgeLastRteHtml = el.innerHTML || ''; + }; + el.addEventListener('input', handler); + el.addEventListener('keyup', handler); + el.addEventListener('paste', handler); + cmp.__bridgeRteTracker = { el, handler }; + handler(); + }; + + const detachRteTracker = (cmp) => { + const tracker = cmp && cmp.__bridgeRteTracker; + if (!tracker || !tracker.el || !tracker.handler) return; + tracker.el.removeEventListener('input', tracker.handler); + tracker.el.removeEventListener('keyup', tracker.handler); + tracker.el.removeEventListener('paste', tracker.handler); + cmp.__bridgeRteTracker = null; + }; + const fixPlainTextContent = (cmp) => { if (!cmp || !cmp.view || !cmp.view.el) return; if (!isTextLike(cmp)) return; @@ -363,13 +386,33 @@ ed.__bridgeFixPlainText = true; setTimeout(() => { try { - fixPlainTextContent(cmp); + detachRteTracker(cmp); + if (!cmp || !cmp.view || !cmp.view.el) return; + const el = cmp.view.el; + const currentHtml = (el.innerHTML || '').trim(); + if (!currentHtml && cmp.__bridgeLastRteHtml && cmp.__bridgeLastRteHtml.trim()) { + const tmp = el.ownerDocument.createElement('div'); + tmp.innerHTML = cmp.__bridgeLastRteHtml; + const comps = buildTextnodeComponents(tmp); + if (comps.length && typeof cmp.components === 'function') { + cmp.components(comps); + } else if (cmp.__bridgeLastRteHtml && typeof cmp.set === 'function') { + cmp.set('content', cmp.__bridgeLastRteHtml); + } + } else { + fixPlainTextContent(cmp); + } } finally { ed.__bridgeFixPlainText = false; } }, 0); }); + ed.on('rte:enable', (cmp) => { + if (!isTextLike(cmp)) return; + attachRteTracker(cmp); + }); + // Keep the fix off live updates to avoid cursor jumps; run only on RTE close.                  window.__gjs = ed;