From 2dffd1c8f0f03eb73fc5878b53771f8c11939ceb Mon Sep 17 00:00:00 2001 From: Romeo Fragomeli Date: Thu, 13 Aug 2020 15:23:10 +0000 Subject: [PATCH] [FIX] website_event_track_online: PWA not working with multi-lang MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this commit, the PWA didn't work when the language was specified in the URL like in "/fr_FR/event". Note that it worked fine for the default language. The reason is that we were out of the scope. After this commit, we build the scope dynamically depending on the language entered in the URL. Steps to reproduce: - Configure a second lang to the website - Go to website - Choose another language than the default one. (e.g. "French - BE") - Go to the event page => Bug due to /fr_BE in the URL closes odoo/odoo#55924 X-original-commit: 27a3837df5ecb9a0eada49ceddecfa447be1833d Signed-off-by: Adrien Dieudonné (adr) --- .../controllers/event_track.py | 7 ++++--- .../static/src/js/website_event_pwa_widget.js | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/addons/website_event_track_online/controllers/event_track.py b/addons/website_event_track_online/controllers/event_track.py index 26727aea53e..8df8b5deb5c 100644 --- a/addons/website_event_track_online/controllers/event_track.py +++ b/addons/website_event_track_online/controllers/event_track.py @@ -8,6 +8,7 @@ from datetime import timedelta import pytz from odoo import exceptions, http, fields +from odoo.addons.http_routing.models.ir_http import url_for from odoo.addons.website_event_track.controllers.main import WebsiteEventTrackController from odoo.http import request from odoo.modules.module import get_module_resource @@ -243,8 +244,8 @@ class EventTrackOnlineController(WebsiteEventTrackController): 'name': _('%s Online Events') % company.name, 'short_name': company.name, 'description': _('%s Online Events') % company.name, - 'scope': '/event', - 'start_url': '/event', + 'scope': url_for('/event'), + 'start_url': url_for('/event'), 'display': 'standalone', 'background_color': '#ffffff', 'theme_color': '#875A7B', @@ -270,6 +271,6 @@ class EventTrackOnlineController(WebsiteEventTrackController): body = fp.read() response = request.make_response(body, [ ('Content-Type', 'text/javascript'), - ('Service-Worker-Allowed', '/event'), + ('Service-Worker-Allowed', url_for('/event')), ]) return response diff --git a/addons/website_event_track_online/static/src/js/website_event_pwa_widget.js b/addons/website_event_track_online/static/src/js/website_event_pwa_widget.js index f8fffb3f9b1..15770c023dd 100644 --- a/addons/website_event_track_online/static/src/js/website_event_pwa_widget.js +++ b/addons/website_event_track_online/static/src/js/website_event_pwa_widget.js @@ -3,6 +3,7 @@ odoo.define("website_event_track_online.website_event_pwa_widget", function (req var config = require("web.config"); var publicWidget = require("web.public.widget"); + var utils = require("web.utils"); var PWAInstallBanner = publicWidget.Widget.extend({ xmlDependencies: ["/website_event_track_online/static/src/xml/website_event_pwa.xml"], @@ -41,7 +42,7 @@ odoo.define("website_event_track_online.website_event_pwa_widget", function (req start: function () { var superProm = this._super.apply(this, arguments); window.addEventListener("beforeinstallprompt", this.beforeInstallPromptHandler); - return superProm.then(this._registerServiceWorker); + return superProm.then(this._registerServiceWorker.bind(this)); }, /** @@ -57,6 +58,19 @@ odoo.define("website_event_track_online.website_event_pwa_widget", function (req // Private //-------------------------------------------------------------------------- + /** + * Returns the website's language + * @private + * @return {String} + */ + _getLangPrefix: function () { + var lang = utils.get_cookie('frontend_lang'); + if (lang !== undefined && window.location.href.indexOf(`/${lang}/`) >= 0) { + return `/${lang}`; + } + return ''; + }, + /** * @private */ @@ -72,8 +86,9 @@ odoo.define("website_event_track_online.website_event_pwa_widget", function (req if (!("serviceWorker" in navigator)) { return; } + var langPrefix = this._getLangPrefix(); navigator.serviceWorker - .register("/event/service-worker.js", { scope: "/event" }) + .register(`${langPrefix}/event/service-worker.js`, { scope: `${langPrefix}/event` }) .then((registration) => { console.info("Registration successful, scope is:", registration.scope); })