From 8ec9729a18a9392d6db358767086f02f8edd6619 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 8 May 2024 17:01:54 +0100 Subject: [PATCH] [Westminster] Add cookie banner. --- .../web/westminster/footer_extra_js.html | 42 ++++++ web/cobrands/westminster/base.scss | 123 ++++++++++++++++++ web/cobrands/westminster/vendor/banner.js | 66 ++++++++++ 3 files changed, 231 insertions(+) create mode 100644 web/cobrands/westminster/vendor/banner.js diff --git a/templates/web/westminster/footer_extra_js.html b/templates/web/westminster/footer_extra_js.html index 17faa0efe24..ee779d3e1a7 100644 --- a/templates/web/westminster/footer_extra_js.html +++ b/templates/web/westminster/footer_extra_js.html @@ -6,3 +6,45 @@ ); END %] + +[% IF c.config.BASE_URL == "https://www.fixmystreet.com" OR c.config.BASE_URL == 'https://staging.fixmystreet.com'; + scripts.push( version('/cobrands/westminster/vendor/banner.js') ); +%] + +[% END %] diff --git a/web/cobrands/westminster/base.scss b/web/cobrands/westminster/base.scss index e0c0213515b..a1ddd7d6788 100644 --- a/web/cobrands/westminster/base.scss +++ b/web/cobrands/westminster/base.scss @@ -272,3 +272,126 @@ body.alertpage, body.authpage, body.twothirdswidthpage { @include btn-medium-primary } } + +.westminster-cookie-banner { + *, ::before, ::after { + box-sizing: border-box; + border-width: 0; + border-style: solid; + border-color: #e5e7eb; + } + + .cookiealert.show { + opacity: 1; + visibility: visible; + transform: translateY(0%); + transition: all 200ms; + } + + .cookiealert { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + margin: 0 !important; + z-index: 999; + opacity: 0; + visibility: hidden; + border-radius: 0; + transform: translateY(100%); + transition: all 200ms ease-out; + color: #fff; + background: #0B2265; + border-top: 0.4rem solid #ffd420; + font-family: "Source Sans Pro" !important; + font-size: 19px; + line-height: 1.78125rem; + } + + + .row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + flex-flow: row wrap; + position: relative; + } + + .p-6 { + padding: 1.5rem; + } + + .text-left { + text-align: left; + } + + .text-right { + text-align: right; + } + + .text-center { + text-align: center; + } + + .ml-auto { + margin-left: auto; + } + + + .header-4 { + font-size: 1.5rem; + font-family: "Source Sans Pro"; + letter-spacing: 0; + color: #0B2265; + line-height: 1.9375rem; + } + + .cookiealert p { + font-size: 1.0625rem; + line-height: 1.59375rem; + margin-top: 0; + margin-bottom: 0.625rem; + } + + .cookiealert a { + color: #ffffff; + text-decoration: underline; + } + + .text-link-colour { + color: rgb(0, 89, 175); + } + + .text-white { + color: rgb(255, 255, 255); + } + + button, [type='button'] { + background-color: transparent; + background-image: none; + cursor: pointer; + text-transform: none; + } + + .primary-button { + font-size: 1.1475rem; + line-height: 1.336rem; + background-color: #0335ff; + color: #ffffff; + padding: 0.5em; + text-align: center; + text-decoration: none; + display: inline-block; + box-shadow: 0 0.125rem 0.735rem 0 rgba(0, 0, 0, 0.3); + outline: none; + border-radius: 0.4rem; + } + + .bg-button-default { + background-color: rgb(3, 53, 255); + } + + .mt-3 { + margin-top: 0.75rem; + } +} diff --git a/web/cobrands/westminster/vendor/banner.js b/web/cobrands/westminster/vendor/banner.js new file mode 100644 index 00000000000..3987e6e7695 --- /dev/null +++ b/web/cobrands/westminster/vendor/banner.js @@ -0,0 +1,66 @@ +const reportItCookieDefault = "westminster-city-council_cookiecontrol-version"; +const reportItCookieDefaultContent = "1.0.0"; +const reportItCookie = "westminster-city-council_cookiecontrol"; +const reportItCookieContent = "2"; +const googleTagManagerUrl = + "https://www.googletagmanager.com/gtag/js?id=G-89XXDEKFEX"; +const cookiePolicyButton = document.querySelector("#cookiepolicy"); +const cookieAlert = document.querySelector(".cookiealert"); +const declineLink = document.querySelector("#declinepolicy"); + +const loadGoogleAnalyticsScripts = () => { + var script1 = document.createElement("script"); + script1.async = true; + script1.src = googleTagManagerUrl; + + var script2 = document.createElement("script"); + script2.innerHTML = ` +window.dataLayer = window.dataLayer || []; +function gtag(){dataLayer.push(arguments);} +gtag('js', new Date()); +gtag('config', 'G-89XXDEKFEX'); +`; + + document.body.appendChild(script1); + document.body.appendChild(script2); +}; + +const isScriptAdded = (scriptUrl) => { + const scripts = document.getElementsByTagName("script"); + const scriptExists = [...scripts].some((script) => script.src === scriptUrl); + return scriptExists; +}; + +const removeBanner = () => cookieAlert.classList.remove("show"); + +const placeGoogleAnalyticsCookie = () => { + document.cookie = `${reportItCookie}=${reportItCookieContent}`; + document.cookie = `${reportItCookieDefault}=${reportItCookieDefaultContent}`; + if (!isScriptAdded(googleTagManagerUrl)) { + loadGoogleAnalyticsScripts(); + } + removeBanner(); +}; + +const declineCookie = (event) => { + event.preventDefault(); + document.cookie = `${reportItCookieDefault}=${reportItCookieDefaultContent}`; + removeBanner(); +}; + +cookiePolicyButton.addEventListener("click", () => + placeGoogleAnalyticsCookie() +); +declineLink.addEventListener("click", (event) => declineCookie(event)); + +window.addEventListener("load", () => { + const cookie = document.cookie; + if (cookie.includes(reportItCookieDefault)) { + cookieAlert.classList.remove("show"); + } else { + cookieAlert.classList.add("show"); + } + if (cookie.includes(reportItCookie) && !isScriptAdded(googleTagManagerUrl)) { + loadGoogleAnalyticsScripts(); + } +});