{"version":3,"file":"shoppingcart.min.js","sources":["shoppingcart.ts"],"sourcesContent":["namespace eXpress.web.shoppingcart {\r\n\twindow.addEventListener('load', () => {\r\n\t\tconst pageLogComponent = components.main.createPageLog(html.querySelector<HTMLElement>(document, '.technical-top-message-log', true));\r\n\t\tlet popupConfirmDeleteIsOpen = false;\r\n\t\tlet gtmData: string | undefined = window.gtmData;\r\n\r\n\t\tconst loginComponent = eXpress.core.WatchLogin();\r\n\t\tloginComponent.start();\r\n\r\n\t\tconst refreshMiniBasket = () => {\r\n\t\t\treturn actions();\r\n\t\t};\r\n\r\n\t\tconst changePromoCode = (changePromoCode: string) => {\r\n\t\t\treturn actions(changePromoCode);\r\n\t\t};\r\n\r\n\t\tconst deleteCartProduct = (id: string) => {\r\n\t\t\treturn actions(undefined, id);\r\n\t\t};\r\n\r\n\t\tconst actions = (changePromoCode?: string, deleteCartItemId?: string, updateQuantityCartItemId?: string, updateQuantity?: number) => {\r\n\t\t\treturn $.ajax({\r\n\t\t\t\turl: \"/ajaxxhr/Cart/CartUxActions\",\r\n\t\t\t\ttype: \"POST\",\r\n\t\t\t\tcache: false,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tchangePromoCode,\r\n\t\t\t\t\tdeleteCartItemId,\r\n\t\t\t\t\tupdateQuantityCartItemId,\r\n\t\t\t\t\tupdateQuantity\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t\t.then(res => {\r\n\t\t\t\t\tconst result = res as eXpress.components.checkout.ICartUxActionResult;\r\n\r\n\t\t\t\t\tif (result.RestartNeeded) {\r\n\t\t\t\t\t\tdocument.location.href = \"?restart=true\";\r\n\t\t\t\t\t\treturn $.Deferred().reject(result).promise();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (res.ConfirmationMessage) {\r\n\t\t\t\t\t\t\tpageLogComponent.updateMessageAndStyle(eXpress.components.main.PageLogStyle.Success, res.ConfirmationMessage);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (pageLogComponent) pageLogComponent.hide();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tconst nextButtons = html.querySelectorAll<HTMLElement>(document, \".technical-checkout-step-confirm-button\");\r\n\t\t\t\t\t\tif (res.InvalidMinimumMessage && !res.ConfirmationMessage) {\r\n\t\t\t\t\t\t\tnextButtons.forEach(nextButton => nextButton.dataset['productminimum'] = res.InvalidMinimumMessage);\r\n\t\t\t\t\t\t\tpageLogComponent.updateMessageAndStyle(components.main.PageLogStyle.Error, res.InvalidMinimumMessage);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (res.InvalidMaximumMessage && !res.ConfirmationMessage) {\r\n\t\t\t\t\t\t\tnextButtons.forEach(nextButton => nextButton.dataset['productmaximum'] = res.InvalidMaximumMessage);\r\n\t\t\t\t\t\t\tpageLogComponent.updateMessageAndStyle(components.main.PageLogStyle.Error, res.InvalidMaximumMessage);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!res.InvalidMinimumMessage)\r\n\t\t\t\t\t\t\tnextButtons.forEach(nextButton => nextButton.removeAttribute(\"data-productminimum\"));\r\n\r\n\t\t\t\t\t\tif (!res.InvalidMaximumMessage)\r\n\t\t\t\t\t\t\tnextButtons.forEach(nextButton => nextButton.removeAttribute(\"data-productmaximum\"));\r\n\r\n\t\t\t\t\t\tgtmData = result.GtmData;\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t};\r\n\r\n\t\tconst sliderComponents: { key: string, slider: components.main.ICustomSlider }[] = [];\r\n\t\tconst previewPopup = (cartItemId: string, editUrl: string) => {\r\n\t\t\tlet dialog: core.StyleguideViewPopup;\r\n\r\n\t\t\tconst dialogId = `preview-${cartItemId}`;\r\n\t\t\tutils.showLoadingDialog(eXpress.core.StyleguideViewPopup.createDialogAsync(\r\n\t\t\t\t{\r\n\t\t\t\t\tview: \"StyleGuidePreviewDialog\",\r\n\t\t\t\t\tdialogId: dialogId,\r\n\t\t\t\t\tforceRefresh: false\r\n\t\t\t\t}, {\r\n\t\t\t\tcartItemId: cartItemId,\r\n\t\t\t\teditUrl: editUrl\r\n\t\t\t})\r\n\t\t\t\t.then($popup => {\r\n\t\t\t\t\tif (!$popup[0]) {\r\n\t\t\t\t\t\t// error server side => restart the cart\r\n\t\t\t\t\t\tdocument.location.href = \"?restart=true\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdialog = new core.StyleguideViewPopup($popup, {\r\n\t\t\t\t\t\tcloseEvent: () => {\r\n\t\t\t\t\t\t\t// reset slider to the first item\r\n\t\t\t\t\t\t\tconst customSliderComponent = sliderComponents.find(x => x.key === dialogId);\r\n\t\t\t\t\t\t\tcustomSliderComponent && customSliderComponent.slider.JumpIntoView(customSliderComponent.slider.Settings.sliderElements[0]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tconst slider = html.querySelector<HTMLElement>($popup[0], '.technical-slider', false);\r\n\r\n\t\t\t\t\tif (!slider) {\r\n\t\t\t\t\t\t// slider already initialized && events binded\r\n\t\t\t\t\t\tdialog.openAsync();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst sliderElements: eXpress.components.main.ICustomPhotoSliderItem[] = [];\r\n\t\t\t\t\tfor (let z = 0, l = slider.children.length; z < l; z++)\r\n\t\t\t\t\t\tsliderElements.push({ template: slider.children[z] as HTMLElement });\r\n\r\n\t\t\t\t\tconst sliderSettings = {\r\n\t\t\t\t\t\tsliderElements: sliderElements,\r\n\t\t\t\t\t\tsliderContainerSettings: {\r\n\t\t\t\t\t\t\textraSliderClass: 'm-carrousel__slider',\r\n\t\t\t\t\t\t\tcssWhenButtonsBothOnMax: 'u-hide',\r\n\t\t\t\t\t\t\telementsContainerSettings: {\r\n\t\t\t\t\t\t\t\textraSliderClass: 'm-carrousel__slider-elements',\r\n\t\t\t\t\t\t\t\tslideClicked: () => { return; }\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tnextButton: {\r\n\t\t\t\t\t\t\t\tcss: 'a-button a-button--slider-button m-carrousel__button--right m-carrousel__button--large icon-arrow-right',\r\n\t\t\t\t\t\t\t\tcssWhenOnMax: 'a-button--disabled',\r\n\t\t\t\t\t\t\t\tonClick: () => { return; }\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tpreviousButton: {\r\n\t\t\t\t\t\t\t\tcss: 'a-button a-button--slider-button m-carrousel__button--left m-carrousel__button--large icon-arrow-left',\r\n\t\t\t\t\t\t\t\tcssWhenOnMax: 'a-button--disabled',\r\n\t\t\t\t\t\t\t\tonClick: () => { return; }\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowHalfSlides: false,\r\n\t\t\t\t\t\treplaceWithElement: true,\r\n\t\t\t\t\t\tenableEternalSliding: true,\r\n\t\t\t\t\t\tresize1SlideToFullWidth: true,\r\n\t\t\t\t\t\teternalSlidingMode: eXpress.components.main.EternalSlidingMode.Infinite,\r\n\t\t\t\t\t\ttranslateForMovement: true,\r\n\r\n\t\t\t\t\t\tInitializedEvent: (settings, sliderEl) => {\r\n\t\t\t\t\t\t\tsliderEl.classList.add('m-carrousel__slider--initialized');\r\n\t\t\t\t\t\t\t// find all preview images and remove the skeleton from the parent\r\n\t\t\t\t\t\t\tif (sliderEl) {\r\n\t\t\t\t\t\t\t\tconst previewImages = html.querySelectorAll<HTMLImageElement>(sliderEl, '.technical-preview-img');\r\n\t\t\t\t\t\t\t\tpreviewImages.forEach(img => {\r\n\t\t\t\t\t\t\t\t\tconst removeSkeleton = () => {\r\n\t\t\t\t\t\t\t\t\t\tconst parent = html.getParentWithClassName(img, \"skeleton-loading\");\r\n\t\t\t\t\t\t\t\t\t\tif (parent) parent.classList.remove(\"skeleton-loading\");\r\n\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\tif (img.complete) {\r\n\t\t\t\t\t\t\t\t\t\tremoveSkeleton();\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\timg.addEventListener('load', () => { removeSkeleton(); });\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t// height script buttons\r\n\t\t\t\t\t\tSliderCreated: (settings, slider, Slider) => { return; },\r\n\t\t\t\t\t} as eXpress.components.main.ICustomPhotoSliderWithDivSettings;\r\n\r\n\t\t\t\t\tconst sliderComponent = eXpress.components.main.createCustomSlider(slider, sliderSettings);\r\n\t\t\t\t\tsliderComponents.push({ key: dialogId, slider: sliderComponent });\r\n\t\t\t\t\tdialog.openAsync();\r\n\t\t\t\t}));\r\n\t\t};\r\n\r\n\t\tconst deleteCartProductConfirmationPopup = (id: string, doneCallback: (res: eXpress.components.checkout.ICartUxActionResult) => void, replacements?: string) => {\r\n\t\t\t// prevent user from opening multiple popups at the same time by double click\r\n\t\t\tif (popupConfirmDeleteIsOpen) return;\r\n\t\t\tpopupConfirmDeleteIsOpen = true;\r\n\r\n\t\t\tlet dialog: core.StyleguideViewPopup;\r\n\t\t\teXpress.core.StyleguideViewPopup.createDialogAsync(\r\n\t\t\t\t{\r\n\t\t\t\t\tview: \"ConfirmDialogUX\",\r\n\t\t\t\t\tdialogId: \"cart-delete\",\r\n\t\t\t\t\tforceRefresh: true\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle: 'Label.CartDeleteItem.PageTitle',\r\n\t\t\t\t\tquestion: 'Label.CartDeleteItem.ItemDescription',\r\n\t\t\t\t\treplacements: replacements,\r\n\t\t\t\t\tokmnemonic: 'Label.DeleteButtonText',\r\n\t\t\t\t\tcancelmnemonic: 'Label.MyPages.Contacts.DeleteConfirm.Cancel'\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t\t\t.then($popup => {\r\n\t\t\t\t\tpopupConfirmDeleteIsOpen = false;\r\n\t\t\t\t\tcomponents.checkout.createRemoveConfirmation(\r\n\t\t\t\t\t\t$popup[0],\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tonRemoveConfirm: (remove?: boolean) => {\r\n\t\t\t\t\t\t\t\tif (remove)\r\n\t\t\t\t\t\t\t\t\treturn deleteCartProduct(id).then((res: eXpress.components.checkout.ICartUxActionResult) => {\r\n\t\t\t\t\t\t\t\t\t\tdoneCallback(res);\r\n\t\t\t\t\t\t\t\t\t\tdialog.close(true);\r\n\t\t\t\t\t\t\t\t\t\t// because the pop up is still open the client does not scroll to the top message on doneCallback\r\n\t\t\t\t\t\t\t\t\t\tpageLogComponent.scrollTo();\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tdialog.close(remove || false);\r\n\t\t\t\t\t\t\t\t\treturn $.Deferred<void>().resolve().promise();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tdialog = new core.StyleguideViewPopup($popup);\r\n\t\t\t\t\tdialog.openAsync();\r\n\t\t\t\t});\r\n\t\t};\r\n\r\n\t\tconst changeQuantity = (id: string, quantity: number) => {\r\n\t\t\treturn actions(undefined, undefined, id, quantity);\r\n\t\t};\r\n\t\tconst cartContainerEl = html.querySelector<HTMLElement>(document, '.technical-shopping-cart-container-element', true);\r\n\t\tconst cartProductTilesEl = html.querySelector<HTMLElement>(cartContainerEl, '.technical-cart', false); // if this does not exist => shopping cart is empty\r\n\t\tlet discountEl: HTMLElement | null;\r\n\t\tif (cartProductTilesEl) {\r\n\t\t\t// The mini basket\r\n\t\t\tconst miniBasketEl = html.querySelector<HTMLElement>(document, '.technical-mini-shoppingcart', true);\r\n\t\t\tconst miniBasket = new eXpress.components.checkout.MiniBasket(miniBasketEl, { refreshMiniBasketApi: refreshMiniBasket });\r\n\r\n\t\t\t// The discount area\r\n\t\t\tdiscountEl = html.querySelector<HTMLElement>(document, '.technical-discount', false);\r\n\t\t\tlet discount: eXpress.components.checkout.IDiscount;\r\n\t\t\tif (discountEl)\r\n\t\t\t\tdiscount = components.checkout.createDiscount(discountEl, { refreshMiniBasket: (overrideMiniBasketHtml?: string) => miniBasket.refreshServerSide(overrideMiniBasketHtml), changePromoCode: changePromoCode });\r\n\r\n\t\t\t// The continue button\r\n\t\t\tconst continueButtonEls = html.querySelectorAll<HTMLElement>(document, '.technical-checkout-step-confirm-button');\r\n\t\t\t// The actual products\r\n\t\t\tcomponents.checkout.createCartProductTiles(cartContainerEl, cartProductTilesEl,\r\n\t\t\t\t{\r\n\t\t\t\t\trefreshMiniBasket: (overrideMiniBasketHtml?: string) => miniBasket.refreshServerSide(overrideMiniBasketHtml),\r\n\t\t\t\t\tdeleteCartProduct: deleteCartProductConfirmationPopup,\r\n\t\t\t\t\tchangeQuantity,\r\n\t\t\t\t\trefreshDiscount: (newContent: string) => discount.refreshServerSide(newContent),\r\n\t\t\t\t\trefreshContinueButton: (newContent: string) => {\r\n\t\t\t\t\t\tcontinueButtonEls.forEach((i) => {\r\n\t\t\t\t\t\t\tconst node = html.htmlToElement(newContent);\r\n\t\t\t\t\t\t\tif (node) {\r\n\t\t\t\t\t\t\t\ti.replaceWith(node);\r\n\t\t\t\t\t\t\t\ti = node as HTMLElement;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\taddContinueButtonHandlers();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tpreviewPopup\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t/* The cart, before going to the next step, has to check minimum ordered quantities */\r\n\t\tconst addContinueButtonHandlers = () => {\r\n\t\t\tconst nextButtons = html.querySelectorAll(document, \".technical-checkout-step-confirm-button\");\r\n\t\t\tconst onNextButtonClick = (event: Event) => {\r\n\t\t\t\tconst message = (<HTMLElement>event.currentTarget).dataset['productminimum'] || (<HTMLElement>event.currentTarget).dataset['productmaximum'];\r\n\t\t\t\tif (message) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tpageLogComponent.updateMessageAndStyle(components.main.PageLogStyle.Error, message, true); // make sure that the client scrolls to the error message\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gtmData) {\r\n\t\t\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\t\t\twindow.dataLayer.push(JSON.parse(gtmData));\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tif (nextButtons) nextButtons.forEach((nextButton) => html.addEventListener(nextButton, \"click\", onNextButtonClick));\r\n\t\t};\r\n\t\taddContinueButtonHandlers();\r\n\r\n\t\tconst inPageRecommendationsEl = html.querySelector<HTMLElement>(document, '.technical-in-page-recommendations-container', false);\r\n\t\tif (inPageRecommendationsEl) {\r\n\t\t\tconst inPageSliderEl = html.querySelector<HTMLElement>(inPageRecommendationsEl, '.technical-slider', true);\r\n\t\t\tconst pageType = inPageRecommendationsEl.dataset.pagetype || '';\r\n\t\t\tconst pageCode = inPageRecommendationsEl.dataset.pagecode || '';\r\n\t\t\tinitSlider(inPageSliderEl, pageType, pageCode);\r\n\t\t}\r\n\t});\r\n\r\n\t// Expose the initSlider to GTM through the dataLayer\r\n\tconst initSlider = (sliderEl: HTMLElement, pageType: string, pageCode: string): void => {\r\n\t\t// convert so slider elements\r\n\t\tconst sliderElements: eXpress.components.main.ICustomPhotoSliderItem[] = [];\r\n\r\n\t\tfor (let z = 0, l = sliderEl.children.length; z < l; z++)\r\n\t\t\tsliderElements.push({ template: sliderEl.children[z] as HTMLElement });\r\n\r\n\t\t// set height of buttons\r\n\t\tconst heightScriptButtons = (slider: HTMLElement, bottomTitleHeight: number, highestSlideEl: HTMLElement) => {\r\n\t\t\t// BUTTONS\r\n\t\t\tconst sliderButtons = html.querySelectorAll(slider, '.technical-slider-button');\r\n\t\t\tconst hightestImage = html.querySelector<HTMLElement>(highestSlideEl, '.m-product__content-container', false);\r\n\t\t\tlet buttonCenterImage = 0;\r\n\t\t\tif (hightestImage) {\r\n\t\t\t\tconst btnHeight = 34;\r\n\t\t\t\tbuttonCenterImage = (hightestImage.offsetHeight / 2) + bottomTitleHeight - (btnHeight / 2);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0, l = sliderButtons.length; i < l; i++) {\r\n\t\t\t\t(sliderButtons[i] as HTMLElement).style.bottom = `${buttonCenterImage > 0 ? buttonCenterImage : (highestSlideEl.offsetHeight / 2)}px`;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// gets the highest slide element in the slider elements\r\n\t\tconst getHighestSlideOfSlider = (slidesInSlider: HTMLElement[]): HTMLElement => {\r\n\t\t\tlet highestSlideEl: HTMLElement;\r\n\t\t\tlet maxHeight = 0;\r\n\r\n\t\t\tfor (let i = slidesInSlider.length - 1; i >= 0; i--) {\r\n\t\t\t\tconst slideEl = slidesInSlider[i] as HTMLElement;\r\n\r\n\t\t\t\tconst slideHeight = html.getHeightWithMargins(slideEl);\r\n\r\n\t\t\t\tif (maxHeight <= slideHeight) {\r\n\t\t\t\t\tmaxHeight = slideHeight;\r\n\t\t\t\t\thighestSlideEl = slideEl;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn highestSlideEl!;\r\n\t\t};\r\n\t\tconst trackedSliderElIds: string[] = [];\r\n\t\tconst addClickEventsToSliderEls = (sliderElements: HTMLElement[], pageType: string, pageCode: string) => {\r\n\t\t\tconst onClickEvent = (ev: Event) => {\r\n\t\t\t\tconst currentEl = ev.currentTarget as HTMLElement;\r\n\t\t\t\tconst anchorEls = eXpress.html.querySelectorAll<HTMLAnchorElement>(currentEl, 'a');\r\n\t\t\t\tconst label = {\r\n\t\t\t\t\tpageType: pageType,\r\n\t\t\t\t\tpageCode: pageCode,\r\n\t\t\t\t\tpvc: eXpress.utils.getParameter('pvc', anchorEls[0].href, false) || ''\r\n\t\t\t\t} as eXpress.analytics.ICartRecommendationEventParams;\r\n\t\t\t\teXpress.analytics.trackRecommendationCartEvent(\"Recommended product clicked\", label);\r\n\t\t\t};\r\n\r\n\t\t\tsliderElements.forEach(el => {\r\n\t\t\t\tif (trackedSliderElIds.find(id => id === el.id)) return;\r\n\t\t\t\ttrackedSliderElIds.push(el.id);\r\n\t\t\t\teXpress.html.addEventListener(el, 'click', onClickEvent);\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t// settings for slider\r\n\t\tconst settings: eXpress.components.main.ICustomPhotoSliderWithDivSettings = {\r\n\t\t\tsliderElements: sliderElements,\r\n\t\t\tsliderContainerSettings: {\r\n\t\t\t\textraSliderClass: 'm-product-slider__slider-container',\r\n\t\t\t\telementsContainerSettings: {\r\n\t\t\t\t\textraSliderClass: 'm-product-slider__slider-content',\r\n\t\t\t\t\tslideClicked: () => { return; }\r\n\t\t\t\t},\r\n\t\t\t\tnextButton: {\r\n\t\t\t\t\tcss: 'a-button a-button--slider-button m-product-slider__button--next icon-arrow-right technical-slider-button',\r\n\t\t\t\t\tcssWhenOnMax: 'a-button--disabled',\r\n\t\t\t\t\tonClick: () => { return; }\r\n\t\t\t\t},\r\n\t\t\t\tpreviousButton: {\r\n\t\t\t\t\tcss: 'a-button a-button--slider-button m-product-slider__button--prev icon-arrow-left technical-slider-button',\r\n\t\t\t\t\tcssWhenOnMax: 'a-button--disabled',\r\n\t\t\t\t\tonClick: () => { return; }\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tshowHalfSlides: false,\r\n\t\t\treplaceWithElement: true,\r\n\t\t\tenableEternalSliding: true,\r\n\t\t\teternalSlidingMode: eXpress.components.main.EternalSlidingMode.Infinite,\r\n\t\t\ttranslateForMovement: true,\r\n\r\n\t\t\tInitializedEvent: (settings, sliderEl) => {\r\n\t\t\t\tconst visibleSlides = html.querySelectorAll(sliderEl, '.technical-slide') as HTMLElement[];\r\n\t\t\t\taddClickEventsToSliderEls(visibleSlides, pageType, pageCode);\r\n\t\t\t},\r\n\r\n\t\t\t// height script buttons\r\n\t\t\tSliderCreated: (settings, slider, Slider) => {\r\n\t\t\t\t// slider elements are on the DOM\r\n\t\t\t\tconst visibleSlides = html.querySelectorAll(Slider ? Slider : sliderEl, '.technical-slide') as HTMLElement[];\r\n\r\n\t\t\t\t// new slider elements that has not been added to the DOM yet\r\n\t\t\t\t// Do this for the height script => minimize flicker, drag, slide, ... of elements when slider is on DOM\r\n\t\t\t\tconst highestSlideEl = getHighestSlideOfSlider(visibleSlides);\r\n\t\t\t\tconst highestSlideLinkTextEl = html.querySelectorAll(highestSlideEl, '.technical-tile-link-text') as HTMLElement[];\r\n\t\t\t\tconst highestSlideLinkTextpx = highestSlideLinkTextEl.length > 0 ? html.getHeightWithMargins(highestSlideLinkTextEl[0]) : 0;\r\n\r\n\t\t\t\theightScriptButtons(slider, highestSlideLinkTextpx, highestSlideEl);\r\n\t\t\t},\r\n\t\t\tResizeEvent: (settings, slider) => {\r\n\t\t\t\tconst visibleSlides = html.querySelectorAll(slider, '.technical-slide') as HTMLElement[];\r\n\t\t\t\tconst highestSlideEl = getHighestSlideOfSlider(visibleSlides);\r\n\t\t\t\tconst highestSlideLinkTextEl = html.querySelectorAll(highestSlideEl, '.technical-tile-link-text') as HTMLElement[];\r\n\t\t\t\tconst highestSlideLinkTextpx = highestSlideLinkTextEl.length > 0 ? html.getHeightWithMargins(highestSlideLinkTextEl[0]) : 0;\r\n\r\n\t\t\t\theightScriptButtons(slider, highestSlideLinkTextpx, highestSlideEl);\r\n\t\t\t\taddClickEventsToSliderEls(visibleSlides, pageType, pageCode);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// create slider\r\n\t\tif (sliderEl.parentElement)\r\n\t\t\teXpress.components.main.createCustomSlider(sliderEl.parentElement, settings);\r\n\t};\r\n\twindow.initSlider = initSlider;\r\n\r\n\t// fix for buttons overlay with each other => WEB-8828\r\n\tconst resizeElementForButtonOverlay = () => {\r\n\t\tconst cartContainerEl = html.querySelector<HTMLElement>(document, '.technical-shopping-cart-container-element', false);\r\n\t\tconst recommendations = html.querySelector<HTMLElement>(document, '.technical-in-page-recommendations-container', false);\r\n\t\tconst continueButtonEl = html.querySelector<HTMLElement>(document, '.technical-checkout-step-continue', false);\r\n\t\tif (continueButtonEl && (recommendations || cartContainerEl)) {\r\n\t\t\t(recommendations || cartContainerEl)!.style.marginBottom = !html.isMobile() ? '' : `${continueButtonEl.offsetHeight - 8}px`;\r\n\t\t}\r\n\t};\r\n\tresizeElementForButtonOverlay();\r\n\twindow.addEventListener('resize', resizeElementForButtonOverlay);\r\n}\r\n"],"names":["eXpress","web","window","addEventListener","pageLogComponent","components","main","createPageLog","html","querySelector","document","popupConfirmDeleteIsOpen","gtmData","core","WatchLogin","start","discountEl","actions","changePromoCode","deleteCartItemId","updateQuantityCartItemId","updateQuantity","$","ajax","url","type","cache","data","then","res","result","RestartNeeded","location","href","Deferred","reject","promise","ConfirmationMessage","updateMessageAndStyle","PageLogStyle","Success","hide","nextButtons","querySelectorAll","InvalidMinimumMessage","forEach","nextButton","dataset","Error","InvalidMaximumMessage","removeAttribute","GtmData","sliderComponents","cartContainerEl","cartProductTilesEl","discount_1","miniBasketEl","miniBasket_1","checkout","MiniBasket","refreshMiniBasketApi","createDiscount","refreshMiniBasket","overrideMiniBasketHtml","refreshServerSide","continueButtonEls_1","createCartProductTiles","deleteCartProduct","id","doneCallback","replacements","dialog","StyleguideViewPopup","createDialogAsync","view","dialogId","forceRefresh","title","question","okmnemonic","cancelmnemonic","$popup","createRemoveConfirmation","onRemoveConfirm","remove","undefined","close","scrollTo","resolve","openAsync","changeQuantity","quantity","refreshDiscount","newContent","refreshContinueButton","i","node","htmlToElement","replaceWith","addContinueButtonHandlers","previewPopup","cartItemId","editUrl","concat","utils","showLoadingDialog","closeEvent","customSliderComponent","find","x","key","slider","JumpIntoView","Settings","sliderElements","z","l","children","length","push","template","sliderSettings","sliderContainerSettings","extraSliderClass","cssWhenButtonsBothOnMax","elementsContainerSettings","slideClicked","css","cssWhenOnMax","onClick","previousButton","showHalfSlides","replaceWithElement","enableEternalSliding","resize1SlideToFullWidth","eternalSlidingMode","EternalSlidingMode","Infinite","translateForMovement","InitializedEvent","settings","sliderEl","classList","add","img","removeSkeleton","parent","getParentWithClassName","complete","SliderCreated","Slider","sliderComponent","createCustomSlider","onNextButtonClick","event","message","currentTarget","preventDefault","dataLayer","JSON","parse","inPageRecommendationsEl","inPageSliderEl","pageType","pagetype","pageCode","pagecode","initSlider","heightScriptButtons","bottomTitleHeight","highestSlideEl","sliderButtons","hightestImage","buttonCenterImage","offsetHeight","style","bottom","getHighestSlideOfSlider","slidesInSlider","maxHeight","slideEl","slideHeight","getHeightWithMargins","trackedSliderElIds","addClickEventsToSliderEls","onClickEvent","ev","currentEl","anchorEls","label","pvc","getParameter","analytics","trackRecommendationCartEvent","el","visibleSlides","highestSlideLinkTextEl","highestSlideLinkTextpx","ResizeEvent","parentElement","resizeElementForButtonOverlay","recommendations","continueButtonEl","marginBottom","isMobile","shoppingcart"],"mappings":"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"}