diff --git a/addons/website/static/src/client_actions/website_preview/website_preview.js b/addons/website/static/src/client_actions/website_preview/website_preview.js index ef1d92ed99c..7d4ef5697ea 100644 --- a/addons/website/static/src/client_actions/website_preview/website_preview.js +++ b/addons/website/static/src/client_actions/website_preview/website_preview.js @@ -341,6 +341,14 @@ export class WebsitePreview extends Component { // Forward clicks to close backend client action's navbar // dropdowns. this.iframe.el.dispatchEvent(new MouseEvent('click', ev)); + } else { + // When in edit mode, prevent the default behaviours of clicks + // as to avoid DOM changes not handled by the editor. + // (Such as clicking on a link that triggers navigating to + // another page.) + if (!ev.target.closest('#oe_manipulators')) { + ev.preventDefault(); + } } const linkEl = ev.target.closest('[href]'); diff --git a/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js b/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js index db950919281..0154df2efff 100644 --- a/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js +++ b/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js @@ -68,7 +68,6 @@ export class WysiwygAdapterComponent extends ComponentAdapter { useEffect(() => { const initWysiwyg = async () => { - this.$editable.on('click.odoo-website-editor', '*', this, this._preventDefault); // Disable OdooEditor observer's while setting up classes this.widget.odooEditor.observerUnactive(); this._addEditorMessages(); @@ -98,10 +97,6 @@ export class WysiwygAdapterComponent extends ComponentAdapter { }; initWysiwyg(); - - return () => { - this.$editable.off('click.odoo-website-editor', '*'); - }; }, () => []); useEffect(() => { @@ -473,9 +468,6 @@ export class WysiwygAdapterComponent extends ComponentAdapter { } return websiteRootInstance.trigger_up(type, {...eventData}); } - _preventDefault(e) { - e.preventDefault(); - } /** * @private */ diff --git a/addons/website/static/tests/tours/edit_link_popover.js b/addons/website/static/tests/tours/edit_link_popover.js index c19a8c7ec9f..14c4340cf65 100644 --- a/addons/website/static/tests/tours/edit_link_popover.js +++ b/addons/website/static/tests/tours/edit_link_popover.js @@ -184,5 +184,22 @@ wTourUtils.registerWebsitePreviewTour('edit_link_popover', { extra_trigger: 'iframe html:has(.o_edit_menu_popover)', run: function () {}, // it's a check }, + { + content: "Ensure that a click on the link popover link opens a new window", + trigger: 'iframe .o_edit_menu_popover a.o_we_url_link[target="_blank"]', + extra_trigger: 'iframe .o_edit_menu_popover a.o_we_full_url[target="_blank"]', + run: function (actions) { + this.$anchor[0].addEventListener('click', (ev) => { + const originalPreventDefault = ev.preventDefault.bind(ev); + ev.preventDefault = () => { + throw new Error( + "The link popover should not be default prevented as to open a new tab" + ); + }; + originalPreventDefault(); // We do not want to open a new tab in a tour + }, {once: true, capture: true}); + actions.click(); + }, + }, ]); });