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 0e13cc2f926..49f1fad98bd 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 @@ -1344,6 +1344,7 @@ export function isUnremovable(node) { (node.nodeType === Node.ELEMENT_NODE && (node.classList.contains('o_editable') || node.getAttribute('t-set') || node.getAttribute('t-call'))) || (node.classList && node.classList.contains('oe_unremovable')) || + (node.nodeName === 'SPAN' && node.parentElement && node.parentElement.getAttribute('data-oe-type') === 'monetary') || (node.ownerDocument && node.ownerDocument.defaultWindow && !ancestors(node).find(ancestor => ancestor.oid === 'root')) // Node is in DOM but not in editable. ); } diff --git a/addons/web_editor/static/src/js/editor/odoo-editor/test/editor-test.js b/addons/web_editor/static/src/js/editor/odoo-editor/test/editor-test.js index 028c0e85004..5a26ebe2db8 100644 --- a/addons/web_editor/static/src/js/editor/odoo-editor/test/editor-test.js +++ b/addons/web_editor/static/src/js/editor/odoo-editor/test/editor-test.js @@ -12,6 +12,7 @@ import './spec/tabs.test.js'; import './spec/autostep.test.js'; import './spec/urlRegex.test.js'; import './spec/collab.test.js'; +import './spec/odooFields.test.js'; import './spec/powerbox.test.js'; /* global mocha */ diff --git a/addons/web_editor/static/src/js/editor/odoo-editor/test/spec/odooFields.test.js b/addons/web_editor/static/src/js/editor/odoo-editor/test/spec/odooFields.test.js new file mode 100644 index 00000000000..f2af54e924a --- /dev/null +++ b/addons/web_editor/static/src/js/editor/odoo-editor/test/spec/odooFields.test.js @@ -0,0 +1,21 @@ +import { BasicEditor, testEditor, unformat } from '../utils.js'; + +describe('Odoo fields', () => { + describe('monetary field', () => { + it('should make a span inside a monetary field be unremovable', async () => { + const content = unformat(` +

+ + $  + [] + +

+ `); + await testEditor(BasicEditor, { + contentBefore: content, + stepFunction: (editor) => editor.execCommand('oDeleteBackward'), + contentAfter: content, + }); + }); + }); +});