From df80bc956046793ba6ec263e169a84bfe46f7ef8 Mon Sep 17 00:00:00 2001 From: metatroncubeswdev Date: Sun, 27 Sep 2026 10:07:39 -0400 Subject: [PATCH] Apply TNCSC favicon through frontend and backend assets Replace rendered favicon and Apple touch icon links with the official PNG using a versioned URL, including layouts whose database template overrides have not taken effect. Create an icon link when absent without duplicates. Validated injected script on live homepage and login HTML, PNG response, repeated execution, JavaScript syntax, and manifest completeness. Production still requires loading the updated assets. --- addons/tncsc_deployment/__manifest__.py | 2 ++ .../tncsc_deployment/static/src/js/favicon.js | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 addons/tncsc_deployment/static/src/js/favicon.js diff --git a/addons/tncsc_deployment/__manifest__.py b/addons/tncsc_deployment/__manifest__.py index 40fb218..af2888e 100644 --- a/addons/tncsc_deployment/__manifest__.py +++ b/addons/tncsc_deployment/__manifest__.py @@ -57,10 +57,12 @@ that applies to the community_* product modules. 'tncsc_deployment/static/src/scss/primary_variables.scss', ], 'web.assets_frontend': [ + 'tncsc_deployment/static/src/js/favicon.js', 'tncsc_deployment/static/src/scss/login_theme.scss', 'tncsc_deployment/static/src/scss/website_navigation.scss', ], 'web.assets_backend': [ + 'tncsc_deployment/static/src/js/favicon.js', 'tncsc_deployment/static/src/scss/tncsc_backend_theme.scss', 'tncsc_deployment/static/src/scss/event_kanban.scss', 'tncsc_deployment/static/src/scss/community_dashboard.scss', diff --git a/addons/tncsc_deployment/static/src/js/favicon.js b/addons/tncsc_deployment/static/src/js/favicon.js new file mode 100644 index 0000000..33c5e02 --- /dev/null +++ b/addons/tncsc_deployment/static/src/js/favicon.js @@ -0,0 +1,27 @@ +/** @odoo-module **/ + +// Apply branding to rendered layouts too, including website-specific copies. +// A versioned URL avoids reusing a previously cached database favicon. +function setTncscFavicon() { + const href = "/tncsc_deployment/static/src/img/brand/logo.png?v=tncsc-1"; + const icons = [...document.head.querySelectorAll( + 'link[rel~="icon"], link[rel="apple-touch-icon"], link[rel="apple-touch-icon-precomposed"]' + )]; + if (!icons.some((icon) => icon.rel.split(/\s+/).includes("icon"))) { + const icon = document.createElement("link"); + icon.rel = "icon"; + document.head.appendChild(icon); + icons.push(icon); + } + for (const icon of icons) { + icon.type = "image/png"; + icon.href = href; + icon.removeAttribute("sizes"); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", setTncscFavicon, { once: true }); +} else { + setTncscFavicon(); +}