diff --git a/addons/website/static/src/js/content/inject_dom.js b/addons/website/static/src/js/content/inject_dom.js index 19dc4dcdfea..9c5c5760bfc 100644 --- a/addons/website/static/src/js/content/inject_dom.js +++ b/addons/website/static/src/js/content/inject_dom.js @@ -25,9 +25,7 @@ export function unhideConditionalElements() { } } -document.addEventListener('DOMContentLoaded', () => { - // Transfer cookie/session data as HTML element's attributes so that CSS - // selectors can be based on them. +export function setUtmsHtmlDataset() { const htmlEl = document.documentElement; const cookieNamesToDataNames = { 'utm_source': 'utmSource', @@ -41,11 +39,17 @@ document.addEventListener('DOMContentLoaded', () => { htmlEl.dataset[dsName] = cookie.replace(/(^["']|["']$)/g, ''); } } +} + +document.addEventListener('DOMContentLoaded', () => { + // Transfer cookie/session data as HTML element's attributes so that CSS + // selectors can be based on them. + setUtmsHtmlDataset(); + const htmlEl = document.documentElement; const country = session.geoip_country_code; if (country) { htmlEl.dataset.country = country; } - htmlEl.dataset.logged = !session.is_website_user; unhideConditionalElements(); diff --git a/addons/website/static/src/snippets/s_popup/000.js b/addons/website/static/src/snippets/s_popup/000.js index 43c4ca5fe9c..3b40b22a37d 100644 --- a/addons/website/static/src/snippets/s_popup/000.js +++ b/addons/website/static/src/snippets/s_popup/000.js @@ -4,6 +4,7 @@ import publicWidget from "@web/legacy/js/public/public_widget"; import { cookie } from "@web/core/browser/cookie"; import {throttleForAnimation} from "@web/core/utils/timing"; import { utils as uiUtils } from "@web/core/ui/ui_service"; +import {setUtmsHtmlDataset} from '@website/js/content/inject_dom'; // TODO In master, export this class too or merge it with PopupWidget const SharedPopupWidget = publicWidget.Widget.extend({ @@ -361,6 +362,25 @@ publicWidget.registry.cookies_bar = PopupWidget.extend({ this.cookieValue = `{"required": true, "optional": ${ev.target.id === 'cookies-consent-all'}}`; this._onHideModal(); }, + /** + * @override + */ + _onHideModal() { + this._super(...arguments); + const params = new URLSearchParams(window.location.search); + const trackingFields = { + utm_campaign: "odoo_utm_campaign", + utm_source: "odoo_utm_source", + utm_medium: "odoo_utm_medium", + }; + for (const [key, value] of params) { + if (key in trackingFields) { + // Using same cookie expiration value as in python side + cookie.set(trackingFields[key], value, 31 * 24 * 60 * 60, "required"); + } + } + setUtmsHtmlDataset(); + } }); export default PopupWidget;