From f239694a4c8fc886e3104e1d0e739eebe324613f Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Tue, 27 Jan 2026 00:59:37 +0100 Subject: [PATCH] sadad --- config/current.ver | 2 +- public/editor/bridge-core.js | 63 +++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/config/current.ver b/config/current.ver index d7f1518..0437331 100644 --- a/config/current.ver +++ b/config/current.ver @@ -1 +1 @@ -1.1.12 \ No newline at end of file +1.1.13 \ No newline at end of file diff --git a/public/editor/bridge-core.js b/public/editor/bridge-core.js index 7fb7439..eced15d 100644 --- a/public/editor/bridge-core.js +++ b/public/editor/bridge-core.js @@ -429,14 +429,8 @@ const body = editor.Canvas && editor.Canvas.getBody && editor.Canvas.getBody(); if (!body || body.__bridgeBlurLoggerBound) return; body.__bridgeBlurLoggerBound = true; - const logBlur = (evt) => { - const target = evt && evt.target; - if (!target) return; - const isEditable = !!(target.isContentEditable || (target.getAttribute && target.getAttribute('contenteditable') === 'true')); - if (!isEditable) return; - const selected = editor.getSelected && editor.getSelected(); - const selectedEl = selected && selected.view && selected.view.el; - const inSelected = !!(selectedEl && (selectedEl === target || selectedEl.contains(target))); + const focusSnapshots = new WeakMap(); + const buildSnapshot = (target, selected, selectedEl, editorHtml) => { let modelContent = ''; try { modelContent = selected && selected.get ? String(selected.get('content') || '') : ''; @@ -445,27 +439,58 @@ try { viewOuter = selectedEl ? String(selectedEl.outerHTML || '') : ''; } catch {} + return { + tag: target && target.tagName, + htmlLen: String(target && target.innerHTML || '').length, + textLen: String(target && target.textContent || '').length, + modelType: selected && selected.get ? selected.get('type') : undefined, + modelId: selected && (selected.getId ? selected.getId() : selected.get && selected.get('id')), + modelContentLen: modelContent.length, + modelContent: modelContent.slice(0, 1000), + viewOuterLen: viewOuter.length, + viewOuter: viewOuter.slice(0, 1000), + editorHtmlLen: editorHtml.length, + editorHtml: editorHtml.slice(0, 1000), + }; + }; + const logBlur = (evt) => { + const target = evt && evt.target; + if (!target) return; + const isEditable = !!(target.isContentEditable || (target.getAttribute && target.getAttribute('contenteditable') === 'true')); + if (!isEditable) return; + const selected = editor.getSelected && editor.getSelected(); + const selectedEl = selected && selected.view && selected.view.el; + const inSelected = !!(selectedEl && (selectedEl === target || selectedEl.contains(target))); let editorHtml = ''; try { editorHtml = editor && typeof editor.getHtml === 'function' ? String(editor.getHtml() || '') : ''; } catch {} try { + const before = focusSnapshots.get(target); + const after = buildSnapshot(target, selected, selectedEl, editorHtml); console.warn('[BLUR LOG]', { - tag: target.tagName, - htmlLen: String(target.innerHTML || '').length, - textLen: String(target.textContent || '').length, - modelType: selected && selected.get ? selected.get('type') : undefined, - modelId: selected && (selected.getId ? selected.getId() : selected.get && selected.get('id')), - modelContentLen: modelContent.length, - modelContent: modelContent.slice(0, 1000), inSelected, - viewOuterLen: viewOuter.length, - viewOuter: viewOuter.slice(0, 1000), - editorHtmlLen: editorHtml.length, - editorHtml: editorHtml.slice(0, 1000), + before, + after, }); } catch {} }; + const logFocus = (evt) => { + const target = evt && evt.target; + if (!target) return; + const isEditable = !!(target.isContentEditable || (target.getAttribute && target.getAttribute('contenteditable') === 'true')); + if (!isEditable) return; + const selected = editor.getSelected && editor.getSelected(); + const selectedEl = selected && selected.view && selected.view.el; + let editorHtml = ''; + try { + editorHtml = editor && typeof editor.getHtml === 'function' ? String(editor.getHtml() || '') : ''; + } catch {} + try { + focusSnapshots.set(target, buildSnapshot(target, selected, selectedEl, editorHtml)); + } catch {} + }; + body.addEventListener('focusin', logFocus, true); body.addEventListener('blur', logBlur, true); body.addEventListener('focusout', logBlur, true); });