{"version":3,"file":"regionAlert-regionAlert.chunk.e1b59e4e4a79be958a9d.js","mappings":"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","sources":["webpack:///./html/wp-content/themes/ls/src/js/main/components/regionAlert/regionAlert.js"],"sourcesContent":["/*\nXXX_JSREFACTOR_XXX\ntodo @JSREFACTOR\n create e2e test for:\n - if the region alert is visible and there is no cookie set\n - if the region alert is NOT visible when there is ?rac=true in the url\n - if the cookie is set when the modal is closed\n*/\nimport { CookieMonster } from 'root/utils/cookies/cookieMonster';\nimport { CORS } from 'root/utils/cors/cors';\nimport { getParamValueFromUrl } from 'root/utils/URLParams/URLParams';\nimport { gtm } from 'root/utils/tracking/googleTagManagerDeprecated';\nimport { LoggingHandler } from 'root/utils/errorReporting/LoggingHandler';\nimport { debounce } from 'lodash';\n\nfunction regionAlertSpecs() {\n function getCookieName() {\n return '_ls_regionAlert';\n }\n function getCookieValue() {\n return true;\n }\n function getCookieExpirationDate() {\n return 182;\n }\n return {\n getCookieName,\n getCookieValue,\n getCookieExpirationDate,\n };\n}\n\nfunction createRegionAlert() {\n actionBasedOnCookie().setCookieOnRegionSelection();\n actionBasedOnCookie().createRegionAlertBasedOnCookie();\n}\n\nfunction actionBasedOnCookie() {\n const cm = new CookieMonster();\n const cookieName = regionAlertSpecs().getCookieName();\n const cookieValue = cm.getCookie(cookieName);\n const isCookieSet = cookieValue === true;\n const setCookie = () => {\n window.registerCookieComplianceCallback({\n callback: () => {\n return (\n !isCookieSet &&\n cm.setCookie(\n cookieName,\n regionAlertSpecs().getCookieValue(),\n regionAlertSpecs().getCookieExpirationDate()\n )\n );\n },\n isCallOptanonWrapper: true,\n });\n };\n const homepagePaths = ['/', '/ch/', '/ch-de/'];\n const isHome = homepagePaths.includes(window.location.pathname);\n const allowedLoginSlugVariationArray = [\n 'login',\n 'connexion',\n 'ch/login',\n 'ch-de/login',\n ];\n const insertSlugSlashes = slug => slug.replace(slug, `/${slug}/`);\n\n const isLogin = allowedLoginSlugVariationArray.some(\n slug => insertSlugSlashes(slug) === window.location.pathname\n );\n\n const isAllowedURL = isHome || isLogin;\n\n const setCookieOnRegionSelection = () => {\n if (getParamValueFromUrl('rac')) setCookie();\n };\n const createRegionAlertBasedOnCookie = () =>\n !isAllowedURL || isCookieSet\n ? null\n : CORS.xdr(\n '/rest/info/region-alert',\n 'POST',\n '',\n successCallback,\n errorCallback\n );\n\n return {\n setCookieOnRegionSelection,\n createRegionAlertBasedOnCookie,\n setCookie,\n };\n}\nfunction successCallback(data) {\n if (typeof data !== 'string' && data.length === 0) {\n return null;\n }\n createAlertMarkup(data);\n const regionAlert = document.querySelector('.js--regionalert');\n if (regionAlert) {\n const regionAlertModal = new RegionAlert(\n regionAlert,\n actionBasedOnCookie,\n window.location.href\n );\n regionAlertModal.init();\n }\n}\nfunction errorCallback(err) {\n LoggingHandler().logError(err, {\n searchTerm: 'region-alert-post-request-error',\n fileName: 'regionAlert.js',\n });\n}\nfunction createAlertMarkup(data) {\n const d = document.createElement('div');\n d.innerHTML = data;\n document.body.insertBefore(d, document.body.firstChild);\n}\nfunction RegionAlert(alertModal, cookie, location) {\n this.alertModal = alertModal;\n this.cookie = cookie;\n this.cookieName = regionAlertSpecs().getCookieName();\n this.location = location;\n this.openRegionClass = 'js--open-regions';\n this.modalFlipText = alertModal.querySelector('.js--regionAlert-flipText');\n this.modalFlipLink = alertModal.querySelector('.js--regionAlert-flipLink');\n this.modalClose = alertModal.querySelector('.js--regionAlert-close');\n this.modalOverlay = alertModal.querySelector('.modal-region__overlay');\n this.boxInitialHeight = alertModal.querySelector('.modal-region__box').clientHeight;\n this.boxContainer = alertModal.querySelector('.modal-region__box-container');\n this.boxContainerInitialHeight = this.boxContainer.clientHeight;\n this.boxRegions = alertModal.querySelector('.modal-region__box-regions');\n this.boxRecommend = alertModal.querySelector('.modal-region__box-recommend');\n this.boxRecommendInitialHeight = this.boxRecommend.clientHeight;\n this.originalHeight = this.boxInitialHeight - this.boxContainerInitialHeight;\n this.containerDifference =\n this.boxContainerInitialHeight - this.boxRecommendInitialHeight;\n this.body = document.body;\n}\nRegionAlert.prototype = {\n isScrolledToBottom(el) {\n return el.offsetHeight + el.scrollTop >= el.scrollHeight;\n },\n\n getBoxHeightBasedOnScreenSize(el) {\n el.style.top = `${this.boxContainer.scrollTop}px`; //in case the container has been scrolled and the user went back to the boxRecommend screen\n if (el.scrollHeight + this.originalHeight > window.innerHeight) {\n this.boxContainer.classList.add('js-scrollOn');\n return {\n height: '50vh',\n overflowY: 'scroll',\n };\n }\n return {\n height: `${el.clientHeight + this.containerDifference}px`,\n overflowY: 'inherit',\n };\n },\n\n setHeightContainer(elHeight = {}) {\n return Object.assign(this.boxContainer.style, elHeight);\n },\n\n setScrollOnGraphic(e) {\n if (this.isScrolledToBottom(e.target)) {\n e.target.classList.remove('js-scrollOn');\n } else {\n if (!e.target.classList.contains('js-scrollOn')) {\n e.target.classList.add('js-scrollOn');\n }\n }\n },\n\n unblockBody() {\n if (this.body.style.position === 'fixed') this.body.style.position = 'relative';\n },\n\n otherRegionsOpen() {\n this.alertModal.classList.add(this.openRegionClass);\n this.setHeightContainer(this.getBoxHeightBasedOnScreenSize(this.boxRegions));\n this.boxContainer.addEventListener(\n 'scroll',\n debounce(this.setScrollOnGraphic.bind(this), 5)\n );\n this.boxContainer.addEventListener('touchmove', () => {\n if (this.body.style.position !== 'fixed') this.body.style.position = 'fixed';\n }); // hack for iphone to block body scrolling while scrolling the boxContainer\n this.modalFlipText.innerHTML = 'Go';\n this.modalFlipLink.innerHTML = 'back';\n this.boxRegions.style.visibility = 'visible';\n },\n\n otherRegionsClose() {\n this.alertModal.classList.remove(this.openRegionClass);\n this.setHeightContainer(this.getBoxHeightBasedOnScreenSize(this.boxRecommend));\n this.unblockBody();\n this.modalFlipText.innerHTML = 'Not your region? Please take a look at our';\n this.modalFlipLink.innerHTML = 'other regions';\n this.boxRegions.style.visibility = 'hidden';\n },\n\n otherRegionsToggle() {\n if (this.alertModal.classList.contains(this.openRegionClass)) {\n this.otherRegionsClose();\n } else {\n this.otherRegionsOpen();\n }\n },\n\n otherRegionsListener() {\n if (this.modalFlipText && this.modalFlipLink !== undefined) {\n this.modalFlipLink.addEventListener(\n 'click',\n function () {\n this.otherRegionsToggle();\n }.bind(this)\n );\n }\n },\n\n closeModal() {\n const modal = this.alertModal;\n modal.classList.add('modal-region--close');\n this.unblockBody();\n this.cookie().setCookie();\n setTimeout(function () {\n if (modal.parentNode) {\n modal.parentNode.removeChild(modal);\n }\n }, 360);\n gtm.regionAlert('').sendEvent('exit');\n },\n\n closeListener() {\n if (this.modalOverlay && this.modalOverlay !== undefined) {\n gtm.regionAlert('').sendEvent('shown');\n this.modalOverlay.addEventListener(\n 'click',\n function () {\n this.closeModal();\n }.bind(this)\n );\n }\n\n if (this.modalClose && this.modalClose !== undefined) {\n this.modalClose.addEventListener(\n 'click',\n function () {\n this.closeModal();\n }.bind(this)\n );\n }\n },\n flagClickListener() {\n const flags = this.alertModal.querySelectorAll('[data-flag]');\n\n flags.forEach(flag => {\n flag.addEventListener('click', event => {\n if (event.currentTarget.tagName === 'A') {\n let flagEventAction = event.currentTarget.dataset.flag;\n gtm.regionAlert(flagEventAction).sendEvent('changed');\n }\n });\n });\n },\n init() {\n this.otherRegionsListener();\n this.closeListener();\n this.flagClickListener();\n },\n};\n\nexport { createRegionAlert as default, regionAlertSpecs };\n"],"names":["regionAlertSpecs","getCookieName","getCookieValue","getCookieExpirationDate","createRegionAlert","actionBasedOnCookie","setCookieOnRegionSelection","createRegionAlertBasedOnCookie","cm","CookieMonster","cookieName","isCookieSet","getCookie","setCookie","window","registerCookieComplianceCallback","callback","isCallOptanonWrapper","isHome","includes","location","pathname","isLogin","some","slug","replace","concat","insertSlugSlashes","isAllowedURL","getParamValueFromUrl","CORS","successCallback","errorCallback","data","length","d","document","createElement","innerHTML","body","insertBefore","firstChild","createAlertMarkup","regionAlert","querySelector","RegionAlert","href","init","err","LoggingHandler","logError","searchTerm","fileName","alertModal","cookie","this","openRegionClass","modalFlipText","modalFlipLink","modalClose","modalOverlay","boxInitialHeight","clientHeight","boxContainer","boxContainerInitialHeight","boxRegions","boxRecommend","boxRecommendInitialHeight","originalHeight","containerDifference","prototype","isScrolledToBottom","el","offsetHeight","scrollTop","scrollHeight","getBoxHeightBasedOnScreenSize","style","top","innerHeight","classList","add","height","overflowY","setHeightContainer","elHeight","arguments","undefined","Object","assign","setScrollOnGraphic","e","target","remove","contains","unblockBody","position","otherRegionsOpen","_this","addEventListener","debounce","bind","visibility","otherRegionsClose","otherRegionsToggle","otherRegionsListener","closeModal","modal","setTimeout","parentNode","removeChild","gtm","sendEvent","closeListener","flagClickListener","querySelectorAll","forEach","flag","event","currentTarget","tagName","flagEventAction","dataset"],"sourceRoot":""}