adasds
This commit is contained in:
@@ -340,6 +340,29 @@
|
|||||||
return type === 'text' || type === 'link' || type === 'button';
|
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) => {
|
const fixPlainTextContent = (cmp) => {
|
||||||
if (!cmp || !cmp.view || !cmp.view.el) return;
|
if (!cmp || !cmp.view || !cmp.view.el) return;
|
||||||
if (!isTextLike(cmp)) return;
|
if (!isTextLike(cmp)) return;
|
||||||
@@ -363,13 +386,33 @@
|
|||||||
ed.__bridgeFixPlainText = true;
|
ed.__bridgeFixPlainText = true;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
try {
|
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 {
|
} finally {
|
||||||
ed.__bridgeFixPlainText = false;
|
ed.__bridgeFixPlainText = false;
|
||||||
}
|
}
|
||||||
}, 0);
|
}, 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.
|
// Keep the fix off live updates to avoid cursor jumps; run only on RTE close.
|
||||||
|
|
||||||
window.__gjs = ed;
|
window.__gjs = ed;
|
||||||
|
|||||||
Reference in New Issue
Block a user