diff --git a/addons/website/static/src/snippets/s_popup/000.js b/addons/website/static/src/snippets/s_popup/000.js index 63b902ebadc..99b628d987b 100644 --- a/addons/website/static/src/snippets/s_popup/000.js +++ b/addons/website/static/src/snippets/s_popup/000.js @@ -72,6 +72,7 @@ const PopupWidget = publicWidget.Widget.extend({ selector: '.s_popup', events: { 'click .js_close_popup': '_onCloseClick', + 'click .btn-primary': '_onBtnPrimaryClick', 'hide.bs.modal': '_onHideModal', 'show.bs.modal': '_onShowModal', }, @@ -174,6 +175,19 @@ const PopupWidget = publicWidget.Widget.extend({ this._showPopup(); } }, + /** + * Checks if the given primary button should allow or not to close the + * modal. + * + * @private + * @param {HTMLElement} primaryBtnEl + */ + _canBtnPrimaryClosePopup(primaryBtnEl) { + return !( + primaryBtnEl.classList.contains("s_website_form_send") + || primaryBtnEl.classList.contains("o_website_form_send") + ); + }, //-------------------------------------------------------------------------- // Handlers @@ -185,6 +199,14 @@ const PopupWidget = publicWidget.Widget.extend({ _onCloseClick: function () { this._hidePopup(); }, + /** + * @private + */ + _onBtnPrimaryClick(ev) { + if (this._canBtnPrimaryClosePopup(ev.target)) { + this._hidePopup(); + } + }, /** * @private */ diff --git a/addons/website_mass_mailing/static/src/snippets/s_popup/000.js b/addons/website_mass_mailing/static/src/snippets/s_popup/000.js index e202297d200..85c70f9e509 100644 --- a/addons/website_mass_mailing/static/src/snippets/s_popup/000.js +++ b/addons/website_mass_mailing/static/src/snippets/s_popup/000.js @@ -22,6 +22,15 @@ PopupWidget.include({ } return this._super(...arguments); }, + /** + * @override + */ + _canBtnPrimaryClosePopup(primaryBtnEl) { + if (primaryBtnEl.classList.contains('js_subscribe_btn')) { + return false; + } + return this._super(...arguments); + }, }); export default PopupWidget; diff --git a/addons/website_sale/__manifest__.py b/addons/website_sale/__manifest__.py index bee8dc42a43..a44e0de3640 100644 --- a/addons/website_sale/__manifest__.py +++ b/addons/website_sale/__manifest__.py @@ -32,6 +32,7 @@ 'views/snippets/snippets.xml', 'views/snippets/s_add_to_cart.xml', 'views/snippets/s_dynamic_snippet_products.xml', + 'views/snippets/s_popup.xml', 'views/res_config_settings_views.xml', 'views/website_sale_visitor_views.xml', 'views/website_base_unit_views.xml', diff --git a/addons/website_sale/static/src/snippets/s_popup/000.js b/addons/website_sale/static/src/snippets/s_popup/000.js new file mode 100644 index 00000000000..557c7bd9da6 --- /dev/null +++ b/addons/website_sale/static/src/snippets/s_popup/000.js @@ -0,0 +1,25 @@ +/** @odoo-module **/ + +import PopupWidget from 'website.s_popup'; + +PopupWidget.include({ + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Checks if the given primary button should allow or not to close the + * modal. + * + * @override + */ + _canBtnPrimaryClosePopup(primaryBtnEl) { + return ( + this._super(...arguments) + && !primaryBtnEl.classList.contains("js_add_cart") + ); + }, +}); + +export default PopupWidget; diff --git a/addons/website_sale/views/snippets/s_popup.xml b/addons/website_sale/views/snippets/s_popup.xml new file mode 100644 index 00000000000..31c75a03626 --- /dev/null +++ b/addons/website_sale/views/snippets/s_popup.xml @@ -0,0 +1,10 @@ + + + + + Popup 000 JS Website Sale Override + web.assets_frontend + website_sale/static/src/snippets/s_popup/000.js + + +