From d06e043c4b55e2157992bf4a12b40f1e6bd3b690 Mon Sep 17 00:00:00 2001 From: Odoo <maad@odoo.com> Date: Wed, 12 Apr 2023 13:09:13 +0000 Subject: [PATCH] [FIX] web_editor: non-uniform behaviour in Before this commit: When a new list is created and any list item is applied a style like h1, bold ,itallic etc.. and when when toggle that list, the list style breaks After this commit: Toggling through the list does not break the style. closes odoo/odoo#119012 Task-id: 3269908 Signed-off-by: David Monjoie (dmo) <dmo@odoo.com> --- .../lib/odoo-editor/src/commands/commands.js | 3 +- .../lib/odoo-editor/test/spec/list.test.js | 140 ++++++++++++++++++ 2 files changed, 142 insertions(+), 1 deletion(-) diff --git a/addons/web_editor/static/lib/odoo-editor/src/commands/commands.js b/addons/web_editor/static/lib/odoo-editor/src/commands/commands.js index 18834524ab6b..3ef38196bf78 100644 --- a/addons/web_editor/static/lib/odoo-editor/src/commands/commands.js +++ b/addons/web_editor/static/lib/odoo-editor/src/commands/commands.js @@ -525,8 +525,9 @@ export const editorCommands = { if (node.nodeType === Node.TEXT_NODE && !isVisibleStr(node)) { node.remove(); } else { - const block = closestBlock(node); + let block = closestBlock(node); if (!['OL', 'UL'].includes(block.tagName)) { + block = block.closest('li') || block; const ublock = block.closest('ol, ul'); ublock && getListMode(ublock) == mode ? li.add(block) : blocks.add(block); } diff --git a/addons/web_editor/static/lib/odoo-editor/test/spec/list.test.js b/addons/web_editor/static/lib/odoo-editor/test/spec/list.test.js index f34b419d965d..10efc8e1b693 100644 --- a/addons/web_editor/static/lib/odoo-editor/test/spec/list.test.js +++ b/addons/web_editor/static/lib/odoo-editor/test/spec/list.test.js @@ -857,6 +857,146 @@ describe('List', () => { </ol>`), }); }); + it("should turn unordered list into ordered list with block style applied to it", async () => { + await testEditor(BasicEditor, { + contentBefore: unformat(` + <ul> + <li><h1>abc</h1></li> + <li class="oe-nested"> + <ul> + <li><h2>a[bc</h2></li> + <li class="oe-nested"> + <ul> + <li><h2>abc</h2></li> + <li><h3>abc</h3></li> + <li><h4>abc</h4></li> + </ul> + </li> + <li><h2>abc</h2></li> + </ul> + </li> + <li><h1>abc</h1></li> + <li class="oe-nested"> + <ul> + <li><h2>abc</h2></li> + <li class="oe-nested"> + <ul> + <li><h2>abc</h2></li> + <li><h3>abc</h3></li> + <li><h4>abc</h4></li> + </ul> + </li> + <li><h2>a]bc</h2></li> + </ul> + </li> + <li><h1>abc</h1></li> + </ul> + `), + stepFunction: toggleOrderedList, + contentAfter: unformat(` + <ol> + <li><h1>abc</h1></li> + <li class="oe-nested"> + <ol> + <li><h2>a[bc</h2></li> + <li class="oe-nested"> + <ol> + <li><h2>abc</h2></li> + <li><h3>abc</h3></li> + <li><h4>abc</h4></li> + </ol> + </li> + <li><h2>abc</h2></li> + </ol> + </li> + <li><h1>abc</h1></li> + <li class="oe-nested"> + <ol> + <li><h2>abc</h2></li> + <li class="oe-nested"> + <ol> + <li><h2>abc</h2></li> + <li><h3>abc</h3></li> + <li><h4>abc</h4></li> + </ol> + </li> + <li><h2>a]bc</h2></li> + </ol> + </li> + <li><h1>abc</h1></li> + </ol>`), + }); + }); + it("should turn unordered list into ordered list with block and inline style applied to it", async () => { + await testEditor(BasicEditor, { + contentBefore: unformat(` + <ul> + <li><h1><strong>abc</strong></h1></li> + <li class="oe-nested"> + <ul> + <li><h3><strong>a[bc</strong></h3></li> + <li class="oe-nested"> + <ul> + <li><h2><em>abc</em></h2></li> + <li><h2><s>abc</s></h2></li> + <li><h2><u>abc</u></h2></li> + </ul> + </li> + <li><h1><strong>abc</strong></h1></li> + </ul> + </li> + <li><h1><strong>abc</strong></h1></li> + <li class="oe-nested"> + <ul> + <li><h3><strong>abc</strong></h3></li> + <li class="oe-nested"> + <ul> + <li><h2><em>abc</em></h2></li> + <li><h2><s>abc</s></h2></li> + <li><h2><u>abc</u></h2></li> + </ul> + </li> + <li><h1><strong>a]bc</strong></h1></li> + </ul> + </li> + <li><h1><strong>abc</strong></h1></li> + </ul> + `), + stepFunction: toggleOrderedList, + contentAfter: unformat(` + <ol> + <li><h1><strong>abc</strong></h1></li> + <li class="oe-nested"> + <ol> + <li><h3><strong>a[bc</strong></h3></li> + <li class="oe-nested"> + <ol> + <li><h2><em>abc</em></h2></li> + <li><h2><s>abc</s></h2></li> + <li><h2><u>abc</u></h2></li> + </ol> + </li> + <li><h1><strong>abc</strong></h1></li> + </ol> + </li> + <li><h1><strong>abc</strong></h1></li> + <li class="oe-nested"> + <ol> + <li><h3><strong>abc</strong></h3></li> + <li class="oe-nested"> + <ol> + <li><h2><em>abc</em></h2></li> + <li><h2><s>abc</s></h2></li> + <li><h2><u>abc</u></h2></li> + </ol> + </li> + <li><h1><strong>a]bc</strong></h1></li> + </ol> + </li> + <li><h1><strong>abc</strong></h1></li> + </ol>`), + }); + }); it('should turn an unordered list item and a paragraph into two list items within an ordered list', async () => { await testEditor(BasicEditor, { contentBefore: '<ul><li>ab</li><li>c[d</li></ul><p>e]f</p>', -- GitLab