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 04bb6cc17d7..8b3f8cd16cc 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 @@ -4682,6 +4682,8 @@ export class OdooEditor extends EventTarget { !closestElement(selection.anchorNode).closest('a') && selection.anchorNode.nodeType === Node.TEXT_NODE ) { + // Merge adjacent text nodes. + selection.anchorNode.parentNode.normalize(); const textSliced = selection.anchorNode.textContent.slice(0, selection.anchorOffset); const textNodeSplitted = textSliced.split(/\s/); const potentialUrl = textNodeSplitted.pop(); 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 ca5cae85585..08b77d11f3d 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 @@ -4297,6 +4297,16 @@ X[] contentAfter: '

a http://test.com b http://test.com[] c http://test.com d

', //in reality: '

a http://test.com b http://test.com [] c http://test.com d

' }); + await testEditor(BasicEditor, { + contentBefore: '

http://test.com[]

', + stepFunction: async (editor) => { + // Setup: simulate multiple text nodes in a p:

"http://test" ".com"

+ editor.editable.firstChild.firstChild.splitText(11); + // Action: insert space + insertText(editor, ' '); + }, + contentAfter: '

http://test.com []

', + }); }); it('should transform url after enter', async () => { await testEditor(BasicEditor, {