diff --git a/addons/web_editor/static/src/js/editor/odoo-editor/src/OdooEditor.js b/addons/web_editor/static/src/js/editor/odoo-editor/src/OdooEditor.js index 4091e18fef7..82f4f5e8b19 100644 --- a/addons/web_editor/static/src/js/editor/odoo-editor/src/OdooEditor.js +++ b/addons/web_editor/static/src/js/editor/odoo-editor/src/OdooEditor.js @@ -1885,7 +1885,7 @@ export class OdooEditor extends EventTarget { } if (joinWith) { const el = closestElement(joinWith); - fillEmpty(el); + el && fillEmpty(el); } } @@ -3462,9 +3462,14 @@ export class OdooEditor extends EventTarget { */ isSelectionInEditable(selection) { selection = selection || this.document.getSelection(); - return selection && selection.anchorNode && - closestElement(selection.anchorNode).isContentEditable && closestElement(selection.focusNode).isContentEditable && - this.editable.contains(selection.anchorNode) && this.editable.contains(selection.focusNode); + if (selection && selection.anchorNode && selection.focusNode) { + const anchorElement = closestElement(selection.anchorNode); + const focusElement = closestElement(selection.focusNode); + return anchorElement && anchorElement.isContentEditable && focusElement && focusElement.isContentEditable && + this.editable.contains(selection.anchorNode) && this.editable.contains(selection.focusNode); + } else { + return false; + } } /** * Returns true if the current selection is in at least one block Element diff --git a/addons/web_editor/static/src/js/editor/odoo-editor/src/utils/utils.js b/addons/web_editor/static/src/js/editor/odoo-editor/src/utils/utils.js index ac4af60e681..ac24ec1df5a 100644 --- a/addons/web_editor/static/src/js/editor/odoo-editor/src/utils/utils.js +++ b/addons/web_editor/static/src/js/editor/odoo-editor/src/utils/utils.js @@ -284,16 +284,17 @@ export function getFurthestUneditableParent(node, parentLimit) { * * @param {Node} node * @param {string} [selector=undefined] - * @param {boolean} [restrictToEditable=false] * @returns {HTMLElement} */ export function closestElement(node, selector) { - const element = node.nodeType === Node.TEXT_NODE ? node.parentElement : node; - if (selector && element) { - const elementFound = element.closest(selector); - return elementFound && elementFound.querySelector('.odoo-editor-editable') ? null : elementFound; + let element = node; + while (element && element.nodeType !== Node.ELEMENT_NODE) { + element = element.parentNode; } - return selector && element ? element.closest(selector) : element || node; + if (element && selector) { + element = element.closest(selector); + } + return element && element.querySelector('.odoo-editor-editable') ? null : element; } /**