diff --git a/addons/web_editor/static/src/js/editor/odoo-editor/src/commands/commands.js b/addons/web_editor/static/src/js/editor/odoo-editor/src/commands/commands.js index 6b98e2a3c7d..397f04f0f10 100644 --- a/addons/web_editor/static/src/js/editor/odoo-editor/src/commands/commands.js +++ b/addons/web_editor/static/src/js/editor/odoo-editor/src/commands/commands.js @@ -49,6 +49,8 @@ import { isVisibleTextNode, getCursorDirection, resetOuids, + firstLeaf, + lastLeaf, } from '../utils/utils.js'; const TEXT_CLASSES_REGEX = /\btext-[^\s]*\b/; @@ -322,13 +324,13 @@ export const editorCommands = { // Change tags setTag(editor, tagName) { - const restoreCursor = preserveCursor(editor.document); const range = getDeepRange(editor.editable, { correctTripleClick: true }); const selectedBlocks = [...new Set(getTraversedNodes(editor.editable, range).map(closestBlock))]; const deepestSelectedBlocks = selectedBlocks.filter(block => ( !descendants(block).some(descendant => selectedBlocks.includes(descendant)) && block.isContentEditable )); + const [startContainer, startOffset, endContainer, endOffset] = [firstLeaf(range.startContainer), range.startOffset, lastLeaf(range.endContainer), range.endOffset]; for (const block of deepestSelectedBlocks) { if ( ['P', 'PRE', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'LI', 'BLOCKQUOTE'].includes( @@ -350,7 +352,10 @@ export const editorCommands = { children.forEach(child => newBlock.appendChild(child)); } } - restoreCursor(); + const newRange = new Range(); + newRange.setStart(startContainer,startOffset); + newRange.setEnd(endContainer,endOffset); + getDeepRange(editor.editable, { range: newRange, select: true, }); editor.historyStep(); }, diff --git a/addons/web_editor/static/src/js/editor/odoo-editor/test/spec/editor.test.js b/addons/web_editor/static/src/js/editor/odoo-editor/test/spec/editor.test.js index c3c30f00b14..8f087f34f04 100644 --- a/addons/web_editor/static/src/js/editor/odoo-editor/test/spec/editor.test.js +++ b/addons/web_editor/static/src/js/editor/odoo-editor/test/spec/editor.test.js @@ -2357,6 +2357,36 @@ X[] }); }); }); + describe('Nested Elements', () => { + it('should delete a h1 inside a td immediately after insertion', async () => { + await testEditor(BasicEditor, { + contentBefore: '
| [] | ||
[] | ||