{ "version": 3, "sources": ["../node_modules/@helb/script-url/index.js", "../src/config.js", "../src/log.js", "../src/language.js", "../src/index.js", "../src/cookiebar.js"], "sourcesContent": ["const isIE = () => navigator.appName === 'Microsoft Internet Explorer'\n || !!(navigator.userAgent.match(/Trident/)\n || navigator.userAgent.match(/rv:11/));\n\nconst scriptUrl = () => {\n if (isIE()) { // IE\n try {\n throw new Error();\n } catch (e) {\n return /[@(](.*\\.js)/.exec(e.stack.split('\\n')[1])[1];\n }\n } else {\n return new Error().fileName // Firefox\n || /[@(](.*\\.js)/.exec(new Error().stack.split('\\n')[1])[1]; // Chrome, Edge, \u2026\n }\n};\n\nexport default scriptUrl;\n", "const baseClass = \"cznic-cookiebar\";\n\nexport default {\n languages: {\n cs: {\n jump: \"P\u0159esko\u010Dit na obsah\",\n text: \"Webov\u00E9 str\u00E1nky sdru\u017Een\u00ED CZ.NIC pou\u017E\u00EDvaj\u00ED pro n\u011Bkter\u00E9 sv\u00E9 funkce soubory cookies ulo\u017Een\u00E9 ve va\u0161em prohl\u00ED\u017Ee\u010Di. Chcete povolit ukl\u00E1d\u00E1n\u00ED a zpracov\u00E1n\u00ED i jin\u00FDch ne\u017E nezbytn\u00FDch informac\u00ED (nap\u0159. pro m\u011B\u0159en\u00ED n\u00E1v\u0161t\u011Bvnosti, p\u0159izp\u016Fsoben\u00ED str\u00E1nky, marketingov\u00E9 informace)?\",\n buttonYes: \"Ano\",\n buttonNo: \"Ne\",\n linkMore: \"V\u00EDce informac\u00ED\",\n newTab: \"Odkaz se otev\u0159e v nov\u00E9m okn\u011B nebo z\u00E1lo\u017Ece prohl\u00ED\u017Ee\u010De\",\n },\n en: {\n jump: \"Jump to content\",\n text: \"The CZ.NIC website uses cookies stored in your browser for some of its functions. Do you want to allow the storage and processing of non-essential information (e.g. for traffic measurement, site customization, marketing information)?\",\n buttonYes: \"Yes\",\n buttonNo: \"No\",\n linkMore: \"More info\",\n newTab: \"Link will open in a new browser window or tab\",\n },\n },\n moreInfoUrl: \"https://nic.cz/cookies\",\n fallbackLanguage: \"en\",\n baseClass,\n changeYoutubeUrls: true,\n disableMatomoCookies: true,\n disableGtagCookies: true,\n defaultConsent: undefined,\n consentCookieExpire: 365 * 5,\n removeCookies: true,\n preservedCookieNames: [\n `${baseClass}-consent`,\n \"csrftoken\",\n \"sessionid\",\n \"mojeidsession\",\n \"auth_method\",\n \"identifier\"\n ],\n};\n", "/* global Raven */\n\nconst defaultLevel = \"error\";\nconst levels = [\"info\", \"warning\", \"error\"];\n\nexport default (e, msgLevel) => {\n const level = levels.includes(msgLevel) ? msgLevel : defaultLevel;\n return typeof Raven === \"object\" && Raven.isSetup()\n ? Raven.captureException(e, { tags: { widget: \"omnibar-ng\" }, level })\n : console[level.replace(\"ing\", \"\")](\n `[cookiebar] ${e}`\n ); /* warning -> console.warn */ // eslint-disable-line no-console\n};\n", "const isLanguageSupported = (code, config) => {\n const supportedLanguages = Object.keys(config.languages);\n return supportedLanguages.includes(code);\n};\n\nconst browserLanguage = (config) => {\n const documentLang = document.documentElement.lang;\n const browserLang =\n window.navigator.language || window.navigator.userLanguage;\n\n if (isLanguageSupported(documentLang, config)) {\n return documentLang;\n }\n\n if (isLanguageSupported(browserLang, config)) {\n return browserLang;\n }\n\n return config.fallbackLanguage;\n};\n\nexport { browserLanguage, isLanguageSupported };\n", "import scriptUrl from \"@helb/script-url\";\nimport config from \"./config\";\nimport log from \"./log\";\nimport { browserLanguage, isLanguageSupported } from \"./language\";\n\nexport default class CookieBar {\n constructor(params) {\n const validatedParams = {};\n\n if (typeof params === \"object\") {\n if (typeof params.language !== \"undefined\" && isLanguageSupported(params.language, config)) {\n validatedParams.language = params.language;\n }\n\n if (typeof params.automount === \"boolean\") {\n validatedParams.automount = params.automount;\n }\n\n if (typeof params.strings === \"object\") {\n validatedParams.strings = {\n ...config.languages[config.fallbackLanguage],\n ...params.strings,\n };\n }\n\n if (typeof params.position !== \"undefined\" && [\"top\", \"bottom\"].includes(params.position)) {\n validatedParams.position = params.position;\n }\n\n if (typeof params.changeYoutubeUrls === \"boolean\") {\n validatedParams.changeYoutubeUrls = params.changeYoutubeUrls;\n }\n\n if (typeof params.disableMatomoCookies === \"boolean\") {\n validatedParams.disableMatomoCookies = params.disableMatomoCookies;\n }\n\n if (typeof params.disableGtagCookies === \"boolean\") {\n validatedParams.disableGtagCookies = params.disableGtagCookies;\n }\n\n if ([\"undefined\", \"boolean\"].includes(typeof params.defaultConsent)) {\n validatedParams.defaultConsent = params.defaultConsent;\n }\n\n if (typeof params.removeCookies === \"boolean\") {\n validatedParams.removeCookies = params.removeCookies;\n }\n\n if (typeof params.consentCookieExpire === \"number\") {\n validatedParams.consentCookieExpire = parseInt(params.consentCookieExpire);\n }\n\n if (Array.isArray(params.preservedCookieNames)) {\n validatedParams.preservedCookieNames = [...params.preservedCookieNames.filter((item) => typeof(item) === 'string'), `${config.baseClass}-consent`];\n validatedParams.preservedCookiePatterns = [...params.preservedCookieNames.filter((item) => typeof(item) !== 'string')];\n }\n\n if (typeof params.moreInfoUrl === \"string\") {\n validatedParams.moreInfoUrl = params.moreInfoUrl;\n }\n\n if (typeof params.moreInfoUrlTarget === \"string\") {\n validatedParams.moreInfoUrlTarget = params.moreInfoUrlTarget;\n }\n }\n\n const defaultLanguage = browserLanguage(config);\n\n const defaults = {\n language: defaultLanguage,\n automount: true,\n position: \"bottom\",\n moreInfoUrl: config.moreInfoUrl,\n moreInfoUrlTarget: \"_blank\",\n changeYoutubeUrls: config.changeYoutubeUrls,\n disableMatomoCookies: config.disableMatomoCookies,\n disableGtagCookies: config.disableGtagCookies,\n defaultConsent: config.defaultConsent,\n removeCookies: config.removeCookies,\n consentCookieExpire: config.consentCookieExpire,\n preservedCookieNames: config.preservedCookieNames,\n preservedCookiePatterns: config.preservedCookiePatterns,\n };\n\n this.options = { ...defaults, ...validatedParams };\n\n if (!Object.keys(this.options).includes(\"strings\")) {\n this.options.strings = config.languages[this.options.language];\n }\n\n this.removedCookies = [];\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.setAttribute(\"role\", \"complementary\");\n this.rootElement.id = config.baseClass;\n this.rootElement.className = `${config.baseClass}-root`;\n this.rootElement.classList.add(`${config.baseClass}-root-position-${this.options.position}`);\n\n let consentCookie = this.getConsentCookie();\n\n if (consentCookie === undefined) {\n consentCookie = this.options.defaultConsent;\n }\n\n if (consentCookie === undefined) {\n if (this.options.automount) {\n if (document.body === null) {\n document.addEventListener(\"DOMContentLoaded\", () => this.mount());\n } else {\n this.mount();\n }\n }\n }\n\n if (consentCookie !== true) {\n if (this.options.changeYoutubeUrls || this.options.disableMatomoCookies) {\n this.observer = new MutationObserver((mutation) => {\n mutation.forEach((mutationRecord) => {\n mutationRecord.addedNodes.forEach((addedNode) => {\n if (this.options.changeYoutubeUrls && addedNode.tagName === \"IFRAME\") {\n this.#changeYoutubeUrl(addedNode);\n }\n\n const matomoPattern = /_paq.push\\(\\[['\"]trackPageView['\"]\\]\\)/;\n if (\n this.options.disableMatomoCookies &&\n addedNode.tagName === \"SCRIPT\" &&\n addedNode.text.match(matomoPattern)\n ) {\n addedNode.text = addedNode.text.replace(\n matomoPattern,\n \"_paq.push(['disableCookies']); _paq.push(['trackPageView'])\"\n );\n }\n\n const gtagPattern = /gtag\\(['\"]js['\"], new Date\\(\\)\\)/;\n\n if (\n this.options.disableGtagCookies &&\n addedNode.tagName === \"SCRIPT\" &&\n addedNode.text.match(gtagPattern)\n ) {\n addedNode.text = addedNode.text.replace(\n gtagPattern,\n \"gtag('consent','default',{'ad_storage':'denied','analytics_storage':'denied','ads_data_redaction':'true'});gtag('js',new Date())\"\n );\n }\n });\n });\n });\n\n this.observer.observe(document, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n\n window.addEventListener(\"load\", () => {\n this.observer.disconnect();\n });\n }\n\n if (this.options.removeCookies) {\n window.addEventListener(\"load\", () => {\n this.#removeCookies();\n });\n }\n }\n }\n\n getConsentCookie() {\n const consentCookie = document.cookie\n .split(\";\")\n .filter((kv) => kv.match(new RegExp(`^\\\\s*${config.baseClass}-consent=`)))\n .map((kv) => kv.replace(/.*=/, \"\"));\n\n if (consentCookie.length < 1) {\n return undefined;\n }\n\n return consentCookie[0] === \"true\";\n }\n\n #setConsentCookie(value) {\n const day = 24 * 60 * 60 * 1000;\n const expires = new Date(Date.now() + day * this.options.consentCookieExpire);\n document.cookie = `${config.baseClass}-consent=${value.toString()}; Expires=${expires.toUTCString()}; Secure`;\n }\n\n mount() {\n if (document.body.contains(this.rootElement)) {\n return;\n }\n\n this.rootElement.innerHTML = \"\";\n this.#render(this.options.language);\n\n // Example: \n const nodeScript = document.getElementById(\"cznic-cookiebar-src\")\n const cssUrl = nodeScript && nodeScript.dataset.css ? nodeScript.dataset.css : scriptUrl().replace(/\\/[^/]+\\.js$/, \"/cookiebar.css\");\n const styleLink = document.createElement(\"link\");\n styleLink.id = \"cookiebar\";\n styleLink.rel = \"stylesheet\";\n styleLink.href = cssUrl;\n styleLink.addEventListener(\"error\", () => log(`Failed to load stylesheet from '${cssUrl}'.`));\n styleLink.addEventListener(\"load\", () => {\n if (this.options.position === \"top\") {\n document.body.insertBefore(this.rootElement, document.querySelector(\"body > *\"));\n } else if (this.options.position === \"bottom\") {\n document.body.appendChild(this.rootElement);\n }\n });\n document.head.appendChild(styleLink);\n }\n\n unmount() {\n this.#removeCss();\n this.rootElement.remove();\n }\n\n #removeCss() {\n const styleLink = document.head.querySelector(\"link#cookiebar\");\n document.head.removeChild(styleLink);\n }\n\n #changeYoutubeUrl(iframe) {\n iframe.src = iframe.src.replace(\"youtube.com/embed\", \"youtube-nocookie.com/embed\");\n iframe.setAttribute(\"sandbox\", \"allow-scripts\");\n }\n\n #matchCookieName(cookieName) {\n if (!cookieName.length) {\n return false\n }\n const result = this.options.preservedCookieNames.includes(cookieName)\n if (result) {\n return result\n }\n for (let i=0; i < this.options.preservedCookiePatterns.length; i++) {\n if (this.options.preservedCookiePatterns[i].test(cookieName)) {\n return true\n }\n }\n return false\n }\n\n #removeCookies() {\n document.cookie\n .split(\";\")\n .map((kv) => kv.replace(/=.*/, \"\"))\n .filter((cookieName) => !this.#matchCookieName(cookieName.trim()))\n .forEach((cookieName) => {\n document.cookie = `${cookieName}=; Max-Age=-1;`;\n this.removedCookies.push(cookieName.trim());\n });\n }\n\n switchLanguage(newLangCode) {\n if (this.options.language !== newLangCode) {\n if (!isLanguageSupported(newLangCode, config)) {\n log(\n `Unsupported language \"${newLangCode}\", ` + `switching to fallback language \"${config.fallbackLanguage}\".`,\n \"warning\"\n );\n this.switchLanguage(config.fallbackLanguage);\n } else {\n this.rootElement.innerHTML = \"\";\n this.options.language = newLangCode;\n this.options.strings = config.languages[newLangCode];\n this.#render();\n }\n }\n }\n\n switchPosition(newPosition) {\n if ([\"top\", \"bottom\"].includes(newPosition) && newPosition !== this.options.position) {\n this.rootElement.classList.remove(\n `${config.baseClass}-root-position-top`,\n `${config.baseClass}-root-position-bottom`\n );\n this.options.position = newPosition;\n this.rootElement.classList.add(`${config.baseClass}-root-position-${newPosition}`);\n }\n }\n\n reopen() {\n this.mount();\n }\n\n #actionYes() {\n this.unmount();\n this.#setConsentCookie(true);\n }\n\n #actionNo() {\n this.#setConsentCookie(false);\n this.#removeCookies();\n Array.from(document.querySelectorAll(\"iframe[src*='youtube.com/embed']\")).forEach((iframe) =>\n this.#changeYoutubeUrl(iframe)\n );\n this.unmount();\n }\n\n #render() {\n if (this.options.position === \"top\") {\n const jumpLink = document.createElement(\"a\");\n jumpLink.id = `${config.baseClass}-jump`;\n jumpLink.className = `${config.baseClass}-jump`;\n jumpLink.setAttribute(\"aria-controls\", this.rootElement.id);\n jumpLink.innerText = this.options.strings.jump;\n jumpLink.tabIndex = -1;\n this.rootElement.appendChild(jumpLink);\n }\n\n const textContainer = document.createElement(\"div\");\n textContainer.innerText = this.options.strings.text;\n textContainer.className = `${config.baseClass}-text`;\n this.rootElement.appendChild(textContainer);\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.className = `${config.baseClass}-buttons`;\n\n const buttonYes = document.createElement(\"button\");\n buttonYes.className = `${config.baseClass}-button ${config.baseClass}-button-yes`;\n buttonYes.innerText = this.options.strings.buttonYes;\n buttonYes.addEventListener(\"click\", this.#actionYes.bind(this));\n buttonContainer.appendChild(buttonYes);\n\n const buttonNo = document.createElement(\"button\");\n buttonNo.className = `${config.baseClass}-button ${config.baseClass}-button-no`;\n buttonNo.innerText = this.options.strings.buttonNo;\n buttonNo.addEventListener(\"click\", this.#actionNo.bind(this));\n buttonContainer.appendChild(buttonNo);\n\n if (this.options.moreInfoUrl) {\n const linkMore = document.createElement(\"a\");\n linkMore.className = `${config.baseClass}-link-more`;\n linkMore.innerText = this.options.strings.linkMore;\n linkMore.href = this.options.moreInfoUrl;\n linkMore.title = this.options.strings.newTab;\n if (this.options.moreInfoUrlTarget) {\n linkMore.target = this.options.moreInfoUrlTarget;\n }\n buttonContainer.appendChild(linkMore);\n }\n\n this.rootElement.appendChild(buttonContainer);\n }\n}\n", "import CookieBar from \"./index\";\n\nwindow.nicWidgets = window.nicWidgets || {};\nwindow.nicWidgets.cookieBar = CookieBar;\n"], "mappings": "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", "names": [] }