From 5a788448dd933b28c6fb6333c13aa80edc054360 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 28 Jan 2026 01:15:25 +0100 Subject: [PATCH] asdasd --- config/current.ver | 2 +- public/assets/js/bridge/rte-editor.js | 2 ++ public/editor/bridge-core.js | 46 +++++++++++++++------------ 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/config/current.ver b/config/current.ver index f2f5ed4..5e94d23 100644 --- a/config/current.ver +++ b/config/current.ver @@ -1 +1 @@ -1.1.39 \ No newline at end of file +1.1.40 \ No newline at end of file diff --git a/public/assets/js/bridge/rte-editor.js b/public/assets/js/bridge/rte-editor.js index bcb7720..73f2acb 100644 --- a/public/assets/js/bridge/rte-editor.js +++ b/public/assets/js/bridge/rte-editor.js @@ -345,6 +345,7 @@ } catch {} const closeModal = () => { + try { window.__bridgeRteOpen = false; } catch {} this.allowClose = true; this.modalOpen = false; if (rteInstance && typeof rteInstance.enable === 'function' && rteTargetEl) { @@ -366,6 +367,7 @@ const doc = document; const container = doc.createElement('div'); + try { window.__bridgeRteOpen = true; } catch {} container.style.display = 'flex'; container.style.flexDirection = 'column'; container.style.gap = '10px'; diff --git a/public/editor/bridge-core.js b/public/editor/bridge-core.js index 682e867..776a373 100644 --- a/public/editor/bridge-core.js +++ b/public/editor/bridge-core.js @@ -428,6 +428,7 @@ const syncTextFromViewOnDeselect = (model) => { const target = resolveTextModel(model); if (!isTextLike(target) || !target.view || !target.view.el || syncing.has(target)) return; + if (window.__bridgeRteOpen) return; const viewHtml = normalizeViewHtmlForModel(target.view.el.innerHTML || ''); if (!viewHtml) return; const modelHtml = normalizeViewHtmlForModel(target.get ? target.get('content') || '' : ''); @@ -459,11 +460,35 @@ syncing.delete(target); } }; + const syncTextFromViewOnInput = (model) => { + const target = resolveTextModel(model); + if (!isTextLike(target) || !target.view || !target.view.el || syncing.has(target)) return; + if (window.__bridgeRteOpen) return; + const viewHtml = normalizeViewHtmlForModel(target.view.el.innerHTML || ''); + if (!viewHtml) return; + const modelHtml = normalizeViewHtmlForModel(target.get ? target.get('content') || '' : ''); + const comps = target.components ? target.components() : null; + const hasComps = !!(comps && comps.length); + if (viewHtml === modelHtml && hasComps) return; + try { + syncing.add(target); + if (target.components) { + try { target.components(viewHtml); } catch {} + } + if (target.set) target.set('content', viewHtml); + target.trigger && target.trigger('change:content'); + } catch {} finally { + syncing.delete(target); + } + }; editor.on('component:update', (model) => { restoreIfEmpty(model); ensureViewMatchesModel(model); }); - editor.on('component:input', (model) => restoreIfEmpty(model)); + editor.on('component:input', (model) => { + syncTextFromViewOnInput(model); + restoreIfEmpty(model); + }); editor.on('component:deselected', (model) => { syncTextFromViewOnDeselect(model); restoreIfEmpty(model); @@ -480,25 +505,6 @@ try { const modelType = model && model.get ? model.get('type') : undefined; const selectedEl = model && model.view && model.view.el; - const normalizeViewHtmlForModel = (html) => { - return String(html || '') - .replace(/]*>/gi, '
') - .replace(/\sdata-gjs-type="[^"]*"/gi, '') - .replace(/\sdraggable="[^"]*"/gi, '') - .replace(/\scontenteditable="[^"]*"/gi, '') - .trim(); - }; - if (label === 'DESELECT' && modelType === 'text' && selectedEl) { - try { - const viewHtml = normalizeViewHtmlForModel(selectedEl.innerHTML || ''); - if (viewHtml && model && model.set) { - if (model.components) { - try { model.components(viewHtml); } catch {} - } - model.set('content', viewHtml); - } - } catch {} - } const viewOuter = selectedEl ? String(selectedEl.outerHTML || '') : ''; const modelContent = model && model.get ? String(model.get('content') || '') : ''; const editorHtml = editor && typeof editor.getHtml === 'function' ? String(editor.getHtml() || '') : '';