Composer: Fix for older Firefox (#2104)

This commit is contained in:
Alexander Zinchuk 2022-11-02 14:28:27 +01:00
parent 10401fb121
commit b49cd845cb

View File

@ -22,14 +22,40 @@ export function insertHtmlInSelection(html: string) {
} }
export function getHtmlBeforeSelection(container?: HTMLElement, useCommonAncestor?: boolean) { export function getHtmlBeforeSelection(container?: HTMLElement, useCommonAncestor?: boolean) {
if (!container) return ''; if (!container) {
return '';
}
const sel = window.getSelection(); const sel = window.getSelection();
if (!sel || !sel.rangeCount) return container.innerHTML; if (!sel || !sel.rangeCount) {
return container.innerHTML;
}
const range = sel.getRangeAt(0).cloneRange(); const range = sel.getRangeAt(0).cloneRange();
if (!range.intersectsNode(container)) return container.innerHTML; if (!range.intersectsNode(container)) {
if (!useCommonAncestor && !container.contains(range.commonAncestorContainer)) return ''; return container.innerHTML;
}
if (!useCommonAncestor && !container.contains(range.commonAncestorContainer)) {
return '';
}
range.collapse(true); range.collapse(true);
range.setStart(container, 0); range.setStart(container, 0);
fragmentEl.replaceChildren(range.cloneContents()); replaceChildren(fragmentEl, range.cloneContents());
return fragmentEl.innerHTML; return fragmentEl.innerHTML;
} }
function replaceChildren(el: HTMLElement, nodes?: DocumentFragment) {
if (el.replaceChildren === undefined) {
while (el.lastChild) {
el.removeChild(el.lastChild);
}
if (nodes !== undefined) {
el.append(nodes);
}
} else {
el.replaceChildren(nodes || '');
}
}