From 12e55c039eb14c2ee1d5d2a1d3059e20ae05d898 Mon Sep 17 00:00:00 2001 From: Benoit Socias Date: Wed, 3 Nov 2021 09:12:38 +0000 Subject: [PATCH] [FIX] web_tour, website{_*}: not consume non-displayed tour steps website{_*}: website, website_blog, website_sale, website_slides Before this commit if several steps were referencing the same trigger (e.g. "+New" button in website) only one was displayed, but all were consumed when it was clicked. Because of this the tour steps on "+New" were active even when its menu was opened. After this commit only the displayed step gets consumed if the step is marked as 'consumeVisibleOnly: true'. It cannot be done implictly on all steps because of [1]. This new marker is set on all steps referencing "+New". The tour steps on "+New" now also require their menu to not be opened. [1]: https://github.com/odoo/odoo/commit/5e888f8a6ccf9996b3231db6bf314d045619109e task-2728994 (was task-2675252) X-original-commit: 0fa40e37e596798665a098ee999f49749b6012a2 Part-of: odoo/odoo#83692 --- addons/web_tour/static/src/js/tip.js | 15 +++++++++++++++ addons/website/static/tests/tours/rte.js | 3 ++- .../static/src/js/tours/website_blog.js | 4 ++-- .../static/src/js/tours/website_sale_shop.js | 3 ++- .../static/src/js/tours/slides_tour.js | 3 ++- 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/addons/web_tour/static/src/js/tip.js b/addons/web_tour/static/src/js/tip.js index 8c0c337b8b9..f270ebe0987 100644 --- a/addons/web_tour/static/src/js/tip.js +++ b/addons/web_tour/static/src/js/tip.js @@ -179,6 +179,17 @@ var Tip = Widget.extend({ this._updatePosition(true); }, + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + + /** + * @return {boolean} true if tip is visible + */ + isShown() { + return this.el && !this.info.hidden; + }, + //-------------------------------------------------------------------------- // Private //-------------------------------------------------------------------------- @@ -439,6 +450,10 @@ var Tip = Widget.extend({ } $consumeEventAnchors.on(consumeEvent + ".anchor", (function (e) { if (e.type !== "mousedown" || e.which === 1) { // only left click + if (this.info.consumeVisibleOnly && !this.isShown()) { + // Do not consume non-displayed tips. + return; + } this.trigger("tip_consumed"); this._unbind_anchor_events(); } diff --git a/addons/website/static/tests/tours/rte.js b/addons/website/static/tests/tours/rte.js index ab7ec8fc6bd..2e3d152d0ea 100644 --- a/addons/website/static/tests/tours/rte.js +++ b/addons/website/static/tests/tours/rte.js @@ -38,8 +38,9 @@ tour.register('rte_translator', { extra_trigger: 'html[lang*="pa-GB"]', }, { content: "Open new page menu", - trigger: '#new-content-menu > a', + trigger: "body:has(#o_new_content_menu_choices.o_hidden) #new-content-menu > a", extra_trigger: 'a[data-action="edit"]', + consumeVisibleOnly: true, }, { content: "click on new page", trigger: 'a[data-action="new_page"]', diff --git a/addons/website_blog/static/src/js/tours/website_blog.js b/addons/website_blog/static/src/js/tours/website_blog.js index 6bd9efda4ab..b9d0e4069ff 100644 --- a/addons/website_blog/static/src/js/tours/website_blog.js +++ b/addons/website_blog/static/src/js/tours/website_blog.js @@ -8,10 +8,10 @@ odoo.define("website_blog.tour", function (require) { tour.register("blog", { url: "/", }, [{ - trigger: '#new-content-menu > a', + trigger: "body:has(#o_new_content_menu_choices.o_hidden) #new-content-menu > a", content: _t("Click here to add new content to your website."), + consumeVisibleOnly: true, position: 'bottom', - }, { trigger: "a[data-action=new_blog_post]", content: _t("Select this menu item to create a new blog post."), diff --git a/addons/website_sale/static/src/js/tours/website_sale_shop.js b/addons/website_sale/static/src/js/tours/website_sale_shop.js index 266054c859e..4c21f66d745 100644 --- a/addons/website_sale/static/src/js/tours/website_sale_shop.js +++ b/addons/website_sale/static/src/js/tours/website_sale_shop.js @@ -7,9 +7,10 @@ odoo.define("website_sale.tour_shop", function (require) { // return the steps, used for backend and frontend return [{ - trigger: "#new-content-menu > a", + trigger: "body:has(#o_new_content_menu_choices.o_hidden) #new-content-menu > a", content: _t("Let's create your first product."), extra_trigger: ".js_sale", + consumeVisibleOnly: true, position: "bottom", }, { trigger: "a[data-action=new_product]", diff --git a/addons/website_slides/static/src/js/tours/slides_tour.js b/addons/website_slides/static/src/js/tours/slides_tour.js index b31ca9acd55..341f265b14c 100644 --- a/addons/website_slides/static/src/js/tours/slides_tour.js +++ b/addons/website_slides/static/src/js/tours/slides_tour.js @@ -8,8 +8,9 @@ var tour = require('web_tour.tour'); tour.register('slides_tour', { url: '/slides', }, [{ - trigger: '#new-content-menu > a', + trigger: "body:has(#o_new_content_menu_choices.o_hidden) #new-content-menu > a", content: Markup(_t("Welcome on your course's home page. It's still empty for now. Click on \"New\" to write your first course.")), + consumeVisibleOnly: true, position: 'bottom', }, { trigger: 'a[data-action="new_slide_channel"]',