asdasd
This commit is contained in:
@@ -556,6 +556,15 @@
|
||||
if (!body || body.__bridgeBlurLoggerBound) return;
|
||||
body.__bridgeBlurLoggerBound = true;
|
||||
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) => {
|
||||
let modelContent = '';
|
||||
try {
|
||||
@@ -616,9 +625,41 @@
|
||||
focusSnapshots.set(target, buildSnapshot(target, selected, selectedEl, editorHtml));
|
||||
} 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('blur', logBlur, true);
|
||||
body.addEventListener('focusout', logBlur, true);
|
||||
body.addEventListener('input', syncFromDomInput, true);
|
||||
body.addEventListener('keyup', syncFromDomInput, true);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user