{"version":3,"file":"cookie-policy.js","sources":["../../src/js/content.js","../../src/js/utils.js","../../src/js/notification.js","../../src/js/control.js","../../src/js/manager.js","../../src/js/main.js"],"sourcesContent":["export const controlsContent = [\n {\n id: 'essential',\n showSwitcher: false,\n content: {\n default: {\n title: 'Essential',\n description:\n \"Enables the site's core functionality, such as navigation, access to secure areas, video players and payments. The site cannot function properly without these cookies; they can only be disabled by changing your browser preferences.\",\n },\n zh: {\n title: '必要性',\n description:\n '启用网站核心功能,例如导航,访问安全区域,视频播放器和支付。没有这些cookie网站不能正常工作;它们仅可通过修改浏览器偏好设置禁用。',\n },\n ja: {\n title: 'エッセンシャル',\n description:\n '移動、保護されている情報へのアクセス、動画再生、支払など、サイトの基本的な機能が有効になります。これらのクッキーが有効になっていない(お使いのブラウザの設定を変更することによってクッキーが無効化されている)場合、サイトは正しく表示されません。',\n },\n },\n },\n {\n id: 'performance',\n showSwitcher: true,\n content: {\n default: {\n title: 'Performance',\n description:\n 'Collects information on site usage, for example, which pages are most frequently visited.',\n },\n zh: {\n title: '表现性',\n description: '网站使用信息收集,例如哪些网页被频繁访问。',\n },\n ja: {\n title: 'パフォーマンス',\n description:\n 'サイトの利用状況に関する情報を収集します。例として、どのページの訪問頻度が高いかのような情報です。',\n },\n },\n },\n {\n id: 'functionality',\n showSwitcher: true,\n content: {\n default: {\n title: 'Functionality',\n description:\n 'Recognises you when you return to our site. This enables us to personalise content, greet you by name, remember your preferences, and helps you share pages on social networks.',\n },\n zh: {\n title: '功能性',\n description:\n '当你返回到我们网站时能识别您。这使得我们能个性化内容,欢迎您,记住您的偏好设置,以及帮助您分享网页到社交媒体。',\n },\n ja: {\n title: '機能性',\n description:\n 'お客様がサイトを再訪問したときに、お客様であることを認識します。この設定では、お客様に合わせたコンテンツの表示、お客様のお名前を用いたあいさつメッセージの表示、お客様の傾向の記録を当社が行えるようになります。また、お客様がソーシャルネットワークでページをシェアできるようになります。',\n },\n },\n },\n];\n\nexport const content = {\n default: {\n notification: {\n title: 'Your tracker settings',\n body1:\n 'We use cookies and similar methods to recognise visitors and remember preferences. We also use them to measure campaign effectiveness and analyse site traffic.',\n body2:\n 'By selecting ‘Accept‘, you consent to the use of these methods by us and trusted third parties.',\n body3:\n 'For further details or to change your consent choices at any time see our cookie policy.',\n buttonAccept: 'Accept all and visit site',\n buttonManage: 'Manage your tracker settings',\n },\n manager: {\n title: 'Tracking choices',\n body1:\n 'We use cookies to recognise visitors and remember your preferences.',\n body2:\n 'They enhance user experience, personalise content and ads, provide social media features, measure campaign effectiveness, and analyse site traffic.',\n body3:\n 'Select the types of trackers you consent to, both by us, and third parties.',\n body4:\n 'Learn more at data privacy: cookie policy - you can change your choices at any time from the footer of the site.',\n acceptAll: 'Accept all',\n acceptAllHelp: 'This will switch all toggles \"ON\".',\n SavePreferences: 'Save preferences',\n },\n },\n\n zh: {\n notification: {\n title: '您的追踪器设置',\n body1:\n '我们使用cookie和相似的方法来识别访问者和记住偏好设置。我们也用它们来衡量活动的效果和网站流量分析。',\n body2: '选择”接受“,您同意我们和受信的第三方来使用这些方式。',\n body3:\n '更多内容或者随时地变更您的同意选择,请点击我们的 cookie策略.',\n buttonAccept: '接受全部和访问网站',\n buttonManage: '管理您的追踪器设置',\n },\n manager: {\n title: '追踪选项',\n body1: '我们使用cookie来识别访问者和记住您的偏好设置',\n body2:\n '它们增强用户体验,使内容和广告个性化,提供社交媒体功能,衡量活动效果和网站流量分析。',\n body3: '选择您同意授予我们和受信的第三方的追踪类型。',\n body4:\n '点击数据隐私:cookie策略了解更多,您可以在网站底部随时更改您的选择。',\n acceptAll: '接受全部',\n acceptAllHelp: '这将把全部开关变为”开启“。',\n SavePreferences: '保存偏好设置',\n },\n },\n\n ja: {\n notification: {\n title: 'トラッキング機能の設定',\n body1:\n '当社は、当社のウェブサイトを訪問された方の識別や傾向の記録を行うために、クッキーおよび類似の手法を利用します。また、キャンペーンの効果の測定やサイトのトラフィックの分析にもクッキーを利用します。',\n body2:\n '「同意」を選択すると、当社および信頼できる第三者による上記の手法の利用に同意したものとみなされます。',\n body3:\n '詳細または同意の変更については、いつでも当社のクッキーに関するポリシーをご覧になることができます。',\n buttonAccept: 'すべて同意してサイトにアクセス',\n buttonManage: 'トラッキング機能の設定の管理',\n },\n manager: {\n title: 'トラッキング機能の選択',\n body1:\n '当社は、当社のウェブサイトを訪問された方の識別や傾向の記録を行うために、クッキーを利用します。',\n body2:\n 'クッキーは、お客様の利便性の向上、お客様に合わせたコンテンツや広告の表示、ソーシャルメディア機能の提供、キャンペーンの効果の測定、サイトのトラフィックの分析に役立ちます。',\n body3:\n '当社および第三者によるトラッキング機能のタイプから、お客様が同意されるものをお選びください。',\n body4:\n '詳細は、データプライバシー:クッキーに関するポリシーをご覧ください。お客様が選んだ設定は、本サイトの下部からいつでも変更できます。',\n acceptAll: 'すべて同意',\n acceptAllHelp: '同意されるとすべての設定が「ON」に切り替わります。',\n SavePreferences: '設定を保存',\n },\n },\n};\n","import { content } from './content.js';\n\nexport const setCookie = (value) => {\n const d = new Date();\n d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);\n const expires = 'expires=' + d.toUTCString();\n const samesite = 'samesite=lax;';\n const path = 'path=/;';\n document.cookie =\n '_cookies_accepted=' + value + '; ' + expires + '; ' + samesite + path;\n if (enabledTracking(value)) {\n pushPageview();\n }\n};\n\nexport const getCookie = () => {\n const toMatch = '_cookies_accepted=';\n const splitArray = document.cookie.split(';');\n let cookieValue = '';\n let currentCookieValue = '';\n for (let i = 0; i < splitArray.length; i++) {\n let cookie = splitArray[i];\n while (cookie.charAt(0) == ' ') {\n cookie = cookie.substring(1);\n }\n currentCookieValue = cookie.substring(toMatch.length, cookie.length);\n if (cookie.indexOf(toMatch) === 0 && currentCookieValue !== 'true') {\n cookieValue = currentCookieValue;\n }\n }\n return cookieValue;\n};\n\nexport const preferenceNotSelected = () => {\n const cookieValue = getCookie('_cookies_accepted');\n // Skip a value of \"true\" to override old existing cookies\n if (cookieValue && cookieValue != 'true') {\n return false;\n } else {\n return true;\n }\n};\n\nexport const hideSpecified = () => {\n const urlParams = new URLSearchParams(window.location.search);\n const cpQuery = urlParams.get('cp');\n\n if (cpQuery === 'hide') {\n return true;\n } else {\n return false;\n }\n};\n\nexport const getContent = (language) => {\n if (content[language]) {\n return content[language];\n } else {\n return content['default'];\n }\n};\n\nexport const getControlsContent = (details, language) => {\n if (details.content[language]) {\n return details.content[language];\n } else {\n return details.content['default'];\n }\n};\n\nconst pushPageview = () => {\n if (typeof dataLayer === 'object') {\n dataLayer.push({ event: 'pageview' });\n }\n};\n\nconst enabledTracking = (selectedPreference) => {\n if (selectedPreference == 'all' || selectedPreference == 'performance') {\n return true;\n } else {\n return false;\n }\n};\n","import { setCookie, getContent } from \"./utils.js\";\n\nexport class Notification {\n constructor(container, renderManager, destroyComponent) {\n this.container = container;\n this.renderManager = renderManager;\n this.destroyComponent = destroyComponent;\n }\n\n getNotificationMarkup(language) {\n const notificationContent = getContent(language);\n const notification = `\n
\n
\n
\n

${notificationContent.notification.title}

\n
\n
\n

${notificationContent.notification.body1}

\n

${notificationContent.notification.body2}

\n

${notificationContent.notification.body3}

\n

\n \n \n

\n
\n
`;\n\n return notification;\n }\n\n render(language) {\n this.container.innerHTML = this.getNotificationMarkup(language);\n this.initaliseListeners();\n }\n\n initaliseListeners() {\n this.container.querySelector(\".js-close\").addEventListener(\"click\", (e) => {\n setCookie(\"all\");\n this.destroyComponent();\n });\n this.container\n .querySelector(\".js-manage\")\n .addEventListener(\"click\", (e) => {\n this.renderManager();\n });\n }\n}\n","import { getControlsContent } from \"./utils.js\";\n\nexport class Control {\n constructor(details, container, language) {\n this.language = language;\n this.id = details.id;\n this.title = getControlsContent(details, language).title;\n this.description = getControlsContent(details, language).description;\n this.showSwitcher = details.showSwitcher;\n this.container = container;\n this.element;\n\n // Rendering off the bat here as this is a dumb component.\n // It saves creating a variable and calling .render() on it.\n this.render();\n }\n\n render() {\n const control = document.createElement(\"div\");\n control.classList.add(\"u-sv3\");\n control.innerHTML = `\n ${\n this.showSwitcher\n ? ``\n : \"\"\n }\n

${this.title}

\n

${this.description}

`;\n this.container.appendChild(control);\n this.element = control.querySelector(`.js-${this.id}-switch`);\n }\n\n isChecked() {\n return this.element ? this.element.checked : true;\n }\n\n getId() {\n return this.id;\n }\n}\n","import { setCookie, getContent } from \"./utils.js\";\nimport { Control } from \"./control.js\";\nimport { controlsContent } from \"./content.js\";\n\nexport class Manager {\n constructor(container, destroyComponent) {\n this.container = container;\n this.controlsStore = [];\n this.destroyComponent = destroyComponent;\n }\n\n getManagerMarkup(language) {\n const managerContent = getContent(language).manager;\n const manager = `\n
\n
\n
\n

${managerContent.title}

\n
\n

${managerContent.body1}

\n

${managerContent.body2}

\n

${managerContent.body3}

\n

${managerContent.body4}

\n

\n

${managerContent.acceptAllHelp}

\n
\n
\n \n
\n
`;\n\n return manager;\n }\n\n render(language) {\n this.container.innerHTML = this.getManagerMarkup(language);\n const controlsContainer = this.container.querySelector(\".controls\");\n controlsContent.forEach((controlDetails) => {\n const control = new Control(controlDetails, controlsContainer, language);\n this.controlsStore.push(control);\n });\n this.initaliseListeners();\n }\n\n initaliseListeners() {\n this.container.querySelector(\".js-close\").addEventListener(\"click\", () => {\n setCookie(\"all\");\n this.destroyComponent();\n });\n\n this.container\n .querySelector(\".js-save-preferences\")\n .addEventListener(\"click\", () => {\n this.savePreferences();\n this.destroyComponent();\n });\n }\n\n savePreferences() {\n const checkedControls = this.controlsStore.filter((control) =>\n control.isChecked()\n );\n\n if (this.controlsStore.length === checkedControls.length) {\n setCookie(\"all\");\n } else {\n this.controlsStore.forEach((control) => {\n if (control.isChecked()) {\n setCookie(control.getId());\n }\n });\n }\n }\n}\n","import { Notification } from './notification.js';\nimport { Manager } from './manager.js';\nimport { preferenceNotSelected, hideSpecified } from './utils.js';\n\nexport const cookiePolicy = (callback = null) => {\n let cookiePolicyContainer = null;\n let language = document.documentElement.lang;\n\n const renderNotification = function (e) {\n if (e) {\n e.preventDefault();\n }\n\n if (cookiePolicyContainer === null) {\n cookiePolicyContainer = document.createElement('dialog');\n cookiePolicyContainer.classList.add('cookie-policy');\n cookiePolicyContainer.setAttribute('open', true);\n document.body.appendChild(cookiePolicyContainer);\n const notifiation = new Notification(\n cookiePolicyContainer,\n renderManager,\n close\n );\n notifiation.render(language);\n document.getElementById('cookie-policy-button-accept').focus();\n }\n };\n\n const renderManager = function () {\n const manager = new Manager(cookiePolicyContainer, close);\n manager.render(language);\n };\n\n const close = function () {\n if (typeof callback === 'function') {\n callback();\n }\n document.body.removeChild(cookiePolicyContainer);\n cookiePolicyContainer = null;\n };\n\n const init = function () {\n const revokeButton = document.querySelector('.js-revoke-cookie-manager');\n if (revokeButton) {\n revokeButton.addEventListener('click', renderNotification);\n }\n\n if (preferenceNotSelected() && !hideSpecified()) {\n renderNotification();\n }\n };\n\n document.addEventListener('DOMContentLoaded', init, false);\n};\n"],"names":["controlsContent","id","showSwitcher","content","default","title","description","zh","ja","notification","body1","body2","body3","buttonAccept","buttonManage","manager","body4","acceptAll","acceptAllHelp","SavePreferences","setCookie","value","d","Date","setTime","getTime","expires","toUTCString","document","cookie","enabledTracking","pushPageview","preferenceNotSelected","cookieValue","splitArray","split","currentCookieValue","i","length","charAt","substring","indexOf","getCookie","hideSpecified","URLSearchParams","window","location","search","get","getContent","language","getControlsContent","details","dataLayer","push","event","selectedPreference","Notification","container","renderManager","destroyComponent","notificationContent","innerHTML","this","getNotificationMarkup","initaliseListeners","querySelector","addEventListener","e","_this","Control","element","render","control","createElement","classList","add","appendChild","checked","Manager","controlsStore","managerContent","getManagerMarkup","controlsContainer","forEach","controlDetails","_this2","savePreferences","checkedControls","filter","isChecked","getId","callback","cookiePolicyContainer","documentElement","lang","renderNotification","preventDefault","setAttribute","body","close","getElementById","focus","removeChild","init","revokeButton"],"mappings":"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"}