{"version":3,"sources":["website/cookie-consent/cookie-consent-dialog.ts"],"names":["ToggleSwitch","getCookie","setCookie","determineTranslation","CookieConsentDialog","HTMLElement","constructor","super","this","translations","en","title","description","linkText","necessary","statistical","marketing","acceptSelected","acceptNecessary","acceptAll","no","useDefaultStyles","labels","readAttributes","attachShadow","mode","container","shadowRoot","buildDom","link","document","createElement","rel","href","import","meta","resolve","appendChild","dialog","id","setAttribute","addEventListener","e","preventDefault","textContent","linkCont","consentModeOptions","innerHTML","existingConsents","getConsentsFromCookies","necessaryCookies","necessaryCookiesText","classList","add","statisticalCookies","necessaryCookiesToggle","checked","disabled","onToggleChange","bind","statisticalCookiesText","marketingCookies","statisticalCookiesToggle","marketingCookiesText","buttons","marketingCookiesToggle","acceptSelectedButton","acceptSelectedClick","acceptAllButton","acceptAllClick","updateAcceptSelectedButtonText","await","setConsent","_","hasAttribute","getAttribute","toLowerCase","all","dispatchEvent","Event","bubbles","close","fetch","method","connectedCallback","showModal","focus","customElements","define"],"mappings":"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","file":"cookie-consent-dialog.js","sourcesContent":["import { ToggleSwitch } from \"../../../components-shared/elements/toggle-switch.js\";\nimport { getCookie, setCookie } from \"../../../components-shared/utils/cookie.js\";\nimport { determineTranslation } from \"../../utils/language.js\";\n\nexport class CookieConsentDialog extends HTMLElement {\n constructor() {\n super();\n\n this.labels = determineTranslation(this.translations);\n\n this.readAttributes();\n\n if (this.useDefaultStyles) {\n this.attachShadow({mode: \"open\"});\n this.container = this.shadowRoot;\n } else {\n this.container = this;\n }\n }\n\n /* #region Translations */\n private translations = {\n en: {\n title: \"You control your own data\",\n description: \"We want to give you a unique shopping experience, for that we use our own and third-party cookies and other technologies. Some of these are necessary for our web shop to work, others help you get a tailor-made experience. We also do marketing and profiling by exchanging customer information with third parties. By choosing \\\"Accept all\\\" you give consent to all purposes. You can also make selections below and choose \\\"Accept selected\\\".\",\n linkText: `You can read more about our use of cookies and processing of personal data.`,\n necessary: \"Necessary\",\n statistical: \"Statistical\",\n marketing: \"Marketing\",\n acceptSelected: \"Accept selected\",\n acceptNecessary: \"Accept necessary\",\n acceptAll: \"Accept all\"\n },\n no: {\n title: \"Du kontrollerer dine egne data\",\n description: \"Vi ønsker å gi deg en unik handleopplevelse, for å få til det bruker vi egne og tredjeparts informasjonskapsler/cookies og andre teknologier. Noen av disse er helt nødvendige for at nettbutikken vår skal fungere, andre bidrar til at du skal få en skreddersydd opplevelse. Vi gjør også markedsføring og profilering ved at kundeinformasjon utveksles med tredjeparter. Ved å velge \\\"Godta alle\\\" gir du samtykke til alle formål. Du kan også foreta avkrysningsvalg nedenfor og velge \\\"Godta valgte\\\".\",\n linkText: `Du kan lese mer om vår bruk av cookies og behandling av personopplysninger.`,\n necessary: \"Nødvendige\",\n statistical: \"Statistisk\",\n marketing: \"Markedsføring\",\n acceptSelected: \"Godta valgte\",\n acceptNecessary: \"Godta nødvendige\",\n acceptAll: \"Godta alle\"\n }\n };\n\n private labels: { [key: string]: string };\n /* #endregion */\n\n /* #region Markup */\n private buildDom() {\n // Styles\n if (this.useDefaultStyles) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = import.meta.resolve(\"./cookie-consent-dialog.css\");\n this.container.appendChild(link);\n }\n\n // Dialog\n this.dialog = document.createElement(\"dialog\");\n this.dialog.id = \"cookie-consent-dialog\";\n this.dialog.setAttribute(\"aria-labelledby\", \"cookie-consent-dialog-title\");\n this.dialog.setAttribute(\"aria-describedby\", \"cookie-consent-dialog-description\");\n this.container.appendChild(this.dialog);\n\n this.dialog.addEventListener('cancel', (e: Event) => {\n e.preventDefault();\n });\n\n // Title\n const title = document.createElement(\"h2\");\n title.id = \"cookie-consent-dialog-title\";\n title.textContent = this.labels.title;\n this.dialog.appendChild(title);\n\n // Description\n const description = document.createElement(\"p\");\n description.id = \"cookie-consent-dialog-description\";\n description.textContent = this.labels.description;\n this.dialog.appendChild(description);\n\n // Link\n const linkCont = document.createElement(\"p\");\n linkCont.id = \"cookie-consent-dialog-link\";\n linkCont.innerHTML = this.labels.linkText;\n this.dialog.appendChild(linkCont);\n\n // Consent mode options\n const consentModeOptions = document.createElement(\"div\");\n consentModeOptions.id = \"cookie-consent-dialog-consent-mode-options\";\n this.dialog.appendChild(consentModeOptions);\n\n const existingConsents = this.getConsentsFromCookies();\n\n // Necessary cookies\n const necessaryCookies = document.createElement(\"div\");\n necessaryCookies.id = \"cookie-consent-dialog-necessary-cookies\";\n necessaryCookies.classList.add(\"cookie-consent-dialog-mode-option\");\n consentModeOptions.appendChild(necessaryCookies);\n\n const necessaryCookiesText = document.createElement(\"span\");\n necessaryCookiesText.textContent = this.labels.necessary;\n necessaryCookies.appendChild(necessaryCookiesText);\n\n this.necessaryCookiesToggle = new ToggleSwitch(this.useDefaultStyles);\n this.necessaryCookiesToggle.checked = true;\n this.necessaryCookiesToggle.disabled = true;\n this.necessaryCookiesToggle.addEventListener(\"change\", this.onToggleChange.bind(this));\n necessaryCookies.appendChild(this.necessaryCookiesToggle);\n\n // Statistical cookies\n const statisticalCookies = document.createElement(\"div\");\n statisticalCookies.id = \"cookie-consent-dialog-statistical-cookies\";\n statisticalCookies.classList.add(\"cookie-consent-dialog-mode-option\");\n consentModeOptions.appendChild(statisticalCookies);\n\n const statisticalCookiesText = document.createElement(\"span\");\n statisticalCookiesText.textContent = this.labels.statistical;\n statisticalCookies.appendChild(statisticalCookiesText);\n\n this.statisticalCookiesToggle = new ToggleSwitch(this.useDefaultStyles);\n this.statisticalCookiesToggle.addEventListener(\"change\", this.onToggleChange.bind(this));\n statisticalCookies.appendChild(this.statisticalCookiesToggle);\n\n if (existingConsents.statistical) {\n this.statisticalCookiesToggle.checked = true;\n }\n\n // Marketing cookies\n const marketingCookies = document.createElement(\"div\");\n marketingCookies.id = \"cookie-consent-dialog-marketing-cookies\";\n marketingCookies.classList.add(\"cookie-consent-dialog-mode-option\");\n consentModeOptions.appendChild(marketingCookies);\n\n const marketingCookiesText = document.createElement(\"span\");\n marketingCookiesText.textContent = this.labels.marketing;\n marketingCookies.appendChild(marketingCookiesText);\n\n this.marketingCookiesToggle = new ToggleSwitch(this.useDefaultStyles);\n this.marketingCookiesToggle.addEventListener(\"change\", this.onToggleChange.bind(this));\n marketingCookies.appendChild(this.marketingCookiesToggle);\n\n if (existingConsents.marketing) {\n this.marketingCookiesToggle.checked = true;\n }\n\n // Buttons\n const buttons = document.createElement(\"div\");\n buttons.id = \"cookie-consent-dialog-buttons\";\n this.dialog.appendChild(buttons);\n\n // Accept selected\n this.acceptSelectedButton = document.createElement(\"button\");\n this.acceptSelectedButton.id = \"cookie-consent-dialog-accept-selected\";\n this.acceptSelectedButton.textContent = this.labels.acceptNecessary;\n this.acceptSelectedButton.addEventListener(\"click\", this.acceptSelectedClick.bind(this));\n buttons.appendChild(this.acceptSelectedButton);\n\n // Accept all\n this.acceptAllButton = document.createElement(\"button\");\n this.acceptAllButton.id = \"cookie-consent-dialog-accept-all\";\n this.acceptAllButton.textContent = this.labels.acceptAll;\n this.acceptAllButton.classList.add(\"primary\");\n this.acceptAllButton.addEventListener(\"click\", this.acceptAllClick.bind(this));\n buttons.appendChild(this.acceptAllButton);\n\n this.updateAcceptSelectedButtonText();\n }\n /* #endregion */\n\n /* #region Event handlers */\n private async acceptAllClick(e: MouseEvent) {\n e.preventDefault();\n await this.setConsent(true);\n }\n\n private async acceptSelectedClick(e: MouseEvent) {\n e.preventDefault();\n await this.setConsent(false);\n }\n\n private onToggleChange(_: Event) {\n this.updateAcceptSelectedButtonText();\n }\n /* #endregion */\n\n /* #region Private */\n // Flags\n private useDefaultStyles = true;\n\n // Elements\n private container: Node;\n private dialog: HTMLDialogElement;\n private acceptSelectedButton: HTMLButtonElement;\n private acceptAllButton: HTMLButtonElement;\n private necessaryCookiesToggle: ToggleSwitch;\n private statisticalCookiesToggle: ToggleSwitch;\n private marketingCookiesToggle: ToggleSwitch;\n\n private readAttributes() {\n this.useDefaultStyles = \n !this.hasAttribute(\"styles\") \n || this.getAttribute(\"styles\").toLowerCase() !== \"false\";\n }\n\n private updateAcceptSelectedButtonText() {\n if (this.statisticalCookiesToggle.checked || this.marketingCookiesToggle.checked) {\n this.acceptSelectedButton.textContent = this.labels.acceptSelected;\n } else {\n this.acceptSelectedButton.textContent = this.labels.acceptNecessary;\n }\n }\n\n private getConsentsFromCookies(): { statistical: boolean, marketing: boolean } {\n const statistical = getCookie(\"cookie-consent-statistical\") === \"1\";\n const marketing = getCookie(\"cookie-consent-marketing\") === \"1\";\n\n return { statistical, marketing };\n }\n\n private async setConsent(all: boolean) {\n const statistical = all || this.statisticalCookiesToggle.checked;\n const marketing = all || this.marketingCookiesToggle.checked;\n\n setCookie(\"cookie-consent-statistical\", statistical ? \"1\" : \"0\", 365);\n setCookie(\"cookie-consent-marketing\", marketing ? \"1\" : \"0\", 365);\n\n document.dispatchEvent(new Event(\"cookie-consent-updated\", {bubbles: true}));\n\n this.dialog.close();\n\n await fetch(\"/handlers/public/userdata.ashx?a=SetEndUserAgreementsAccepted\", { method: \"POST\" });\n }\n /* #endregion */\n\n connectedCallback() {\n this.buildDom();\n this.dialog.showModal();\n this.acceptAllButton.focus();\n }\n}\n\ncustomElements.define(\"cookie-consent-dialog\", CookieConsentDialog);"]}