This commit is contained in:
2026-01-28 01:44:05 +01:00
parent 8517febcb4
commit bfab287e4d
2 changed files with 42 additions and 1 deletions

View File

@@ -1 +1 @@
1.1.43 1.1.44

View File

@@ -556,6 +556,15 @@
if (!body || body.__bridgeBlurLoggerBound) return; if (!body || body.__bridgeBlurLoggerBound) return;
body.__bridgeBlurLoggerBound = true; body.__bridgeBlurLoggerBound = true;
const focusSnapshots = new WeakMap(); const focusSnapshots = new WeakMap();
const syncing = new WeakSet();
const normalizeViewHtml = (html) => {
return String(html || '')
.replace(/<br\b[^>]*>/gi, '<br>')
.replace(/\sdata-gjs-type="[^"]*"/gi, '')
.replace(/\sdraggable="[^"]*"/gi, '')
.replace(/\scontenteditable="[^"]*"/gi, '')
.trim();
};
const buildSnapshot = (target, selected, selectedEl, editorHtml) => { const buildSnapshot = (target, selected, selectedEl, editorHtml) => {
let modelContent = ''; let modelContent = '';
try { try {
@@ -616,9 +625,41 @@
focusSnapshots.set(target, buildSnapshot(target, selected, selectedEl, editorHtml)); focusSnapshots.set(target, buildSnapshot(target, selected, selectedEl, editorHtml));
} catch {} } catch {}
}; };
const syncFromDomInput = (evt) => {
const target = evt && evt.target;
if (!target) return;
if (window.__bridgeRteOpen) 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;
if (!selected || !selectedEl) return;
if (!(selectedEl === target || selectedEl.contains(target))) return;
if (syncing.has(selected)) return;
try {
const viewHtml = normalizeViewHtml(target.innerHTML || '');
if (!viewHtml) return;
syncing.add(selected);
if (selected.components) {
try { selected.components(viewHtml); } catch {}
}
if (selected.set) selected.set('content', viewHtml);
selected.trigger && selected.trigger('change:content');
if (selected.view && typeof selected.view.render === 'function') {
selected.view.render();
}
if (editor && typeof editor.trigger === 'function') {
editor.trigger('component:update', selected);
}
} catch {} finally {
syncing.delete(selected);
}
};
body.addEventListener('focusin', logFocus, true); body.addEventListener('focusin', logFocus, true);
body.addEventListener('blur', logBlur, true); body.addEventListener('blur', logBlur, true);
body.addEventListener('focusout', logBlur, true); body.addEventListener('focusout', logBlur, true);
body.addEventListener('input', syncFromDomInput, true);
body.addEventListener('keyup', syncFromDomInput, true);
}); });
}; };