digitalmarketplace-govuk-frontend
Version:
Digital Marketplace GOV.UK Frontend contains the code you need to start building a user interface for Digital Marketplace.
90 lines (68 loc) • 3.24 kB
JavaScript
import { getCookie, setConsentCookie } from '../../helpers/cookie/cookie-functions'
import InitialiseAnalytics from '../analytics/init'
const CookieBanner = function ($module) {
this.$module = $module
}
CookieBanner.prototype.clearOldCookies = function () {
// clear any cookies set by the previous version
var oldCookies = ['seen_cookie_message', '_ga', '_gid']
for (var i = 0; i < oldCookies.length; i++) {
if (getCookie(oldCookies[i])) {
var cookieString = oldCookies[i] + '=;expires=' + new Date() + ';domain=' + window.location.hostname.replace(/^www\./, '.') + ';path=/'
document.cookie = cookieString
}
}
}
CookieBanner.prototype.init = function ($module) {
this.$module.hideCookieMessage = this.hideCookieMessage.bind(this)
this.$module.showConfirmationMessage = this.showConfirmationMessage.bind(this)
this.$module.setCookieConsent = this.setCookieConsent.bind(this)
this.$module.cookieBanner = document.querySelector('.dm-cookie-banner')
this.$module.cookieBannerConfirmationMessage = this.$module.querySelector('.dm-cookie-banner__confirmation')
this.setupCookieMessage()
}
CookieBanner.prototype.setupCookieMessage = function () {
this.$hideLink = this.$module.querySelector('button[data-hide-cookie-banner]')
if (this.$hideLink) {
this.$hideLink.addEventListener('click', this.$module.hideCookieMessage)
}
this.$acceptCookiesLink = this.$module.querySelector('button[data-accept-cookies=true]')
if (this.$acceptCookiesLink) {
this.$acceptCookiesLink.addEventListener('click', () => this.$module.setCookieConsent(true))
}
this.$rejectCookiesLink = this.$module.querySelector('button[data-accept-cookies=false]')
if (this.$rejectCookiesLink) {
this.$rejectCookiesLink.addEventListener('click', () => this.$module.setCookieConsent(false))
}
this.showCookieMessage()
}
CookieBanner.prototype.showCookieMessage = function () {
// Show the cookie banner if policy cookie not set
var hasCookiesPolicy = getCookie('dm_cookies_policy')
if (this.$module && !hasCookiesPolicy) {
this.$module.style.display = 'block'
}
}
CookieBanner.prototype.hideCookieMessage = function (event) {
if (this.$module) {
this.$module.style.display = 'none'
}
if (event.target) {
event.preventDefault()
}
}
CookieBanner.prototype.setCookieConsent = function (analyticsConsent) {
setConsentCookie({ analytics: analyticsConsent })
this.$module.showConfirmationMessage(analyticsConsent)
this.$module.cookieBannerConfirmationMessage.focus()
if (analyticsConsent) { InitialiseAnalytics() }
}
CookieBanner.prototype.showConfirmationMessage = function (analyticsConsent) {
var messagePrefix = analyticsConsent ? 'You’ve accepted analytics cookies.' : 'You told us not to use analytics cookies.'
this.$cookieBannerMainContent = document.querySelector('.dm-cookie-banner__wrapper')
this.$cookieBannerConfirmationMessage = document.querySelector('.dm-cookie-banner__confirmation-message')
this.$cookieBannerConfirmationMessage.insertAdjacentText('afterbegin', messagePrefix)
this.$cookieBannerMainContent.style.display = 'none'
this.$module.cookieBannerConfirmationMessage.style.display = 'block'
}
export default CookieBanner