From c1e0b03d8b5482a5150a0973e1ca48d70864a4e1 Mon Sep 17 00:00:00 2001 From: fw-bot Date: Mon, 2 Nov 2020 13:11:55 +0000 Subject: [PATCH] [IMP] website: make homepage tour, available on homepage only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Homepage tour starts with a very generic step 'drop snippet' So, you can be in the middle of another tour and see the step of homepage tour. This doesn't fix all cases, but make conflict less frequent. E.g. go to step 4 of tour event click on save (before doing the step 5) click on edit Element is no more dirty (because save before step 5) so the step 5 not visible, Tour with higher sequence (== lower priority) become visible. (e.g.: homepage) Forward-Port of bca6cf2693d38c76b1af08398a3125bb16b59c15 closes odoo/odoo#61157 Related: odoo/design-themes#416 Signed-off-by: Jérémy Kersten (jke) --- addons/website/data/website_data.xml | 7 ++++- addons/website/models/ir_actions.py | 15 +++++++++++ addons/website/models/ir_module_module.py | 6 ++++- .../website/static/src/js/menu/new_content.js | 10 +++++++ .../website/static/src/js/tours/homepage.js | 5 ++-- .../website/static/src/js/tours/tour_utils.js | 27 ++++++++++++++++++- addons/website/views/website_views.xml | 1 + .../static/src/js/tours/website_blog.js | 3 ++- .../static/src/js/tours/website_event.js | 4 +-- odoo/addons/base/views/base_menus.xml | 1 + 10 files changed, 70 insertions(+), 9 deletions(-) diff --git a/addons/website/data/website_data.xml b/addons/website/data/website_data.xml index 5bcbc10e10f..180667f0d63 100644 --- a/addons/website/data/website_data.xml +++ b/addons/website/data/website_data.xml @@ -240,8 +240,13 @@ / self + + Website Edit Mode + /?enable_editor=1 + self + - + open diff --git a/addons/website/models/ir_actions.py b/addons/website/models/ir_actions.py index 24fbc937514..305820503c7 100644 --- a/addons/website/models/ir_actions.py +++ b/addons/website/models/ir_actions.py @@ -60,3 +60,18 @@ class ServerAction(models.Model): """ res = super(ServerAction, self)._run_action_code_multi(eval_context) return eval_context.get('response', res) + + +class IrActionsTodo(models.Model): + _name = 'ir.actions.todo' + _inherit = 'ir.actions.todo' + + def action_launch(self): + res = super().action_launch() # do ensure_one() + + if self.id == self.env.ref('website.theme_install_todo').id: + # Pick a theme consume all ir.actions.todo by default (due to lower sequence). + # Once done, we re-enable the main ir.act.todo: open_menu + self.env.ref('base.open_menu').action_open() + + return res diff --git a/addons/website/models/ir_module_module.py b/addons/website/models/ir_module_module.py index ff843663161..9ec53dcc519 100644 --- a/addons/website/models/ir_module_module.py +++ b/addons/website/models/ir_module_module.py @@ -360,7 +360,11 @@ class IrModuleModule(models.Model): # this will install 'self' if it is not installed yet self._theme_upgrade_upstream() - return website.button_go_website(mode_edit=True) + active_todo = self.env['ir.actions.todo'].search([('state', '=', 'open')], limit=1) + if active_todo: + return active_todo.action_launch() + else: + return website.button_go_website(mode_edit=True) def button_remove_theme(self): """Remove the current theme of the current website.""" diff --git a/addons/website/static/src/js/menu/new_content.js b/addons/website/static/src/js/menu/new_content.js index e52801bd123..13de4a27794 100644 --- a/addons/website/static/src/js/menu/new_content.js +++ b/addons/website/static/src/js/menu/new_content.js @@ -5,6 +5,7 @@ var core = require('web.core'); var Dialog = require('web.Dialog'); var websiteNavbarData = require('website.navbar'); var wUtils = require('website.utils'); +var tour = require('web_tour.tour'); var qweb = core.qweb; var _t = core._t; @@ -56,6 +57,15 @@ var NewContentMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({ this.$lastLink = this.$newContentMenuChoices.find('a:last'); if ($.deparam.querystring()[enableFlag] !== undefined) { + Object.keys(tour.tours).forEach( + el => { + let element = tour.tours[el]; + if (element.steps[0].trigger == '#new-content-menu > a' + && !element.steps[0].extra_trigger) { + element.steps[0].auto = true; + } + } + ); this._showMenu(); } return this._super.apply(this, arguments); diff --git a/addons/website/static/src/js/tours/homepage.js b/addons/website/static/src/js/tours/homepage.js index cb962512564..bff0ec93d40 100644 --- a/addons/website/static/src/js/tours/homepage.js +++ b/addons/website/static/src/js/tours/homepage.js @@ -3,12 +3,11 @@ odoo.define("website.tour.homepage", function (require) { var core = require("web.core"); var tour = require("web_tour.tour"); +const wTourUtils = require("website.tour_utils"); var _t = core._t; -tour.register("homepage", { - url: "/", -}, [{ +wTourUtils.registerThemeHomepageTour('homepage', [{ trigger: "a[data-action=edit]", content: _t("Click Edit to start designing your homepage."), extra_trigger: ".homepage", diff --git a/addons/website/static/src/js/tours/tour_utils.js b/addons/website/static/src/js/tours/tour_utils.js index 172bc9c9377..3d3e2ed6ab1 100644 --- a/addons/website/static/src/js/tours/tour_utils.js +++ b/addons/website/static/src/js/tours/tour_utils.js @@ -4,6 +4,8 @@ odoo.define("website.tour_utils", function (require) { const core = require("web.core"); const _t = core._t; +var tour = require("web_tour.tour"); + /** const snippets = [ @@ -216,7 +218,28 @@ function selectSnippetColumn(snippet, index = 0, position = "bottom") { position: position, run: "click", }; - } +} + +function prepend_trigger(steps, prepend_text='') { + for (const step of steps) { + if (!step.noPrepend && prepend_text) { + step.trigger = prepend_text + step.trigger; + } + } + return steps; +} + +function registerThemeHomepageTour(name, steps) { + tour.register(name, { + url: "/", + sequence: 1010, + saveAs: "homepage", + }, prepend_trigger( + steps, + "html[data-view-xmlid='website.homepage'] " + )); +} + return { addMedia, @@ -236,5 +259,7 @@ return { goToOptions, selectHeader, selectSnippetColumn, + + registerThemeHomepageTour, }; }); diff --git a/addons/website/views/website_views.xml b/addons/website/views/website_views.xml index 9ce2f21b28d..2cf4a1e2f11 100644 --- a/addons/website/views/website_views.xml +++ b/addons/website/views/website_views.xml @@ -443,6 +443,7 @@ + Go to theme 0 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 069fb96daf6..0cccc361ae7 100644 --- a/addons/website_blog/static/src/js/tours/website_blog.js +++ b/addons/website_blog/static/src/js/tours/website_blog.js @@ -10,8 +10,9 @@ odoo.define("website_blog.tour", function (require) { url: "/", }, [{ trigger: '#new-content-menu > a', - auto: true, + content: _t("Click here to add new content on your website."), 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_event/static/src/js/tours/website_event.js b/addons/website_event/static/src/js/tours/website_event.js index 127e1cd1e12..eeefcf3d2ca 100644 --- a/addons/website_event/static/src/js/tours/website_event.js +++ b/addons/website_event/static/src/js/tours/website_event.js @@ -9,8 +9,8 @@ odoo.define("website_event.tour", function (require) { tour.register("event", { url: "/", }, [{ + content: _t("Click here to add new content on your website."), trigger: '#new-content-menu > a', - auto: true, position: 'bottom', }, { trigger: "a[data-action=new_event]", @@ -19,7 +19,7 @@ odoo.define("website_event.tour", function (require) { }, { trigger: '.modal-dialog #editor_new_event input[type=text]', content: _t("Create a name for your new event and click \"Continue\". e.g: Technical Training"), - position: "right", + position: "left", }, { trigger: '.modal-footer button.btn-primary.btn-continue', extra_trigger: '#editor_new_event input[type=text][value!=""]', diff --git a/odoo/addons/base/views/base_menus.xml b/odoo/addons/base/views/base_menus.xml index 077eaa71e86..a2ed6b88f73 100644 --- a/odoo/addons/base/views/base_menus.xml +++ b/odoo/addons/base/views/base_menus.xml @@ -40,6 +40,7 @@ + Open Menu 100 done