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