{"version":3,"sources":["webpack:///./modules/Slider.ts","webpack:///./helpers/trackingHelpers.ts"],"names":["__webpack_require__","r","__webpack_exports__","_js_libs_tiny_slider_js__WEBPACK_IMPORTED_MODULE_0__","_helpers_helperFunctions__WEBPACK_IMPORTED_MODULE_1__","_helpers_trackingHelpers__WEBPACK_IMPORTED_MODULE_2__","TeaserSlider","element","_this","this","productItems","querySelectorAll","productItem","querySelector","isSampleSlider","classList","contains","teaserSliderParent","parentElement","productItemsLength","length","closest","Eucerin","initSlider","document","addEventListener","slider","destroy","preventBrowserDragAndDrop","setup","selector","Array","from","filter","node","dataset","moduleInitialized","forEach","prototype","mobileOptions","container","loop","mouseDrag","preventScrollOnTouch","speed","lazyload","lazyloadSelector","options","Object","assign","getDefaultOptions","isMobile","hasAttribute","addTouchHandlersOnSlider","samples","activeSample","indexOf","previousElementSibling","goTo","addSliderArrows","preventClickOnDrag","wasDraged","onDragEnd","onMouseUp","e","preventDefault","sliderTeaserImpression","dispatchEvent","CustomEvent","detail","target","removeEventListener","events","off","on","isInItem","eventActionPrevious","eventActionNext","sliderHeadline","swipeDirection","transitionEnd","sampleNavLogic","setAttribute","event","lastIdx","getInfo","indexCached","currentIdx","index","swipeDirectionPrevious","pageItem","innerHTML","product","productsArray","productArrayGA4","productData","productDataG4","id","getAttribute","name","list","brand","category","variant","position","productPriceElement","price","parseFloat","push","add","item_id","item_name","affiliation","coupon","discount","item_brand","item_category","item_category2","item_category3","item_category4","item_category5","item_list_id","item_list_name","item_variant","quantity","window","dataLayer","ecommerce","currencyCode","impressions","items","_clear","swipeAngle","responsive","640","edgePadding","900","d","trackFilter","addToCartProductTracking","changeProductQuantityTracking","removeFromCartProductTracking","trackSliderMovement","addToCartEventName","removeFromCartEventName","cartTrackingEvent","eventName","qty","btnType","eventData","actionField","products","type","remove","item","filterName","filterCategory","eventCategory","eventAction","eventLabel","eventNonInteraction","oldQty","newQty","Math","abs","undefined"],"mappings":"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","file":"./modules/Slider.1eef3da1.js","sourcesContent":["/// \r\n/// \r\nconst moduleSelector = '[data-module=\"Slider\"]';\r\n\r\nimport { tns } from '../../js/libs/tiny-slider.js'\r\nimport { getOptions } from '../helpers/helperFunctions';\r\nimport { trackSliderMovement } from '../helpers/trackingHelpers';\r\n\r\nexport default class TeaserSlider {\r\n slider;\r\n productItems;\r\n productItemsLength;\r\n teaserSliderParent: HTMLElement;\r\n productItem: HTMLElement;\r\n mediaSliderLength: HTMLElement;\r\n options;\r\n isSampleSlider;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new TeaserSlider(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement) {\r\n this.productItems = this.element.querySelectorAll(\".teaser\");\r\n this.productItem = this.element.querySelector(\".teaser\");\r\n this.isSampleSlider = this.element.classList.contains(\"product-samples\")\r\n if (this.productItem) this.teaserSliderParent = this.productItem.parentElement;\r\n\r\n this.productItemsLength = this.productItems.length;\r\n if ((this.element.closest(\".ingredient-slider\") || this.element.closest(\".media-slider\")) && !(Eucerin.isMobile) || this.isSampleSlider && this.productItemsLength < 3) {\r\n return\r\n }\r\n this.initSlider();\r\n document.addEventListener('Eucerin:deviceChanged', () => {\r\n this.slider.destroy();\r\n this.initSlider();\r\n });\r\n\r\n this.preventBrowserDragAndDrop()\r\n }\r\n\r\n private initSlider() {\r\n let mobileOptions: TinySliderSettings = {\r\n container: this.element.querySelector('.teaser-list') as HTMLElement,\r\n loop: false,\r\n mouseDrag: true,\r\n preventScrollOnTouch: 'auto',\r\n speed: 400,\r\n //autoWidth: document.dir === 'rtl' ? true : false,\r\n lazyload: true,\r\n //items: document.dir === 'rtl' ? 1.1 : null,\r\n lazyloadSelector: 'img',\r\n }\r\n\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n this.options.container = this.element.querySelector('.teaser-list') as HTMLElement;\r\n\r\n if (Eucerin.isMobile && this.productItemsLength == 1) {\r\n return false;\r\n }\r\n\r\n this.slider = tns((Eucerin.isMobile && this.element.hasAttribute('data-options') || !(Eucerin.isMobile)) ? this.options : mobileOptions);\r\n !(this.element.closest(\".gallery-slider\")) ? this.addTouchHandlersOnSlider('Homepage Teaser Previous', 'Homepage Teaser Next') : \"\";\r\n if (this.isSampleSlider) {\r\n const samples = Array.from(this.element.querySelectorAll(\".sample-teaser\"));\r\n const activeSample = this.element.querySelector(\".sample-teaser:last-of-type.active\") ? samples.indexOf(this.element.querySelector(\".sample-teaser.active\").previousElementSibling) : samples.indexOf(this.element.querySelector(\".sample-teaser.active\"));\r\n this.slider.goTo(activeSample);\r\n this.addSliderArrows()\r\n };\r\n }\r\n\r\n private preventClickOnDrag() {\r\n let wasDraged: boolean = false;\r\n const onDragEnd = () => {\r\n wasDraged = true;\r\n };\r\n const onMouseUp = (e: Event) => {\r\n if (wasDraged) {\r\n e.preventDefault();\r\n this.sliderTeaserImpression();\r\n } else {\r\n document.dispatchEvent(new CustomEvent(\"eucerin-tracking:slider:click\", { detail: { target: e.target as HTMLElement } }));\r\n };\r\n this.element.removeEventListener('mouseup', onMouseUp);\r\n this.slider.events.off('dragMove', onDragEnd);\r\n wasDraged = false;\r\n };\r\n\r\n this.slider.events.on('dragMove', onDragEnd);\r\n this.element.addEventListener('mouseup', onMouseUp);\r\n\r\n return this;\r\n }\r\n\r\n private preventBrowserDragAndDrop() {\r\n this.element.addEventListener('mousedown', (e) => {\r\n const isInItem = (e.target).closest('.tns-item:not(.tns-item--clickable)');\r\n this.preventClickOnDrag();\r\n\r\n if (isInItem) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n addTouchHandlersOnSlider(eventActionPrevious: string, eventActionNext: string, sliderHeadline?: string) {\r\n this.slider.events.on('touchEnd', (e) => { this.swipeDirection(this.slider, sliderHeadline) });\r\n this.slider.events.on('dragEnd', (e) => { this.swipeDirection(this.slider, sliderHeadline) });\r\n this.slider.events.on('transitionStart', (e) => { this.transitionEnd() });\r\n }\r\n\r\n transitionEnd() {\r\n this.element.querySelector(\".sample-teaser-list\") ? this.sampleNavLogic() : \"\";\r\n\r\n }\r\n sampleNavLogic() {\r\n const lastSampleElement = this.element.querySelector(\".sample-teaser:last-of-type\").classList.contains(\"tns-slide-active\");\r\n lastSampleElement ? this.element.querySelector(\"[data-controls='next']\").setAttribute(\"disabled\", \"\") : \"\";\r\n }\r\n swipeDirection(event: any, sliderHeadline: string) {\r\n event = event.getInfo();\r\n\r\n const lastIdx = event.indexCached,\r\n currentIdx = event.index;\r\n this.sliderTeaserImpression();\r\n if (currentIdx === lastIdx) {\r\n return;\r\n }\r\n\r\n if (currentIdx > lastIdx) {\r\n this.swipeDirectionPrevious('Swipe Next', sliderHeadline);\r\n } else {\r\n trackSliderMovement('Swipe Previous', sliderHeadline);\r\n }\r\n }\r\n\r\n swipeDirectionPrevious(eventActionPrevious, sliderHeadline: string) {\r\n trackSliderMovement(eventActionPrevious, sliderHeadline);\r\n }\r\n\r\n addSliderArrows() {\r\n const tnsContr = this.element.querySelectorAll('.tns-controls button');\r\n tnsContr.forEach((pageItem) => {\r\n pageItem.innerHTML += `\r\n`;\r\n })\r\n }\r\n\r\n private sliderTeaserImpression() {\r\n const product = Array.from(document.querySelectorAll(\".teaser.tns-slide-active:not(.product-show)\"));\r\n const productsArray = [];\r\n\r\n // GA4 List Product Tracking\r\n let productArrayGA4 = [];\r\n\r\n if (product.length > 0) {\r\n product.forEach((product, index) => {\r\n let productData: any = {}\r\n let productDataG4: any = {};\r\n productData.id = product.getAttribute('product-sku') ? product.getAttribute('product-sku') : product.getAttribute('data-product-item-id');\r\n productData.name = product.getAttribute(\"product-name\") ? product.getAttribute(\"product-name\") : 'null';\r\n productData.list = 'Products';\r\n productData.brand = 'Eucerin';\r\n productData.category = product.getAttribute(\"product-category\") ? product.getAttribute(\"product-category\") : 'null';\r\n productData.variant = product.getAttribute('product-variant') ? product.getAttribute('product-variant') : 'null';\r\n productData.position = Array.from(product.parentElement.querySelectorAll(`.teaser[data-product-item-id]`)).indexOf(product) + 1;\r\n const productPriceElement = product.querySelector('[product-price]');\r\n const price = parseFloat(productPriceElement && productPriceElement.getAttribute('product-price'))\r\n productData.price = price;\r\n productsArray.push(productData);\r\n\r\n product.classList.add('product-show');\r\n\r\n //GA4 Data collection\r\n productDataG4.item_id = productData.id;\r\n productDataG4.item_name = productData.name \r\n productDataG4.affiliation = product.getAttribute(\"product-affiliation\") ? product.getAttribute(\"product-affiliation\") : null;\r\n productDataG4.coupon = product.querySelector(\"[product-coupon]\") ? product.querySelector(\"[product-coupon]\").getAttribute(\"product-coupon\") : null;\r\n productDataG4.discount = product.getAttribute(\"product-discount\") ? product.getAttribute(\"product-discount\") : null;\r\n productDataG4.index = product.closest(\"[data-id]\") ? product.closest(\"[data-id]\").querySelectorAll(\".product-show\").length : null,\r\n productDataG4.item_brand = 'Eucerin';\r\n productDataG4.item_category = productData.category;\r\n productDataG4.item_category2 = product.getAttribute(\"product-category-2\") ? product.getAttribute(\"product-category-2\") : null; //ToDo\r\n productDataG4.item_category3 = product.getAttribute(\"product-category-3\") ? product.getAttribute(\"product-category-3\") : null; //ToDo\r\n productDataG4.item_category4 = product.getAttribute(\"product-category-4\") ? product.getAttribute(\"product-category-4\") : null; //ToDo\r\n productDataG4.item_category5 = product.getAttribute(\"product-category-5\") ? product.getAttribute(\"product-category-5\") : null; //ToDo\r\n productDataG4.item_list_id = product.closest(\"[data-id]\") ? product.closest(\"[data-id]\").getAttribute(\"data-id\") : null; //ToDo\r\n productDataG4.item_list_name = product.closest('[product-list]') ? product.closest('[product-list]').getAttribute('product-list') : null;\r\n productDataG4.item_variant = product.getAttribute('product-variant') ? product.getAttribute('product-variant') : null;\r\n \r\n productDataG4.price = price;\r\n productDataG4.quantity = 1; //ToDO\r\n \r\n productArrayGA4.push(productDataG4);\r\n })\r\n\r\n window.dataLayer.push({\r\n event: 'impressions',\r\n ecommerce: {\r\n currencyCode: 'EUR',\r\n impressions: productsArray\r\n }\r\n });\r\n window.dataLayer.push({\r\n event: \"view_item_list\",\r\n ecommerce: {\r\n item_list_id: this.element.closest(\"[product-list]\").getAttribute(\"data-id\"), //ToDo\r\n item_list_name: this.element.closest(\"[product-list]\").getAttribute(\"product-list\"),\r\n items: productArrayGA4\r\n },\r\n _clear: true\r\n })\r\n }\r\n }\r\n\r\n getDefaultOptions() {\r\n return {\r\n container: this.element.querySelector('.teaser-list') as HTMLElement,\r\n loop: false,\r\n mouseDrag: true,\r\n swipeAngle: false,\r\n speed: 400,\r\n lazyload: true,\r\n lazyloadSelector: 'img',\r\n preventScrollOnTouch: 'auto',\r\n responsive: {\r\n 640: {\r\n items: 3,\r\n edgePadding: 10\r\n },\r\n 900: {\r\n items: 4,\r\n edgePadding: 0\r\n },\r\n }\r\n }\r\n }\r\n}\r\n\r\nnew TeaserSlider.setup();","const addToCartEventName = 'addToCart';\r\nconst removeFromCartEventName = 'removeFromCart';\r\n\r\nfunction cartTrackingEvent(element, eventName, qty, btnType) {\r\n const productPriceElement = element.querySelector('[product-price]');\r\n const price = parseFloat(productPriceElement && productPriceElement.getAttribute('product-price'))\r\n\r\n const category = element.getAttribute('product-category');\r\n\r\n const eventData = {\r\n actionField: { list: category },\r\n products: [{\r\n id: element.getAttribute('product-sku'),\r\n name: element.getAttribute('product-name'),\r\n brand: 'Eucerin',\r\n category: category,\r\n variant: element.getAttribute('product-variant'),\r\n price: price,\r\n quantity: qty\r\n }],\r\n type: btnType\r\n };\r\n\r\n const event: { event; ecommerce } = {\r\n event: eventName,\r\n ecommerce: {\r\n currencyCode: element.getAttribute('product-currency'),\r\n }\r\n };\r\n\r\n if (eventName === addToCartEventName)\r\n event.ecommerce.add = eventData;\r\n else if (eventName === removeFromCartEventName)\r\n event.ecommerce.remove = eventData;\r\n\r\n window.dataLayer.push(event);\r\n}\r\n\r\nexport function trackFilter(item) {\r\n const element = item as HTMLElement;\r\n const filterName = element.getAttribute('data-value-name');\r\n const filterCategory = element.closest('[data-filter-name]').getAttribute('data-filter-name');\r\n\r\n if (window.dataLayer) {\r\n window.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: 'Filter',\r\n eventAction: filterCategory,\r\n eventLabel: filterName,\r\n eventNonInteraction: false\r\n });\r\n }\r\n\r\n}\r\n\r\nexport function addToCartProductTracking(element, qty = 1) {\r\n cartTrackingEvent(element, addToCartEventName, qty, (element.closest(\".teaser\")) ? 'Teaser' : 'Button');\r\n}\r\n\r\nexport function changeProductQuantityTracking(element, oldQty, newQty) {\r\n const eventName = newQty - oldQty === Math.abs(newQty - oldQty) ? addToCartEventName : removeFromCartEventName;\r\n cartTrackingEvent(element, eventName, Math.abs(newQty - oldQty), 'Dropdown');\r\n}\r\n\r\nexport function removeFromCartProductTracking(element, qty) {\r\n cartTrackingEvent(element, removeFromCartEventName, qty, 'Button');\r\n}\r\n\r\nexport function trackSliderMovement(eventAction: string, eventLabel: string = '') {\r\n window.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: 'Teaser',\r\n eventAction: eventAction,\r\n eventLabel: eventLabel.length > 0 ? eventLabel : undefined,\r\n eventNonInteraction: false\r\n });\r\n}"],"sourceRoot":""}