{"version":3,"file":"initialiser.bundle_074.js","mappings":"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,iBCApC,IAAI3jB,EAAM,CACT,gCAAiC,CAChC,KACA,EACA,KACA,MAED,wCAAyC,CACxC,KACA,EACA,MAED,2CAA4C,CAC3C,KACA,EACA,KACA,MAED,oCAAqC,CACpC,KACA,EACA,MAED,uCAAwC,CACvC,KACA,EACA,MAED,sCAAuC,CACtC,KACA,EACA,MAED,+CAAgD,CAC/C,KACA,EACA,MAED,uCAAwC,CACvC,IACA,GAED,qCAAsC,CACrC,IACA,EACA,KAED,4CAA6C,CAC5C,KACA,GAED,uDAAwD,CACvD,KACA,GAED,4CAA6C,CAC5C,KACA,EACA,MAED,uDAAwD,CACvD,IACA,EACA,KAED,8BAA+B,CAC9B,KACA,EACA,MAED,yCAA0C,CACzC,KACA,EACA,MAED,gDAAiD,CAChD,KACA,GAED,sDAAuD,CACtD,KACA,GAED,oCAAqC,CACpC,KACA,GAED,uCAAwC,CACvC,KACA,GAED,gDAAiD,CAChD,IACA,GAED,2DAA4D,CAC3D,KACA,EACA,MAED,+CAAgD,CAC/C,KACA,EACA,MAED,4CAA6C,CAC5C,KACA,GAED,8CAA+C,CAC9C,KACA,EACA,MAED,yDAA0D,CACzD,KACA,EACA,MAED,sDAAuD,CACtD,KACA,GAED,uDAAwD,CACvD,KACA,EACA,MAED,2CAA4C,CAC3C,KACA,GAED,4CAA6C,CAC5C,KACA,GAED,gDAAiD,CAChD,KACA,EACA,MAED,iDAAkD,CACjD,KACA,EACA,MAED,4CAA6C,CAC5C,KACA,GAED,6CAA8C,CAC7C,KACA,EACA,MAED,oDAAqD,CACpD,KACA,GAED,0CAA2C,CAC1C,KACA,GAED,4BAA6B,CAC5B,KACA,EACA,MAED,uCAAwC,CACvC,IACA,EACA,KAED,2CAA4C,CAC3C,KACA,GAED,0CAA2C,CAC1C,KACA,GAED,iDAAkD,CACjD,KACA,GAED,2CAA4C,CAC3C,KACA,GAED,iDAAkD,CACjD,KACA,GAED,6CAA8C,CAC7C,KACA,GAED,6CAA8C,CAC7C,KACA,GAED,iDAAkD,CACjD,KACA,GAED,4CAA6C,CAC5C,KACA,GAED,wCAAyC,CACxC,KACA,EACA,MAED,kCAAmC,CAClC,KACA,GAED,sDAAuD,CACtD,KACA,GAED,gDAAiD,CAChD,KACA,GAED,+CAAgD,CAC/C,KACA,GAED,0DAA2D,CAC1D,KACA,EACA,MAED,0CAA2C,CAC1C,KACA,GAED,8CAA+C,CAC9C,KACA,GAED,+CAAgD,CAC/C,KACA,GAED,qCAAsC,CACrC,KACA,GAED,6CAA8C,CAC7C,KACA,GAED,8CAA+C,CAC9C,KACA,GAED,uCAAwC,CACvC,KACA,GAED,+CAAgD,CAC/C,KACA,GAED,8CAA+C,CAC9C,KACA,GAED,sEAAuE,CACtE,KACA,GAED,wDAAyD,CACxD,KACA,GAED,kEAAmE,CAClE,KACA,GAED,oEAAqE,CACpE,KACA,GAED,8DAA+D,CAC9D,IACA,GAED,wEAAyE,CACxE,KACA,GAED,mEAAoE,CACnE,KACA,EACA,MAED,8DAA+D,CAC9D,KACA,GAED,+DAAgE,CAC/D,KACA,GAED,iEAAkE,CACjE,KACA,GAED,+EAAgF,CAC/E,KACA,GAED,gEAAiE,CAChE,KACA,GAED,4DAA6D,CAC5D,KACA,GAED,6DAA8D,CAC7D,KACA,GAED,6CAA8C,CAC7C,KACA,GAED,8CAA+C,CAC9C,KACA,GAED,sCAAuC,CACtC,KACA,EACA,MAED,8CAA+C,CAC9C,KACA,GAED,+CAAgD,CAC/C,KACA,EACA,MAED,sDAAuD,CACtD,KACA,GAED,uDAAwD,CACvD,KACA,GAED,gDAAiD,CAChD,KACA,EACA,MAED,kEAAmE,CAClE,IACA,GAED,8DAA+D,CAC9D,KACA,EACA,MAED,kEAAmE,CAClE,KACA,GAED,qEAAsE,CACrE,KACA,GAED,oDAAqD,CACpD,IACA,GAED,yEAA0E,CACzE,KACA,GAED,0DAA2D,CAC1D,KACA,GAED,qDAAsD,CACrD,KACA,GAED,kEAAmE,CAClE,KACA,GAED,wEAAyE,CACxE,KACA,GAED,2DAA4D,CAC3D,KACA,GAED,4DAA6D,CAC5D,IACA,GAED,6DAA8D,CAC7D,KACA,GAED,gEAAiE,CAChE,KACA,GAED,sEAAuE,CACtE,KACA,GAED,0EAA2E,CAC1E,KACA,GAED,oDAAqD,CACpD,KACA,EACA,MAED,wCAAyC,CACxC,KACA,EACA,MAED,gCAAiC,CAChC,KACA,EACA,MAED,oCAAqC,CACpC,KACA,EACA,MAED,uCAAwC,CACvC,KACA,EACA,MAED,2CAA4C,CAC3C,KACA,EACA,MAED,wCAAyC,CACxC,KACA,EACA,MAED,oCAAqC,CACpC,KACA,EACA,MAED,qCAAsC,CACrC,KACA,EACA,MAED,uCAAwC,CACvC,KACA,EACA,MAED,wCAAyC,CACxC,KACA,EACA,MAED,kEAAmE,CAClE,KACA,GAED,8DAA+D,CAC9D,KACA,GAED,yEAA0E,CACzE,KACA,EACA,MAED,wDAAyD,CACxD,KACA,GAED,oEAAqE,CACpE,KACA,EACA,MAED,+EAAgF,CAC/E,KACA,EACA,MAED,8CAA+C,CAC9C,KACA,GAED,+CAAgD,CAC/C,KACA,EACA,MAED,yCAA0C,CACzC,KACA,EACA,MAED,oDAAqD,CACpD,KACA,EACA,MAED,qCAAsC,CACrC,KACA,GAED,kDAAmD,CAClD,KACA,EACA,MAED,wDAAyD,CACxD,IACA,EACA,KAED,mEAAoE,CACnE,KACA,EACA,MAED,sEAAuE,CACtE,IACA,EACA,KAED,iFAAkF,CACjF,KACA,EACA,MAED,wDAAyD,CACxD,KACA,EACA,MAED,mEAAoE,CACnE,KACA,EACA,MAED,kDAAmD,CAClD,KACA,EACA,MAED,6DAA8D,CAC7D,KACA,EACA,MAED,WAAY,CACX,KACA,EACA,EACA,KACA,KACA,KACA,MAED,aAAc,CACb,KACA,EACA,MAED,mBAAoB,CACnB,KACA,GAED,oCAAqC,CACpC,KACA,GAED,4BAA6B,CAC5B,IACA,GAED,wCAAyC,CACxC,KACA,GAED,iDAAkD,CACjD,IACA,EACA,KAED,kDAAmD,CAClD,KACA,GAED,+BAAgC,CAC/B,KACA,EACA,MAED,+BAAgC,CAC/B,KACA,GAED,6CAA8C,CAC7C,KACA,EACA,MAED,sDAAuD,CACtD,IACA,EACA,KAED,wDAAyD,CACxD,IACA,EACA,KAED,sDAAuD,CACtD,KACA,EACA,MAED,sDAAuD,CACtD,KACA,EACA,MAED,6DAA8D,CAC7D,KACA,EACA,MAED,mEAAoE,CACnE,KACA,EACA,MAED,wDAAyD,CACxD,KACA,EACA,MAED,2DAA4D,CAC3D,KACA,EACA,MAED,iEAAkE,CACjE,KACA,EACA,MAED,2DAA4D,CAC3D,KACA,EACA,MAED,2DAA4D,CAC3D,KACA,EACA,MAED,sEAAuE,CACtE,KACA,EACA,MAED,sDAAuD,CACtD,KACA,EACA,MAED,qDAAsD,CACrD,KACA,EACA,MAED,0CAA2C,CAC1C,KACA,GAED,gCAAiC,CAChC,KACA,GAED,0BAA2B,CAC1B,KACA,GAED,oCAAqC,CACpC,IACA,GAED,2CAA4C,CAC3C,KACA,GAED,yBAA0B,CACzB,KACA,EACA,MAED,wBAAyB,CACxB,KACA,GAED,uBAAwB,CACvB,KACA,GAED,uBAAwB,CACvB,KACA,GAED,8BAA+B,CAC9B,KACA,GAED,iCAAkC,CACjC,KACA,GAED,+BAAgC,CAC/B,IACA,GAED,kCAAmC,CAClC,KACA,GAED,2BAA4B,CAC3B,KACA,GAED,6CAA8C,CAC7C,KACA,GAED,sBAAuB,CACtB,IACA,GAED,iCAAkC,CACjC,KACA,GAED,+BAAgC,CAC/B,IACA,GAED,0CAA2C,CAC1C,KACA,GAED,yBAA0B,CACzB,KACA,EACA,MAED,8BAA+B,CAC9B,IACA,GAED,4BAA6B,CAC5B,KACA,GAED,6BAA8B,CAC7B,IACA,EACA,KAED,mCAAoC,CACnC,KACA,GAED,oCAAqC,CACpC,KACA,GAED,qCAAsC,CACrC,KACA,GAED,iCAAkC,CACjC,KACA,GAED,6CAA8C,CAC7C,KACA,GAED,6CAA8C,CAC7C,KACA,GAED,0CAA2C,CAC1C,KACA,GAED,+CAAgD,CAC/C,IACA,GAED,oDAAqD,CACpD,KACA,GAED,yCAA0C,CACzC,KACA,GAED,4CAA6C,CAC5C,KACA,GAED,8CAA+C,CAC9C,KACA,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","sources":["webpack://LoBSiteTemplates/webpack/runtime/create fake namespace object","webpack://LoBSiteTemplates/webpack/runtime/load script","webpack://LoBSiteTemplates/./node_modules/sweetalert2/dist/sweetalert2.all.js","webpack://LoBSiteTemplates/./src/components/basketPopOut/basketPopOut.ts","webpack://LoBSiteTemplates/./src/components/basketPopOut/basketPopOutInitialiser.ts","webpack://LoBSiteTemplates/./src/components/basket/basketService.ts","webpack://LoBSiteTemplates/./src/components/buttonCarousel/buttonCarousel.ts","webpack://LoBSiteTemplates/./src/components/buttonCarousel/buttonCarouselButton.ts","webpack://LoBSiteTemplates/./src/components/carousel/carousel.ts","webpack://LoBSiteTemplates/./src/components/carousel/carouselGtm.ts","webpack://LoBSiteTemplates/./src/components/carousel/carouselInfiniteLoad.ts","webpack://LoBSiteTemplates/./src/components/carousel/carouselTileLoad.ts","webpack://LoBSiteTemplates/./src/components/colourPicker/colourPickerController.ts","webpack://LoBSiteTemplates/./src/components/contentItems/contentItem.ts","webpack://LoBSiteTemplates/./src/components/contentItems/contentItems.ts","webpack://LoBSiteTemplates/./src/components/gallery/galleryController.ts","webpack://LoBSiteTemplates/./src/components/globalComponents/globalComponents.ts","webpack://LoBSiteTemplates/./src/components/groupPicker/groupPicker.ts","webpack://LoBSiteTemplates/./src/components/loading/loadingTemplates.ts","webpack://LoBSiteTemplates/./src/components/mediaTile/baseMediaTile.ts","webpack://LoBSiteTemplates/./src/components/mediaTile/buttonImageMediaTile.ts","webpack://LoBSiteTemplates/./src/components/mediaTile/imageMediaTile.ts","webpack://LoBSiteTemplates/./src/components/mediaTile/lazyYouTubeMediaTile.ts","webpack://LoBSiteTemplates/./src/components/mediaTile/mediaTileFactory.ts","webpack://LoBSiteTemplates/./src/components/mediaTile/youTubeMediaTile.ts","webpack://LoBSiteTemplates/./src/components/mediaTile/zoomedImageMediaTile.ts","webpack://LoBSiteTemplates/./src/components/notification/notification.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/categoryPagingSelectableCarousel.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPage.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageBreadcrumb.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageGroupOptions.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageHeader.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageHeaderQuickLinks.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageOption.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageOptions.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageQuickLink.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageSelectedOptionsCarousel.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageShowMore.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageTile.ts","webpack://LoBSiteTemplates/./src/components/productListingPage/productListingPageTiles.ts","webpack://LoBSiteTemplates/./src/components/product/product.ts","webpack://LoBSiteTemplates/./src/components/product/productCarouselOrchestrator.ts","webpack://LoBSiteTemplates/./src/components/product/productColourDropDown.ts","webpack://LoBSiteTemplates/./src/components/product/productDeliveryPanel.ts","webpack://LoBSiteTemplates/./src/components/product/productDropDown.ts","webpack://LoBSiteTemplates/./src/components/product/productFinancePanel.ts","webpack://LoBSiteTemplates/./src/components/product/productGroupDropDown.ts","webpack://LoBSiteTemplates/./src/components/product/productGtm.ts","webpack://LoBSiteTemplates/./src/components/product/productInitialiser.ts","webpack://LoBSiteTemplates/./src/components/product/productOptionsPanel.ts","webpack://LoBSiteTemplates/./src/components/product/productPrice.ts","webpack://LoBSiteTemplates/./src/components/product/productReviewsParent.ts","webpack://LoBSiteTemplates/./src/components/product/productSizeDropDown.ts","webpack://LoBSiteTemplates/./src/components/promotions/bannerPromotion.ts","webpack://LoBSiteTemplates/./src/components/promotions/bannerPromotions.ts","webpack://LoBSiteTemplates/./src/components/readMore/readMoreController.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/headerReviewWidget.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/productReviewWidget.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetAggregateComponent.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetAggregatePanelBase.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetAggregatePanelProduct.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetBase.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetFeatureAggregateComponent.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetOptionBase.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetPager.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetPagerRatingsFilter.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetPagerRatingsFilterOption.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetPagerReview.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetPagerReviews.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetPagerShowMore.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetSummaryComponent.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetSummaryComponentOption.ts","webpack://LoBSiteTemplates/./src/components/reviewComponents/reviewWidgetSummaryFilterComponentBase.ts","webpack://LoBSiteTemplates/./src/components/selectableCarousel/basePagingSelectableCarousel.ts","webpack://LoBSiteTemplates/./src/components/selectableCarousel/pagingSelectableCarousel.ts","webpack://LoBSiteTemplates/./src/components/selectableCarousel/selectableCarousel.ts","webpack://LoBSiteTemplates/./src/components/showHide/showHideController.ts","webpack://LoBSiteTemplates/./src/components/video/youTubeVideo.ts","webpack://LoBSiteTemplates/./src/shared/ajax.ts","webpack://LoBSiteTemplates/./src/shared/ajaxGetAndReplaceHtml.ts","webpack://LoBSiteTemplates/./src/shared/cookieConsent.ts","webpack://LoBSiteTemplates/./src/shared/delivery/deliveryServices.ts","webpack://LoBSiteTemplates/./src/shared/delivery/productDeliveryResponseDto.ts","webpack://LoBSiteTemplates/./src/shared/firstInteraction.ts","webpack://LoBSiteTemplates/./src/shared/googleTagManager/gtmService.ts","webpack://LoBSiteTemplates/./src/shared/historyController.ts","webpack://LoBSiteTemplates/./src/shared/initialiser.ts","webpack://LoBSiteTemplates/./src/shared/instanceComponentBase.ts","webpack://LoBSiteTemplates/./src/shared/instanceComponentInitialiser.ts","webpack://LoBSiteTemplates/./src/shared/lbCookies.ts","webpack://LoBSiteTemplates/./src/shared/liveChat.ts","webpack://LoBSiteTemplates/./src/shared/megaMenu.ts","webpack://LoBSiteTemplates/./src/shared/megaMenuDesktop.ts","webpack://LoBSiteTemplates/./src/shared/megaMenuDeviceBase.ts","webpack://LoBSiteTemplates/./src/shared/megaMenuHandheld.ts","webpack://LoBSiteTemplates/./src/shared/megaMenuInitialiser.ts","webpack://LoBSiteTemplates/./src/shared/megaMenuItem.ts","webpack://LoBSiteTemplates/./src/shared/oneTrust/oneTrustCookieConsent.ts","webpack://LoBSiteTemplates/./src/shared/overlay.ts","webpack://LoBSiteTemplates/./src/shared/overlayInitialiser.ts","webpack://LoBSiteTemplates/./src/shared/popOutController.ts","webpack://LoBSiteTemplates/./src/shared/popOutControllerInitialiser.ts","webpack://LoBSiteTemplates/./src/shared/responsiveState.ts","webpack://LoBSiteTemplates/./src/shared/scrollService.ts","webpack://LoBSiteTemplates/./src/shared/utilities/asyncUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/cookieUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/customEvents.ts","webpack://LoBSiteTemplates/./src/shared/utilities/domUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/analyticsEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/attributeEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/cookieEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/customEventEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/googleTagManagerEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/groupEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/oneTrustEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/schemaDataEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/sessionStorageEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/stringEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/swipedEventEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/urlEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/utillityEnums.ts","webpack://LoBSiteTemplates/./src/shared/utilities/enums/validationStateEnum.ts","webpack://LoBSiteTemplates/./src/shared/utilities/extensionUtilities.ts","webpack://LoBSiteTemplates/./src/shared/utilities/guidUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/helperUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/instantiationUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/onScreenUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/readyUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/swipeEvents.ts","webpack://LoBSiteTemplates/./src/shared/utilities/trustpilotUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/typeUtils.ts","webpack://LoBSiteTemplates/./src/shared/utilities/validationUtilities.ts","webpack://LoBSiteTemplates/./src/ lazy ^\\.\\/.*\\.ts$ namespace object","webpack://LoBSiteTemplates/webpack/bootstrap","webpack://LoBSiteTemplates/webpack/runtime/compat get default export","webpack://LoBSiteTemplates/webpack/runtime/define property getters","webpack://LoBSiteTemplates/webpack/runtime/ensure chunk","webpack://LoBSiteTemplates/webpack/runtime/get javascript chunk filename","webpack://LoBSiteTemplates/webpack/runtime/get mini-css chunk filename","webpack://LoBSiteTemplates/webpack/runtime/global","webpack://LoBSiteTemplates/webpack/runtime/hasOwnProperty shorthand","webpack://LoBSiteTemplates/webpack/runtime/make namespace object","webpack://LoBSiteTemplates/webpack/runtime/publicPath","webpack://LoBSiteTemplates/webpack/runtime/css loading","webpack://LoBSiteTemplates/webpack/runtime/jsonp chunk loading","webpack://LoBSiteTemplates/webpack/startup"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"LoBSiteTemplates:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/*!\n* sweetalert2 v11.10.4\n* Released under the MIT License.\n*/\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Sweetalert2 = factory());\n})(this, (function () { 'use strict';\n\n function _callSuper(t, o, e) {\n return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));\n }\n function _construct(t, e, r) {\n if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n var o = [null];\n o.push.apply(o, e);\n var p = new (t.bind.apply(t, o))();\n return r && _setPrototypeOf(p, r.prototype), p;\n }\n function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function () {\n return !!t;\n })();\n }\n function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n }\n function _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n }\n function _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : String(i);\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n }\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return _assertThisInitialized(self);\n }\n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n return object;\n }\n function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get.bind();\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n return desc.value;\n };\n }\n return _get.apply(this, arguments);\n }\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\");\n return _classApplyDescriptorGet(receiver, descriptor);\n }\n function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\");\n _classApplyDescriptorSet(receiver, descriptor, value);\n return value;\n }\n function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n return privateMap.get(receiver);\n }\n function _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n return descriptor.value;\n }\n function _classApplyDescriptorSet(receiver, descriptor, value) {\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n descriptor.value = value;\n }\n }\n function _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n }\n function _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n }\n\n var RESTORE_FOCUS_TIMEOUT = 100;\n\n /** @type {GlobalState} */\n var globalState = {};\n var focusPreviousActiveElement = function focusPreviousActiveElement() {\n if (globalState.previousActiveElement instanceof HTMLElement) {\n globalState.previousActiveElement.focus();\n globalState.previousActiveElement = null;\n } else if (document.body) {\n document.body.focus();\n }\n };\n\n /**\n * Restore previous active (focused) element\n *\n * @param {boolean} returnFocus\n * @returns {Promise<void>}\n */\n var restoreActiveElement = function restoreActiveElement(returnFocus) {\n return new Promise(function (resolve) {\n if (!returnFocus) {\n return resolve();\n }\n var x = window.scrollX;\n var y = window.scrollY;\n globalState.restoreFocusTimeout = setTimeout(function () {\n focusPreviousActiveElement();\n resolve();\n }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n window.scrollTo(x, y);\n });\n };\n\n var swalPrefix = 'swal2-';\n\n /**\n * @typedef\n * { | 'container'\n * | 'shown'\n * | 'height-auto'\n * | 'iosfix'\n * | 'popup'\n * | 'modal'\n * | 'no-backdrop'\n * | 'no-transition'\n * | 'toast'\n * | 'toast-shown'\n * | 'show'\n * | 'hide'\n * | 'close'\n * | 'title'\n * | 'html-container'\n * | 'actions'\n * | 'confirm'\n * | 'deny'\n * | 'cancel'\n * | 'default-outline'\n * | 'footer'\n * | 'icon'\n * | 'icon-content'\n * | 'image'\n * | 'input'\n * | 'file'\n * | 'range'\n * | 'select'\n * | 'radio'\n * | 'checkbox'\n * | 'label'\n * | 'textarea'\n * | 'inputerror'\n * | 'input-label'\n * | 'validation-message'\n * | 'progress-steps'\n * | 'active-progress-step'\n * | 'progress-step'\n * | 'progress-step-line'\n * | 'loader'\n * | 'loading'\n * | 'styled'\n * | 'top'\n * | 'top-start'\n * | 'top-end'\n * | 'top-left'\n * | 'top-right'\n * | 'center'\n * | 'center-start'\n * | 'center-end'\n * | 'center-left'\n * | 'center-right'\n * | 'bottom'\n * | 'bottom-start'\n * | 'bottom-end'\n * | 'bottom-left'\n * | 'bottom-right'\n * | 'grow-row'\n * | 'grow-column'\n * | 'grow-fullscreen'\n * | 'rtl'\n * | 'timer-progress-bar'\n * | 'timer-progress-bar-container'\n * | 'scrollbar-measure'\n * | 'icon-success'\n * | 'icon-warning'\n * | 'icon-info'\n * | 'icon-question'\n * | 'icon-error'\n * } SwalClass\n * @typedef {Record<SwalClass, string>} SwalClasses\n */\n\n /**\n * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon\n * @typedef {Record<SwalIcon, string>} SwalIcons\n */\n\n /** @type {SwalClass[]} */\n var classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error'];\n var swalClasses = classNames.reduce(function (acc, className) {\n acc[className] = swalPrefix + className;\n return acc;\n }, /** @type {SwalClasses} */{});\n\n /** @type {SwalIcon[]} */\n var icons = ['success', 'warning', 'info', 'question', 'error'];\n var iconTypes = icons.reduce(function (acc, icon) {\n acc[icon] = swalPrefix + icon;\n return acc;\n }, /** @type {SwalIcons} */{});\n\n var consolePrefix = 'SweetAlert2:';\n\n /**\n * Capitalize the first letter of a string\n *\n * @param {string} str\n * @returns {string}\n */\n var capitalizeFirstLetter = function capitalizeFirstLetter(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n };\n\n /**\n * Standardize console warnings\n *\n * @param {string | string[]} message\n */\n var warn = function warn(message) {\n console.warn(\"\".concat(consolePrefix, \" \").concat(_typeof(message) === 'object' ? message.join(' ') : message));\n };\n\n /**\n * Standardize console errors\n *\n * @param {string} message\n */\n var error = function error(message) {\n console.error(\"\".concat(consolePrefix, \" \").concat(message));\n };\n\n /**\n * Private global state for `warnOnce`\n *\n * @type {string[]}\n * @private\n */\n var previousWarnOnceMessages = [];\n\n /**\n * Show a console warning, but only if it hasn't already been shown\n *\n * @param {string} message\n */\n var warnOnce = function warnOnce(message) {\n if (!previousWarnOnceMessages.includes(message)) {\n previousWarnOnceMessages.push(message);\n warn(message);\n }\n };\n\n /**\n * Show a one-time console warning about deprecated params/methods\n *\n * @param {string} deprecatedParam\n * @param {string} useInstead\n */\n var warnAboutDeprecation = function warnAboutDeprecation(deprecatedParam, useInstead) {\n warnOnce(\"\\\"\".concat(deprecatedParam, \"\\\" is deprecated and will be removed in the next major release. Please use \\\"\").concat(useInstead, \"\\\" instead.\"));\n };\n\n /**\n * If `arg` is a function, call it (with no arguments or context) and return the result.\n * Otherwise, just pass the value through\n *\n * @param {Function | any} arg\n * @returns {any}\n */\n var callIfFunction = function callIfFunction(arg) {\n return typeof arg === 'function' ? arg() : arg;\n };\n\n /**\n * @param {any} arg\n * @returns {boolean}\n */\n var hasToPromiseFn = function hasToPromiseFn(arg) {\n return arg && typeof arg.toPromise === 'function';\n };\n\n /**\n * @param {any} arg\n * @returns {Promise<any>}\n */\n var asPromise = function asPromise(arg) {\n return hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n };\n\n /**\n * @param {any} arg\n * @returns {boolean}\n */\n var isPromise = function isPromise(arg) {\n return arg && Promise.resolve(arg) === arg;\n };\n\n /**\n * Gets the popup container which contains the backdrop and the popup itself.\n *\n * @returns {HTMLElement | null}\n */\n var getContainer = function getContainer() {\n return document.body.querySelector(\".\".concat(swalClasses.container));\n };\n\n /**\n * @param {string} selectorString\n * @returns {HTMLElement | null}\n */\n var elementBySelector = function elementBySelector(selectorString) {\n var container = getContainer();\n return container ? container.querySelector(selectorString) : null;\n };\n\n /**\n * @param {string} className\n * @returns {HTMLElement | null}\n */\n var elementByClass = function elementByClass(className) {\n return elementBySelector(\".\".concat(className));\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getPopup = function getPopup() {\n return elementByClass(swalClasses.popup);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getIcon = function getIcon() {\n return elementByClass(swalClasses.icon);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getIconContent = function getIconContent() {\n return elementByClass(swalClasses['icon-content']);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getTitle = function getTitle() {\n return elementByClass(swalClasses.title);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getHtmlContainer = function getHtmlContainer() {\n return elementByClass(swalClasses['html-container']);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getImage = function getImage() {\n return elementByClass(swalClasses.image);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getProgressSteps = function getProgressSteps() {\n return elementByClass(swalClasses['progress-steps']);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getValidationMessage = function getValidationMessage() {\n return elementByClass(swalClasses['validation-message']);\n };\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n var getConfirmButton = function getConfirmButton() {\n return /** @type {HTMLButtonElement} */elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.confirm));\n };\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n var getCancelButton = function getCancelButton() {\n return /** @type {HTMLButtonElement} */elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.cancel));\n };\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n var getDenyButton = function getDenyButton() {\n return /** @type {HTMLButtonElement} */elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.deny));\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getInputLabel = function getInputLabel() {\n return elementByClass(swalClasses['input-label']);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getLoader = function getLoader() {\n return elementBySelector(\".\".concat(swalClasses.loader));\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getActions = function getActions() {\n return elementByClass(swalClasses.actions);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getFooter = function getFooter() {\n return elementByClass(swalClasses.footer);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getTimerProgressBar = function getTimerProgressBar() {\n return elementByClass(swalClasses['timer-progress-bar']);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n var getCloseButton = function getCloseButton() {\n return elementByClass(swalClasses.close);\n };\n\n // https://github.com/jkup/focusable/blob/master/index.js\n var focusable = \"\\n a[href],\\n area[href],\\n input:not([disabled]),\\n select:not([disabled]),\\n textarea:not([disabled]),\\n button:not([disabled]),\\n iframe,\\n object,\\n embed,\\n [tabindex=\\\"0\\\"],\\n [contenteditable],\\n audio[controls],\\n video[controls],\\n summary\\n\";\n /**\n * @returns {HTMLElement[]}\n */\n var getFocusableElements = function getFocusableElements() {\n var popup = getPopup();\n if (!popup) {\n return [];\n }\n /** @type {NodeListOf<HTMLElement>} */\n var focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])');\n var focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)\n // sort according to tabindex\n .sort(function (a, b) {\n var tabindexA = parseInt(a.getAttribute('tabindex') || '0');\n var tabindexB = parseInt(b.getAttribute('tabindex') || '0');\n if (tabindexA > tabindexB) {\n return 1;\n } else if (tabindexA < tabindexB) {\n return -1;\n }\n return 0;\n });\n\n /** @type {NodeListOf<HTMLElement>} */\n var otherFocusableElements = popup.querySelectorAll(focusable);\n var otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(function (el) {\n return el.getAttribute('tabindex') !== '-1';\n });\n return _toConsumableArray(new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))).filter(function (el) {\n return isVisible$1(el);\n });\n };\n\n /**\n * @returns {boolean}\n */\n var isModal = function isModal() {\n return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);\n };\n\n /**\n * @returns {boolean}\n */\n var isToast = function isToast() {\n var popup = getPopup();\n if (!popup) {\n return false;\n }\n return hasClass(popup, swalClasses.toast);\n };\n\n /**\n * @returns {boolean}\n */\n var isLoading = function isLoading() {\n var popup = getPopup();\n if (!popup) {\n return false;\n }\n return popup.hasAttribute('data-loading');\n };\n\n /**\n * Securely set innerHTML of an element\n * https://github.com/sweetalert2/sweetalert2/issues/1926\n *\n * @param {HTMLElement} elem\n * @param {string} html\n */\n var setInnerHtml = function setInnerHtml(elem, html) {\n elem.textContent = '';\n if (html) {\n var parser = new DOMParser();\n var parsed = parser.parseFromString(html, \"text/html\");\n var head = parsed.querySelector('head');\n head && Array.from(head.childNodes).forEach(function (child) {\n elem.appendChild(child);\n });\n var body = parsed.querySelector('body');\n body && Array.from(body.childNodes).forEach(function (child) {\n if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {\n elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507\n } else {\n elem.appendChild(child);\n }\n });\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {boolean}\n */\n var hasClass = function hasClass(elem, className) {\n if (!className) {\n return false;\n }\n var classList = className.split(/\\s+/);\n for (var i = 0; i < classList.length; i++) {\n if (!elem.classList.contains(classList[i])) {\n return false;\n }\n }\n return true;\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n */\n var removeCustomClasses = function removeCustomClasses(elem, params) {\n Array.from(elem.classList).forEach(function (className) {\n if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) {\n elem.classList.remove(className);\n }\n });\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n * @param {string} className\n */\n var applyCustomClass = function applyCustomClass(elem, params, className) {\n removeCustomClasses(elem, params);\n if (params.customClass && params.customClass[className]) {\n if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) {\n warn(\"Invalid type of customClass.\".concat(className, \"! Expected string or iterable object, got \\\"\").concat(_typeof(params.customClass[className]), \"\\\"\"));\n return;\n }\n addClass(elem, params.customClass[className]);\n }\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass\n * @returns {HTMLInputElement | null}\n */\n var getInput$1 = function getInput(popup, inputClass) {\n if (!inputClass) {\n return null;\n }\n switch (inputClass) {\n case 'select':\n case 'textarea':\n case 'file':\n return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses[inputClass]));\n case 'checkbox':\n return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.checkbox, \" input\"));\n case 'radio':\n return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.radio, \" input:checked\")) || popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.radio, \" input:first-child\"));\n case 'range':\n return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.range, \" input\"));\n default:\n return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.input));\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input\n */\n var focusInput = function focusInput(input) {\n input.focus();\n\n // place cursor at end of text in text input\n if (input.type !== 'file') {\n // http://stackoverflow.com/a/2345915\n var val = input.value;\n input.value = '';\n input.value = val;\n }\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n * @param {boolean} condition\n */\n var toggleClass = function toggleClass(target, classList, condition) {\n if (!target || !classList) {\n return;\n }\n if (typeof classList === 'string') {\n classList = classList.split(/\\s+/).filter(Boolean);\n }\n classList.forEach(function (className) {\n if (Array.isArray(target)) {\n target.forEach(function (elem) {\n condition ? elem.classList.add(className) : elem.classList.remove(className);\n });\n } else {\n condition ? target.classList.add(className) : target.classList.remove(className);\n }\n });\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n var addClass = function addClass(target, classList) {\n toggleClass(target, classList, true);\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n var removeClass = function removeClass(target, classList) {\n toggleClass(target, classList, false);\n };\n\n /**\n * Get direct child of an element by class name\n *\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {HTMLElement | undefined}\n */\n var getDirectChildByClass = function getDirectChildByClass(elem, className) {\n var children = Array.from(elem.children);\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child instanceof HTMLElement && hasClass(child, className)) {\n return child;\n }\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} property\n * @param {*} value\n */\n var applyNumericalStyle = function applyNumericalStyle(elem, property, value) {\n if (value === \"\".concat(parseInt(value))) {\n value = parseInt(value);\n }\n if (value || parseInt(value) === 0) {\n elem.style.setProperty(property, typeof value === 'number' ? \"\".concat(value, \"px\") : value);\n } else {\n elem.style.removeProperty(property);\n }\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n var show = function show(elem) {\n var display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';\n elem && (elem.style.display = display);\n };\n\n /**\n * @param {HTMLElement | null} elem\n */\n var hide = function hide(elem) {\n elem && (elem.style.display = 'none');\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n var showWhenInnerHtmlPresent = function showWhenInnerHtmlPresent(elem) {\n var display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'block';\n if (!elem) {\n return;\n }\n new MutationObserver(function () {\n toggle(elem, elem.innerHTML, display);\n }).observe(elem, {\n childList: true,\n subtree: true\n });\n };\n\n /**\n * @param {HTMLElement} parent\n * @param {string} selector\n * @param {string} property\n * @param {string} value\n */\n var setStyle = function setStyle(parent, selector, property, value) {\n /** @type {HTMLElement | null} */\n var el = parent.querySelector(selector);\n if (el) {\n el.style.setProperty(property, value);\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {any} condition\n * @param {string} display\n */\n var toggle = function toggle(elem, condition) {\n var display = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'flex';\n condition ? show(elem, display) : hide(elem);\n };\n\n /**\n * borrowed from jquery $(elem).is(':visible') implementation\n *\n * @param {HTMLElement | null} elem\n * @returns {boolean}\n */\n var isVisible$1 = function isVisible(elem) {\n return !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n };\n\n /**\n * @returns {boolean}\n */\n var allButtonsAreHidden = function allButtonsAreHidden() {\n return !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());\n };\n\n /**\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n var isScrollable = function isScrollable(elem) {\n return !!(elem.scrollHeight > elem.clientHeight);\n };\n\n /**\n * borrowed from https://stackoverflow.com/a/46352119\n *\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n var hasCssAnimation = function hasCssAnimation(elem) {\n var style = window.getComputedStyle(elem);\n var animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n var transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n return animDuration > 0 || transDuration > 0;\n };\n\n /**\n * @param {number} timer\n * @param {boolean} reset\n */\n var animateTimerProgressBar = function animateTimerProgressBar(timer) {\n var reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n if (isVisible$1(timerProgressBar)) {\n if (reset) {\n timerProgressBar.style.transition = 'none';\n timerProgressBar.style.width = '100%';\n }\n setTimeout(function () {\n timerProgressBar.style.transition = \"width \".concat(timer / 1000, \"s linear\");\n timerProgressBar.style.width = '0%';\n }, 10);\n }\n };\n var stopTimerProgressBar = function stopTimerProgressBar() {\n var timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n var timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n timerProgressBar.style.removeProperty('transition');\n timerProgressBar.style.width = '100%';\n var timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n var timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;\n timerProgressBar.style.width = \"\".concat(timerProgressBarPercent, \"%\");\n };\n\n /**\n * Detect Node env\n *\n * @returns {boolean}\n */\n var isNodeEnv = function isNodeEnv() {\n return typeof window === 'undefined' || typeof document === 'undefined';\n };\n\n var sweetHTML = \"\\n <div aria-labelledby=\\\"\".concat(swalClasses.title, \"\\\" aria-describedby=\\\"\").concat(swalClasses['html-container'], \"\\\" class=\\\"\").concat(swalClasses.popup, \"\\\" tabindex=\\\"-1\\\">\\n <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.close, \"\\\"></button>\\n <ul class=\\\"\").concat(swalClasses['progress-steps'], \"\\\"></ul>\\n <div class=\\\"\").concat(swalClasses.icon, \"\\\"></div>\\n <img class=\\\"\").concat(swalClasses.image, \"\\\" />\\n <h2 class=\\\"\").concat(swalClasses.title, \"\\\" id=\\\"\").concat(swalClasses.title, \"\\\"></h2>\\n <div class=\\\"\").concat(swalClasses['html-container'], \"\\\" id=\\\"\").concat(swalClasses['html-container'], \"\\\"></div>\\n <input class=\\\"\").concat(swalClasses.input, \"\\\" id=\\\"\").concat(swalClasses.input, \"\\\" />\\n <input type=\\\"file\\\" class=\\\"\").concat(swalClasses.file, \"\\\" />\\n <div class=\\\"\").concat(swalClasses.range, \"\\\">\\n <input type=\\\"range\\\" />\\n <output></output>\\n </div>\\n <select class=\\\"\").concat(swalClasses.select, \"\\\" id=\\\"\").concat(swalClasses.select, \"\\\"></select>\\n <div class=\\\"\").concat(swalClasses.radio, \"\\\"></div>\\n <label class=\\\"\").concat(swalClasses.checkbox, \"\\\">\\n <input type=\\\"checkbox\\\" id=\\\"\").concat(swalClasses.checkbox, \"\\\" />\\n <span class=\\\"\").concat(swalClasses.label, \"\\\"></span>\\n </label>\\n <textarea class=\\\"\").concat(swalClasses.textarea, \"\\\" id=\\\"\").concat(swalClasses.textarea, \"\\\"></textarea>\\n <div class=\\\"\").concat(swalClasses['validation-message'], \"\\\" id=\\\"\").concat(swalClasses['validation-message'], \"\\\"></div>\\n <div class=\\\"\").concat(swalClasses.actions, \"\\\">\\n <div class=\\\"\").concat(swalClasses.loader, \"\\\"></div>\\n <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.confirm, \"\\\"></button>\\n <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.deny, \"\\\"></button>\\n <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.cancel, \"\\\"></button>\\n </div>\\n <div class=\\\"\").concat(swalClasses.footer, \"\\\"></div>\\n <div class=\\\"\").concat(swalClasses['timer-progress-bar-container'], \"\\\">\\n <div class=\\\"\").concat(swalClasses['timer-progress-bar'], \"\\\"></div>\\n </div>\\n </div>\\n\").replace(/(^|\\n)\\s*/g, '');\n\n /**\n * @returns {boolean}\n */\n var resetOldContainer = function resetOldContainer() {\n var oldContainer = getContainer();\n if (!oldContainer) {\n return false;\n }\n oldContainer.remove();\n removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n return true;\n };\n var resetValidationMessage$1 = function resetValidationMessage() {\n globalState.currentInstance.resetValidationMessage();\n };\n var addInputChangeListeners = function addInputChangeListeners() {\n var popup = getPopup();\n var input = getDirectChildByClass(popup, swalClasses.input);\n var file = getDirectChildByClass(popup, swalClasses.file);\n /** @type {HTMLInputElement} */\n var range = popup.querySelector(\".\".concat(swalClasses.range, \" input\"));\n /** @type {HTMLOutputElement} */\n var rangeOutput = popup.querySelector(\".\".concat(swalClasses.range, \" output\"));\n var select = getDirectChildByClass(popup, swalClasses.select);\n /** @type {HTMLInputElement} */\n var checkbox = popup.querySelector(\".\".concat(swalClasses.checkbox, \" input\"));\n var textarea = getDirectChildByClass(popup, swalClasses.textarea);\n input.oninput = resetValidationMessage$1;\n file.onchange = resetValidationMessage$1;\n select.onchange = resetValidationMessage$1;\n checkbox.onchange = resetValidationMessage$1;\n textarea.oninput = resetValidationMessage$1;\n range.oninput = function () {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n range.onchange = function () {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n };\n\n /**\n * @param {string | HTMLElement} target\n * @returns {HTMLElement}\n */\n var getTarget = function getTarget(target) {\n return typeof target === 'string' ? document.querySelector(target) : target;\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n var setupAccessibility = function setupAccessibility(params) {\n var popup = getPopup();\n popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n if (!params.toast) {\n popup.setAttribute('aria-modal', 'true');\n }\n };\n\n /**\n * @param {HTMLElement} targetElement\n */\n var setupRTL = function setupRTL(targetElement) {\n if (window.getComputedStyle(targetElement).direction === 'rtl') {\n addClass(getContainer(), swalClasses.rtl);\n }\n };\n\n /**\n * Add modal + backdrop + no-war message for Russians to DOM\n *\n * @param {SweetAlertOptions} params\n */\n var init = function init(params) {\n // Clean up the old popup container if it exists\n var oldContainerExisted = resetOldContainer();\n if (isNodeEnv()) {\n error('SweetAlert2 requires document to initialize');\n return;\n }\n var container = document.createElement('div');\n container.className = swalClasses.container;\n if (oldContainerExisted) {\n addClass(container, swalClasses['no-transition']);\n }\n setInnerHtml(container, sweetHTML);\n var targetElement = getTarget(params.target);\n targetElement.appendChild(container);\n setupAccessibility(params);\n setupRTL(targetElement);\n addInputChangeListeners();\n };\n\n /**\n * @param {HTMLElement | object | string} param\n * @param {HTMLElement} target\n */\n var parseHtmlToContainer = function parseHtmlToContainer(param, target) {\n // DOM element\n if (param instanceof HTMLElement) {\n target.appendChild(param);\n }\n\n // Object\n else if (_typeof(param) === 'object') {\n handleObject(param, target);\n }\n\n // Plain string\n else if (param) {\n setInnerHtml(target, param);\n }\n };\n\n /**\n * @param {any} param\n * @param {HTMLElement} target\n */\n var handleObject = function handleObject(param, target) {\n // JQuery element(s)\n if (param.jquery) {\n handleJqueryElem(target, param);\n }\n\n // For other objects use their string representation\n else {\n setInnerHtml(target, param.toString());\n }\n };\n\n /**\n * @param {HTMLElement} target\n * @param {any} elem\n */\n var handleJqueryElem = function handleJqueryElem(target, elem) {\n target.textContent = '';\n if (0 in elem) {\n for (var i = 0; (i in elem); i++) {\n target.appendChild(elem[i].cloneNode(true));\n }\n } else {\n target.appendChild(elem.cloneNode(true));\n }\n };\n\n /**\n * @returns {'webkitAnimationEnd' | 'animationend' | false}\n */\n var animationEndEvent = function () {\n // Prevent run in Node env\n if (isNodeEnv()) {\n return false;\n }\n var testEl = document.createElement('div');\n\n // Chrome, Safari and Opera\n if (typeof testEl.style.webkitAnimation !== 'undefined') {\n return 'webkitAnimationEnd';\n }\n\n // Standard syntax\n if (typeof testEl.style.animation !== 'undefined') {\n return 'animationend';\n }\n return false;\n }();\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderActions = function renderActions(instance, params) {\n var actions = getActions();\n var loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n\n // Actions (buttons) wrapper\n if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n hide(actions);\n } else {\n show(actions);\n }\n\n // Custom class\n applyCustomClass(actions, params, 'actions');\n\n // Render all the buttons\n renderButtons(actions, loader, params);\n\n // Loader\n setInnerHtml(loader, params.loaderHtml || '');\n applyCustomClass(loader, params, 'loader');\n };\n\n /**\n * @param {HTMLElement} actions\n * @param {HTMLElement} loader\n * @param {SweetAlertOptions} params\n */\n function renderButtons(actions, loader, params) {\n var confirmButton = getConfirmButton();\n var denyButton = getDenyButton();\n var cancelButton = getCancelButton();\n if (!confirmButton || !denyButton || !cancelButton) {\n return;\n }\n\n // Render buttons\n renderButton(confirmButton, 'confirm', params);\n renderButton(denyButton, 'deny', params);\n renderButton(cancelButton, 'cancel', params);\n handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n if (params.reverseButtons) {\n if (params.toast) {\n actions.insertBefore(cancelButton, confirmButton);\n actions.insertBefore(denyButton, confirmButton);\n } else {\n actions.insertBefore(cancelButton, loader);\n actions.insertBefore(denyButton, loader);\n actions.insertBefore(confirmButton, loader);\n }\n }\n }\n\n /**\n * @param {HTMLElement} confirmButton\n * @param {HTMLElement} denyButton\n * @param {HTMLElement} cancelButton\n * @param {SweetAlertOptions} params\n */\n function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n if (!params.buttonsStyling) {\n removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n return;\n }\n addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n // Buttons background colors\n if (params.confirmButtonColor) {\n confirmButton.style.backgroundColor = params.confirmButtonColor;\n addClass(confirmButton, swalClasses['default-outline']);\n }\n if (params.denyButtonColor) {\n denyButton.style.backgroundColor = params.denyButtonColor;\n addClass(denyButton, swalClasses['default-outline']);\n }\n if (params.cancelButtonColor) {\n cancelButton.style.backgroundColor = params.cancelButtonColor;\n addClass(cancelButton, swalClasses['default-outline']);\n }\n }\n\n /**\n * @param {HTMLElement} button\n * @param {'confirm' | 'deny' | 'cancel'} buttonType\n * @param {SweetAlertOptions} params\n */\n function renderButton(button, buttonType, params) {\n var buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType);\n toggle(button, params[\"show\".concat(buttonName, \"Button\")], 'inline-block');\n setInnerHtml(button, params[\"\".concat(buttonType, \"ButtonText\")] || ''); // Set caption text\n button.setAttribute('aria-label', params[\"\".concat(buttonType, \"ButtonAriaLabel\")] || ''); // ARIA label\n\n // Add buttons custom classes\n button.className = swalClasses[buttonType];\n applyCustomClass(button, params, \"\".concat(buttonType, \"Button\"));\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderCloseButton = function renderCloseButton(instance, params) {\n var closeButton = getCloseButton();\n if (!closeButton) {\n return;\n }\n setInnerHtml(closeButton, params.closeButtonHtml || '');\n\n // Custom class\n applyCustomClass(closeButton, params, 'closeButton');\n toggle(closeButton, params.showCloseButton);\n closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderContainer = function renderContainer(instance, params) {\n var container = getContainer();\n if (!container) {\n return;\n }\n handleBackdropParam(container, params.backdrop);\n handlePositionParam(container, params.position);\n handleGrowParam(container, params.grow);\n\n // Custom class\n applyCustomClass(container, params, 'container');\n };\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['backdrop']} backdrop\n */\n function handleBackdropParam(container, backdrop) {\n if (typeof backdrop === 'string') {\n container.style.background = backdrop;\n } else if (!backdrop) {\n addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['position']} position\n */\n function handlePositionParam(container, position) {\n if (!position) {\n return;\n }\n if (position in swalClasses) {\n addClass(container, swalClasses[position]);\n } else {\n warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n addClass(container, swalClasses.center);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['grow']} grow\n */\n function handleGrowParam(container, grow) {\n if (!grow) {\n return;\n }\n addClass(container, swalClasses[\"grow-\".concat(grow)]);\n }\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateProps = {\n innerParams: new WeakMap(),\n domCache: new WeakMap()\n };\n\n /** @type {InputClass[]} */\n var inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderInput = function renderInput(instance, params) {\n var popup = getPopup();\n if (!popup) {\n return;\n }\n var innerParams = privateProps.innerParams.get(instance);\n var rerender = !innerParams || params.input !== innerParams.input;\n inputClasses.forEach(function (inputClass) {\n var inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n if (!inputContainer) {\n return;\n }\n\n // set attributes\n setAttributes(inputClass, params.inputAttributes);\n\n // set class\n inputContainer.className = swalClasses[inputClass];\n if (rerender) {\n hide(inputContainer);\n }\n });\n if (params.input) {\n if (rerender) {\n showInput(params);\n }\n // set custom class\n setCustomClass(params);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n var showInput = function showInput(params) {\n if (!params.input) {\n return;\n }\n if (!renderInputType[params.input]) {\n error(\"Unexpected type of input! Expected \".concat(Object.keys(renderInputType).join(' | '), \", got \\\"\").concat(params.input, \"\\\"\"));\n return;\n }\n var inputContainer = getInputContainer(params.input);\n var input = renderInputType[params.input](inputContainer, params);\n show(inputContainer);\n\n // input autofocus\n if (params.inputAutoFocus) {\n setTimeout(function () {\n focusInput(input);\n });\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n */\n var removeAttributes = function removeAttributes(input) {\n for (var i = 0; i < input.attributes.length; i++) {\n var attrName = input.attributes[i].name;\n if (!['id', 'type', 'value', 'style'].includes(attrName)) {\n input.removeAttribute(attrName);\n }\n }\n };\n\n /**\n * @param {InputClass} inputClass\n * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n */\n var setAttributes = function setAttributes(inputClass, inputAttributes) {\n var input = getInput$1(getPopup(), inputClass);\n if (!input) {\n return;\n }\n removeAttributes(input);\n for (var attr in inputAttributes) {\n input.setAttribute(attr, inputAttributes[attr]);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n var setCustomClass = function setCustomClass(params) {\n var inputContainer = getInputContainer(params.input);\n if (_typeof(params.customClass) === 'object') {\n addClass(inputContainer, params.customClass.input);\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions} params\n */\n var setInputPlaceholder = function setInputPlaceholder(input, params) {\n if (!input.placeholder || params.inputPlaceholder) {\n input.placeholder = params.inputPlaceholder;\n }\n };\n\n /**\n * @param {Input} input\n * @param {Input} prependTo\n * @param {SweetAlertOptions} params\n */\n var setInputLabel = function setInputLabel(input, prependTo, params) {\n if (params.inputLabel) {\n var label = document.createElement('label');\n var labelClass = swalClasses['input-label'];\n label.setAttribute('for', input.id);\n label.className = labelClass;\n if (_typeof(params.customClass) === 'object') {\n addClass(label, params.customClass.inputLabel);\n }\n label.innerText = params.inputLabel;\n prependTo.insertAdjacentElement('beforebegin', label);\n }\n };\n\n /**\n * @param {SweetAlertOptions['input']} inputType\n * @returns {HTMLElement}\n */\n var getInputContainer = function getInputContainer(inputType) {\n return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);\n };\n\n /**\n * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions['inputValue']} inputValue\n */\n var checkAndSetInputValue = function checkAndSetInputValue(input, inputValue) {\n if (['string', 'number'].includes(_typeof(inputValue))) {\n input.value = \"\".concat(inputValue);\n } else if (!isPromise(inputValue)) {\n warn(\"Unexpected type of inputValue! Expected \\\"string\\\", \\\"number\\\" or \\\"Promise\\\", got \\\"\".concat(_typeof(inputValue), \"\\\"\"));\n }\n };\n\n /** @type {Record<SweetAlertInput, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */\n var renderInputType = {};\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = function (input, params) {\n checkAndSetInputValue(input, params.inputValue);\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n input.type = params.input;\n return input;\n };\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.file = function (input, params) {\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n return input;\n };\n\n /**\n * @param {HTMLInputElement} range\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.range = function (range, params) {\n var rangeInput = range.querySelector('input');\n var rangeOutput = range.querySelector('output');\n checkAndSetInputValue(rangeInput, params.inputValue);\n rangeInput.type = params.input;\n checkAndSetInputValue(rangeOutput, params.inputValue);\n setInputLabel(rangeInput, range, params);\n return range;\n };\n\n /**\n * @param {HTMLSelectElement} select\n * @param {SweetAlertOptions} params\n * @returns {HTMLSelectElement}\n */\n renderInputType.select = function (select, params) {\n select.textContent = '';\n if (params.inputPlaceholder) {\n var placeholder = document.createElement('option');\n setInnerHtml(placeholder, params.inputPlaceholder);\n placeholder.value = '';\n placeholder.disabled = true;\n placeholder.selected = true;\n select.appendChild(placeholder);\n }\n setInputLabel(select, select, params);\n return select;\n };\n\n /**\n * @param {HTMLInputElement} radio\n * @returns {HTMLInputElement}\n */\n renderInputType.radio = function (radio) {\n radio.textContent = '';\n return radio;\n };\n\n /**\n * @param {HTMLLabelElement} checkboxContainer\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.checkbox = function (checkboxContainer, params) {\n var checkbox = getInput$1(getPopup(), 'checkbox');\n checkbox.value = '1';\n checkbox.checked = Boolean(params.inputValue);\n var label = checkboxContainer.querySelector('span');\n setInnerHtml(label, params.inputPlaceholder);\n return checkbox;\n };\n\n /**\n * @param {HTMLTextAreaElement} textarea\n * @param {SweetAlertOptions} params\n * @returns {HTMLTextAreaElement}\n */\n renderInputType.textarea = function (textarea, params) {\n checkAndSetInputValue(textarea, params.inputValue);\n setInputPlaceholder(textarea, params);\n setInputLabel(textarea, textarea, params);\n\n /**\n * @param {HTMLElement} el\n * @returns {number}\n */\n var getMargin = function getMargin(el) {\n return parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n };\n\n // https://github.com/sweetalert2/sweetalert2/issues/2291\n setTimeout(function () {\n // https://github.com/sweetalert2/sweetalert2/issues/1699\n if ('MutationObserver' in window) {\n var initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n var textareaResizeHandler = function textareaResizeHandler() {\n // check if texarea is still in document (i.e. popup wasn't closed in the meantime)\n if (!document.body.contains(textarea)) {\n return;\n }\n var textareaWidth = textarea.offsetWidth + getMargin(textarea);\n if (textareaWidth > initialPopupWidth) {\n getPopup().style.width = \"\".concat(textareaWidth, \"px\");\n } else {\n applyNumericalStyle(getPopup(), 'width', params.width);\n }\n };\n new MutationObserver(textareaResizeHandler).observe(textarea, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n });\n return textarea;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderContent = function renderContent(instance, params) {\n var htmlContainer = getHtmlContainer();\n if (!htmlContainer) {\n return;\n }\n showWhenInnerHtmlPresent(htmlContainer);\n applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n // Content as HTML\n if (params.html) {\n parseHtmlToContainer(params.html, htmlContainer);\n show(htmlContainer, 'block');\n }\n\n // Content as plain text\n else if (params.text) {\n htmlContainer.textContent = params.text;\n show(htmlContainer, 'block');\n }\n\n // No content\n else {\n hide(htmlContainer);\n }\n renderInput(instance, params);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderFooter = function renderFooter(instance, params) {\n var footer = getFooter();\n if (!footer) {\n return;\n }\n showWhenInnerHtmlPresent(footer);\n toggle(footer, params.footer, 'block');\n if (params.footer) {\n parseHtmlToContainer(params.footer, footer);\n }\n\n // Custom class\n applyCustomClass(footer, params, 'footer');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderIcon = function renderIcon(instance, params) {\n var innerParams = privateProps.innerParams.get(instance);\n var icon = getIcon();\n if (!icon) {\n return;\n }\n\n // if the given icon already rendered, apply the styling without re-rendering the icon\n if (innerParams && params.icon === innerParams.icon) {\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n return;\n }\n if (!params.icon && !params.iconHtml) {\n hide(icon);\n return;\n }\n if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n error(\"Unknown icon! Expected \\\"success\\\", \\\"error\\\", \\\"warning\\\", \\\"info\\\" or \\\"question\\\", got \\\"\".concat(params.icon, \"\\\"\"));\n hide(icon);\n return;\n }\n show(icon);\n\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n\n // Animate icon\n addClass(icon, params.showClass && params.showClass.icon);\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n var applyStyles = function applyStyles(icon, params) {\n for (var _i = 0, _Object$entries = Object.entries(iconTypes); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n iconType = _Object$entries$_i[0],\n iconClassName = _Object$entries$_i[1];\n if (params.icon !== iconType) {\n removeClass(icon, iconClassName);\n }\n }\n addClass(icon, params.icon && iconTypes[params.icon]);\n\n // Icon color\n setColor(icon, params);\n\n // Success icon background color\n adjustSuccessIconBackgroundColor();\n\n // Custom class\n applyCustomClass(icon, params, 'icon');\n };\n\n // Adjust success icon background color to match the popup background color\n var adjustSuccessIconBackgroundColor = function adjustSuccessIconBackgroundColor() {\n var popup = getPopup();\n if (!popup) {\n return;\n }\n var popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n /** @type {NodeListOf<HTMLElement>} */\n var successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n for (var i = 0; i < successIconParts.length; i++) {\n successIconParts[i].style.backgroundColor = popupBackgroundColor;\n }\n };\n var successIconHtml = \"\\n <div class=\\\"swal2-success-circular-line-left\\\"></div>\\n <span class=\\\"swal2-success-line-tip\\\"></span> <span class=\\\"swal2-success-line-long\\\"></span>\\n <div class=\\\"swal2-success-ring\\\"></div> <div class=\\\"swal2-success-fix\\\"></div>\\n <div class=\\\"swal2-success-circular-line-right\\\"></div>\\n\";\n var errorIconHtml = \"\\n <span class=\\\"swal2-x-mark\\\">\\n <span class=\\\"swal2-x-mark-line-left\\\"></span>\\n <span class=\\\"swal2-x-mark-line-right\\\"></span>\\n </span>\\n\";\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n var setContent = function setContent(icon, params) {\n if (!params.icon && !params.iconHtml) {\n return;\n }\n var oldContent = icon.innerHTML;\n var newContent = '';\n if (params.iconHtml) {\n newContent = iconContent(params.iconHtml);\n } else if (params.icon === 'success') {\n newContent = successIconHtml;\n oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n } else if (params.icon === 'error') {\n newContent = errorIconHtml;\n } else if (params.icon) {\n var defaultIconHtml = {\n question: '?',\n warning: '!',\n info: 'i'\n };\n newContent = iconContent(defaultIconHtml[params.icon]);\n }\n if (oldContent.trim() !== newContent.trim()) {\n setInnerHtml(icon, newContent);\n }\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n var setColor = function setColor(icon, params) {\n if (!params.iconColor) {\n return;\n }\n icon.style.color = params.iconColor;\n icon.style.borderColor = params.iconColor;\n for (var _i2 = 0, _arr = ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']; _i2 < _arr.length; _i2++) {\n var sel = _arr[_i2];\n setStyle(icon, sel, 'background-color', params.iconColor);\n }\n setStyle(icon, '.swal2-success-ring', 'border-color', params.iconColor);\n };\n\n /**\n * @param {string} content\n * @returns {string}\n */\n var iconContent = function iconContent(content) {\n return \"<div class=\\\"\".concat(swalClasses['icon-content'], \"\\\">\").concat(content, \"</div>\");\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderImage = function renderImage(instance, params) {\n var image = getImage();\n if (!image) {\n return;\n }\n if (!params.imageUrl) {\n hide(image);\n return;\n }\n show(image, '');\n\n // Src, alt\n image.setAttribute('src', params.imageUrl);\n image.setAttribute('alt', params.imageAlt || '');\n\n // Width, height\n applyNumericalStyle(image, 'width', params.imageWidth);\n applyNumericalStyle(image, 'height', params.imageHeight);\n\n // Class\n image.className = swalClasses.image;\n applyCustomClass(image, params, 'image');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderPopup = function renderPopup(instance, params) {\n var container = getContainer();\n var popup = getPopup();\n if (!container || !popup) {\n return;\n }\n\n // Width\n // https://github.com/sweetalert2/sweetalert2/issues/2170\n if (params.toast) {\n applyNumericalStyle(container, 'width', params.width);\n popup.style.width = '100%';\n var loader = getLoader();\n loader && popup.insertBefore(loader, getIcon());\n } else {\n applyNumericalStyle(popup, 'width', params.width);\n }\n\n // Padding\n applyNumericalStyle(popup, 'padding', params.padding);\n\n // Color\n if (params.color) {\n popup.style.color = params.color;\n }\n\n // Background\n if (params.background) {\n popup.style.background = params.background;\n }\n hide(getValidationMessage());\n\n // Classes\n addClasses$1(popup, params);\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n var addClasses$1 = function addClasses(popup, params) {\n var showClass = params.showClass || {};\n // Default Class + showClass when updating Swal.update({})\n popup.className = \"\".concat(swalClasses.popup, \" \").concat(isVisible$1(popup) ? showClass.popup : '');\n if (params.toast) {\n addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n addClass(popup, swalClasses.toast);\n } else {\n addClass(popup, swalClasses.modal);\n }\n\n // Custom class\n applyCustomClass(popup, params, 'popup');\n if (typeof params.customClass === 'string') {\n addClass(popup, params.customClass);\n }\n\n // Icon class (#1842)\n if (params.icon) {\n addClass(popup, swalClasses[\"icon-\".concat(params.icon)]);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderProgressSteps = function renderProgressSteps(instance, params) {\n var progressStepsContainer = getProgressSteps();\n if (!progressStepsContainer) {\n return;\n }\n var progressSteps = params.progressSteps,\n currentProgressStep = params.currentProgressStep;\n if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {\n hide(progressStepsContainer);\n return;\n }\n show(progressStepsContainer);\n progressStepsContainer.textContent = '';\n if (currentProgressStep >= progressSteps.length) {\n warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n }\n progressSteps.forEach(function (step, index) {\n var stepEl = createStepElement(step);\n progressStepsContainer.appendChild(stepEl);\n if (index === currentProgressStep) {\n addClass(stepEl, swalClasses['active-progress-step']);\n }\n if (index !== progressSteps.length - 1) {\n var lineEl = createLineElement(params);\n progressStepsContainer.appendChild(lineEl);\n }\n });\n };\n\n /**\n * @param {string} step\n * @returns {HTMLLIElement}\n */\n var createStepElement = function createStepElement(step) {\n var stepEl = document.createElement('li');\n addClass(stepEl, swalClasses['progress-step']);\n setInnerHtml(stepEl, step);\n return stepEl;\n };\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {HTMLLIElement}\n */\n var createLineElement = function createLineElement(params) {\n var lineEl = document.createElement('li');\n addClass(lineEl, swalClasses['progress-step-line']);\n if (params.progressStepsDistance) {\n applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n }\n return lineEl;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var renderTitle = function renderTitle(instance, params) {\n var title = getTitle();\n if (!title) {\n return;\n }\n showWhenInnerHtmlPresent(title);\n toggle(title, params.title || params.titleText, 'block');\n if (params.title) {\n parseHtmlToContainer(params.title, title);\n }\n if (params.titleText) {\n title.innerText = params.titleText;\n }\n\n // Custom class\n applyCustomClass(title, params, 'title');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var render = function render(instance, params) {\n renderPopup(instance, params);\n renderContainer(instance, params);\n renderProgressSteps(instance, params);\n renderIcon(instance, params);\n renderImage(instance, params);\n renderTitle(instance, params);\n renderCloseButton(instance, params);\n renderContent(instance, params);\n renderActions(instance, params);\n renderFooter(instance, params);\n var popup = getPopup();\n if (typeof params.didRender === 'function' && popup) {\n params.didRender(popup);\n }\n };\n\n /*\n * Global function to determine if SweetAlert2 popup is shown\n */\n var isVisible = function isVisible() {\n return isVisible$1(getPopup());\n };\n\n /*\n * Global function to click 'Confirm' button\n */\n var clickConfirm = function clickConfirm() {\n var _dom$getConfirmButton;\n return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click();\n };\n\n /*\n * Global function to click 'Deny' button\n */\n var clickDeny = function clickDeny() {\n var _dom$getDenyButton;\n return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click();\n };\n\n /*\n * Global function to click 'Cancel' button\n */\n var clickCancel = function clickCancel() {\n var _dom$getCancelButton;\n return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();\n };\n\n /** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason */\n\n /** @type {Record<DismissReason, DismissReason>} */\n var DismissReason = Object.freeze({\n cancel: 'cancel',\n backdrop: 'backdrop',\n close: 'close',\n esc: 'esc',\n timer: 'timer'\n });\n\n /**\n * @param {GlobalState} globalState\n */\n var removeKeydownHandler = function removeKeydownHandler(globalState) {\n if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = false;\n }\n };\n\n /**\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {*} dismissWith\n */\n var addKeydownHandler = function addKeydownHandler(globalState, innerParams, dismissWith) {\n removeKeydownHandler(globalState);\n if (!innerParams.toast) {\n globalState.keydownHandler = function (e) {\n return keydownHandler(innerParams, e, dismissWith);\n };\n globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = true;\n }\n };\n\n /**\n * @param {number} index\n * @param {number} increment\n */\n var setFocus = function setFocus(index, increment) {\n var _dom$getPopup;\n var focusableElements = getFocusableElements();\n // search for visible elements and select the next possible match\n if (focusableElements.length) {\n index = index + increment;\n\n // rollover to first item\n if (index === focusableElements.length) {\n index = 0;\n\n // go to last item\n } else if (index === -1) {\n index = focusableElements.length - 1;\n }\n focusableElements[index].focus();\n return;\n }\n // no visible focusable elements, focus the popup\n (_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus();\n };\n var arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n var arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {KeyboardEvent} event\n * @param {Function} dismissWith\n */\n var keydownHandler = function keydownHandler(innerParams, event, dismissWith) {\n if (!innerParams) {\n return; // This instance has already been destroyed\n }\n\n // Ignore keydown during IME composition\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n // https://github.com/sweetalert2/sweetalert2/issues/720\n // https://github.com/sweetalert2/sweetalert2/issues/2406\n if (event.isComposing || event.keyCode === 229) {\n return;\n }\n if (innerParams.stopKeydownPropagation) {\n event.stopPropagation();\n }\n\n // ENTER\n if (event.key === 'Enter') {\n handleEnter(event, innerParams);\n }\n\n // TAB\n else if (event.key === 'Tab') {\n handleTab(event);\n }\n\n // ARROWS - switch focus between buttons\n else if ([].concat(arrowKeysNextButton, arrowKeysPreviousButton).includes(event.key)) {\n handleArrows(event.key);\n }\n\n // ESC\n else if (event.key === 'Escape') {\n handleEsc(event, innerParams, dismissWith);\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n */\n var handleEnter = function handleEnter(event, innerParams) {\n // https://github.com/sweetalert2/sweetalert2/issues/2386\n if (!callIfFunction(innerParams.allowEnterKey)) {\n return;\n }\n var input = getInput$1(getPopup(), innerParams.input);\n if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {\n if (['textarea', 'file'].includes(innerParams.input)) {\n return; // do not submit\n }\n clickConfirm();\n event.preventDefault();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n */\n var handleTab = function handleTab(event) {\n var targetElement = event.target;\n var focusableElements = getFocusableElements();\n var btnIndex = -1;\n for (var i = 0; i < focusableElements.length; i++) {\n if (targetElement === focusableElements[i]) {\n btnIndex = i;\n break;\n }\n }\n\n // Cycle to the next button\n if (!event.shiftKey) {\n setFocus(btnIndex, 1);\n }\n\n // Cycle to the prev button\n else {\n setFocus(btnIndex, -1);\n }\n event.stopPropagation();\n event.preventDefault();\n };\n\n /**\n * @param {string} key\n */\n var handleArrows = function handleArrows(key) {\n var actions = getActions();\n var confirmButton = getConfirmButton();\n var denyButton = getDenyButton();\n var cancelButton = getCancelButton();\n if (!actions || !confirmButton || !denyButton || !cancelButton) {\n return;\n }\n /** @type HTMLElement[] */\n var buttons = [confirmButton, denyButton, cancelButton];\n if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n return;\n }\n var sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n var buttonToFocus = document.activeElement;\n if (!buttonToFocus) {\n return;\n }\n for (var i = 0; i < actions.children.length; i++) {\n buttonToFocus = buttonToFocus[sibling];\n if (!buttonToFocus) {\n return;\n }\n if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n break;\n }\n }\n if (buttonToFocus instanceof HTMLButtonElement) {\n buttonToFocus.focus();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n * @param {Function} dismissWith\n */\n var handleEsc = function handleEsc(event, innerParams, dismissWith) {\n if (callIfFunction(innerParams.allowEscapeKey)) {\n event.preventDefault();\n dismissWith(DismissReason.esc);\n }\n };\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateMethods = {\n swalPromiseResolve: new WeakMap(),\n swalPromiseReject: new WeakMap()\n };\n\n // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n // elements not within the active modal dialog will not be surfaced if a user opens a screen\n // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n var setAriaHidden = function setAriaHidden() {\n var bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(function (el) {\n if (el === getContainer() || el.contains(getContainer())) {\n return;\n }\n if (el.hasAttribute('aria-hidden')) {\n el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');\n }\n el.setAttribute('aria-hidden', 'true');\n });\n };\n var unsetAriaHidden = function unsetAriaHidden() {\n var bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(function (el) {\n if (el.hasAttribute('data-previous-aria-hidden')) {\n el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || '');\n el.removeAttribute('data-previous-aria-hidden');\n } else {\n el.removeAttribute('aria-hidden');\n }\n });\n };\n\n // @ts-ignore\n var isSafariOrIOS = typeof window !== 'undefined' && !!window.GestureEvent; // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394\n\n /**\n * Fix iOS scrolling\n * http://stackoverflow.com/q/39626302\n */\n var iOSfix = function iOSfix() {\n if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) {\n var offset = document.body.scrollTop;\n document.body.style.top = \"\".concat(offset * -1, \"px\");\n addClass(document.body, swalClasses.iosfix);\n lockBodyScroll();\n }\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1246\n */\n var lockBodyScroll = function lockBodyScroll() {\n var container = getContainer();\n if (!container) {\n return;\n }\n /** @type {boolean} */\n var preventTouchMove;\n /**\n * @param {TouchEvent} event\n */\n container.ontouchstart = function (event) {\n preventTouchMove = shouldPreventTouchMove(event);\n };\n /**\n * @param {TouchEvent} event\n */\n container.ontouchmove = function (event) {\n if (preventTouchMove) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n };\n\n /**\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n var shouldPreventTouchMove = function shouldPreventTouchMove(event) {\n var target = event.target;\n var container = getContainer();\n var htmlContainer = getHtmlContainer();\n if (!container || !htmlContainer) {\n return false;\n }\n if (isStylus(event) || isZoom(event)) {\n return false;\n }\n if (target === container) {\n return true;\n }\n if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== 'INPUT' &&\n // #1603\n target.tagName !== 'TEXTAREA' &&\n // #2266\n !(isScrollable(htmlContainer) &&\n // #1944\n htmlContainer.contains(target))) {\n return true;\n }\n return false;\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1786\n *\n * @param {*} event\n * @returns {boolean}\n */\n var isStylus = function isStylus(event) {\n return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1891\n *\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n var isZoom = function isZoom(event) {\n return event.touches && event.touches.length > 1;\n };\n var undoIOSfix = function undoIOSfix() {\n if (hasClass(document.body, swalClasses.iosfix)) {\n var offset = parseInt(document.body.style.top, 10);\n removeClass(document.body, swalClasses.iosfix);\n document.body.style.top = '';\n document.body.scrollTop = offset * -1;\n }\n };\n\n /**\n * Measure scrollbar width for padding body during modal show/hide\n * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n *\n * @returns {number}\n */\n var measureScrollbar = function measureScrollbar() {\n var scrollDiv = document.createElement('div');\n scrollDiv.className = swalClasses['scrollbar-measure'];\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n };\n\n /**\n * Remember state in cases where opening and handling a modal will fiddle with it.\n * @type {number | null}\n */\n var previousBodyPadding = null;\n\n /**\n * @param {string} initialBodyOverflow\n */\n var replaceScrollbarWithPadding = function replaceScrollbarWithPadding(initialBodyOverflow) {\n // for queues, do not do this more than once\n if (previousBodyPadding !== null) {\n return;\n }\n // if the body has overflow\n if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663\n ) {\n // add padding so the content doesn't shift after removal of scrollbar\n previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n document.body.style.paddingRight = \"\".concat(previousBodyPadding + measureScrollbar(), \"px\");\n }\n };\n var undoReplaceScrollbarWithPadding = function undoReplaceScrollbarWithPadding() {\n if (previousBodyPadding !== null) {\n document.body.style.paddingRight = \"\".concat(previousBodyPadding, \"px\");\n previousBodyPadding = null;\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n function removePopupAndResetState(instance, container, returnFocus, didClose) {\n if (isToast()) {\n triggerDidCloseAndDispose(instance, didClose);\n } else {\n restoreActiveElement(returnFocus).then(function () {\n return triggerDidCloseAndDispose(instance, didClose);\n });\n removeKeydownHandler(globalState);\n }\n\n // workaround for https://github.com/sweetalert2/sweetalert2/issues/2088\n // for some reason removing the container in Safari will scroll the document to bottom\n if (isSafariOrIOS) {\n container.setAttribute('style', 'display:none !important');\n container.removeAttribute('class');\n container.innerHTML = '';\n } else {\n container.remove();\n }\n if (isModal()) {\n undoReplaceScrollbarWithPadding();\n undoIOSfix();\n unsetAriaHidden();\n }\n removeBodyClasses();\n }\n\n /**\n * Remove SweetAlert2 classes from body\n */\n function removeBodyClasses() {\n removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n }\n\n /**\n * Instance method to close sweetAlert\n *\n * @param {any} resolveValue\n */\n function close(resolveValue) {\n resolveValue = prepareResolveValue(resolveValue);\n var swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n var didClose = triggerClosePopup(this);\n if (this.isAwaitingPromise) {\n // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n if (!resolveValue.isDismissed) {\n handleAwaitingPromise(this);\n swalPromiseResolve(resolveValue);\n }\n } else if (didClose) {\n // Resolve Swal promise\n swalPromiseResolve(resolveValue);\n }\n }\n var triggerClosePopup = function triggerClosePopup(instance) {\n var popup = getPopup();\n if (!popup) {\n return false;\n }\n var innerParams = privateProps.innerParams.get(instance);\n if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n return false;\n }\n removeClass(popup, innerParams.showClass.popup);\n addClass(popup, innerParams.hideClass.popup);\n var backdrop = getContainer();\n removeClass(backdrop, innerParams.showClass.backdrop);\n addClass(backdrop, innerParams.hideClass.backdrop);\n handlePopupAnimation(instance, popup, innerParams);\n return true;\n };\n\n /**\n * @param {any} error\n */\n function rejectPromise(error) {\n var rejectPromise = privateMethods.swalPromiseReject.get(this);\n handleAwaitingPromise(this);\n if (rejectPromise) {\n // Reject Swal promise\n rejectPromise(error);\n }\n }\n\n /**\n * @param {SweetAlert} instance\n */\n var handleAwaitingPromise = function handleAwaitingPromise(instance) {\n if (instance.isAwaitingPromise) {\n delete instance.isAwaitingPromise;\n // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n if (!privateProps.innerParams.get(instance)) {\n instance._destroy();\n }\n }\n };\n\n /**\n * @param {any} resolveValue\n * @returns {SweetAlertResult}\n */\n var prepareResolveValue = function prepareResolveValue(resolveValue) {\n // When user calls Swal.close()\n if (typeof resolveValue === 'undefined') {\n return {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true\n };\n }\n return Object.assign({\n isConfirmed: false,\n isDenied: false,\n isDismissed: false\n }, resolveValue);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} innerParams\n */\n var handlePopupAnimation = function handlePopupAnimation(instance, popup, innerParams) {\n var container = getContainer();\n // If animation is supported, animate\n var animationIsSupported = animationEndEvent && hasCssAnimation(popup);\n if (typeof innerParams.willClose === 'function') {\n innerParams.willClose(popup);\n }\n if (animationIsSupported) {\n animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n } else {\n // Otherwise, remove immediately\n removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n var animatePopup = function animatePopup(instance, popup, container, returnFocus, didClose) {\n if (!animationEndEvent) {\n return;\n }\n globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n popup.addEventListener(animationEndEvent, function (e) {\n if (e.target === popup) {\n globalState.swalCloseEventFinishedCallback();\n delete globalState.swalCloseEventFinishedCallback;\n }\n });\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {Function} didClose\n */\n var triggerDidCloseAndDispose = function triggerDidCloseAndDispose(instance, didClose) {\n setTimeout(function () {\n if (typeof didClose === 'function') {\n didClose.bind(instance.params)();\n }\n // instance might have been destroyed already\n if (instance._destroy) {\n instance._destroy();\n }\n });\n };\n\n /**\n * Shows loader (spinner), this is useful with AJAX requests.\n * By default the loader be shown instead of the \"Confirm\" button.\n *\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n var showLoading = function showLoading(buttonToReplace) {\n var popup = getPopup();\n if (!popup) {\n new Swal(); // eslint-disable-line no-new\n }\n popup = getPopup();\n if (!popup) {\n return;\n }\n var loader = getLoader();\n if (isToast()) {\n hide(getIcon());\n } else {\n replaceButton(popup, buttonToReplace);\n }\n show(loader);\n popup.setAttribute('data-loading', 'true');\n popup.setAttribute('aria-busy', 'true');\n popup.focus();\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n var replaceButton = function replaceButton(popup, buttonToReplace) {\n var actions = getActions();\n var loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n buttonToReplace = getConfirmButton();\n }\n show(actions);\n if (buttonToReplace) {\n hide(buttonToReplace);\n loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n actions.insertBefore(loader, buttonToReplace);\n }\n addClass([popup, actions], swalClasses.loading);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var handleInputOptionsAndValue = function handleInputOptionsAndValue(instance, params) {\n if (params.input === 'select' || params.input === 'radio') {\n handleInputOptions(instance, params);\n } else if (['text', 'email', 'number', 'tel', 'textarea'].some(function (i) {\n return i === params.input;\n }) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n showLoading(getConfirmButton());\n handleInputValue(instance, params);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} innerParams\n * @returns {SweetAlertInputValue}\n */\n var getInputValue = function getInputValue(instance, innerParams) {\n var input = instance.getInput();\n if (!input) {\n return null;\n }\n switch (innerParams.input) {\n case 'checkbox':\n return getCheckboxValue(input);\n case 'radio':\n return getRadioValue(input);\n case 'file':\n return getFileValue(input);\n default:\n return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n * @returns {number}\n */\n var getCheckboxValue = function getCheckboxValue(input) {\n return input.checked ? 1 : 0;\n };\n\n /**\n * @param {HTMLInputElement} input\n * @returns {string | null}\n */\n var getRadioValue = function getRadioValue(input) {\n return input.checked ? input.value : null;\n };\n\n /**\n * @param {HTMLInputElement} input\n * @returns {FileList | File | null}\n */\n var getFileValue = function getFileValue(input) {\n return input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var handleInputOptions = function handleInputOptions(instance, params) {\n var popup = getPopup();\n if (!popup) {\n return;\n }\n /**\n * @param {Record<string, any>} inputOptions\n */\n var processInputOptions = function processInputOptions(inputOptions) {\n if (params.input === 'select') {\n populateSelectOptions(popup, formatInputOptions(inputOptions), params);\n } else if (params.input === 'radio') {\n populateRadioOptions(popup, formatInputOptions(inputOptions), params);\n }\n };\n if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n showLoading(getConfirmButton());\n asPromise(params.inputOptions).then(function (inputOptions) {\n instance.hideLoading();\n processInputOptions(inputOptions);\n });\n } else if (_typeof(params.inputOptions) === 'object') {\n processInputOptions(params.inputOptions);\n } else {\n error(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \".concat(_typeof(params.inputOptions)));\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n var handleInputValue = function handleInputValue(instance, params) {\n var input = instance.getInput();\n if (!input) {\n return;\n }\n hide(input);\n asPromise(params.inputValue).then(function (inputValue) {\n input.value = params.input === 'number' ? \"\".concat(parseFloat(inputValue) || 0) : \"\".concat(inputValue);\n show(input);\n input.focus();\n instance.hideLoading();\n })[\"catch\"](function (err) {\n error(\"Error in inputValue promise: \".concat(err));\n input.value = '';\n show(input);\n input.focus();\n instance.hideLoading();\n });\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {InputOptionFlattened[]} inputOptions\n * @param {SweetAlertOptions} params\n */\n function populateSelectOptions(popup, inputOptions, params) {\n var select = getDirectChildByClass(popup, swalClasses.select);\n if (!select) {\n return;\n }\n /**\n * @param {HTMLElement} parent\n * @param {string} optionLabel\n * @param {string} optionValue\n */\n var renderOption = function renderOption(parent, optionLabel, optionValue) {\n var option = document.createElement('option');\n option.value = optionValue;\n setInnerHtml(option, optionLabel);\n option.selected = isSelected(optionValue, params.inputValue);\n parent.appendChild(option);\n };\n inputOptions.forEach(function (inputOption) {\n var optionValue = inputOption[0];\n var optionLabel = inputOption[1];\n // <optgroup> spec:\n // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n // check whether this is a <optgroup>\n if (Array.isArray(optionLabel)) {\n // if it is an array, then it is an <optgroup>\n var optgroup = document.createElement('optgroup');\n optgroup.label = optionValue;\n optgroup.disabled = false; // not configurable for now\n select.appendChild(optgroup);\n optionLabel.forEach(function (o) {\n return renderOption(optgroup, o[1], o[0]);\n });\n } else {\n // case of <option>\n renderOption(select, optionLabel, optionValue);\n }\n });\n select.focus();\n }\n\n /**\n * @param {HTMLElement} popup\n * @param {InputOptionFlattened[]} inputOptions\n * @param {SweetAlertOptions} params\n */\n function populateRadioOptions(popup, inputOptions, params) {\n var radio = getDirectChildByClass(popup, swalClasses.radio);\n if (!radio) {\n return;\n }\n inputOptions.forEach(function (inputOption) {\n var radioValue = inputOption[0];\n var radioLabel = inputOption[1];\n var radioInput = document.createElement('input');\n var radioLabelElement = document.createElement('label');\n radioInput.type = 'radio';\n radioInput.name = swalClasses.radio;\n radioInput.value = radioValue;\n if (isSelected(radioValue, params.inputValue)) {\n radioInput.checked = true;\n }\n var label = document.createElement('span');\n setInnerHtml(label, radioLabel);\n label.className = swalClasses.label;\n radioLabelElement.appendChild(radioInput);\n radioLabelElement.appendChild(label);\n radio.appendChild(radioLabelElement);\n });\n var radios = radio.querySelectorAll('input');\n if (radios.length) {\n radios[0].focus();\n }\n }\n\n /**\n * Converts `inputOptions` into an array of `[value, label]`s\n *\n * @param {Record<string, any>} inputOptions\n * @typedef {string[]} InputOptionFlattened\n * @returns {InputOptionFlattened[]}\n */\n var formatInputOptions = function formatInputOptions(inputOptions) {\n /** @type {InputOptionFlattened[]} */\n var result = [];\n if (inputOptions instanceof Map) {\n inputOptions.forEach(function (value, key) {\n var valueFormatted = value;\n if (_typeof(valueFormatted) === 'object') {\n // case of <optgroup>\n valueFormatted = formatInputOptions(valueFormatted);\n }\n result.push([key, valueFormatted]);\n });\n } else {\n Object.keys(inputOptions).forEach(function (key) {\n var valueFormatted = inputOptions[key];\n if (_typeof(valueFormatted) === 'object') {\n // case of <optgroup>\n valueFormatted = formatInputOptions(valueFormatted);\n }\n result.push([key, valueFormatted]);\n });\n }\n return result;\n };\n\n /**\n * @param {string} optionValue\n * @param {SweetAlertInputValue} inputValue\n * @returns {boolean}\n */\n var isSelected = function isSelected(optionValue, inputValue) {\n return !!inputValue && inputValue.toString() === optionValue.toString();\n };\n\n var _this = undefined;\n\n /**\n * @param {SweetAlert} instance\n */\n var handleConfirmButtonClick = function handleConfirmButtonClick(instance) {\n var innerParams = privateProps.innerParams.get(instance);\n instance.disableButtons();\n if (innerParams.input) {\n handleConfirmOrDenyWithInput(instance, 'confirm');\n } else {\n confirm(instance, true);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n */\n var handleDenyButtonClick = function handleDenyButtonClick(instance) {\n var innerParams = privateProps.innerParams.get(instance);\n instance.disableButtons();\n if (innerParams.returnInputValueOnDeny) {\n handleConfirmOrDenyWithInput(instance, 'deny');\n } else {\n deny(instance, false);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {Function} dismissWith\n */\n var handleCancelButtonClick = function handleCancelButtonClick(instance, dismissWith) {\n instance.disableButtons();\n dismissWith(DismissReason.cancel);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {'confirm' | 'deny'} type\n */\n var handleConfirmOrDenyWithInput = function handleConfirmOrDenyWithInput(instance, type) {\n var innerParams = privateProps.innerParams.get(instance);\n if (!innerParams.input) {\n error(\"The \\\"input\\\" parameter is needed to be set when using returnInputValueOn\".concat(capitalizeFirstLetter(type)));\n return;\n }\n var input = instance.getInput();\n var inputValue = getInputValue(instance, innerParams);\n if (innerParams.inputValidator) {\n handleInputValidator(instance, inputValue, type);\n } else if (input && !input.checkValidity()) {\n instance.enableButtons();\n instance.showValidationMessage(innerParams.validationMessage);\n } else if (type === 'deny') {\n deny(instance, inputValue);\n } else {\n confirm(instance, inputValue);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertInputValue} inputValue\n * @param {'confirm' | 'deny'} type\n */\n var handleInputValidator = function handleInputValidator(instance, inputValue, type) {\n var innerParams = privateProps.innerParams.get(instance);\n instance.disableInput();\n var validationPromise = Promise.resolve().then(function () {\n return asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage));\n });\n validationPromise.then(function (validationMessage) {\n instance.enableButtons();\n instance.enableInput();\n if (validationMessage) {\n instance.showValidationMessage(validationMessage);\n } else if (type === 'deny') {\n deny(instance, inputValue);\n } else {\n confirm(instance, inputValue);\n }\n });\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {any} value\n */\n var deny = function deny(instance, value) {\n var innerParams = privateProps.innerParams.get(instance || _this);\n if (innerParams.showLoaderOnDeny) {\n showLoading(getDenyButton());\n }\n if (innerParams.preDeny) {\n instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received\n var preDenyPromise = Promise.resolve().then(function () {\n return asPromise(innerParams.preDeny(value, innerParams.validationMessage));\n });\n preDenyPromise.then(function (preDenyValue) {\n if (preDenyValue === false) {\n instance.hideLoading();\n handleAwaitingPromise(instance);\n } else {\n instance.close({\n isDenied: true,\n value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n });\n }\n })[\"catch\"](function (error) {\n return rejectWith(instance || _this, error);\n });\n } else {\n instance.close({\n isDenied: true,\n value: value\n });\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {any} value\n */\n var succeedWith = function succeedWith(instance, value) {\n instance.close({\n isConfirmed: true,\n value: value\n });\n };\n\n /**\n *\n * @param {SweetAlert} instance\n * @param {string} error\n */\n var rejectWith = function rejectWith(instance, error) {\n instance.rejectPromise(error);\n };\n\n /**\n *\n * @param {SweetAlert} instance\n * @param {any} value\n */\n var confirm = function confirm(instance, value) {\n var innerParams = privateProps.innerParams.get(instance || _this);\n if (innerParams.showLoaderOnConfirm) {\n showLoading();\n }\n if (innerParams.preConfirm) {\n instance.resetValidationMessage();\n instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received\n var preConfirmPromise = Promise.resolve().then(function () {\n return asPromise(innerParams.preConfirm(value, innerParams.validationMessage));\n });\n preConfirmPromise.then(function (preConfirmValue) {\n if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {\n instance.hideLoading();\n handleAwaitingPromise(instance);\n } else {\n succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n }\n })[\"catch\"](function (error) {\n return rejectWith(instance || _this, error);\n });\n } else {\n succeedWith(instance, value);\n }\n };\n\n /**\n * Hides loader and shows back the button which was hidden by .showLoading()\n */\n function hideLoading() {\n // do nothing if popup is closed\n var innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n return;\n }\n var domCache = privateProps.domCache.get(this);\n hide(domCache.loader);\n if (isToast()) {\n if (innerParams.icon) {\n show(getIcon());\n }\n } else {\n showRelatedButton(domCache);\n }\n removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n domCache.popup.removeAttribute('aria-busy');\n domCache.popup.removeAttribute('data-loading');\n domCache.confirmButton.disabled = false;\n domCache.denyButton.disabled = false;\n domCache.cancelButton.disabled = false;\n }\n var showRelatedButton = function showRelatedButton(domCache) {\n var buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n if (buttonToReplace.length) {\n show(buttonToReplace[0], 'inline-block');\n } else if (allButtonsAreHidden()) {\n hide(domCache.actions);\n }\n };\n\n /**\n * Gets the input DOM node, this method works with input parameter.\n *\n * @returns {HTMLInputElement | null}\n */\n function getInput() {\n var innerParams = privateProps.innerParams.get(this);\n var domCache = privateProps.domCache.get(this);\n if (!domCache) {\n return null;\n }\n return getInput$1(domCache.popup, innerParams.input);\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {string[]} buttons\n * @param {boolean} disabled\n */\n function setButtonsDisabled(instance, buttons, disabled) {\n var domCache = privateProps.domCache.get(instance);\n buttons.forEach(function (button) {\n domCache[button].disabled = disabled;\n });\n }\n\n /**\n * @param {HTMLInputElement | null} input\n * @param {boolean} disabled\n */\n function setInputDisabled(input, disabled) {\n var popup = getPopup();\n if (!popup || !input) {\n return;\n }\n if (input.type === 'radio') {\n /** @type {NodeListOf<HTMLInputElement>} */\n var radios = popup.querySelectorAll(\"[name=\\\"\".concat(swalClasses.radio, \"\\\"]\"));\n for (var i = 0; i < radios.length; i++) {\n radios[i].disabled = disabled;\n }\n } else {\n input.disabled = disabled;\n }\n }\n\n /**\n * Enable all the buttons\n * @this {SweetAlert}\n */\n function enableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n }\n\n /**\n * Disable all the buttons\n * @this {SweetAlert}\n */\n function disableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n }\n\n /**\n * Enable the input field\n * @this {SweetAlert}\n */\n function enableInput() {\n setInputDisabled(this.getInput(), false);\n }\n\n /**\n * Disable the input field\n * @this {SweetAlert}\n */\n function disableInput() {\n setInputDisabled(this.getInput(), true);\n }\n\n /**\n * Show block with validation message\n *\n * @param {string} error\n * @this {SweetAlert}\n */\n function showValidationMessage(error) {\n var domCache = privateProps.domCache.get(this);\n var params = privateProps.innerParams.get(this);\n setInnerHtml(domCache.validationMessage, error);\n domCache.validationMessage.className = swalClasses['validation-message'];\n if (params.customClass && params.customClass.validationMessage) {\n addClass(domCache.validationMessage, params.customClass.validationMessage);\n }\n show(domCache.validationMessage);\n var input = this.getInput();\n if (input) {\n input.setAttribute('aria-invalid', 'true');\n input.setAttribute('aria-describedby', swalClasses['validation-message']);\n focusInput(input);\n addClass(input, swalClasses.inputerror);\n }\n }\n\n /**\n * Hide block with validation message\n *\n * @this {SweetAlert}\n */\n function resetValidationMessage() {\n var domCache = privateProps.domCache.get(this);\n if (domCache.validationMessage) {\n hide(domCache.validationMessage);\n }\n var input = this.getInput();\n if (input) {\n input.removeAttribute('aria-invalid');\n input.removeAttribute('aria-describedby');\n removeClass(input, swalClasses.inputerror);\n }\n }\n\n var defaultParams = {\n title: '',\n titleText: '',\n text: '',\n html: '',\n footer: '',\n icon: undefined,\n iconColor: undefined,\n iconHtml: undefined,\n template: undefined,\n toast: false,\n animation: true,\n showClass: {\n popup: 'swal2-show',\n backdrop: 'swal2-backdrop-show',\n icon: 'swal2-icon-show'\n },\n hideClass: {\n popup: 'swal2-hide',\n backdrop: 'swal2-backdrop-hide',\n icon: 'swal2-icon-hide'\n },\n customClass: {},\n target: 'body',\n color: undefined,\n backdrop: true,\n heightAuto: true,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n stopKeydownPropagation: true,\n keydownListenerCapture: false,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n preConfirm: undefined,\n preDeny: undefined,\n confirmButtonText: 'OK',\n confirmButtonAriaLabel: '',\n confirmButtonColor: undefined,\n denyButtonText: 'No',\n denyButtonAriaLabel: '',\n denyButtonColor: undefined,\n cancelButtonText: 'Cancel',\n cancelButtonAriaLabel: '',\n cancelButtonColor: undefined,\n buttonsStyling: true,\n reverseButtons: false,\n focusConfirm: true,\n focusDeny: false,\n focusCancel: false,\n returnFocus: true,\n showCloseButton: false,\n closeButtonHtml: '×',\n closeButtonAriaLabel: 'Close this dialog',\n loaderHtml: '',\n showLoaderOnConfirm: false,\n showLoaderOnDeny: false,\n imageUrl: undefined,\n imageWidth: undefined,\n imageHeight: undefined,\n imageAlt: '',\n timer: undefined,\n timerProgressBar: false,\n width: undefined,\n padding: undefined,\n background: undefined,\n input: undefined,\n inputPlaceholder: '',\n inputLabel: '',\n inputValue: '',\n inputOptions: {},\n inputAutoFocus: true,\n inputAutoTrim: true,\n inputAttributes: {},\n inputValidator: undefined,\n returnInputValueOnDeny: false,\n validationMessage: undefined,\n grow: false,\n position: 'center',\n progressSteps: [],\n currentProgressStep: undefined,\n progressStepsDistance: undefined,\n willOpen: undefined,\n didOpen: undefined,\n didRender: undefined,\n willClose: undefined,\n didClose: undefined,\n didDestroy: undefined,\n scrollbarPadding: true\n };\n var updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose'];\n\n /** @type {Record<string, string>} */\n var deprecatedParams = {};\n var toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n\n /**\n * Is valid parameter\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n var isValidParameter = function isValidParameter(paramName) {\n return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n };\n\n /**\n * Is valid parameter for Swal.update() method\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n var isUpdatableParameter = function isUpdatableParameter(paramName) {\n return updatableParams.indexOf(paramName) !== -1;\n };\n\n /**\n * Is deprecated parameter\n *\n * @param {string} paramName\n * @returns {string | undefined}\n */\n var isDeprecatedParameter = function isDeprecatedParameter(paramName) {\n return deprecatedParams[paramName];\n };\n\n /**\n * @param {string} param\n */\n var checkIfParamIsValid = function checkIfParamIsValid(param) {\n if (!isValidParameter(param)) {\n warn(\"Unknown parameter \\\"\".concat(param, \"\\\"\"));\n }\n };\n\n /**\n * @param {string} param\n */\n var checkIfToastParamIsValid = function checkIfToastParamIsValid(param) {\n if (toastIncompatibleParams.includes(param)) {\n warn(\"The parameter \\\"\".concat(param, \"\\\" is incompatible with toasts\"));\n }\n };\n\n /**\n * @param {string} param\n */\n var checkIfParamIsDeprecated = function checkIfParamIsDeprecated(param) {\n var isDeprecated = isDeprecatedParameter(param);\n if (isDeprecated) {\n warnAboutDeprecation(param, isDeprecated);\n }\n };\n\n /**\n * Show relevant warnings for given params\n *\n * @param {SweetAlertOptions} params\n */\n var showWarningsForParams = function showWarningsForParams(params) {\n if (params.backdrop === false && params.allowOutsideClick) {\n warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n }\n for (var param in params) {\n checkIfParamIsValid(param);\n if (params.toast) {\n checkIfToastParamIsValid(param);\n }\n checkIfParamIsDeprecated(param);\n }\n };\n\n /**\n * Updates popup parameters.\n *\n * @param {SweetAlertOptions} params\n */\n function update(params) {\n var popup = getPopup();\n var innerParams = privateProps.innerParams.get(this);\n if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n warn(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");\n return;\n }\n var validUpdatableParams = filterValidParams(params);\n var updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n render(this, updatedParams);\n privateProps.innerParams.set(this, updatedParams);\n Object.defineProperties(this, {\n params: {\n value: Object.assign({}, this.params, params),\n writable: false,\n enumerable: true\n }\n });\n }\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {SweetAlertOptions}\n */\n var filterValidParams = function filterValidParams(params) {\n var validUpdatableParams = {};\n Object.keys(params).forEach(function (param) {\n if (isUpdatableParameter(param)) {\n validUpdatableParams[param] = params[param];\n } else {\n warn(\"Invalid parameter to update: \".concat(param));\n }\n });\n return validUpdatableParams;\n };\n\n /**\n * Dispose the current SweetAlert2 instance\n */\n function _destroy() {\n var domCache = privateProps.domCache.get(this);\n var innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335\n return; // This instance has already been destroyed\n }\n\n // Check if there is another Swal closing\n if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n globalState.swalCloseEventFinishedCallback();\n delete globalState.swalCloseEventFinishedCallback;\n }\n if (typeof innerParams.didDestroy === 'function') {\n innerParams.didDestroy();\n }\n disposeSwal(this);\n }\n\n /**\n * @param {SweetAlert} instance\n */\n var disposeSwal = function disposeSwal(instance) {\n disposeWeakMaps(instance);\n // Unset this.params so GC will dispose it (#1569)\n delete instance.params;\n // Unset globalState props so GC will dispose globalState (#1569)\n delete globalState.keydownHandler;\n delete globalState.keydownTarget;\n // Unset currentInstance\n delete globalState.currentInstance;\n };\n\n /**\n * @param {SweetAlert} instance\n */\n var disposeWeakMaps = function disposeWeakMaps(instance) {\n // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335\n if (instance.isAwaitingPromise) {\n unsetWeakMaps(privateProps, instance);\n instance.isAwaitingPromise = true;\n } else {\n unsetWeakMaps(privateMethods, instance);\n unsetWeakMaps(privateProps, instance);\n delete instance.isAwaitingPromise;\n // Unset instance methods\n delete instance.disableButtons;\n delete instance.enableButtons;\n delete instance.getInput;\n delete instance.disableInput;\n delete instance.enableInput;\n delete instance.hideLoading;\n delete instance.disableLoading;\n delete instance.showValidationMessage;\n delete instance.resetValidationMessage;\n delete instance.close;\n delete instance.closePopup;\n delete instance.closeModal;\n delete instance.closeToast;\n delete instance.rejectPromise;\n delete instance.update;\n delete instance._destroy;\n }\n };\n\n /**\n * @param {object} obj\n * @param {SweetAlert} instance\n */\n var unsetWeakMaps = function unsetWeakMaps(obj, instance) {\n for (var i in obj) {\n obj[i][\"delete\"](instance);\n }\n };\n\n var instanceMethods = /*#__PURE__*/Object.freeze({\n __proto__: null,\n _destroy: _destroy,\n close: close,\n closeModal: close,\n closePopup: close,\n closeToast: close,\n disableButtons: disableButtons,\n disableInput: disableInput,\n disableLoading: hideLoading,\n enableButtons: enableButtons,\n enableInput: enableInput,\n getInput: getInput,\n handleAwaitingPromise: handleAwaitingPromise,\n hideLoading: hideLoading,\n rejectPromise: rejectPromise,\n resetValidationMessage: resetValidationMessage,\n showValidationMessage: showValidationMessage,\n update: update\n });\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n var handlePopupClick = function handlePopupClick(innerParams, domCache, dismissWith) {\n if (innerParams.toast) {\n handleToastClick(innerParams, domCache, dismissWith);\n } else {\n // Ignore click events that had mousedown on the popup but mouseup on the container\n // This can happen when the user drags a slider\n handleModalMousedown(domCache);\n\n // Ignore click events that had mousedown on the container but mouseup on the popup\n handleContainerMousedown(domCache);\n handleModalClick(innerParams, domCache, dismissWith);\n }\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n var handleToastClick = function handleToastClick(innerParams, domCache, dismissWith) {\n // Closing toast by internal click\n domCache.popup.onclick = function () {\n if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {\n return;\n }\n dismissWith(DismissReason.close);\n };\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @returns {boolean}\n */\n var isAnyButtonShown = function isAnyButtonShown(innerParams) {\n return !!(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton);\n };\n var ignoreOutsideClick = false;\n\n /**\n * @param {DomCache} domCache\n */\n var handleModalMousedown = function handleModalMousedown(domCache) {\n domCache.popup.onmousedown = function () {\n domCache.container.onmouseup = function (e) {\n domCache.container.onmouseup = function () {};\n // We only check if the mouseup target is the container because usually it doesn't\n // have any other direct children aside of the popup\n if (e.target === domCache.container) {\n ignoreOutsideClick = true;\n }\n };\n };\n };\n\n /**\n * @param {DomCache} domCache\n */\n var handleContainerMousedown = function handleContainerMousedown(domCache) {\n domCache.container.onmousedown = function () {\n domCache.popup.onmouseup = function (e) {\n domCache.popup.onmouseup = function () {};\n // We also need to check if the mouseup target is a child of the popup\n if (e.target === domCache.popup || e.target instanceof HTMLElement && domCache.popup.contains(e.target)) {\n ignoreOutsideClick = true;\n }\n };\n };\n };\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {DomCache} domCache\n * @param {Function} dismissWith\n */\n var handleModalClick = function handleModalClick(innerParams, domCache, dismissWith) {\n domCache.container.onclick = function (e) {\n if (ignoreOutsideClick) {\n ignoreOutsideClick = false;\n return;\n }\n if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {\n dismissWith(DismissReason.backdrop);\n }\n };\n };\n\n var isJqueryElement = function isJqueryElement(elem) {\n return _typeof(elem) === 'object' && elem.jquery;\n };\n var isElement = function isElement(elem) {\n return elem instanceof Element || isJqueryElement(elem);\n };\n var argsToParams = function argsToParams(args) {\n var params = {};\n if (_typeof(args[0]) === 'object' && !isElement(args[0])) {\n Object.assign(params, args[0]);\n } else {\n ['title', 'html', 'icon'].forEach(function (name, index) {\n var arg = args[index];\n if (typeof arg === 'string' || isElement(arg)) {\n params[name] = arg;\n } else if (arg !== undefined) {\n error(\"Unexpected type of \".concat(name, \"! Expected \\\"string\\\" or \\\"Element\\\", got \").concat(_typeof(arg)));\n }\n });\n }\n return params;\n };\n\n /**\n * Main method to create a new SweetAlert2 popup\n *\n * @param {...SweetAlertOptions} args\n * @returns {Promise<SweetAlertResult>}\n */\n function fire() {\n var Swal = this; // eslint-disable-line @typescript-eslint/no-this-alias\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return _construct(Swal, args);\n }\n\n /**\n * Returns an extended version of `Swal` containing `params` as defaults.\n * Useful for reusing Swal configuration.\n *\n * For example:\n *\n * Before:\n * const textPromptOptions = { input: 'text', showCancelButton: true }\n * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })\n * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })\n *\n * After:\n * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })\n * const {value: firstName} = await TextPrompt('What is your first name?')\n * const {value: lastName} = await TextPrompt('What is your last name?')\n *\n * @param {SweetAlertOptions} mixinParams\n * @returns {SweetAlert}\n */\n function mixin(mixinParams) {\n var MixinSwal = /*#__PURE__*/function (_this) {\n _inherits(MixinSwal, _this);\n function MixinSwal() {\n _classCallCheck(this, MixinSwal);\n return _callSuper(this, MixinSwal, arguments);\n }\n _createClass(MixinSwal, [{\n key: \"_main\",\n value: function _main(params, priorityMixinParams) {\n return _get(_getPrototypeOf(MixinSwal.prototype), \"_main\", this).call(this, params, Object.assign({}, mixinParams, priorityMixinParams));\n }\n }]);\n return MixinSwal;\n }(this); // @ts-ignore\n return MixinSwal;\n }\n\n /**\n * If `timer` parameter is set, returns number of milliseconds of timer remained.\n * Otherwise, returns undefined.\n *\n * @returns {number | undefined}\n */\n var getTimerLeft = function getTimerLeft() {\n return globalState.timeout && globalState.timeout.getTimerLeft();\n };\n\n /**\n * Stop timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n var stopTimer = function stopTimer() {\n if (globalState.timeout) {\n stopTimerProgressBar();\n return globalState.timeout.stop();\n }\n };\n\n /**\n * Resume timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n var resumeTimer = function resumeTimer() {\n if (globalState.timeout) {\n var remaining = globalState.timeout.start();\n animateTimerProgressBar(remaining);\n return remaining;\n }\n };\n\n /**\n * Resume timer. Returns number of milliseconds of timer remained.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @returns {number | undefined}\n */\n var toggleTimer = function toggleTimer() {\n var timer = globalState.timeout;\n return timer && (timer.running ? stopTimer() : resumeTimer());\n };\n\n /**\n * Increase timer. Returns number of milliseconds of an updated timer.\n * If `timer` parameter isn't set, returns undefined.\n *\n * @param {number} ms\n * @returns {number | undefined}\n */\n var increaseTimer = function increaseTimer(ms) {\n if (globalState.timeout) {\n var remaining = globalState.timeout.increase(ms);\n animateTimerProgressBar(remaining, true);\n return remaining;\n }\n };\n\n /**\n * Check if timer is running. Returns true if timer is running\n * or false if timer is paused or stopped.\n * If `timer` parameter isn't set, returns undefined\n *\n * @returns {boolean}\n */\n var isTimerRunning = function isTimerRunning() {\n return !!(globalState.timeout && globalState.timeout.isRunning());\n };\n\n var bodyClickListenerAdded = false;\n var clickHandlers = {};\n\n /**\n * @param {string} attr\n */\n function bindClickHandler() {\n var attr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'data-swal-template';\n clickHandlers[attr] = this;\n if (!bodyClickListenerAdded) {\n document.body.addEventListener('click', bodyClickListener);\n bodyClickListenerAdded = true;\n }\n }\n var bodyClickListener = function bodyClickListener(event) {\n for (var el = event.target; el && el !== document; el = el.parentNode) {\n for (var attr in clickHandlers) {\n var template = el.getAttribute(attr);\n if (template) {\n clickHandlers[attr].fire({\n template: template\n });\n return;\n }\n }\n }\n };\n\n var staticMethods = /*#__PURE__*/Object.freeze({\n __proto__: null,\n argsToParams: argsToParams,\n bindClickHandler: bindClickHandler,\n clickCancel: clickCancel,\n clickConfirm: clickConfirm,\n clickDeny: clickDeny,\n enableLoading: showLoading,\n fire: fire,\n getActions: getActions,\n getCancelButton: getCancelButton,\n getCloseButton: getCloseButton,\n getConfirmButton: getConfirmButton,\n getContainer: getContainer,\n getDenyButton: getDenyButton,\n getFocusableElements: getFocusableElements,\n getFooter: getFooter,\n getHtmlContainer: getHtmlContainer,\n getIcon: getIcon,\n getIconContent: getIconContent,\n getImage: getImage,\n getInputLabel: getInputLabel,\n getLoader: getLoader,\n getPopup: getPopup,\n getProgressSteps: getProgressSteps,\n getTimerLeft: getTimerLeft,\n getTimerProgressBar: getTimerProgressBar,\n getTitle: getTitle,\n getValidationMessage: getValidationMessage,\n increaseTimer: increaseTimer,\n isDeprecatedParameter: isDeprecatedParameter,\n isLoading: isLoading,\n isTimerRunning: isTimerRunning,\n isUpdatableParameter: isUpdatableParameter,\n isValidParameter: isValidParameter,\n isVisible: isVisible,\n mixin: mixin,\n resumeTimer: resumeTimer,\n showLoading: showLoading,\n stopTimer: stopTimer,\n toggleTimer: toggleTimer\n });\n\n var Timer = /*#__PURE__*/function () {\n /**\n * @param {Function} callback\n * @param {number} delay\n */\n function Timer(callback, delay) {\n _classCallCheck(this, Timer);\n this.callback = callback;\n this.remaining = delay;\n this.running = false;\n this.start();\n }\n\n /**\n * @returns {number}\n */\n _createClass(Timer, [{\n key: \"start\",\n value: function start() {\n if (!this.running) {\n this.running = true;\n this.started = new Date();\n this.id = setTimeout(this.callback, this.remaining);\n }\n return this.remaining;\n }\n\n /**\n * @returns {number}\n */\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started && this.running) {\n this.running = false;\n clearTimeout(this.id);\n this.remaining -= new Date().getTime() - this.started.getTime();\n }\n return this.remaining;\n }\n\n /**\n * @param {number} n\n * @returns {number}\n */\n }, {\n key: \"increase\",\n value: function increase(n) {\n var running = this.running;\n if (running) {\n this.stop();\n }\n this.remaining += n;\n if (running) {\n this.start();\n }\n return this.remaining;\n }\n\n /**\n * @returns {number}\n */\n }, {\n key: \"getTimerLeft\",\n value: function getTimerLeft() {\n if (this.running) {\n this.stop();\n this.start();\n }\n return this.remaining;\n }\n\n /**\n * @returns {boolean}\n */\n }, {\n key: \"isRunning\",\n value: function isRunning() {\n return this.running;\n }\n }]);\n return Timer;\n }();\n\n var swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {SweetAlertOptions}\n */\n var getTemplateParams = function getTemplateParams(params) {\n /** @type {HTMLTemplateElement} */\n var template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template;\n if (!template) {\n return {};\n }\n /** @type {DocumentFragment} */\n var templateContent = template.content;\n showWarningsForElements(templateContent);\n var result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {SweetAlertOptions}\n */\n var getSwalParams = function getSwalParams(templateContent) {\n var result = {};\n /** @type {HTMLElement[]} */\n var swalParams = Array.from(templateContent.querySelectorAll('swal-param'));\n swalParams.forEach(function (param) {\n showWarningsForAttributes(param, ['name', 'value']);\n var paramName = param.getAttribute('name');\n var value = param.getAttribute('value');\n if (typeof defaultParams[paramName] === 'boolean') {\n result[paramName] = value !== 'false';\n } else if (_typeof(defaultParams[paramName]) === 'object') {\n result[paramName] = JSON.parse(value);\n } else {\n result[paramName] = value;\n }\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {SweetAlertOptions}\n */\n var getSwalFunctionParams = function getSwalFunctionParams(templateContent) {\n var result = {};\n /** @type {HTMLElement[]} */\n var swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));\n swalFunctions.forEach(function (param) {\n var paramName = param.getAttribute('name');\n var value = param.getAttribute('value');\n result[paramName] = new Function(\"return \".concat(value))();\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {SweetAlertOptions}\n */\n var getSwalButtons = function getSwalButtons(templateContent) {\n var result = {};\n /** @type {HTMLElement[]} */\n var swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));\n swalButtons.forEach(function (button) {\n showWarningsForAttributes(button, ['type', 'color', 'aria-label']);\n var type = button.getAttribute('type');\n result[\"\".concat(type, \"ButtonText\")] = button.innerHTML;\n result[\"show\".concat(capitalizeFirstLetter(type), \"Button\")] = true;\n if (button.hasAttribute('color')) {\n result[\"\".concat(type, \"ButtonColor\")] = button.getAttribute('color');\n }\n if (button.hasAttribute('aria-label')) {\n result[\"\".concat(type, \"ButtonAriaLabel\")] = button.getAttribute('aria-label');\n }\n });\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {SweetAlertOptions}\n */\n var getSwalImage = function getSwalImage(templateContent) {\n var result = {};\n /** @type {HTMLElement} */\n var image = templateContent.querySelector('swal-image');\n if (image) {\n showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);\n if (image.hasAttribute('src')) {\n result.imageUrl = image.getAttribute('src');\n }\n if (image.hasAttribute('width')) {\n result.imageWidth = image.getAttribute('width');\n }\n if (image.hasAttribute('height')) {\n result.imageHeight = image.getAttribute('height');\n }\n if (image.hasAttribute('alt')) {\n result.imageAlt = image.getAttribute('alt');\n }\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {SweetAlertOptions}\n */\n var getSwalIcon = function getSwalIcon(templateContent) {\n var result = {};\n /** @type {HTMLElement} */\n var icon = templateContent.querySelector('swal-icon');\n if (icon) {\n showWarningsForAttributes(icon, ['type', 'color']);\n if (icon.hasAttribute('type')) {\n /** @type {SweetAlertIcon} */\n // @ts-ignore\n result.icon = icon.getAttribute('type');\n }\n if (icon.hasAttribute('color')) {\n result.iconColor = icon.getAttribute('color');\n }\n result.iconHtml = icon.innerHTML;\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @returns {SweetAlertOptions}\n */\n var getSwalInput = function getSwalInput(templateContent) {\n var result = {};\n /** @type {HTMLElement} */\n var input = templateContent.querySelector('swal-input');\n if (input) {\n showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);\n /** @type {SweetAlertInput} */\n // @ts-ignore\n result.input = input.getAttribute('type') || 'text';\n if (input.hasAttribute('label')) {\n result.inputLabel = input.getAttribute('label');\n }\n if (input.hasAttribute('placeholder')) {\n result.inputPlaceholder = input.getAttribute('placeholder');\n }\n if (input.hasAttribute('value')) {\n result.inputValue = input.getAttribute('value');\n }\n }\n /** @type {HTMLElement[]} */\n var inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));\n if (inputOptions.length) {\n result.inputOptions = {};\n inputOptions.forEach(function (option) {\n showWarningsForAttributes(option, ['value']);\n var optionValue = option.getAttribute('value');\n var optionName = option.innerHTML;\n result.inputOptions[optionValue] = optionName;\n });\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n * @param {string[]} paramNames\n * @returns {SweetAlertOptions}\n */\n var getSwalStringParams = function getSwalStringParams(templateContent, paramNames) {\n var result = {};\n for (var i in paramNames) {\n var paramName = paramNames[i];\n /** @type {HTMLElement} */\n var tag = templateContent.querySelector(paramName);\n if (tag) {\n showWarningsForAttributes(tag, []);\n result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();\n }\n }\n return result;\n };\n\n /**\n * @param {DocumentFragment} templateContent\n */\n var showWarningsForElements = function showWarningsForElements(templateContent) {\n var allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);\n Array.from(templateContent.children).forEach(function (el) {\n var tagName = el.tagName.toLowerCase();\n if (!allowedElements.includes(tagName)) {\n warn(\"Unrecognized element <\".concat(tagName, \">\"));\n }\n });\n };\n\n /**\n * @param {HTMLElement} el\n * @param {string[]} allowedAttributes\n */\n var showWarningsForAttributes = function showWarningsForAttributes(el, allowedAttributes) {\n Array.from(el.attributes).forEach(function (attribute) {\n if (allowedAttributes.indexOf(attribute.name) === -1) {\n warn([\"Unrecognized attribute \\\"\".concat(attribute.name, \"\\\" on <\").concat(el.tagName.toLowerCase(), \">.\"), \"\".concat(allowedAttributes.length ? \"Allowed attributes are: \".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]);\n }\n });\n };\n\n var SHOW_CLASS_TIMEOUT = 10;\n\n /**\n * Open popup, add necessary classes and styles, fix scrollbar\n *\n * @param {SweetAlertOptions} params\n */\n var openPopup = function openPopup(params) {\n var container = getContainer();\n var popup = getPopup();\n if (typeof params.willOpen === 'function') {\n params.willOpen(popup);\n }\n var bodyStyles = window.getComputedStyle(document.body);\n var initialBodyOverflow = bodyStyles.overflowY;\n addClasses(container, popup, params);\n\n // scrolling is 'hidden' until animation is done, after that 'auto'\n setTimeout(function () {\n setScrollingVisibility(container, popup);\n }, SHOW_CLASS_TIMEOUT);\n if (isModal()) {\n fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n setAriaHidden();\n }\n if (!isToast() && !globalState.previousActiveElement) {\n globalState.previousActiveElement = document.activeElement;\n }\n if (typeof params.didOpen === 'function') {\n setTimeout(function () {\n return params.didOpen(popup);\n });\n }\n removeClass(container, swalClasses['no-transition']);\n };\n\n /**\n * @param {AnimationEvent} event\n */\n var swalOpenAnimationFinished = function swalOpenAnimationFinished(event) {\n var popup = getPopup();\n if (event.target !== popup || !animationEndEvent) {\n return;\n }\n var container = getContainer();\n popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);\n container.style.overflowY = 'auto';\n };\n\n /**\n * @param {HTMLElement} container\n * @param {HTMLElement} popup\n */\n var setScrollingVisibility = function setScrollingVisibility(container, popup) {\n if (animationEndEvent && hasCssAnimation(popup)) {\n container.style.overflowY = 'hidden';\n popup.addEventListener(animationEndEvent, swalOpenAnimationFinished);\n } else {\n container.style.overflowY = 'auto';\n }\n };\n\n /**\n * @param {HTMLElement} container\n * @param {boolean} scrollbarPadding\n * @param {string} initialBodyOverflow\n */\n var fixScrollContainer = function fixScrollContainer(container, scrollbarPadding, initialBodyOverflow) {\n iOSfix();\n if (scrollbarPadding && initialBodyOverflow !== 'hidden') {\n replaceScrollbarWithPadding(initialBodyOverflow);\n }\n\n // sweetalert2/issues/1247\n setTimeout(function () {\n container.scrollTop = 0;\n });\n };\n\n /**\n * @param {HTMLElement} container\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n var addClasses = function addClasses(container, popup, params) {\n addClass(container, params.showClass.backdrop);\n if (params.animation) {\n // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059\n popup.style.setProperty('opacity', '0', 'important');\n show(popup, 'grid');\n setTimeout(function () {\n // Animate popup right after showing it\n addClass(popup, params.showClass.popup);\n // and remove the opacity workaround\n popup.style.removeProperty('opacity');\n }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062\n } else {\n show(popup, 'grid');\n }\n addClass([document.documentElement, document.body], swalClasses.shown);\n if (params.heightAuto && params.backdrop && !params.toast) {\n addClass([document.documentElement, document.body], swalClasses['height-auto']);\n }\n };\n\n var defaultInputValidators = {\n /**\n * @param {string} string\n * @param {string} [validationMessage]\n * @returns {Promise<string | void>}\n */\n email: function email(string, validationMessage) {\n return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');\n },\n /**\n * @param {string} string\n * @param {string} [validationMessage]\n * @returns {Promise<string | void>}\n */\n url: function url(string, validationMessage) {\n // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013\n return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n function setDefaultInputValidators(params) {\n // Use default `inputValidator` for supported input types if not provided\n if (params.inputValidator) {\n return;\n }\n if (params.input === 'email') {\n params.inputValidator = defaultInputValidators['email'];\n }\n if (params.input === 'url') {\n params.inputValidator = defaultInputValidators['url'];\n }\n }\n\n /**\n * @param {SweetAlertOptions} params\n */\n function validateCustomTargetElement(params) {\n // Determine if the custom target element is valid\n if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {\n warn('Target parameter is not valid, defaulting to \"body\"');\n params.target = 'body';\n }\n }\n\n /**\n * Set type, text and actions on popup\n *\n * @param {SweetAlertOptions} params\n */\n function setParameters(params) {\n setDefaultInputValidators(params);\n\n // showLoaderOnConfirm && preConfirm\n if (params.showLoaderOnConfirm && !params.preConfirm) {\n warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\\n' + 'https://sweetalert2.github.io/#ajax-request');\n }\n validateCustomTargetElement(params);\n\n // Replace newlines with <br> in title\n if (typeof params.title === 'string') {\n params.title = params.title.split('\\n').join('<br />');\n }\n init(params);\n }\n\n /** @type {SweetAlert} */\n var currentInstance;\n var _promise = /*#__PURE__*/new WeakMap();\n var SweetAlert = /*#__PURE__*/function () {\n /**\n * @param {...any} args\n * @this {SweetAlert}\n */\n function SweetAlert() {\n _classCallCheck(this, SweetAlert);\n /**\n * @type {Promise<SweetAlertResult>}\n */\n _classPrivateFieldInitSpec(this, _promise, {\n writable: true,\n value: void 0\n });\n // Prevent run in Node env\n if (typeof window === 'undefined') {\n return;\n }\n currentInstance = this;\n\n // @ts-ignore\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var outerParams = Object.freeze(this.constructor.argsToParams(args));\n\n /** @type {Readonly<SweetAlertOptions>} */\n this.params = outerParams;\n\n /** @type {boolean} */\n this.isAwaitingPromise = false;\n _classPrivateFieldSet(this, _promise, this._main(currentInstance.params));\n }\n _createClass(SweetAlert, [{\n key: \"_main\",\n value: function _main(userParams) {\n var mixinParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n showWarningsForParams(Object.assign({}, mixinParams, userParams));\n if (globalState.currentInstance) {\n var swalPromiseResolve = privateMethods.swalPromiseResolve.get(globalState.currentInstance);\n var isAwaitingPromise = globalState.currentInstance.isAwaitingPromise;\n globalState.currentInstance._destroy();\n if (!isAwaitingPromise) {\n swalPromiseResolve({\n isDismissed: true\n });\n }\n if (isModal()) {\n unsetAriaHidden();\n }\n }\n globalState.currentInstance = currentInstance;\n var innerParams = prepareParams(userParams, mixinParams);\n setParameters(innerParams);\n Object.freeze(innerParams);\n\n // clear the previous timer\n if (globalState.timeout) {\n globalState.timeout.stop();\n delete globalState.timeout;\n }\n\n // clear the restore focus timeout\n clearTimeout(globalState.restoreFocusTimeout);\n var domCache = populateDomCache(currentInstance);\n render(currentInstance, innerParams);\n privateProps.innerParams.set(currentInstance, innerParams);\n return swalPromise(currentInstance, domCache, innerParams);\n }\n\n // `catch` cannot be the name of a module export, so we define our thenable methods here instead\n }, {\n key: \"then\",\n value: function then(onFulfilled) {\n return _classPrivateFieldGet(this, _promise).then(onFulfilled);\n }\n }, {\n key: \"finally\",\n value: function _finally(onFinally) {\n return _classPrivateFieldGet(this, _promise)[\"finally\"](onFinally);\n }\n }]);\n return SweetAlert;\n }();\n\n /**\n * @param {SweetAlert} instance\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n * @returns {Promise}\n */\n var swalPromise = function swalPromise(instance, domCache, innerParams) {\n return new Promise(function (resolve, reject) {\n // functions to handle all closings/dismissals\n /**\n * @param {DismissReason} dismiss\n */\n var dismissWith = function dismissWith(dismiss) {\n instance.close({\n isDismissed: true,\n dismiss: dismiss\n });\n };\n privateMethods.swalPromiseResolve.set(instance, resolve);\n privateMethods.swalPromiseReject.set(instance, reject);\n domCache.confirmButton.onclick = function () {\n handleConfirmButtonClick(instance);\n };\n domCache.denyButton.onclick = function () {\n handleDenyButtonClick(instance);\n };\n domCache.cancelButton.onclick = function () {\n handleCancelButtonClick(instance, dismissWith);\n };\n domCache.closeButton.onclick = function () {\n dismissWith(DismissReason.close);\n };\n handlePopupClick(innerParams, domCache, dismissWith);\n addKeydownHandler(globalState, innerParams, dismissWith);\n handleInputOptionsAndValue(instance, innerParams);\n openPopup(innerParams);\n setupTimer(globalState, innerParams, dismissWith);\n initFocus(domCache, innerParams);\n\n // Scroll container to top on open (#1247, #1946)\n setTimeout(function () {\n domCache.container.scrollTop = 0;\n });\n });\n };\n\n /**\n * @param {SweetAlertOptions} userParams\n * @param {SweetAlertOptions} mixinParams\n * @returns {SweetAlertOptions}\n */\n var prepareParams = function prepareParams(userParams, mixinParams) {\n var templateParams = getTemplateParams(userParams);\n var params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131\n params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);\n params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);\n if (params.animation === false) {\n params.showClass = {\n backdrop: 'swal2-noanimation'\n };\n params.hideClass = {};\n }\n return params;\n };\n\n /**\n * @param {SweetAlert} instance\n * @returns {DomCache}\n */\n var populateDomCache = function populateDomCache(instance) {\n var domCache = {\n popup: getPopup(),\n container: getContainer(),\n actions: getActions(),\n confirmButton: getConfirmButton(),\n denyButton: getDenyButton(),\n cancelButton: getCancelButton(),\n loader: getLoader(),\n closeButton: getCloseButton(),\n validationMessage: getValidationMessage(),\n progressSteps: getProgressSteps()\n };\n privateProps.domCache.set(instance, domCache);\n return domCache;\n };\n\n /**\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {Function} dismissWith\n */\n var setupTimer = function setupTimer(globalState, innerParams, dismissWith) {\n var timerProgressBar = getTimerProgressBar();\n hide(timerProgressBar);\n if (innerParams.timer) {\n globalState.timeout = new Timer(function () {\n dismissWith('timer');\n delete globalState.timeout;\n }, innerParams.timer);\n if (innerParams.timerProgressBar) {\n show(timerProgressBar);\n applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');\n setTimeout(function () {\n if (globalState.timeout && globalState.timeout.running) {\n // timer can be already stopped or unset at this point\n animateTimerProgressBar(innerParams.timer);\n }\n });\n }\n }\n };\n\n /**\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n */\n var initFocus = function initFocus(domCache, innerParams) {\n if (innerParams.toast) {\n return;\n }\n if (!callIfFunction(innerParams.allowEnterKey)) {\n blurActiveElement();\n return;\n }\n if (!focusButton(domCache, innerParams)) {\n setFocus(-1, 1);\n }\n };\n\n /**\n * @param {DomCache} domCache\n * @param {SweetAlertOptions} innerParams\n * @returns {boolean}\n */\n var focusButton = function focusButton(domCache, innerParams) {\n if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) {\n domCache.denyButton.focus();\n return true;\n }\n if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) {\n domCache.cancelButton.focus();\n return true;\n }\n if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) {\n domCache.confirmButton.focus();\n return true;\n }\n return false;\n };\n var blurActiveElement = function blurActiveElement() {\n if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {\n document.activeElement.blur();\n }\n };\n\n // Dear russian users visiting russian sites. Let's have fun.\n if (typeof window !== 'undefined' && /^ru\\b/.test(navigator.language) && location.host.match(/\\.(ru|su|by|xn--p1ai)$/)) {\n var now = new Date();\n var initiationDate = localStorage.getItem('swal-initiation');\n if (!initiationDate) {\n localStorage.setItem('swal-initiation', \"\".concat(now));\n } else if ((now.getTime() - Date.parse(initiationDate)) / (1000 * 60 * 60 * 24) > 3) {\n setTimeout(function () {\n document.body.style.pointerEvents = 'none';\n var ukrainianAnthem = document.createElement('audio');\n ukrainianAnthem.src = 'https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3';\n ukrainianAnthem.loop = true;\n document.body.appendChild(ukrainianAnthem);\n setTimeout(function () {\n ukrainianAnthem.play()[\"catch\"](function () {\n // ignore\n });\n }, 2500);\n }, 500);\n }\n }\n\n // Assign instance methods from src/instanceMethods/*.js to prototype\n SweetAlert.prototype.disableButtons = disableButtons;\n SweetAlert.prototype.enableButtons = enableButtons;\n SweetAlert.prototype.getInput = getInput;\n SweetAlert.prototype.disableInput = disableInput;\n SweetAlert.prototype.enableInput = enableInput;\n SweetAlert.prototype.hideLoading = hideLoading;\n SweetAlert.prototype.disableLoading = hideLoading;\n SweetAlert.prototype.showValidationMessage = showValidationMessage;\n SweetAlert.prototype.resetValidationMessage = resetValidationMessage;\n SweetAlert.prototype.close = close;\n SweetAlert.prototype.closePopup = close;\n SweetAlert.prototype.closeModal = close;\n SweetAlert.prototype.closeToast = close;\n SweetAlert.prototype.rejectPromise = rejectPromise;\n SweetAlert.prototype.update = update;\n SweetAlert.prototype._destroy = _destroy;\n\n // Assign static methods from src/staticMethods/*.js to constructor\n Object.assign(SweetAlert, staticMethods);\n\n // Proxy to instance methods to constructor, for now, for backwards compatibility\n Object.keys(instanceMethods).forEach(function (key) {\n /**\n * @param {...any} args\n * @returns {any | undefined}\n */\n SweetAlert[key] = function () {\n if (currentInstance && currentInstance[key]) {\n var _currentInstance;\n return (_currentInstance = currentInstance)[key].apply(_currentInstance, arguments);\n }\n return null;\n };\n });\n SweetAlert.DismissReason = DismissReason;\n SweetAlert.version = '11.10.4';\n\n var Swal = SweetAlert;\n // @ts-ignore\n Swal[\"default\"] = Swal;\n\n return Swal;\n\n}));\nif (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n\"undefined\"!=typeof document&&function(e,t){var n=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,\".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\\\"top-start top top-end\\\" \\\"center-start center center-end\\\" \\\"bottom-start bottom-center bottom-end\\\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:rgba(0,0,0,.4)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled).swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) button:where(.swal2-styled):focus{outline:none}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em;text-align:center}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:rgba(0,0,0,.2)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em}div:where(.swal2-container) button:where(.swal2-close){z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:none;background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) .swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:rgba(0,0,0,0);box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(0,0,0,0);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:1px solid #b4dbed;outline:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:#fff}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:rgba(0,0,0,0);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:rgba(0,0,0,0);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\\\"!\\\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:0.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}div:where(.swal2-icon).swal2-warning{border-color:#facea8;color:#f8bb86}div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}div:where(.swal2-icon).swal2-info{border-color:#9de0f6;color:#3fc3ee}div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}div:where(.swal2-icon).swal2-question{border-color:#c9dae1;color:#87adbd}div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}\");","import { AjaxGetAndReplaceHtml } from '../../shared/ajaxGetAndReplaceHtml';\r\nimport { addProductCarouselClickEvent, openBasketPopOutWindowWithOverlay, viewDetailsClickEvent, viewDetailsClickEventRemove } from './basketPopOutInitialiser';\r\nimport { LbCookies } from '../../shared/lbCookies';\r\nimport { initialise } from '../../shared/initialiser';\r\nimport { HttpRequest } from '../../shared/ajax';\r\nimport { PopOutController } from '../../shared/popOutController';\r\nimport { LoadingTemplates } from '../loading/loadingTemplates';\r\nimport { Product } from '../product/product';\r\nimport { AttributeEnums } from '../../shared/utilities/enums/attributeEnums';\r\nimport { Carousel } from '../carousel/carousel';\r\nimport { HelperUtils } from '../../shared/utilities/helperUtils';\r\nimport { StringEnums } from '../../shared/utilities/enums/stringEnums';\r\nimport { CustomEventEnums } from '../../shared/utilities/enums/customEventEnums';\r\nimport { CarouselInfiniteLoad } from '../carousel/carouselInfiniteLoad';\r\nimport { IInstanceComponentBase, InstanceComponentBase } from '../../shared/instanceComponentBase';\r\nimport { UtilityEnums } from '../../shared/utilities/enums/utillityEnums';\r\nimport { BasketService } from '../basket/basketService';\r\nimport { CarouselGtm, ICarouselGtm } from '../carousel/carouselGtm';\r\nimport { IAddToRemoveFromCartGtmDataObject } from '../../shared/googleTagManager/gtmDataObject';\r\n\r\nconst urlPaths = require('../../config/urlPaths.json');\r\n\r\nexport class BasketPopOut extends InstanceComponentBase {\r\n\r\n private readonly _addProductStarted;\r\n private readonly _addProductCompleted;\r\n public carouselList: CarouselInfiniteLoad[];\r\n public product: Product;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this._addProductStarted = this.addProductStarted.bind(this);\r\n this._addProductCompleted = this.addProductCompleted.bind(this);\r\n this.attachAddProductEventListener();\r\n }\r\n\r\n async instantiateAllCarousels() {\r\n let carouselElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad));\r\n\r\n let carouselList: CarouselInfiniteLoad[] = [];\r\n\r\n for (let i = 0; i < carouselElements.length; i += 1) {\r\n try {\r\n carouselList.push(this.carouselFactory(carouselElements[i]));\r\n }\r\n catch (error) {\r\n console.log('BasketPopOut: instantiateAllCarousels', error);\r\n }\r\n }\r\n this.carouselList = carouselList;\r\n\r\n }\r\n carouselFactory(carouselElement: HTMLElement) {\r\n let carouselInitialise: boolean | undefined = undefined;\r\n if (carouselElement.hasAttribute(AttributeEnums.CarouselInfiniteLoad.GetCellsOnInitialise)) {\r\n carouselInitialise = (carouselElement.getAttribute(AttributeEnums.CarouselInfiniteLoad.GetCellsOnInitialise) === 'true');\r\n }\r\n let carousel = new CarouselInfiniteLoad(carouselElement, carouselElement.getAttribute(AttributeEnums.CarouselInfiniteLoad.Url), carouselInitialise);\r\n return carousel;\r\n }\r\n async initialiseBasketPopoutTemplate() {\r\n let popOutWrapperElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutWrapper));\r\n let basketSessionCookie: string = LbCookies.getOrInitialiseBasketSession();\r\n\r\n const uriBasketPopOutTemplate: string = urlPaths.websiteUrl + '/basket/basket-pop-out/template/' + basketSessionCookie;\r\n let response = await HttpRequest.get(uriBasketPopOutTemplate);\r\n if (typeof response === 'string') {\r\n\r\n popOutWrapperElement.insertAdjacentHTML('beforeend', response);\r\n this.initializeAfterTemplateLoads();\r\n }\r\n }\r\n\r\n async reitialiseBasketPopoutTemplate() {\r\n let basketPopOutElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOut));\r\n let basketSessionCookie: string = LbCookies.getOrInitialiseBasketSession();\r\n\r\n const uriBasketPopOutTemplate: string = urlPaths.websiteUrl + '/basket/basket-pop-out/initial-state/' + basketSessionCookie;\r\n if (((<any>window).basketPopOutProduct)) {\r\n ((<any>window).basketPopOutProduct as Product).dispose();\r\n }\r\n let response = await HttpRequest.get(uriBasketPopOutTemplate);\r\n await AjaxGetAndReplaceHtml(basketPopOutElement, uriBasketPopOutTemplate);\r\n (<any>window).popOutController.openByIdAndFamily('1', UtilityEnums.ProductTypeValue.BasketPopOut);\r\n await this.initialiseBasketPopOutRecommendations();\r\n await initialise();\r\n }\r\n\r\n async initialiseBasketPopoutItemSummary() {\r\n document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutItemSummary)).innerHTML = '<p class=\"lb-loading\">loading</p>';\r\n let basketPopOutItemSummaryElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutItemSummary));\r\n const uriItemSummary = basketPopOutItemSummaryElement.getAttribute(AttributeEnums.BasketPopOut.BasketPopOutItemSummary);\r\n await AjaxGetAndReplaceHtml(basketPopOutItemSummaryElement, uriItemSummary);\r\n }\r\n\r\n async initialiseBasketPopoutSummary() {\r\n document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutSummary)).innerHTML = '<p class=\"lb-loading\"loading</p>';\r\n let basketPopOutSummaryElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutSummary));\r\n const uriSummary = basketPopOutSummaryElement.getAttribute(AttributeEnums.BasketPopOut.BasketPopOutSummary);\r\n await AjaxGetAndReplaceHtml(basketPopOutSummaryElement, uriSummary);\r\n\r\n }\r\n\r\n async initialiseBasketPopOutRecommendations() {\r\n console.log(\"initialiseBasketPopoutRecommendations start\");\r\n let basketPopOutRecommendationsElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutRecommendations));\r\n const uriRecommendations = basketPopOutRecommendationsElement.getAttribute(AttributeEnums.BasketPopOut.BasketPopOutRecommendations);\r\n await AjaxGetAndReplaceHtml(basketPopOutRecommendationsElement, uriRecommendations);\r\n console.log(\"initialiseBasketPopoutRecommendations end\");\r\n this.instantiateAllCarousels();\r\n }\r\n\r\n showProductAddingToBasketTemplate() {\r\n let basketPopOutProductElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutProduct));\r\n basketPopOutProductElement.innerHTML = LoadingTemplates.productAddingToBasketTemplate;\r\n }\r\n\r\n attachAddProductEventListener() {\r\n //Maybe Change to [data-basket-pop-out] querySelector to distinquish from main product page product:-\r\n console.log('BasketPopOut: addProductEventListener');\r\n document.addEventListener(\"CustomEventEnums.AddProductStarted\", this._addProductStarted);\r\n\r\n document.addEventListener(CustomEventEnums.AddProductCompleted, this._addProductCompleted);\r\n\r\n }\r\n\r\n addProductStarted(event: CustomEvent) {\r\n if (event.detail.type == UtilityEnums.ProductTypeValue.BasketPopOut) {\r\n console.log(\"BasketPopOut: AddProductStarted Event Fired\");\r\n this.showProductAddingToBasketTemplate();\r\n }\r\n }\r\n addProductCompleted(event: CustomEvent) {\r\n if (event.detail.type == UtilityEnums.ProductTypeValue.BasketPopOut) {\r\n console.log(\"BasketPopOut: AddProductCompleted Event Fired\");\r\n this.updateBasketPopoutAfterAdditionalProductAdded();\r\n }\r\n }\r\n removeAddProductEventListener() {\r\n document.removeEventListener(CustomEventEnums.AddProductStarted, this._addProductStarted);\r\n\r\n document.removeEventListener(CustomEventEnums.AddProductCompleted, this._addProductCompleted);\r\n }\r\n async initialiseBasketPopOut() {\r\n this.initialiseBasketPopoutTemplate();\r\n }\r\n\r\n async initializeAfterTemplateLoads() {\r\n openBasketPopOutWindowWithOverlay((<any>window).popOutController);\r\n console.log('BasketPopOut: initializeAfterTemplateLoads - openBasketPopOutWindowWithOverlay');\r\n await this.initialiseBasketPopOutRecommendations();\r\n viewDetailsClickEvent();\r\n addProductCarouselClickEvent();\r\n\r\n await initialise();\r\n }\r\n\r\n async initialiseBasketPopOutProduct(productUrl: string) {\r\n\r\n console.log('BasketPopOut: initialiseBasketPopOutProduct Started');\r\n let basketPopOutProductElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutProduct));\r\n basketPopOutProductElement.setAttribute(AttributeEnums.Product.Product, UtilityEnums.ProductTypeValue.BasketPopOut);\r\n basketPopOutProductElement.setAttribute(AttributeEnums.InstanceComponentInitialiser.Ignore, 'true');\r\n if (this.product) {\r\n this.product.dispose();\r\n }\r\n basketPopOutProductElement.innerHTML = LoadingTemplates.productLoadingTemplate;\r\n await AjaxGetAndReplaceHtml(basketPopOutProductElement, productUrl);\r\n console.log('BasketPopOut: initialiseBasketPopOutProduct AjaxGetAndReplaceHtml Finished');\r\n this.product = new Product(basketPopOutProductElement);\r\n await initialise();\r\n console.log('BasketPopOut: initialiseBasketPopOutProduct - executed initialise');\r\n //((<any>window).basketPopOutProduct as Product).viewProductDetailsFieldsSetUp();\r\n console.log('BasketPopOut: initialiseBasketPopOutProduct - Finished', this.product);\r\n console.log('BasketPopOut: initialiseBasketPopOutProduct Finished');\r\n }\r\n\r\n async handleAddToBasketCarouselClick(targetElement: HTMLElement) {\r\n\r\n document.dispatchEvent(this.addProductStartedEvent(UtilityEnums.ProductTypeValue.BasketPopOut));\r\n\r\n let response: string | void = await this.addToBasket(targetElement);\r\n\r\n document.dispatchEvent(this.addProductCompletedEvent(UtilityEnums.ProductTypeValue.BasketPopOut));\r\n }\r\n\r\n async addToBasket(targetElement: HTMLElement): Promise<string> {\r\n let lineId = targetElement.getAttribute(AttributeEnums.Carousel.LineId);\r\n try {\r\n let dataObject: IAddToRemoveFromCartGtmDataObject = CarouselGtm.getAddToRemoveFromCartGtmDataObject(targetElement);\r\n let response: string | void = await BasketService.addProductNoSize(lineId, dataObject);\r\n return response;\r\n } catch (error) {\r\n let response = await BasketService.addProductNoSizeWithoutGtmPost(lineId);\r\n return response;\r\n }\r\n }\r\n\r\n addProductStartedEvent(type: string) {\r\n return new CustomEvent(CustomEventEnums.AddProductStarted, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'type': type\r\n }\r\n\r\n });\r\n }\r\n\r\n addProductCompletedEvent(type: string) {\r\n return new CustomEvent(CustomEventEnums.AddProductCompleted, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'type': type\r\n }\r\n\r\n });\r\n }\r\n async updateBasketPopoutAfterAdditionalProductAdded() {\r\n\r\n\r\n await this.reitialiseBasketPopoutTemplate();\r\n\r\n }\r\n\r\n\r\n dispose() {\r\n if ((this.carouselList !== undefined) && (this.carouselList.length > 0)) {\r\n this.carouselList.forEach((carousel: CarouselInfiniteLoad) => {\r\n carousel.dispose();\r\n });\r\n }\r\n if ((<any>window).basketPopOutProduct) {\r\n (<any>window).basketPopOutProduct.dispose();\r\n }\r\n viewDetailsClickEventRemove();\r\n this.removeAddProductEventListener();\r\n delete (<any>window).basketPopOut;\r\n }\r\n\r\n}","import { PopOutController } from '../../shared/popOutController';\r\nimport { AttributeEnums } from '../../shared/utilities/enums/attributeEnums';\r\nimport { CustomEventEnums } from '../../shared/utilities/enums/customEventEnums';\r\nimport { UtilityEnums } from '../../shared/utilities/enums/utillityEnums';\r\nimport { HelperUtils } from '../../shared/utilities/helperUtils';\r\nimport { BasketPopOut } from './basketPopOut';\r\n\r\n\r\nexport async function initialiseBasketPopOut() {\r\n (<any>window).openBasketPopOut = async function () {\r\n console.log('initialiseBasketPopOut: openBasketPopOut');\r\n console.log('initialiseBasketPopOut: openBasketPopOut has [data-basket-pop-out]');\r\n //remove old basket popout if it exists\r\n disposeOfBasketPopOut();\r\n let basketPopOutElement: HTMLElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.BasketPopOut.BasketPopOutWrapper));\r\n basketPopOutElement.innerHTML = '';\r\n let basketPopOut: BasketPopOut = new BasketPopOut(basketPopOutElement);\r\n\r\n (<any>window).basketPopOut = basketPopOut;\r\n let result = await (<any>window).basketPopOut.initialiseBasketPopOut();\r\n\r\n }\r\n document.addEventListener(CustomEventEnums.AddProductCompleted, (event: CustomEvent) => {\r\n if (event.detail.type == UtilityEnums.ProductTypeValue.Product) {\r\n console.log('initialiseBasketPopOut: addEventListener - AddProductCompleted started');\r\n (<any>window).openBasketPopOut();\r\n }\r\n });\r\n}\r\nexport function disposeOfBasketPopOut() {\r\n if (((<any>window).basketPopOut as BasketPopOut)) {\r\n ((<any>window).basketPopOut as BasketPopOut).dispose();\r\n }\r\n}\r\nexport function openBasketPopOutWindowWithOverlay(popOutController: PopOutController) {\r\n popOutController.openByIdAndFamily('1', UtilityEnums.ProductTypeValue.BasketPopOut);\r\n}\r\nexport function ifClickElementIsOfProductUrlOpenBasketPopOutProduct(event: MouseEvent): void {\r\n let clickElement = event.target;\r\n\r\n if (clickElement instanceof HTMLElement && clickElement.hasAttribute(AttributeEnums.Product.ProductUrl)) {\r\n event.preventDefault();\r\n let productUrl = clickElement.getAttribute(AttributeEnums.Product.ProductUrl);\r\n openBasketPopOutProduct(productUrl);\r\n } else if (clickElement instanceof HTMLElement && clickElement.hasAttribute(AttributeEnums.ProductSelector.ProductSelectorItem) && clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductUrl))) {\r\n event.preventDefault();\r\n let productUrl = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductUrl)).getAttribute(AttributeEnums.Product.ProductUrl);\r\n openBasketPopOutProduct(productUrl);\r\n }\r\n\r\n if (clickElement instanceof HTMLElement && clickElement.hasAttribute(AttributeEnums.Carousel.CarouselTileAddButton)) {\r\n let lineId = clickElement.getAttribute(AttributeEnums.Carousel.LineId);\r\n }\r\n}\r\n\r\nexport function ifClickElementHasDataCarouselTileAddButtonAttribute(event: MouseEvent): void {\r\n let clickElement = event.target;\r\n if (clickElement instanceof HTMLElement && clickElement.hasAttribute(AttributeEnums.Carousel.CarouselTileAddButton)) {\r\n event.preventDefault();\r\n let basketPopOut: BasketPopOut = (<any>window).basketPopOut;\r\n basketPopOut.handleAddToBasketCarouselClick(clickElement);\r\n }\r\n\r\n if (clickElement instanceof HTMLElement && clickElement.hasAttribute(AttributeEnums.Carousel.CarouselTileAddButton)) {\r\n let lineId = clickElement.getAttribute(AttributeEnums.Carousel.LineId);\r\n }\r\n}\r\n\r\nexport async function openBasketPopOutProduct(productUrl: string) {\r\n console.log('BasketPopOutInitialiser: openBasketPopOutProduct');\r\n\r\n (<any>window).popOutController.openByIdAndFamily('1:1', UtilityEnums.ProductTypeValue.BasketPopOut);\r\n //addClosePopOutControls((<any>window).popOutController);\r\n let basketPopOut: BasketPopOut = (<any>window).basketPopOut;\r\n await basketPopOut.initialiseBasketPopOutProduct(productUrl);\r\n}\r\n\r\n\r\n// export function addClosePopOutControls(popOutController: PopOutController) {\r\n// console.log('BasketPopOutInitialiser: addClosePopOutControls');\r\n// document.addEventListener('click', event => {\r\n// const closestPopOutElement = event.target as HTMLElement;\r\n// if (closestPopOutElement.hasAttribute(AttributeEnums.PopOut.PopOutBacklink)) {\r\n// event.preventDefault();\r\n// const popOutLayerId = closestPopOutElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId)).getAttribute(AttributeEnums.PopOut.PopOutId);\r\n// const popOutLayerFamily = closestPopOutElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId)).getAttribute(AttributeEnums.PopOut.PopOutFamily);\r\n// if (popOutLayerId.indexOf(\":\") === -1) {\r\n// popOutController.closeAllMenus();\r\n// } else {\r\n// console.log('BasketPopOutInitialiser: addClosePopOutControls - openByIdAndFamily');\r\n// popOutController.openByIdAndFamily(popOutLayerId.substring(0, popOutLayerId.lastIndexOf(\":\")), popOutLayerFamily);\r\n// }\r\n// }\r\n// });\r\n// }\r\n\r\nexport function viewDetailsClickEvent() {\r\n document.addEventListener('click', ifClickElementIsOfProductUrlOpenBasketPopOutProduct);\r\n //Maybe Change to [data-basket-pop-out] to distinquish from main product page product:-\r\n //document.querySelector('[data-basket-pop-out]').addEventListener('click', ifClickElementIsOfProductUrlOpenBasketPopOutProduct);\r\n}\r\nexport function viewDetailsClickEventRemove() {\r\n document.removeEventListener('click', ifClickElementIsOfProductUrlOpenBasketPopOutProduct);\r\n\r\n //Maybe Change to [data-basket-pop-out] to distinquish from main product page product:-\r\n //document.querySelector('[data-basket-pop-out]').removeEventListener('click', ifClickElementIsOfProductUrlOpenBasketPopOutProduct);\r\n\r\n}\r\n\r\nexport function addProductCarouselClickEvent() {\r\n document.addEventListener('click', ifClickElementHasDataCarouselTileAddButtonAttribute);\r\n //Maybe Change to [data-basket-pop-out] to distinquish from main product page product:-\r\n //document.querySelector('[data-basket-pop-out]').addEventListener('click', ifClickElementIsOfProductUrlOpenBasketPopOutProduct);\r\n}\r\nexport function addProductCarouselClickEventRemove() {\r\n document.removeEventListener('click', ifClickElementHasDataCarouselTileAddButtonAttribute);\r\n\r\n //Maybe Change to [data-basket-pop-out] to distinquish from main product page product:-\r\n //document.querySelector('[data-basket-pop-out]').removeEventListener('click', ifClickElementIsOfProductUrlOpenBasketPopOutProduct);\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","import { BasketProduct } from \"../product/basketProduct\";\r\nimport { HttpRequest } from \"../../shared/ajax\";\r\nimport { LbCookies } from \"../../shared/lbCookies\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { IAddToRemoveFromCartGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\n\r\nconst urlPaths = require('../../config/urlPaths.json');\r\n\r\nexport namespace BasketService {\r\n\r\n\r\n export async function addProductNoSize(lineId: string, addToRemoveFromCartGtmDataObject: IAddToRemoveFromCartGtmDataObject): Promise<string> {\r\n let url = urlPaths.websiteUrl + urlPaths.addToBasketbyLineIdApiRoute + lineId + '/' + LbCookies.getOrInitialiseBasketSession();\r\n let response: string | void = await HttpRequest.post(url, \"\");\r\n //GTM Add\r\n GoogleTagManager.sendAddToCartGtmDataObject(addToRemoveFromCartGtmDataObject);\r\n return response;\r\n }\r\n\r\n export async function addProductNoSizeWithoutGtmPost(lineId: string): Promise<string> {\r\n let url = urlPaths.websiteUrl + urlPaths.addToBasketbyLineIdApiRoute + lineId + '/' + LbCookies.getOrInitialiseBasketSession();\r\n let response: string | void = await HttpRequest.post(url, \"\");\r\n return response;\r\n }\r\n\r\n export async function addProduct(basketProduct: BasketProduct, addToRemoveFromCartGtmDataObject: IAddToRemoveFromCartGtmDataObject): Promise<string> {\r\n let response = await HttpRequest.post(urlPaths.basketDomain + UrlEnums.ApiUrls.BasketLine, JSON.stringify(basketProduct));\r\n //GTM Add\r\n GoogleTagManager.sendAddToCartGtmDataObject(addToRemoveFromCartGtmDataObject);\r\n return response;\r\n }\r\n\r\n export function mapAddToRemoveFromCartGtmDataObject(id: number, name: string, price: number, brand: string, variant: string, category: string, quantity: number): IAddToRemoveFromCartGtmDataObject {\r\n let dataObject: IAddToRemoveFromCartGtmDataObject = {\r\n id: id,\r\n name: name,\r\n price: price,\r\n brand: brand,\r\n variant: variant,\r\n category: category,\r\n quantity: quantity\r\n };\r\n\r\n return dataObject;\r\n }\r\n\r\n export async function updateProductQty(basketSessionId: string, basketLineId: number, oldQty: number, newQty: number, itemPrice: number, addToRemoveFromCartGtmDataObject: IAddToRemoveFromCartGtmDataObject): Promise<void> {\r\n\r\n let url: string = `${urlPaths.websiteUrl}${UrlEnums.ApiUrls.BasketUpdateLineQuantity}/${basketSessionId}/${basketLineId}/${newQty}`;\r\n\r\n\r\n await HttpRequest.put(url, '');\r\n\r\n if (oldQty > newQty) {\r\n let numberOfItemsRemoved: number = oldQty - newQty;\r\n let updatedDataObject = { ...addToRemoveFromCartGtmDataObject, quantity: numberOfItemsRemoved, price: (numberOfItemsRemoved * itemPrice) } as IAddToRemoveFromCartGtmDataObject;\r\n GoogleTagManager.sendRemoveFromCartGtmDataObject(updatedDataObject);\r\n }\r\n else {\r\n let numberOfItemsAdded: number = newQty - oldQty;\r\n let updatedDataObject = { ...addToRemoveFromCartGtmDataObject, quantity: numberOfItemsAdded, price: (numberOfItemsAdded * itemPrice) } as IAddToRemoveFromCartGtmDataObject;\r\n GoogleTagManager.sendAddToCartGtmDataObject(updatedDataObject);\r\n }\r\n }\r\n\r\n export async function updateProductQtyWithoutGtmPost(basketSessionId: string, basketLineId: number, newQty: number): Promise<void> {\r\n let url: string = `${urlPaths.websiteUrl}${UrlEnums.ApiUrls.BasketUpdateLineQuantity}/${basketSessionId}/${basketLineId}/${newQty}`;\r\n await HttpRequest.put(url, '');\r\n }\r\n\r\n export async function deleteProduct(basketSessionId: string, basketLineId: number, qtyToDelete: number, addToRemoveFromCartGtmDataObject: IAddToRemoveFromCartGtmDataObject) {\r\n let url: string = `${urlPaths.websiteUrl}${UrlEnums.ApiUrls.BasketDeleteLine}/${basketSessionId}/${basketLineId}`;\r\n await HttpRequest.deleteCall(url, '');\r\n //GTM remove\r\n let updatedDataObject = { ...addToRemoveFromCartGtmDataObject, quantity: qtyToDelete } as IAddToRemoveFromCartGtmDataObject;\r\n GoogleTagManager.sendRemoveFromCartGtmDataObject(updatedDataObject);\r\n }\r\n\r\n export async function deleteProductWithoutGtmPost(basketSessionId: string, basketLineId: number) {\r\n let url: string = `${urlPaths.websiteUrl}${UrlEnums.ApiUrls.BasketDeleteLine}/${basketSessionId}/${basketLineId}`;\r\n await HttpRequest.deleteCall(url, '');\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ButtonCarouselButton } from \"./buttonCarouselButton\";\r\n\r\nexport interface IButtonCarousel extends IInstanceComponentBase {\r\n buttonCarouselButtons: ButtonCarouselButton[];\r\n displayLoading: () => void;\r\n}\r\n\r\nexport class ButtonCarousel extends InstanceComponentBase implements IButtonCarousel {\r\n public buttonCarouselButtons: ButtonCarouselButton[] = new Array<ButtonCarouselButton>();\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this.buttonCarouselButtonsFactory();\r\n }\r\n\r\n buttonCarouselButtonsFactory(): void {\r\n let buttonCarouselButtonElements = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ButtonCarouselButton.ButtonCarouselButton));\r\n buttonCarouselButtonElements.forEach((buttonCarouselButtonElement: HTMLElement) => this.buttonCarouselButtons.push(new ButtonCarouselButton(buttonCarouselButtonElement)));\r\n }\r\n\r\n displayLoading() {\r\n for(let i=0; i < this.buttonCarouselButtons.length; i++) {\r\n this.buttonCarouselButtons[i].htmlElement.classList.add('lb-loadingTile'); \r\n this.buttonCarouselButtons[i].removeButtonCarouselButtonClickedEventListener(); \r\n } \r\n }\r\n\r\n dispose(): void {\r\n this.buttonCarouselButtons.forEach((buttonCarouselButton: ButtonCarouselButton) => buttonCarouselButton.dispose());\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nexport interface IButtonCarouselButton extends IInstanceComponentBase {\r\n value: string|undefined;\r\n}\r\n\r\nexport class ButtonCarouselButton extends InstanceComponentBase implements IButtonCarouselButton {\r\n public value: string|undefined;\r\n private readonly _handleButtonCarouselButtonClicked;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this._handleButtonCarouselButtonClicked = this.handleButtonCarouselButtonClicked.bind(this);\r\n this.setButtonCarouselButtonValue();\r\n this.attachButtonCarouselButtonClickedEventListener();\r\n }\r\n\r\n attachButtonCarouselButtonClickedEventListener(): void {\r\n console.log('ButtonCarouselButton: attachButtonCarouselButtonClickedEventListener');\r\n this.htmlElement.addEventListener('click', this._handleButtonCarouselButtonClicked);\r\n }\r\n\r\n removeButtonCarouselButtonClickedEventListener(): void {\r\n console.log('ButtonCarouselButton: removeButtonCarouselButtonClickedEventListener');\r\n this.htmlElement.removeEventListener('click', this._handleButtonCarouselButtonClicked);\r\n }\r\n\r\n handleButtonCarouselButtonClicked(e: Event) {\r\n console.log('ButtonCarouselButton: handleButtonCarouselButtonClicked');\r\n let targetElement = e.target as HTMLElement; \r\n this.htmlElement.dispatchEvent(this.productButtonCarouselButtonClickedCustomEvent(this.value));\r\n }\r\n\r\n writeToButtonCarouselButtonValue(value: string | undefined){\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement as HTMLElement, AttributeEnums.ButtonCarouselButton.ButtonCarouselButtonValue);\r\n }\r\n\r\n setButtonCarouselButtonValue(){\r\n\r\n this.value = this.htmlElement.getAttribute(AttributeEnums.ButtonCarouselButton.ButtonCarouselButtonValue);\r\n\r\n }\r\n\r\n updateButtonCarouselButtonValue(value: string | undefined){\r\n this.writeToButtonCarouselButtonValue(value);\r\n this.setButtonCarouselButtonValue();\r\n } \r\n\r\n productButtonCarouselButtonClickedCustomEvent(value: string) {\r\n console.log(`ButtonCarouselButton: productButtonCarouselButtonClickedCustomEvent value: ${value}`);\r\n return new CustomEvent(CustomEventEnums.ButtonCarouselButtonClicked, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n value: value\r\n }\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.removeButtonCarouselButtonClickedEventListener(); \r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { HttpRequest } from '../../shared/ajax';\r\nimport { IInstanceComponentBase, InstanceComponentBase } from '../../shared/instanceComponentBase';\r\nimport { ResponsiveState } from '../../shared/responsiveState';\r\nimport { AttributeEnums } from '../../shared/utilities/enums/attributeEnums';\r\nimport { CustomEventEnums } from '../../shared/utilities/enums/customEventEnums';\r\nimport { StringEnums } from '../../shared/utilities/enums/stringEnums';\r\nimport { HelperUtils } from '../../shared/utilities/helperUtils';\r\n\r\nexport interface ICarousel extends IInstanceComponentBase {\r\n\r\n}\r\n\r\nexport class Carousel extends InstanceComponentBase implements ICarousel {\r\n\r\n private lastResponsiveState: string;\r\n private oldFirstCellOnDisplay: number;\r\n private timer = -1;\r\n protected slider: Element = this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselCells));\r\n private _cellsPerPage: number = parseInt(this.htmlElement.getAttribute(AttributeEnums.Carousel.CellsPerPage));\r\n private readonly _nextMoveSliderToPosition;\r\n private readonly _previousMoveSliderToPosition;\r\n private readonly _sliderScrolling;\r\n private readonly _pageResize;\r\n private readonly _setTileSize;\r\n\r\n constructor(htmlElement: Element, getCellsOnInitialise?: boolean) {\r\n super(htmlElement);\r\n this.lastResponsiveState = ResponsiveState.getState();\r\n\r\n //----- Event Listener Bindings Start -----//\r\n this._nextMoveSliderToPosition = this.nextMoveSliderToPosition.bind(this);\r\n this._previousMoveSliderToPosition = this.previousMoveSliderToPosition.bind(this);\r\n this._setTileSize = this.setTileSize.bind(this);\r\n this._sliderScrolling = this.sliderScrolling.bind(this);\r\n this._pageResize = this.pageResize.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachNextClickEventListener();\r\n this.attachPreviousClickEventListener();\r\n this.attachScrollingScrollEventListener();\r\n this.attachResizeEventListener();\r\n this.attachViewportDimensionsChangedEventListener();\r\n //----- Initialise Event Listeners End -----//\r\n this.recallSetNextPreviousControls();\r\n this.setTileSize();\r\n }\r\n\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachNextClickEventListener(): void {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselNext)).addEventListener('click', this._nextMoveSliderToPosition);\r\n }\r\n\r\n attachPreviousClickEventListener(): void {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselPrevious)).addEventListener('click', this._previousMoveSliderToPosition);\r\n }\r\n\r\n attachScrollingScrollEventListener(): void {\r\n this.slider.addEventListener(\"scroll\", this._sliderScrolling);\r\n }\r\n\r\n attachResizeEventListener(): void {\r\n window.addEventListener(\"resize\", this._pageResize);\r\n }\r\n\r\n attachViewportDimensionsChangedEventListener(): void {\r\n console.log('Carousel: attachViewportDimensionsChangedEventListener');\r\n document.addEventListener(CustomEventEnums.ViewportDimensionsChangedEvent, this._setTileSize);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeNextClickEventListener(): void {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselNext)).removeEventListener('click', this._nextMoveSliderToPosition);\r\n }\r\n\r\n removePreviousClickEventListener(): void {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselPrevious)).removeEventListener('click', this._previousMoveSliderToPosition);\r\n }\r\n\r\n removeScrollingScrollEventListener(): void {\r\n this.slider.removeEventListener(\"scroll\", this._sliderScrolling);\r\n }\r\n\r\n removeResizeEventListener(): void {\r\n window.removeEventListener(\"resize\", this._pageResize);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n nextMoveSliderToPosition(): void {\r\n //console.log('Carousel: nextMoveSliderToPosition - Beginning');\r\n let newPosition: number | undefined = this.getIndexOfFirstElementDisplayed();\r\n if (newPosition !== undefined) {\r\n this.moveSliderToPosition(newPosition + this._cellsPerPage);\r\n } else {\r\n console.log(\"Error\");\r\n }\r\n }\r\n previousMoveSliderToPosition(): void {\r\n //console.log('Carousel: previousMoveSliderToPosition - Beginning');\r\n let newPosition: number | undefined = this.getIndexOfFirstElementDisplayed();\r\n if (newPosition !== undefined) {\r\n this.moveSliderToPosition(newPosition - this._cellsPerPage);\r\n } else {\r\n console.log(\"Error\");\r\n }\r\n }\r\n\r\n sliderScrolling() {\r\n //console.log('Carousel: sliderScrolling - Beginning');\r\n if (this.timer !== -1) {\r\n clearTimeout(this.timer);\r\n }\r\n let newPosition: number | undefined = this.getIndexOfFirstElementDisplayed();\r\n let self = this;\r\n if (this.isCarouselAtEnd()) {\r\n self.timer = window.setTimeout(function () {\r\n\r\n self.moveSliderToPosition(newPosition);\r\n\r\n }, 250);\r\n }\r\n }\r\n\r\n pageResize() {\r\n if ((ResponsiveState.getState() !== this.lastResponsiveState) && (this.oldFirstCellOnDisplay)) {\r\n this.lastResponsiveState = ResponsiveState.getState();\r\n this.moveSliderToPosition(this.oldFirstCellOnDisplay);\r\n }\r\n this.oldFirstCellOnDisplay = this.getIndexOfFirstElementDisplayed();\r\n }\r\n\r\n moveSliderToPosition(cell: number) {\r\n if (cell < 0) { \r\n cell = 0; \r\n }\r\n if (cell > this.slider.children.length) { \r\n cell = this.slider.children.length; \r\n }\r\n let sliderLeftBoundary = this.slider.getBoundingClientRect().left;\r\n let cellLeftBoundary = this.getCellBoundaryLeft(cell) + this.slider.scrollLeft;\r\n let sliderTranslatePosition = cellLeftBoundary - sliderLeftBoundary;\r\n //this.slider.scrollLeft = Math.floor(sliderTranslatePosition);\r\n this.slider.scrollTo({\r\n left: Math.floor(sliderTranslatePosition),\r\n behavior: \"smooth\"\r\n });\r\n this.setNextPreviousControls(cell);\r\n\r\n }\r\n\r\n isCarouselAtEnd() {\r\n let cells = this.slider.children.length;\r\n let TileRight = this.slider.children[cells - 1].getBoundingClientRect().right;\r\n let sliderRight = this.slider.getBoundingClientRect().right;\r\n let lastTileWidth = this.slider.children[cells - 1].getBoundingClientRect().width * .5;\r\n if (TileRight >= sliderRight + lastTileWidth) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //------ Event Listener Methods End -----//\r\n\r\n setTileSize() {\r\n let cells = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.Carousel.Cells));\r\n if (this.lastResponsiveState === StringEnums.Selectors.Desktop) {\r\n for (let i = 0; i < cells.length; i++) {\r\n cells[i].setAttribute(\"style\", \"width:\" + 100 / this._cellsPerPage + \"%\");\r\n }\r\n } else {\r\n for (let i = 0; i < cells.length; i++) {\r\n cells[i].removeAttribute(\"style\");\r\n }\r\n }\r\n\r\n }\r\n\r\n setNextPreviousControls(cellCount: number) {\r\n if (ResponsiveState.getState() === StringEnums.Selectors.Desktop) {\r\n if (this.slider.children.length <= this._cellsPerPage) {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselPrevious)).setAttribute(\"style\", \"display: none\");\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselNext)).setAttribute(\"style\", \"display: none\");\r\n } else if (cellCount <= 0) {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselPrevious)).setAttribute(\"style\", \"display: none\");\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselNext)).setAttribute(\"style\", \"display: block\");\r\n } else if (cellCount + this._cellsPerPage >= this.slider.children.length) {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselPrevious)).setAttribute(\"style\", \"display: block\");\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselNext)).setAttribute(\"style\", \"display: none\");\r\n }\r\n else {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselPrevious)).setAttribute(\"style\", \"display: block\");\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselNext)).setAttribute(\"style\", \"display: block\");\r\n }\r\n } else {\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselPrevious)).setAttribute(\"style\", \"display: none\");\r\n this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselNext)).setAttribute(\"style\", \"display: none\");\r\n }\r\n }\r\n\r\n getIndexOfFirstElementDisplayed() {\r\n let sliderLeftBoundary = this.slider.getBoundingClientRect().left;\r\n let cells = this.slider.querySelectorAll(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselCell));\r\n for (let i = 0; i < cells.length; i++) {\r\n let cellLeftBoundary = cells[i].getBoundingClientRect().left;\r\n let offset = cells[i].getBoundingClientRect().width * .5;\r\n if (cellLeftBoundary >= sliderLeftBoundary - offset) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n getCellBoundaryLeft(cell: number) {\r\n return this.slider.querySelectorAll(HelperUtils.addCssClassDot(StringEnums.CssClass.LbCarouselCell))[cell].getBoundingClientRect().left;\r\n }\r\n\r\n recallSetNextPreviousControls(): void {\r\n let newPosition: number | undefined = this.getIndexOfFirstElementDisplayed();\r\n let cell = newPosition;\r\n this.setNextPreviousControls(cell);\r\n }\r\n\r\n hideContainer() {\r\n let containerElement: HTMLElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Carousel.Container));\r\n if (containerElement) {\r\n containerElement.setAttribute(\"style\", \"display: none\");\r\n }\r\n }\r\n\r\n showContainer() {\r\n let containerElement: HTMLElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Carousel.Container));\r\n if (containerElement) {\r\n containerElement.setAttribute(\"style\", \"display: block\");\r\n }\r\n }\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n this.removeNextClickEventListener();\r\n this.removePreviousClickEventListener();\r\n //this.removeLoadScrollEventListener();\r\n this.removeScrollingScrollEventListener();\r\n this.removeResizeEventListener();\r\n this.delete();\r\n }\r\n\r\n delete(): void {\r\n if ((<any>window)[this.htmlElement.getAttribute(AttributeEnums.Carousel.Carousel) + 'Carousel']) {\r\n console.log('CarouselController: Delete - Deleting Carousel Reference');\r\n delete (<any>window)[this.htmlElement.getAttribute(AttributeEnums.Carousel.Carousel) + 'Carousel'];\r\n }\r\n else {\r\n console.log('CarouselController: Delete - Carousel Reference Not Found');\r\n }\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { IAddToRemoveFromCartGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nexport interface ICarouselGtm {\r\n id: number;\r\n name: string;\r\n price: number;\r\n brand: string;\r\n variant: string;\r\n category: string;\r\n url: string;\r\n groupSku: string;\r\n sku: string;\r\n}\r\n\r\nexport class CarouselGtm implements ICarouselGtm {\r\n public id: number;\r\n public name: string;\r\n public price: number;\r\n public brand: string;\r\n public variant: string;\r\n public category: string;\r\n public url: string;\r\n public groupSku: string;\r\n public sku: string;\r\n\r\n public static getCarouselGtmFromCarouselGtmElement(carouselGtmElement: HTMLElement): ICarouselGtm {\r\n let id = +carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselId);\r\n let name = carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselName);\r\n let price = +carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselPrice);\r\n let brand = carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselBrand);\r\n let variant = carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselSize);\r\n let category = carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselCategory);\r\n let groupSku = carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselGroupSku);\r\n let sku = carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselSku);\r\n let url = carouselGtmElement.getAttribute(AttributeEnums.CarouselGtm.GtmProductCarouselUrl);\r\n\r\n let carouselGtm: ICarouselGtm = {\r\n id: id,\r\n name: name,\r\n price: price,\r\n brand: brand,\r\n variant: variant,\r\n category: category,\r\n groupSku: groupSku,\r\n sku: sku,\r\n url: url\r\n };\r\n\r\n return carouselGtm;\r\n }\r\n\r\n public static getAddToRemoveFromCartGtmDataObject(targetElement: HTMLElement): IAddToRemoveFromCartGtmDataObject {\r\n let carouselGtm = this.getCarouselGtmForAddToBasketElement(targetElement);\r\n\r\n let dataObject: IAddToRemoveFromCartGtmDataObject = {\r\n id: carouselGtm.id,\r\n name: carouselGtm.name,\r\n price: carouselGtm.price,\r\n brand: carouselGtm.brand,\r\n variant: carouselGtm.variant,\r\n category: carouselGtm.category,\r\n quantity: 1\r\n }\r\n return dataObject;\r\n }\r\n\r\n public static getCarouselGtmForAddToBasketElement(targetElement: HTMLElement): ICarouselGtm {\r\n try {\r\n let carouselGtmElement: HTMLElement = targetElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Carousel.Cells))\r\n .querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselGtm.GtmProductCarousel));\r\n\r\n return CarouselGtm.getCarouselGtmFromCarouselGtmElement(carouselGtmElement);\r\n } catch (error) {\r\n console.log('CarouselGtm: getCarouselGtmForAddToBasketElement ERROR', error);\r\n throw new error('Error mapping carouselGtm');\r\n }\r\n }\r\n}\r\n\r\n","import { HttpRequest } from \"../../shared/ajax\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { Carousel, ICarousel } from \"./carousel\";\r\n\r\nexport interface ICarouselInfiniteLoad extends ICarousel {\r\n\r\n //navigateCarouselToSelectedIndex: () => void;\r\n}\r\n\r\nexport class CarouselInfiniteLoad extends Carousel implements ICarouselInfiniteLoad {\r\n private readonly _infiniteLoad;\r\n private page: number = this.getPageNumberFromUrl();\r\n private busy = false;\r\n private cellsLoadedPerUpdate = 12;\r\n\r\n constructor(public htmlElement: Element, private url: string, getCellsOnInitialise?: boolean) {\r\n super(htmlElement, getCellsOnInitialise);\r\n\r\n if (getCellsOnInitialise === undefined || getCellsOnInitialise === null || getCellsOnInitialise === true) {\r\n //this.loadCells();\r\n this.runLoadCells();\r\n } else {\r\n this.page++;\r\n this.slider.setAttribute('style', 'overflowX:scroll');\r\n this.setNextPreviousControls(0);\r\n this.busy = false;\r\n }\r\n\r\n //----- Event Listener Bindings Start -----//\r\n this._infiniteLoad = this.infiniteLoad.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachLoadScrollEventListener();\r\n //----- Initialise Event Listeners End -----//\r\n\r\n this.setTileSize();\r\n }\r\n\r\n async runLoadCells() {\r\n await this.loadCells();\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachLoadScrollEventListener(): void {\r\n this.slider.addEventListener(\"scroll\", this._infiniteLoad);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeLoadScrollEventListener(): void {\r\n this.slider.removeEventListener(\"scroll\", this._infiniteLoad);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n async infiniteLoad() {\r\n //console.log('Carousel: infiniteLoad - Beginning');\r\n if (this.areMoreCellsNeeded) {\r\n await this.loadCells();\r\n }\r\n }\r\n\r\n get areMoreCellsNeeded() {\r\n if (this.slider.children[this.slider.children.length - 1].hasAttribute(\"data-last-tile\")) {\r\n return false;\r\n } else {\r\n let sliderLeftBoundary = this.slider.getBoundingClientRect().left;\r\n let firstItemDisplayed = this.getIndexOfFirstElementDisplayed();\r\n if (firstItemDisplayed !== undefined) {\r\n let cellsFromEnd = this.slider.children.length - this.cellsLoadedPerUpdate;\r\n if (sliderLeftBoundary > this.getCellBoundaryLeft(cellsFromEnd + 1)) {\r\n return true;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n getPageNumberFromUrl(): number {\r\n let startingPageRefPoint: number = this.url.indexOf(\"page--\") + \"page--\".length;\r\n let concludingUrl: string = this.url.substring(startingPageRefPoint);\r\n let endingPageRefPoint: number = concludingUrl.indexOf(\"--\") + startingPageRefPoint;\r\n let pageValue: string = this.url.substring(startingPageRefPoint, endingPageRefPoint);\r\n\r\n return +pageValue;\r\n }\r\n\r\n getNewPageUrl(): string {\r\n let startingPageRefPoint: number = this.url.indexOf(\"page--\") + \"page--\".length;\r\n let concludingUrl: string = this.url.substring(startingPageRefPoint);\r\n let endingPageRefPoint: number = concludingUrl.indexOf(\"--\") + startingPageRefPoint;\r\n\r\n let newFrontString: string = this.url.substring(0, startingPageRefPoint);\r\n let newEndString: string = this.url.substring(endingPageRefPoint, this.url.length);\r\n let newFinalString: string = newFrontString + this.page + newEndString;\r\n\r\n return newFinalString;\r\n }\r\n\r\n getNewAjaxRoute(): string {\r\n let newPageUrl = this.getNewPageUrl();\r\n\r\n let tileName: string = this.htmlElement.getAttribute(AttributeEnums.Carousel.Tile);\r\n\r\n return newPageUrl + '/' + tileName;\r\n }\r\n\r\n async loadCells() {\r\n let route;\r\n\r\n route = this.getNewAjaxRoute();\r\n\r\n let self = this;\r\n\r\n function isBusy() {\r\n self.busy = true;\r\n }\r\n\r\n function isNotBusy() {\r\n self.page++;\r\n if (self.slider.children.length === 4) {\r\n self.slider.innerHTML = \"\";\r\n self.slider.setAttribute('style', 'overflowX:scroll');\r\n self.setNextPreviousControls(0);\r\n }\r\n self.busy = false;\r\n }\r\n function onFail() {\r\n self.hideContainer();\r\n }\r\n if (!self.busy) {\r\n let response = await HttpRequest.getBeforAfterFailed(route, isBusy, isNotBusy, onFail);\r\n\r\n self.slider.insertAdjacentHTML('beforeend', response as string);\r\n\r\n this.recallSetNextPreviousControls();\r\n this.setTileSize();\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n dispose() {\r\n this.removeLoadScrollEventListener();\r\n super.dispose();\r\n }\r\n}","import { AjaxGetAndReplaceHtml } from \"../../shared/ajaxGetAndReplaceHtml\";\r\nimport { CookieUtils } from \"../../shared/utilities/cookieUtils\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CookieEnums } from \"../../shared/utilities/enums/cookieEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { Carousel, ICarousel } from \"./carousel\";\r\n\r\nexport interface ICarouselTileLoad extends ICarousel {\r\n\r\n}\r\n\r\nexport class CarouselTileLoad extends Carousel implements ICarouselTileLoad {\r\n\r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n this.getTiles();\r\n }\r\n\r\n async getTiles() {\r\n try {\r\n let tileElements: NodeListOf<Element> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselTileLoad.Url));\r\n\r\n for (let currentElement = 0; currentElement < tileElements.length; currentElement += 1) {\r\n let tileElement: Element = tileElements[currentElement];\r\n let tileUrl: string = tileElement.getAttribute(AttributeEnums.CarouselTileLoad.Url);\r\n\r\n await AjaxGetAndReplaceHtml(tileElement, tileUrl);\r\n \r\n this.removeTileElementIfNoTileReturned(tileElement, tileUrl);\r\n }\r\n this.recallSetNextPreviousControls();\r\n this.setTileSize();\r\n } catch (error) {\r\n console.log('CarouselTileLoad: getTiles', error);\r\n }\r\n }\r\n\r\n removeTileElementIfNoTileReturned(tileElement: Element, tileUrl: string):void {\r\n try {\r\n if((tileElement as HTMLElement).innerHTML.length < 5){\r\n tileElement.remove();\r\n this.findAndRemoveLineSizeIdFromRecentlyViewedCookieAndUpdate(tileUrl);\r\n }\r\n } catch (error) {\r\n console.log('CarouselTileLoad: removeTileElementIfNoTileReturned', error);\r\n }\r\n }\r\n\r\n findAndRemoveLineSizeIdFromRecentlyViewedCookieAndUpdate(tileUrl: string): void {\r\n try {\r\n let lineSizeId = this.getLineSizeIdFromUrl(tileUrl);\r\n\r\n let recentlyViewedCookie: string = this.getRecentlyViewedCookie();\r\n\r\n if(recentlyViewedCookie !== ''){\r\n this.removeLineSizeIdAndUpdatedRecentlyViewedCookie(lineSizeId, recentlyViewedCookie);\r\n }\r\n }\r\n catch {\r\n console.log(`CarouselTileLoad: findAndRemoveLineSizeIdFromRecentlyViewedCookieAndUpdate ERROR`);\r\n }\r\n }\r\n\r\n removeLineSizeIdAndUpdatedRecentlyViewedCookie(lineSizeId: string, recentlyViewedCookie: string):void{\r\n let recentlyViewedIds: string [] = recentlyViewedCookie.split(',');\r\n\r\n recentlyViewedIds = recentlyViewedIds.filter(x => x !== lineSizeId); \r\n\r\n let updatedRecentlyViewedIds: string = encodeURIComponent(recentlyViewedIds.toString());\r\n\r\n CookieUtils.setCookie(CookieEnums.RecentlyViewedIds, updatedRecentlyViewedIds, 1);\r\n }\r\n\r\n getRecentlyViewedCookie():string{\r\n let recentlyViewedCookie: string | null = CookieUtils.getCookie(CookieEnums.RecentlyViewedIds);\r\n\r\n if (recentlyViewedCookie != null) {\r\n if (recentlyViewedCookie.length > 0) {\r\n return recentlyViewedCookie;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n getLineSizeIdFromUrl(tileUrl:string):string {\r\n let lineIdSectionIndex: number = tileUrl.lastIndexOf('/');\r\n\r\n let lineSizeId: string = tileUrl.substring(lineIdSectionIndex + 1);\r\n\r\n if(!lineSizeId.includes('-')){\r\n lineSizeId = lineSizeId + '-0';\r\n }\r\n\r\n return lineSizeId;\r\n }\r\n\r\n\r\n dispose() {\r\n super.dispose();\r\n }\r\n}","import Swal from 'sweetalert2';\r\nimport { InstanceComponentBase } from '../../shared/instanceComponentBase';\r\nimport { AttributeEnums } from '../../shared/utilities/enums/attributeEnums';\r\nimport { CustomEventEnums } from '../../shared/utilities/enums/customEventEnums';\r\nimport { StringEnums } from '../../shared/utilities/enums/stringEnums';\r\nimport { HelperUtils } from '../../shared/utilities/helperUtils';\r\nimport { TypeUtils } from '../../shared/utilities/typeUtils';\r\nimport { Gallery } from '../gallery/galleryController';\r\n\r\nexport interface IColourPickerState {\r\n selectedPrice?: string;\r\n selectedLineId: number;\r\n selectedExtraId?: number;\r\n selectedColourPickerFor: string;\r\n selectedSwatchSrc?: string;\r\n selectedSwatchPreviewSrc?: string;\r\n selectedGroupId: number;\r\n selectedOptionName?: string;\r\n}\r\nexport class ColourPicker extends InstanceComponentBase {\r\n\r\n private readonly gallery: Gallery;\r\n private readonly _confirmColourButton: Element;\r\n private readonly _setColourPickerSelectedStateFromDropdown;\r\n private readonly _setDropdownWithEvent;\r\n private readonly _setDropdownWithGallery;\r\n private readonly _setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent;\r\n private readonly _confirmColourEvent;\r\n\r\n private colourPickerState: IColourPickerState;\r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n\r\n let familyName = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerGallery)).getAttribute(AttributeEnums.ColourPicker.ColourPickerGallery);\r\n let gallery = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerGallery, familyName));\r\n\r\n this.gallery = new Gallery(gallery);\r\n\r\n //----- Event Listener Bindings Start -----//\r\n this._setColourPickerSelectedStateFromDropdown = this.setColourPickerSelectedStateFromDropdown.bind(this);\r\n this._setDropdownWithEvent = this.setDropdownWithEvent.bind(this);\r\n this._setDropdownWithGallery = this.setDropdownWithGallery.bind(this);\r\n this._setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent = this.setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent.bind(this);\r\n this._confirmColourEvent = this.confirmColourEvent.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachDropdownEventListener();\r\n this.attachCellEventListener();\r\n this._confirmColourButton = htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ConfirmColourFor));\r\n this.attachClickEventListenerForConfirm(this._confirmColourButton);\r\n //----- Initialise Event Listeners End -----//\r\n\r\n this.colourPickerState = this.initialiseColourPickerSelectedState();\r\n this.updateAll();\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachDropdownEventListener() {\r\n this.htmlElement.addEventListener('change', this._setColourPickerSelectedStateFromDropdown);\r\n }\r\n\r\n attachCellEventListener() {\r\n let cells = this.gallery.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.Gallery.GallerySelectableCell));\r\n for (let i = 0; i < cells.length; i++) {\r\n this.attachHoverEventListener(cells[i]);\r\n this.attachLeaveEventListener(cells[i]);\r\n this.attachClickEventListener(cells[i]);\r\n }\r\n }\r\n\r\n attachHoverEventListener(cell: Element) {\r\n cell.addEventListener('mouseenter', this._setDropdownWithEvent);\r\n }\r\n\r\n attachLeaveEventListener(cell: Element) {\r\n cell.addEventListener('mouseleave', this._setDropdownWithGallery);\r\n }\r\n\r\n attachClickEventListener(cell: Element) {\r\n cell.addEventListener('click', this._setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent);\r\n }\r\n\r\n attachClickEventListenerForConfirm(element: Element) {\r\n element.addEventListener('click', this._confirmColourEvent);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeDropdownEventListener() {\r\n this.htmlElement.removeEventListener('change', this._setColourPickerSelectedStateFromDropdown);\r\n }\r\n\r\n removeCellEventListener() {\r\n let cells = this.gallery.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.Gallery.GallerySelectableCell));\r\n for (let i = 0; i < cells.length; i++) {\r\n this.removeHoverEventListener(cells[i]);\r\n this.removeLeaveEventListener(cells[i]);\r\n this.removeClickEventListener(cells[i]);\r\n }\r\n }\r\n\r\n removeHoverEventListener(cell: Element) {\r\n cell.removeEventListener('mouseenter', this._setDropdownWithEvent);\r\n }\r\n\r\n removeLeaveEventListener(cell: Element) {\r\n cell.removeEventListener('mouseleave', this._setDropdownWithGallery);\r\n }\r\n\r\n removeClickEventListener(cell: Element) {\r\n cell.removeEventListener('click', this._setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent);\r\n }\r\n\r\n removeClickEventListenerForConfirm(element: Element) {\r\n element.removeEventListener('click', this._confirmColourEvent);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n initialiseColourPickerSelectedState(): IColourPickerState {\r\n let hiddenInput = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerFor)) as HTMLElement;\r\n return ColourPicker.mapSelectedColourHiddenInputToIColourPicker(hiddenInput);\r\n\r\n }\r\n\r\n updateAll() {\r\n if ((this.colourPickerState.selectedExtraId !== null) && (this.colourPickerState.selectedExtraId !== undefined)) {\r\n this.gallery.setMainBackgroundAreaById(this.colourPickerState.selectedExtraId);\r\n this.gallery.setTileToSelectedById(this.colourPickerState.selectedExtraId);\r\n this.gallery.selectedElement = this.gallery.getSelectedCellById(this.colourPickerState.selectedExtraId);\r\n this.setDropdownById(this.colourPickerState.selectedExtraId);\r\n ColourPicker.updateDataAttributesForProductColourChange(this.colourPickerState, this.htmlElement);\r\n this.hideNoColourSelectedValidation();\r\n }\r\n }\r\n\r\n //------ Event Listener Methods Start -----//\r\n setColourPickerSelectedStateFromDropdown(e: Event) {\r\n console.log('ColourPicker: setColourPickerSelectedStateFromDropdown - Beginning');\r\n\r\n let targetElement = e.target as HTMLSelectElement;\r\n let id = targetElement.options[targetElement.selectedIndex].value;\r\n if (id === \"0\") {\r\n this.reset();\r\n } else {\r\n\r\n let selectedCell = this.getSelectedCellById(id) as HTMLElement;\r\n this.setColourPickerSelectedStateFromGalleryCellAndUpdateAll(selectedCell.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorItem)));\r\n }\r\n }\r\n\r\n setDropdownWithEvent(e: Event): void {\r\n console.log('ColourPicker: setDropdownWithEvent - Beginning');\r\n let targetElement = e.target as HTMLElement;\r\n this.setDropdown(targetElement);\r\n }\r\n\r\n setDropdownWithGallery(): void {\r\n console.log('ColourPicker: setDropdownWithGallery - Beginning');\r\n this.setDropdown(this.gallery.selectedElement);\r\n }\r\n\r\n setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent(e: Event): void {\r\n console.log('ColourPicker: setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent - Beginning');\r\n let targetElement = e.target as HTMLElement;\r\n this.setColourPickerSelectedStateFromGalleryCellAndUpdateAll(targetElement);\r\n }\r\n\r\n confirmColourEvent(e: Event) {\r\n let targetElement = e.target as HTMLElement;\r\n if (!this.colourPickerState.selectedExtraId) {\r\n this.showNoColourSelectedValidation();\r\n } else {\r\n let colourConfirmedType: string = targetElement.getAttribute(AttributeEnums.ColourPicker.ConfirmColourFor);\r\n targetElement.dispatchEvent(this.colourConfirmedEventFactory(colourConfirmedType));\r\n }\r\n }\r\n\r\n setColourPickerSelectedStateFromGalleryCellAndUpdateAll(selectedCell: HTMLElement) {\r\n this.setColourPickerSelectedStateFromGalleryCell(selectedCell);\r\n this.updateAll();\r\n }\r\n setColourPickerSelectedStateFromGalleryCell(colourPickerTile: HTMLElement) {\r\n this.colourPickerState = ColourPicker.mapColourPickerSelectedStateFromGalleryCell(colourPickerTile, this.colourPickerState);\r\n }\r\n\r\n setDropdown(cell: Element) {\r\n if (cell != null) {\r\n let id = cell.getAttribute(AttributeEnums.Gallery.GalleryId);\r\n let element;\r\n if (id) {\r\n element = <HTMLOptionElement>this.htmlElement.querySelector('option[value=\"' + id + '\"]');\r\n element.selected = true;\r\n } else {\r\n this.reset();\r\n }\r\n }\r\n }\r\n\r\n setDropdownById(id: number) {\r\n let element;\r\n if (id) {\r\n element = <HTMLOptionElement>this.htmlElement.querySelector('option[value=\"' + id + '\"]');\r\n element.selected = true;\r\n } else {\r\n this.reset();\r\n }\r\n }\r\n\r\n setSelected(id: number) {\r\n let cell = this.getSelectedCellById(id.toString());\r\n this.setDropdown(cell);\r\n this.gallery.selectedElement = cell;\r\n this.gallery.setTileToSelected(cell);\r\n this.gallery.setMainAreaBackground(cell);\r\n }\r\n\r\n getSelectedCellById(id: string) {\r\n return this.gallery.htmlElement.querySelector(\r\n HelperUtils.addDataAttributeTags(AttributeEnums.Gallery.GalleryId, id));\r\n }\r\n\r\n showNoColourSelectedValidation() {\r\n Swal.fire(StringEnums.Content.PleaseSelectAColour);\r\n\r\n let colourPickerDropDown = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerDropDown)).closest(HelperUtils.addCssClassDot(StringEnums.CssClass.LbFormElementDropDown)) as HTMLElement;\r\n colourPickerDropDown.classList.add(StringEnums.CssClass.LbWarning);\r\n let colourPickerGallery = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerGallery)) as HTMLElement;\r\n colourPickerGallery.classList.add(StringEnums.CssClass.LbWarning);\r\n }\r\n //------ Event Listener Methods End -----//\r\n\r\n //------ Custom Event Creation Start -----//\r\n colourConfirmedEventFactory(type: string) {\r\n return new CustomEvent(CustomEventEnums.ColourConfirmed, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'type': type\r\n }\r\n });\r\n }\r\n //------ Custom Event Creation End -----//\r\n\r\n static mapColourPickerSelectedStateFromGalleryCell(selectedCell: HTMLElement, existingColoutPickerState: IColourPickerState) {\r\n let colourPickerState: IColourPickerState = {\r\n ...existingColoutPickerState,\r\n selectedGroupId: +selectedCell.getAttribute(AttributeEnums.ProductSelector.ProductSelectorGroupId),\r\n selectedExtraId: TypeUtils.castStringToNumberOrUndefined(selectedCell.getAttribute(AttributeEnums.ProductSelector.ProductSelectorExtraId)),\r\n selectedOptionName: selectedCell.getAttribute(AttributeEnums.ProductSelector.ProductSelectorName),\r\n selectedSwatchSrc: selectedCell.getAttribute(AttributeEnums.ProductSelector.ProductSelectorSwatchSrc),\r\n selectedSwatchPreviewSrc: ColourPicker.getSelectedSwatchPreviewSrc(selectedCell.getAttribute(AttributeEnums.ProductSelector.ProductSelectorSwatchSrc)),\r\n selectedPrice: selectedCell.getAttribute(AttributeEnums.ProductSelector.ProductSelectorPrice),\r\n };\r\n return colourPickerState;\r\n }\r\n setSelectedSwatchPreviewSrcFromSelectedSwatchSrc() {\r\n if(this.colourPickerState.selectedSwatchSrc !== null && this.colourPickerState.selectedSwatchSrc !== undefined) {\r\n ColourPicker.getSelectedSwatchPreviewSrc(this.colourPickerState.selectedSwatchSrc);\r\n }\r\n }\r\n\r\n static getSelectedSwatchPreviewSrc(selectedSwatchSrc: string) {\r\n if(selectedSwatchSrc !== null && selectedSwatchSrc !== undefined) {\r\n return selectedSwatchSrc.replace('extrasmallsquarecropped', 'mediumletterboxcropped');\r\n }\r\n }\r\n\r\n static mapSelectedColourHiddenInputToIColourPicker(colourPickerNewSelection: HTMLElement): IColourPickerState {\r\n\r\n let colourPickerState: IColourPickerState = {\r\n\r\n selectedGroupId: +colourPickerNewSelection.getAttribute(AttributeEnums.ColourPicker.ColourPickerGroupId),\r\n selectedExtraId: TypeUtils.castStringToNumberOrUndefined(colourPickerNewSelection.getAttribute(AttributeEnums.ColourPicker.ColourPickerValue)),\r\n selectedOptionName: colourPickerNewSelection.getAttribute(AttributeEnums.ColourPicker.ColourPickerName),\r\n selectedSwatchSrc: colourPickerNewSelection.getAttribute(AttributeEnums.ColourPicker.ColourPickerSwatchSrc),\r\n selectedSwatchPreviewSrc: ColourPicker.getSelectedSwatchPreviewSrc(colourPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorSwatchSrc)),\r\n selectedPrice: colourPickerNewSelection.getAttribute(AttributeEnums.ColourPicker.ColourPickerAdditionPrice),\r\n selectedLineId: +colourPickerNewSelection.getAttribute(AttributeEnums.ColourPicker.ColourPickerLineId),\r\n selectedColourPickerFor: colourPickerNewSelection.getAttribute(AttributeEnums.ColourPicker.ColourPickerFor)\r\n };\r\n return colourPickerState;\r\n }\r\n\r\n static updateDataAttributesForProductColourChange(colourPickerState: IColourPickerState, htmlElement: Element): void {\r\n let dataProductColourHiddenElement = htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerValue));\r\n dataProductColourHiddenElement.setAttribute(AttributeEnums.ColourPicker.ColourPickerValue, colourPickerState.selectedExtraId.toString());\r\n dataProductColourHiddenElement.setAttribute(AttributeEnums.ColourPicker.ColourPickerName, colourPickerState.selectedOptionName);\r\n dataProductColourHiddenElement.setAttribute(AttributeEnums.ColourPicker.ColourPickerSwatchSrc, colourPickerState.selectedSwatchSrc);\r\n dataProductColourHiddenElement.setAttribute(AttributeEnums.ColourPicker.ColourPickerAdditionPrice, colourPickerState.selectedPrice);\r\n }\r\n\r\n static selectedTextFormatter(name: string): string {\r\n let prefixText = 'Selected ';\r\n let postfixText = ':';\r\n return prefixText + name + postfixText;\r\n }\r\n\r\n hideNoColourSelectedValidation() {\r\n let colourPickerDropDown = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerDropDown)).closest(HelperUtils.addCssClassDot(StringEnums.CssClass.LbFormElementDropDown)) as HTMLElement;\r\n colourPickerDropDown.classList.remove(StringEnums.CssClass.LbWarning);\r\n let colourPickerGallery = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerGallery)) as HTMLElement;\r\n colourPickerGallery.classList.remove(StringEnums.CssClass.LbWarning);\r\n }\r\n\r\n reset() {\r\n this.gallery.reset();\r\n let optionElement = <HTMLOptionElement>this.htmlElement.querySelector('option[value=\"' + 0 + '\"]');\r\n optionElement.selected = true;\r\n this.gallery.setMainAreaBackground(this.gallery.placeholder);\r\n }\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n this.gallery.dispose();\r\n this.removeDropdownEventListener();\r\n this.removeCellEventListener();\r\n this.removeClickEventListenerForConfirm(this._confirmColourButton);\r\n this.delete();\r\n }\r\n\r\n delete(): void {\r\n if ((<any>window)[this.htmlElement.getAttribute(AttributeEnums.ColourPicker.ColourPicker) + 'ColourPicker']) {\r\n console.log('ColourPickerController: Delete - Deleting ColourPicker Reference');\r\n delete (<any>window)[this.htmlElement.getAttribute(AttributeEnums.ColourPicker.ColourPicker) + 'ColourPicker'];\r\n }\r\n else {\r\n console.log('ColourPickerController: Delete - ColourPicker Reference Not Found');\r\n }\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { IItemClickGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\n\r\nexport interface IContentItem {\r\n id: string;\r\n url?: string;\r\n name: string;\r\n\r\n dispose: () => void;\r\n}\r\n\r\nexport class ContentItem implements IContentItem {\r\n public id: string;\r\n public url?: string;\r\n public name: string;\r\n\r\n private readonly _handleClick;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n this.setProperties();\r\n\r\n this._handleClick = this.handleClick.bind(this);\r\n\r\n this.attachClickEventListener();\r\n }\r\n\r\n setProperties(): void {\r\n this.id = this.htmlElement.getAttribute(AttributeEnums.ContentItem.ContentItemId);\r\n this.name = this.htmlElement.getAttribute(AttributeEnums.ContentItem.ContentItemName);\r\n this.url = this.htmlElement.getAttribute(AttributeEnums.ContentItem.ContentItemUrl);\r\n }\r\n\r\n attachClickEventListener(): void {\r\n this.htmlElement.addEventListener('click', this._handleClick);\r\n }\r\n removeClickEventListener(): void {\r\n this.htmlElement.removeEventListener('click', this._handleClick);\r\n }\r\n handleClick(): void {\r\n try {\r\n let dataObject = {\r\n id: this.id,\r\n name: this.name,\r\n url: this.url\r\n } as IItemClickGtmDataObject;\r\n\r\n if (this.url) {\r\n GoogleTagManager.sendItemClickGtmDataObjectAndNavigate(dataObject, this.url);\r\n } else {\r\n GoogleTagManager.sendItemClickGtmDataObject(dataObject);\r\n }\r\n\r\n } catch (error) {\r\n if (this.url) {\r\n document.location = this.url;\r\n }\r\n }\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n this.removeClickEventListener();\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ContentItem, IContentItem } from \"./contentItem\";\r\n\r\nexport interface IContentItems {\r\n contentItemList: Array<IContentItem>;\r\n dispose: () => void;\r\n}\r\nexport class ContentItems implements IContentItems {\r\n public contentItemList = new Array<IContentItem>();\r\n\r\n constructor() {\r\n this.contentItemListFactory();\r\n }\r\n\r\n contentItemListFactory(): void {\r\n try {\r\n let contentItemsElements: NodeListOf<Element> = document.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ContentItem.ContentItem));\r\n\r\n for (let i = 0; i < contentItemsElements.length; i += 1) {\r\n try {\r\n this.contentItemList.push(new ContentItem(contentItemsElements[i] as HTMLElement));\r\n } catch (error) {\r\n console.log(`ContentItems: contentItemListFactory ERROR on creation`, error);\r\n }\r\n }\r\n } catch (error) {\r\n console.log('ContentItems: contentItemListFactory ERROR:', error);\r\n }\r\n\r\n }\r\n\r\n\r\n dispose(): void {\r\n try {\r\n this.contentItemList.forEach((contentItem: IContentItem) => contentItem.dispose());\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n public static contentItemsFactory(): ContentItems {\r\n try {\r\n return new ContentItems();\r\n } catch (error) {\r\n console.log('ContentItems.contentItemsFactory ERROR', error);\r\n }\r\n }\r\n\r\n}","import { InstanceComponentBase } from '../../shared/instanceComponentBase';\r\nimport { AttributeEnums } from '../../shared/utilities/enums/attributeEnums';\r\nimport { StringEnums } from '../../shared/utilities/enums/stringEnums';\r\nimport { HelperUtils } from '../../shared/utilities/helperUtils';\r\n\r\nexport interface GalleryInterface {\r\n htmlElement: Element;\r\n}\r\n\r\nexport class Gallery extends InstanceComponentBase {\r\n\r\n private mainArea = <HTMLElement>this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbGalleryMainArea));\r\n public selectedElement: Element;\r\n public placeholder: Element;\r\n\r\n private readonly _resizeController;\r\n private readonly _setMainAreaBackgroundWithEvent;\r\n private readonly _setMainAreaBackgroundWithSelectedElement;\r\n private readonly _setMainAreaBackgroundAndTileToSelect;\r\n\r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n\r\n //----- Event Listener Bindings Start -----//\r\n this._resizeController = this.resizeController.bind(this);\r\n this._setMainAreaBackgroundWithEvent = this.setMainAreaBackgroundWithEvent.bind(this);\r\n this._setMainAreaBackgroundWithSelectedElement = this.setMainAreaBackgroundWithSelectedElement.bind(this);\r\n this._setMainAreaBackgroundAndTileToSelect = this.setMainAreaBackgroundAndTileToSelect.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n this.initialise();\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachCellEventListener();\r\n this.attachResizeControllerEvent();\r\n //----- Initialise Event Listeners End -----//\r\n }\r\n\r\n initialise() {\r\n let clone = <Element>this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbGalleryMainArea)).cloneNode(true);\r\n this.selectedElement = clone;\r\n this.placeholder = clone;\r\n }\r\n\r\n getElementToMoveIntoView() {\r\n let scrollableArea: HTMLElement = this.htmlElement.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbGalleryChooserTiles));\r\n let scrollPosition = scrollableArea.scrollLeft;\r\n let scrollableAreaWidth = scrollableArea.getBoundingClientRect().width;\r\n let scrollCount = Math.round(scrollPosition / scrollableAreaWidth) + 1;\r\n return scrollCount;\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachResizeControllerEvent(): void {\r\n window.addEventListener(\"resize\", this._resizeController);\r\n }\r\n\r\n attachCellEventListener() {\r\n let cells = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.Gallery.GallerySelectableCell));\r\n for (let i = 0; i < cells.length; i++) {\r\n this.attachHoverEventListener(cells[i]);\r\n this.attachLeaveEventListener(cells[i]);\r\n this.attachClickEventListener(cells[i]);\r\n }\r\n }\r\n\r\n attachHoverEventListener(cell: Element) {\r\n cell.addEventListener('mouseenter', this._setMainAreaBackgroundWithEvent);\r\n }\r\n\r\n attachLeaveEventListener(cell: Element) {\r\n cell.addEventListener('mouseleave', this._setMainAreaBackgroundWithSelectedElement);\r\n }\r\n\r\n attachClickEventListener(cell: Element) {\r\n cell.addEventListener('click', this._setMainAreaBackgroundAndTileToSelect);\r\n }\r\n\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeResizeControllerEvent(): void {\r\n window.removeEventListener(\"resize\", this._resizeController);\r\n }\r\n\r\n removeCellEventListener() {\r\n let cells = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.Gallery.GallerySelectableCell));\r\n for (let i = 0; i < cells.length; i++) {\r\n this.removeHoverEventListener(cells[i]);\r\n this.removeLeaveEventListener(cells[i]);\r\n this.removeClickEventListener(cells[i]);\r\n }\r\n }\r\n\r\n removeHoverEventListener(cell: Element) {\r\n cell.removeEventListener('mouseenter', this._setMainAreaBackgroundWithEvent);\r\n }\r\n\r\n removeLeaveEventListener(cell: Element) {\r\n cell.removeEventListener('mouseleave', this._setMainAreaBackgroundWithSelectedElement);\r\n }\r\n\r\n removeClickEventListener(cell: Element) {\r\n cell.removeEventListener('click', this._setMainAreaBackgroundAndTileToSelect);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n resizeController(): void {\r\n console.log('Gallery: resizeController - Beginning');\r\n this.mainArea.style.height = 'auto';\r\n }\r\n\r\n setMainAreaBackgroundWithEvent(e: Event) {\r\n console.log('Gallery: setMainAreaBackgroundWithEvent - Beginning');\r\n let tagertElement = e.target as Element;\r\n this.setMainAreaBackground(tagertElement);\r\n }\r\n\r\n setMainAreaBackgroundWithSelectedElement(): void {\r\n console.log('Gallery: setMainAreaBackgroundWithSelectedElement - Beginning');\r\n this.setMainAreaBackground(this.selectedElement);\r\n }\r\n\r\n setMainAreaBackgroundAndTileToSelect(e: Event): void {\r\n console.log('Gallery: setMainAreaBackgroundAndTileToSelect - Beginning');\r\n let tagertElement = e.target as Element;\r\n let cell = tagertElement.closest(HelperUtils.addCssClassDot(StringEnums.CssClass.LbGalleryChooserTilesCell));\r\n this.setMainAreaBackground(cell);\r\n this.setTileToSelected(cell);\r\n this.selectedElement = cell;\r\n }\r\n\r\n setMainAreaBackground(element: Element) {\r\n console.log('Gallery: setMainAreaBackground - Beginning');\r\n //this.mainArea.style.height = this.mainArea.firstElementChild.clientHeight + 'px';\r\n if (element != null) { \r\n let updatedInnerHTML = element.innerHTML.replace('extrasmallsquarecropped', 'mediumletterboxcropped').replace(AttributeEnums.ProductSelector.ProductSelectorSwatchSrc, AttributeEnums.ProductSelector.ProductSelectorSwatchPreviewSrc);\r\n\r\n this.mainArea.innerHTML = updatedInnerHTML;\r\n }\r\n }\r\n\r\n setTileToSelected(element: Element) {\r\n console.log('Gallery: setTileToSelected - Beginning');\r\n this.reset();\r\n element.classList.add(StringEnums.CssClass.LbGalleryChooserTilesCellSelected);\r\n }\r\n\r\n //------ Event Listener Methods End -----//\r\n\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n\r\n setMainBackgroundAreaById(id: number) {\r\n let selectedCell = this.getSelectedCellById(id);\r\n this.setMainAreaBackground(selectedCell);\r\n }\r\n\r\n setTileToSelectedById(id: number) {\r\n this.reset();\r\n let selectedCellById: HTMLElement = this.getSelectedCellById(id);\r\n if (selectedCellById != null) {\r\n selectedCellById.classList.add(StringEnums.CssClass.LbGalleryChooserTilesCellSelected);\r\n }\r\n }\r\n\r\n getSelectedCellById(id: number) {\r\n return this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Gallery.GalleryId, id.toString())) as HTMLElement;\r\n }\r\n\r\n reset() {\r\n let cells = this.htmlElement.querySelectorAll(HelperUtils.addCssClassDot(StringEnums.CssClass.LbGalleryChooserTilesCellSelected));\r\n for (let i = 0; i < cells.length; i++) {\r\n cells[i].classList.remove(StringEnums.CssClass.LbGalleryChooserTilesCellSelected);\r\n }\r\n }\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n this.removeResizeControllerEvent();\r\n this.removeCellEventListener();\r\n this.delete();\r\n }\r\n\r\n delete(): void {\r\n if ((<any>window)[this.htmlElement.getAttribute(AttributeEnums.Gallery.Gallery) + 'Gallery']) {\r\n console.log('GalleryController: Delete - Deleting Gallery Reference');\r\n delete (<any>window)[this.htmlElement.getAttribute(AttributeEnums.Gallery.Gallery) + 'Gallery'];\r\n }\r\n else {\r\n console.log('GalleryController: Delete - Gallery Reference Not Found');\r\n }\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { ContentItems, IContentItems } from \"../contentItems/contentItems\";\r\nimport { BannerPromotions, IBannerPromotions } from \"../promotions/bannerPromotions\";\r\n\r\nexport interface IGlobalComponents {\r\n bannerPromotions: IBannerPromotions;\r\n dispose: () => void;\r\n}\r\n\r\nexport class GlobalComponents implements IGlobalComponents {\r\n public bannerPromotions: IBannerPromotions;\r\n public contentItems: IContentItems;\r\n\r\n constructor() {\r\n\r\n this.bannerPromotions = BannerPromotions.bannerPromotionsFactory();\r\n this.contentItems = ContentItems.contentItemsFactory();\r\n }\r\n\r\n public static initialiseGlobalComponents(): void {\r\n try {\r\n (<any>window).GlobalComponents = new GlobalComponents();\r\n } catch (error) {\r\n console.log('GlobalComponents.initialiseGlobalComponents ERROR', error);\r\n }\r\n }\r\n\r\n public static getGlobalComponents(): GlobalComponents {\r\n try {\r\n return (<any>window).GlobalComponents;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n this.bannerPromotions.dispose();\r\n } catch (error) {\r\n console.log('Static: dispose ERROR', error);\r\n }\r\n }\r\n}","import { PopOutController } from \"../../shared/popOutController\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { TypeUtils } from \"../../shared/utilities/typeUtils\";\r\n\r\nexport interface IGroupPickerState {\r\n selectedPrice?: string;\r\n selectedExtraId?: number;\r\n selectedGroupPickerFor: string;\r\n groupId: number;\r\n selectedOptionName?: string;\r\n groupName: string;\r\n selectorType: string;\r\n}\r\nexport namespace GroupPicker {\r\n export function mapSelectedGroupHiddenInputToIGroupPicker(groupPickerNewSelection: HTMLElement): IGroupPickerState {\r\n try{\r\n console.log('GroupPicker: mapSelectedGroupHiddenInputToIGroupPicker Element', groupPickerNewSelection);\r\n let groupPickerState: IGroupPickerState = {\r\n\r\n groupId: +groupPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorGroupId),\r\n groupName: groupPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorGroupName),\r\n selectedExtraId: +groupPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorExtraId),\r\n selectedOptionName: groupPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorName),\r\n selectedPrice: groupPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorPrice),\r\n selectorType: groupPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorType),\r\n selectedGroupPickerFor: groupPickerNewSelection.getAttribute(AttributeEnums.ProductSelector.ProductSelectorFor),\r\n };\r\n return groupPickerState;\r\n } catch(error){\r\n console.log('GroupPicker: mapSelectedGroupHiddenInputToIGroupPicker Element ERROR', error);\r\n return null;\r\n }\r\n }\r\n\r\n export function updateSelectedElementOnClick(clickElement: HTMLElement) {\r\n let dataProductSelectorGroupAll = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.GroupPicker.GroupPicker)).querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorItem));\r\n deselectProductSelector(dataProductSelectorGroupAll);\r\n selectProductSelector(clickElement);\r\n }\r\n\r\n function deselectProductSelector(productSelectorGroup: NodeListOf<Element>): void {\r\n console.log('SelectorGlobal: deselectProductSelector');\r\n for (let i = 0; i < productSelectorGroup.length; i += 1) {\r\n const currentElement = productSelectorGroup[i];\r\n currentElement.classList.remove(StringEnums.CssClass.LbSelected);\r\n currentElement.setAttribute(AttributeEnums.ProductSelector.ProductSelectorIsSelected, 'false');\r\n }\r\n }\r\n\r\n function selectProductSelector(clickElement: HTMLElement): void {\r\n console.log('SelectorGlobal: selectProductSelector');\r\n clickElement.classList.add(StringEnums.CssClass.LbSelected);\r\n clickElement.setAttribute(AttributeEnums.ProductSelector.ProductSelectorIsSelected, 'true');\r\n let popOutElement: Element = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.GroupPicker.GroupPicker) + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId));\r\n if (PopOutController.hasIdLowerLevel(popOutElement.getAttribute(AttributeEnums.PopOut.PopOutId))) {\r\n\r\n let levelUpPopOutId: string = PopOutController.getIdLowerLevel(popOutElement.getAttribute(AttributeEnums.PopOut.PopOutId));\r\n ((<any>window).popOutController as PopOutController).openByIdAndFamily(levelUpPopOutId, popOutElement.getAttribute(AttributeEnums.PopOut.PopOutFamily));\r\n } else {\r\n ((<any>window).popOutController as PopOutController).closeAllMenus();\r\n }\r\n }\r\n\r\n\r\n}\r\n","export namespace LoadingTemplates {\r\n\r\n export const productLoadingTemplate = `\r\n <div class=\"lb_popOutWrapper lb_spinnyWheel\">\r\n </div>\r\n `;\r\n\r\n export const productAddingToBasketTemplate = `\r\n <div class=\"lb_popOutWrapper lb_spinnyWheel\">\r\n </div>\r\n `;\r\n\r\n}\r\n\r\n","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\n\r\nexport interface IBaseMediaTile extends IInstanceComponentBase {\r\n disableSwipe : boolean;\r\n active: boolean;\r\n}\r\n\r\nexport abstract class BaseMediaTile extends InstanceComponentBase implements IBaseMediaTile {\r\n \r\n public disableSwipe: boolean = false;\r\n\r\n private _active: boolean = false;\r\n public get active() : boolean {\r\n return this._active;\r\n }\r\n\r\n setTileActiveState(activeState : boolean) {\r\n if(activeState !== this._active){\r\n console.log(`BaseMediaTile: setTileActiveState - active state changed ${activeState}`);\r\n this._active = activeState;\r\n if (this.active) {\r\n this.onActivated();\r\n } else {\r\n this.onDeactivated();\r\n }\r\n }\r\n }\r\n\r\n onActivated() : void{\r\n }\r\n\r\n onDeactivated() : void{\r\n }\r\n\r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n }\r\n\r\n dispose(): void {\r\n \r\n }\r\n\r\n}","import { BaseMediaTile, IBaseMediaTile } from \"./baseMediaTile\";\r\n\r\nexport interface IButtonImageMediaTile extends IBaseMediaTile {\r\n\r\n}\r\n\r\nexport class ButtonImageMediaTile extends BaseMediaTile implements IButtonImageMediaTile {\r\n \r\n constructor(public htmlElement: Element) {\r\n\r\n super(htmlElement);\r\n }\r\n\r\n dispose(): void {\r\n \r\n }\r\n \r\n}","import { BaseMediaTile, IBaseMediaTile } from \"./baseMediaTile\";\r\n\r\nexport interface IImageMediaTile extends IBaseMediaTile {\r\n\r\n}\r\n\r\nexport class ImageMediaTile extends BaseMediaTile implements IImageMediaTile {\r\n \r\n constructor(public htmlElement: Element) {\r\n\r\n super(htmlElement);\r\n }\r\n\r\n dispose(): void {\r\n \r\n }\r\n \r\n}","import { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { YouTubeVideo } from \"../video/youTubeVideo\";\r\nimport { BaseMediaTile, IBaseMediaTile } from \"./baseMediaTile\";\r\n\r\nexport interface ILazyYouTubeMediaTile extends IBaseMediaTile {\r\n}\r\n\r\nexport class LazyYouTubeMediaTile extends BaseMediaTile implements ILazyYouTubeMediaTile {\r\n\r\n public youTubeVideo: YouTubeVideo;\r\n\r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n\r\n this.createYouTubeVideoFactory();\r\n }\r\n\r\n createYouTubeVideoFactory(): void {\r\n let videoAttr: string = this.htmlElement.getAttribute(AttributeEnums.Video.Video);\r\n if (videoAttr !== null) {\r\n this.youTubeVideo = new YouTubeVideo(this.htmlElement);\r\n }\r\n }\r\n\r\n dispose(): void {\r\n\r\n }\r\n\r\n}","import { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { TypeUtils } from \"../../shared/utilities/typeUtils\";\r\nimport { ButtonImageMediaTile } from \"./buttonImageMediaTile\";\r\nimport { ImageMediaTile } from \"./imageMediaTile\";\r\nimport { LazyYouTubeMediaTile } from \"./lazyYouTubeMediaTile\";\r\nimport { IYouTubeParameters, YouTubeMediaTile } from \"./youTubeMediaTile\";\r\nimport { ZoomedImageMediaTile } from \"./zoomedImageMediaTile\";\r\n\r\n\r\nfunction imageMediaTileFactory(htmlElement: HTMLElement): ImageMediaTile {\r\n if (htmlElement.hasAttribute(AttributeEnums.ImageMediaTile.ImageMediaTile)) {\r\n return new ImageMediaTile(htmlElement);\r\n } else {\r\n throw new Error('Expected image media tile but got wrong type');\r\n }\r\n}\r\n\r\nfunction buttonImageMediaTileFactory(htmlElement: HTMLElement): ButtonImageMediaTile {\r\n if (htmlElement.hasAttribute(AttributeEnums.ButtonImageMediaTile.ButtonImageMediaTile)) {\r\n return new ButtonImageMediaTile(htmlElement);\r\n } else {\r\n throw new Error('Expected button image media tile but got wrong type');\r\n }\r\n}\r\n\r\nfunction zoomedImageMediaTileFactory(htmlElement: HTMLElement): ZoomedImageMediaTile {\r\n if (htmlElement.hasAttribute(AttributeEnums.ZoomedImageMediaTile.ZoomedImageMediaTile)) {\r\n\r\n return new ZoomedImageMediaTile(htmlElement);\r\n } else {\r\n throw new Error('Expected zoomed image media tile but got wrong type');\r\n }\r\n}\r\n\r\nfunction youTubeMediaTileFactory(htmlElement: HTMLElement): YouTubeMediaTile {\r\n if (htmlElement.hasAttribute(AttributeEnums.YouTubeMediaTile.YouTubeMediaTile)) {\r\n\r\n let youTubeParameters = {} as IYouTubeParameters;\r\n if (htmlElement.hasAttribute(AttributeEnums.YouTubeMediaTile.AutoPlay)) {\r\n youTubeParameters.autoPlay = TypeUtils.convertToBoolean(htmlElement.getAttribute(AttributeEnums.YouTubeMediaTile.AutoPlay));\r\n }\r\n if (htmlElement.hasAttribute(AttributeEnums.YouTubeMediaTile.ClosedCaptionOnLoad)) {\r\n youTubeParameters.closedCaptionOnLoad = TypeUtils.convertToBoolean(htmlElement.getAttribute(AttributeEnums.YouTubeMediaTile.ClosedCaptionOnLoad));\r\n }\r\n if (htmlElement.hasAttribute(AttributeEnums.YouTubeMediaTile.DisableFullScreen)) {\r\n youTubeParameters.disableFullScreen = TypeUtils.convertToBoolean(htmlElement.getAttribute(AttributeEnums.YouTubeMediaTile.DisableFullScreen));\r\n }\r\n if (htmlElement.hasAttribute(AttributeEnums.YouTubeMediaTile.DisableKeyboardControls)) {\r\n youTubeParameters.disableKeyboardControls = TypeUtils.convertToBoolean(htmlElement.getAttribute(AttributeEnums.YouTubeMediaTile.DisableKeyboardControls));\r\n }\r\n if (htmlElement.hasAttribute(AttributeEnums.YouTubeMediaTile.DisplayControl)) {\r\n youTubeParameters.displayControl = TypeUtils.convertToBoolean(htmlElement.getAttribute(AttributeEnums.YouTubeMediaTile.DisplayControl));\r\n }\r\n return new YouTubeMediaTile(htmlElement, youTubeParameters);\r\n\r\n } else {\r\n throw new Error('Expected You Tube media tile but got wrong type');\r\n }\r\n}\r\n\r\nfunction lazyYouTubeMediaTileFactory(htmlElement: HTMLElement): LazyYouTubeMediaTile {\r\n if (htmlElement.hasAttribute(AttributeEnums.LazyYouTubeMediaTile.LazyYouTubeMediaTile)) {\r\n return new LazyYouTubeMediaTile(htmlElement);\r\n\r\n } else {\r\n throw new Error('Expected You Tube media tile but got wrong type');\r\n }\r\n}\r\n\r\nexport function mediaTileFactory(htmlElement: HTMLElement) {\r\n if (htmlElement.hasAttribute(AttributeEnums.ImageMediaTile.ImageMediaTile)) {\r\n return imageMediaTileFactory(htmlElement);\r\n } else if (htmlElement.hasAttribute(AttributeEnums.ZoomedImageMediaTile.ZoomedImageMediaTile)) {\r\n return zoomedImageMediaTileFactory(htmlElement);\r\n } else if (htmlElement.hasAttribute(AttributeEnums.YouTubeMediaTile.YouTubeMediaTile)) {\r\n return youTubeMediaTileFactory(htmlElement);\r\n } else if (htmlElement.hasAttribute(AttributeEnums.LazyYouTubeMediaTile.LazyYouTubeMediaTile)) {\r\n return lazyYouTubeMediaTileFactory(htmlElement);\r\n } else if (htmlElement.hasAttribute(AttributeEnums.ButtonImageMediaTile.ButtonImageMediaTile)) {\r\n return buttonImageMediaTileFactory(htmlElement);\r\n } else {\r\n console.log(`MediaTileFactory: ERROR media tile type not valid`);\r\n }\r\n}","import { BaseMediaTile, IBaseMediaTile } from \"./baseMediaTile\";\r\n\r\nexport interface IYouTubeMediaTile extends IBaseMediaTile {\r\n youTubeParameters: IYouTubeParameters;\r\n}\r\n\r\nexport interface IYouTubeParameters {\r\n displayControl?: boolean;\r\n disableKeyboardControls?: boolean;\r\n autoPlay?: boolean;\r\n closedCaptionOnLoad?: boolean;\r\n disableFullScreen?: boolean;\r\n isPlaying?: boolean;\r\n showRelatedVideos?: boolean;\r\n}\r\n\r\nexport class YouTubeMediaTile extends BaseMediaTile implements IYouTubeMediaTile {\r\n \r\n public youTubeParameters: IYouTubeParameters = {\r\n displayControl: true,\r\n disableKeyboardControls: false,\r\n autoPlay: false,\r\n closedCaptionOnLoad: false,\r\n disableFullScreen: false,\r\n isPlaying: false,\r\n showRelatedVideos: false\r\n };\r\n\r\n constructor(public htmlElement: Element, youTubeParameters: IYouTubeParameters) {\r\n\r\n super(htmlElement);\r\n this.youTubeParameters = {...this.youTubeParameters, ...youTubeParameters};\r\n }\r\n\r\n dispose(): void {\r\n \r\n }\r\n \r\n}","import { AsyncUtils } from \"../../shared/utilities/asyncUtils\";\r\nimport { SwipedEventEnums } from \"../../shared/utilities/enums/swipedEventEnums\";\r\nimport { IImageMediaTile, ImageMediaTile } from \"./imageMediaTile\";\r\n\r\nexport interface IZoomedImageMediaTile extends IImageMediaTile { }\r\ninterface XYCoordinates {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport class ZoomedImageMediaTile extends ImageMediaTile implements IZoomedImageMediaTile {\r\n\r\n private readonly _handleMouseMove;\r\n\r\n constructor(public htmlElement: Element) {\r\n\r\n super(htmlElement);\r\n\r\n this._handleMouseMove = this.handleMouseOver.bind(this);\r\n this.disableSwipe = true;\r\n this.resetImageScrollToCenter();\r\n }\r\n\r\n attachMouseMoveEventListener(): void {\r\n console.log(`ZoomedImageMediaTile: attachMouseMoveEventListener`);\r\n this.htmlElement.addEventListener('mousemove', this._handleMouseMove);\r\n }\r\n removeMouseMoveEventListener(): void {\r\n console.log(`ZoomedImageMediaTile: removeMouseMoveEventListener`);\r\n this.htmlElement.removeEventListener('mousemove', this._handleMouseMove);\r\n }\r\n\r\n resetImageScrollToCenter(): void {\r\n console.log(`ZoomedImageMediaTile: resetImageScrollToCenter`);\r\n const left = (this.htmlElement.scrollWidth - this.htmlElement.clientWidth) / 2;\r\n const top = (this.htmlElement.scrollHeight - this.htmlElement.clientHeight) / 2;\r\n this.htmlElement.scrollTo({ left: left, top: top } as ScrollToOptions);\r\n }\r\n\r\n relativeCoords(e: MouseEvent): XYCoordinates {\r\n const bounds = this.htmlElement.getBoundingClientRect();\r\n const x: number = e.pageX - bounds.left;\r\n const y: number = (e.pageY - bounds.top) - Math.round(window.scrollY);\r\n return { x: x, y: y } as XYCoordinates;\r\n }\r\n\r\n handleMouseOver(e: MouseEvent) {\r\n const mouse: XYCoordinates = this.relativeCoords(e);\r\n const clientWidthExponent = mouse.x / this.htmlElement.clientWidth;\r\n const xScrollTarget = (this.htmlElement.scrollWidth - this.htmlElement.clientWidth) * clientWidthExponent;\r\n const clientHeightExponent = mouse.y / this.htmlElement.clientHeight;\r\n const yScrollTarget = (this.htmlElement.scrollHeight - this.htmlElement.clientHeight) * clientHeightExponent;\r\n\r\n this.htmlElement.scrollTo({ left: xScrollTarget, top: yScrollTarget } as ScrollToOptions);\r\n }\r\n\r\n onActivated(): void {\r\n console.log(`ZoomedImageMediaTile: onActivated`);\r\n AsyncUtils.delay(1000).then(() => {\r\n this.attachMouseMoveEventListener();\r\n this.resetImageScrollToCenter();\r\n });\r\n }\r\n\r\n onDeactivated(): void {\r\n console.log(`ZoomedImageMediaTile: onDeactivated`);\r\n this.removeMouseMoveEventListener();\r\n AsyncUtils.delay(1000).then(() => { this.resetImageScrollToCenter(); });\r\n }\r\n\r\n dispose(): void {\r\n this.removeMouseMoveEventListener();\r\n }\r\n\r\n}","import { HttpRequest } from \"../../shared/ajax\";\r\nimport { initialise } from \"../../shared/initialiser\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { ResponsiveState } from \"../../shared/responsiveState\";\r\nimport { CookieUtils } from \"../../shared/utilities/cookieUtils\";\r\nimport { CustomEvents } from \"../../shared/utilities/customEvents\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CookieEnums } from \"../../shared/utilities/enums/cookieEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { SessionStorageEnums } from \"../../shared/utilities/enums/sessionStorageEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nconst toggleFeatures = require('../../config/toggleFeatures.json');\r\n\r\nexport interface INotification {\r\n timeout: number;\r\n delay: number;\r\n placeHolderElement: HTMLElement;\r\n notificationElement: HTMLElement;\r\n chatButtonElement?: HTMLElement;\r\n phoneButtonElement?: HTMLElement;\r\n}\r\n\r\nexport class Notification implements INotification {\r\n public timeout: number;\r\n public delay: number;\r\n public chatButtonElement?: HTMLElement;\r\n public phoneButtonElement?: HTMLElement;\r\n private delayTimeoutId: NodeJS.Timeout;\r\n\r\n private readonly _handleCloseButtonClick;\r\n private readonly _handleChatButtonClick;\r\n private readonly _handlePhoneButtonClick;\r\n private readonly _handleShowOverlayEvent;\r\n private readonly _handleHideOverlayEvent;\r\n private readonly _handleLiveChatLoadComplete;\r\n \r\n\r\n constructor(public placeHolderElement: HTMLElement, public notificationElement: HTMLElement) {\r\n try {\r\n this._handleCloseButtonClick = this.handleCloseButtonClick.bind(this);\r\n this._handleChatButtonClick = this.handleChatButtonClick.bind(this);\r\n this._handlePhoneButtonClick = this.handlePhoneButtonClick.bind(this);\r\n this._handleShowOverlayEvent = this.handleShowOverlayEvent.bind(this);\r\n this._handleHideOverlayEvent = this.handleHideOverlayEvent.bind(this);\r\n this._handleLiveChatLoadComplete = this.handleLiveChatLoadComplete.bind(this);\r\n\r\n this.initialise();\r\n } catch (error) {\r\n console.log('Notification: constructor ERROR', error);\r\n this.dispose();\r\n }\r\n }\r\n\r\n attachCloseClickEventListener(): void {\r\n try {\r\n let closeButtonElement = this.notificationElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.CloseButton));\r\n if (closeButtonElement) {\r\n closeButtonElement.addEventListener('click', this._handleCloseButtonClick);\r\n }\r\n } catch (error) {\r\n console.log('Notification: attachCloseClickEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n\r\n removeCloseClickEventListener(): void {\r\n try {\r\n let closeButtonElement = this.notificationElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.CloseButton));\r\n if (closeButtonElement) {\r\n closeButtonElement.removeEventListener('click', this._handleCloseButtonClick);\r\n }\r\n } catch (error) {\r\n console.log('Notification: removeCloseClickEventListener ERROR', error);\r\n }\r\n }\r\n\r\n attachChatButtonClickEventListener(): void {\r\n try {\r\n if (this.chatButtonElement) {\r\n this.chatButtonElement.addEventListener('click', this._handleChatButtonClick);\r\n }\r\n } catch (error) {\r\n console.log('Notification: attachChatButtonClickEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n removeChatButtonClickEventListener(): void {\r\n try {\r\n if (this.chatButtonElement) {\r\n this.chatButtonElement.removeEventListener('click', this._handleChatButtonClick);\r\n }\r\n } catch (error) {\r\n console.log('Notification: removeChatButtonClickEventListener ERROR', error);\r\n }\r\n }\r\n\r\n attachPhoneButtonClickEventListener(): void {\r\n try {\r\n if (this.phoneButtonElement) {\r\n this.phoneButtonElement.addEventListener('click', this._handlePhoneButtonClick);\r\n }\r\n } catch (error) {\r\n console.log('Notification: attachPhoneButtonClickEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n removePhoneButtonClickEventListener(): void {\r\n try {\r\n if (this.phoneButtonElement) {\r\n this.phoneButtonElement.removeEventListener('click', this._handlePhoneButtonClick);\r\n }\r\n } catch (error) {\r\n console.log('Notification: removePhoneButtonClickEventListener ERROR', error);\r\n }\r\n }\r\n\r\n attachLiveChatLoadCompleteEventListener(): void{\r\n try {\r\n (<any>window).addEventListener(CustomEventEnums.LiveChatLoadComplete, this._handleLiveChatLoadComplete);\r\n } catch (error) {\r\n console.log('Notification: attachLiveChatLoadCompleteEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n removeLiveChatLoadCompleteEventListener(): void{\r\n try {\r\n (<any>window).removeEventListener(CustomEventEnums.LiveChatLoadComplete, this._handleLiveChatLoadComplete);\r\n } catch (error) {\r\n console.log('Notification: removeLiveChatLoadCompleteEventListener ERROR', error);\r\n }\r\n }\r\n\r\n attachShowOverlayEventListener(): void{\r\n try {\r\n (<any>window).addEventListener(CustomEventEnums.ShowOverlay, this._handleShowOverlayEvent);\r\n } catch (error) {\r\n console.log('Notification: attachShowOverlayEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n removeShowOverlayEventListener(): void{\r\n try {\r\n (<any>window).removeEventListener(CustomEventEnums.ShowOverlay, this._handleShowOverlayEvent);\r\n } catch (error) {\r\n console.log('Notification: removeShowOverlayEventListener ERROR', error);\r\n }\r\n }\r\n attachHideOverlayEventListener(): void{\r\n try {\r\n (<any>window).addEventListener(CustomEventEnums.HideOverlay, this._handleHideOverlayEvent);\r\n } catch (error) {\r\n console.log('Notification: attachHideOverlayEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n removeHideOverlayEventListener(): void{\r\n try {\r\n (<any>window).removeEventListener(CustomEventEnums.HideOverlay, this._handleHideOverlayEvent);\r\n } catch (error) {\r\n console.log('Notification: removeHideOverlayEventListener ERROR', error);\r\n }\r\n }\r\n \r\n initialise(): void {\r\n try {\r\n this.setTimeout();\r\n this.setDelay();\r\n this.attachCloseClickEventListener();\r\n this.attachShowOverlayEventListener();\r\n this.attachHideOverlayEventListener();\r\n if(sessionStorage.getItem(SessionStorageEnums.LiveChatCached) === 'true')\r\n {\r\n console.log('Notification: initialise Live Chat Cache Loaded');\r\n this.openNotificationPanelOnDelay();\r\n }else{\r\n console.log('Notification: initialise Live Chat Cache Not Loaded - attachLiveChatLoadCompleteEventListener');\r\n this.attachLiveChatLoadCompleteEventListener();\r\n }\r\n this.setChatButtonElementAndAttachEventListener();\r\n this.setPhoneButtonElementAndAttachEventListener();\r\n\r\n } catch (error) {\r\n console.log('Notification: initialise ERROR', error);\r\n this.dispose();\r\n }\r\n }\r\n\r\n handleCloseButtonClick(): void {\r\n this.closeNotificationPanel();\r\n CookieUtils.setCookie(CookieEnums.NotificationStatus, StringEnums.Notification.ConsentDismiss, 0, 1);\r\n }\r\n\r\n handleChatButtonClick(event: Event): void {\r\n console.log('Notification: handleChatButtonClick');\r\n this.closeNotificationPanel();\r\n (<any>window).dispatchEvent(CustomEvents.openLiveChatEvent());\r\n }\r\n\r\n handlePhoneButtonClick(): void {\r\n console.log('Notification: handlePhoneButtonClick');\r\n this.closeNotificationPanel();\r\n }\r\n\r\n handleLiveChatLoadComplete(): void{\r\n console.log('Notification: handleLiveChatLoadComplete');\r\n this.openNotificationPanelOnDelay();\r\n this.removeLiveChatLoadCompleteEventListener();\r\n }\r\n \r\n handleShowOverlayEvent():void{\r\n console.log('Notification: handleShowOverlayEvent');\r\n \r\n this.clearTimeout(this.delayTimeoutId);\r\n }\r\n\r\n handleHideOverlayEvent():void{\r\n console.log('Notification: handleHideOverlayEvent');\r\n\r\n this.clearTimeout(this.delayTimeoutId);\r\n\r\n this.openNotificationPanelOnDelay();\r\n }\r\n\r\n openNotificationPanelOnDelay():void{\r\n try {\r\n console.log('Notification: openNotificationPanelOnDelay');\r\n this.delayTimeoutId = setTimeout(() => {\r\n this.openNotificationPanel();\r\n }, this.delay);\r\n } catch (error) {\r\n console.log('Notification: openNotificationPanelOnDelay ERROR', error);\r\n }\r\n }\r\n\r\n openNotificationPanel():void{\r\n try {\r\n console.log('Notification: openNotificationPanel');\r\n\r\n let timeoutSeconds:Number = this.convertMilisecondsToSeconds(this.timeout);\r\n let progressBarTimerElement: HTMLElement = this.notificationElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.ProgressBarTimer)) as HTMLElement;\r\n progressBarTimerElement.setAttribute(\"style\", `transition:width ${timeoutSeconds}s linear`);\r\n \r\n this.notificationElement.classList.add(StringEnums.CssClass.LbActive);\r\n\r\n (<any>window).dispatchEvent(CustomEvents.notificationPanelIsOpenEvent());\r\n (<any>window).dispatchEvent(CustomEvents.hideLiveChatEvent());\r\n\r\n setTimeout(() => {\r\n this.closeNotificationPanel();\r\n }, this.timeout);\r\n\r\n this.incrementCookieTriggerCount(); \r\n \r\n this.removeHideOverlayEventListener();\r\n this.removeShowOverlayEventListener();\r\n \r\n } catch (error) {\r\n console.log('Notification: openNotificationPanel ERROR', error);\r\n }\r\n }\r\n\r\n clearTimeout(timeoutID:NodeJS.Timeout):void{\r\n try {\r\n if(this.delayTimeoutId !== null){\r\n console.log('Notification: clearTimeout');\r\n clearTimeout(timeoutID);\r\n }\r\n } catch (error) {\r\n console.log('Notification: clearTimeout ERROR', error);\r\n } \r\n }\r\n\r\n convertMilisecondsToSeconds(timeInMiliseconds:number):Number{\r\n return timeInMiliseconds * .001;\r\n }\r\n\r\n closeNotificationPanel():void{\r\n try {\r\n console.log('Notification: closeNotification');\r\n this.notificationElement.classList.remove(StringEnums.CssClass.LbActive);\r\n (<any>window).dispatchEvent(CustomEvents.notificationPanelIsClosedEvent());\r\n (<any>window).dispatchEvent(CustomEvents.showLiveChatEvent());\r\n this.dispose();\r\n } catch (error) {\r\n console.log('Notification: closeNotificationPanel ERROR', error);\r\n }\r\n }\r\n\r\n setTimeout(): void {\r\n try {\r\n let timeoutElement = this.notificationElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Placeholder)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Timeout)) as HTMLElement;\r\n if (timeoutElement) {\r\n this.timeout = +timeoutElement.getAttribute(AttributeEnums.Notification.Timeout);\r\n }\r\n } catch (error) {\r\n console.log('Notification: setTimeout - Failed to initialise ERROR', error);\r\n throw new Error('Notification: setTimeout - Failed to initialise ERROR');\r\n }\r\n }\r\n\r\n setDelay(): void {\r\n try {\r\n let delayElement = this.notificationElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Placeholder)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Delay)) as HTMLElement;\r\n if (delayElement) {\r\n this.delay = +delayElement.getAttribute(AttributeEnums.Notification.Delay);\r\n }\r\n } catch (error) {\r\n console.log('Notification: setDelay- Failed to initialise ERROR', error);\r\n throw new Error('Notification: setDelay- Failed to initialise ERROR');\r\n }\r\n }\r\n\r\n setChatButtonElementAndAttachEventListener(): void {\r\n try {\r\n this.chatButtonElement = this.notificationElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Button, UtilityEnums.NotificationButtonTypes.Chat)) as HTMLElement;\r\n if (this.chatButtonElement) {\r\n this.attachChatButtonClickEventListener();\r\n }\r\n } catch (error) {\r\n console.log('Notification: setChatButtonElementAndAttachEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n\r\n setPhoneButtonElementAndAttachEventListener(): void {\r\n try {\r\n this.phoneButtonElement = this.notificationElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Button, UtilityEnums.NotificationButtonTypes.Phone)) as HTMLElement;\r\n if (this.phoneButtonElement) {\r\n this.updateDisplayPhoneButton();\r\n this.attachPhoneButtonClickEventListener();\r\n }\r\n } catch (error) {\r\n console.log('Notification: setPhoneButtonElementAndAttachEventListener ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n\r\n updateDisplayPhoneButton():void{\r\n try {\r\n let responsiveState:StringEnums.Selectors = ResponsiveState.getStateAsEnum();\r\n if(responsiveState === StringEnums.Selectors.Desktop){\r\n this.phoneButtonElement.setAttribute(AttributeEnums.Notification.ButtonShow, 'false');\r\n }\r\n } catch (error) {\r\n console.log('Notification: updateDisplayPhoneButton ERROR', error);\r\n }\r\n }\r\n\r\n incrementCookieTriggerCount():void{\r\n try {\r\n console.log('Notification: incrementCookieTriggerCount');\r\n let triggerCount = 1;\r\n let notificationTriggerCount: string | null = CookieUtils.getCookie(CookieEnums.NotificationTriggerCount);\r\n if (notificationTriggerCount) {\r\n triggerCount = Number(notificationTriggerCount);\r\n triggerCount += 1;\r\n CookieUtils.setCookie(CookieEnums.NotificationTriggerCount, triggerCount.toString(), 0, 1);\r\n } \r\n } catch (error) {\r\n console.log('Notification: incrementCookieTriggerCount ERROR', error);\r\n }\r\n }\r\n\r\n static checkCookieTriggerCount():boolean{\r\n try {\r\n console.log('Notification: checkCookieTriggerCount');\r\n let notificationTriggerCount: string | null = CookieUtils.getCookie(CookieEnums.NotificationTriggerCount);\r\n if (notificationTriggerCount) {\r\n if (Number(notificationTriggerCount) < 5) {\r\n return true;\r\n } else{\r\n return false;\r\n }\r\n } else {\r\n let triggerCount = 1;\r\n CookieUtils.setCookie(CookieEnums.NotificationTriggerCount, triggerCount.toString(), 0, 1);\r\n return true;\r\n }\r\n } catch (error) {\r\n console.log('Notification: checkCookieTriggerCount ERROR', error);\r\n return false;\r\n }\r\n }\r\n\r\n static checkCookieStatus():boolean{\r\n try {\r\n console.log('Notification: checkCookieStatus');\r\n let notificationStatus: string | null = CookieUtils.getCookie(CookieEnums.NotificationStatus);\r\n if (notificationStatus) {\r\n if (notificationStatus === StringEnums.Notification.ConsentEnable) {\r\n return true;\r\n } \r\n else if(notificationStatus === StringEnums.Notification.ConsentDismiss){\r\n return false;\r\n }\r\n } else {\r\n CookieUtils.setCookie(CookieEnums.NotificationStatus, StringEnums.Notification.ConsentEnable, 0, 1);\r\n return true;\r\n }\r\n } catch (error) {\r\n console.log('Notification: checkCookieStatus ERROR', error);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public static async notificationFactory() {\r\n try {\r\n if(toggleFeatures.Notification){\r\n\r\n if(Notification.checkCookieStatus() && Notification.checkCookieTriggerCount()){\r\n let placeHolderElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Placeholder)) as HTMLElement;\r\n if (placeHolderElement) {\r\n await Notification.requestNotification(placeHolderElement);\r\n if(Notification.hasNotificationHtml()){\r\n let notificationElement = placeHolderElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Notification)) as HTMLElement;\r\n let newNotification = new Notification(placeHolderElement, notificationElement);\r\n (<any>window).notification = newNotification;\r\n }else{\r\n console.log('Notification: no notification found');\r\n }\r\n }\r\n }\r\n }\r\n\r\n } catch (error) {\r\n console.log('Notification: no notification placeholder ERROR', error);\r\n }\r\n }\r\n\r\n static async requestNotification(placeHolderElement: HTMLElement) {\r\n try {\r\n let url:string = location.href; \r\n let requestUrl:string = `${UrlEnums.NotificationUrls.Notification}?url=${url}`; \r\n let notificationHtml: string = await HttpRequest.get(requestUrl);\r\n placeHolderElement.innerHTML = notificationHtml;\r\n } catch (error) {\r\n console.log(`Notification: requestNotification failed requesting ajax for ${location.href} ERROR`, error);\r\n throw new Error();\r\n }\r\n }\r\n\r\n static hasNotificationHtml():boolean {\r\n let notificationElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Notification.Notification));\r\n if(notificationElement === null){\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n this.removeCloseClickEventListener();\r\n this.removeChatButtonClickEventListener();\r\n this.removePhoneButtonClickEventListener();\r\n this.removeLiveChatLoadCompleteEventListener();\r\n this.removeShowOverlayEventListener();\r\n this.removeHideOverlayEventListener();\r\n } catch (error) {\r\n console.log('Notification: dispose ERROR', error);\r\n }\r\n }\r\n\r\n delete():void {\r\n try {\r\n console.log('Notification: delete');\r\n if ((<any>window)['notification']) {\r\n console.log('Notification: delete - has a notification');\r\n delete (<any>window)['notification'];\r\n console.log('Notification: delete - reference notification');\r\n }\r\n else {\r\n console.log('Notification: delete - notification Reference Not Found');\r\n }\r\n } catch (error) {\r\n console.log('Notification: delete ERROR', error);\r\n }\r\n }\r\n}","import { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ButtonImageMediaTile } from \"../mediaTile/buttonImageMediaTile\";\r\nimport { IPagingSelectableCarousel, PagingSelectableCarousel } from \"../selectableCarousel/pagingSelectableCarousel\";\r\nimport { IProductListingPageOption } from \"./productListingPageOption\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport interface ICategoryPagingSelectableCarousel extends IPagingSelectableCarousel {\r\n\r\n displayLoading: () => void;\r\n getCellIdFromValue: (value: string) => number;\r\n setCurrentSelectedIndexAndStyleToNone: () => void;\r\n}\r\n\r\nexport class CategoryPagingSelectableCarousel extends PagingSelectableCarousel implements ICategoryPagingSelectableCarousel {\r\n\r\n private readonly categoryTypeString = \"category\";\r\n private isLoading: boolean = false;\r\n constructor(public htmlElement: Element, carouselOrientation: UtilityEnums.ComponentOrientation, topLevelHtmlElement?: HTMLElement) {\r\n super(htmlElement, carouselOrientation, topLevelHtmlElement);\r\n //this.totalOccupiedCells = this.occupiedCellsElements.length;\r\n //this.cellsPerPage = this.getCellsPerPage();\r\n //this.initialiseCarouselCurrentSelectedIndex();\r\n }\r\n\r\n setCarouselCurrentSelectedIndex() {\r\n console.log('categoryPagingSelectableCarousel: setCarouselCurrentSelectedIndex, HTMLelement', this.htmlElement);\r\n console.log('categoryPagingSelectableCarousel: setCarouselCurrentSelectedIndex HTML selected cell', this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.SelectedCell)));\r\n let selectedCellElement: HTMLElement | null = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.SelectedCell));\r\n\r\n if (selectedCellElement !== null) {\r\n try {\r\n let selectedIndex: number = +selectedCellElement.getAttribute(AttributeEnums.SelectableCarousel.Cell);\r\n if (selectedIndex !== null && selectedCellElement !== undefined) {\r\n this.carouselCurrentSelectedIndex = selectedIndex;\r\n this.resetMediaTileActiveState();\r\n this.setCurrentPage();\r\n console.log(`categoryPagingSelectableCarousel: setCarouselCurrentSelectedIndex - SelectedCell ${this.selectedCell}`);\r\n console.log(`categoryPagingSelectableCarousel: setCarouselCurrentSelectedIndex - currentPage ${this.currentPage}`);\r\n this.moveCarouselToPage(this.currentPage);\r\n this.setCarouselShowHideArrows();\r\n } else{\r\n this.removeSelectedAttributesAndCss();\r\n }\r\n } catch {\r\n }\r\n\r\n } else {\r\n this.removeSelectedAttributesAndCss();\r\n }\r\n }\r\n\r\n initialiseCarouselCurrentSelectedIndex(){\r\n this.setCarouselCurrentSelectedIndex();\r\n }\r\n\r\n setCurrentSelectedIndexAndStyleToNone(){\r\n this.carouselCurrentSelectedIndex = undefined;\r\n this.removeSelectedAttributesAndCss();\r\n }\r\n\r\n dispatchSelectedCarouselCellSelectedEvent(e: Event): void {\r\n console.log(`CategoryPagingSelectableCarousel: dispatchSelectedCarouselCellSelectedEvent`);\r\n\r\n let targetElement = e.target as HTMLElement;\r\n let cell = this.getSelectedCellForEvent(targetElement);\r\n\r\n if (cell !== null && this.isLoading === false) {\r\n let selectedIndex: number = + cell.getAttribute(AttributeEnums.SelectableCarousel.Cell);\r\n let querySelectorValue: string = cell.getAttribute(AttributeEnums.CategoryPagingSelectableCarousel.CategoryPagingSelectableCarouselValue);\r\n console.log(`CategoryPagingSelectableCarousel: dispatchSelectedCarouselCellSelectedEvent Cell ${cell}, `);\r\n this.htmlElement.dispatchEvent(this.productListingPageOptionSelectedCustomEvent(this.categoryTypeString, querySelectorValue));\r\n }\r\n }\r\n\r\n displayLoading() {\r\n this.mediaTiles.forEach((mediaTiles: ButtonImageMediaTile) => { mediaTiles.htmlElement.classList.add('lb-loadingTile') });\r\n this.isLoading = true;\r\n }\r\n\r\n public static reinitializeCategoryCarouselHtml(categoryOptions: IProductListingPageOption[], htmlElement: HTMLElement) {\r\n\r\n htmlElement.innerHTML = CategoryPagingSelectableCarousel.staticSelectableCarouselSliderAndContentHtml(categoryOptions);\r\n \r\n }\r\n\r\n private static createCellHtmlForCategoryOptions(categoryOptions: IProductListingPageOption[]) {\r\n let cellsHtml: string = '';\r\n\r\n for (let i = 0; i < categoryOptions.length; i += 1) {\r\n cellsHtml += CategoryPagingSelectableCarousel.createCellHtmlForCategoryOption(categoryOptions[i], i);\r\n }\r\n return cellsHtml;\r\n }\r\n\r\n private static createCellHtmlForCategoryOption(categoryOption: IProductListingPageOption, cellNumber: number) {\r\n let cellHtml: string = '';\r\n cellHtml += `<div data-selectable-carousel-cell=\"${cellNumber}\" class=\"lb_selectableCarousel_cells_cell\" data-category-paging-selectable-carousel-value=\"${categoryOption.optionValue}\">`;\r\n cellHtml += CategoryPagingSelectableCarousel.createTileHtmlForCategoryOption(categoryOption);\r\n cellHtml += `</div>`;\r\n return cellHtml;\r\n }\r\n\r\n private static createTileHtmlForCategoryOption(categoryOptions: IProductListingPageOption): string {\r\n let url: string = CategoryPagingSelectableCarousel.getImageUrlFromOptionValue(categoryOptions);\r\n let baseImagePath: string = urlPaths.baseImagePath;\r\n let imagePath = `${baseImagePath}/images/managed/category/${url}/mediumlargesquare/${url}.jpg`;\r\n let tileHtml = `<div data-media-tile=\"true\" data-button-image-media-tile=\"true\" class=\"lb_carouselTile lb_carouselTile-imageAndText\"><img width=\"276\" height=\"276\" src=\"${imagePath}\" alt=\"${categoryOptions.optionTitle}\"/><div class=\"lb_carouselTile_name\">${categoryOptions.optionTitle}</div></div>`;\r\n return tileHtml;\r\n }\r\n\r\n private static staticSelectableCarouselSliderAndContentHtml(categoryOptions: IProductListingPageOption[]) {\r\n let html: string = '';\r\n html += CategoryPagingSelectableCarousel.createPrevHtmlForCategoryOptions();\r\n html += `<div data-selectable-carousel-slider=\"true\" class=\"lb_selectableCarousel_cells\" style=\"flex:0 0 1045px\">`;\r\n html += CategoryPagingSelectableCarousel.createCellHtmlForCategoryOptions(categoryOptions);\r\n html += `</div>`;\r\n html += CategoryPagingSelectableCarousel.createNextHtmlForCategoryOptions();\r\n return html;\r\n }\r\n\r\n private static createPrevHtmlForCategoryOptions() {\r\n let prevHtml: string = `<div data-paging-selectable-carousel-prev=\"true\" class=\"lb_selectableCarousel_prev lb_selectableCarousel_prev-small lb-hidden\"></div>`;\r\n return prevHtml;\r\n }\r\n\r\n private static createNextHtmlForCategoryOptions() {\r\n let nextHtml: string = `<div data-paging-selectable-carousel-next=\"true\" class=\"lb_selectableCarousel_next lb_selectableCarousel_next-small\"></div>`;\r\n return nextHtml;\r\n }\r\n\r\n public static getImageUrlFromOptionValue(categoryOptions: IProductListingPageOption): string {\r\n let url = categoryOptions.optionValue.split('_')[1];\r\n return url;\r\n }\r\n\r\n getCellIdFromValue(value: string): number {\r\n let id = value.split('_')[0];\r\n let element = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CategoryPagingSelectableCarousel.CategoryPagingSelectableCarouselValue, value));\r\n let cellId: number = +element.getAttribute(AttributeEnums.SelectableCarousel.Cell);\r\n return cellId;\r\n }\r\n\r\n productListingPageOptionSelectedCustomEvent(type: string, value: string) {\r\n console.log(`ProductListingPageOption: productListingPageOptionSelectedCustomEvent type: ${type} value: ${value}`);\r\n return new CustomEvent(CustomEventEnums.ProductListingPageOptionSelected, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n type: type,\r\n value: value\r\n }\r\n });\r\n }\r\n\r\n dispose(): void {\r\n super.dispose();\r\n }\r\n}","import Swal from \"sweetalert2\";\r\nimport { IFilterClickGtmDataObject, IQuickLinkClickGtmDataObject, ISortClickGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\nimport { HistoryController, IHistoryController } from \"../../shared/historyController\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { IPopOutController } from \"../../shared/popOutController\";\r\nimport { ResponsiveState } from \"../../shared/responsiveState\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ReadyUtils } from \"../../shared/utilities/readyUtils\";\r\nimport { GlobalComponents, IGlobalComponents } from \"../globalComponents/globalComponents\";\r\nimport { BannerPromotions, IBannerPromotions } from \"../promotions/bannerPromotions\";\r\nimport { CategoryPagingSelectableCarousel, ICategoryPagingSelectableCarousel } from \"./categoryPagingSelectableCarousel\";\r\nimport { IProductListingPageBreadcrumb, ProductListingPageBreadcrumb } from \"./productListingPageBreadcrumb\";\r\nimport { IProductListingPageHeader, ProductListingPageHeader } from \"./productListingPageHeader\";\r\nimport { IProductListingPageOption } from \"./productListingPageOption\";\r\nimport { IProductListingPageOptions, ProductListingPageOptions } from \"./productListingPageOptions\";\r\nimport { IProductListingPageSelectedOptionsCarousel, ProductListingPageSelectedOptionsCarousel } from \"./productListingPageSelectedOptionsCarousel\";\r\nimport { IProductListingPageShowMore, ProductListingPageShowMore } from \"./productListingPageShowMore\";\r\nimport { IProductListingPageTiles, ProductListingPageTiles } from \"./productListingPageTiles\";\r\nconst settings = require('../../config/settings.json');\r\nexport interface IProductListingPage extends IInstanceComponentBase {\r\n querySelectorArray: QuerySelector[];\r\n}\r\nexport interface QuerySelector {\r\n type: string;\r\n value: string;\r\n}\r\nexport interface OptionUpdateDto {\r\n filterQuery: string;\r\n optionDisplayStates: OptionDisplayState[];\r\n}\r\n\r\nexport interface OptionDisplayState {\r\n value: string;\r\n showHide: boolean;\r\n optionalInnerShowHide: boolean | undefined;\r\n optionalInnerShowHideValue: string | undefined;\r\n}\r\n\r\nexport interface CategoryOption {\r\n optionTitle: string;\r\n optionValue: string;\r\n optionSelected: boolean;\r\n}\r\n\r\nexport interface Breadcrumb {\r\n url: string;\r\n name: string;\r\n position: number;\r\n}\r\n\r\nexport class ProductListingPage extends InstanceComponentBase implements IProductListingPage {\r\n public productListingPageOptions: IProductListingPageOptions;\r\n public productListingPageTiles: IProductListingPageTiles;\r\n public productListingPageHeader: IProductListingPageHeader;\r\n public productListingPageShowMore: IProductListingPageShowMore;\r\n public productListingPageSelectedOptionsCarousel: IProductListingPageSelectedOptionsCarousel;\r\n public productListingPageSelectedOptionsBlock: IProductListingPageSelectedOptionsCarousel;\r\n public categoryPagingSelectableCarousel: ICategoryPagingSelectableCarousel;\r\n public productListingPageBreadcrumb: IProductListingPageBreadcrumb;\r\n public querySelectorString: string;\r\n public querySelectorArray: QuerySelector[];\r\n public globalComponents: IGlobalComponents\r\n public optionsLoaded: boolean;\r\n\r\n private readonly _handleProductListingPageOptionSelected;\r\n private readonly _handleProductListingPageSortChanged;\r\n private readonly _handleProductListingPageShowMore;\r\n private readonly _handleProductListingHistoryBack;\r\n/* private readonly _handleProductListingHistoryShowMoreBack;*/\r\n private readonly _handleNoProductsReturned;\r\n private readonly _handleProductListingPageHeaderQuickLink;\r\n private readonly popoutController: IPopOutController;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this.popoutController = (<any>window).popOutController;\r\n this._handleProductListingPageOptionSelected = this.handleProductListingPageOptionSelected.bind(this);\r\n this._handleProductListingPageSortChanged = this.handleProductListingPageSortChanged.bind(this);\r\n this._handleProductListingPageShowMore = this.handleProductListingPageShowMore.bind(this);\r\n this._handleProductListingHistoryBack = this.handleProductListingHistoryBack.bind(this);\r\n/* this._handleProductListingHistoryShowMoreBack = this.handleProductListingHistoryShowMoreBack.bind(this);*/\r\n this._handleNoProductsReturned = this.handleNoProductsReturned.bind(this);\r\n this._handleProductListingPageHeaderQuickLink = this.handleProductListingPageHeaderQuickLink.bind(this);\r\n\r\n this.setQuerySelectorString();\r\n this.querySelectorArray = this.getQuerySelectorArray();\r\n this.productListingPageOptionsFactory();\r\n this.productListingPageTilesFactory();\r\n this.productListingPageHeaderFactory();\r\n this.productListingPageShowMoreFactory();\r\n this.productListingPageSelectedOptionsCarouselsFactory();\r\n //this.categoryPagingSelectableCarouselFactory();\r\n this.breadcrumbFactory();\r\n this.globalComponents = GlobalComponents.getGlobalComponents();\r\n\r\n this.attachProductListingPageOptionSelectedEventListener();\r\n this.attachProductListingPageSortChangedEventListener();\r\n this.attachProductListingPageShowMoreEventListener();\r\n this.attachProductListingPageOptionDeselectedEventListener();\r\n this.attachProductListingPageHistoryBackEventListener();\r\n this.attachProductListingPageNoProductsReturnedEventListener();\r\n this.attachProductListingPageHeaderQuickLinkEventListener();\r\n this.productListingPageHeader.disableSortDropdown();\r\n this.optionsLoaded = false;\r\n this.popoutController.active = true;\r\n\r\n this.showNoLongerAvailableDialogueIfTrueAndPushState();\r\n }\r\n\r\n attachProductListingPageOptionSelectedEventListener(): void {\r\n console.log('ProductListingPage: attachProductListingPageOptionSelectedEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ProductListingPageOptionSelected, this._handleProductListingPageOptionSelected);\r\n }\r\n\r\n removeProductListingPageOptionSelectedEventListener(): void {\r\n console.log('ProductListingPage: removeProductListingPageOptionSelectedEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ProductListingPageOptionSelected, this._handleProductListingPageOptionSelected);\r\n }\r\n\r\n attachProductListingPageSortChangedEventListener(): void {\r\n console.log('ProductListingPage: attachProductListingPageSortChangedEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ProductListingPageSortChanged, this._handleProductListingPageSortChanged);\r\n }\r\n\r\n removeProductListingPageSortChangedEventListener(): void {\r\n console.log('ProductListingPage: removeProductListingPageSortChangedEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ProductListingPageSortChanged, this._handleProductListingPageSortChanged);\r\n }\r\n\r\n attachProductListingPageShowMoreEventListener(): void {\r\n console.log('ProductListingPage: attachProductListingPageShowMoreEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ProductListingPageShowMore, this._handleProductListingPageShowMore);\r\n }\r\n\r\n removeProductListingPageShowMoreEventListener(): void {\r\n console.log('ProductListingPage: removeProductListingPageShowMoreEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ProductListingPageShowMore, this._handleProductListingPageShowMore);\r\n }\r\n\r\n attachProductListingPageOptionDeselectedEventListener(): void {\r\n console.log('ProductListingPage: attachProductListingPageOptionDeselectedEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ProductListingPageOptionDeselected, this._handleProductListingPageOptionSelected);\r\n }\r\n\r\n removeProductListingPageOptionDeselectedEventListener(): void {\r\n console.log('ProductListingPage: removeProductListingPageOptionDeselectedEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ProductListingPageOptionDeselected, this._handleProductListingPageOptionSelected);\r\n }\r\n\r\n attachProductListingPageHistoryBackEventListener(): void {\r\n console.log('ProductListingPage: attachProductListingPageHistoryBackEventListener');\r\n document.addEventListener(CustomEventEnums.ProductListingPageHistoryBack, this._handleProductListingHistoryBack);\r\n\r\n }\r\n\r\n removeProductListingPageHistoryBackEventListener(): void {\r\n console.log('ProductListingPage: removeProductListingPageHistoryBackEventListener');\r\n document.removeEventListener(CustomEventEnums.ProductListingPageHistoryBack, this._handleProductListingHistoryBack);\r\n }\r\n\r\n //attachProductListingPageHistoryShowMoreBackEventListener(): void {\r\n // console.log('ProductListingPage: attachProductListingPageHistoryShowMoreBackEventListener');\r\n // document.addEventListener(CustomEventEnums.ProductListingPageHistoryShowMoreBack, this._handleProductListingHistoryBack);\r\n\r\n //}\r\n\r\n //removeProductListingPageHistoryShowMoreBackEventListener(): void {\r\n // console.log('ProductListingPage: removeProductListingPageHistoryShowMoreBackEventListener');\r\n // document.removeEventListener(CustomEventEnums.ProductListingPageHistoryShowMoreBack, this._handleProductListingHistoryBack);\r\n //}\r\n\r\n attachProductListingPageNoProductsReturnedEventListener(): void {\r\n console.log('ProductListingPage: attachProductListingPageNoProductsReturnedEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ProductListingNoProductsReturned, this._handleNoProductsReturned);\r\n\r\n }\r\n\r\n removeProductListingPageNoProductsReturnedEventListener(): void {\r\n console.log('ProductListingPage: removeProductListingPageNoProductsReturnedEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ProductListingNoProductsReturned, this._handleNoProductsReturned);\r\n }\r\n\r\n attachProductListingPageHeaderQuickLinkEventListener(): void {\r\n console.log('ProductListingPage: attachProductListingPageHeaderQuickLinkEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ProductListingPageHeaderQuickLink, this._handleProductListingPageHeaderQuickLink);\r\n }\r\n\r\n removeProductListingPageHeaderQuickLinkEventListener(): void {\r\n console.log('ProductListingPage: removeProductListingPageHeaderQuickLinkEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ProductListingPageHeaderQuickLink, this._handleProductListingPageHeaderQuickLink);\r\n }\r\n\r\n async productListingPageOptionsFactory() {\r\n try {\r\n console.log('ProductListingPage: productListingPageOptionsFactory - Started');\r\n\r\n let optionsElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageOptions.ProductListingPageOptions)) as HTMLElement;\r\n this.productListingPageOptions = new ProductListingPageOptions(optionsElement, this.querySelectorString);\r\n await this.productListingPageOptions.updateOptions(this.querySelectorString);\r\n this.productListingPageOptions.removeLoading();\r\n this.productListingPageHeader.enableSortDropdown();\r\n this.optionsLoaded = true;\r\n console.log('ProductListingPage: productListingPageOptionsFactory - Finished');\r\n } catch (error) {\r\n console.log(\"ProductListingPage: productListingPageOptionsFactory ERROR: \", error);\r\n }\r\n }\r\n\r\n async productListingPageOptionsFactoryForUpdate(optionsUpdateDto: OptionUpdateDto) {\r\n try {\r\n console.log('ProductListingPage: productListingPageOptionsFactoryForUpdate - Started');\r\n\r\n let optionsElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageOptions.ProductListingPageOptions)) as HTMLElement;\r\n this.productListingPageOptions = new ProductListingPageOptions(optionsElement, this.querySelectorString);\r\n await this.productListingPageOptions.updateOptionsForOptionUpdateDto(optionsUpdateDto);\r\n this.productListingPageOptions.removeLoading();\r\n this.productListingPageHeader.enableSortDropdown();\r\n this.optionsLoaded = true;\r\n \r\n console.log('ProductListingPage: productListingPageOptionsFactory - Finished');\r\n } catch (error) {\r\n console.log(\"ProductListingPage: productListingPageOptionsFactoryForUpdate ERROR: \", error);\r\n }\r\n }\r\n\r\n async productListingPageShowMoreFactory() {\r\n try {\r\n console.log('ProductListingPage: productListingPageShowMoreFactory - Started');\r\n\r\n let showMoreElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMore)) as HTMLElement;\r\n this.productListingPageShowMore = new ProductListingPageShowMore(showMoreElement);\r\n\r\n console.log('ProductListingPage: productListingPageShowMoreFactory - Finished');\r\n } catch (error) {\r\n console.log(\"ProductListingPage: productListingPageShowMoreFactory ERROR: \", error);\r\n }\r\n }\r\n productListingPageTilesFactory() {\r\n try {\r\n let tilesElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTiles.ProductListingPageTiles)) as HTMLElement;\r\n this.productListingPageTiles = new ProductListingPageTiles(tilesElement);\r\n } catch (error) {\r\n console.log('ProductListingPage: productListingPageTilesFactory ERROR: ', error);\r\n }\r\n }\r\n\r\n productListingPageHeaderFactory() {\r\n try {\r\n let headerElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageHeader)) as HTMLElement;\r\n console.log(`ProductListingPage: productListingPageTilesFactory headerElement exists ${(headerElement!= null)}` );\r\n this.productListingPageHeader = new ProductListingPageHeader(headerElement);\r\n if (this.optionsLoaded) {\r\n this.productListingPageHeader.enableSortDropdown();\r\n }\r\n\r\n } catch (error) {\r\n console.log('ProductListingPage: productListingPageHeaderFactory ERROR: ', error);\r\n }\r\n }\r\n productListingPageSelectedOptionsCarouselsFactory() {\r\n try {\r\n let selectedOptionsCarouselElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageSelectedOptionsCarousel.ProductListingPageSelectedOptionsCarousel, UtilityEnums.DeviceType.Desktop)) as HTMLElement;\r\n this.productListingPageSelectedOptionsCarousel = new ProductListingPageSelectedOptionsCarousel(selectedOptionsCarouselElement);\r\n\r\n let selectedOptionsBlockElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageSelectedOptionsCarousel.ProductListingPageSelectedOptionsCarousel, UtilityEnums.DeviceType.Mobile)) as HTMLElement;\r\n this.productListingPageSelectedOptionsBlock = new ProductListingPageSelectedOptionsCarousel(selectedOptionsBlockElement);\r\n } catch (error) {\r\n console.log('ProductListingPage: productListingPageSelectedOptionsCarouselsFactory ERROR: ', error);\r\n }\r\n }\r\n\r\n categoryPagingSelectableCarouselFactory(): void {\r\n try {\r\n let carouselElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CategoryPagingSelectableCarousel.CategoryPagingSelectableCarousel));\r\n\r\n let componentOrientation = carouselElement.getAttribute(AttributeEnums.SelectableCarousel.ComponentOrientation);\r\n let componentOrientationEnum = (UtilityEnums.ComponentOrientation.Horizontal === componentOrientation) ? UtilityEnums.ComponentOrientation.Horizontal : UtilityEnums.ComponentOrientation.Vertical;\r\n let categoryPagingSelectableCarousel = new CategoryPagingSelectableCarousel(carouselElement, componentOrientationEnum);\r\n this.categoryPagingSelectableCarousel = categoryPagingSelectableCarousel;\r\n } catch (error) {\r\n console.log('ProductListingPage: categoryPagingSelectableCarouselFactory ERROR: ', error);\r\n }\r\n }\r\n\r\n breadcrumbFactory() {\r\n var breadcrumbContainerElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Breadcrumb.BreadcrumbContainer)) as HTMLElement;\r\n this.productListingPageBreadcrumb = new ProductListingPageBreadcrumb(breadcrumbContainerElement);\r\n }\r\n async reinitialiseTiles() {\r\n await this.productListingPageTiles.updateTilesUnpaged(this.querySelectorString);\r\n this.productListingPageTiles.dispose();\r\n this.productListingPageTiles = null;\r\n this.productListingPageTilesFactory();\r\n\r\n }\r\n\r\n async reinitialiseHeader() {\r\n console.log('ProductListingPage: reinitialiseHeader Started');\r\n\r\n let optionUpdateDto: OptionUpdateDto = this.getOptionUpdateDto();\r\n console.log(\"ProductListingPage: getOptionUpdateDto Completed\");\r\n console.log(\"ProductListingPage: updateHeaderForOptions Started\");\r\n\r\n await this.productListingPageHeader.updateHeaderForOptions(optionUpdateDto);\r\n //await this.productListingPageHeader.updateHeader(this.querySelectorString);\r\n console.log(\"ProductListingPage: dispose Started\");\r\n\r\n this.productListingPageHeader.dispose();\r\n this.productListingPageHeader = null;\r\n console.log(\"ProductListingPage: productListingPageHeaderFactory Started\");\r\n this.productListingPageHeaderFactory();\r\n\r\n }\r\n\r\n async reinitialiseProductListingPageSelectedOptionsCarousels() {\r\n\r\n let selectedOptions = this.productListingPageOptions.getAllSelectedOptions();\r\n // Desktop\r\n let selectedOptionsCarouselElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageSelectedOptionsCarousel.ProductListingPageSelectedOptionsCarousel, UtilityEnums.DeviceType.Desktop)) as HTMLElement;\r\n ProductListingPageSelectedOptionsCarousel.replaceCarouselOptions(selectedOptionsCarouselElement, selectedOptions);\r\n\r\n // Mobile\r\n let selectedOptionsBlockElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageSelectedOptionsCarousel.ProductListingPageSelectedOptionsCarousel, UtilityEnums.DeviceType.Mobile)) as HTMLElement;\r\n ProductListingPageSelectedOptionsCarousel.replaceCarouselOptions(selectedOptionsBlockElement, selectedOptions);\r\n\r\n this.productListingPageSelectedOptionsCarouselsFactory();\r\n }\r\n\r\n async reinitialiseCategoryPagingSelectableCarousel() {\r\n try {\r\n this.categoryPagingSelectableCarousel.dispose();\r\n let categoryOpions: IProductListingPageOption[] = this.productListingPageOptions.getCategoryOptions();\r\n let carouselElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CategoryPagingSelectableCarousel.CategoryPagingSelectableCarousel)) as HTMLElement;\r\n\r\n CategoryPagingSelectableCarousel.reinitializeCategoryCarouselHtml(categoryOpions, carouselElement);\r\n this.categoryPagingSelectableCarousel = null;\r\n this.categoryPagingSelectableCarouselFactory();\r\n let categoryQuerySelector = this.querySelectorArray.filter((querySelector: QuerySelector) => querySelector.type == UtilityEnums.SingleSelectType.Category)[0] as QuerySelector | null;\r\n if (categoryQuerySelector) {\r\n let selectedIndex = +this.categoryPagingSelectableCarousel.getCellIdFromValue(categoryQuerySelector.value);\r\n this.categoryPagingSelectableCarousel.updateCarouselCurrentSelectedIndex(selectedIndex);\r\n } else {\r\n this.categoryPagingSelectableCarousel.setCurrentSelectedIndexAndStyleToNone();\r\n }\r\n } catch (error) {\r\n console.log(\"ProductListingPage: reinitialiseCategoryPagingSelectableCarousel ERROR: \", error);\r\n }\r\n\r\n }\r\n\r\n updateBreadcrumb() {\r\n try {\r\n this.productListingPageBreadcrumb.updateBreadcrumb(this.productListingPageHeader.hiddenBreadcrumb);\r\n } catch (error) {\r\n console.log('ProductListingPage: updateBreadcrumb Error', error);\r\n }\r\n }\r\n\r\n getOptionUpdateDto(): OptionUpdateDto {\r\n let groupOptions = this.productListingPageOptions.productListingPageGroupOptions;\r\n let optionUpdateDto: OptionUpdateDto = { filterQuery: this.querySelectorString, optionDisplayStates: new Array<OptionDisplayState>() } as OptionUpdateDto;\r\n try {\r\n for (let groupOption in groupOptions) {\r\n let optionDisplayStates = {} as OptionDisplayState;\r\n optionDisplayStates.showHide = groupOptions[groupOption].showHide.isHidden;\r\n if (groupOptions[groupOption].optionalInnerShowHide) {\r\n optionDisplayStates.optionalInnerShowHide = groupOptions[groupOption].optionalInnerShowHide.isHidden;\r\n optionDisplayStates.optionalInnerShowHideValue = groupOptions[groupOption].optionalInnerShowHide.value;\r\n } else {\r\n optionDisplayStates.optionalInnerShowHide = undefined;\r\n optionDisplayStates.optionalInnerShowHideValue = undefined;\r\n }\r\n optionDisplayStates.value = groupOptions[groupOption].showHide.value;\r\n optionUpdateDto.optionDisplayStates.push(optionDisplayStates);\r\n }\r\n } catch (error) {\r\n console.log(\"ProductListingPage: getOptionUpdateDto ERROR: \", error);\r\n }\r\n return optionUpdateDto;\r\n\r\n }\r\n resetPageQuerySelectorToPageOne() {\r\n this.querySelectorArray.forEach((querySelector: QuerySelector) => { if (querySelector.type === UtilityEnums.SingleSelectType.Page) { querySelector.value = \"1\" } });\r\n let updatedQuerySelectorString: string = this.getQuerySelectorStringFromQuerySelectorArray(this.querySelectorArray);\r\n this.updateQuerySelectorString(updatedQuerySelectorString);\r\n }\r\n\r\n resetPageQuerySelectorNoPage() {\r\n let updatedQuerySelectorArray: Array<QuerySelector> = ProductListingPage.removePageNumberInQuerySelectorArray(this.querySelectorArray);\r\n this.querySelectorArray = updatedQuerySelectorArray;\r\n let updatedQuerySelectorString: string = this.getQuerySelectorStringFromQuerySelectorArray(this.querySelectorArray);\r\n this.updateQuerySelectorString(updatedQuerySelectorString);\r\n }\r\n\r\n async handleProductListingPageSortChanged(e: CustomEvent) {\r\n if (this.optionsLoaded) {\r\n let value: string = e.detail.value;\r\n console.log(`ProductListingPage: handleProductListingPageSortChanged value: ${value}`);\r\n this.productListingPageShowMore.setIsLoadingTrue();\r\n // // remove page number before sort unless only page--1 without any other filters \r\n if (this.querySelectorString !== 'page--1') {\r\n\r\n this.removePageNumberInQuerySelectorStringAndArray();\r\n }\r\n // update sort filter\r\n let updatedQuerySelector: string = this.addRemoveSelectedDeselectedOption(UtilityEnums.SingleSelectType.Sort, value);\r\n\r\n this.updateQuerySelectorString(updatedQuerySelector);\r\n this.querySelectorArray = this.getQuerySelectorArray();\r\n this.productListingPageTiles.displayProductListingTilesLoadingTiles();\r\n await this.reinitialiseHeader();\r\n await this.reinitialiseTiles();\r\n this.htmlElement.scrollIntoView();\r\n\r\n this.productListingPageShowMore.updateProductListingPageShowingStartProductAndProductCount(this.productListingPageHeader.startProduct, this.productListingPageHeader.productCount);\r\n this.productListingPageShowMore.updateProductListingPageShowingTotalProducts(this.productListingPageHeader.totalProducts);\r\n this.productListingPageShowMore.updateShowMoreButtonEnabledDisabledStyle();\r\n this.productListingPageShowMore.setIsLoadingFalse();\r\n\r\n await this.setHistoryAndTitle();\r\n this.sendSortClickGtm(value);\r\n }\r\n }\r\n\r\n async handleNoProductsReturned(e: CustomEvent) { \r\n let querySelectorString: string = e.detail.querySelectorString;\r\n console.log(`ProductListingPage: handleNoProductsReturned - ${querySelectorString}`);\r\n window.location.href = `${UrlEnums.PageUrls.ProductListingPageNoProducts}/${querySelectorString}`; \r\n \r\n }\r\n\r\n sendSortClickGtm(sortValue: string): void {\r\n try {\r\n let dataObject = {\r\n url: '/browse/' + this.querySelectorString,\r\n name: this.productListingPageHeader.getHeadingText().replace(/,/g, ''),\r\n sort: sortValue,\r\n aggregateList: this.getAggregateList()\r\n\r\n } as ISortClickGtmDataObject;\r\n\r\n GoogleTagManager.sendSortClickGtmDataObject(dataObject);\r\n } catch (error) {\r\n console.log('ProductListingPage: sendSortClickGtm ERROR', error);\r\n }\r\n }\r\n\r\n getAggregateList(): string {\r\n try {\r\n let keyList: string[] = this.querySelectorArray.map((querySelector: QuerySelector) => querySelector.type).filter((type: string) => type !== 'sort' && type !== 'page');\r\n let distinctKeyList: string[] = keyList.filter((value: string, index: number, array: Array<string>) => array.indexOf(value) === index);\r\n let aggregateList: string = distinctKeyList.flatMap((value: string) => value + ' ').toString().trim().replace(/,/g, '');\r\n return aggregateList;\r\n } catch (error) {\r\n console.log('ProductListingPage: getAggregateList ERROR', error);\r\n return '';\r\n }\r\n }\r\n\r\n async setHistoryAndTitle() {\r\n let headingText = this.productListingPageHeader.getHeadingText();\r\n let historyController = HistoryController.getHistoryControllerClassReference();\r\n await historyController.pushProductListingPageHistoryToStack(this.querySelectorString, headingText + ' | Land of Beds');\r\n }\r\n\r\n async handleProductListingPageOptionSelected(e: CustomEvent) {\r\n let currentQuerySelector: string = this.querySelectorString;\r\n let optionType: string = e.detail.type;\r\n let optionValue: string = e.detail.value;\r\n console.log(`ProductListingPage: handleProductListingPageOptionSelected optionType: ${optionType} optionValue: ${optionValue}`);\r\n let newQuerySelectorString = this.addRemoveSelectedDeselectedOption(optionType, optionValue);\r\n\r\n //this.removePageNumberInQuerySelectorStringAndArray();\r\n if (newQuerySelectorString.length === 0) {\r\n newQuerySelectorString = 'page--1';\r\n }\r\n this.updateQuerySelectorUrlAndArrayForNewQuerySelectorString(newQuerySelectorString);\r\n\r\n newQuerySelectorString = this.querySelectorString;\r\n\r\n if (newQuerySelectorString.length === 0) {\r\n newQuerySelectorString = 'page--1';\r\n this.updateQuerySelectorUrlAndArrayForNewQuerySelectorString(newQuerySelectorString);\r\n\r\n }\r\n try{\r\n await this.reinitialiseProductListingPageWith(newQuerySelectorString); \r\n this.sendFilterClickGtm(optionType, optionValue, currentQuerySelector);\r\n this.removeUnrequiredContent();\r\n } catch(error){\r\n console.log(`ProductListingPage: handleProductListingPageOptionSelected reinitialiseProductListingPageWith ERROR`,error);\r\n } \r\n }\r\n\r\n removeUnrequiredContent():void{\r\n this.removePageElement(AttributeEnums.ProductListingPageDescription.ProductListingPageDescription);\r\n this.removePageElement(AttributeEnums.ProductListingPageQuestionsAnswers.ProductListingPageQuestionsAnswers);\r\n }\r\n removePageElement(elementName:string):void{\r\n try {\r\n let pageElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(elementName)) as HTMLElement;\r\n if(pageElement !== null){\r\n pageElement.remove();\r\n }\r\n } catch (error) {\r\n console.log('ProductListingPage: removePageElement ERROR', error);\r\n }\r\n }\r\n\r\n showNoLongerAvailableDialogueIfTrueAndPushState() {\r\n let showNoProductsDialogue = this.htmlElement.getAttribute(AttributeEnums.ProductListingPage.ProductListingPageShowNoProductsDialogue);\r\n if(showNoProductsDialogue === \"true\")\r\n {\r\n Swal.fire(StringEnums.Content.SorryThisSelectionIsNoLongerAvailable);\r\n window.history.replaceState({\"pageTitle\":StringEnums.Content.SorryThisSelectionIsNoLongerAvailableTitle},StringEnums.Content.SorryThisSelectionIsNoLongerAvailableTitle, \"/browse/page--1\");\r\n document.title = StringEnums.Content.SorryThisSelectionIsNoLongerAvailableTitle;\r\n }\r\n }\r\n sendFilterClickGtm(optionType: string, optionValue: string, currentQuerySelector: string): void {\r\n try {\r\n let dataObject = {\r\n id: `${optionType}--${optionValue}`,\r\n url: `/browse/${currentQuerySelector}`,\r\n targetUrl: `/browse/${this.querySelectorString}`,\r\n name: this.productListingPageHeader.getHeadingText().replace(/,/g, ''),\r\n aggregateList: this.getAggregateList(),\r\n group: optionType,\r\n option: optionValue\r\n } as IFilterClickGtmDataObject;\r\n\r\n GoogleTagManager.sendFilterClickGtmDataObject(dataObject);\r\n } catch (error) {\r\n console.log('ProductListingPage: sendFilterClickGtm ERROR', error);\r\n }\r\n }\r\n\r\n async handleProductListingHistoryBack(e: CustomEvent) {\r\n let newQuerySelectorString: string = e.detail.querySelector;\r\n\r\n console.log(`ProductListingPage: handleProductListingHistoryBack newQuerySelectorString: ${newQuerySelectorString}`);\r\n this.updateQuerySelectorUrlAndArrayForNewQuerySelectorStringNoPageRemoval(newQuerySelectorString);\r\n this.reinitialiseProductListingPageWithNoHistory(newQuerySelectorString);\r\n }\r\n\r\n //async handleProductListingHistoryShowMoreBack(e: CustomEvent) {\r\n // let newQuerySelectorString: string = e.detail.querySelector;\r\n\r\n // console.log(`ProductListingPage: handleProductListingHistoryBack newQuerySelectorString: ${newQuerySelectorString}`);\r\n // this.updateQuerySelectorUrlAndArrayForNewQuerySelectorString(newQuerySelectorString);\r\n // this.reinitialiseProductListingPageWithNoHistory(newQuerySelectorString);\r\n //}\r\n\r\n updateQuerySelectorUrlAndArrayForNewQuerySelectorString(newQuerySelectorString: string) {\r\n this.updateQuerySelectorString(newQuerySelectorString);\r\n this.querySelectorArray = this.getQuerySelectorArray();\r\n this.resetPageQuerySelectorNoPage();\r\n if (this.querySelectorArray.length === 0) {\r\n //Add page if no query selectors for default plp home page\r\n this.updateQuerySelectorString(\"page--1\");\r\n this.querySelectorArray = this.getQuerySelectorArray();\r\n }\r\n this.ifQueryArrayHasNoCategoryRemoveExtrasFromQueryArrayAndQueryString();\r\n }\r\n updateQuerySelectorUrlAndArrayForNewQuerySelectorStringNoPageRemoval(newQuerySelectorString: string) {\r\n this.updateQuerySelectorString(newQuerySelectorString);\r\n this.querySelectorArray = this.getQuerySelectorArray();\r\n this.ifQueryArrayHasNoCategoryRemoveExtrasFromQueryArrayAndQueryString();\r\n }\r\n\r\n\r\n async handleProductListingPageShowMore() {\r\n console.log(`ProductListingPage: handleProductListingPageShowMore`);\r\n\r\n this.incrementPageNumberInQuerySelectorStringAndArray();\r\n await this.productListingPageTiles.addTilesPage(this.querySelectorString);\r\n let newProductCount:number = this.getNewProductCount();\r\n let startProductCount:number = this.getStartProductCount();\r\n \r\n this.productListingPageHeader.updateProductListingPageShowingStartProductAndProductCount(startProductCount, newProductCount);\r\n this.productListingPageShowMore.updateProductListingPageShowingStartProductAndProductCount(startProductCount, newProductCount);\r\n this.productListingPageShowMore.updateShowMoreButtonEnabledDisabledStyle();\r\n this.productListingPageShowMore.setIsLoadingFalse();\r\n await this.setHistoryAndTitle();\r\n \r\n this.writeToQuerySelectorString(this.querySelectorString);\r\n \r\n }\r\n getNewProductCount() {\r\n let tileCount = this.productListingPageTiles.countDisplayedPageTiles();\r\n let startPage: number = this.getStartPageCountFromQuerySelectorArray();\r\n let pageCount: number = this.getPageCountFromQuerySelectorArray();\r\n let productsPerPage: number = +settings.PlpProductsPerPage;\r\n let newProductCount = ((startPage-1) * productsPerPage) + tileCount;\r\n return newProductCount;\r\n }\r\n\r\n getStartProductCount() { \r\n let startPage: number = this.getStartPageCountFromQuerySelectorArray(); \r\n let productsPerPage: number = +settings.PlpProductsPerPage;\r\n let startProductCount = (productsPerPage * (startPage -1)) + 1;\r\n return startProductCount;\r\n }\r\n incrementPageNumberInQuerySelectorStringAndArray() {\r\n let pageIndex: number = this.querySelectorArray.findIndex((querySelector: QuerySelector) => querySelector.type === UtilityEnums.SingleSelectType.Page);\r\n if (pageIndex === -1) {\r\n let incrementedPage: QuerySelector = { type: UtilityEnums.SingleSelectType.Page, value: \"2\" };\r\n this.querySelectorArray.push(incrementedPage);\r\n } else {\r\n let oldPageValue = this.querySelectorArray[pageIndex].value;\r\n if (oldPageValue.includes('-')) {\r\n let startPageCount: number = this.getStartPageCountFromQuerySelectorArray();\r\n let oldPageCount: number = this.getPageCountFromQuerySelectorArray();\r\n this.querySelectorArray = this.querySelectorArray.filter((querySelector: QuerySelector) => querySelector.type !== UtilityEnums.SingleSelectType.Page);\r\n let incrementedPage: QuerySelector = { type: UtilityEnums.SingleSelectType.Page, value: `${startPageCount}-${(oldPageCount + 1)}` };\r\n this.querySelectorArray.push(incrementedPage);\r\n\r\n } else {\r\n let oldPageCount: number = this.getPageCountFromQuerySelectorArray();\r\n this.querySelectorArray = this.querySelectorArray.filter((querySelector: QuerySelector) => querySelector.type !== UtilityEnums.SingleSelectType.Page);\r\n let incrementedPage: QuerySelector = { type: UtilityEnums.SingleSelectType.Page, value: (oldPageCount + 1).toString() };\r\n this.querySelectorArray.push(incrementedPage);\r\n }\r\n }\r\n //this.querySelectorString = this.getQuerySelectorStringFromQuerySelectorArray(this.querySelectorArray);\r\n //this.writeToQuerySelectorString(this.querySelectorString);\r\n this.updateQuerySelectorString(this.getQuerySelectorStringFromQuerySelectorArray(this.querySelectorArray));\r\n }\r\n private getStartPageCountFromQuerySelectorArray(): number {\r\n let pageIndex: number = this.querySelectorArray.findIndex((querySelector: QuerySelector) => querySelector.type === UtilityEnums.SingleSelectType.Page);\r\n if (pageIndex !== -1) {\r\n let pageValue = this.querySelectorArray[pageIndex].value;\r\n if (pageValue.includes('-')) {\r\n let startPageCount: number = +pageValue.split('-')[0];\r\n return startPageCount;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return 1;\r\n }\r\n }\r\n\r\n private getPageCountFromQuerySelectorArray(): number {\r\n\r\n let pageIndex: number = this.querySelectorArray.findIndex((querySelector: QuerySelector) => querySelector.type === UtilityEnums.SingleSelectType.Page);\r\n if (pageIndex !== -1) {\r\n let pageValue = this.querySelectorArray[pageIndex].value;\r\n if (pageValue.includes('-')) {\r\n let pageCount: number = +pageValue.split('-')[1];\r\n return pageCount;\r\n } else {\r\n return +pageValue;\r\n }\r\n } else {\r\n return 1;\r\n }\r\n }\r\n\r\n async handleProductListingPageHeaderQuickLink(e: CustomEvent) {\r\n let currentQuerySelector: string = this.querySelectorString;\r\n let optionType: string = e.detail.type;\r\n let optionValue: string = e.detail.value;\r\n console.log(`ProductListingPage: handleProductListingPageHeaderQuickLink`);\r\n \r\n try{\r\n this.sendQuickLinkClickGtm(optionType, optionValue, currentQuerySelector);\r\n } catch(error){\r\n console.log(`ProductListingPage: handleProductListingPageHeaderQuickLink reinitialiseProductListingPageWith ERROR`,error);\r\n } \r\n }\r\n\r\n sendQuickLinkClickGtm(optionType: string, optionValue: string, currentQuerySelector: string): void {\r\n try {\r\n let dataObject = {\r\n id: `${optionType}`,\r\n url: `/browse/${currentQuerySelector}`,\r\n targetUrl: `${optionValue}`,\r\n name: this.productListingPageHeader.getHeadingText().replace(/,/g, ''),\r\n aggregateList: this.getAggregateList()\r\n } as IQuickLinkClickGtmDataObject;\r\n\r\n GoogleTagManager.sendQuickLinkClickGtmDataObjectAndNavigate(dataObject, optionValue);\r\n } catch (error) {\r\n console.log('ProductListingPageQuickLink: sendQuickLinkClickGtm ERROR', error);\r\n }\r\n }\r\n\r\n\r\n removePageNumberInQuerySelectorStringAndArray() {\r\n let pageIndex: number = this.querySelectorArray.findIndex((querySelector: QuerySelector) => querySelector.type === UtilityEnums.SingleSelectType.Page);\r\n if (pageIndex > -1) {\r\n // Remove page if page is present\r\n this.querySelectorArray = this.querySelectorArray.filter((querySelector: QuerySelector) => querySelector.type !== UtilityEnums.SingleSelectType.Page);\r\n }\r\n this.querySelectorString = this.getQuerySelectorStringFromQuerySelectorArray(this.querySelectorArray);\r\n }\r\n static removePageNumberInQuerySelectorArray(querySelectorArray: Array<QuerySelector>) {\r\n let pageIndex: number = querySelectorArray.findIndex((querySelector: QuerySelector) => querySelector.type === UtilityEnums.SingleSelectType.Page);\r\n \r\n if (pageIndex > -1) {\r\n // Remove page if page is present\r\n querySelectorArray = querySelectorArray.filter((querySelector: QuerySelector) => querySelector.type !== UtilityEnums.SingleSelectType.Page);\r\n }\r\n return querySelectorArray;\r\n }\r\n\r\n static removePageNumberInQuerySelectorString(querySelectorString: string): string {\r\n let querySelectorArray = ProductListingPage.createQuerySelectorArrayFromString(querySelectorString);\r\n let querySelectorArrayWithoutPage = ProductListingPage.removePageNumberInQuerySelectorArray(querySelectorArray);\r\n let querySelectorStringWithoutPage = ProductListingPage.createQuerySelectorStringFromQuerySelectorArray(querySelectorArrayWithoutPage);\r\n return querySelectorStringWithoutPage;\r\n }\r\n\r\n setQuerySelectorString() {\r\n this.querySelectorString = this.getQuerySelectorString();\r\n }\r\n\r\n getQuerySelectorString() {\r\n let querySelectorString: string = this.htmlElement.getAttribute(AttributeEnums.ProductListingPage.ProductListingPage);\r\n return querySelectorString;\r\n }\r\n\r\n static getQuerySelectorString() {\r\n let querySelectorElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPage.ProductListingPage));\r\n let querySelectorString = querySelectorElement.getAttribute(AttributeEnums.ProductListingPage.ProductListingPage);\r\n return querySelectorString;\r\n }\r\n\r\n writeToPreviousQuerySelectorString(querySelectorString: string) {\r\n this.htmlElement.setAttribute(AttributeEnums.ProductListingPage.ProductListingPage, querySelectorString);\r\n }\r\n\r\n static hasDifferentQuerySelector(querySelector: string): boolean {\r\n if (querySelector === ProductListingPage.getQuerySelectorString()) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n static hasDifferentQuerySelectorWhenPageIsRemoved(currentQuerySelectorString: string, newQuerySelectorString: string) {\r\n var currentQuerySelectorStringWithoutPage = ProductListingPage.removePageNumberInQuerySelectorString(currentQuerySelectorString);\r\n var newQuerySelectorStringWithoutPage = ProductListingPage.removePageNumberInQuerySelectorString(newQuerySelectorString);\r\n\r\n if (currentQuerySelectorStringWithoutPage === newQuerySelectorStringWithoutPage) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n writeToQuerySelectorString(querySelectorString: string) {\r\n this.htmlElement.setAttribute(AttributeEnums.ProductListingPage.ProductListingPage, querySelectorString);\r\n }\r\n\r\n\r\n updateQuerySelectorString(querySelectorString: string) {\r\n this.writeToQuerySelectorString(querySelectorString);\r\n this.setQuerySelectorString();\r\n console.log(`ProductListingPage: updateQuerySelectorString ${this.querySelectorString}`);\r\n\r\n }\r\n\r\n ifQueryArrayHasNoCategoryRemoveExtrasFromQueryArrayAndQueryString() {\r\n if (!this.querySelectorArrayHasCategory()) {\r\n this.removeExtraQuerySelectorsFromArrayAndUrl();\r\n }\r\n }\r\n\r\n querySelectorArrayHasCategory() {\r\n let catagoryIndex = this.querySelectorArray.findIndex((querySelector: QuerySelector) => querySelector.type == UtilityEnums.SingleSelectType.Category);\r\n if (catagoryIndex !== -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n removeExtraQuerySelectorsFromArrayAndUrl() {\r\n let updatedQuerySelectorArray: QuerySelector[] = new Array<QuerySelector>();\r\n for (let querySelector in this.querySelectorArray) {\r\n if (!this.isQuerySelectorAnExtra(this.querySelectorArray[querySelector])) {\r\n updatedQuerySelectorArray.push(this.querySelectorArray[querySelector]);\r\n }\r\n }\r\n this.querySelectorArray = updatedQuerySelectorArray;\r\n this.querySelectorString = this.getQuerySelectorStringFromQuerySelectorArray(updatedQuerySelectorArray);\r\n }\r\n\r\n isQuerySelectorAnExtra(querySelector: QuerySelector): boolean {\r\n\r\n if (querySelector.type.includes('_')) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n async reinitialiseProductListingPageWith(newQuerySelectorString: string) {\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWith - Started`);\r\n this.popoutController.active = false;\r\n\r\n await this.reinitialiseProductListingPageWithNoHistory(newQuerySelectorString);\r\n await this.setHistoryAndTitle();\r\n\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWith - End`);\r\n }\r\n\r\n async reinitialiseProductListingPageWithNoHistory(newQuerySelectorString: string) {\r\n\r\n let optionsUpdateDto: OptionUpdateDto = this.getOptionUpdateDto();\r\n this.displayOptionSelectedLoadingOverlays();\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWithNoHistory - reinitialiseTiles Started`);\r\n await this.reinitialiseTiles();\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWithNoHistory - reinitialiseHeader Started`);\r\n await this.reinitialiseHeader();\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWithNoHistory - updateBreadcrumb Started`);\r\n this.updateBreadcrumb();\r\n this.disposePageOptionsForReinitialise();\r\n\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWithNoHistory - productListingPageOptionsFactory Started`);\r\n this.removeNoScrollIfMobileMenuOpen();\r\n await this.productListingPageOptionsFactoryForUpdate(optionsUpdateDto);\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWithNoHistory - productListingPageOptionsFactory Finished`);\r\n \r\n this.setProductListingPageShowMore();\r\n\r\n console.log(`ProductListingPage: reinitialiseProductListingPageWithNoHistory - reinitialiseProductListingPageSelectedOptionsCarousels Started`);\r\n this.reinitialiseProductListingPageSelectedOptionsCarousels();\r\n //this.reinitialiseCategoryPagingSelectableCarousel();\r\n //location.href = \"#\"+ UtilityEnums.AnchorIds.CategoryCarousel; \r\n this.htmlElement.scrollIntoView();\r\n this.addNoScrollIfMobileMenuOpen();\r\n \r\n\r\n }\r\n removeNoScrollIfMobileMenuOpen() {\r\n let url: string = window.location.href;\r\n let plpMobileOptionsMenuOpen: boolean = url.includes(`#${AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue}`);\r\n\r\n if (ResponsiveState.getStateAsEnum() !== StringEnums.Selectors.Desktop && plpMobileOptionsMenuOpen === true) {\r\n ReadyUtils.removeBodyNoScroll();\r\n }\r\n }\r\n\r\n addNoScrollIfMobileMenuOpen() {\r\n let url: string = window.location.href;\r\n let plpMobileOptionsMenuOpen: boolean = url.includes(`#${AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue}`);\r\n\r\n if (ResponsiveState.getStateAsEnum() !== StringEnums.Selectors.Desktop && plpMobileOptionsMenuOpen === true) {\r\n ReadyUtils.addBodyNoScroll();\r\n }\r\n }\r\n\r\n setProductListingPageShowMore(){\r\n try{\r\n this.productListingPageShowMore.updateProductListingPageShowingStartProductAndProductCount(this.productListingPageHeader.startProduct, this.productListingPageHeader.productCount);\r\n this.productListingPageShowMore.updateProductListingPageShowingTotalProducts(this.productListingPageHeader.totalProducts);\r\n this.productListingPageShowMore.updateShowMoreButtonEnabledDisabledStyle();\r\n this.productListingPageShowMore.setIsLoadingFalse();\r\n this.productListingPageOptions.updateProductListingPageShowingTotalProducts(this.productListingPageHeader.totalProducts);\r\n } catch(error){\r\n console.log(`ProductListingPage: setProductListingPageShowMore - ERROR setting show more values`, error);\r\n\r\n }\r\n }\r\n\r\n displayOptionSelectedLoadingOverlays() {\r\n this.productListingPageTiles.displayProductListingTilesLoadingTiles();\r\n this.productListingPageShowMore.setIsLoadingTrue();\r\n this.productListingPageSelectedOptionsCarousel.displayLoading();\r\n this.productListingPageSelectedOptionsBlock.displayLoading();\r\n //this.categoryPagingSelectableCarousel.displayLoading();\r\n this.productListingPageOptions.displayLoading();\r\n this.productListingPageHeader.disableSortDropdown();\r\n this.optionsLoaded = false;\r\n }\r\n\r\n disposePageOptionsForReinitialise() {\r\n this.productListingPageOptions.dispose();\r\n this.productListingPageOptions = null;\r\n this.productListingPageSelectedOptionsCarousel.dispose();\r\n this.productListingPageSelectedOptionsBlock.dispose();\r\n }\r\n\r\n addRemoveSelectedDeselectedOption(type: string, value: string): string {\r\n\r\n this.removeAndUpdateSelectedOptionsWithNoProducts();\r\n\r\n let updatedQuerySelectorString: string;\r\n let querySelectorSegment: string = `${type}--${value}`;\r\n let hasSelectorSegment: boolean = this.querySelectorString.includes(querySelectorSegment);\r\n let hasType = this.querySelectorString.includes(type);\r\n\r\n if (hasSelectorSegment) {\r\n updatedQuerySelectorString = this.removeQuerySelectorSegmentFromQuerySelectorString(this.querySelectorString, querySelectorSegment);\r\n }\r\n else if (hasType && this.isSingleSelect(type)) {\r\n let querySelectorArrayWithTypeRemoved = this.removeQuerySelectorSegmentsFromQuerySelectorArrayByType(this.querySelectorArray, type);\r\n let updatedQuerySelectorArray: QuerySelector[] = this.insertQuerySelectorSegmentIntoQuerySelectorArray(querySelectorArrayWithTypeRemoved, type, value);\r\n updatedQuerySelectorString = this.getQuerySelectorStringFromQuerySelectorArray(updatedQuerySelectorArray);\r\n }\r\n else {\r\n let updatedQuerySelectorArray: QuerySelector[] = this.insertQuerySelectorSegmentIntoQuerySelectorArray(this.querySelectorArray, type, value);\r\n updatedQuerySelectorString = this.getQuerySelectorStringFromQuerySelectorArray(updatedQuerySelectorArray);\r\n }\r\n\r\n \r\n\r\n return updatedQuerySelectorString;\r\n }\r\n\r\n removeAndUpdateSelectedOptionsWithNoProducts() {\r\n try{\r\n \r\n let updatedQuerySelectorString: string = this.removeSelectedOptionsWithNoProducts();\r\n this.updateQuerySelectorUrlAndArrayForNewQuerySelectorString(updatedQuerySelectorString);\r\n } catch(error) {\r\n console.log(`ProductListingPage: removeAndUpdateSelectedOptionsWithNoProducts Error`, error); \r\n } \r\n }\r\n\r\n removeSelectedOptionsWithNoProducts(){\r\n try{\r\n \r\n let allSelectedOptions = this.productListingPageOptions.getAllSelectedOptions();\r\n let querySelectorArrayWithoutSortAndPage = this.querySelectorArray.filter((querySelector: QuerySelector) => { return (querySelector.type !== UtilityEnums.SingleSelectType.Page) && (querySelector.type !== UtilityEnums.SingleSelectType.Sort)} );\r\n let selectedQuerySelectorStringList = allSelectedOptions.map((option: IProductListingPageOption) => {return `${option.optionType}--${option.optionValue}`});\r\n const filtersToRemove = querySelectorArrayWithoutSortAndPage.filter((querySelector: QuerySelector) => !selectedQuerySelectorStringList.includes(`${querySelector.type}--${querySelector.value}`));\r\n \r\n let updatedQuerySelectorString: string = this.querySelectorString;\r\n filtersToRemove.forEach((querySelector: QuerySelector) => {\r\n updatedQuerySelectorString = updatedQuerySelectorString.replace(`--${querySelector.type}--${querySelector.value}`, '');\r\n updatedQuerySelectorString = updatedQuerySelectorString.replace(`${querySelector.type}--${querySelector.value}`, '');\r\n updatedQuerySelectorString = updatedQuerySelectorString.replace(/--/y, '');\r\n });\r\n return updatedQuerySelectorString;\r\n \r\n } catch(error) {\r\n console.log(`ProductListingPage: removeSelectedOptionsWithNoProducts Error`, error);\r\n return this.querySelectorString;\r\n } \r\n }\r\n\r\n isSingleSelect(type: string): boolean {\r\n if (Object.values(UtilityEnums.SingleSelectType).includes(type as UtilityEnums.SingleSelectType)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n removeQuerySelectorSegmentFromQuerySelectorString(querySelectorString: string, querySelectorSegment: string): string {\r\n let segmentIndex = querySelectorString.indexOf(querySelectorSegment);\r\n\r\n if (segmentIndex == 0) {\r\n if (querySelectorSegment === querySelectorString) {\r\n // Last Query to be removed\r\n console.log(`ProductListingPage: removeQuerySelectorSegmentFromQuerySelectorString querySelectorString ${querySelectorString} querySelectorSegment: ${querySelectorSegment} remove final query returning an empty string`);\r\n return '';\r\n } else {\r\n let stringToReplace: string = `${querySelectorSegment}--`;\r\n\r\n let updatedQuerySelectorString = querySelectorString.replace(stringToReplace, '');\r\n console.log(`ProductListingPage: removeQuerySelectorSegmentFromQuerySelectorString querySelectorString ${querySelectorString} querySelectorSegment: ${querySelectorSegment} updatedQuerySelectorString: ${updatedQuerySelectorString}`);\r\n return updatedQuerySelectorString;\r\n }\r\n } else if (segmentIndex > 0) {\r\n let updatedQuerySelectorString = querySelectorString.replace(`--${querySelectorSegment}`, '');\r\n console.log(`ProductListingPage: removeQuerySelectorSegmentFromQuerySelectorString querySelectorString ${querySelectorString} querySelectorSegment: ${querySelectorSegment} updatedQuerySelectorString: ${updatedQuerySelectorString}`);\r\n return updatedQuerySelectorString;\r\n } else {\r\n console.log(`ProductListingPage: removeQuerySelectorSegmentFromQuerySelectorString querySelectorString ${querySelectorString} querySelectorSegment: ${querySelectorSegment} updatedQuerySelectorString: NOT UPDATED!!!`);\r\n return querySelectorString;\r\n }\r\n }\r\n\r\n\r\n removeQuerySelectorSegmentFromQuerySelectorArray(querySelectorArray: QuerySelector[], type: string, value: string): QuerySelector[] {\r\n let filteredQuerySelectorArray = querySelectorArray.filter((querySelector: QuerySelector) => !(querySelector.type === type && querySelector.value === value));\r\n return filteredQuerySelectorArray;\r\n }\r\n removeQuerySelectorSegmentsFromQuerySelectorArrayByType(querySelectorArray: QuerySelector[], type: string): QuerySelector[] {\r\n let filteredQuerySelectorArray = querySelectorArray.filter((querySelector: QuerySelector) => !(querySelector.type === type));\r\n return filteredQuerySelectorArray;\r\n }\r\n\r\n\r\n insertQuerySelectorSegmentIntoQuerySelectorArray(querySelectorArray: QuerySelector[], type: string, value: string) {\r\n let updatedQuerySelectorArray = querySelectorArray;\r\n let newQuerySelector: QuerySelector = { type: type, value: value };\r\n updatedQuerySelectorArray.push(newQuerySelector);\r\n return this.sortQuerySelectorArray(updatedQuerySelectorArray);\r\n\r\n }\r\n\r\n //getQuerySelectorStringFromQuerySelectorArray(querySelectorArray: QuerySelector[]): string {\r\n // let sortedArray = this.sortQuerySelectorArray(querySelectorArray);\r\n // let querySelectorString: string = '';\r\n // sortedArray.forEach((querySelector: QuerySelector) => { querySelectorString += `${querySelector.type}--${querySelector.value}--` });\r\n // querySelectorString = querySelectorString.replace(/-+$/, '');\r\n // return querySelectorString;\r\n //}\r\n\r\n getQuerySelectorStringFromQuerySelectorArray(querySelectorArray: QuerySelector[]): string {\r\n \r\n return ProductListingPage.createQuerySelectorStringFromQuerySelectorArray(querySelectorArray);\r\n }\r\n\r\n static createQuerySelectorStringFromQuerySelectorArray(querySelectorArray: QuerySelector[]): string {\r\n let sortedArray = ProductListingPage.staticSortQuerySelectorArray(querySelectorArray);\r\n let querySelectorString: string = '';\r\n sortedArray.forEach((querySelector: QuerySelector) => { querySelectorString += `${querySelector.type}--${querySelector.value}--` });\r\n querySelectorString = querySelectorString.replace(/-+$/, '');\r\n return querySelectorString;\r\n }\r\n\r\n sortQuerySelectorArray(querySelectorArray: QuerySelector[]): QuerySelector[] {\r\n return ProductListingPage.staticSortQuerySelectorArray(querySelectorArray);\r\n }\r\n\r\n static staticSortQuerySelectorArray(querySelectorArray: QuerySelector[]): QuerySelector[] {\r\n return querySelectorArray.sort(function (a, b) {\r\n if (a.type === b.type) {\r\n if (a.value > b.value) {\r\n return 1;\r\n } else if (a.value < b.value) {\r\n return -1;\r\n }\r\n } else if (a.type > b.type) {\r\n return 1;\r\n } else if (a.type < b.type) {\r\n return -1;\r\n }\r\n });\r\n }\r\n\r\n //getQuerySelectorArray(): QuerySelector[] {\r\n // let queryPiecesStringArray = this.querySelectorString.split('--');\r\n // let querySelectorArray: QuerySelector[] = new Array<QuerySelector>();\r\n // for (let i = 0; i < queryPiecesStringArray.length; i += 2) {\r\n // let currentQuerySelector: QuerySelector = { type: queryPiecesStringArray[i], value: queryPiecesStringArray[i + 1] };\r\n // querySelectorArray.push(currentQuerySelector);\r\n // }\r\n // return querySelectorArray;\r\n\r\n //}\r\n\r\n getQuerySelectorArray(): QuerySelector[] {\r\n return ProductListingPage.createQuerySelectorArrayFromString(this.querySelectorString);\r\n }\r\n\r\n static createQuerySelectorArrayFromString(querySelectorString: string): QuerySelector[] {\r\n if (querySelectorString === '') {\r\n querySelectorString = 'page--1';\r\n }\r\n let queryPiecesStringArray = querySelectorString.split('--');\r\n let querySelectorArray: QuerySelector[] = new Array<QuerySelector>();\r\n for (let i = 0; i < queryPiecesStringArray.length; i += 2) {\r\n let currentQuerySelector: QuerySelector = { type: queryPiecesStringArray[i], value: queryPiecesStringArray[i + 1] };\r\n querySelectorArray.push(currentQuerySelector);\r\n }\r\n return querySelectorArray;\r\n\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n this.removeProductListingPageOptionSelectedEventListener();\r\n this.removeProductListingPageSortChangedEventListener();\r\n this.removeProductListingPageShowMoreEventListener();\r\n this.removeProductListingPageOptionDeselectedEventListener();\r\n this.removeProductListingPageHistoryBackEventListener();\r\n this.removeProductListingPageNoProductsReturnedEventListener();\r\n this.removeProductListingPageHeaderQuickLinkEventListener();\r\n this.productListingPageOptions.dispose();\r\n this.productListingPageHeader.dispose();\r\n this.productListingPageTiles.dispose();\r\n this.productListingPageShowMore.dispose();\r\n } catch (error) {\r\n console.log('ProductListingPage: dispose ERROR', error);\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n delete(): void {\r\n\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { Breadcrumb } from \"./productListingPage\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport interface IProductListingPageBreadcrumb extends IInstanceComponentBase {\r\n updateBreadcrumb: (breadcrumbs: Breadcrumb[]) => void;\r\n}\r\n\r\nexport class ProductListingPageBreadcrumb extends InstanceComponentBase implements IProductListingPageBreadcrumb {\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n }\r\n\r\n updateBreadcrumb(breadcrumbs: Breadcrumb[]) {\r\n var breadcrumbElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Breadcrumb.Breadcrumb));\r\n breadcrumbElement.innerHTML = this.createBreadcrumbsHtml(breadcrumbs);\r\n }\r\n\r\n public createBreadcrumbsHtml(breadcrumbs: Breadcrumb[]) : string {\r\n let breadCrumbsHtml :string = '';\r\n\r\n //breadcrumbs.forEach((breadcrumb: Breadcrumb\r\n // ) => {\r\n \r\n // breadCrumbsHtml += this.createBreadcrumbHtml(breadcrumb);\r\n //});\r\n\r\n\r\n breadcrumbs.forEach((breadcrumb: Breadcrumb, index: number, breadcrumbArray: Array<Breadcrumb>\r\n ) => {\r\n\r\n breadCrumbsHtml += this.createBreadcrumbHtml(breadcrumb, index, breadcrumbArray);\r\n\r\n });\r\n\r\n\r\n return breadCrumbsHtml;\r\n }\r\n\r\n //createBreadcrumbHtml(breadcrumb: Breadcrumb): string{\r\n // let breadcrumbHtml = `<li itemprop=\"itemListElement\" itemscope=\"\" itemtype=\"http://schema.org/ListItem\"><a itemscope=\"\" itemtype=\"https://schema.org/WebPage\" itemprop=\"item\" itemid=\"${urlPaths.websiteUrl}${breadcrumb.url}\" href=\"${breadcrumb.url}\"><span itemprop=\"name\">${breadcrumb.name}</span></a><meta itemprop=\"position\" content=\"${breadcrumb.position}\"></li>`;\r\n // return breadcrumbHtml;\r\n //}\r\n\r\n createBreadcrumbHtml(breadcrumb: Breadcrumb, index: number, breadcrumbArray: Array<Breadcrumb>): string {\r\n let breadcrumbHtml: string;\r\n if (index + 1 < breadcrumbArray.length) {\r\n breadcrumbHtml = `<li itemprop=\"itemListElement\" itemscope=\"\" itemtype=\"http://schema.org/ListItem\"><a itemscope=\"\" itemtype=\"https://schema.org/WebPage\" itemprop=\"item\" itemid=\"${urlPaths.websiteUrl}${breadcrumb.url}\" href=\"${breadcrumb.url}\"><span itemprop=\"name\">${breadcrumb.name}</span></a><meta itemprop=\"position\" content=\"${breadcrumb.position}\"></li>`;\r\n } else {\r\n breadcrumbHtml = `<li itemprop=\"itemListElement\" itemscope=\"\" itemtype=\"http://schema.org/ListItem\"><span itemprop=\"name\">${breadcrumb.name}</span><meta itemprop=\"position\" content=\"${breadcrumb.position}\"></li>`;\r\n\r\n }\r\n return breadcrumbHtml;\r\n }\r\n\r\n dispose(): void {\r\n \r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IShowHide, ShowHide } from \"../showHide/showHideController\";\r\nimport { IProductListingPageOption, ProductListingPageOption } from \"./productListingPageOption\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport interface IProductListingPageGroupOptions extends IInstanceComponentBase {\r\n \r\n groupType: string; \r\n productListingPageOptionList : IProductListingPageOption[];\r\n htmlElement: HTMLElement;\r\n showHide: IShowHide;\r\n optionalInnerShowHide: IShowHide | undefined;\r\n}\r\n\r\nexport class ProductListingPageGroupOptions extends InstanceComponentBase implements IProductListingPageGroupOptions {\r\n public productListingPageOptionList : IProductListingPageOption[] = new Array();\r\n\r\n public groupType: string; \r\n public showHide: IShowHide;\r\n public optionalInnerShowHide: IShowHide | undefined;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.setProductListingPageGroupOptions();\r\n this.productListingPageOptionListFactory();\r\n this.showHideFactory();\r\n this.optionalInnerShowHideFactory();\r\n \r\n }\r\n \r\n showHideFactory() {\r\n try{\r\n let showHideElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ShowHide.ShowHideToggle)) as HTMLElement;\r\n let showHideToggleId:string = showHideElement.getAttribute(AttributeEnums.ShowHide.ShowHideToggle);\r\n let showHideContentElement = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ShowHide.ShowHideContent, showHideToggleId)); \r\n this.showHide = new ShowHide(showHideElement, showHideContentElement); \r\n } catch(error) {\r\n console.log(\"ProductListingPageGroupOptions: showHideFactory Error\", error);\r\n }\r\n }\r\n\r\n optionalInnerShowHideFactory() {\r\n try{\r\n let showHideElements = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ShowHide.ShowHideToggle)) as NodeListOf<HTMLElement>;\r\n if(showHideElements.length > 1) {\r\n let innerShowHideElement = showHideElements[1];\r\n let innerShowHideElementId:string = innerShowHideElement.getAttribute(AttributeEnums.ShowHide.ShowHideToggle);\r\n let showHideContentElements = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ShowHide.ShowHideContent, innerShowHideElementId)); \r\n this.optionalInnerShowHide = new ShowHide(innerShowHideElement, showHideContentElements);\r\n\r\n }\r\n \r\n } catch(error) {\r\n console.log(\"ProductListingPageGroupOptions: optionalInnerShowHideFactory Error\", error);\r\n }\r\n }\r\n \r\n writeToProductListingPageGroupOptions(value: string | undefined){\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement as HTMLElement, AttributeEnums.ProductListingPageGroupOptions.ProductListingPageGroupOptions);\r\n }\r\n\r\n setProductListingPageGroupOptions(){\r\n\r\n this.groupType = this.htmlElement.getAttribute(AttributeEnums.ProductListingPageGroupOptions.ProductListingPageGroupOptions);\r\n }\r\n\r\n updateProductListingPageGroupOptions(value: string | undefined){\r\n this.writeToProductListingPageGroupOptions(value);\r\n this.setProductListingPageGroupOptions();\r\n } \r\n\r\n productListingPageOptionListFactory() {\r\n let optionElements = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageOption.ProductListingPageOption)) as NodeListOf<HTMLElement>;\r\n optionElements.forEach((element: HTMLElement) =>{this.productListingPageOptionList.push(new ProductListingPageOption(element, this.groupType))});\r\n }\r\n\r\n dispose(): void {\r\n this.productListingPageOptionList.forEach((option: IProductListingPageOption) => option.dispose());\r\n\r\n this.showHide.dispose();\r\n\r\n if(this.optionalInnerShowHide){\r\n this.optionalInnerShowHide.dispose();\r\n }\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { HttpRequest } from \"../../shared/ajax\";\r\nimport { AjaxGetAndReplaceHtml } from \"../../shared/ajaxGetAndReplaceHtml\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { ResponsiveState } from \"../../shared/responsiveState\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ReadMoreInterface } from \"../readMore/interfaces\";\r\nimport { ReadMore } from \"../readMore/readMoreController\";\r\nimport { Breadcrumb, OptionUpdateDto } from \"./productListingPage\";\r\nimport { IProductListingPagHeaderQuickLinks, ProductListingPageHeaderQuickLinks } from \"./productListingPageHeaderQuickLinks\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport interface IProductListingPageHeader extends IInstanceComponentBase {\r\n updateHeaderForOptions: (optionUpdateDto: OptionUpdateDto) => Promise<void>;\r\n updateHeader: (querySelectorString: string) => Promise<void>;\r\n updateProductListingPageShowingProductCount: (value: number) => void;\r\n updateProductListingPageShowingStartProduct: (value: number) => void;\r\n updateProductListingPageShowingProductTotalProducts: (value: number) => void;\r\n updateProductListingPageShowingStartProductAndProductCount: (startProductValue: number, productCountValue: number) => void;\r\n getHeadingText: () => string;\r\n disableSortDropdown: () => void;\r\n enableSortDropdown: () => void;\r\n startProduct: number;\r\n productCount: number;\r\n totalProducts: number;\r\n hiddenBreadcrumb: Breadcrumb[];\r\n}\r\n\r\nexport class ProductListingPageHeader extends InstanceComponentBase implements IProductListingPageHeader {\r\n private readonly _handleSortChanged;\r\n public startProduct: number;\r\n public productCount: number;\r\n public totalProducts: number;\r\n public hiddenBreadcrumb: Breadcrumb[] = new Array<Breadcrumb>();\r\n public productListingPageHeaderQuickLinks: IProductListingPagHeaderQuickLinks;\r\n public headerReadMore: ReadMoreInterface;\r\n private resizeObserver: ResizeObserver;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n console.log(`PLPHeader - ${htmlElement}`);\r\n this._handleSortChanged = this.handleSortChanged.bind(this);\r\n this.attachProductListingPageHeaderSortChangedEventListener();\r\n\r\n this.startHeaderResizeObserver();\r\n\r\n this.setProductListingPageShowingStartProduct();\r\n this.setProductListingPageShowingProductCount();\r\n this.setProductListingPageShowingProductTotalProducts();\r\n this.setBreadcrumbHiddenFields();\r\n this.productListingPageHeaderQuickLinksFactory();\r\n this.initialiseReadMore();\r\n }\r\n\r\n attachProductListingPageHeaderSortChangedEventListener(): void {\r\n try {\r\n console.log('ProductListingPageHeader: attachProductListingPageHeaderSortChangedEventListener');\r\n let sortElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageSort));\r\n sortElement.addEventListener(\"change\", this._handleSortChanged);\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: attachProductListingPageHeaderSortChangedEventListener Error', error);\r\n\r\n }\r\n }\r\n\r\n removeProductListingPageHeaderSortChangedEventListener(): void {\r\n try {\r\n console.log('ProductListingPageHeader: removeProductListingPageHeaderSortChangedEventListener');\r\n let sortElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageSort));\r\n sortElement.removeEventListener(\"change\", this._handleSortChanged);\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: removeProductListingPageHeaderSortChangedEventListener Error', error);\r\n\r\n }\r\n }\r\n\r\n startHeaderResizeObserver(): void {\r\n try {\r\n this.resizeObserver = new ResizeObserver(entries => {\r\n let headerHeight = entries[0].target.scrollHeight\r\n console.log('Document Body Scroll Height changed:', headerHeight);\r\n this.handleHeaderHeightChanged(headerHeight);\r\n }\r\n );\r\n\r\n // start observing a DOM node\r\n this.resizeObserver.observe(this.htmlElement);\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: attachViewportDimensionsChangedEventEventListener Error', error);\r\n\r\n }\r\n }\r\n\r\n initialiseReadMore() {\r\n try {\r\n let readMoreToggleElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReadMore.ReadMoreToggle, AttributeEnums.ProductListingPageHeader.ProductListingPageHeaderReadMoreValue)) as HTMLElement;\r\n let readMoreContentElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReadMore.ReadMoreContent, AttributeEnums.ProductListingPageHeader.ProductListingPageHeaderReadMoreValue)) as HTMLElement;\r\n if (readMoreToggleElement != null && readMoreContentElement != null) {\r\n this.headerReadMore = new ReadMore(readMoreToggleElement, readMoreContentElement);\r\n }\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: initialiseReadMore Error', error);\r\n }\r\n }\r\n\r\n async updateHeaderForOptions(optionUpdateDto: OptionUpdateDto) {\r\n try {\r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductListingPageHeadersUpdate}`;\r\n console.log('ProductListingPageHeader: updateHeaderForOptions HttpRequest.post Started');\r\n\r\n let response = await HttpRequest.post(url, JSON.stringify(optionUpdateDto));\r\n if (response.length === 0) {\r\n console.log('ProductListingPageHeader: updateHeaderForOptions response.length === 0');\r\n\r\n location.href = '/browse/page--1';\r\n }\r\n this.htmlElement.innerHTML = response;\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: updateHeaderForOptions Error', error);\r\n\r\n }\r\n }\r\n\r\n\r\n async updateHeader(querySelectorString: string) {\r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductListingPageHeaders}${querySelectorString}`;\r\n await AjaxGetAndReplaceHtml(this.htmlElement, url);\r\n }\r\n\r\n disableSortDropdown(): void {\r\n let sortElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageSort)) as HTMLSelectElement;\r\n sortElement.disabled = true;\r\n }\r\n enableSortDropdown(): void {\r\n let sortElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageSort)) as HTMLSelectElement;\r\n sortElement.disabled = false;\r\n }\r\n\r\n productListingPageHeaderQuickLinksFactory() {\r\n try {\r\n console.log('ProductListingPageHeader: productListingPageHeaderQuickLinksFactory - Started');\r\n\r\n let quickLinksElement: HTMLElement | null = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageHeaderQuickLinks)) as HTMLElement;\r\n if (quickLinksElement !== null) {\r\n this.productListingPageHeaderQuickLinks = new ProductListingPageHeaderQuickLinks(quickLinksElement);\r\n }\r\n\r\n\r\n console.log('ProductListingPageHeader: productListingPageHeaderQuickLinksFactory - Finished');\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: productListingPageHeaderQuickLinksFactory ERROR: ', error);\r\n }\r\n }\r\n\r\n handleSortChanged(e: Event) {\r\n try {\r\n console.log('ProductListingPageHeader: handleSortChanged');\r\n let targetElement = e.target as HTMLSelectElement;\r\n let selectedOption = targetElement.options[targetElement.selectedIndex];\r\n let value: string = selectedOption.getAttribute('value');\r\n this.htmlElement.dispatchEvent(this.productListingPageSortChangedCustomEvent(value));\r\n } catch {\r\n console.log('ProductListingPageHeader: handleSortChanged ERROR');\r\n }\r\n }\r\n handleHeaderHeightChanged(headerHeight: number) {\r\n let responsiveState = ResponsiveState.getStateAsEnum() as StringEnums.Selectors;\r\n if (responsiveState == StringEnums.Selectors.Desktop) {\r\n this.htmlElement.style.top = null;\r\n\r\n } else {\r\n console.log(`ProductListingPageHeader: handleHeaderHeightChanged headerHeight ${headerHeight}`);\r\n this.htmlElement.style.top = '-' + (headerHeight - 100) + 'px';\r\n }\r\n }\r\n\r\n writeToProductListingPageShowingProductCount(value: number) {\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement as HTMLElement, AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsProductCount);\r\n }\r\n\r\n setProductListingPageShowingProductCount() {\r\n\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsProductCount));\r\n this.productCount = +productCountElement.getAttribute(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsProductCount);\r\n }\r\n\r\n updateProductListingPageShowingProductCount(value: number) {\r\n try {\r\n this.writeToProductListingPageShowingProductCount(value);\r\n this.setProductListingPageShowingProductCount();\r\n this.updateProductListingPageShowingProductCountDisplayValue();\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: updateProductListingPageShowingProductCount Error', error);\r\n\r\n }\r\n }\r\n\r\n writeToProductListingPageShowingStartProduct(value: number) {\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement as HTMLElement, AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsStartProduct);\r\n }\r\n\r\n setProductListingPageShowingStartProduct() {\r\n\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsStartProduct));\r\n this.startProduct = +productCountElement.getAttribute(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsStartProduct);\r\n }\r\n\r\n updateProductListingPageShowingStartProduct(value: number) {\r\n try {\r\n this.writeToProductListingPageShowingStartProduct(value);\r\n this.setProductListingPageShowingStartProduct();\r\n this.updateProductListingPageShowingProductCountDisplayValue();\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: updateProductListingPageShowingStartProduct Error', error);\r\n\r\n }\r\n }\r\n updateProductListingPageShowingStartProductAndProductCount(startProductValue: number, productCountValue: number): void {\r\n this.updateProductListingPageShowingStartProduct(startProductValue);\r\n this.updateProductListingPageShowingProductCount(productCountValue);\r\n }\r\n\r\n updateProductListingPageShowingProductCountDisplayValue() {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsProductCount)) as HTMLElement;\r\n productCountElement.innerText = `${this.startProduct} to ${this.productCount}`;\r\n }\r\n\r\n writeToProductListingPageShowingTotalProducts(value: number) {\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement as HTMLElement, AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsTotalProducts);\r\n }\r\n\r\n setProductListingPageShowingProductTotalProducts() {\r\n try {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsTotalProducts));\r\n this.totalProducts = +productCountElement.getAttribute(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsTotalProducts);\r\n } catch (error) {\r\n console.log(`ProductListingPageHeader: setProductListingPageShowingProductTotalProducts ERROR:`, error);\r\n throw new Error();\r\n }\r\n }\r\n\r\n updateProductListingPageShowingProductTotalProducts(value: number) {\r\n try {\r\n this.writeToProductListingPageShowingTotalProducts(value);\r\n this.setProductListingPageShowingProductTotalProducts();\r\n this.updateProductListingPageShowingTotalProductsDisplayValue();\r\n } catch (error) {\r\n console.log(`ProductListingPageHeader: updateProductListingPageShowingProductTotalProducts ERROR:`, error);\r\n throw new Error();\r\n }\r\n }\r\n\r\n updateProductListingPageShowingTotalProductsDisplayValue() {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageFilterBarResultsTotalProducts)) as HTMLElement;\r\n productCountElement.innerText = `${this.totalProducts}`;\r\n }\r\n\r\n setBreadcrumbHiddenFields() {\r\n try {\r\n this.hiddenBreadcrumb = [];\r\n let breadcrumbHiddenFieldElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.BreadcrumbHiddenField.BreadcrumbHiddenField)) as NodeListOf<HTMLElement>;\r\n breadcrumbHiddenFieldElements.forEach((breadcrumbHiddenFieldElement: HTMLElement) => {\r\n let currentBreadcrumb = {\r\n url: breadcrumbHiddenFieldElement.getAttribute(AttributeEnums.BreadcrumbHiddenField.BreadcrumbHiddenFieldUrl),\r\n name: breadcrumbHiddenFieldElement.getAttribute(AttributeEnums.BreadcrumbHiddenField.BreadcrumbHiddenFieldName),\r\n position: +breadcrumbHiddenFieldElement.getAttribute(AttributeEnums.BreadcrumbHiddenField.BreadcrumbHiddenFieldPosition)\r\n } as Breadcrumb;\r\n //breadcrumbHiddenFieldElement \r\n\r\n this.hiddenBreadcrumb.push(currentBreadcrumb);\r\n });\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: setBreadcrumbHiddenFields Error Setting Breadcrumb', error);\r\n \r\n }\r\n\r\n }\r\n\r\n getHeadingText(): string {\r\n try {\r\n let headerElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageHeaderHeading)) as HTMLElement;\r\n let headingText = headerElement.innerText;\r\n return headingText;\r\n } catch (error) {\r\n console.log('ProductListingPageHeader: getHeadingText Error', error);\r\n\r\n return '';\r\n }\r\n }\r\n productListingPageSortChangedCustomEvent(value: string) {\r\n console.log(`ProductListingPageOption: productListingPageSortChangedCustomEvent value: ${value}`);\r\n return new CustomEvent(CustomEventEnums.ProductListingPageSortChanged, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n value: value\r\n }\r\n });\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n this.removeProductListingPageHeaderSortChangedEventListener();\r\n if (this.productListingPageHeaderQuickLinks != null) {\r\n this.productListingPageHeaderQuickLinks.dispose();\r\n }\r\n if (this.resizeObserver != null) {\r\n this.resizeObserver.disconnect();\r\n }\r\n if (this.headerReadMore != null) {\r\n this.headerReadMore.dispose();\r\n }\r\n } catch (error) {\r\n console.log(`ProductListingPageOption: dispose Error:`, error);\r\n }\r\n }\r\n\r\n delete(): void {\r\n\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IProductListingPageQuickLink, ProductListingPageQuickLink } from \"./productListingPageQuickLink\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport interface IProductListingPagHeaderQuickLinks extends IInstanceComponentBase {\r\n productListingPageQuickLinks : IProductListingPageQuickLink[];\r\n}\r\n\r\nexport class ProductListingPageHeaderQuickLinks extends InstanceComponentBase implements IProductListingPagHeaderQuickLinks {\r\n public productListingPageQuickLinks : IProductListingPageQuickLink[] = new Array();\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this.productListingPageHeaderQuickLinkFactory();\r\n }\r\n\r\n productListingPageHeaderQuickLinkFactory(){\r\n try {\r\n console.log('ProductListingPageHeaderQuickLinks: productListingPageHeaderQuickLinkFactory - Started');\r\n\r\n this.productListingPageQuickLinks = [];\r\n\r\n let quickLinkElements: NodeListOf<HTMLElement> | null = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageHeaderQuickLink)) as NodeListOf<HTMLElement>;\r\n\r\n if(quickLinkElements !== null){\r\n for (let i = 0; i < quickLinkElements.length; i += 1) {\r\n let quickLink: IProductListingPageQuickLink = new ProductListingPageQuickLink(quickLinkElements[i]);\r\n this.productListingPageQuickLinks.push(quickLink);\r\n }\r\n }\r\n\r\n console.log('ProductListingPageHeaderQuickLinks: productListingPageHeaderQuickLinkFactory - Finished');\r\n } catch (error) {\r\n console.log(\"ProductListingPageHeaderQuickLinks: productListingPageHeaderQuickLinkFactory ERROR: \", error);\r\n }\r\n }\r\n\r\n \r\n dispose(): void {\r\n this.productListingPageQuickLinks.forEach((quickLink: IProductListingPageQuickLink) => quickLink.dispose());\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nexport interface IProductListingPageOption extends IInstanceComponentBase {\r\n \r\n optionValue: string;\r\n optionType: string;\r\n optionTitle: string;\r\n optionSelected: boolean;\r\n htmlElement: HTMLElement;\r\n}\r\n\r\nexport class ProductListingPageOption extends InstanceComponentBase implements IProductListingPageOption {\r\n \r\n public optionValue: string;\r\n public optionType: string;\r\n public optionTitle: string;\r\n public optionSelected: boolean;\r\n private readonly _handleProductListingPageOptionSelected;\r\n \r\n constructor(public htmlElement: HTMLElement, optionType: string) {\r\n super(htmlElement);\r\n this.optionType = optionType;\r\n this._handleProductListingPageOptionSelected = this.handleProductListingPageOptionSelected.bind(this);\r\n this.setProductListingPageOption();\r\n this.setProductListingPageOptionSelected();\r\n this.setProductListingPageOptionTitle();\r\n this.attachProductListingPageOptionClickedEventListener();\r\n }\r\n\r\n attachProductListingPageOptionClickedEventListener(): void {\r\n console.log('ProductListingPageOption: attachProductListingPageOptionClickedEventListener');\r\n this.htmlElement.addEventListener(\"click\", this._handleProductListingPageOptionSelected);\r\n }\r\n\r\n removeProductListingPageOptionClickedEventListener(): void {\r\n console.log('ProductListingPageOption: removeProductListingPageOptionClickedEventListener');\r\n this.htmlElement.removeEventListener(\"click\", this._handleProductListingPageOptionSelected);\r\n }\r\n\r\n handleProductListingPageOptionSelected(e: Event) {\r\n console.log('ProductListingPageOption: handleProductListingPageOptionSelected'); \r\n this.htmlElement.dispatchEvent(this.productListingPageOptionSelectedCustomEvent(this.optionType, this.optionValue));\r\n \r\n }\r\n writeToProductListingPageOption(value: string | undefined){\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement as HTMLElement, AttributeEnums.ProductListingPageOption.ProductListingPageOption);\r\n }\r\n\r\n setProductListingPageOption(){\r\n\r\n this.optionValue = this.htmlElement.getAttribute(AttributeEnums.ProductListingPageOption.ProductListingPageOption);\r\n\r\n }\r\n\r\n updateProductListingPageOption(value: string | undefined){\r\n this.writeToProductListingPageOption(value);\r\n this.setProductListingPageOption();\r\n } \r\n \r\n setProductListingPageOptionSelected() {\r\n\r\n this.optionSelected = (this.htmlElement.getAttribute(AttributeEnums.ProductListingPageOption.ProductListingPageOptionSelected) === 'true');\r\n }\r\n\r\n setProductListingPageOptionTitle() {\r\n\r\n this.optionTitle = this.htmlElement.getAttribute(AttributeEnums.ProductListingPageOption.ProductListingPageOptionTitle);\r\n }\r\n\r\n productListingPageOptionSelectedCustomEvent(type: string, value: string) {\r\n console.log(`ProductListingPageOption: productListingPageOptionSelectedCustomEvent type: ${type} value: ${value}`);\r\n return new CustomEvent(CustomEventEnums.ProductListingPageOptionSelected, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n type: type,\r\n value: value\r\n }\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.removeProductListingPageOptionClickedEventListener();\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { HttpRequest } from \"../../shared/ajax\";\r\nimport { AjaxGetAndReplaceHtml } from \"../../shared/ajaxGetAndReplaceHtml\";\r\nimport { initialise } from \"../../shared/initialiser\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { OptionUpdateDto } from \"./productListingPage\";\r\nimport { IProductListingPageGroupOptions, ProductListingPageGroupOptions } from \"./productListingPageGroupOptions\";\r\nimport { IProductListingPageOption } from \"./productListingPageOption\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport interface IProductListingPageOptions extends IInstanceComponentBase {\r\n htmlElement: HTMLElement; \r\n productListingPageGroupOptions: IProductListingPageGroupOptions[];\r\n totalProducts: number;\r\n updateOptions: (querySelectorString: string) => Promise<void>;\r\n updateOptionsForOptionUpdateDto(optionUpdateDto: OptionUpdateDto): Promise<void>;\r\n getAllSelectedOptions:() => IProductListingPageOption[];\r\n getCategoryOptions:() => IProductListingPageOption[];\r\n updateProductListingPageShowingTotalProducts:(value: number) => void;\r\n displayLoading: () => void;\r\n removeLoading:() => void;\r\n \r\n}\r\n\r\nexport class ProductListingPageOptions extends InstanceComponentBase implements IProductListingPageOptions {\r\n public productListingPageGroupOptions: IProductListingPageGroupOptions[] = new Array();\r\n public productCount: number;\r\n public totalProducts: number;\r\n constructor(public htmlElement: HTMLElement, querySelectorString: string) {\r\n super(htmlElement);\r\n this.setProductListingPageShowingTotalProducts();\r\n }\r\n\r\n async updateOptions(querySelectorString: string): Promise<void> { \r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductListingPageOptions}${querySelectorString}`;\r\n await AjaxGetAndReplaceHtml(this.htmlElement, url);\r\n await initialise();\r\n this.groupOptionsFactory();\r\n }\r\n\r\n async updateOptionsForOptionUpdateDto(optionUpdateDto: OptionUpdateDto): Promise<void> { \r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductListingPageOptionsUpdate}`;\r\n let bodyJson = JSON.stringify(optionUpdateDto);\r\n let response = await HttpRequest.post(url, bodyJson);\r\n this.htmlElement.innerHTML = response;\r\n await initialise();\r\n this.groupOptionsFactory();\r\n }\r\n \r\n groupOptionsFactory() {\r\n let groupOptionElements = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageGroupOptions.ProductListingPageGroupOptions)) as NodeListOf<HTMLElement>;\r\n Array.from(groupOptionElements).forEach((element: HTMLElement) => { this.productListingPageGroupOptions.push(new ProductListingPageGroupOptions(element))});\r\n }\r\n \r\n getAllSelectedOptions(): IProductListingPageOption[] {\r\n let selectedProductListingPageOptions = new Array<IProductListingPageOption>();\r\n for(let groupOption in this.productListingPageGroupOptions) {\r\n let selectedOptions = this.productListingPageGroupOptions[groupOption].productListingPageOptionList.filter((option: IProductListingPageOption)=> option.optionSelected);\r\n selectedProductListingPageOptions = selectedProductListingPageOptions.concat(selectedOptions);\r\n }\r\n return selectedProductListingPageOptions;\r\n }\r\n\r\n getCategoryOptions(): IProductListingPageOption[] {\r\n var categoryGroupOptions = this.productListingPageGroupOptions.filter((groupOptions: IProductListingPageGroupOptions) => groupOptions.groupType == UtilityEnums.SingleSelectType.Category)[0];\r\n return categoryGroupOptions.productListingPageOptionList; \r\n }\r\n displayLoading(){\r\n this.htmlElement.classList.add('lb-loadingTile');\r\n }\r\n removeLoading(){\r\n this.htmlElement.classList.remove('lb-loadingTile');\r\n }\r\n\r\n writeToProductListingPageShowingTotalProducts(value: number) {\r\n var productListingPageElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPage.ProductListingPage)) as HTMLElement;\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), productListingPageElement, AttributeEnums.ProductListingPageOptions.ProductTotal, AttributeEnums.ProductListingPageOptions.ProductTotal);\r\n }\r\n\r\n setProductListingPageShowingTotalProducts() {\r\n let productCountElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPage.ProductListingPage)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageOptions.ProductTotal)) as HTMLElement; \r\n this.totalProducts = +productCountElement.getAttribute(AttributeEnums.ProductListingPageOptions.ProductTotal);\r\n }\r\n\r\n updateProductListingPageShowingTotalProducts(value: number) {\r\n this.writeToProductListingPageShowingTotalProducts(value);\r\n this.setProductListingPageShowingTotalProducts();\r\n this.updateProductListingPageShowingTotalProductsDisplayValue();\r\n }\r\n\r\n updateProductListingPageShowingTotalProductsDisplayValue() {\r\n let productCountElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPage.ProductListingPage)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageOptions.ProductTotal)) as HTMLElement; \r\n productCountElement.innerText = `${this.totalProducts}`;\r\n }\r\n\r\n dispose(): void {\r\n this.productListingPageGroupOptions.forEach((groupOptions: IProductListingPageGroupOptions) => groupOptions.dispose());\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\n\r\n\r\nexport interface IProductListingPageQuickLink extends IInstanceComponentBase {\r\n name: string;\r\n href: string;\r\n}\r\n\r\nexport class ProductListingPageQuickLink extends InstanceComponentBase implements IProductListingPageQuickLink {\r\n \r\n public name: string;\r\n public href: string;\r\n\r\n private readonly _handleProductListingPageQuickLinkClick;\r\n \r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n \r\n this._handleProductListingPageQuickLinkClick = this.handleProductListingPageQuickLinkClick.bind(this);\r\n\r\n this.setName();\r\n this.setHref();\r\n\r\n this.attachProductListingPageQuickLinkClickEventListener();\r\n }\r\n\r\n attachProductListingPageQuickLinkClickEventListener(): void {\r\n console.log('ProductListingPageQuickLink: attachProductListingPageQuickLinkClickEventListener');\r\n this.htmlElement.addEventListener(\"click\", this._handleProductListingPageQuickLinkClick);\r\n }\r\n\r\n removeProductListingPageQuickLinkClickEventListener(): void {\r\n console.log('ProductListingPageQuickLink: removeProductListingPageQuickLinkClickEventListener');\r\n this.htmlElement.removeEventListener(\"click\", this._handleProductListingPageQuickLinkClick);\r\n }\r\n\r\n handleProductListingPageQuickLinkClick(e: Event) {\r\n console.log('ProductListingPageQuickLink: handleProductListingPageQuickLinkClick'); \r\n this.htmlElement.dispatchEvent(this.productListingPageQuickLinkCustomEvent(this.name, this.href)); \r\n }\r\n\r\n productListingPageQuickLinkCustomEvent(type: string, value: string) {\r\n console.log(`ProductListingPageQuickLink: productListingPageQuickLinkCustomEvent type: ${type} value: ${value}`);\r\n return new CustomEvent(CustomEventEnums.ProductListingPageHeaderQuickLink, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n type: type,\r\n value: value\r\n }\r\n });\r\n }\r\n\r\n\r\n setName(): void {\r\n this.name = this.htmlElement.getAttribute(AttributeEnums.ProductListingPageHeader.ProductListingPageHeaderQuickLinkName);\r\n }\r\n setHref(): void {\r\n this.href = this.htmlElement.getAttribute('href');\r\n }\r\n \r\n\r\n dispose(): void {\r\n this.removeProductListingPageQuickLinkClickEventListener();\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { ButtonCarousel, IButtonCarousel } from \"../buttonCarousel/buttonCarousel\";\r\nimport { IProductListingPageOption } from \"./productListingPageOption\";\r\n\r\nexport interface IProductListingPageSelectedOptionsCarousel extends IButtonCarousel {\r\n \r\n}\r\n\r\nexport class ProductListingPageSelectedOptionsCarousel extends ButtonCarousel implements IProductListingPageSelectedOptionsCarousel {\r\n private readonly _handleButtonCarouselButtonClicked;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this._handleButtonCarouselButtonClicked = this.handleButtonCarouselButtonClicked.bind(this);\r\n this.attachButtonCarouselButtonClickedEventListener();\r\n }\r\n attachButtonCarouselButtonClickedEventListener(): void {\r\n console.log('ButtonCarouselButton: attachButtonCarouselButtonClickedEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ButtonCarouselButtonClicked, this._handleButtonCarouselButtonClicked);\r\n }\r\n\r\n removeButtonCarouselButtonClickedEventListener(): void {\r\n console.log('ButtonCarouselButton: removeButtonCarouselButtonClickedEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ButtonCarouselButtonClicked, this._handleButtonCarouselButtonClicked);\r\n }\r\n\r\n handleButtonCarouselButtonClicked(e: CustomEvent) {\r\n console.log('ButtonCarouselButton: handleButtonCarouselButtonClicked');\r\n let querySelectorSegment: string = e.detail.value as string; \r\n let type: string = this.getQuerySelectorSegmentToType(querySelectorSegment);\r\n let value: string = this.getQuerySelectorSegmentToValue(querySelectorSegment);\r\n this.htmlElement.dispatchEvent(this.productListingPageOptionDeselectedCustomEvent(type, value));\r\n }\r\n\r\n getQuerySelectorSegmentToType(querySelectorSegment: string) {\r\n return querySelectorSegment.split('--')[0];\r\n }\r\n\r\n getQuerySelectorSegmentToValue(querySelectorSegment: string) {\r\n return querySelectorSegment.split('--')[1];\r\n }\r\n\r\n public static replaceCarouselOptions(selectedOptionsCarouselElement: HTMLElement, options: IProductListingPageOption[]){\r\n selectedOptionsCarouselElement.innerHTML = ProductListingPageSelectedOptionsCarousel.createButtonHtml(options);\r\n }\r\n\r\n public static createButtonHtml(options: IProductListingPageOption[]) : string{\r\n let buttonHtml :string = '';\r\n options.forEach((option: IProductListingPageOption) => {\r\n let value = option.optionType + '--' + option.optionValue;\r\n buttonHtml += `<button class=\"lb_button lb_button-filter\" data-button-carousel-button=\"true\" data-button-carousel-button-value=\"${value}\">${option.optionTitle}</button>`;\r\n });\r\n return buttonHtml;\r\n }\r\n\r\n productListingPageOptionDeselectedCustomEvent(type: string, value: string) {\r\n console.log(`ProductListingPageSelectedOptionsCarousel: productListingPageOptionDeselectedCustomEvent type: ${type}, value: ${value}`);\r\n return new CustomEvent(CustomEventEnums.ProductListingPageOptionDeselected, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n type: type,\r\n value: value\r\n }\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.removeButtonCarouselButtonClickedEventListener();\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nexport interface IProductListingPageShowMore extends IInstanceComponentBase {\r\n updateProductListingPageShowingStartProduct:(value: number) => void;\r\n updateProductListingPageShowingProductCount: (value: number) => void;\r\n updateProductListingPageShowingTotalProducts: (value: number) => void;\r\n updateProductListingPageShowingStartProductAndProductCount: (startProductValue: number, productCountValue: number) => void;\r\n canShowMore: () => boolean;\r\n updateShowMoreButtonEnabledDisabledStyle: () => void;\r\n startProduct: number;\r\n productCount: number;\r\n totalProducts: number;\r\n isLoading: boolean;\r\n setIsLoadingTrue: () => void;\r\n setIsLoadingFalse: () => void;\r\n}\r\n\r\nexport class ProductListingPageShowMore extends InstanceComponentBase implements IProductListingPageShowMore {\r\n private readonly _handleProductListingPageShowMoreButtonClicked;\r\n public startProduct: number;\r\n public productCount: number;\r\n public totalProducts: number;\r\n public isLoading: boolean;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this.setProductListingPageShowingStartProduct();\r\n this.setProductListingPageShowingProductCount();\r\n this.setProductListingPageShowingTotalProducts();\r\n this.updateShowMoreButtonEnabledDisabledStyle();\r\n this._handleProductListingPageShowMoreButtonClicked = this.handleProductListingPageShowMoreButtonClicked.bind(this);\r\n this.isLoading = false;\r\n this.attachProductListingPageShowMoreButtonClickedEventListener();\r\n }\r\n\r\n attachProductListingPageShowMoreButtonClickedEventListener(): void {\r\n console.log('ProductListingPageShowMore: attachProductListingPageShowMoreButtonClickedEventListener');\r\n this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMoreButton)).addEventListener('click', this._handleProductListingPageShowMoreButtonClicked);\r\n }\r\n\r\n removeProductListingPageShowMoreButtonClickedEventListener(): void {\r\n console.log('ProductListingPageShowMore: removeProductListingPageShowMoreButtonClickedEventListener');\r\n this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMoreButton)).removeEventListener('click', this._handleProductListingPageShowMoreButtonClicked);\r\n }\r\n\r\n handleProductListingPageShowMoreButtonClicked(e: Event){\r\n console.log('ProductListingPageShowMore: handleProductListingPageShowMoreButtonClicked');\r\n this.clearShowMoreHref();\r\n if(this.canShowMore() && this.isLoading === false){\r\n this.setIsLoadingTrue();\r\n let targetElement = e.target as HTMLElement; \r\n this.htmlElement.dispatchEvent(this.productListingPageShowMoreCustomEvent());\r\n } \r\n }\r\n\r\n clearShowMoreHref() {\r\n this.writeToProductListingPageShowMoreHref(\"\");\r\n }\r\n\r\n writeToProductListingPageShowMoreHref(value: string) {\r\n try {\r\n let buttonElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMoreButton));\r\n buttonElement.setAttribute(\"href\", value);\r\n } catch(error) {\r\n console.log('ProductListingPageShowMore: writeToProductListingPageShowMoreHref', error);\r\n }\r\n }\r\n\r\n writeToProductListingPageShowingProductCount(value: number) {\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement, AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingProductCount);\r\n }\r\n\r\n setProductListingPageShowingProductCount() {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingProductCount)); \r\n this.productCount = +productCountElement.getAttribute(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingProductCount);\r\n }\r\n\r\n updateProductListingPageShowingProductCount(value: number) {\r\n this.writeToProductListingPageShowingProductCount(value);\r\n this.setProductListingPageShowingProductCount();\r\n this.updateProductListingPageShowingProductCountDisplayValue();\r\n }\r\n\r\n writeToProductListingPageShowingStartProduct(value: number) {\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement, AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingStartProduct);\r\n }\r\n\r\n setProductListingPageShowingStartProduct() {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingStartProduct));\r\n this.startProduct = +productCountElement.getAttribute(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingStartProduct);\r\n }\r\n\r\n updateProductListingPageShowingStartProduct(value: number) {\r\n this.writeToProductListingPageShowingStartProduct(value);\r\n this.setProductListingPageShowingStartProduct();\r\n this.updateProductListingPageShowingProductCountDisplayValue();\r\n }\r\n\r\n updateProductListingPageShowingStartProductAndProductCount(startProductValue: number, productCountValue: number) {\r\n this.updateProductListingPageShowingStartProduct(startProductValue);\r\n this.updateProductListingPageShowingProductCount(productCountValue);\r\n }\r\n\r\n updateProductListingPageShowingProductCountDisplayValue() {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingProductCount)) as HTMLElement; \r\n productCountElement.innerText = `${this.startProduct} to ${this.productCount}`;\r\n }\r\n\r\n writeToProductListingPageShowingTotalProducts(value: number) {\r\n HelperUtils.setValueForElementAndAttribute(value.toString(), this.htmlElement as HTMLElement, AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingTotalProducts,AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingTotalProducts);\r\n }\r\n\r\n setProductListingPageShowingTotalProducts() {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingTotalProducts)); \r\n this.totalProducts = +productCountElement.getAttribute(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingTotalProducts);\r\n }\r\n updateProductListingPageShowingTotalProductsDisplayValue() {\r\n let productCountElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowingTotalProducts)) as HTMLElement; \r\n productCountElement.innerText = `${this.totalProducts}`;\r\n }\r\n updateProductListingPageShowingTotalProducts(value: number) {\r\n this.writeToProductListingPageShowingTotalProducts(value);\r\n this.setProductListingPageShowingTotalProducts();\r\n this.updateProductListingPageShowingTotalProductsDisplayValue();\r\n }\r\n\r\n \r\n\r\n canShowMore(): boolean {\r\n \r\n if (this.productCount < this.totalProducts) {\r\n console.log('ProductListingPageShowMore: canShowMore => true');\r\n return true;\r\n } else {\r\n console.log('ProductListingPageShowMore: canShowMore => false');\r\n return false;\r\n }\r\n }\r\n\r\n addDisabledStyleToShowMore(){\r\n let showMoreButtonElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMoreButton));\r\n showMoreButtonElement.classList.add('lb_button-unavailable');\r\n }\r\n removeDisabledStyleToShowMore(){\r\n let showMoreButtonElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMoreButton));\r\n showMoreButtonElement.classList.remove('lb_button-unavailable');\r\n }\r\n\r\n addLoadingStyleToShowMore(){\r\n let showMoreButtonElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMoreButton));\r\n showMoreButtonElement.classList.add('lb_spinnyWheel');\r\n }\r\n removeLoadingStyleToShowMore(){\r\n let showMoreButtonElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageShowMore.ProductListingPageShowMoreButton));\r\n showMoreButtonElement.classList.remove('lb_spinnyWheel');\r\n }\r\n\r\n setIsLoadingTrue(){\r\n this.isLoading = true;\r\n this.addLoadingStyleToShowMore();\r\n }\r\n\r\n setIsLoadingFalse(){\r\n this.isLoading = false;\r\n this.removeLoadingStyleToShowMore();\r\n }\r\n\r\n updateShowMoreButtonEnabledDisabledStyle() {\r\n if(this.canShowMore()){\r\n this.removeDisabledStyleToShowMore();\r\n } else{\r\n this.addDisabledStyleToShowMore();\r\n }\r\n }\r\n productListingPageShowMoreCustomEvent() {\r\n console.log(`ProductListingPageShowMore: productListingPageShowMoreCustomEvent `);\r\n return new CustomEvent(CustomEventEnums.ProductListingPageShowMore, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n \r\n\r\n dispose(): void {\r\n this.removeProductListingPageShowMoreButtonClickedEventListener();\r\n }\r\n \r\n delete(): void {\r\n\r\n }\r\n}","\r\nimport { IProductGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AnalyticEnums } from \"../../shared/utilities/enums/analyticsEnums\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { GoogleTagManagerEnums } from \"../../shared/utilities/enums/googleTagManagerEnums\";\r\nimport { SchemaDataEnums } from \"../../shared/utilities/enums/schemaDataEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nexport interface IProductListingPageTile extends IInstanceComponentBase {\r\n id: string;\r\n url: string;\r\n name: string;\r\n price: string;\r\n brand: string;\r\n variant: string;\r\n category: string;\r\n position: number;\r\n impressionLogged: boolean;\r\n htmlElement: HTMLElement;\r\n updateImpressionLogged: (isLogged: boolean) => void;\r\n getProductGtmDataObject: () => IProductGtmDataObject;\r\n}\r\n\r\nexport class ProductListingPageTile extends InstanceComponentBase implements IProductListingPageTile {\r\n private readonly _handleProductListingPageClickEvent;\r\n public id: string;\r\n public url: string;\r\n public name: string;\r\n public price: string;\r\n public brand: string;\r\n public variant: string;\r\n public category: string;\r\n public impressionLogged: boolean;\r\n\r\n constructor(public htmlElement: HTMLElement, public position: number) {\r\n super(htmlElement);\r\n this._handleProductListingPageClickEvent = this.handleProductListingPageClickEvent.bind(this);\r\n this.setId();\r\n this.setUrl();\r\n this.setName();\r\n this.setPrice();\r\n this.setBrand();\r\n this.setVariant();\r\n this.setCategory();\r\n this.setImpressionLogged();\r\n\r\n this.attachProductListingPageTileClickEventListener();\r\n }\r\n\r\n\r\n attachProductListingPageTileClickEventListener(): void {\r\n console.log('ProductListingPageTile: attachProductListingPageTileClickEventListener');\r\n this.htmlElement.addEventListener('click', this._handleProductListingPageClickEvent);\r\n }\r\n removeProductListingPageTileClickEventListener(): void {\r\n console.log('ProductListingPageTile: attachProductListingPageTileClickEventListener');\r\n this.htmlElement.removeEventListener('click', this._handleProductListingPageClickEvent);\r\n }\r\n\r\n setId(): void {\r\n try {\r\n let lineIdElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTile.ProductListingPageTileLineId));\r\n this.id = lineIdElement.getAttribute(AttributeEnums.ProductListingPageTile.ProductListingPageTileLineId);\r\n } catch {\r\n console.log('ProductListingPageTile: setId Not Set');\r\n this.id = '';\r\n }\r\n }\r\n\r\n getItempropContentValue(itemListValue: SchemaDataEnums.ItemList) {\r\n try {\r\n let lineIdElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(SchemaDataEnums.ItemList.ItemProp, itemListValue));\r\n return lineIdElement.getAttribute(SchemaDataEnums.ItemList.Content);\r\n } catch {\r\n console.log('ProductListingPageTile: getItempropContentValue itemListValue Not Set');\r\n return '';\r\n }\r\n }\r\n\r\n setUrl(): void {\r\n try {\r\n let urlElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTile.ProductListingPageTileUrl));\r\n this.url = urlElement.getAttribute(AttributeEnums.ProductListingPageTile.ProductListingPageTileUrl);\r\n } catch {\r\n console.log('ProductListingPageTile: setUrl Not Set');\r\n this.url = '';\r\n }\r\n }\r\n\r\n setName(): void {\r\n this.name = this.getItempropContentValue(SchemaDataEnums.ItemList.Name);\r\n }\r\n\r\n setPrice(): void {\r\n try {\r\n let priceElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTile.ProductListingPageTilePrice));\r\n this.price = priceElement.getAttribute(AttributeEnums.ProductListingPageTile.ProductListingPageTilePrice);\r\n } catch {\r\n console.log('ProductListingPageTile: setPrice Not Set');\r\n this.price = '';\r\n }\r\n }\r\n\r\n setBrand(): void {\r\n this.brand = this.getItempropContentValue(SchemaDataEnums.ItemList.Brand);\r\n }\r\n\r\n setVariant(): void {\r\n this.variant = this.getItempropContentValue(SchemaDataEnums.ItemList.Size);\r\n }\r\n\r\n setCategory(): void {\r\n this.category = this.getItempropContentValue(SchemaDataEnums.ItemList.Category);\r\n }\r\n\r\n setImpressionLogged(): void {\r\n try {\r\n this.impressionLogged = (this.htmlElement.getAttribute(AnalyticEnums.InteractionState.ImpressionLogged) === 'true') ? true : false;\r\n } catch (error) {\r\n console.log('ProductListingPageTile: setImpressionLogged Not Set');\r\n this.impressionLogged = true;\r\n }\r\n }\r\n writeToImpressionLogged(isLogged: boolean): void {\r\n try {\r\n this.htmlElement.setAttribute(AnalyticEnums.InteractionState.ImpressionLogged, isLogged ? 'true' : 'false');\r\n } catch (error) {\r\n console.log('ProductListingPageTile: writeToImpressionLogged Not Set');\r\n }\r\n }\r\n\r\n updateImpressionLogged(isLogged: boolean): void {\r\n this.writeToImpressionLogged(isLogged);\r\n this.setImpressionLogged();\r\n }\r\n\r\n\r\n getList(): string {\r\n try {\r\n let plpElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPage.ProductListingPage));\r\n let headingElement = plpElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageHeader.ProductListingPageHeaderHeading)) as HTMLElement;\r\n let headingText = headingElement.innerText.replace(/,/g, '');\r\n return `${GoogleTagManagerEnums.ListSuffixes.ProductListingPage} - ${headingText}`;\r\n } catch {\r\n console.log('ProductListingPageTile: setList Not Set');\r\n return GoogleTagManagerEnums.ListSuffixes.ProductListingPage;\r\n }\r\n }\r\n\r\n handleProductListingPageClickEvent(): void {\r\n console.log('ProductListingPageTile: handleProductListingPageClickEvent');\r\n let productGtmDataObject: IProductGtmDataObject = this.getProductGtmDataObject();\r\n GoogleTagManager.sendProductGtmDataObjectAndNavigate(productGtmDataObject, this.url);\r\n }\r\n\r\n getProductGtmDataObject(): IProductGtmDataObject {\r\n let productGtmDataObject: IProductGtmDataObject = {\r\n id: this.id,\r\n url: this.url,\r\n name: this.name,\r\n price: this.price,\r\n brand: this.brand,\r\n variant: this.variant,\r\n category: this.category,\r\n position: this.position,\r\n list: this.getList()\r\n };\r\n return productGtmDataObject;\r\n }\r\n\r\n\r\n dispose(): void {\r\n this.removeProductListingPageTileClickEventListener();\r\n }\r\n\r\n delete(): void {\r\n\r\n }\r\n}","import { HttpRequest } from \"../../shared/ajax\";\r\nimport { AjaxGetAndReplaceHtml } from \"../../shared/ajaxGetAndReplaceHtml\";\r\nimport { IProductGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { OnScreenUtils } from \"../../shared/utilities/onScreenUtils\";\r\nimport { IProductListingPageTile, ProductListingPageTile } from \"./productListingPageTile\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport interface IProductListingPageTiles extends IInstanceComponentBase {\r\n updateTiles: (querySelectorString: string) => Promise<void>;\r\n updateTilesUnpaged: (querySelectorString: string) => Promise<void>;\r\n addTilesPage: (querySelectorString: string) => void;\r\n countDisplayedPageTiles: () => number;\r\n displayProductListingTilesLoadingTiles: () => void;\r\n productListingPageTileList: IProductListingPageTile[];\r\n}\r\n\r\nexport class ProductListingPageTiles extends InstanceComponentBase implements IProductListingPageTiles {\r\n public productListingPageTileList: IProductListingPageTile[];\r\n private readonly _handleOnScroll;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this._handleOnScroll = this.handleOnScroll.bind(this);\r\n this.instantiateProductListingPageTiles();\r\n this.updateGTMImpressions();\r\n this.attachCustomOnScrollEventListener();\r\n }\r\n\r\n attachCustomOnScrollEventListener(): void {\r\n (<any>window).addEventListener(CustomEventEnums.OnScroll, this._handleOnScroll);\r\n }\r\n removeCustomOnScrollEventListener(): void {\r\n (<any>window).removeEventListener(CustomEventEnums.OnScroll, this._handleOnScroll);\r\n }\r\n handleOnScroll(): void {\r\n console.log('ProductListingPageTiles: handleOnScroll');\r\n this.updateGTMImpressions();\r\n }\r\n\r\n getAllUnLoggedTile(): Array<IProductListingPageTile> {\r\n return this.productListingPageTileList.filter((productListingPageTile: IProductListingPageTile) => productListingPageTile.impressionLogged === false);\r\n }\r\n\r\n updateGTMImpressions(): void {\r\n try {\r\n let tilesToLog = new Array<IProductListingPageTile>();\r\n let unloggedTiles = this.getAllUnLoggedTile();\r\n unloggedTiles.forEach((productListingPageTile: IProductListingPageTile) => {\r\n if (OnScreenUtils.isVerticallyOnScreen(productListingPageTile.htmlElement)) {\r\n tilesToLog.push(productListingPageTile);\r\n }\r\n });\r\n\r\n let productGtmDataObjectList = new Array<IProductGtmDataObject>();\r\n tilesToLog.forEach((productListingPageTile: IProductListingPageTile) => {\r\n productGtmDataObjectList.push(productListingPageTile.getProductGtmDataObject());\r\n });\r\n\r\n if (productGtmDataObjectList.length > 0) {\r\n let impressionsLogged: boolean = GoogleTagManager.sendProductTileImpressionsGtmDataObject(productGtmDataObjectList);\r\n\r\n if (impressionsLogged) {\r\n tilesToLog.forEach((productListingPageTile: IProductListingPageTile) => {\r\n productListingPageTile.updateImpressionLogged(true);\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.log('ProductListingPageTiles: updateGTMImpressions ERROR', error);\r\n }\r\n }\r\n\r\n\r\n instantiateProductListingPageTiles(): void {\r\n try {\r\n console.log('ProductListingPageTiles: instantiateProductListingPageTiles - started');\r\n let productListingPageTileList = new Array<IProductListingPageTile>();\r\n let productListingPageTileElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTile.ProductListingPageTile));\r\n\r\n for (let i = 0; i < productListingPageTileElements.length; i += 1) {\r\n let currentProductListingTile = new ProductListingPageTile(productListingPageTileElements[i], i + 1);\r\n\r\n productListingPageTileList.push(currentProductListingTile);\r\n }\r\n\r\n this.productListingPageTileList = productListingPageTileList;\r\n } catch (error) {\r\n console.log('ProductListingPageTiles: instantiateProductListingPageTiles ERROR: ', error);\r\n }\r\n }\r\n\r\n async updateTiles(querySelectorString: string) {\r\n try {\r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductListingPageTiles}${querySelectorString}`;\r\n await AjaxGetAndReplaceHtml(this.htmlElement, url);\r\n\r\n let productListingPageTileElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTile.ProductListingPageTile));\r\n\r\n if (productListingPageTileElements.length === 0) { \r\n this.htmlElement.dispatchEvent(this.productListingNoProductsReturnedCustomEvent(querySelectorString));\r\n }\r\n } catch (error) {\r\n console.log('ProductListingPageTiles: updateTiles ERROR getting tiles', error);\r\n }\r\n }\r\n\r\n async updateTilesUnpaged(querySelectorString: string) {\r\n try {\r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductListingPageTilesUnpaged}${querySelectorString}`;\r\n await AjaxGetAndReplaceHtml(this.htmlElement, url);\r\n\r\n let productListingPageTileElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTile.ProductListingPageTile));\r\n\r\n if (productListingPageTileElements.length === 0) {\r\n this.htmlElement.dispatchEvent(this.productListingNoProductsReturnedCustomEvent(querySelectorString));\r\n }\r\n } catch (error) {\r\n console.log('ProductListingPageTiles: updateTilesUnpaged ERROR getting tiles', error);\r\n }\r\n }\r\n\r\n async addTilesPage(querySelectorString: string) {\r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductListingPageTiles}${querySelectorString}`;\r\n let response = await HttpRequest.get(url);\r\n this.htmlElement.insertAdjacentHTML('beforeend', response);\r\n this.reinitialiseTileList();\r\n this.updateGTMImpressions();\r\n }\r\n\r\n countDisplayedPageTiles() {\r\n let tileElements = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductListingPageTile.ProductListingPageTile));\r\n if (tileElements === null || tileElements === undefined) {\r\n return 0;\r\n } else {\r\n return tileElements.length;\r\n }\r\n }\r\n\r\n displayProductListingTilesLoadingTiles() {\r\n let tileCount = this.countDisplayedPageTiles();\r\n let loadingTilesHtmlString: string = '';\r\n for (let i = 0; i < tileCount; i += 1) {\r\n loadingTilesHtmlString += '<a href=\"/product/url/prevent/default\" class=\"lb_productTile lb-loadingTile\"></a>';\r\n }\r\n\r\n this.htmlElement.innerHTML = loadingTilesHtmlString;\r\n }\r\n\r\n reinitialiseTileList(): void {\r\n try {\r\n this.productListingPageTileList.forEach((productListingPageTile: IProductListingPageTile) => {\r\n productListingPageTile.dispose();\r\n });\r\n } catch (error) {\r\n console.log('reinitialiseTileList: failed to dispose ERROR: ', error);\r\n }\r\n this.productListingPageTileList = null;\r\n this.instantiateProductListingPageTiles();\r\n }\r\n productListingNoProductsReturnedCustomEvent(querySelectorString: string) {\r\n console.log(`ProductListingPageShowMore: productListingNoProductsReturnedCustomEvent`);\r\n return new CustomEvent(CustomEventEnums.ProductListingNoProductsReturned, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n querySelectorString: querySelectorString\r\n }\r\n });\r\n }\r\n dispose(): void {\r\n try {\r\n this.removeCustomOnScrollEventListener();\r\n this.productListingPageTileList.forEach((productListingPageTile: IProductListingPageTile) => {\r\n productListingPageTile.dispose();\r\n });\r\n } catch (error) {\r\n console.log('ProductListingPageTiles: failed to dispose ERROR: ', error);\r\n }\r\n }\r\n\r\n delete(): void {\r\n\r\n }\r\n}","import { HttpRequest } from \"../../shared/ajax\";\r\nimport { LbCookies } from \"../../shared/lbCookies\";\r\nimport { BasketProduct } from \"./basketProduct\";\r\nimport Swal from \"sweetalert2\";\r\nimport { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { ProductDeliveryPanel } from \"./productDeliveryPanel\";\r\nimport { getProductDeliveryPanelViaOuterElement, initialiseProductDeliveryPanel } from \"./productDeliveryPanelInitialiser\";\r\nimport { IProductOptionsPanel, ProductOptionsPanel } from \"./productOptionsPanel\";\r\nimport { IProductPrice, ProductPrice } from \"./productPrice\";\r\nimport { getProductWithTypeName, reitialiseMainProductAndProductOptionsPanel } from \"./productInitialiser\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { initialise } from \"../../shared/initialiser\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\n\r\nimport { ProductColourDropDown } from \"./productColourDropDown\";\r\nimport { AjaxGetAndReplaceHtml } from \"../../shared/ajaxGetAndReplaceHtml\";\r\nimport { CarouselTileLoad, ICarouselTileLoad } from \"../carousel/carouselTileLoad\";\r\nimport { LoadingTemplates } from \"../loading/loadingTemplates\";\r\nimport { IProductFinancePanel, ProductFinancePanel } from \"./productFinancePanel\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { IProductCarouselOrchestrator, ProductCarouselOrchestrator } from \"./productCarouselOrchestrator\";\r\nimport { YouTubeVideo } from \"../video/youTubeVideo\";\r\nimport { IPopOutController } from \"../../shared/popOutController\";\r\nimport { BannerPromotions, IBannerPromotions } from \"../promotions/bannerPromotions\";\r\nimport { IProductGtm, ProductGtm } from \"./productGtm\";\r\nimport { BasketService } from \"../basket/basketService\";\r\nimport { GlobalComponents, IGlobalComponents } from \"../globalComponents/globalComponents\";\r\nimport { IProductReviewsParent, ProductReviewsParent } from \"./productReviewsParent\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\n\r\nexport class Product extends InstanceComponentBase {\r\n\r\n productDeliveryPanel: ProductDeliveryPanel;\r\n productOptionsPanel: IProductOptionsPanel;\r\n productPrice: IProductPrice;\r\n productFinancePanel: IProductFinancePanel;\r\n productCarouselOrchestrator: IProductCarouselOrchestrator;\r\n productGtm: IProductGtm;\r\n public productReviewsParent: IProductReviewsParent;\r\n public dataProductType: string;\r\n public lineId: number;\r\n public sizeId: number | undefined;\r\n public youTubeVideos: YouTubeVideo[];\r\n private readonly _productSelectorClick;\r\n private readonly _productAddToBasketClick;\r\n private readonly _setProductInvalidMessagesAndValidationWithEvent;\r\n public globalComponents: IGlobalComponents;\r\n //private readonly _recalculateFinancePanelFromCustomEvent;\r\n private readonly popoutController: IPopOutController;\r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n this.dataProductType = htmlElement.getAttribute(AttributeEnums.Product.Product);\r\n this.popoutController = (<any>window).popOutController;\r\n //----- Event Listener Bindings Start -----//\r\n this._productSelectorClick = this.productSelectorClick.bind(this);\r\n this._productAddToBasketClick = this.productAddToBasketClick.bind(this);\r\n this._setProductInvalidMessagesAndValidationWithEvent = this.setProductInvalidMessagesAndValidationWithEvent.bind(this);\r\n //this._recalculateFinancePanelFromCustomEvent = this.recalculateFinancePanelFromCustomEvent.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n //this.attachProductSelectorClickEvent();\r\n this.attachAddToBasketClickEvent();\r\n this.attachProductSelectorChangedEventListener();\r\n //this.attachProductPriceUpdatedEvent();\r\n //----- Initialise Event Listeners End -----//\r\n this.viewProductDetailsFieldsSetUp();\r\n\r\n //Initialise ProductCarouselOrchestrator\r\n this.productCarouselOrchestrator = new ProductCarouselOrchestrator(htmlElement as HTMLElement);\r\n\r\n //Initialise productFinancePanel\r\n let productFinancePanelElement: HTMLElement = htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductFinancePanel.ProductFinancePanel));\r\n if (productFinancePanelElement) {\r\n this.productFinancePanel = new ProductFinancePanel(productFinancePanelElement);\r\n }\r\n\r\n this.createProductGtmFactory();\r\n //Create YouTube Videos\r\n this.createYouTubeVideoFactory();\r\n this.createReviewsParentFactory();\r\n this.globalComponents = GlobalComponents.getGlobalComponents();\r\n\r\n this.setProductLineId();\r\n this.setProductSizeId();\r\n this.popoutController.active = true;\r\n }\r\n\r\n setProductLineId(): void {\r\n this.lineId = +this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductLineId)).getAttribute(AttributeEnums.Product.ProductLineId);\r\n\r\n }\r\n setProductSizeId(): void {\r\n this.sizeId = +this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductSizeId)).getAttribute(AttributeEnums.Product.ProductSizeId);\r\n }\r\n\r\n createProductGtmFactory(): void {\r\n try {\r\n let productGtmElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductGtm.GtmProduct));\r\n if (productGtmElement) {\r\n this.productGtm = new ProductGtm(productGtmElement);\r\n }\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n createYouTubeVideoFactory(): void {\r\n let youTubeElements: NodeListOf<Element> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.Video.Video));\r\n this.youTubeVideos = new Array<YouTubeVideo>();\r\n\r\n for (let i = 0; i < youTubeElements.length; i += 1) {\r\n let youTubeElement: Element = youTubeElements[i] as HTMLElement;\r\n let youTubeVideo = new YouTubeVideo(youTubeElement);\r\n this.youTubeVideos.push(youTubeVideo);\r\n }\r\n }\r\n\r\n createReviewsParentFactory(): void {\r\n try {\r\n let reviewsParentElement: string | null = this.htmlElement.getAttribute(AttributeEnums.ReviewComponents.reviewWidgetParent);\r\n //let reviewsParentElement: HTMLElement = this.htmlElement as HTMLElement;\r\n if (reviewsParentElement === 'true') {\r\n console.log('Product: createReviewsParentFactory - initialised');\r\n this.productReviewsParent = new ProductReviewsParent(this.htmlElement as HTMLElement);\r\n }\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n\r\n attachAddToBasketClickEvent() {\r\n console.log('Product: attachAddToBasketClickEvent');\r\n this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductAddToCart)).addEventListener('click', this._productAddToBasketClick);\r\n }\r\n\r\n attachProductSelectorChangedEventListener() {\r\n console.log('Product: productSelectorChangedEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ProductSelectorChanged, this._setProductInvalidMessagesAndValidationWithEvent);\r\n }\r\n // async attachProductPriceUpdatedEvent() {\r\n // document.addEventListener('product-price-updated', this._recalculateFinancePanelFromCustomEvent);\r\n // }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n // removeProductSelectorClickEvent() {\r\n // console.log('Product: removeProductSelectorClickEvent');\r\n // this.htmlElement.removeEventListener('click', this._productSelectorClick);\r\n // }\r\n removeAddToBasketClickEvent() {\r\n console.log('Product: removeAddToBasketClickEvent');\r\n\r\n this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductAddToCart)).removeEventListener('click', this._productAddToBasketClick);\r\n }\r\n\r\n removeProductSelectorChangedEventListener() {\r\n console.log('Product: removeProductSelectorChangedEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ProductSelectorChanged, this._setProductInvalidMessagesAndValidationWithEvent);\r\n }\r\n\r\n // removeProductPriceUpdatedEvent() {\r\n // document.removeEventListener('product-price-updated', this._recalculateFinancePanelFromCustomEvent);\r\n // }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n setProductInvalidMessagesAndValidationWithEvent(event: CustomEvent) {\r\n\r\n console.log(\"Product: ProductSelectorChanged Event Fired\");\r\n console.log(\"Product: ProductSelectorChanged Type: \", event.detail);\r\n //let element = event.currentTarget as HTMLElement;\r\n let eventDetail = event.detail;\r\n\r\n this.setProductInvalidMassagesAndValidation(eventDetail.type);\r\n }\r\n\r\n productSelectorClick(event: MouseEvent) {\r\n console.log('Product: productSelectorClick');\r\n let clickElement = event.target;\r\n this.ifClickElementIsOfAddToCart(clickElement);\r\n }\r\n\r\n productAddToBasketClick(event: MouseEvent) {\r\n console.log('Product: productAddToBasketClick');\r\n let clickElement = event.target;\r\n this.ifClickElementIsOfAddToCart(clickElement);\r\n }\r\n\r\n async ifClickElementIsOfAddToCart(clickElement: EventTarget): Promise<void> {\r\n if (clickElement instanceof HTMLElement && clickElement.hasAttribute(AttributeEnums.Product.ProductAddToCart)) {\r\n let currentProductType: string = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).getAttribute(AttributeEnums.Product.Product);\r\n console.log(`Product ifClickElementIsOfAddToCart - currentProductType: ${currentProductType} this.dataProductType ${this.dataProductType}`);\r\n if (currentProductType === this.dataProductType) {\r\n console.log('Product: ifClickElementIsOfAddToCart - started ');\r\n if (this.isProductValid()) {\r\n console.log('Product: ifClickElementIsOfAddToCart - isProductValid true');\r\n let basketProduct: BasketProduct = this.mapSelectorsToBasketProduct();\r\n document.dispatchEvent(this.addProductStartedEvent(this.dataProductType));\r\n\r\n\r\n let result = await BasketService.addProduct(basketProduct, this.productGtm.getAddToRemoveFromCartGtmDataObject());\r\n\r\n document.dispatchEvent(this.addProductCompletedEvent(this.dataProductType));\r\n\r\n if (this.dataProductType === UtilityEnums.ProductTypeValue.Product) {\r\n\r\n ProductColourDropDown.clearSwatchImageInfo(this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SwatchImage.GallerySwatchImage)));\r\n await reitialiseMainProductAndProductOptionsPanel(this);\r\n\r\n }\r\n } else {\r\n console.log('Product: ifClickElementIsOfAddToCart - isProductValid false');\r\n let productType = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).getAttribute(AttributeEnums.Product.Product);\r\n clickElement.setAttribute(AttributeEnums.Product.ProductAddToCartAttempted, 'true');\r\n this.setProductInvalidMassagesAndValidation(productType);\r\n Swal.fire(StringEnums.Content.PleaseSelectAllProductOptions);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n // async recalculateProductFinancePanel(price: number) {\r\n // try {\r\n // console.log('Product: recalculateProductFinancePanel Started');\r\n // let dataProductFinancePanelElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductFinancePanel)) as HTMLElement;\r\n // console.log('Product: recalculateProductFinancePanel - dataProductFinancePanelElement ', dataProductFinancePanelElement);\r\n // if (dataProductFinancePanelElement !== null) {\r\n // dataProductFinancePanelElement.innerHTML = LoadingTemplates.productLoadingTemplate;\r\n // let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductFinancePanel}${price}`;\r\n // console.log('Product: recalculateProductFinancePanel URL: ' + url);\r\n // await AjaxGetAndReplaceHtmlAndOuterElement(dataProductFinancePanelElement, url);\r\n // console.log('Product: recalculateProductFinancePanel AjaxGetAndReplaceHtml Finished');\r\n // }\r\n // } catch (error) {\r\n // console.log('Product: recalculateProductFinancePanel', error);\r\n // }\r\n // }\r\n\r\n // recalculateFinancePanelFromCustomEvent(event: CustomEvent): void {\r\n // console.log('Product: recalculateFinancePanelFromCustomEvent - Beginning');\r\n // let eventDetail = event.detail;\r\n // let type = eventDetail.type as string;\r\n // if (type === this.htmlElement.getAttribute(AttributeEnums.Product.Product)) {\r\n // console.log('Product: recalculateFinancePanelFromCustomEvent - totalPrice' + this.productPrice.totalPrice);\r\n // this.recalculateProductFinancePanel(this.productPrice.totalPrice);\r\n // }\r\n // }\r\n //------ Custom Event Creation Start -----//\r\n productSelectorChangedEvent(type: string) {\r\n return new CustomEvent(CustomEventEnums.ProductSelectorChanged, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'type': type\r\n }\r\n\r\n });\r\n }\r\n\r\n addProductStartedEvent(type: string) {\r\n return new CustomEvent(CustomEventEnums.AddProductStarted, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'type': type\r\n }\r\n\r\n });\r\n }\r\n\r\n addProductCompletedEvent(type: string) {\r\n return new CustomEvent(CustomEventEnums.AddProductCompleted, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'type': type\r\n }\r\n\r\n });\r\n }\r\n\r\n //------ Custom Event Creation End -----//\r\n\r\n getAdditionPriceTotalFromHiddenInput(): number {\r\n let additionPriceTotal: number = 0;\r\n\r\n let dataProductSelectedAddtionPriceElements: NodeListOf<Element> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector) + HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductAdditionPrice));\r\n\r\n for (let currentElement = 0; currentElement < dataProductSelectedAddtionPriceElements.length; currentElement += 1) {\r\n let currentAdditionPriceElement: Element = dataProductSelectedAddtionPriceElements[currentElement];\r\n additionPriceTotal += parseFloat(currentAdditionPriceElement.getAttribute(AttributeEnums.Product.ProductAdditionPrice).replace(',', ''));\r\n }\r\n\r\n return additionPriceTotal;\r\n }\r\n\r\n isProductValid(): boolean {\r\n let dataProductSelectorElements: NodeListOf<Element> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector));\r\n\r\n let valid: boolean = true;\r\n for (let currentElement = 0; currentElement < dataProductSelectorElements.length; currentElement += 1) {\r\n let currentSelectorElement: Element = dataProductSelectorElements[currentElement];\r\n\r\n if (currentSelectorElement && currentSelectorElement.getAttribute('value')) {\r\n //alert(\"My input has a value!\");\r\n } else {\r\n valid = false\r\n }\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n setProductInvalidMassagesAndValidation(type: string) {\r\n try {\r\n let product: Product = getProductWithTypeName(type);\r\n product.productOptionsPanel.setProductOptionsValidation();\r\n } catch (error) {\r\n console.log('Product: setProductInvalidMassagesAndValidation', error);\r\n }\r\n }\r\n\r\n removeProductInvalidMassagesAndValidation() {\r\n let productDropdowns = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDropDown));\r\n\r\n for (let i = 0; i < productDropdowns.length; i += 1) {\r\n productDropdowns[i].classList.remove(StringEnums.CssClass.LbWarning);\r\n }\r\n }\r\n\r\n mapSelectorsToBasketProduct = (): BasketProduct => {\r\n let sizeSelector = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector) + HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductSizeId));\r\n let extraSelectors = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector) + HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductGroupId));\r\n\r\n let sizeId: number = +sizeSelector.getAttribute('value');\r\n let lineId: number = +sizeSelector.getAttribute(AttributeEnums.Product.ProductLineId);\r\n let extraIds: number[] = [];\r\n for (let i = 0; i < extraSelectors.length; i += 1) {\r\n let extraId: number = +extraSelectors[i].getAttribute('value');\r\n extraIds.push(extraId);\r\n }\r\n let sessionId = LbCookies.getOrInitialiseBasketSession();\r\n let datetime: Date = new Date();\r\n\r\n return {\r\n \"id\": 0,\r\n \"lineId\": lineId,\r\n \"sizeId\": sizeId,\r\n \"sessionId\": sessionId,\r\n \"quantity\": 1,\r\n \"removal\": 0,\r\n \"assembly\": 0,\r\n \"sku\": \"\",\r\n \"datetime\": datetime.toISOString(),\r\n \"extraIds\": extraIds\r\n\r\n\r\n };\r\n };\r\n\r\n\r\n viewProductDetailsFieldsSetUp() {\r\n console.log('Product: viewProductDetailsFieldsSetUp');\r\n\r\n this.initialiseDelivery();\r\n this.initialiseProductOptionsPanel();\r\n this.initialiseProductPrice();\r\n if (this.productOptionsPanel) {\r\n this.productOptionsPanel.setUpOptionsSelectedFields();\r\n }\r\n if (this.productPrice) {\r\n this.productPrice.updateProductPrice(this.productOptionsPanel.getTotalProductAdditionsPrice());\r\n }\r\n }\r\n\r\n initialiseDelivery(): void {\r\n try {\r\n let deliveryPanelElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductDelivery.ProductDeliveryPanel));\r\n if (deliveryPanelElement) {\r\n if (this.productDeliveryPanel === undefined || this.productDeliveryPanel === null) {\r\n console.log('Product: initialiseDelivery');\r\n this.productDeliveryPanel = new ProductDeliveryPanel(deliveryPanelElement);\r\n }\r\n }\r\n }\r\n catch (error) {\r\n console.log('Product: initialiseDelivery', error);\r\n }\r\n }\r\n\r\n initialiseProductOptionsPanel(): void {\r\n try {\r\n if (this.productOptionsPanel === undefined || this.productOptionsPanel === null) {\r\n console.log('Product: initialiseProductOptionsPanel', this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductOptionsPanel)));\r\n\r\n this.productOptionsPanel = new ProductOptionsPanel((this.htmlElement as HTMLElement).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductOptionsPanel)));\r\n }\r\n }\r\n catch (error) {\r\n console.log('Product: initialiseProductOptionsPanel', error);\r\n }\r\n }\r\n\r\n initialiseProductPrice(): void {\r\n try {\r\n this.productPrice = new ProductPrice((this.htmlElement as HTMLElement).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductPrice)));\r\n }\r\n catch (error) {\r\n console.log('Product: initialiseProductPrice', error);\r\n }\r\n }\r\n\r\n //selectorGlobal.ts\r\n static selectedTextFormatter(name: string): string {\r\n console.log('SelectorGlobal: selectedTextFormatter');\r\n let prefixText = 'Selected ';\r\n let postfixText = ':';\r\n return prefixText + name + postfixText;\r\n }\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n try {\r\n console.log(`Product: dispose - ${this.dataProductType}`);\r\n //this.removeProductSelectorClickEvent();\r\n this.removeAddToBasketClickEvent();\r\n this.removeProductSelectorChangedEventListener();\r\n if (this.productOptionsPanel) {\r\n this.productOptionsPanel.dispose();\r\n }\r\n if (this.productDeliveryPanel) {\r\n this.productDeliveryPanel.dispose();\r\n }\r\n\r\n if (this.productPrice) {\r\n this.productPrice.dispose();\r\n }\r\n if (this.productFinancePanel) {\r\n this.productFinancePanel.dispose();\r\n }\r\n if (this.productReviewsParent) {\r\n this.productReviewsParent.dispose();\r\n }\r\n } catch (error) {\r\n console.log('Product: dispose ERROR', error);\r\n }\r\n\r\n this.delete();\r\n }\r\n\r\n delete(): void {\r\n console.log('Product: delete');\r\n if ((<any>window)[this.htmlElement.getAttribute(AttributeEnums.Product.Product) + UtilityEnums.WindowObjectName.Product]) {\r\n console.log('Product: delete - has a product');\r\n delete (<any>window)[this.htmlElement.getAttribute(AttributeEnums.Product.Product) + UtilityEnums.WindowObjectName.Product];\r\n console.log('Product: delete - reference deleted');\r\n }\r\n else {\r\n console.log('Product: delete - Product Reference Not Found');\r\n }\r\n }\r\n //------ Clean Up Processes End -----//\r\n\r\n}\r\n","import { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { CarouselInfiniteLoad, ICarouselInfiniteLoad } from \"../carousel/carouselInfiniteLoad\";\r\nimport { CarouselTileLoad, ICarouselTileLoad } from \"../carousel/carouselTileLoad\";\r\n\r\nexport interface IProductCarouselOrchestrator {\r\n}\r\n\r\nexport class ProductCarouselOrchestrator extends InstanceComponentBase implements IProductCarouselOrchestrator {\r\n\r\n private readonly _productCarouselOneScrollInteraction;\r\n private readonly _productCarouselTwoScrollInteraction;\r\n private readonly _productCarouselThreeScrollInteraction;\r\n private readonly _productCarouselFiveScrollInteraction;\r\n private readonly _productCarouselSixScrollInteraction;\r\n private readonly _productCarouselSevenScrollInteraction;\r\n\r\n private readonly offsetTollerance: number = 800;\r\n\r\n private productCarouselOne: ICarouselInfiniteLoad;\r\n private productCarouselTwo: ICarouselInfiniteLoad;\r\n private productCarouselThree: ICarouselInfiniteLoad;\r\n private productCarouselFive: ICarouselInfiniteLoad;\r\n private productCarouselSix: ICarouselInfiniteLoad;\r\n private productCarouselSeven: ICarouselTileLoad;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n console.log('ProductCarouselOrchestrator instantiate')\r\n super(htmlElement);\r\n\r\n this._productCarouselOneScrollInteraction = this.productCarouselOneScrollInteraction.bind(this);\r\n this._productCarouselTwoScrollInteraction = this.productCarouselTwoScrollInteraction.bind(this);\r\n this._productCarouselThreeScrollInteraction = this.productCarouselThreeScrollInteraction.bind(this);\r\n this._productCarouselFiveScrollInteraction = this.productCarouselFiveScrollInteraction.bind(this);\r\n this._productCarouselSixScrollInteraction = this.productCarouselSixScrollInteraction.bind(this);\r\n this._productCarouselSevenScrollInteraction = this.productCarouselSevenScrollInteraction.bind(this);\r\n\r\n this.attachProductCarouselOneScrollEventListener();\r\n this.attachProductCarouselTwoScrollEventListener();\r\n this.attachProductCarouselThreeScrollEventListener();\r\n this.attachProductCarouselFiveScrollEventListener();\r\n this.attachProductCarouselSixScrollEventListener();\r\n this.attachProductCarouselSevenScrollEventListener();\r\n }\r\n\r\n attachProductCarouselOneScrollEventListener(): void {\r\n let productCarouselOneElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselOne));\r\n\r\n if (productCarouselOneElement !== null) {\r\n document.addEventListener('scroll', this._productCarouselOneScrollInteraction);\r\n }\r\n }\r\n attachProductCarouselTwoScrollEventListener(): void {\r\n let productCarouselTwoElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselTwo));\r\n\r\n if (productCarouselTwoElement !== null) {\r\n document.addEventListener('scroll', this._productCarouselTwoScrollInteraction);\r\n }\r\n }\r\n attachProductCarouselThreeScrollEventListener(): void {\r\n let productCarouselThreeElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselThree));\r\n\r\n if (productCarouselThreeElement !== null) {\r\n document.addEventListener('scroll', this._productCarouselThreeScrollInteraction);\r\n }\r\n }\r\n\r\n attachProductCarouselFiveScrollEventListener(): void {\r\n let productCarouselFiveElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselFive));\r\n\r\n if (productCarouselFiveElement !== null) {\r\n document.addEventListener('scroll', this._productCarouselFiveScrollInteraction);\r\n }\r\n }\r\n attachProductCarouselSixScrollEventListener(): void {\r\n let productCarouselFiveElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselSix));\r\n\r\n if (productCarouselFiveElement !== null) {\r\n document.addEventListener('scroll', this._productCarouselSixScrollInteraction);\r\n }\r\n }\r\n attachProductCarouselSevenScrollEventListener(): void {\r\n let productCarouselSixElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselTileLoad.CarouselTileLoad, UtilityEnums.ProductCarouselNames.ProductCarouselSeven));\r\n\r\n if (productCarouselSixElement !== null) {\r\n document.addEventListener('scroll', this._productCarouselSevenScrollInteraction);\r\n }\r\n }\r\n\r\n removeProductCarouselOneScrollEventListener(): void {\r\n document.removeEventListener('scroll', this._productCarouselOneScrollInteraction);\r\n }\r\n removeProductCarouselTwoScrollEventListener(): void {\r\n document.removeEventListener('scroll', this._productCarouselTwoScrollInteraction);\r\n }\r\n removeProductCarouselThreeScrollEventListener(): void {\r\n document.removeEventListener('scroll', this._productCarouselThreeScrollInteraction);\r\n }\r\n removeProductCarouselFiveScrollEventListener(): void {\r\n document.removeEventListener('scroll', this._productCarouselFiveScrollInteraction);\r\n }\r\n removeProductCarouselSixScrollEventListener(): void {\r\n document.removeEventListener('scroll', this._productCarouselSixScrollInteraction);\r\n }\r\n removeProductCarouselSevenScrollEventListener(): void {\r\n document.removeEventListener('scroll', this._productCarouselSevenScrollInteraction);\r\n }\r\n\r\n productCarouselOneScrollInteraction(): void {\r\n try {\r\n let productCarouselOneElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselOne));\r\n\r\n if ((this.getElementTop(productCarouselOneElement) < this.getWindowTollerance())) {\r\n this.productCarouselOneFactory(productCarouselOneElement);\r\n this.removeProductCarouselOneScrollEventListener();\r\n }\r\n\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselOneScrollInteraction ERROR', error);\r\n }\r\n }\r\n productCarouselTwoScrollInteraction(): void {\r\n try {\r\n let productCarouselTwoElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselTwo));\r\n\r\n if ((this.getElementTop(productCarouselTwoElement) < this.getWindowTollerance())) {\r\n this.productCarouselTwoFactory(productCarouselTwoElement);\r\n this.removeProductCarouselTwoScrollEventListener();\r\n }\r\n\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselTwoScrollInteraction ERROR', error);\r\n }\r\n }\r\n productCarouselThreeScrollInteraction(): void {\r\n try {\r\n let productCarouselThreeElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselThree));\r\n\r\n if ((this.getElementTop(productCarouselThreeElement) < this.getWindowTollerance())) {\r\n this.productCarouselThreeFactory(productCarouselThreeElement);\r\n this.removeProductCarouselThreeScrollEventListener();\r\n }\r\n\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselThreeScrollInteraction ERROR', error);\r\n }\r\n }\r\n productCarouselFiveScrollInteraction(): void {\r\n try {\r\n let productCarouselFiveElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselFive));\r\n\r\n if ((this.getElementTop(productCarouselFiveElement) < this.getWindowTollerance())) {\r\n this.productCarouselFiveFactory(productCarouselFiveElement);\r\n this.removeProductCarouselFiveScrollEventListener();\r\n }\r\n\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselFiveScrollInteraction ERROR', error);\r\n }\r\n }\r\n productCarouselSixScrollInteraction(): void {\r\n try {\r\n let productCarouselSixElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselInfiniteLoad.CarouselInfiniteLoad, UtilityEnums.ProductCarouselNames.ProductCarouselSix));\r\n\r\n if ((this.getElementTop(productCarouselSixElement) < this.getWindowTollerance())) {\r\n this.productCarouselSixFactory(productCarouselSixElement);\r\n this.removeProductCarouselSixScrollEventListener();\r\n }\r\n\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselSixScrollInteraction ERROR', error);\r\n }\r\n }\r\n productCarouselSevenScrollInteraction(): void {\r\n try {\r\n let productCarouselSevenElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CarouselTileLoad.CarouselTileLoad, UtilityEnums.ProductCarouselNames.ProductCarouselSeven));\r\n\r\n if ((this.getElementTop(productCarouselSevenElement) < this.getWindowTollerance())) {\r\n this.productCarouselSevenFactory(productCarouselSevenElement);\r\n this.removeProductCarouselSevenScrollEventListener();\r\n }\r\n\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselSevenScrollInteraction ERROR', error);\r\n }\r\n }\r\n\r\n productCarouselOneFactory(productCarouselElement: HTMLElement): void {\r\n console.log('ProductCarouselOrchestrator: productCarouselOneFactory');\r\n\r\n try {\r\n this.productCarouselOne = new CarouselInfiniteLoad(productCarouselElement, productCarouselElement.getAttribute(AttributeEnums.CarouselInfiniteLoad.Url), true);\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselOneFactory ERROR', error);\r\n }\r\n }\r\n\r\n productCarouselTwoFactory(productCarouselElement: HTMLElement): void {\r\n console.log('ProductCarouselOrchestrator: productCarouselTwoFactory');\r\n\r\n try {\r\n this.productCarouselTwo = new CarouselInfiniteLoad(productCarouselElement, productCarouselElement.getAttribute(AttributeEnums.CarouselInfiniteLoad.Url), true);\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselTwoFactory ERROR', error);\r\n }\r\n }\r\n\r\n productCarouselThreeFactory(productCarouselElement: HTMLElement): void {\r\n console.log('ProductCarouselOrchestrator: productCarouselThreeFactory');\r\n\r\n try {\r\n this.productCarouselThree = new CarouselInfiniteLoad(productCarouselElement, productCarouselElement.getAttribute(AttributeEnums.CarouselInfiniteLoad.Url), true);\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselThreeFactory ERROR', error);\r\n }\r\n }\r\n\r\n productCarouselFiveFactory(productCarouselElement: HTMLElement): void {\r\n console.log('ProductCarouselOrchestrator: productCarouselFiveFactory');\r\n\r\n try {\r\n this.productCarouselFive = new CarouselInfiniteLoad(productCarouselElement, productCarouselElement.getAttribute(AttributeEnums.CarouselInfiniteLoad.Url), true);\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselFiveFactory ERROR', error);\r\n }\r\n }\r\n\r\n productCarouselSixFactory(productCarouselElement: HTMLElement): void {\r\n console.log('ProductCarouselOrchestrator: productCarouselSixFactory');\r\n\r\n try {\r\n this.productCarouselSix = new CarouselInfiniteLoad(productCarouselElement, productCarouselElement.getAttribute(AttributeEnums.CarouselInfiniteLoad.Url), true);\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselSixFactory ERROR', error);\r\n }\r\n }\r\n\r\n productCarouselSevenFactory(productCarouselElement: HTMLElement): void {\r\n console.log('ProductCarouselOrchestrator: productCarouselSevenFactory');\r\n\r\n try {\r\n this.productCarouselSeven = new CarouselTileLoad(productCarouselElement);\r\n } catch (error) {\r\n console.log('ProductCarouselOrchestrator: productCarouselSevenFactory ERROR', error);\r\n }\r\n //as it is the last element\r\n this.dispose();\r\n }\r\n\r\n getElementTop(productCarouselElement: HTMLElement): number {\r\n let elementViewportOffset = productCarouselElement.getBoundingClientRect();\r\n let elementTop: number = elementViewportOffset.top;\r\n return elementTop;\r\n }\r\n getWindowTollerance(): number {\r\n let viewportHeight: number = visualViewport.height;\r\n let totalHeight: number = viewportHeight + this.offsetTollerance;\r\n return totalHeight;\r\n }\r\n\r\n dispose(): void {\r\n }\r\n\r\n}","import { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ColourPicker, IColourPickerState } from \"../colourPicker/colourPickerController\";\r\nimport { Product } from \"./product\";\r\nimport { IProductDropDown, IProductSelector, ProductDropDown } from \"./productDropDown\";\r\nimport { IProductGroupDropDown, IProductGroupSelector, ProductGroupDropDown } from \"./productGroupDropDown\";\r\nimport { getProductWithTypeName } from \"./productInitialiser\";\r\n\r\ntype IProductGroupDropDownOmit = Omit<IProductGroupDropDown, 'updateProductDropDown'>;\r\n\r\nexport interface IProductColourDropDown extends IProductGroupDropDownOmit {\r\n productSwatchTitle: string | undefined;\r\n productSwatchStyle: string | undefined;\r\n updateProductDropDown: (newDisplayText: string, newDisplayName: string, newValue: number | undefined, newAdditionPrice?: number, newSwatchStyle?: string, newSwatchTitle?: string) => void;\r\n}\r\n\r\n\r\nexport class ProductColourDropDown extends ProductGroupDropDown implements IProductColourDropDown {\r\n productSwatchTitle: string | undefined;\r\n productSwatchStyle: string | undefined;\r\n private readonly _updateAfterColourConfirmed;\r\n private readonly _correctColourPickerElement: HTMLElement;\r\n colourPicker: ColourPicker;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this._correctColourPickerElement = this.getCorrectColourPickerElement();\r\n\r\n this.initialiseColourProperties();\r\n this.colourPickerFactory(); \r\n //----- Event Listener Bindings Start -----//\r\n this._updateAfterColourConfirmed = this.updateAfterColourConfirmed.bind(this);\r\n\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachColourConfirmedEventListener();\r\n //----- Initialise Event Listeners End -----//\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachColourConfirmedEventListener() {\r\n console.log('Product: removeColourConfirmedEventListener');\r\n this._correctColourPickerElement.addEventListener(CustomEventEnums.ColourConfirmed, this._updateAfterColourConfirmed);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeColourConfirmedEventListener() {\r\n console.log('Product: removeColourConfirmedEventListener');\r\n this._correctColourPickerElement.removeEventListener(CustomEventEnums.ColourConfirmed, this._updateAfterColourConfirmed);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n updateAfterColourConfirmed(event: CustomEvent) {\r\n console.log('Product: updateAfterColourConfirmed - ColourConfirmed Event Fired');\r\n console.log('Product: updateAfterColourConfirmed - ColourConfirmed Type: ', event.detail);\r\n //let element = event.currentTarget as HTMLElement;\r\n let eventDetail = event.detail;\r\n let productType: string = eventDetail.type;\r\n if(productType === this.getProductContainerElement().getAttribute(AttributeEnums.Product.Product)) {\r\n let correctProduct: Product = getProductWithTypeName(productType);\r\n console.log(`Product: updateAfterColourConfirmed productType: ${productType} dataProductType: ${correctProduct.dataProductType}`);\r\n if (correctProduct != null) {\r\n let colourPickerGalleryElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ColourPicker.ColourPickerFor, correctProduct.dataProductType)) as HTMLElement;\r\n\r\n if (colourPickerGalleryElement) {\r\n this.updateDataAttributesForProductColourConfirm(colourPickerGalleryElement, correctProduct);\r\n //(<any>window).popOutController.openByIdAndFamily('1:1', correctProduct.dataProductType);\r\n\r\n this.closeOptionsPickerPopout();\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateDataAttributesForProductColourConfirm(colourPickerNewSelection: HTMLElement, correctProduct: Product): void {\r\n let colourPickerState: IColourPickerState = ColourPicker.mapSelectedColourHiddenInputToIColourPicker(colourPickerNewSelection);\r\n console.log(\"updateDataAttributesForProductColourConfirm\");\r\n let colourDropDown: ProductColourDropDown = correctProduct.productOptionsPanel.getColourDropdown();\r\n let selectedText = 'Selected Colour: ';\r\n colourDropDown.updateProductDropDown(selectedText, colourPickerState.selectedOptionName,\r\n colourPickerState.selectedExtraId, +colourPickerState.selectedPrice,\r\n \"background-image: url('\" + colourPickerState.selectedSwatchSrc + \"')\",\r\n colourPickerState.selectedOptionName\r\n );\r\n this.updateSwatchImage(colourPickerState.selectedSwatchSrc, colourPickerState.selectedOptionName);\r\n correctProduct.productPrice.updateProductPrice(correctProduct.productOptionsPanel.getTotalProductAdditionsPrice());\r\n\r\n this.htmlElement.dispatchEvent(correctProduct.productSelectorChangedEvent(correctProduct.dataProductType));\r\n }\r\n //------ Event Listener Methods End -----//\r\n\r\n updateSwatchImage(selectedSwatchSrc: string, selectedOptionName: string){\r\n let swatchImageElements : NodeListOf<HTMLElement> = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.SwatchImage.SwatchImage));\r\n \r\n for(let i =0; swatchImageElements[i]; i+=1){\r\n let swatchImageElement : HTMLElement = swatchImageElements[i];\r\n ProductColourDropDown.setSwatchImageInfo(swatchImageElement, selectedOptionName, selectedSwatchSrc);\r\n }\r\n }\r\n\r\n public static setSwatchImageInfo(swatchImageElement : HTMLElement, selectedOptionName: string, selectedSwatchSrc: string) {\r\n if(swatchImageElement !== null) {\r\n swatchImageElement.setAttribute('style', \"background-image: url('\" + selectedSwatchSrc.replace('extrasmallsquarecropped', 'smallsquarecropped') + \"')\");\r\n swatchImageElement.setAttribute('alt', selectedOptionName);\r\n swatchImageElement.setAttribute(AttributeEnums.SwatchImage.IsHidden, 'false');\r\n }\r\n }\r\n public static clearSwatchImageInfo(swatchImageElement : HTMLElement) {\r\n if(swatchImageElement !== null) {\r\n swatchImageElement.setAttribute('style', \"\");\r\n swatchImageElement.setAttribute('alt', '');\r\n swatchImageElement.setAttribute(AttributeEnums.SwatchImage.IsHidden, 'true');\r\n }\r\n }\r\n\r\n setProductSwatchTitle(): string {\r\n let swatchTitleElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplaySwatch)) as HTMLElement;\r\n return this.setPropertyFromDataAttributeValidUndefined(swatchTitleElement, 'title');\r\n\r\n }\r\n\r\n setProductSwatchStyle(): string {\r\n let swatchStyleElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplaySwatch)) as HTMLElement;\r\n return this.setPropertyFromDataAttributeValidUndefined(swatchStyleElement, 'style');\r\n\r\n }\r\n\r\n writeToProductSwatchTitle(newSwatchTitle: string): void {\r\n let swatchTitleElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplaySwatch)) as HTMLElement;\r\n this.writeToDataAttributeValue(swatchTitleElement, 'title', newSwatchTitle);\r\n }\r\n\r\n writeToProductSwatchStyle(newSwatchStyle: string): void {\r\n let swatchStyleElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplaySwatch)) as HTMLElement;\r\n this.writeToDataAttributeValue(swatchStyleElement, 'style', newSwatchStyle);\r\n }\r\n\r\n updateProductSwatchTitle(newSwatchTitle: string): void {\r\n this.writeToProductSwatchTitle(newSwatchTitle);\r\n this.productSwatchTitle = this.setProductSwatchTitle();\r\n }\r\n\r\n updateProductSwatchStyle(newSwatchStyle: string): void {\r\n this.writeToProductSwatchStyle(newSwatchStyle);\r\n this.productSwatchStyle = this.setProductSwatchStyle();\r\n }\r\n\r\n updateProductDropDown(newDisplayText: string, newDisplayName: string, newValue: number | undefined, newAdditionPrice: number = 0, newSwatchStyle: string = '', newSwatchTitle: string = ''): void {\r\n this.updateProductSwatchTitle(newSwatchTitle);\r\n this.updateProductSwatchStyle(newSwatchStyle);\r\n super.updateProductDropDown(newDisplayText, newDisplayName, newValue, newAdditionPrice);\r\n }\r\n\r\n refreshProperties(): void {\r\n this.productSwatchTitle = this.setProductSwatchTitle();\r\n this.productSwatchStyle = this.setProductSwatchStyle();\r\n super.refreshProperties();\r\n }\r\n initialiseColourProperties(): void {\r\n this.productSwatchTitle = this.setProductSwatchTitle();\r\n this.productSwatchStyle = this.setProductSwatchStyle(); \r\n }\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n colourPickerFactory():void{\r\n let colourPickerElement = this.getProductContainerElement().querySelector(`[${AttributeEnums.ColourPicker.ColourPicker}]`) as HTMLElement;\r\n this.colourPicker = new ColourPicker(colourPickerElement);\r\n }\r\n\r\n getCorrectColourPickerElement(): HTMLElement{\r\n return this.getProductContainerElement().querySelector(`[${AttributeEnums.ColourPicker.ColourPicker}][data-pop-out-id=\"${this.popOutIdOpen}\"][data-pop-out-family=\"${this.popOutFamilyOpen}\"]`);\r\n }\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n this.removeColourConfirmedEventListener();\r\n this.colourPicker.dispose();\r\n super.dispose();\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { DeliveryServices } from \"../../shared/delivery/deliveryServices\";\r\nimport { ProductDeliveryRequestDto } from \"../../shared/delivery/productDeliveryRequestDto\";\r\nimport { DeliveryOption, ProductDeliveryResponseDto } from \"../../shared/delivery/productDeliveryResponseDto\";\r\nimport { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { CookieUtils } from \"../../shared/utilities/cookieUtils\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ValidationUtilities } from \"../../shared/utilities/validationUtilities\";\r\nrequire('../../shared/utilities/extensionUtilities');\r\n\r\nexport interface IProductDeliveryPanel {\r\n}\r\n\r\nexport interface ProductDeliveryPanelState {\r\n productDeliveryRequestDto: ProductDeliveryRequestDto;\r\n productDeliveryResponseDto: ProductDeliveryResponseDto;\r\n}\r\nexport class ProductDeliveryPanel extends InstanceComponentBase implements IProductDeliveryPanel {\r\n\r\n private productDeliveryPanelState: ProductDeliveryPanelState;\r\n private productHtmlElement: Element;\r\n private readonly _setDeliveryPostcodeWithEvent;\r\n private readonly _setDeliveryPostcodeAndInitialiseDelivery;\r\n private readonly _initialiseDeliveryPanelFromCustomEvent;\r\n\r\n constructor(public htmlElement: Element) {\r\n console.log('ProductDeliveryPanel instantiate')\r\n super(htmlElement);\r\n this.setProductHtmlElement();\r\n this.productDeliveryPanelState = { productDeliveryRequestDto: {}, productDeliveryResponseDto: {} } as ProductDeliveryPanelState;\r\n this.initialiseDeliveryPanel();\r\n\r\n //----- Event Listener Bindings Start -----//\r\n this._setDeliveryPostcodeWithEvent = this.setDeliveryPostcodeWithEvent.bind(this);\r\n this._setDeliveryPostcodeAndInitialiseDelivery = this.setDeliveryPostcodeAndInitialiseDelivery.bind(this);\r\n this._initialiseDeliveryPanelFromCustomEvent = this.initialiseDeliveryPanelFromCustomEvent.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachPostcodeOnKeyUpEvent();\r\n this.attachPostcodeChangeOnClickEvent();\r\n this.attachProductPriceUpdatedEvent();\r\n //----- Initialise Event Listeners End -----//\r\n }\r\n\r\n setProductHtmlElement() {\r\n this.productHtmlElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product));\r\n }\r\n\r\n async initialiseDeliveryPanel() {\r\n this.initialiseProductDeliveryRequestDto();\r\n let requestDto = this.productDeliveryPanelState.productDeliveryRequestDto;\r\n if (requestDto.sizeId === undefined) {\r\n console.log('ProductDeliveryPanel: initialiseDeliveryPanel undefined size');\r\n this.htmlElement.innerHTML = this.productDeliveryTemplateForNoSizeSelected();\r\n } else {\r\n if ((requestDto.postcode !== '') && (requestDto.postcode !== null) && (requestDto.postcode !== undefined) && this.validatePostcode(requestDto.postcode)) {\r\n console.log('ProductDeliveryPanel: initialiseDeliveryPanel populated postcode');\r\n await this.productDeliveryTemplateForSizeSelectedAndPostcodeAdded();\r\n } else {\r\n console.log('ProductDeliveryPanel: initialiseDeliveryPanel empty postcode');\r\n //this.htmlElement.innerHTML = this.productDeliveryTemplateForSizeSelectedNoPostcode()\r\n await this.productDeliveryTemplateForSizeSelectedNoPostcode();\r\n }\r\n }\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n async attachPostcodeOnKeyUpEvent() {\r\n this.htmlElement.addEventListener('keyup', this._setDeliveryPostcodeWithEvent);\r\n }\r\n\r\n async attachPostcodeChangeOnClickEvent() {\r\n this.htmlElement.addEventListener('click', this._setDeliveryPostcodeAndInitialiseDelivery);\r\n }\r\n\r\n async attachProductPriceUpdatedEvent() {\r\n this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).addEventListener(CustomEventEnums.ProductPriceUpdated, this._initialiseDeliveryPanelFromCustomEvent);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removePostcodeOnKeyUpEvent() {\r\n this.htmlElement.removeEventListener('keyup', this._setDeliveryPostcodeWithEvent);\r\n }\r\n\r\n removePostcodeChangeOnClickEvent() {\r\n this.htmlElement.removeEventListener('click', this._setDeliveryPostcodeAndInitialiseDelivery);\r\n }\r\n\r\n removeProductPriceUpdatedEvent() {\r\n let productElement: HTMLElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product));\r\n productElement.removeEventListener(CustomEventEnums.ProductPriceUpdated, this._initialiseDeliveryPanelFromCustomEvent);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n setDeliveryPostcodeWithEvent(event: Event): void {\r\n console.log('ProductDeliveryPanel: setDeliveryPostcodeWithEvent - Beginning');\r\n\r\n const element = event.target as HTMLInputElement;\r\n\r\n if (element.hasAttribute(AttributeEnums.ProductDelivery.ProductDeliveryPostcode)) {\r\n let value: string = element.value.toUpperCase().trim();\r\n let postcodeFormDiv = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductDelivery.ProductDeliveryPostcode)).closest('div');\r\n postcodeFormDiv.classList.add(StringEnums.CssClass.LbWarning);\r\n this.setDeliveryPostcodeCookie(value);\r\n console.log('Delivery Postcode Value:', value);\r\n if (this.validatePostcode(value)) {\r\n postcodeFormDiv.classList.remove(StringEnums.CssClass.LbWarning);\r\n postcodeFormDiv.classList.add(StringEnums.CssClass.LbSuccess);\r\n this.productDeliveryPanelState.productDeliveryRequestDto.postcode = value;\r\n this.productDeliveryTemplateForSizeSelectedAndPostcodeAdded();\r\n }\r\n }\r\n }\r\n\r\n setDeliveryPostcodeAndInitialiseDelivery(event: Event): void {\r\n console.log('ProductDeliveryPanel: setDeliveryPostcodeAndInitialiseDelivery - Beginning');\r\n\r\n const element = event.target as HTMLInputElement;\r\n\r\n if (element.hasAttribute(AttributeEnums.ProductDelivery.ProductDeliveryPostcodeChange)) {\r\n\r\n this.productDeliveryPanelState.productDeliveryRequestDto.postcode = '';\r\n this.setDeliveryPostcodeCookie('');\r\n this.initialiseDeliveryPanel();\r\n }\r\n }\r\n\r\n initialiseDeliveryPanelFromCustomEvent(event: CustomEvent): void {\r\n console.log('ProductDeliveryPanel: initialiseDeliveryPanelFromCustomEvent - Beginning');\r\n //console.log('ProductDeliveryPanel: addProductPriceUpdatedEvent product-price-updated event fired')\r\n let eventDetail = event.detail;\r\n let type = eventDetail.type as string;\r\n if (type === this.productHtmlElement.getAttribute(AttributeEnums.Product.Product)) {\r\n this.initialiseDeliveryPanel();\r\n }\r\n }\r\n\r\n setDeliveryPostcodeCookie(postcode: string) {\r\n CookieUtils.setCookie('delivery-postcode', postcode, 14);\r\n }\r\n //------ Event Listener Methods End -----//\r\n\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n\r\n\r\n getProductHtmlElement(): Element {\r\n return this.productHtmlElement;\r\n }\r\n\r\n\r\n getRequestTotal() {\r\n\r\n let priceElement = this.productHtmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductPrice.ProductNowPrice));\r\n if (priceElement !== null) {\r\n return parseInt(priceElement.getAttribute(AttributeEnums.ProductPrice.ProductNowPrice));\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n getRequestLineId() {\r\n console.log('ProductDeliveryPanel: getRequestLineId');\r\n\r\n let lineId = parseInt(this.htmlElement.getAttribute(AttributeEnums.ProductDelivery.ProductDeliveryPanelLineId));\r\n if (!isNaN(lineId)) {\r\n return lineId;\r\n } else {\r\n console.log('Product LineId Error. LineId not set for product!');\r\n throw ('Product LineId Error. LineId not set for product!');\r\n }\r\n }\r\n\r\n setRequestTotal() {\r\n\r\n this.productDeliveryPanelState.productDeliveryRequestDto.total = this.getRequestTotal();\r\n }\r\n\r\n initialiseProductDeliveryRequestDto() {\r\n\r\n let requestDto = { lineId: 0, sizeId: undefined, total: 0, postcode: '' } as ProductDeliveryRequestDto;\r\n //this.setDeliveryPostcodeCookie('LS18 4SF');\r\n let postcode = CookieUtils.getCookie('delivery-postcode');\r\n if (postcode !== null) {\r\n requestDto.postcode = postcode;\r\n }\r\n requestDto.lineId = this.getRequestLineId();\r\n let sizeId = parseInt(this.productHtmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductSizeId)).getAttribute(AttributeEnums.Product.ProductSizeId));\r\n if (isNaN(sizeId)) {\r\n requestDto.sizeId = undefined;\r\n } else {\r\n requestDto.sizeId = sizeId;\r\n }\r\n requestDto.total = this.getRequestTotal();\r\n\r\n this.productDeliveryPanelState = { ...this.productDeliveryPanelState, productDeliveryRequestDto: requestDto } as ProductDeliveryPanelState;\r\n }\r\n\r\n productDeliveryTemplateForNoSizeSelected() {\r\n return '<p class=\"lb_heading lb_icon lb_icon-small lb_icon-button lb_icon-delivery\">Please <span class=\"lb_text-strong\">select size</span> for delivery options</p>';\r\n }\r\n\r\n async productDeliveryTemplateForSizeSelectedNoPostcode(): Promise<void> {\r\n let DefaultPostCode = StringEnums.Delivery.DefaultPostCode;\r\n this.productDeliveryPanelState.productDeliveryRequestDto.postcode = DefaultPostCode;\r\n if (this.validatePostcode(DefaultPostCode)) {\r\n await this.productDeliveryTemplateForSizeSelectedAndDefaultPostcode();\r\n }\r\n this.productDeliveryPanelState.productDeliveryRequestDto.postcode = '';\r\n }\r\n\r\n async productDeliveryTemplateForSizeSelectedAndDefaultPostcode() {\r\n this.setRequestTotal();\r\n try {\r\n let response = await DeliveryServices.getDeliveryInfoForAProduct(this.productDeliveryPanelState.productDeliveryRequestDto);\r\n this.productDeliveryPanelState.productDeliveryResponseDto = response;\r\n let responseDto = this.productDeliveryPanelState.productDeliveryResponseDto;\r\n console.log('ProductDeliveryPanel: productDeliveryTemplateForSizeSelectedAndDefaultPostcode: got productDeliveryResponseDto', responseDto);\r\n\r\n (this.htmlElement as HTMLElement).removeChildren();\r\n this.defaultDeliveryOptionSectionElements(responseDto.deliveryOptions, this.htmlElement);\r\n } catch (error) {\r\n console.log('ProductDeliveryPanel: productDeliveryTemplateForSizeSelectedAndDefaultPostcode: ERROR', this.productDeliveryPanelState.productDeliveryRequestDto);\r\n this.htmlElement.innerHTML = this.productDeliveryTemplateError();\r\n }\r\n }\r\n\r\n async productDeliveryTemplateForSizeSelectedAndPostcodeAdded() {\r\n this.setRequestTotal();\r\n try {\r\n let response = await DeliveryServices.getDeliveryInfoForAProduct(this.productDeliveryPanelState.productDeliveryRequestDto);\r\n this.productDeliveryPanelState.productDeliveryResponseDto = response;\r\n let responseDto = this.productDeliveryPanelState.productDeliveryResponseDto;\r\n console.log('ProductDeliveryPanel: productDeliveryTemplateForSizeSelectedAndPostcodeAdded: got productDeliveryResponseDto', responseDto);\r\n\r\n (this.htmlElement as HTMLElement).removeChildren();\r\n this.deliveryOptionSectionElements(responseDto.deliveryOptions, responseDto.dispatchedFrom, this.htmlElement);\r\n } catch (error) {\r\n console.log('ProductDeliveryPanel: productDeliveryTemplateForSizeSelectedAndPostcodeAdded: ERROR', this.productDeliveryPanelState.productDeliveryRequestDto);\r\n this.productDeliveryTemplateErrorReset();\r\n }\r\n }\r\n\r\n productDeliveryTemplateError() {\r\n // icon should change to error\r\n return '<p class=\"lb_heading lb_icon lb_icon-small lb_icon-button lb_icon-info\">Sorry. Delivery information is currently unavailable for this product.</p>';\r\n }\r\n \r\n productDeliveryTemplateErrorReset():void {\r\n this.productDeliveryPanelState.productDeliveryRequestDto.postcode = '';\r\n this.setDeliveryPostcodeCookie('');\r\n this.initialiseDeliveryPanel();\r\n }\r\n\r\n defaultDeliveryOptionSectionElements(deliveryOptions: DeliveryOption[], deliveryOptionsElement: Element) {\r\n this.defaultDeliveryIconHeading(deliveryOptionsElement);\r\n this.defaultDeliveryInput(deliveryOptionsElement);\r\n this.deliveryOptionsHeadingElements(deliveryOptionsElement);\r\n this.deliveryOptionArrayMapToElements(deliveryOptions, deliveryOptionsElement);\r\n }\r\n defaultDeliveryIconHeading(deliveryOptionsElement: Element): void {\r\n const deliveryIconHeading = document.createElement('p');\r\n deliveryIconHeading.innerText = 'Check delivery options in your area';\r\n deliveryIconHeading.classList.add(StringEnums.CssClass.LbHeading, StringEnums.CssClass.LbIcon, StringEnums.CssClass.LbIconSmall, StringEnums.CssClass.LbIconButton, StringEnums.CssClass.LbIconDelivery);\r\n deliveryOptionsElement.append(deliveryIconHeading);\r\n }\r\n defaultDeliveryInput(deliveryOptionsElement: Element): void {\r\n const defaultDeliveryOuter = document.createElement('div');\r\n\r\n let defaultDeliveryInput = document.createElement('input');\r\n defaultDeliveryInput.classList.add(StringEnums.CssClass.LbFormElementInput);\r\n defaultDeliveryInput.setAttribute('type', 'text');\r\n defaultDeliveryInput.setAttribute('placeholder', StringEnums.Delivery.InputPlaceholderPostCode);\r\n defaultDeliveryInput.setAttribute(AttributeEnums.ProductDelivery.ProductDeliveryPostcode, '');\r\n\r\n defaultDeliveryOuter.append(defaultDeliveryInput);\r\n defaultDeliveryOuter.classList.add(StringEnums.CssClass.LbFormElement, StringEnums.CssClass.LbFormElementTextBox);\r\n\r\n deliveryOptionsElement.append(defaultDeliveryOuter);\r\n }\r\n\r\n deliveryOptionSectionElements(deliveryOptions: DeliveryOption[], dispatchedFrom: string, deliveryOptionsElement: Element) {\r\n let deliveryOptionIsSelectable = this.checkIfDeliveryOptionIsSelectable(deliveryOptions);\r\n \r\n this.deliveryIconHeading(deliveryOptionsElement);\r\n this.deliveryCurrentPostcodeAndReset(deliveryOptionsElement);\r\n this.deliveryOptionsHeadingElements(deliveryOptionsElement);\r\n\r\n if(deliveryOptionIsSelectable){\r\n this.deliveryOptionArrayMapToElements(deliveryOptions, deliveryOptionsElement);\r\n }else{\r\n this.deliveryOptionNotAvailable(deliveryOptions, deliveryOptionsElement);\r\n }\r\n }\r\n\r\n deliveryIconHeading(deliveryOptionsElement: Element) {\r\n const deliveryIconHeading = document.createElement('p');\r\n deliveryIconHeading.innerText = 'Delivery';\r\n deliveryIconHeading.classList.add(StringEnums.CssClass.LbHeading, StringEnums.CssClass.LbIcon, StringEnums.CssClass.LbIconSmall, StringEnums.CssClass.LbIconButton, StringEnums.CssClass.LbIconDelivery);\r\n deliveryOptionsElement.append(deliveryIconHeading);\r\n }\r\n\r\n deliveryCurrentPostcodeAndReset(deliveryOptionsElement: Element) {\r\n const currentPostcode = document.createElement('p');\r\n currentPostcode.innerText = 'Postcode: ' + this.productDeliveryPanelState.productDeliveryRequestDto.postcode + ' ';\r\n let changePostcodeAnchor = document.createElement('a');\r\n changePostcodeAnchor.innerText = 'Change Postcode';\r\n changePostcodeAnchor.classList.add(StringEnums.CssClass.LbLink);\r\n changePostcodeAnchor.setAttribute(AttributeEnums.ProductDelivery.ProductDeliveryPostcodeChange, '');\r\n currentPostcode.append(changePostcodeAnchor);\r\n currentPostcode.classList.add(StringEnums.CssClass.LbText);\r\n deliveryOptionsElement.append(currentPostcode);\r\n }\r\n\r\n deliveryOptionsHeadingElements(deliveryOptionsElement: Element) {\r\n const deliveryOptionHeaderElement = document.createElement('h2');\r\n deliveryOptionHeaderElement.innerHTML = 'Delivery Options <span data-pop-out-id-open=\"1\" data-pop-out-family-open=\"delivery\" class=\"lb_icon lb_icon-vSmall lb_icon-surface lb_icon-button lb_icon-info lb_link\"></span>';\r\n deliveryOptionHeaderElement.classList.add(StringEnums.CssClass.LbHeading, StringEnums.CssClass.LbHeadingDelivery);\r\n deliveryOptionsElement.append(deliveryOptionHeaderElement);\r\n }\r\n\r\n deliveryOptionArrayMapToElements(deliveryOptions: DeliveryOption[], deliveryOptionsElement: Element) {\r\n const deliveryOptionGridElement = document.createElement('div');\r\n deliveryOptionGridElement.classList.add(StringEnums.CssClass.LbOptionsGrid);\r\n deliveryOptionsElement.append(deliveryOptionGridElement);\r\n for (let x in deliveryOptions) {\r\n this.deliveryOptionMapToElements(deliveryOptions[x], deliveryOptionGridElement);\r\n }\r\n }\r\n\r\n deliveryOptionMapToElements(deliveryOption: DeliveryOption, deliveryOptionGrid: Element) {\r\n let from = (deliveryOption.isPickable) ? ' from ' : '';\r\n let subNote = (deliveryOption.subNote.length) ? '<br/><em>(' + deliveryOption.subNote + ')</em>' : '';\r\n\r\n const deliveryOptionsGridOptionElement = document.createElement('div');\r\n deliveryOptionsGridOptionElement.classList.add(StringEnums.CssClass.LbOptionsGridOption);\r\n deliveryOptionsGridOptionElement.innerHTML = deliveryOption.name + ' <span class=\"lb_text-strong\">' + from + deliveryOption.leadTimeText + '</span>' + subNote;\r\n\r\n const deliveryOptionGridPriceElement = document.createElement('div');\r\n deliveryOptionGridPriceElement.classList.add(StringEnums.CssClass.LbOptionsGridPrice);\r\n deliveryOptionGridPriceElement.innerText = deliveryOption.charge.currency(0, true); //needs to display 'FREE' for 0 cost\r\n\r\n deliveryOptionGrid.appendChild(deliveryOptionsGridOptionElement);\r\n deliveryOptionGrid.appendChild(deliveryOptionGridPriceElement);\r\n }\r\n\r\n deliveryOptionDispatch(dispatchedFrom: string, deliveryOptionsElement: Element) {\r\n const deliveryOptionDispatch = document.createElement('div');\r\n deliveryOptionDispatch.innerText = 'Dispatched direct from ' + dispatchedFrom + '. You will be contacted to arrange delivery.';\r\n deliveryOptionDispatch.classList.add(StringEnums.CssClass.LbText, StringEnums.CssClass.LbTextSmall);\r\n deliveryOptionsElement.append(deliveryOptionDispatch);\r\n }\r\n\r\n deliveryOptionNotAvailable(deliveryOptions: DeliveryOption[], deliveryOptionsElement: Element){\r\n const deliveryOptionGridElement = document.createElement('p');\r\n deliveryOptionGridElement.classList.add(StringEnums.CssClass.LbText);\r\n deliveryOptionGridElement.innerHTML = this.getDeliveryOptionIsSelectableFalseDescription(deliveryOptions);\r\n deliveryOptionsElement.append(deliveryOptionGridElement);\r\n }\r\n\r\n checkIfDeliveryOptionIsSelectable(deliveryOptions: DeliveryOption[]):boolean{\r\n for (let x in deliveryOptions) {\r\n if(deliveryOptions[x].isSelectable === false){\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n getDeliveryOptionIsSelectableFalseDescription(deliveryOptions: DeliveryOption[]):string{\r\n for (let x in deliveryOptions) {\r\n if(deliveryOptions[x].isSelectable === false){\r\n return deliveryOptions[x].description;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n validatePostcode(postcode: string): boolean {\r\n return ValidationUtilities.isPostcode(postcode);\r\n }\r\n \r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n console.log('ProductDeliveryPanel: dispose');\r\n this.removePostcodeOnKeyUpEvent();\r\n this.removePostcodeChangeOnClickEvent();\r\n this.removeProductPriceUpdatedEvent();\r\n this.delete();\r\n }\r\n\r\n delete(): void {\r\n console.log('ProductDeliveryPanel: productDeliveryPanelDelete');\r\n\r\n if ((<any>window)[this.htmlElement.getAttribute(AttributeEnums.ProductDelivery.ProductDeliveryPanel) + 'ProductDeliveryPanel']) {\r\n console.log('ProductDeliveryPanel: delete - has a ProductDeliveryPanel');\r\n delete (<any>window)[this.htmlElement.getAttribute(AttributeEnums.ProductDelivery.ProductDeliveryPanel) + 'ProductDeliveryPanel'];\r\n console.log('ProductDeliveryPanel: delete - reference deleted');\r\n }\r\n else {\r\n console.log('ProductDeliveryPanel: delete - ProductDeliveryPanel Reference Not Found');\r\n }\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { HistoryController } from \"../../shared/historyController\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { PopOutController } from \"../../shared/popOutController\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { ValidationState } from \"../../shared/utilities/enums/validationStateEnum\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { TypeUtils } from \"../../shared/utilities/typeUtils\";\r\n\r\nexport interface IProductDropDown extends IProductSelector, IInstanceComponentBase {\r\n htmlElement: HTMLElement;\r\n popOutIdOpen: string;\r\n popOutFamilyOpen: string;\r\n productDisplayText: string;\r\n productDisplayName: string;\r\n refreshProperties: () => void;\r\n updateProductDisplayText: (newDisplayText: string) => void;\r\n updateProductDisplayName: (newDisplayName: string) => void;\r\n updateValue: (newValue: number | undefined) => void;\r\n updateProductDropDown: (newDisplayText: string, newDisplayName: string, newValue: number | undefined) => void;\r\n dispose: () => void;\r\n}\r\n\r\nexport interface IProductSelector {\r\n productSelectorElement: HTMLElement;\r\n productLineId: number;\r\n value?: number;\r\n}\r\n\r\nexport abstract class ProductDropDown extends InstanceComponentBase implements IProductDropDown {\r\n popOutIdOpen: string;\r\n popOutFamilyOpen: string;\r\n productDisplayText: string;\r\n productDisplayName: string;\r\n productSelectorElement: HTMLElement;\r\n productLineId: number;\r\n value?: number;\r\n \r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n \r\n\r\n this.htmlElement = htmlElement;\r\n this.refreshProperties();\r\n\r\n \r\n }\r\n\r\n \r\n \r\n\r\n setPropertyFromDataAttribute(element: HTMLElement, attributeName: string): string {\r\n if (element.hasAttribute(attributeName)) {\r\n return element.getAttribute(attributeName);\r\n }\r\n else {\r\n console.log(`Critical Error: ProductDropDown setPropertyFromDataAttribute Attribute: ${attributeName}`, element);\r\n throw `Critical Error: ProductDropDown setPropertyFromDataAttribute Attribute: ${attributeName}`;\r\n }\r\n }\r\n setPropertyFromDataAttributeValidUndefined(element: HTMLElement, attributeName: string): string | undefined {\r\n if (element.hasAttribute(attributeName)) {\r\n return element.getAttribute(attributeName);\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n setInnerTextFromDataAttribute(element: HTMLElement, attributeName: string): string {\r\n if (element.hasAttribute(attributeName)) {\r\n return element.innerText;\r\n }\r\n else {\r\n console.log(`Critical Error: ProductDropDown setInnerTextFromDataAttribute Attribute: ${attributeName}`, element);\r\n throw `Critical Error: ProductDropDown setInnerTextFromDataAttribute Attribute: ${attributeName}`;\r\n }\r\n }\r\n\r\n setPopOutIdOpen(): string {\r\n return this.setPropertyFromDataAttribute(this.htmlElement, AttributeEnums.PopOut.PopOutIdOpen);\r\n }\r\n\r\n setPopOutFamilyOpen(): string {\r\n return this.setPropertyFromDataAttribute(this.htmlElement, AttributeEnums.PopOut.PopOutFamilyOpen);\r\n }\r\n\r\n setProductDisplayText(): string {\r\n let displayTextElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplayText)) as HTMLElement;\r\n return this.setInnerTextFromDataAttribute(displayTextElement, AttributeEnums.DropDowns.ProductDisplayText);\r\n }\r\n\r\n setProductDisplayName(): string {\r\n let displayNameElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplayName)) as HTMLElement;\r\n return this.setInnerTextFromDataAttribute(displayNameElement, AttributeEnums.DropDowns.ProductDisplayName);\r\n }\r\n\r\n setProductLineId(): number {\r\n let lineIdElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductLineId)) as HTMLElement;\r\n try {\r\n return parseInt(this.setPropertyFromDataAttribute(lineIdElement, AttributeEnums.Product.ProductLineId));\r\n } catch (error) {\r\n console.log('Critical Error: setProductLineId Type Missmatch Error', lineIdElement);\r\n throw 'Critical Error: setProductLineId Type Missmatch Error';\r\n }\r\n }\r\n\r\n setProductSelectorElement(): HTMLElement {\r\n let productSelectorElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector));\r\n if (productSelectorElement.hasAttribute(AttributeEnums.ProductSelector.ProductSelector)) {\r\n return productSelectorElement as HTMLElement;\r\n }\r\n else {\r\n console.log('Critical Error: ProductDropDown Attribute data-product-selector', this.htmlElement);\r\n throw 'Critical Error: ProductDropDown Attribute data-product-selector';\r\n }\r\n }\r\n updateValidationState(validationState: ValidationState) {\r\n if (ValidationState.Warning) {\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbSuccess);\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbWarning);\r\n } else if (ValidationState.Success) {\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbWarning);\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbSuccess);\r\n } else if (ValidationState.None) {\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbWarning);\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbSuccess);\r\n }\r\n }\r\n updateValidationStateUsingValue(): void {\r\n let addToCartAttempted: boolean = (this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductAddToCartAttempted)).getAttribute(AttributeEnums.Product.ProductAddToCartAttempted) === 'true');\r\n if (this.value === undefined) {\r\n if (addToCartAttempted) {\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbSuccess);\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbWarning);\r\n }\r\n } else {\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbWarning);\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbSuccess);\r\n }\r\n }\r\n\r\n setValue(): number | undefined {\r\n\r\n let productSelectorElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector)) as HTMLElement;\r\n\r\n let valueAsString: string | undefined = this.setPropertyFromDataAttributeValidUndefined(productSelectorElement, 'value');\r\n\r\n if (valueAsString === undefined || valueAsString === '') {\r\n return undefined;\r\n }\r\n else {\r\n return +valueAsString;\r\n }\r\n }\r\n\r\n writeToDataAttributeValue(element: HTMLElement, attributeName: string, value: string): void {\r\n element.setAttribute(attributeName, value);\r\n }\r\n\r\n writeToInnerText(element: HTMLElement, attributeName: string, value: string): void {\r\n if (element.hasAttribute(attributeName)) {\r\n element.innerText = value;\r\n }\r\n else {\r\n console.log(`Critical Error: ProductDropDown writeToInnerText Attribute: ${attributeName} Value: ${value}`, element);\r\n throw `Critical Error: ProductDropDown writeToInnerText Attribute: ${attributeName} Value: ${value}`;\r\n }\r\n }\r\n\r\n writeToProductDisplayText(newDisplayText: string): void {\r\n let displayTextElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplayText)) as HTMLElement;\r\n this.writeToInnerText(displayTextElement, AttributeEnums.DropDowns.ProductDisplayText, newDisplayText);\r\n }\r\n\r\n writeToProductDisplayName(newDisplayName: string): void {\r\n let displayTextElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDisplayName)) as HTMLElement;\r\n this.writeToInnerText(displayTextElement, AttributeEnums.DropDowns.ProductDisplayName, newDisplayName);\r\n }\r\n\r\n writeToValue(newValue: number): void {\r\n let displayTextElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector)) as HTMLElement;\r\n this.writeToDataAttributeValue(displayTextElement, 'value', newValue.toString());\r\n }\r\n\r\n updateProductDropDown(newDisplayText: string, newDisplayName: string, newValue: number | undefined): void {\r\n this.updateProductDisplayText(newDisplayText);\r\n this.updateProductDisplayName(newDisplayName);\r\n this.updateValue(newValue);\r\n }\r\n\r\n updateProductDisplayText(newDisplayText: string): void {\r\n this.writeToProductDisplayText(newDisplayText);\r\n this.productDisplayText = this.setProductDisplayText();\r\n }\r\n\r\n updateProductDisplayName(newDisplayName: string): void {\r\n this.writeToProductDisplayName(newDisplayName);\r\n this.productDisplayName = this.setProductDisplayName();\r\n }\r\n\r\n updateValue(newValue: number | undefined): void {\r\n this.writeToValue(newValue);\r\n this.value = this.setValue();\r\n }\r\n\r\n refreshProperties(): void {\r\n this.popOutIdOpen = this.setPopOutIdOpen();\r\n this.popOutFamilyOpen = this.setPopOutFamilyOpen();\r\n this.productDisplayText = this.setProductDisplayText();\r\n this.productDisplayName = this.setProductDisplayName();\r\n this.productSelectorElement = this.setProductSelectorElement();\r\n this.productLineId = this.setProductLineId();\r\n this.value = this.setValue();\r\n }\r\n\r\n closeOptionsPickerPopout() {\r\n if (PopOutController.hasIdLowerLevel(this.popOutIdOpen)){\r\n HistoryController.historyBackOneIfPopOut();\r\n ((<any>window).popOutController as PopOutController).openByIdAndFamilyNoHistoryPush(PopOutController.getIdLowerLevel(this.popOutIdOpen), this.popOutFamilyOpen);\r\n } \r\n else {\r\n ((<any>window).popOutController as PopOutController).closeAllMenus();\r\n }\r\n }\r\n\r\n getProductContainerElement() {\r\n return this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product));\r\n }\r\n getProductOptionsPanelContainerElement() {\r\n return this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductOptionsPanel));\r\n }\r\n\r\n getSelectedProductUrl() {\r\n return this.getProductContainerElement().querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.SelectedProductUrl)).getAttribute(AttributeEnums.DropDowns.SelectedProductUrl);\r\n }\r\n\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n \r\n this.delete();\r\n }\r\n delete(): void {\r\n console.log('ProductDropDown: delete');\r\n }\r\n //------ Clean Up Processes End -----//\r\n\r\n}","import { AjaxGetAndReplaceHtml, AjaxGetAndReplaceHtmlAndOuterElement } from \"../../shared/ajaxGetAndReplaceHtml\";\r\nimport { initialise } from \"../../shared/initialiser\";\r\nimport { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { LoadingTemplates } from \"../loading/loadingTemplates\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\n\r\nexport interface IProductFinancePanel {\r\n dispose: () => Promise<void>;\r\n}\r\n\r\nexport class ProductFinancePanel extends InstanceComponentBase implements IProductFinancePanel {\r\n private readonly _recalculateFinancePanelFromCustomEvent;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this._recalculateFinancePanelFromCustomEvent = this.recalculateFinancePanelFromCustomEvent.bind(this);\r\n\r\n this.attachProductPriceUpdatedEventListener();\r\n }\r\n\r\n\r\n async attachProductPriceUpdatedEventListener() {\r\n this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).addEventListener(CustomEventEnums.ProductPriceUpdated, this._recalculateFinancePanelFromCustomEvent);\r\n }\r\n\r\n removeProductPriceUpdatedEventListener() {\r\n this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).removeEventListener(CustomEventEnums.ProductPriceUpdated, this._recalculateFinancePanelFromCustomEvent);\r\n }\r\n\r\n async recalculateProductFinancePanel(price: number) {\r\n try {\r\n console.log('ProductFinancePanel: recalculateProductFinancePanel Started');\r\n console.log('ProductFinancePanel: recalculateProductFinancePanel - dataProductFinancePanelElement ', this.htmlElement);\r\n if (this.htmlElement !== null) {\r\n this.htmlElement.innerHTML = LoadingTemplates.productLoadingTemplate;\r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductFinancePanel}${price}`;\r\n console.log('ProductFinancePanel: recalculateProductFinancePanel URL: ' + url);\r\n await AjaxGetAndReplaceHtml(this.htmlElement, url);\r\n console.log('ProductFinancePanel: recalculateProductFinancePanel AjaxGetAndReplaceHtml Finished');\r\n\r\n initialise();\r\n }\r\n } catch (error) {\r\n console.log('ProductFinancePanel: recalculateProductFinancePanel', error);\r\n }\r\n }\r\n\r\n recalculateFinancePanelFromCustomEvent(event: CustomEvent): void {\r\n console.log('ProductFinancePanel: recalculateFinancePanelFromCustomEvent - Beginning');\r\n let eventDetail = event.detail;\r\n let type: string = eventDetail.type as string;\r\n let totalPrice: number = +eventDetail.totalPrice;\r\n if (type === this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).getAttribute(AttributeEnums.Product.Product)) {\r\n console.log('ProductFinancePanel: recalculateFinancePanelFromCustomEvent - totalPrice' + totalPrice);\r\n this.recalculateProductFinancePanel(totalPrice);\r\n }\r\n }\r\n\r\n async dispose(): Promise<void> {\r\n this.removeProductPriceUpdatedEventListener();\r\n }\r\n\r\n delete(): void {\r\n }\r\n}","import { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { GroupPicker, IGroupPickerState } from \"../groupPicker/groupPicker\";\r\nimport { Product } from \"./product\";\r\nimport { IProductDropDown, IProductSelector, ProductDropDown } from \"./productDropDown\";\r\nimport { getProductWithTypeName } from \"./productInitialiser\";\r\n\r\ntype IProductDropDownOmit = Omit<IProductDropDown, 'updateProductDropDown'>;\r\n\r\nexport interface IProductGroupDropDown extends IProductDropDownOmit, IProductGroupSelector {\r\n updateProductDropDown: (newDisplayText: string, newDisplayName: string, newValue: number | undefined, newAdditionPrice?: number) => void;\r\n updateProductAdditionPrice: (newAdditionPrice: number) => void;\r\n updateProductGroupPanelSelected: () => void;\r\n}\r\n\r\nexport interface IProductGroupSelector extends IProductSelector {\r\n productGroupId: number;\r\n productAdditionPrice: number;\r\n}\r\n\r\nexport class ProductGroupDropDown extends ProductDropDown implements IProductGroupDropDown {\r\n\r\n productGroupId: number;\r\n productAdditionPrice: number;\r\n private readonly _groupSelectorClick;\r\n private readonly _correctGroupPickerElement: HTMLElement;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this._correctGroupPickerElement = this.getCorrectGroupPickerElement()\r\n\r\n this.initialiseGroupProperties();\r\n\r\n //----- Event Listener Bindings Start -----//\r\n this._groupSelectorClick = this.groupSelectorClick.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachGroupSelectorClickEvent();\r\n //----- Initialise Event Listeners End -----//\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachGroupSelectorClickEvent() {\r\n\r\n if (this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector)).getAttribute(AttributeEnums.ProductSelector.ProductSelector) === 'group') {\r\n this._correctGroupPickerElement.addEventListener('click', this._groupSelectorClick);\r\n\r\n }\r\n\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeGroupSelectorClickEvent() {\r\n if (this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector)).getAttribute(AttributeEnums.ProductSelector.ProductSelector) === 'group') {\r\n this._correctGroupPickerElement.removeEventListener('click', this._groupSelectorClick);\r\n }\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n\r\n getSelectedGroupOptionSelector(clickElement: HTMLElement): HTMLElement {\r\n try {\r\n let mainOptionElement: HTMLElement;\r\n if (clickElement.hasAttribute(AttributeEnums.ProductSelector.ProductSelectorType)) {\r\n mainOptionElement = clickElement;\r\n } else {\r\n //go up the dom to find the data attributes on the parent\r\n mainOptionElement = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorType));\r\n }\r\n console.log('ProductGroupDropDown: getSelectedGroupOptionSelector', mainOptionElement);\r\n return mainOptionElement;\r\n } catch {\r\n console.log('ProductGroupDropDown: getSelectedGroupOptionSelector catch not ProductSelectorType null exception');\r\n return null;\r\n }\r\n }\r\n groupSelectorClick(event: Event): void {\r\n try {\r\n console.log('ProductGroupDropDown: groupSelectorClick', event.target);\r\n\r\n let groupSelectorElement: HTMLElement = this.getSelectedGroupOptionSelector(event.target as HTMLElement);\r\n if (groupSelectorElement !== null) {\r\n let productType: string = this.getProductContainerElement().getAttribute(AttributeEnums.Product.Product);\r\n let product: Product = getProductWithTypeName(productType);\r\n\r\n let groupPickerState: IGroupPickerState = GroupPicker.mapSelectedGroupHiddenInputToIGroupPicker(groupSelectorElement);\r\n if (groupPickerState !== null) {\r\n this.updateProductDropDown(Product.selectedTextFormatter(groupPickerState.groupName), groupPickerState.selectedOptionName, groupPickerState.selectedExtraId, +(groupPickerState.selectedPrice ?? 0));\r\n\r\n GroupPicker.updateSelectedElementOnClick(groupSelectorElement);\r\n product.productPrice.updateProductPrice(product.productOptionsPanel.getTotalProductAdditionsPrice());\r\n this.htmlElement.dispatchEvent(product.productSelectorChangedEvent(productType));\r\n } else{\r\n console.log('ProductGroupDropDown: groupSelectorClick - groupPickerState Null');\r\n }\r\n } else{\r\n console.log('ProductGroupDropDown: groupSelectorClick - groupSelectorElement Null');\r\n\r\n }\r\n } catch (error) {\r\n console.log('ProductGroupDropDown: groupSelectorClick ERROR', error);\r\n\r\n }\r\n }\r\n //------ Event Listener Methods End -----//\r\n\r\n setProductGroupId(): number {\r\n let groupIdElement: HTMLElement;\r\n try {\r\n groupIdElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductGroupId)) as HTMLElement;\r\n\r\n return parseInt(this.setPropertyFromDataAttribute(groupIdElement, AttributeEnums.Product.ProductGroupId));\r\n } catch (error) {\r\n console.log('Critical Error: setProductGroupId Type Missmatch Error', groupIdElement);\r\n throw 'Critical Error: setProductGroupId Type Missmatch Error';\r\n }\r\n }\r\n\r\n setProductAdditionPrice(): number {\r\n let additionPriceElement: HTMLElement;\r\n try {\r\n additionPriceElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductAdditionPrice)) as HTMLElement;\r\n\r\n return parseInt(this.setPropertyFromDataAttribute(additionPriceElement, AttributeEnums.Product.ProductAdditionPrice));\r\n } catch (error) {\r\n console.log('Critical Error: setProductAdditionPrice Type Missmatch Error', additionPriceElement);\r\n throw 'Critical Error: setProductAdditionPrice Type Missmatch Error';\r\n }\r\n }\r\n\r\n setDisplayNamePrice(newDisplayName: string, newAdditionPrice: number): string {\r\n if ((!Number.isNaN(newAdditionPrice)) && (newAdditionPrice > 0)) {\r\n return newDisplayName + ' (£' + newAdditionPrice + ')';\r\n }\r\n else {\r\n return newDisplayName;\r\n }\r\n }\r\n\r\n updateProductDropDown(newDisplayText: string, newDisplayName: string, newValue: number | undefined, newAdditionPrice: number = 0): void {\r\n this.updateProductAdditionPrice(newAdditionPrice);\r\n super.updateProductDropDown(newDisplayText, this.setDisplayNamePrice(newDisplayName, newAdditionPrice), newValue);\r\n }\r\n\r\n writeToProductAdditionPrice(newAdditionPrice: number): void {\r\n try {\r\n let displayTextElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductAdditionPrice)) as HTMLElement;\r\n this.writeToDataAttributeValue(displayTextElement, AttributeEnums.Product.ProductAdditionPrice, newAdditionPrice.toString());\r\n } catch (error) {\r\n console.log('SelectorGroups writeToProductAdditionPrice ERROR', error);\r\n\r\n }\r\n }\r\n\r\n updateProductAdditionPrice(newAdditionPrice: number): void {\r\n this.writeToProductAdditionPrice(newAdditionPrice);\r\n this.productAdditionPrice = this.setProductAdditionPrice();\r\n }\r\n\r\n updateProductGroupPanelSelected(): void {\r\n try {\r\n console.log('SelectorGroups: checkIfCurrentProductGroupSelectorHasOptionsThenSetsSelector');\r\n\r\n let productGroupElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorGroupId, this.productGroupId.toString()));\r\n\r\n if (productGroupElement) {\r\n this.productGroupSelectorSetSelected();\r\n }\r\n } catch (error) {\r\n console.log('SelectorGroups: checkIfCurrentProductGroupSelectorHasOptionsThenSetsSelector ERROR', error);\r\n\r\n }\r\n }\r\n\r\n productGroupSelectorSetSelected(): void {\r\n try {\r\n console.log('SelectorGroups: productGroupSelectorSetSelected');\r\n //selects the relevant element of type productGroupIdVal with a matching extra id to that of the inputVal\r\n let productSelectorElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorGroupId, this.productGroupId.toString()) + HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorExtraId, this.value.toString()));\r\n //sets the data attr for selected to true\r\n productSelectorElement.setAttribute(AttributeEnums.ProductSelector.ProductSelectorIsSelected, 'true');\r\n\r\n if (productSelectorElement.classList.contains(StringEnums.CssClass.LbColourPickerTile)) {\r\n productSelectorElement.classList.add(StringEnums.CssClass.LbGalleryChooserTilesCellSelected);\r\n }\r\n } catch (error) {\r\n console.log('SelectorGroups: productGroupSelectorSetSelected ERROR', error);\r\n }\r\n }\r\n\r\n getCorrectGroupPickerElement(): HTMLElement {\r\n return this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.GroupPicker.GroupPicker) + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId, this.popOutIdOpen) + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, this.popOutFamilyOpen));\r\n }\r\n refreshProperties(): void {\r\n this.productGroupId = this.setProductGroupId();\r\n this.productAdditionPrice = this.setProductAdditionPrice();\r\n super.refreshProperties();\r\n }\r\n\r\n initialiseGroupProperties(): void {\r\n this.productGroupId = this.setProductGroupId();\r\n this.productAdditionPrice = this.setProductAdditionPrice();\r\n\r\n }\r\n\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n this.removeGroupSelectorClickEvent();\r\n super.dispose();\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { IAddToRemoveFromCartGtmDataObject, IProductViewGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { BasketService } from \"../basket/basketService\";\r\n\r\nexport interface IProductGtm extends IInstanceComponentBase {\r\n id: number;\r\n groupSku: string;\r\n sku: string;\r\n name: string;\r\n price: number;\r\n brand: string;\r\n variant: string;\r\n category: string;\r\n getAddToRemoveFromCartGtmDataObject: () => IAddToRemoveFromCartGtmDataObject;\r\n}\r\n\r\nexport class ProductGtm extends InstanceComponentBase implements IProductGtm {\r\n public id: number;\r\n public groupSku: string;\r\n public sku: string;\r\n public name: string;\r\n public price: number;\r\n public brand: string;\r\n public variant: string;\r\n public category: string;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.setGtmValues();\r\n this.sendGtmProductView();\r\n }\r\n\r\n setGtmValues(): void {\r\n try {\r\n this.id = +this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductId);\r\n this.groupSku = this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductGroupSku);\r\n this.sku = this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductSku);\r\n this.name = this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductName);\r\n this.price = +this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductPrice);\r\n this.brand = this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductBrand);\r\n this.variant = this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductSize);\r\n this.category = this.htmlElement.getAttribute(AttributeEnums.ProductGtm.GtmProductCategory);\r\n } catch (error) {\r\n console.log('ProductGtm: setGtmValues ERROR', error);\r\n }\r\n }\r\n\r\n sendGtmProductView(): void {\r\n console.log('ProductGtm: sendGtmProductView');\r\n let productViewGtmDataObject: IProductViewGtmDataObject = this.getProductViewGtmDataObject();\r\n GoogleTagManager.sendProductViewGtmDataObject(productViewGtmDataObject);\r\n }\r\n\r\n getProductViewGtmDataObject(): IProductViewGtmDataObject {\r\n let productGtmDataObject: IProductViewGtmDataObject = {\r\n id: this.id,\r\n groupSku: this.groupSku,\r\n sku: this.sku,\r\n name: this.name,\r\n price: this.price,\r\n brand: this.brand,\r\n variant: this.variant,\r\n category: this.category,\r\n quantity: 1,\r\n\r\n };\r\n return productGtmDataObject;\r\n }\r\n\r\n getAddToRemoveFromCartGtmDataObject(): IAddToRemoveFromCartGtmDataObject {\r\n let dataObject = BasketService.mapAddToRemoveFromCartGtmDataObject(this.id, this.name, this.price, this.brand, this.variant, this.category, 1);\r\n\r\n return dataObject;\r\n }\r\n\r\n dispose(): void {\r\n\r\n }\r\n\r\n}","import { AjaxGetAndReplaceHtml, AjaxGetAndReplaceHtmlAndOuterElement } from \"../../shared/ajaxGetAndReplaceHtml\";\r\nimport { initialise } from \"../../shared/initialiser\";\r\nimport { initialiseInstanceComponents } from \"../../shared/instanceComponentInitialiser\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { LoadingTemplates } from \"../loading/loadingTemplates\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { Product } from \"./product\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { BasketPopOut } from \"../basketPopOut/basketPopOut\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\nexport function initialiseProduct() {\r\n console.log('ProductInitialiser - initialiseProduct');\r\n initialiseInstanceComponents<Product>(Product, HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product), productFactory);\r\n}\r\n\r\nfunction productFactory(currentElement: Element): void {\r\n let newProduct = new Product(currentElement);\r\n (<any>window)[currentElement.getAttribute(AttributeEnums.Product.Product) + UtilityEnums.WindowObjectName.Product] = newProduct;\r\n console.log('ProductInitialiser - productFactory - Finished');\r\n}\r\n\r\n\r\nexport function getProductWithTypeName(productType: string): Product {\r\n if (productType == UtilityEnums.ProductTypeValue.BasketPopOut) {\r\n var basketPopOut: BasketPopOut = (<any>window)[UtilityEnums.WindowObjectName.BasketPopOut];\r\n var product = basketPopOut.product;\r\n return product;\r\n } else {\r\n return (<any>window)[productType + UtilityEnums.WindowObjectName.Product];\r\n }\r\n}\r\n\r\nexport async function reitialiseMainProductAndProductOptionsPanel(product: Product) {\r\n try {\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel Started');\r\n let lineId: number = product.lineId;\r\n let sizeId: number = product.sizeId;\r\n let dataProductSelectionPanelElement = product.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductSelectionPanel)) as HTMLElement;\r\n product.dispose();\r\n clearFinancePanelElements(product.htmlElement as HTMLElement);\r\n dataProductSelectionPanelElement.innerHTML = LoadingTemplates.productLoadingTemplate;\r\n let url: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductSelectionPanel}${lineId}-${sizeId}`;\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel URL: ' + url);\r\n await AjaxGetAndReplaceHtmlAndOuterElement(dataProductSelectionPanelElement, url);\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel AjaxGetAndReplaceHtml Finished');\r\n\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel FinancePanel Started');\r\n let productElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product, UtilityEnums.ProductTypeValue.Product)) as HTMLElement;\r\n let productPrice = productElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductPrice.ProductNowPrice)).getAttribute(AttributeEnums.ProductPrice.ProductNowPrice);\r\n let urlFinance: string = urlPaths.websiteUrl + `${UrlEnums.PartialUrls.ProductFinancePanel}${productPrice}`;\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel urlFinance: ' + urlFinance);\r\n let financePanelElement = productElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductFinancePanel.ProductFinancePanel)) as HTMLElement;\r\n await AjaxGetAndReplaceHtml(financePanelElement, urlFinance);\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel FinancePanel Finished');\r\n\r\n if (!(<any>window).productProduct) {\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel - Product Disposed');\r\n } else {\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel - Product Not Disposed Error');\r\n }\r\n await initialise();\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel - executed initialise');\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel - Finished', (<any>window).productProduct);\r\n } catch (error) {\r\n console.log('ProductInitialiser: reitialiseMainProductAndProductOptionsPanel', error);\r\n }\r\n}\r\n\r\nexport function clearFinancePanelElements(htmlElement: HTMLElement): void {\r\n try {\r\n console.log('Product: clearFinancePanelElements Started');\r\n let dataProductFinancePanelElement = htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductFinancePanel.ProductFinancePanel)) as HTMLElement;\r\n console.log('Product: clearFinancePanelElements - dataProductFinancePanelElement ', dataProductFinancePanelElement);\r\n if (dataProductFinancePanelElement !== null) {\r\n dataProductFinancePanelElement.innerHTML = LoadingTemplates.productLoadingTemplate;\r\n\r\n }\r\n } catch (error) {\r\n console.log('Product: clearFinancePanelElements', error);\r\n }\r\n}\r\n\r\n","import { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { GroupEnums } from \"../../shared/utilities/enums/groupEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { GroupPicker } from \"../groupPicker/groupPicker\";\r\nimport { ProductColourDropDown } from \"./productColourDropDown\";\r\nimport { IProductSelector } from \"./productDropDown\";\r\nimport { IProductGroupDropDown, IProductGroupSelector, ProductGroupDropDown } from \"./productGroupDropDown\";\r\nimport { IProductSizeSelector, ProductSizeDropDown } from \"./productSizeDropDown\";\r\n\r\nexport interface IProductOptionsPanel {\r\n productSizeDropDown?: ProductSizeDropDown;\r\n productGroupDropDownList: ProductGroupDropDown[];\r\n fixedValueProductSelectorList: IProductSelector[];\r\n refreshAllDropdowns: () => void;\r\n getGroupDropdownById: (groupId: number) => ProductGroupDropDown;\r\n getColourDropdown: () => ProductColourDropDown;\r\n hasSizeDropdown: () => boolean;\r\n hasColourDropdown: () => boolean;\r\n setProductOptionsValidation: () => void;\r\n getTotalProductAdditionsPrice: () => number;\r\n setUpOptionsSelectedFields: () => void;\r\n dispose: () => Promise<void>;\r\n}\r\n\r\nexport class ProductOptionsPanel extends InstanceComponentBase implements IProductOptionsPanel {\r\n productSizeDropDown?: ProductSizeDropDown;\r\n productGroupDropDownList: ProductGroupDropDown[] = new Array();\r\n fixedValueProductSelectorList: IProductSelector[] = new Array();\r\n\r\n constructor(public productOptionsPanelElement: HTMLElement) {\r\n super(productOptionsPanelElement);\r\n this.productSizeDropDownFactory();\r\n this.productGroupDropDownListFactory();\r\n this.productFixedValueProductSelectorListFactory();\r\n }\r\n\r\n productSizeDropDownFactory(): void {\r\n let sizeHiddenField: Element = this.productOptionsPanelElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductSizeId) + HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector));\r\n let productSizeDropDownElement: Element | null = sizeHiddenField.closest(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDropDown));\r\n if (productSizeDropDownElement !== null) {\r\n this.productSizeDropDown = new ProductSizeDropDown(productSizeDropDownElement as HTMLElement);\r\n }\r\n }\r\n\r\n productGroupDropDownFactory(productGroupDropDownElement: HTMLElement): ProductGroupDropDown {\r\n console.log('ProductOptionsPanel: productGroupDropDownFactory - Started');\r\n return new ProductGroupDropDown(productGroupDropDownElement as HTMLElement);\r\n }\r\n\r\n productColourDropDownFactory(productColourDropDownElement: HTMLElement): ProductColourDropDown {\r\n return new ProductColourDropDown(productColourDropDownElement as HTMLElement);\r\n }\r\n\r\n productGroupDropDownListFactory(): void {\r\n let allProductGroupSelectorElements: NodeListOf<Element> = this.productOptionsPanelElement.querySelectorAll(\r\n HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductGroupId) + HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector));\r\n for (let i = 0; i < allProductGroupSelectorElements.length; i += 1) {\r\n let productGroupDropDownElement: Element | null = allProductGroupSelectorElements[i].closest(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDropDown));\r\n\r\n if (productGroupDropDownElement !== null) {\r\n\r\n this.productGroupOrColourDropDownFactory(productGroupDropDownElement);\r\n }\r\n }\r\n }\r\n\r\n productGroupOrColourDropDownFactory(productGroupDropDownElement: Element): void {\r\n let productSelector = productGroupDropDownElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector));\r\n if (productGroupDropDownElement !== null) {\r\n if (productSelector.getAttribute(AttributeEnums.ProductSelector.ProductSelector) === 'colour') {\r\n this.productGroupDropDownList.push(this.productColourDropDownFactory(productGroupDropDownElement as HTMLElement));\r\n } else if (productSelector.getAttribute(AttributeEnums.ProductSelector.ProductSelector) === 'group') {\r\n let returnProductGroupDropDownFactory = this.productGroupDropDownFactory(productGroupDropDownElement as HTMLElement);\r\n console.log('ProductOptionsPanel: productGroupDropDownListFactory - ', returnProductGroupDropDownFactory);\r\n this.productGroupDropDownList.push(returnProductGroupDropDownFactory);\r\n }\r\n else {\r\n console.log('ProductOptionsPanel: productGroupDropDownListFactory - Drop Down Type is of invalid type', productGroupDropDownElement);\r\n throw new Error('ProductOptionsPanel: productGroupDropDownListFactory - Drop Down Type is of invalid type');\r\n }\r\n } else {\r\n console.log('ProductOptionsPanel: productGroupOrColourDropDownFactory - data-product-selector is missing', productGroupDropDownElement);\r\n throw new Error('ProductOptionsPanel: productGroupOrColourDropDownFactory - data-product-selector is missing');\r\n }\r\n }\r\n\r\n productFixedValueProductSelectorListFactory(): void {\r\n let allFixedValueProductSelectorElements: NodeListOf<Element> = this.productOptionsPanelElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector));\r\n for (let i = 0; i < allFixedValueProductSelectorElements.length; i += 1) {\r\n let productDropdownElement: Element | null = allFixedValueProductSelectorElements[i].closest(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.ProductDropDown));\r\n\r\n if (productDropdownElement === null) {\r\n\r\n this.productFixedValueProductSelectorFactory(allFixedValueProductSelectorElements[i]);\r\n }\r\n }\r\n }\r\n productFixedValueProductSelectorFactory(productFixedValueProductSelectorElement: Element): void {\r\n if (productFixedValueProductSelectorElement.getAttribute(AttributeEnums.ProductSelector.ProductSelector) === 'colour') {\r\n this.fixedValueProductSelectorList.push(this.productGroupSelectorFactory(productFixedValueProductSelectorElement as HTMLElement));\r\n } else if (productFixedValueProductSelectorElement.getAttribute(AttributeEnums.ProductSelector.ProductSelector) === 'group') {\r\n this.fixedValueProductSelectorList.push(this.productGroupSelectorFactory(productFixedValueProductSelectorElement as HTMLElement));\r\n } else if (productFixedValueProductSelectorElement.getAttribute(AttributeEnums.ProductSelector.ProductSelector) === 'size') {\r\n this.fixedValueProductSelectorList.push(this.productSizeSelectorFactory(productFixedValueProductSelectorElement as HTMLElement));\r\n }\r\n else {\r\n console.log('ProductOptionsPanel: productFixedValueProductSelectorFactory - Drop Down Type is of invalid type', productFixedValueProductSelectorElement);\r\n throw new Error('ProductOptionsPanel: productFixedValueProductSelectorFactory - Drop Down Type is of invalid type');\r\n }\r\n }\r\n productGroupSelectorFactory(productFixedValueProductSelectorElement: HTMLElement): IProductGroupSelector {\r\n let productGroupId: number = +productFixedValueProductSelectorElement.getAttribute(AttributeEnums.Product.ProductGroupId);\r\n let productAdditionPrice: number = +productFixedValueProductSelectorElement.getAttribute(AttributeEnums.Product.ProductAdditionPrice);\r\n let productSelectorElement: HTMLElement = productFixedValueProductSelectorElement;\r\n let productLineId: number = +productFixedValueProductSelectorElement.getAttribute(AttributeEnums.Product.ProductLineId);\r\n let value: number | undefined = +productFixedValueProductSelectorElement.getAttribute('value');\r\n\r\n return {\r\n productGroupId: productGroupId,\r\n productAdditionPrice: productAdditionPrice,\r\n productSelectorElement: productSelectorElement,\r\n productLineId: productLineId,\r\n value: value\r\n }\r\n }\r\n\r\n productSizeSelectorFactory(productFixedValueProductSelectorElement: HTMLElement): IProductSizeSelector {\r\n let productSizeId: number | undefined = +productFixedValueProductSelectorElement.getAttribute(AttributeEnums.Product.ProductSizeId);\r\n let productSelectorElement: HTMLElement = productFixedValueProductSelectorElement;\r\n let productLineId: number = +productFixedValueProductSelectorElement.getAttribute(AttributeEnums.Product.ProductLineId);\r\n let value: number | undefined = +productFixedValueProductSelectorElement.getAttribute('value');\r\n\r\n return {\r\n productSizeId: productSizeId,\r\n productSelectorElement: productSelectorElement,\r\n productLineId: productLineId,\r\n value: value\r\n }\r\n }\r\n\r\n getTotalProductAdditionsPrice(): number {\r\n let totalAdditionsPrice: number = 0;\r\n this.productGroupDropDownList.forEach((productGroup: ProductGroupDropDown) => {\r\n totalAdditionsPrice += productGroup.productAdditionPrice;\r\n });\r\n return totalAdditionsPrice;\r\n }\r\n\r\n refreshAllDropdowns() {\r\n if (this.productSizeDropDown !== undefined) {\r\n this.productSizeDropDown.refreshProperties();\r\n }\r\n for (let i in this.productGroupDropDownList) {\r\n this.productGroupDropDownList[i].refreshProperties();\r\n }\r\n }\r\n\r\n getGroupDropdownById(groupId: number): ProductGroupDropDown | undefined {\r\n\r\n let selectedGroupDropdowns = this.productGroupDropDownList.filter((groupDropDown: ProductGroupDropDown) => groupDropDown.productGroupId === groupId);\r\n if (selectedGroupDropdowns.length === 1) {\r\n return selectedGroupDropdowns[0];\r\n } else if (selectedGroupDropdowns.length === 0) {\r\n console.log('ProductOptionsPanel: getGroupDropdownById - has no groups for id: ' + groupId, selectedGroupDropdowns);\r\n return undefined;\r\n }\r\n else {\r\n console.log('ProductOptionsPanel: getGroupDropdownById - has incorrect groups for id: ' + groupId, selectedGroupDropdowns);\r\n throw Error('ProductOptionsPanel: getGroupDropdownById - has incorrect groups for id: ' + groupId);\r\n }\r\n }\r\n\r\n getColourDropdown(): ProductColourDropDown | undefined {\r\n return this.getGroupDropdownById(GroupEnums.GroupIds.Colour) as ProductColourDropDown;\r\n }\r\n\r\n hasSizeDropdown(): boolean {\r\n if (this.productSizeDropDown !== undefined && this.productSizeDropDown !== null) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n hasColourDropdown(): boolean {\r\n if (this.getColourDropdown()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n setProductOptionsValidation() {\r\n let groupDropdowns: ProductGroupDropDown[] = this.productGroupDropDownList;\r\n for (let i in groupDropdowns) {\r\n groupDropdowns[i].updateValidationStateUsingValue();\r\n }\r\n if (this.hasSizeDropdown()) {\r\n this.productSizeDropDown.updateValidationStateUsingValue();\r\n }\r\n }\r\n\r\n setUpOptionsSelectedFields(): void {\r\n if (this.productSizeDropDown) {\r\n this.checkIfProductSizeSelectorHasOptionsThenSetsSelector();\r\n }\r\n\r\n for (let i in this.productGroupDropDownList) {\r\n let currentDropDownValue: number | undefined = this.productGroupDropDownList[i].value;\r\n if (currentDropDownValue) {\r\n\r\n this.productGroupDropDownList[i].updateProductGroupPanelSelected();\r\n }\r\n\r\n }\r\n }\r\n\r\n checkIfProductSizeSelectorHasOptionsThenSetsSelector(): void {\r\n if (this.hasSizeDropdown()) {\r\n this.productSizeDropDown.productSizeSelectorSetSelected();\r\n }\r\n }\r\n\r\n\r\n\r\n async dispose(): Promise<void> {\r\n if(this.hasSizeDropdown()){\r\n this.productSizeDropDown.dispose();\r\n }\r\n this.productGroupDropDownList.forEach((dropDown: IProductGroupDropDown) => {\r\n dropDown.dispose();\r\n });\r\n }\r\n delete(): void {\r\n\r\n }\r\n\r\n}","import { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nexport interface IProductPrice {\r\n updateProductPrice: (additionalPriceTotals: number) => void;\r\n dispose: () => void;\r\n totalPrice: number;\r\n}\r\n\r\nexport class ProductPrice extends InstanceComponentBase implements IProductPrice {\r\n private productType: string;\r\n public totalPrice: number;\r\n private baseNowPrice: number;\r\n private baseWasPrice: number;\r\n private baseRrpPrice: number;\r\n private baseSavePrice: number;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.productType = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).getAttribute(AttributeEnums.Product.Product);\r\n this.setBaseNowPrice();\r\n this.setBaseWasPrice();\r\n this.setBaseRrpPrice();\r\n this.setBaseSavePrice();\r\n this.setTotalPrice();\r\n }\r\n\r\n setBaseNowPrice(): void {\r\n console.log(\"ProductPrice: setBaseNowPrice\");\r\n this.baseNowPrice = this.getPriceFromAttribute(AttributeEnums.ProductPrice.ProductBaseNowPrice);\r\n }\r\n setBaseWasPrice(): void {\r\n console.log(\"ProductPrice: setBaseWasPrice\");\r\n this.baseWasPrice = this.getPriceFromAttribute(AttributeEnums.ProductPrice.ProductBaseWasPrice);\r\n }\r\n setBaseRrpPrice(): void {\r\n console.log(\"ProductPrice: setBaseRrpPrice\");\r\n this.baseRrpPrice = this.getPriceFromAttribute(AttributeEnums.ProductPrice.ProductBaseRrpPrice);\r\n }\r\n setBaseSavePrice(): void {\r\n console.log(\"ProductPrice: setBaseSavePrice\");\r\n this.baseSavePrice = this.getPriceFromAttribute(AttributeEnums.ProductPrice.ProductBaseSavePrice);\r\n }\r\n\r\n setTotalPrice(): void {\r\n console.log(\"ProductPrice: setTotalPrice\");\r\n this.totalPrice = this.getPriceFromAttribute(AttributeEnums.ProductPrice.ProductNowPrice);\r\n }\r\n\r\n updateProductPrice(additionalPriceTotals: number): void {\r\n console.log('ProductPrice: updateProductPrice');\r\n\r\n this.updateProductPrefixAndPrice('RRP', AttributeEnums.ProductPrice.ProductRrpPrice, (this.baseRrpPrice + additionalPriceTotals));\r\n this.updateProductPrefixAndPrice('WAS', AttributeEnums.ProductPrice.ProductWasPrice, (this.baseWasPrice + additionalPriceTotals));\r\n this.updateProductPrefixAndPrice('', AttributeEnums.ProductPrice.ProductNowPrice, (this.baseNowPrice + additionalPriceTotals));\r\n\r\n this.setTotalPrice();\r\n //needs updating to allow multiple products\r\n this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).dispatchEvent(this.productPriceUpdatesEvent(this.productType, this.totalPrice));\r\n }\r\n\r\n updateProductPrefixAndPrice(pricePrefix: string, priceAttribute: string, newPrice: number): void {\r\n let dataProductPriceElement: HTMLElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector('[' + priceAttribute + ']');\r\n if (dataProductPriceElement != null) {\r\n dataProductPriceElement.setAttribute(priceAttribute, newPrice.toString());\r\n let prefix: string = '£';\r\n if (pricePrefix.length > 0) {\r\n prefix = pricePrefix + ' ' + prefix;\r\n }\r\n dataProductPriceElement.innerHTML = prefix + newPrice.toLocaleString();\r\n }\r\n }\r\n\r\n getPriceFromAttribute(priceAttribute: string): number {\r\n let dataProductPriceElement: Element = this.htmlElement.querySelector('[' + priceAttribute + ']');\r\n if (dataProductPriceElement != null) {\r\n let dataProductPriceAsString: string = dataProductPriceElement.getAttribute(priceAttribute);\r\n let dataProductPrice: number = parseFloat(dataProductPriceAsString.replace(',', ''));\r\n return dataProductPrice;\r\n }\r\n else {\r\n return 0.00;\r\n }\r\n }\r\n\r\n productPriceUpdatesEvent(type: string, totalPrice: number) {\r\n console.log(\"ProductPrice: productPriceUpdatesEvent - CustomEvent product-price-updated Dispatched\");\r\n return new CustomEvent(CustomEventEnums.ProductPriceUpdated, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'type': type,\r\n 'totalPrice': totalPrice\r\n }\r\n });\r\n }\r\n\r\n dispose(): void {\r\n\r\n }\r\n delete(): void {\r\n\r\n }\r\n}","import { HttpRequest } from \"../../shared/ajax\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { UrlEnums } from \"../../shared/utilities/enums/urlEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IProductReviewWidget, ProductReviewWidget } from \"../reviewComponents/productReviewWidget\";\r\nimport { IProductReviewsAggregate } from \"../reviewComponents/reviewsAggregate\";\r\n\r\nconst urlPaths = require('../../config/urlPaths.json');\r\n\r\nexport interface IProductReviewsParent extends IInstanceComponentBase {\r\n productReviewsAggregate: IProductReviewsAggregate\r\n}\r\n\r\nexport class ProductReviewsParent extends InstanceComponentBase implements IProductReviewsParent {\r\n public lineId: number;\r\n public productReviewsAggregate: IProductReviewsAggregate = {} as IProductReviewsAggregate;\r\n public productReviewWidget: IProductReviewWidget;\r\n\r\n private readonly _handleRatingsOptionClick;\r\n private readonly _handleShowMoreClick;\r\n private readonly _handleScroll;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this._handleRatingsOptionClick = this.handleRatingsOptionClick.bind(this);\r\n this._handleShowMoreClick = this.handleShowMoreClick.bind(this);\r\n this._handleScroll = this.handleScroll.bind(this);\r\n\r\n this.productReviewWidget = new ProductReviewWidget(htmlElement);\r\n\r\n this.setLineId();\r\n\r\n this.attachRatingsOptionClickEventListener();\r\n this.attachShowMoreClickEventListener();\r\n this.attachScrollEventListener();\r\n }\r\n\r\n setLineId():void{\r\n this.lineId = +HelperUtils.getValueForElementAndAttributeOrThrows(this.htmlElement, AttributeEnums.Product.ProductLineId);\r\n }\r\n\r\n attachRatingsOptionClickEventListener(): void {\r\n console.log('ProductReviewsParent: attachRatingsOptionClickEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ReviewWidgetOptionSelected, this._handleRatingsOptionClick);\r\n }\r\n\r\n removeRatingsOptionClickEventListener(): void {\r\n console.log('ProductReviewsParent: removeRatingsOptionClickEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ReviewWidgetOptionSelected, this._handleRatingsOptionClick);\r\n }\r\n\r\n attachShowMoreClickEventListener(): void {\r\n console.log('ProductReviewsParent: attachShowMoreClickEventListener');\r\n this.htmlElement.addEventListener(CustomEventEnums.ReviewWidgetPagerShowMore, this._handleShowMoreClick);\r\n }\r\n\r\n removeShowMoreClickEventListener(): void {\r\n console.log('ProductReviewsParent: removeShowMoreClickEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.ReviewWidgetPagerShowMore, this._handleShowMoreClick);\r\n }\r\n attachScrollEventListener(): void {\r\n console.log('ProductReviewsParent: attachScrollEventListener');\r\n document.addEventListener('scroll', this._handleScroll);\r\n }\r\n\r\n removeScrollEventListener(): void {\r\n console.log('ProductReviewsParent: removeScrollEventListener');\r\n document.removeEventListener('scroll', this._handleScroll);\r\n }\r\n\r\n async handleScroll() {\r\n let selectedRating: number = -1;\r\n let pageNumber: number = 1;\r\n let clearAllReviews: boolean = true;\r\n\r\n console.log(`ProductReviewsParent: handleScroll`);\r\n try {\r\n console.log(`ProductReviewsParent: handleScroll selectedRating: ${selectedRating} `);\r\n this.removeScrollEventListener();\r\n Promise.all([await this.getProductReviews(selectedRating, pageNumber), await this.getProductReviewsHtml(selectedRating, pageNumber)]).then((results) => {\r\n this.updateWidget(results[1], clearAllReviews);\r\n });\r\n } catch (error) {\r\n console.log(`ProductReviewsParent: handleScroll ERROR`, error);\r\n }\r\n }\r\n\r\n async handleRatingsOptionClick(e: CustomEvent) {\r\n let selectedRating: number = e.detail.rating;\r\n let isDisabled: boolean = e.detail.isDisabled;\r\n let pageNumber: number = 1;\r\n let clearAllReviews: boolean = true;\r\n\r\n console.log(`ProductReviewsParent: handleRatingsOptionClick`);\r\n try {\r\n console.log(`ProductReviewsParent: handleRatingsOptionClick selectedRating: ${selectedRating} `);\r\n if(!isDisabled){\r\n Promise.all([await this.getProductReviews(selectedRating, pageNumber), await this.getProductReviewsHtml(selectedRating, pageNumber)]).then((results) => {\r\n this.updateWidget(results[1], clearAllReviews);\r\n });\r\n }\r\n } catch (error) {\r\n console.log(`ProductReviewsParent: handleRatingsOptionClick ERROR`, error);\r\n }\r\n }\r\n\r\n async handleShowMoreClick(e: CustomEvent) {\r\n let isEof: boolean = e.detail.isEof;\r\n let pageNumber: number = e.detail.page;\r\n let selectedRating: number = e.detail.selectedRating;\r\n let clearAllReviews: boolean = false;\r\n\r\n console.log(`ProductReviewsParent: handleShowMoreClick`);\r\n try {\r\n console.log(`ProductReviewsParent: handleShowMoreClick`);\r\n if(!isEof){\r\n Promise.all([await this.getProductReviews(selectedRating, this.incrementPage(pageNumber)), await this.getProductReviewsHtml(selectedRating, this.incrementPage(pageNumber))]).then((results) => {\r\n this.updateWidget(results[1], clearAllReviews);\r\n });\r\n }\r\n } catch (error) {\r\n console.log(`ProductReviewsParent: handleShowMoreClick ERROR`, error);\r\n }\r\n }\r\n\r\n async getProductReviews(selectedRating:number, page: number): Promise<void> {\r\n try {\r\n console.log(`ProductReviewsParent: getProductReviews start lineId: ${this.lineId} selectedRating: ${selectedRating}, page: ${page}`);\r\n \r\n const uriSummary = `${urlPaths.websiteUrl}${UrlEnums.ApiUrls.ProductReviews}/${this.lineId}/${selectedRating}/${page}`;\r\n let response = await HttpRequest.get(uriSummary);\r\n \r\n this.productReviewsAggregate = JSON.parse(response);\r\n \r\n console.log(\"ProductReviewsParent: getProductReviews end\");\r\n } catch (error) {\r\n console.log(`ProductReviewsParent: getProductReviews ERROR`, error);\r\n }\r\n }\r\n\r\n async getProductReviewsHtml(selectedRating:number, page: number): Promise<string>{\r\n try {\r\n console.log(`ProductReviewsParent: getProductReviewsHtml start lineId: ${this.lineId} selectedRating: ${selectedRating}, page: ${page}`);\r\n \r\n const uriSummary = `${urlPaths.websiteUrl}${UrlEnums.PartialUrls.Reviews}${this.lineId}/${selectedRating}/${page}`;\r\n let response: string = await HttpRequest.get(uriSummary);\r\n \r\n console.log(\"ProductReviewsParent: getProductReviewsHtml end\");\r\n let reviewHtml: string = response;\r\n\r\n return reviewHtml;\r\n } catch (error) {\r\n console.log(`ProductReviewsParent: getProductReviewsHtml ERROR`, error);\r\n return null;\r\n }\r\n }\r\n\r\n incrementPage(page:number): number{\r\n return page + 1;\r\n }\r\n\r\n updateWidget(newReviews: string, clearReviews: boolean): void {\r\n console.log('ProductReviewsParent: updateWidget'); \r\n if(this.productReviewsAggregate === null || newReviews === null){\r\n console.log('ProductReviewsParent: updateWidget null values'); \r\n }else{\r\n this.productReviewWidget.update(this.productReviewsAggregate, newReviews, clearReviews);\r\n }\r\n }\r\n\r\n dispose() {\r\n try {\r\n console.log(`ProductReviewsParent: dispose`);\r\n \r\n this.removeRatingsOptionClickEventListener();\r\n this.removeShowMoreClickEventListener();\r\n this.removeScrollEventListener();\r\n\r\n if (this.productReviewWidget) {\r\n this.productReviewWidget.dispose();\r\n }\r\n } catch (error) {\r\n console.log('ProductReviewsParent: dispose ERROR', error);\r\n }\r\n }\r\n}","import { PopOutController } from \"../../shared/popOutController\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IProductDropDown, IProductSelector, ProductDropDown } from \"./productDropDown\";\r\n\r\nconst urlPaths = require('../../config/urlPaths.json');\r\n\r\nexport interface IProductSizeDropDown extends IProductDropDown, IProductSizeSelector {\r\n productSizeSelectorSetSelected: () => void;\r\n}\r\n\r\nexport interface IProductSizeSelector extends IProductSelector {\r\n productSizeId: number | undefined;\r\n}\r\n\r\nexport class ProductSizeDropDown extends ProductDropDown implements IProductSizeDropDown {\r\n\r\n productSizeId: number | undefined;\r\n private readonly _sizeSelectorClick;\r\n\r\n private readonly _sizePickerElement: HTMLElement;\r\n private readonly _sizePickerHandheldElement: HTMLElement;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n this._sizePickerElement = this.getSizePickerElement();\r\n this._sizePickerHandheldElement = this.getSizePickerHandheldElement();\r\n this.intialiseSizeProperties();\r\n //----- Event Listener Bindings Start -----//\r\n this._sizeSelectorClick = this.sizeSelectorClick.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachSizeSelectorClickEvent();\r\n //----- Initialise Event Listeners End -----//\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachSizeSelectorClickEvent() {\r\n\r\n this._sizePickerElement.addEventListener('click', this._sizeSelectorClick);\r\n this._sizePickerHandheldElement.addEventListener('click', this._sizeSelectorClick);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n\r\n removeSizeSelectorClickEvent() {\r\n\r\n this._sizePickerElement.removeEventListener('click', this._sizeSelectorClick);\r\n this._sizePickerHandheldElement.removeEventListener('click', this._sizeSelectorClick);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n sizeSelectorClick(event: MouseEvent) {\r\n console.log('Product: productSelectorClick');\r\n let clickElement = event.target;\r\n\r\n this.ifClickElementIsOfProductSelectorTypeUpdateAttributesForOptionChange(clickElement);\r\n\r\n\r\n }\r\n\r\n ifClickElementIsOfProductSelectorTypeUpdateAttributesForOptionChange(clickElement: EventTarget): void {\r\n console.log('Product: ifClickElementIsOfProductSelectorTypeUpdateAttributesForOptionChange');\r\n if (clickElement instanceof HTMLElement && clickElement.hasAttribute(AttributeEnums.ProductSelector.ProductSelectorItem)) {\r\n this.updateDataAttributesForProductSizeChange(clickElement);\r\n }\r\n }\r\n\r\n productSizeSelectorSetSelected(): void {\r\n console.log('Product: productSizeSelectorSetSelected');\r\n let dataProductElement = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product));\r\n if (this.value !== undefined) {\r\n let dataProductSizeHandheldElement = dataProductElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SizePicker.ProductSizePickerHandheld));\r\n let dataProductSizeHandheldSelectedElement = dataProductSizeHandheldElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorType, 'size') + HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorSizeId, this.value.toString()));\r\n dataProductSizeHandheldSelectedElement.setAttribute(AttributeEnums.ProductSelector.ProductSelectorIsSelected, 'true');\r\n dataProductSizeHandheldSelectedElement.classList.add(StringEnums.CssClass.LbSelected);\r\n if (dataProductSizeHandheldSelectedElement.hasAttribute(AttributeEnums.Product.ProductScrollIntoView)) {\r\n this.productSizeSelectorScrollToView(dataProductSizeHandheldElement, dataProductSizeHandheldSelectedElement);\r\n }\r\n let dataProductSizeElement = dataProductElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SizePicker.ProductSizePicker));\r\n let dataProductSizeHSelectedElement = dataProductSizeElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorType, 'size') + HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorSizeId, this.value.toString()));\r\n dataProductSizeHSelectedElement.setAttribute(AttributeEnums.ProductSelector.ProductSelectorIsSelected, 'true');\r\n dataProductSizeHSelectedElement.classList.add(StringEnums.CssClass.LbSelected);\r\n }\r\n }\r\n\r\n productSizeSelectorScrollToView(dataProductSizeHandheldElement:Element, dataProductSizeHandheldSelectedElement:Element) {\r\n console.log('ProductSizeDropDown: productSizeSelectorScrollToView');\r\n if(dataProductSizeHandheldSelectedElement.parentElement.previousElementSibling !== null && dataProductSizeHandheldSelectedElement.parentElement.previousElementSibling !== undefined){\r\n let elementPositionInScroll = dataProductSizeHandheldSelectedElement.parentElement.previousElementSibling.children[0].getBoundingClientRect().right;\r\n let scrollOffset = dataProductSizeHandheldElement.querySelector('ul').scrollLeft;\r\n let scrollElementOffset = dataProductSizeHandheldElement.getBoundingClientRect().left;\r\n let newPosition = elementPositionInScroll + scrollOffset - scrollElementOffset;\r\n dataProductSizeHandheldElement.querySelector('ul').scrollTo(newPosition, 0);\r\n }\r\n }\r\n\r\n compareLineSizeAndReloadProductWithNewSize(productSelectorSizeId: string, productSelectorFullSizeUrl:string): void {\r\n console.log('ProductSizeDropDown: compareLineSizeAndReloadProductWithNewSize');\r\n let dataProductUrlElement = this.getProductContainerElement().querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.DropDowns.SelectedProductUrl));\r\n let dataProductUrl: string | null;\r\n if (dataProductUrlElement !== null && dataProductUrlElement !== undefined) {\r\n dataProductUrl = dataProductUrlElement.getAttribute(AttributeEnums.DropDowns.SelectedProductUrl);\r\n } else {\r\n dataProductUrl = null;\r\n }\r\n let hiddenInputFieldForSize = this.getProductContainerElement().querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelector) + HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductSizeId));\r\n let productLineId: string | null = hiddenInputFieldForSize.getAttribute(AttributeEnums.Product.ProductLineId);\r\n let productSizeId: string | null = hiddenInputFieldForSize.getAttribute(AttributeEnums.Product.ProductSizeId);\r\n\r\n let dataProductUrlNew: string = this.checkLineSizeThenCreateUpdatedProductUrl(productLineId, productSizeId, dataProductUrl, productSelectorSizeId, productSelectorFullSizeUrl);\r\n\r\n this.getProductData(dataProductUrlNew);\r\n }\r\n\r\n getProductData(dataProductUrlNew: string) {\r\n if (dataProductUrlNew.length > 0) {\r\n //LOAD NEW PRODUCT DATA\r\n let productType: string = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).getAttribute(AttributeEnums.Product.Product);\r\n if (productType === UtilityEnums.ProductTypeValue.BasketPopOut) {\r\n (<any>window).basketPopOut.initialiseBasketPopOutProduct(dataProductUrlNew);\r\n } else {\r\n //Add Product Code\r\n window.location.href = dataProductUrlNew;\r\n }\r\n }\r\n }\r\n\r\n checkLineSizeThenCreateUpdatedProductUrl(productLineId: string, productSizeId: string, dataProductUrl: string, productSelectorSizeId: string, productSelectorFullSizeUrl:string): string {\r\n\r\n console.log('ProductSizeDropDown: checkLineSizeThenCreateUpdatedProductUrl');\r\n let dataProductUrlNew: string = \"\";\r\n let productLineSizeNew: string = productLineId + \"-\" + productSelectorSizeId;\r\n if ((productSizeId === null) || (productSizeId === undefined) || (productSizeId === '')) {\r\n return this.replaceLineAndSizeIdInProductUrl(dataProductUrl, productSelectorFullSizeUrl);\r\n }\r\n\r\n if ((productLineId != null) && (productLineId.length > 0) && (productSizeId != null) && (productSizeId.length > 0)) {\r\n let productLineSize: string = productLineId + \"-\" + productSizeId;\r\n\r\n\r\n if (productLineSize != productLineSizeNew) {\r\n dataProductUrlNew = this.replaceLineAndSizeIdInProductUrl(dataProductUrl, productSelectorFullSizeUrl);\r\n }\r\n else {\r\n //Error needs Id and Family values that work with correct product\r\n this.closeOptionsPickerPopout();\r\n }\r\n }\r\n return dataProductUrlNew;\r\n }\r\n\r\n replaceLineAndSizeIdInProductUrl(url: string, nameUrl:string) {\r\n let startCharacterForName = url.lastIndexOf('product/') + 8;\r\n let stringBeforeName: string = url.substring(0, startCharacterForName);\r\n\r\n let endCharacterForIds = url.lastIndexOf('?');\r\n let stringAfterLineId: string = \"\";\r\n if (endCharacterForIds > 0) {\r\n stringAfterLineId = url.substring(endCharacterForIds, url.length);\r\n }\r\n\r\n let newUrl = stringBeforeName + nameUrl + stringAfterLineId;\r\n return newUrl;\r\n }\r\n\r\n updateDataAttributesForProductSizeChange(clickElement: HTMLElement): void {\r\n console.log('SelectorSize: updateDataAttributesForProductSizeChange');\r\n let productSelectorSizeId: string;\r\n let productSelectorFullSizeUrl: string;\r\n if (clickElement.hasAttribute(AttributeEnums.ProductSelector.ProductSelectorSizeId)) {\r\n productSelectorSizeId = clickElement.getAttribute(AttributeEnums.ProductSelector.ProductSelectorSizeId);\r\n productSelectorFullSizeUrl = clickElement.getAttribute(AttributeEnums.ProductSelector.ProductSelectorFullsizeUrl);\r\n } else {\r\n productSelectorSizeId = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorSizeId)).getAttribute(AttributeEnums.ProductSelector.ProductSelectorSizeId);\r\n productSelectorFullSizeUrl = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.ProductSelector.ProductSelectorFullsizeUrl)).getAttribute(AttributeEnums.ProductSelector.ProductSelectorFullsizeUrl);\r\n }\r\n this.compareLineSizeAndReloadProductWithNewSize(productSelectorSizeId, productSelectorFullSizeUrl);\r\n }\r\n //------ Event Listener Methods End -----//\r\n\r\n setProductSizeId(): number {\r\n let sizeIdElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductSizeId)) as HTMLElement;\r\n try {\r\n return parseInt(this.setPropertyFromDataAttribute(sizeIdElement, AttributeEnums.Product.ProductSizeId));\r\n } catch (error) {\r\n console.log('Critical Error: setProductSizeId Type Missmatch Error', sizeIdElement);\r\n throw 'Critical Error: setProductSizeId Type Missmatch Error';\r\n }\r\n }\r\n\r\n refreshProperties(): void {\r\n this.productSizeId = this.setProductSizeId();\r\n super.refreshProperties();\r\n }\r\n intialiseSizeProperties(): void {\r\n this.productSizeId = this.setProductSizeId();\r\n\r\n }\r\n updateValidationStateUsingValue():void {\r\n this.setSizeHandheldValidation();\r\n super.updateValidationStateUsingValue();\r\n }\r\n\r\n setSizeHandheldValidation(): void{\r\n try{\r\n let addToCartAttempted: boolean = (this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.Product.ProductAddToCartAttempted)).getAttribute(AttributeEnums.Product.ProductAddToCartAttempted) === 'true');\r\n let handheldElement = this.getSizePickerHandheldElement();\r\n if (this.value === undefined) {\r\n if (addToCartAttempted) {\r\n handheldElement.classList.remove(StringEnums.CssClass.LbSuccess);\r\n handheldElement.classList.add(StringEnums.CssClass.LbWarning);\r\n }\r\n } else {\r\n handheldElement.classList.remove(StringEnums.CssClass.LbWarning);\r\n handheldElement.classList.add(StringEnums.CssClass.LbSuccess);\r\n }\r\n } catch(error) {\r\n console.log(\"ProductSizeDropDown: setSizeHandheldValidation ERROR setting validation\", error);\r\n }\r\n }\r\n\r\n getSizePickerElement(): HTMLElement {\r\n return this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SizePicker.ProductSizePicker));\r\n }\r\n\r\n getSizePickerHandheldElement(): HTMLElement {\r\n return this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Product.Product)).querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SizePicker.ProductSizePickerHandheld));\r\n }\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n\r\n //------ Clean Up Processes Start -----//\r\n\r\n dispose(): void {\r\n this.removeSizeSelectorClickEvent();\r\n super.dispose();\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { IPromotionGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AnalyticEnums } from \"../../shared/utilities/enums/analyticsEnums\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\n\r\nexport interface IBannerPromotion extends IInstanceComponentBase {\r\n id: string;\r\n href: string;\r\n name: string;\r\n position: number;\r\n impressionLogged: boolean;\r\n htmlElement: HTMLElement;\r\n updateImpressionLogged: (isLogged: boolean) => void;\r\n getPromotionGtmDataObject: () => IPromotionGtmDataObject;\r\n}\r\n\r\nexport class BannerPromotion extends InstanceComponentBase implements IBannerPromotion {\r\n readonly _handleBannerPromotionClickEvent;\r\n public id: string;\r\n public href: string;\r\n public name: string;\r\n public impressionLogged: boolean;\r\n\r\n constructor(public htmlElement: HTMLElement, public position: number) {\r\n super(htmlElement);\r\n this._handleBannerPromotionClickEvent = this.handleBannerPromotionClickEvent.bind(this);\r\n\r\n this.setHref();\r\n this.setName();\r\n this.setId();\r\n this.setImpressionLogged();\r\n\r\n this.attachBannerPromotionClickEventListener();\r\n }\r\n\r\n attachBannerPromotionClickEventListener(): void {\r\n console.log('BannerPromotion: attachBannerPromotionClickEventListener');\r\n this.htmlElement.addEventListener('click', this._handleBannerPromotionClickEvent);\r\n }\r\n removeBannerPromotionClickEventListener(): void {\r\n console.log('BannerPromotion: removeBannerPromotionClickEventListener');\r\n this.htmlElement.removeEventListener('click', this._handleBannerPromotionClickEvent);\r\n }\r\n\r\n setHref(): void {\r\n try {\r\n this.href = this.htmlElement.getAttribute('href');\r\n } catch (error) {\r\n console.log('BannerPromotion: setHref ERROR', error);\r\n this.dispose();\r\n throw new Error();\r\n }\r\n }\r\n\r\n setName(): void {\r\n try {\r\n this.name = this.htmlElement.getAttribute(AttributeEnums.BannerPromotion.BannerPromotionName);\r\n } catch (error) {\r\n console.log('BannerPromotion: setName ERROR', error);\r\n this.dispose();\r\n throw new Error();\r\n }\r\n }\r\n\r\n setId(): void {\r\n try {\r\n this.id = this.htmlElement.getAttribute(AttributeEnums.BannerPromotion.BannerPromotion);\r\n } catch (error) {\r\n console.log('BannerPromotion: setId ERROR', error);\r\n this.dispose();\r\n throw new Error();\r\n }\r\n }\r\n setImpressionLogged(): void {\r\n try {\r\n this.impressionLogged = (this.htmlElement.getAttribute(AnalyticEnums.InteractionState.ImpressionLogged) === 'true') ? true : false;\r\n } catch (error) {\r\n console.log('BannerPromotion: setImpressionLogged Not Set');\r\n this.impressionLogged = true;\r\n }\r\n }\r\n writeToImpressionLogged(isLogged: boolean): void {\r\n try {\r\n this.htmlElement.setAttribute(AnalyticEnums.InteractionState.ImpressionLogged, isLogged ? 'true' : 'false');\r\n } catch (error) {\r\n console.log('BannerPromotion: writeToImpressionLogged Not Set');\r\n }\r\n }\r\n\r\n updateImpressionLogged(isLogged: boolean): void {\r\n this.writeToImpressionLogged(isLogged);\r\n this.setImpressionLogged();\r\n }\r\n\r\n handleBannerPromotionClickEvent(): void {\r\n console.log('BannerPromotion: handleBannerPromotionClickEvent');\r\n let promotionGtmDataObject: IPromotionGtmDataObject = this.getPromotionGtmDataObject();\r\n GoogleTagManager.sendPromotionsGtmDataObjectAndNavigate(promotionGtmDataObject, this.href);\r\n }\r\n getPromotionGtmDataObject(): IPromotionGtmDataObject {\r\n let promotionGtmDataObject: IPromotionGtmDataObject = {\r\n id: this.id,\r\n url: this.href,\r\n name: this.name,\r\n position: this.position,\r\n creative: 'banner'\r\n };\r\n return promotionGtmDataObject;\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n this.removeBannerPromotionClickEventListener();\r\n } catch (error) {\r\n console.log('BannerPromotion: dispose ERROR', error);\r\n }\r\n }\r\n\r\n}","import { IPromotionGtmDataObject } from \"../../shared/googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"../../shared/googleTagManager/gtmService\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { OnScreenUtils } from \"../../shared/utilities/onScreenUtils\";\r\nimport { BannerPromotion, IBannerPromotion } from \"./bannerPromotion\";\r\n\r\nexport interface IBannerPromotions {\r\n dispose: () => void;\r\n bannerPromotionList: Array<IBannerPromotion>;\r\n}\r\n\r\nexport class BannerPromotions implements IBannerPromotions {\r\n public bannerPromotionList = new Array<IBannerPromotion>();\r\n private readonly _handlePromotionImpressionsOnScroll;\r\n\r\n constructor() {\r\n this._handlePromotionImpressionsOnScroll = this.handlePromotionImpressionsOnScroll.bind(this);\r\n this.bannerPromotionListFactory();\r\n this.updateGTMImpressions();\r\n this.attachCustomOnScrollEventListener();\r\n }\r\n\r\n attachCustomOnScrollEventListener(): void {\r\n (<any>window).addEventListener(CustomEventEnums.OnScroll, this._handlePromotionImpressionsOnScroll);\r\n }\r\n removeCustomOnScrollEventListener(): void {\r\n (<any>window).removeEventListener(CustomEventEnums.OnScroll, this._handlePromotionImpressionsOnScroll);\r\n }\r\n handlePromotionImpressionsOnScroll(): void {\r\n console.log('BannerPromotions: handlePromotionImpressionsOnScroll');\r\n this.updateGTMImpressions();\r\n }\r\n\r\n getAllUnLoggedPromotions(): Array<IBannerPromotion> {\r\n return this.bannerPromotionList.filter((bannerPromotion: IBannerPromotion) => bannerPromotion.impressionLogged === false);\r\n }\r\n\r\n updateGTMImpressions(): void {\r\n try {\r\n let promotionsToLog = new Array<IBannerPromotion>();\r\n let unloggedPromotions = this.getAllUnLoggedPromotions();\r\n unloggedPromotions.forEach((bannerPromotion: IBannerPromotion) => {\r\n if (OnScreenUtils.isVerticallyOnScreen(bannerPromotion.htmlElement)) {\r\n promotionsToLog.push(bannerPromotion);\r\n }\r\n });\r\n\r\n let promotionGtmDataObjectList = new Array<IPromotionGtmDataObject>();\r\n promotionsToLog.forEach((bannerPromotion: IBannerPromotion) => {\r\n promotionGtmDataObjectList.push(bannerPromotion.getPromotionGtmDataObject());\r\n });\r\n\r\n if (promotionGtmDataObjectList.length > 0) {\r\n let impressionsLogged: boolean = GoogleTagManager.sendPromotionImpressionsGtmDataObject(promotionGtmDataObjectList);\r\n\r\n if (impressionsLogged) {\r\n promotionsToLog.forEach((bannerPromotion: IBannerPromotion) => {\r\n bannerPromotion.updateImpressionLogged(true);\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.log('BannerPromotions: updateGTMImpressions ERROR', error);\r\n }\r\n }\r\n\r\n\r\n bannerPromotionListFactory(): void {\r\n try {\r\n let bannerPromotionElements: NodeListOf<Element> = document.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.BannerPromotion.BannerPromotion));\r\n\r\n for (let i = 0; i < bannerPromotionElements.length; i += 1) {\r\n try {\r\n this.bannerPromotionList.push(new BannerPromotion(bannerPromotionElements[i] as HTMLElement, i + 1));\r\n } catch (error) {\r\n console.log(`BannerPromotions: bannerPromotionsFactory ERROR on creation position ${i + 1}`, error);\r\n }\r\n }\r\n } catch (error) {\r\n console.log('BannerPromotions: bannerPromotionsFactory ERROR:', error);\r\n }\r\n\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n this.removeCustomOnScrollEventListener();\r\n this.bannerPromotionList.forEach((bannerPromotion: BannerPromotion) => this.dispose());\r\n } catch (error) {\r\n console.log('BannerPromotions: dispose ERROR:', error);\r\n }\r\n\r\n }\r\n\r\n public static bannerPromotionsFactory(): BannerPromotions {\r\n try {\r\n return new BannerPromotions();\r\n } catch (error) {\r\n console.log('BannerPromotions.bannerPromotionsFactory ERROR', error);\r\n }\r\n }\r\n\r\n}","import { ShowHide } from '../showHide/showHideController';\r\nimport { InstanceComponentBase } from '../../shared/instanceComponentBase';\r\nimport { ReadMoreInterface } from './interfaces';\r\nimport { AttributeEnums } from '../../shared/utilities/enums/attributeEnums';\r\nimport { HelperUtils } from '../../shared/utilities/helperUtils';\r\nimport { StringEnums } from '../../shared/utilities/enums/stringEnums';\r\nexport class ReadMore extends InstanceComponentBase implements ReadMoreInterface {\r\n\r\n private readonly showHide: ShowHide;\r\n private readonly _setReadMore;\r\n private _staticMinHeight: number;\r\n private _toggleElement: Element;\r\n private _contentElement: Element;\r\n private _buttingElement: Element;\r\n\r\n constructor(public htmlElement: Element, public contentElement: Element) {\r\n super(htmlElement);\r\n //----- Event Listener Bindings Start -----//\r\n this._setReadMore = this.setReadMore.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n this._toggleElement = htmlElement;\r\n this._contentElement = contentElement;\r\n let buttingElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReadMore.ReadMoreButting, this._toggleElement.getAttribute(AttributeEnums.ReadMore.ReadMoreToggle)));\r\n if (typeof (buttingElement) != 'undefined' && buttingElement != null) {\r\n this._buttingElement = buttingElement;\r\n } else {\r\n this._buttingElement = undefined;\r\n }\r\n let dynamicHeight: any = this._contentElement.getAttribute(AttributeEnums.ReadMore.ReadMoreHeight);\r\n if (dynamicHeight) {\r\n this._staticMinHeight = dynamicHeight;\r\n } else {\r\n this._staticMinHeight = 50;\r\n }\r\n var contentElements = document.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ReadMore.ReadMoreContent, this._toggleElement.getAttribute(AttributeEnums.ReadMore.ReadMoreToggle)));\r\n this.showHide = new ShowHide(htmlElement, contentElements);\r\n this.setReadMore();\r\n\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachResizeControllerEvent();\r\n this.attachClickEventListener();\r\n //----- Initialise Event Listeners End -----//\r\n }\r\n\r\n get contentElementMinHeight() {\r\n if (!this._buttingElement || this.isContentBelowButtingElement) {\r\n return this._staticMinHeight;\r\n } else {\r\n let buttingElementBottom = this._buttingElement.getBoundingClientRect().bottom;\r\n let contentElementTop = this._contentElement.getBoundingClientRect().top;\r\n let toggleElementHeight = this._toggleElement.getBoundingClientRect().height;\r\n if (this._buttingElement.getAttribute(AttributeEnums.ReadMore.ReadMoreButtingOffset)) {\r\n let buttingOffset:number = +this._buttingElement.getAttribute(AttributeEnums.ReadMore.ReadMoreButtingOffset);\r\n console.log(\"offset\", buttingOffset);\r\n return buttingElementBottom - (contentElementTop + toggleElementHeight) + buttingOffset;\r\n } else{\r\n return buttingElementBottom - (contentElementTop + toggleElementHeight);\r\n }\r\n }\r\n }\r\n\r\n get isContentBelowButtingElement() {\r\n if (this._contentElement.getBoundingClientRect().top > this._buttingElement.getBoundingClientRect().bottom) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n setReadMore() {\r\n console.log('ReadMore: setReadMore');\r\n this.showHide.setMinHeight = this.contentElementMinHeight;\r\n this.displayLink();\r\n this.toggleText();\r\n this.showHide.setHeight(this.contentElement);\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachResizeControllerEvent(): void {\r\n //window.addEventListener(\"resize\", this._setReadMore);\r\n }\r\n\r\n attachClickEventListener(): void {\r\n this._toggleElement.addEventListener('click', this._setReadMore);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeResizeControllerEvent(): void {\r\n window.removeEventListener(\"resize\", this._setReadMore);\r\n }\r\n\r\n removeClickEventListener(): void {\r\n this._toggleElement.removeEventListener('click', this._setReadMore);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n //------ Event Listener Methods End -----//\r\n\r\n displayLink(): void {\r\n let contentElementHeight = this._contentElement.getBoundingClientRect().height;\r\n if (contentElementHeight < this._staticMinHeight) {\r\n this._toggleElement.setAttribute(\"style\", \"display: none\");\r\n this._contentElement.classList.add(StringEnums.CssClass.LbReadMoreFade);\r\n } else {\r\n this._toggleElement.setAttribute(\"style\", \"display: block\");\r\n this._contentElement.classList.remove(StringEnums.CssClass.LbReadMoreFade);\r\n }\r\n\r\n if (this.contentElementMinHeight > this._contentElement.scrollHeight) {\r\n this._toggleElement.setAttribute(\"style\", \"display: none\");\r\n this._contentElement.classList.add(StringEnums.CssClass.LbReadMoreFade);\r\n } else {\r\n this._toggleElement.setAttribute(\"style\", \"display: block\");\r\n this._contentElement.classList.remove(StringEnums.CssClass.LbReadMoreFade);\r\n }\r\n }\r\n\r\n toggleText(): void {\r\n if (this._toggleElement.classList.contains(StringEnums.CssClass.LbHidden)) {\r\n this._toggleElement.innerHTML = StringEnums.Content.ReadMore;\r\n } else {\r\n this._toggleElement.innerHTML = StringEnums.Content.ReadLess;\r\n }\r\n }\r\n\r\n //------ Custom Event Creation Start -----//\r\n //------ Custom Event Creation End -----//\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n console.log('ReadMore: dispose - Beginning');\r\n this.showHide.dispose();\r\n this.removeResizeControllerEvent();\r\n this.removeClickEventListener();\r\n this.delete();\r\n }\r\n\r\n delete(): void {\r\n if ((<any>window)['rm' + this.htmlElement.getAttribute(AttributeEnums.ReadMore.ReadMoreToggle) + 'ReadMore']) {\r\n console.log('ReadMore: Delete - Deleting ReadMore Reference');\r\n delete (<any>window)['rm' + this.htmlElement.getAttribute(AttributeEnums.ReadMore.ReadMoreToggle) + 'ReadMore'];\r\n }\r\n else {\r\n console.log('ReadMore: Delete - ReadMore Reference Not Found on Window - Possible initilisation outside of global initiliser');\r\n }\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { IReviewWidgetAggregateComponent, ReviewWidgetAggregateComponent } from \"./reviewWidgetAggregateComponent\";\r\n\r\nexport interface IHeaderReviewWidget extends IInstanceComponentBase {\r\n reviewsAverage: number; \r\n totalReviews: number;\r\n update: (reviewsAverage: number, totalReviews: number) => void;\r\n}\r\nexport class HeaderReviewWidget extends InstanceComponentBase implements IHeaderReviewWidget {\r\n public reviewsAverage: number; \r\n public totalReviews: number;\r\n\r\n public reviewWidgetAggregateComponent: IReviewWidgetAggregateComponent;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.createReviewWidgetAggregateComponent();\r\n\r\n this.setReviewsAverage();\r\n this.setTotalReviews();\r\n }\r\n\r\n createReviewWidgetAggregateComponent():void{\r\n this.reviewWidgetAggregateComponent = new ReviewWidgetAggregateComponent(this.htmlElement);\r\n }\r\n\r\n setReviewsAverage():void{\r\n this.reviewsAverage = this.reviewWidgetAggregateComponent.reviewsAverage;\r\n }\r\n\r\n setTotalReviews():void{\r\n this.totalReviews = this.reviewWidgetAggregateComponent.totalReviews;\r\n }\r\n\r\n update(reviewsAverage: number, totalReviews: number): void {\r\n this.reviewWidgetAggregateComponent.update(reviewsAverage, totalReviews);\r\n this.setReviewsAverage();\r\n this.setTotalReviews();\r\n }\r\n\r\n dispose()\r\n {\r\n try {\r\n console.log(`HeaderReviewWidget: dispose`); \r\n if (this.reviewWidgetAggregateComponent) {\r\n this.reviewWidgetAggregateComponent.dispose();\r\n }\r\n } catch (error) {\r\n console.log('HeaderReviewWidget: dispose ERROR', error);\r\n }\r\n }\r\n\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { HeaderReviewWidget, IHeaderReviewWidget } from \"./headerReviewWidget\";\r\nimport { IProductReviewsAggregate, IReviewsAggregate } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetAggregatePanel, ReviewWidgetAggregatePanel } from \"./reviewWidgetAggregatePanel\";\r\nimport { IReviewWidgetAggregatePanelProduct, ReviewWidgetAggregatePanelProduct } from \"./reviewWidgetAggregatePanelProduct\";\r\nimport { IReviewWidgetBase, ReviewWidgetBase } from \"./reviewWidgetBase\";\r\nimport { IReviewWidgetPager, ReviewWidgetPager } from \"./reviewWidgetPager\";\r\n\r\nexport interface IProductReviewWidget extends IReviewWidgetBase {\r\n reviewsAggregate: IProductReviewsAggregate;\r\n}\r\n\r\nexport class ProductReviewWidget extends ReviewWidgetBase implements IProductReviewWidget {\r\n public reviewsAggregate: IProductReviewsAggregate;\r\n public reviewWidgetAggregatePanel: IReviewWidgetAggregatePanelProduct;\r\n public headerReviewWidget: IHeaderReviewWidget;\r\n \r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n\r\n this.setReviewsAggregateFactory();\r\n this.createHeaderReviewWidget();\r\n }\r\n\r\n createHeaderReviewWidget():void{\r\n let headerReviewWidgetElement: HTMLElement | null = this.getHtmlElementForHeaderReviewWidget();\r\n if (headerReviewWidgetElement) {\r\n this.headerReviewWidget = new HeaderReviewWidget(headerReviewWidgetElement);\r\n }\r\n }\r\n\r\n getHtmlElementForHeaderReviewWidget():HTMLElement{\r\n let headerReviewWidgetlElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewComponents.headerReviewWidget))\r\n return headerReviewWidgetlElement;\r\n }\r\n\r\n setReviewsAggregateFactory(): void{\r\n let reviewsAggregateElement: HTMLElement | null = this.getHtmlElementForReviewWidgetAggregatePanel();\r\n if (reviewsAggregateElement) {\r\n this.reviewWidgetAggregatePanel = new ReviewWidgetAggregatePanelProduct(reviewsAggregateElement);\r\n }\r\n }\r\n\r\n getHtmlElementForReviewWidgetAggregatePanel():HTMLElement{\r\n let reviewWidgetAggregatePanelElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewComponents.reviewWidgetAggregatePanel))\r\n return reviewWidgetAggregatePanelElement;\r\n }\r\n\r\n update(productReviewsAggregate: IProductReviewsAggregate, newReviews: string, clearReviews: boolean){\r\n this.headerReviewWidget.update(productReviewsAggregate.reviewsAverage, productReviewsAggregate.totalReviews);\r\n this.reviewWidgetAggregatePanel.update(productReviewsAggregate.reviewsAverage, productReviewsAggregate.totalReviews, productReviewsAggregate.reviewsSummary, productReviewsAggregate.featureAggregates.qualityAverage, productReviewsAggregate.featureAggregates.valueForMoneyAverage );\r\n this.reviewWidgetPager.update(productReviewsAggregate.selectedRating, productReviewsAggregate.reviewsSummary, productReviewsAggregate.page, newReviews, clearReviews);\r\n }\r\n\r\n dispose() {\r\n try {\r\n console.log(`ProductReviewWidget: dispose`);\r\n \r\n if (this.headerReviewWidget) {\r\n this.headerReviewWidget.dispose();\r\n }\r\n if (this.reviewWidgetAggregatePanel) {\r\n this.reviewWidgetAggregatePanel.dispose();\r\n }\r\n if (this.reviewWidgetPager) {\r\n this.reviewWidgetPager.dispose();\r\n }\r\n \r\n } catch (error) {\r\n console.log('ProductReviewWidget: dispose ERROR', error);\r\n }\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { TrustpilotUtils } from \"../../shared/utilities/trustpilotUtils\";\r\nimport { IProductReviewsAggregate } from \"./reviewsAggregate\";\r\n\r\nexport interface IReviewWidgetAggregateComponent extends IInstanceComponentBase {\r\n reviewsAverage: number;\r\n totalReviews: number;\r\n update: (reviewsAverage: number, totalReviews: number) => void;\r\n}\r\nexport class ReviewWidgetAggregateComponent extends InstanceComponentBase implements IReviewWidgetAggregateComponent {\r\n public reviewsAverage: number;\r\n public totalReviews: number;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.setReviewsAverage();\r\n this.setTotalReviews();\r\n }\r\n\r\n setReviewsAverage(): void {\r\n this.reviewsAverage = +HelperUtils.getValueForElementAndAttributeOrThrows(this.htmlElement, AttributeEnums.ReviewWidgetAggregateComponent.reviewsAverage);\r\n }\r\n\r\n writeToReviewsAverage(reviewsAverage: number): void {\r\n HelperUtils.setValueForElementAndAttributeOrThrows(reviewsAverage.toString(), this.htmlElement, AttributeEnums.ReviewWidgetAggregateComponent.reviewsAverage);\r\n }\r\n\r\n updateReviewsAverage(reviewsAverage: number): void {\r\n this.writeToReviewsAverage(reviewsAverage);\r\n this.setReviewsAverage();\r\n }\r\n\r\n setTotalReviews(): void {\r\n this.totalReviews = +HelperUtils.getValueForElementAndAttributeOrThrows(this.htmlElement, AttributeEnums.ReviewWidgetAggregateComponent.totalReviews);\r\n }\r\n\r\n writeToTotalReviews(totalReviews: number): void {\r\n HelperUtils.setValueForElementAndAttributeOrThrows(totalReviews.toString(), this.htmlElement, AttributeEnums.ReviewWidgetAggregateComponent.totalReviews);\r\n }\r\n\r\n updateTotalReviews(totalReviews: number): void {\r\n this.writeToTotalReviews(totalReviews);\r\n this.setTotalReviews();\r\n }\r\n\r\n setDisplayTotalReviews():void{\r\n let totalReviewsElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetAggregateComponent.totalReviews))\r\n totalReviewsElement.innerHTML = `(${this.totalReviews} Reviews)`;\r\n }\r\n\r\n setDisplayReviewsAverage():void{\r\n let reviewsAverageElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetAggregateComponent.reviewsAverage))\r\n reviewsAverageElement.innerHTML = `${this.reviewsAverage}/5`;\r\n }\r\n\r\n setDisplayStarImage():void{\r\n let starImageElement: HTMLImageElement = this.htmlElement.querySelector('img')\r\n starImageElement.src = TrustpilotUtils.GetReviewStarSvgPath(this.reviewsAverage);\r\n }\r\n\r\n updateDisplay():void{\r\n this.setDisplayTotalReviews();\r\n this.setDisplayReviewsAverage();\r\n this.setDisplayStarImage();\r\n }\r\n\r\n update(reviewsAverage: number, totalReviews: number): void {\r\n this.updateReviewsAverage(reviewsAverage);\r\n this.updateTotalReviews(totalReviews);\r\n this.updateDisplay();\r\n }\r\n\r\n dispose()\r\n {\r\n\r\n }\r\n\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IProductReviewsAggregate, IReviewsAggregate, IReviewsSummary } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetAggregateComponent, ReviewWidgetAggregateComponent } from \"./reviewWidgetAggregateComponent\";\r\nimport { IReviewWidgetFeatureAggregateComponent, ReviewWidgetFeatureAggregateComponent } from \"./reviewWidgetFeatureAggregateComponent\";\r\nimport { IReviewWidgetSummaryComponent, ReviewWidgetSummaryComponent } from \"./reviewWidgetSummaryComponent\";\r\n\r\nexport interface IReviewWidgetAggregatePanelBase extends IInstanceComponentBase {\r\n reviewsAverage: number; \r\n totalReviews: number;\r\n reviewsAggregate: IReviewsAggregate\r\n reviewWidgetAggregateComponent: IReviewWidgetAggregateComponent;\r\n reviewWidgetSummaryComponent: IReviewWidgetSummaryComponent;\r\n setReviewsAggregate:() => void;\r\n updateReviewsAggregate: (reviewsAggregate: IReviewsAggregate) => void;\r\n updateBase:(reviewsAverage: number, totalReviews: number, reviewsSummary: IReviewsSummary) => void;\r\n}\r\n\r\nexport abstract class ReviewWidgetAggregatePanelBase extends InstanceComponentBase implements IReviewWidgetAggregatePanelBase {\r\n public reviewsAverage: number; \r\n public totalReviews: number;\r\n public reviewWidgetAggregateComponent: IReviewWidgetAggregateComponent;\r\n public reviewWidgetSummaryComponent: IReviewWidgetSummaryComponent;\r\n public reviewsAggregate: IReviewsAggregate = {} as IReviewsAggregate;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n \r\n this.createReviewWidgetAggregateComponent();\r\n this.setTotalReviews();\r\n\r\n this.createReviewWidgetSummaryComponent();\r\n\r\n this.setReviewsAverage();\r\n }\r\n \r\n createReviewWidgetAggregateComponent():void{\r\n let reviewWidgetAggregateComponentElement: HTMLElement | null = this.getHtmlElementForReviewWidgetAggregateComponent();\r\n if (reviewWidgetAggregateComponentElement) {\r\n this.reviewWidgetAggregateComponent = new ReviewWidgetAggregateComponent(reviewWidgetAggregateComponentElement);\r\n }\r\n }\r\n\r\n getHtmlElementForReviewWidgetAggregateComponent():HTMLElement{\r\n let aggregateComponentElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetAggregateComponent.reviewWidgetAggregateComponent))\r\n return aggregateComponentElement;\r\n }\r\n\r\n createReviewWidgetSummaryComponent():void{\r\n let reviewWidgetSummaryComponentElement: HTMLElement | null = this.getHtmlElementForReviewWidgetSummaryComponent();\r\n if (reviewWidgetSummaryComponentElement) {\r\n this.reviewWidgetSummaryComponent = new ReviewWidgetSummaryComponent(reviewWidgetSummaryComponentElement);\r\n }\r\n }\r\n\r\n getHtmlElementForReviewWidgetSummaryComponent():HTMLElement{\r\n let summaryComponentElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetSummaryComponent.reviewWidgetSummaryComponent))\r\n return summaryComponentElement;\r\n }\r\n\r\n setReviewsAggregate():void{\r\n this.reviewsAggregate.reviewsAverage = this.reviewWidgetAggregateComponent.reviewsAverage;\r\n this.reviewsAggregate.totalReviews = this.reviewWidgetAggregateComponent.totalReviews;\r\n this.reviewsAggregate.reviewsSummary = this.reviewWidgetSummaryComponent.reviewsSummary;\r\n }\r\n\r\n updateReviewsAggregate(reviewsAggregate: IReviewsAggregate):void{\r\n this.reviewWidgetAggregateComponent.update(reviewsAggregate.reviewsAverage, reviewsAggregate.totalReviews);\r\n\r\n this.setReviewsAggregate();\r\n }\r\n\r\n setReviewsAverage():void{\r\n this.reviewsAverage = this.reviewWidgetAggregateComponent.reviewsAverage;\r\n }\r\n\r\n setTotalReviews():void{\r\n this.totalReviews = this.reviewWidgetAggregateComponent.totalReviews;\r\n }\r\n\r\n updateBase(reviewsAverage: number, totalReviews: number, reviewsSummary: IReviewsSummary): void {\r\n this.reviewWidgetAggregateComponent.update(reviewsAverage, totalReviews);\r\n this.reviewWidgetSummaryComponent.update(reviewsSummary);\r\n this.setReviewsAverage();\r\n this.setTotalReviews();\r\n }\r\n\r\n dispose() {\r\n try {\r\n console.log(`ReviewWidgetAggregatePanelBase: dispose`);\r\n \r\n if (this.reviewWidgetAggregateComponent) {\r\n this.reviewWidgetAggregateComponent.dispose();\r\n }\r\n if (this.reviewWidgetSummaryComponent) {\r\n this.reviewWidgetSummaryComponent.dispose();\r\n }\r\n\r\n \r\n } catch (error) {\r\n console.log('ReviewWidgetAggregatePanelBase: dispose ERROR', error);\r\n }\r\n }\r\n}\r\n\r\n","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IProductReviewsAggregate, IReviewsAggregate, IReviewsSummary } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetAggregateComponent, ReviewWidgetAggregateComponent } from \"./reviewWidgetAggregateComponent\";\r\nimport { IReviewWidgetAggregatePanel, ReviewWidgetAggregatePanel } from \"./reviewWidgetAggregatePanel\";\r\nimport { IReviewWidgetAggregatePanelBase, ReviewWidgetAggregatePanelBase } from \"./reviewWidgetAggregatePanelBase\";\r\nimport { IReviewWidgetFeatureAggregateComponent, ReviewWidgetFeatureAggregateComponent } from \"./reviewWidgetFeatureAggregateComponent\";\r\nimport { IReviewWidgetSummaryComponent, ReviewWidgetSummaryComponent } from \"./reviewWidgetSummaryComponent\";\r\n\r\nexport interface IReviewWidgetAggregatePanelProduct extends IReviewWidgetAggregatePanelBase {\r\n reviewWidgetFeatureAggregateComponent: IReviewWidgetFeatureAggregateComponent;\r\n reviewsAggregate: IProductReviewsAggregate;\r\n updateReviewsAggregate:(reviewsAggregate: IProductReviewsAggregate) => void;\r\n update:(reviewsAverage: number, totalReviews: number, reviewsSummary: IReviewsSummary, qualityAverage: number, valueForMoneyAverage: number) => void;\r\n}\r\n\r\nexport class ReviewWidgetAggregatePanelProduct extends ReviewWidgetAggregatePanelBase implements IReviewWidgetAggregatePanelProduct {\r\n public reviewWidgetFeatureAggregateComponent: IReviewWidgetFeatureAggregateComponent;\r\n public reviewsAggregate: IProductReviewsAggregate = {} as IProductReviewsAggregate;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.createReviewWidgetFeatureAggregateComponent();\r\n\r\n this.setReviewsAggregate();\r\n }\r\n\r\n createReviewWidgetFeatureAggregateComponent():void{\r\n let reviewWidgetFeatureAggregateComponentElement: HTMLElement | null = this.getHtmlElementForReviewWidgetFeatureAggregateComponent();\r\n if (reviewWidgetFeatureAggregateComponentElement) {\r\n this.reviewWidgetFeatureAggregateComponent = new ReviewWidgetFeatureAggregateComponent(reviewWidgetFeatureAggregateComponentElement);\r\n }\r\n }\r\n \r\n getHtmlElementForReviewWidgetFeatureAggregateComponent():HTMLElement{\r\n let featureAggregateComponentElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.reviewWidgetFeatureAggregateComponent))\r\n return featureAggregateComponentElement;\r\n }\r\n\r\n update(reviewsAverage: number, totalReviews: number, reviewsSummary: IReviewsSummary, qualityAverage: number, valueForMoneyAverage: number):void{\r\n this.updateBase(reviewsAverage, totalReviews, reviewsSummary);\r\n this.reviewWidgetFeatureAggregateComponent.update(qualityAverage, valueForMoneyAverage);\r\n }\r\n\r\n dispose() {\r\n\r\n }\r\n}\r\n\r\n","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IProductReviewsAggregate, IReviewsAggregate } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetAggregatePanel, ReviewWidgetAggregatePanel } from \"./reviewWidgetAggregatePanel\";\r\nimport { IReviewWidgetPager, ReviewWidgetPager } from \"./reviewWidgetPager\";\r\n\r\nexport interface IReviewWidgetBase extends IInstanceComponentBase {\r\n reviewWidgetPager: IReviewWidgetPager;\r\n update:(reviewsAggregate: IReviewsAggregate, newReviews: string, clearReviews: boolean) => void;\r\n}\r\n\r\nexport abstract class ReviewWidgetBase extends InstanceComponentBase implements IReviewWidgetBase {\r\n public abstract reviewsAggregate: IReviewsAggregate;\r\n public reviewWidgetPager: IReviewWidgetPager;\r\n public abstract reviewWidgetAggregatePanel: IReviewWidgetAggregatePanel;\r\n \r\n constructor(public htmlElement: Element) {\r\n super(htmlElement);\r\n\r\n this.createReviewWidgetPager();\r\n }\r\n\r\n createReviewWidgetPager():void{\r\n let reviewWidgetPagerElement: HTMLElement | null = this.getHtmlElementForReviewWidgetPager();\r\n if (reviewWidgetPagerElement) {\r\n this.reviewWidgetPager = new ReviewWidgetPager(reviewWidgetPagerElement);\r\n }\r\n }\r\n\r\n getHtmlElementForReviewWidgetPager():HTMLElement{\r\n let reviewWidgetPagerElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewComponents.reviewWidgetPager))\r\n return reviewWidgetPagerElement;\r\n }\r\n\r\n abstract update(reviewsAggregate: IReviewsAggregate, newReviews: string, clearReviews: boolean): void;\r\n\r\n dispose() {\r\n \r\n }\r\n}","import { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IFeatureAggregates } from \"./reviewsAggregate\";\r\n\r\nexport interface IReviewWidgetFeatureAggregateComponent {\r\n qualityAverage: number;\r\n valueForMoneyAverage: number;\r\n isHidden: boolean;\r\n update:(qualityAverage: number, valueForMoneyAverage: number) => void;\r\n}\r\n\r\nexport class ReviewWidgetFeatureAggregateComponent extends InstanceComponentBase implements IReviewWidgetFeatureAggregateComponent {\r\n public qualityAverage: number;\r\n public valueForMoneyAverage: number;\r\n public isHidden: boolean;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.setQualityAverage();\r\n this.setValueForMoneyAverage();\r\n this.updatePanelIsHidden();\r\n this.updateQualityAverageIsHidden();\r\n this.updateValueForMoneyAverageIsHidden();\r\n }\r\n\r\n setQualityAverage():void{\r\n this.qualityAverage = +HelperUtils.getValueForElementAndAttributeOrThrows(this.htmlElement, AttributeEnums.ReviewWidgetFeatureAggregateComponent.qualityAverage);\r\n }\r\n\r\n writeQualityAverage(qualityAverage: number): void {\r\n HelperUtils.setValueForElementAndAttributeOrThrows(qualityAverage.toString(), this.htmlElement, AttributeEnums.ReviewWidgetFeatureAggregateComponent.qualityAverage);\r\n }\r\n\r\n updateQualityAverage(qualityAverage: number):void{\r\n this.writeQualityAverage(qualityAverage);\r\n this.setQualityAverage();\r\n this.setQualityAverageMeterAndValue();\r\n this.updateQualityAverageIsHidden();\r\n }\r\n\r\n setQualityAverageMeterAndValue(): void {\r\n let qualityAverageElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.qualityAverage))\r\n \r\n let qualityAverageMeter: HTMLMeterElement = qualityAverageElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.aggregateMeter));\r\n qualityAverageMeter.value = this.qualityAverage;\r\n\r\n let qualityAverageText: HTMLElement = qualityAverageElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.aggregateTotal));\r\n qualityAverageText.innerHTML = `${this.qualityAverage} / 5`;\r\n }\r\n\r\n setValueForMoneyAverage():void{\r\n this.valueForMoneyAverage = +HelperUtils.getValueForElementAndAttributeOrThrows(this.htmlElement, AttributeEnums.ReviewWidgetFeatureAggregateComponent.valueForMoneyAverage);\r\n }\r\n\r\n writeValueForMoneyAverage(valueForMoneyAverage: number): void {\r\n HelperUtils.setValueForElementAndAttributeOrThrows(valueForMoneyAverage.toString(), this.htmlElement, AttributeEnums.ReviewWidgetFeatureAggregateComponent.valueForMoneyAverage);\r\n }\r\n\r\n updateValueForMoneyAverage(valueForMoneyAverage: number):void{\r\n this.writeValueForMoneyAverage(valueForMoneyAverage);\r\n this.setValueForMoneyAverage();\r\n this.setValueForMoneyAverageMeterAndValue();\r\n this.updateValueForMoneyAverageIsHidden();\r\n }\r\n\r\n setValueForMoneyAverageMeterAndValue(): void {\r\n let valueForMoneyAverageElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.valueForMoneyAverage))\r\n \r\n let valueForMoneyAverageMeter: HTMLMeterElement = valueForMoneyAverageElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.aggregateMeter));\r\n valueForMoneyAverageMeter.value = this.valueForMoneyAverage;\r\n\r\n let valueForMoneyAverageText: HTMLElement = valueForMoneyAverageElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.aggregateTotal));\r\n valueForMoneyAverageText.innerHTML = `${this.valueForMoneyAverage} / 5`;\r\n }\r\n\r\n updatePanelIsHiddenCssClass():void{\r\n console.log(`ReviewWidgetFeatureAggregateComponent: updatePanelIsHiddenCssClass - ${this.isHidden}`);\r\n if(this.isHidden){\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbHidden);\r\n }else{\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbHidden);\r\n }\r\n }\r\n \r\n updatePanelIsHidden():void{\r\n if(this.qualityAverage >= 4 || this.valueForMoneyAverage >= 4) {\r\n this.isHidden = false;\r\n this.updatePanelIsHiddenCssClass();\r\n }else{\r\n this.isHidden = true;\r\n this.updatePanelIsHiddenCssClass();\r\n }\r\n }\r\n\r\n updateQualityAverageIsHidden(): void {\r\n let meterElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.qualityAverage))\r\n if (this.qualityAverage >= 4) {\r\n meterElement.classList.remove(StringEnums.CssClass.LbHidden);\r\n } else {\r\n meterElement.classList.add(StringEnums.CssClass.LbHidden);\r\n }\r\n } \r\n\r\n updateValueForMoneyAverageIsHidden(): void {\r\n let meterElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetFeatureAggregateComponent.valueForMoneyAverage))\r\n if (this.valueForMoneyAverage >= 4) {\r\n meterElement.classList.remove(StringEnums.CssClass.LbHidden);\r\n } else {\r\n meterElement.classList.add(StringEnums.CssClass.LbHidden);\r\n }\r\n }\r\n\r\n update(qualityAverage: number, valueForMoneyAverage: number):void{\r\n this.updateQualityAverage(qualityAverage);\r\n this.updateValueForMoneyAverage(valueForMoneyAverage);\r\n this.updatePanelIsHidden();\r\n }\r\n\r\n dispose()\r\n {\r\n\r\n };\r\n\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { TypeUtils } from \"../../shared/utilities/typeUtils\";\r\n\r\nexport interface IReviewWidgetOptionBase extends IInstanceComponentBase {\r\n rating: number;\r\n isDisabled: boolean;\r\n isSelected: boolean;\r\n}\r\n\r\nexport abstract class ReviewWidgetOptionBase extends InstanceComponentBase implements IReviewWidgetOptionBase {\r\n public rating: number; \r\n private readonly _handleOptionClick;\r\n\r\n constructor(public htmlElement: HTMLElement, public isDisabled: boolean, public isSelected: boolean) {\r\n super(htmlElement);\r\n\r\n this._handleOptionClick = this.handleOptionClick.bind(this);\r\n\r\n this.setRating();\r\n \r\n this.updateIsDisabled(isDisabled);\r\n this.attachOptionClickEventListener();\r\n }\r\n abstract updateIsSelected(isSelected: boolean): void;\r\n\r\n attachOptionClickEventListener() {\r\n console.log('ReviewWidgetOptionBase: attachOptionClickEventListener');\r\n this.htmlElement.addEventListener('click', this._handleOptionClick);\r\n }\r\n removeOptionClickEventListener() {\r\n console.log('ReviewWidgetOptionBase: removeRatingsOptionClickEventListener');\r\n this.htmlElement.removeEventListener('click', this._handleOptionClick);\r\n }\r\n\r\n handleOptionClick(e: Event) {\r\n console.log('ReviewWidgetOptionBase: handleOptionClick');\r\n\r\n this.htmlElement.dispatchEvent(this.optionCustomEvent(this.rating, this.isDisabled, this.isSelected));\r\n }\r\n\r\n optionCustomEvent(rating: number, isDisabled: boolean, isSelected: boolean) {\r\n console.log(`ReviewWidgetOptionBase: optionCustomEvent rating: ${rating} isDisabled: ${isDisabled}`);\r\n return new CustomEvent(CustomEventEnums.ReviewWidgetOptionSelected, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'rating': rating,\r\n 'isDisabled': isDisabled,\r\n 'isSelected' : isSelected\r\n }\r\n });\r\n }\r\n \r\n setRating(): void {\r\n this.rating = +this.htmlElement.getAttribute(AttributeEnums.ReviewWidgetRatingsOption.ratingsOptionRating);\r\n }\r\n\r\n updateIsDisabled(isDisabled: boolean):void{\r\n this.isDisabled = isDisabled;\r\n this.setDisabledCssClass();\r\n this.setDisabledAriaState();\r\n }\r\n \r\n setDisabledCssClass():void{\r\n console.log(`ReviewWidgetOptionBase: setDisabledCssClass - ${this.isDisabled}`);\r\n if(this.isDisabled){\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbDisabled);\r\n }else{\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbDisabled);\r\n }\r\n }\r\n setDisabledAriaState():void{\r\n console.log(`ReviewWidgetOptionBase: setDisabledAriaState - ${this.isDisabled}`);\r\n this.htmlElement.setAttribute('aria-disabled', this.isDisabled.toString());\r\n }\r\n\r\n dispose(): void {\r\n try {\r\n console.log(`ReviewWidgetOptionBase: dispose`);\r\n \r\n this.removeOptionClickEventListener();\r\n } catch (error) {\r\n console.log('ReviewWidgetOptionBase: dispose ERROR', error);\r\n }\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { TypeUtils } from \"../../shared/utilities/typeUtils\";\r\nimport { IReviewsAggregate, IReviewsSummary } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetPagerRatingsFilter, ReviewWidgetPagerRatingsFilter } from \"./reviewWidgetPagerRatingsFilter\";\r\nimport { IReviewWidgetPagerReviews, ReviewWidgetPagerReviews } from \"./reviewWidgetPagerReviews\";\r\nimport { IReviewWidgetPagerShowMore, ReviewWidgetPagerShowMore } from \"./reviewWidgetPagerShowMore\";\r\n\r\nexport interface IReviewWidgetPager extends IInstanceComponentBase {\r\n isEof: boolean;\r\n page: number;\r\n update:(selectedRating:number, reviewsSummary: IReviewsSummary, page: number, newReviews: string, clearReviews: boolean) => void;\r\n}\r\n\r\nexport class ReviewWidgetPager extends InstanceComponentBase implements IReviewWidgetPager {\r\n public reviewWidgetPagerRatingsFilter: IReviewWidgetPagerRatingsFilter;\r\n public reviewWidgetPagerReviews: IReviewWidgetPagerReviews;\r\n public reviewWidgetPagerShowMore: IReviewWidgetPagerShowMore;\r\n public isEof: boolean;\r\n public isDisabled: boolean;\r\n public page: number;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.setPage();\r\n this.setIsEof();\r\n this.setIsDisabled();\r\n\r\n this.createReviewWidgetPagerRatingsFilter();\r\n this.createReviewWidgetPagerReviews();\r\n this.createReviewWidgetPagerShowMore();\r\n }\r\n\r\n createReviewWidgetPagerRatingsFilter():void{\r\n let reviewWidgetPagerRatingsFilterElement: HTMLElement | null = this.getHtmlElementForReviewWidgetPagerRatingsFilter();\r\n if (reviewWidgetPagerRatingsFilterElement) {\r\n this.reviewWidgetPagerRatingsFilter = new ReviewWidgetPagerRatingsFilter(reviewWidgetPagerRatingsFilterElement);\r\n }\r\n }\r\n\r\n getHtmlElementForReviewWidgetPagerRatingsFilter():HTMLElement{\r\n let reviewWidgetPagerRatingsFilterElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewComponents.reviewWidgetPagerRatingsFilter))\r\n return reviewWidgetPagerRatingsFilterElement;\r\n }\r\n\r\n createReviewWidgetPagerReviews():void{\r\n let reviewWidgetPagerReviewsElement: HTMLElement | null = this.getHtmlElementForReviewWidgetPagerReviews();\r\n if (reviewWidgetPagerReviewsElement) {\r\n this.reviewWidgetPagerReviews = new ReviewWidgetPagerReviews(reviewWidgetPagerReviewsElement);\r\n }\r\n }\r\n\r\n getHtmlElementForReviewWidgetPagerReviews():HTMLElement{\r\n let reviewWidgetPagerReviewsElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewComponents.reviewWidgetPagerReviews))\r\n return reviewWidgetPagerReviewsElement;\r\n }\r\n\r\n createReviewWidgetPagerShowMore():void{\r\n let reviewWidgetPagerShowMoreElement: HTMLElement | null = this.getHtmlElementForReviewWidgetPagerShowMore();\r\n if (reviewWidgetPagerShowMoreElement) {\r\n this.reviewWidgetPagerShowMore = new ReviewWidgetPagerShowMore(reviewWidgetPagerShowMoreElement, this.isEof, this.page, this.isDisabled, this.reviewWidgetPagerRatingsFilter.selectedRating);\r\n }\r\n }\r\n\r\n getHtmlElementForReviewWidgetPagerShowMore():HTMLElement{\r\n let reviewWidgetPagerShowMoreElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetPagerShowMore.reviewWidgetPagerShowMore))\r\n return reviewWidgetPagerShowMoreElement;\r\n }\r\n \r\n setPage(): void {\r\n this.page = +this.htmlElement.getAttribute(AttributeEnums.ReviewComponents.reviewWidgetPagerPage);\r\n }\r\n\r\n writeToPage(page: number): void {\r\n this.htmlElement.setAttribute(AttributeEnums.ReviewComponents.reviewWidgetPagerPage, page.toString());\r\n }\r\n\r\n updatePage(page: number): void {\r\n this.writeToPage(page);\r\n this.setPage();\r\n }\r\n\r\n setIsEof(): void {\r\n if(this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewComponents.reviewWidgetPagerIsEof, 'true'))){\r\n this.isEof = true;\r\n }else{\r\n this.isEof = false;\r\n }\r\n }\r\n\r\n updateIsEof(): void {\r\n this.setIsEof();\r\n }\r\n\r\n setIsDisabled(): void {\r\n this.isDisabled = this.isEof;\r\n }\r\n updateIsDisabled(): void {\r\n this.setIsDisabled();\r\n }\r\n\r\n updateReviewWidgetPagerShowMore(selectedRating:number){\r\n this.reviewWidgetPagerShowMore.update(this.isEof, this.page, this.isDisabled, selectedRating);\r\n }\r\n\r\n update(selectedRating:number, reviewsSummary: IReviewsSummary, page: number, newReviews: string, clearReviews: boolean):void{\r\n this.reviewWidgetPagerReviews.update(newReviews, clearReviews);\r\n this.reviewWidgetPagerRatingsFilter.update(selectedRating, reviewsSummary);\r\n this.updatePage(page);\r\n this.updateIsEof();\r\n this.updateIsDisabled();\r\n this.updateReviewWidgetPagerShowMore(selectedRating);\r\n\r\n console.log(`ReviewWidgetPager: update`);\r\n }\r\n\r\n dispose() {\r\n try {\r\n console.log(`ReviewWidgetPager: dispose`);\r\n \r\n if (this.reviewWidgetPagerRatingsFilter) {\r\n this.reviewWidgetPagerRatingsFilter.dispose();\r\n }\r\n if (this.reviewWidgetPagerReviews) {\r\n this.reviewWidgetPagerReviews.dispose();\r\n }\r\n if (this.reviewWidgetPagerShowMore) {\r\n this.reviewWidgetPagerShowMore.dispose();\r\n }\r\n \r\n } catch (error) {\r\n console.log('ReviewWidgetPager: dispose ERROR', error);\r\n }\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IReviewsAggregate, IReviewsSummary } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetPagerRatingsFilterOption, ReviewWidgetPagerRatingsFilterOption } from \"./reviewWidgetPagerRatingsFilterOption\";\r\nimport { IReviewWidgetSummaryFilterComponentBase, ReviewWidgetSummaryFilterComponentBase } from \"./reviewWidgetSummaryFilterComponentBase\";\r\n\r\nexport interface IReviewWidgetPagerRatingsFilter extends IReviewWidgetSummaryFilterComponentBase {\r\n selectedRating: number;\r\n update:(selectedRating:number, reviewsSummary: IReviewsSummary) => void;\r\n}\r\n\r\nexport class ReviewWidgetPagerRatingsFilter extends ReviewWidgetSummaryFilterComponentBase implements IReviewWidgetPagerRatingsFilter {\r\n public selectedRating: number;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n }\r\n\r\n componentOptionFactory(currentHtmlElement: HTMLElement): ReviewWidgetPagerRatingsFilterOption{\r\n\r\n let currentRating = currentHtmlElement.getAttribute(AttributeEnums.ReviewWidgetRatingsOption.ratingsOptionRating);\r\n let isDisabled = this.getStateForIsDisabledFilterOption(+currentRating);\r\n let isSelected = this.getStateForIsSelectedFilterOption(+currentRating);\r\n let optionElement: ReviewWidgetPagerRatingsFilterOption = new ReviewWidgetPagerRatingsFilterOption(currentHtmlElement, isDisabled, isSelected);\r\n return optionElement;\r\n }\r\n\r\n setIReviewWidgetPagerRatingsFilterOption(ratingsFilterOption: IReviewWidgetPagerRatingsFilterOption):void {\r\n ratingsFilterOption.isDisabled = this.getStateForIsDisabledFilterOption(ratingsFilterOption.rating);\r\n ratingsFilterOption.isSelected = this.getStateForIsSelectedFilterOption(ratingsFilterOption.rating);\r\n ratingsFilterOption.update(ratingsFilterOption.isSelected, ratingsFilterOption.isDisabled);\r\n }\r\n\r\n updateIReviewWidgetPagerRatingsFilterOptions():void{\r\n this.componentOptions.forEach(ratingsFilterOption => {\r\n this.setIReviewWidgetPagerRatingsFilterOption(ratingsFilterOption as IReviewWidgetPagerRatingsFilterOption);\r\n }); \r\n }\r\n\r\n updateState(selectedRating: number, reviewsSummary: IReviewsSummary):void{\r\n this.updateSelectedRating(selectedRating);\r\n }\r\n\r\n updateDisplay():void{\r\n this.updateIReviewWidgetPagerRatingsFilterOptions();\r\n }\r\n\r\n update(selectedRating:number, reviewsSummary: IReviewsSummary):void{\r\n this.updateBase(reviewsSummary);\r\n this.updateState(selectedRating, reviewsSummary);\r\n this.updateDisplay();\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { TypeUtils } from \"../../shared/utilities/typeUtils\";\r\nimport { IReviewWidgetOptionBase, ReviewWidgetOptionBase } from \"./reviewWidgetOptionBase\";\r\n\r\nexport interface IReviewWidgetPagerRatingsFilterOption extends IReviewWidgetOptionBase {\r\n update: (isSelected: boolean, isDisabled: boolean) => void;\r\n}\r\n\r\nexport class ReviewWidgetPagerRatingsFilterOption extends ReviewWidgetOptionBase implements IReviewWidgetPagerRatingsFilterOption {\r\n public isSelected: boolean;\r\n constructor(public htmlElement: HTMLElement, isDisabled: boolean, isSelected: boolean) {\r\n super(htmlElement, isDisabled, isSelected);\r\n\r\n this.updateIsSelected(isSelected);\r\n }\r\n\r\n setIsSelectedCssClass():void{\r\n console.log(`ReviewWidgetPagerRatingsFilterOption: setActiveCssClass - ${this.isSelected}`);\r\n if(this.isSelected){\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbActive);\r\n }else{\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbActive);\r\n }\r\n }\r\n\r\n updateIsSelected(isSelected: boolean):void{\r\n this.isSelected = isSelected;\r\n this.setIsSelectedCssClass();\r\n }\r\n\r\n update(isSelected: boolean, isDisabled: boolean):void{\r\n this.updateIsSelected(isSelected);\r\n this.updateIsDisabled(isDisabled);\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { ReadMoreInterface } from \"../readMore/interfaces\";\r\nimport { ReadMore } from \"../readMore/readMoreController\";\r\nimport { IShowHide, ShowHide } from \"../showHide/showHideController\";\r\n\r\nexport interface IReviewWidgetPagerReview extends IInstanceComponentBase {\r\n readMore: ReadMoreInterface;\r\n}\r\n\r\nexport class ReviewWidgetPagerReview extends InstanceComponentBase implements IReviewWidgetPagerReview {\r\n public readMore: ReadMoreInterface;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.initialiseReadMore();\r\n }\r\n\r\n initialiseReadMore() {\r\n try {\r\n let readMoreToggleElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReadMore.ReadMoreToggle)) as HTMLElement;\r\n let readMoreContentElement: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReadMore.ReadMoreContent)) as HTMLElement;\r\n if (readMoreToggleElement != null && readMoreContentElement != null) {\r\n this.readMore = new ReadMore(readMoreToggleElement, readMoreContentElement);\r\n }\r\n } catch (error) {\r\n console.log('ReviewWidgetPagerReview: initialiseReadMore Error', error);\r\n }\r\n }\r\n\r\n dispose() {\r\n try {\r\n console.log(`ReviewWidgetPagerReview: dispose`);\r\n\r\n if (this.readMore != null) {\r\n this.readMore.dispose();\r\n }\r\n \r\n } catch (error) {\r\n console.log(`ReviewWidgetPagerReview: dispose Error:`, error);\r\n }\r\n }\r\n\r\n delete(): void {\r\n \r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IReviewWidgetPagerReview, ReviewWidgetPagerReview } from \"./reviewWidgetPagerReview\";\r\n\r\nexport interface IReviewWidgetPagerReviews extends IInstanceComponentBase {\r\n update: (newReviews: string, clearReviews: boolean) => void;\r\n}\r\n\r\nexport class ReviewWidgetPagerReviews extends InstanceComponentBase implements IReviewWidgetPagerReviews {\r\n public reviewWidgetPagerReviewList: IReviewWidgetPagerReview[];\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.reviewWidgetPagerReviewListFactory();\r\n }\r\n\r\n getHtmlElementsReviewWidgetPagerReview():NodeListOf<HTMLElement> {\r\n let reviewWidgetPagerReviewElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewComponents.reviewWidgetPagerReview))\r\n return reviewWidgetPagerReviewElements;\r\n }\r\n\r\n reviewWidgetPagerReviewListFactory():void {\r\n let reviewWidgetPagerReviewElements = this.getHtmlElementsReviewWidgetPagerReview();\r\n let reviewList = new Array<ReviewWidgetPagerReview>();\r\n for(let x = 0; x < reviewWidgetPagerReviewElements.length; x += 1){\r\n let review = new ReviewWidgetPagerReview(reviewWidgetPagerReviewElements[x]);\r\n reviewList.push(review);\r\n }\r\n this.reviewWidgetPagerReviewList = reviewList;\r\n }\r\n\r\n updateReviews(newReviews: string):void{\r\n this.htmlElement.insertAdjacentHTML(\"beforeend\", newReviews);\r\n }\r\n \r\n clearAllReviewsFromHtmlElement():void{\r\n this.htmlElement.innerHTML = '';\r\n }\r\n\r\n update(newReviews: string, clearAllReviews: boolean):void{\r\n this.disposeReviewList();\r\n if(clearAllReviews){\r\n this.clearAllReviewsFromHtmlElement();\r\n }\r\n this.updateReviews(newReviews);\r\n this.reviewWidgetPagerReviewListFactory();\r\n }\r\n\r\n disposeReviewList():void{\r\n try {\r\n this.reviewWidgetPagerReviewList.forEach((reviewWidgetPagerReview: IReviewWidgetPagerReview) => {\r\n reviewWidgetPagerReview.dispose();\r\n });\r\n \r\n this.reviewWidgetPagerReviewList = [];\r\n } catch (error) {\r\n console.log('ReviewWidgetPagerReviews disposeReviewList: failed to dispose ERROR: ', error);\r\n }\r\n }\r\n\r\n dispose() {\r\n try {\r\n console.log(`ReviewWidgetPagerReviews: dispose`);\r\n \r\n if (this.reviewWidgetPagerReviewList) {\r\n this.disposeReviewList();\r\n }\r\n \r\n } catch (error) {\r\n console.log('ReviewWidgetPagerReviews: dispose ERROR', error);\r\n }\r\n }\r\n\r\n delete(): void {\r\n \r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { TypeUtils } from \"../../shared/utilities/typeUtils\";\r\n\r\nexport interface IReviewWidgetPagerShowMore extends IInstanceComponentBase {\r\n isEof: boolean;\r\n page: number;\r\n isDisabled: boolean;\r\n selectedRating:number;\r\n update: (isEof: boolean, page: number, isDisabled: boolean, selectedRating:number) => void;\r\n}\r\n\r\nexport class ReviewWidgetPagerShowMore extends InstanceComponentBase implements IReviewWidgetPagerShowMore {\r\n private readonly _handleShowMoreClick;\r\n \r\n constructor(public htmlElement: HTMLElement, public isEof: boolean, public page: number, public isDisabled: boolean, public selectedRating:number) {\r\n super(htmlElement);\r\n\r\n this._handleShowMoreClick = this.handleShowMoreClick.bind(this);\r\n \r\n this.attachShowMoreClickEventListener();\r\n }\r\n\r\n attachShowMoreClickEventListener() {\r\n console.log('ReviewWidgetPagerShowMore: attachShowMoreClickEventListener');\r\n this.htmlElement.addEventListener('click', this._handleShowMoreClick);\r\n }\r\n\r\n removeShowMoreClickEventListener() {\r\n console.log('ReviewWidgetPagerShowMore: removeShowMoreClickEventListener');\r\n this.htmlElement.removeEventListener('click', this._handleShowMoreClick);\r\n }\r\n\r\n handleShowMoreClick(e: Event) {\r\n console.log('ReviewWidgetPagerShowMore: handleShowMoreClick');\r\n this.htmlElement.dispatchEvent(this.showMoreCustomEvent(this.isEof, this.page, this.isDisabled, this.selectedRating));\r\n }\r\n\r\n showMoreCustomEvent(isEof: boolean, page: number, isDisabled: boolean, selectedRating: number) {\r\n console.log(`ReviewWidgetPagerShowMore: showMoreCustomEvent isEof: ${isEof} page: ${page} isDisabled: ${isDisabled} selectedRating: ${selectedRating}`);\r\n return new CustomEvent(CustomEventEnums.ReviewWidgetPagerShowMore, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'isEof': isEof,\r\n 'page': page,\r\n 'isDisabled': isDisabled,\r\n 'selectedRating': selectedRating\r\n }\r\n });\r\n }\r\n\r\n setIsEof(isEof: boolean): void {\r\n this.isEof = isEof;\r\n }\r\n\r\n setPage(page: number): void {\r\n this.page = page;\r\n }\r\n\r\n setSelectedRating(selectedRating:number): void {\r\n this.selectedRating = selectedRating;\r\n }\r\n\r\n setIsDisabledCssClass():void{\r\n console.log(`ReviewWidgetPagerShowMore: setIsDisabledCssClass - ${this.isDisabled}`);\r\n if(this.isDisabled){\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbDisabled);\r\n }else{\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbDisabled);\r\n }\r\n }\r\n\r\n setIsDisabled(isDisabled: boolean):void{\r\n this.isDisabled = isDisabled;\r\n this.setIsDisabledCssClass();\r\n }\r\n \r\n update(isEof: boolean, page: number, isDisabled: boolean, selectedRating:number): void {\r\n this.setIsEof(isEof);\r\n this.setPage(page);\r\n this.setIsDisabled(isDisabled);\r\n this.setSelectedRating(selectedRating);\r\n }\r\n\r\n dispose() {\r\n try {\r\n console.log(`ReviewWidgetPagerShowMore: dispose`);\r\n \r\n this.removeShowMoreClickEventListener();\r\n \r\n } catch (error) {\r\n console.log('ReviewWidgetPagerShowMore: dispose ERROR', error);\r\n }\r\n }\r\n}","import { InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IReviewsSummary } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetSummaryComponentOption, ReviewWidgetSummaryComponentOption } from \"./reviewWidgetSummaryComponentOption\";\r\nimport { IReviewWidgetSummaryFilterComponentBase, ReviewWidgetSummaryFilterComponentBase } from \"./reviewWidgetSummaryFilterComponentBase\";\r\n\r\nexport interface IReviewWidgetSummaryComponent extends IReviewWidgetSummaryFilterComponentBase {\r\n update: (reviewsSummary: IReviewsSummary) => void;\r\n}\r\n\r\nexport class ReviewWidgetSummaryComponent extends ReviewWidgetSummaryFilterComponentBase implements IReviewWidgetSummaryComponent {\r\n public selectedRating: number;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n }\r\n\r\n componentOptionFactory(currentHtmlElement: HTMLElement): ReviewWidgetSummaryComponentOption {\r\n\r\n let currentRating = currentHtmlElement.getAttribute(AttributeEnums.ReviewWidgetRatingsOption.ratingsOptionRating);\r\n let totalReviews = this.getTotalReviewsFromIReviewsSummary();\r\n let ratingCount = this.getRatingCountFromReviewsSummary(+currentRating);\r\n let isDisabled = this.getStateForIsDisabledFilterOption(+currentRating);\r\n let isSelected = this.getStateForIsSelectedFilterOption(+currentRating);\r\n let optionElement: ReviewWidgetSummaryComponentOption = new ReviewWidgetSummaryComponentOption(currentHtmlElement, isDisabled, isSelected, totalReviews, ratingCount);\r\n return optionElement;\r\n }\r\n\r\n getTotalReviewsFromIReviewsSummary():number{\r\n let totalReviews: number = 0;\r\n\r\n totalReviews += this.reviewsSummary.totalFiveStars;\r\n totalReviews += this.reviewsSummary.totalFourStars;\r\n totalReviews += this.reviewsSummary.totalThreeStars;\r\n totalReviews += this.reviewsSummary.totalTwoStars;\r\n totalReviews += this.reviewsSummary.totalOneStars;\r\n\r\n return totalReviews;\r\n }\r\n\r\n getRatingCountFromReviewsSummary(currentRating: number): number {\r\n if (currentRating === 5) {\r\n return this.reviewsSummary.totalFiveStars;\r\n }\r\n if (currentRating === 4) {\r\n return this.reviewsSummary.totalFourStars;\r\n }\r\n if (currentRating === 3) {\r\n return this.reviewsSummary.totalThreeStars;\r\n }\r\n if (currentRating === 2) {\r\n return this.reviewsSummary.totalTwoStars;\r\n }\r\n if (currentRating === 1) {\r\n return this.reviewsSummary.totalOneStars;\r\n }\r\n }\r\n\r\n setIReviewWidgetSummaryComponentOption(ratingsComponentOption: IReviewWidgetSummaryComponentOption): void {\r\n ratingsComponentOption.isDisabled = this.getStateForIsDisabledFilterOption(ratingsComponentOption.rating);\r\n ratingsComponentOption.isSelected = this.getStateForIsSelectedFilterOption(ratingsComponentOption.rating);\r\n ratingsComponentOption.ratingCount = this.getRatingCountFromReviewsSummary(ratingsComponentOption.rating);\r\n ratingsComponentOption.totalReviews = this.getTotalReviewsFromIReviewsSummary();\r\n ratingsComponentOption.update(ratingsComponentOption.isSelected, ratingsComponentOption.isDisabled, ratingsComponentOption.totalReviews, ratingsComponentOption.ratingCount);\r\n }\r\n\r\n updateIReviewWidgetSummaryComponentOptions(): void {\r\n this.componentOptions.forEach(ratingsComponentOption => {\r\n this.setIReviewWidgetSummaryComponentOption(ratingsComponentOption as IReviewWidgetSummaryComponentOption);\r\n });\r\n }\r\n\r\n updateSelectedRating(selectedRating: number): void {\r\n this.writeToSelectedRating(selectedRating);\r\n this.setSelectedRating();\r\n }\r\n \r\n updateDisplay():void{\r\n this.updateIReviewWidgetSummaryComponentOptions();\r\n }\r\n\r\n update(reviewsSummary: IReviewsSummary): void {\r\n this.updateBase(reviewsSummary);\r\n this.updateDisplay();\r\n }\r\n}","import { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IReviewWidgetOptionBase, ReviewWidgetOptionBase } from \"./reviewWidgetOptionBase\";\r\n\r\nexport interface IReviewWidgetSummaryComponentOption extends IReviewWidgetOptionBase {\r\n totalReviews: number;\r\n ratingCount: number;\r\n update: (isDisabled: boolean, isSelected: boolean, totalReviews: number, ratingCount: number) => void;\r\n}\r\n\r\nexport class ReviewWidgetSummaryComponentOption extends ReviewWidgetOptionBase implements IReviewWidgetSummaryComponentOption {\r\n constructor(public htmlElement: HTMLElement, isDisabled: boolean, isSelected: boolean, public totalReviews: number, public ratingCount: number ) {\r\n super(htmlElement, isDisabled, isSelected);\r\n }\r\n \r\n setOptionMeter(): void {\r\n let summaryOptionMeter: HTMLMeterElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetRatingsOption.ratingsOptionMeter))\r\n summaryOptionMeter.value = this.ratingCount;\r\n summaryOptionMeter.max = this.totalReviews;\r\n }\r\n\r\n setOptionReviewTotal(): void {\r\n let summaryOptionReviewTotal: HTMLElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetRatingsOption.ratingsOptionTotal))\r\n summaryOptionReviewTotal.innerHTML = `${this.ratingCount}`;\r\n }\r\n\r\n setIsSelectedCssClass():void{\r\n console.log(`ReviewWidgetSummaryComponentOption: setActiveCssClass - ${this.isSelected}`);\r\n if(this.isSelected){\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbActive);\r\n }else{\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbActive);\r\n }\r\n }\r\n\r\n updateIsSelected(isSelected: boolean):void{\r\n this.isSelected = isSelected;\r\n this.setIsSelectedCssClass();\r\n }\r\n\r\n updateOptionMeter(totalReviews: number, ratingCount: number):void{\r\n this.totalReviews = totalReviews;\r\n this.ratingCount = ratingCount;\r\n this.setOptionMeter();\r\n }\r\n\r\n updateOptionReviewTotal(totalReviews: number):void{\r\n this.totalReviews = totalReviews;\r\n this.setOptionReviewTotal();\r\n }\r\n\r\n update(isSelected: boolean, isDisabled: boolean, totalReviews: number, ratingCount: number):void{\r\n this.updateIsSelected(isSelected);\r\n this.updateIsDisabled(isDisabled);\r\n this.updateOptionMeter(totalReviews, ratingCount);\r\n this.updateOptionReviewTotal(totalReviews);\r\n }\r\n\r\n dispose(): void {\r\n \r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { IReviewsSummary } from \"./reviewsAggregate\";\r\nimport { IReviewWidgetOptionBase } from \"./reviewWidgetOptionBase\";\r\nimport { IReviewWidgetSummaryComponentOption, ReviewWidgetSummaryComponentOption } from \"./reviewWidgetSummaryComponentOption\";\r\n\r\nexport interface IReviewWidgetSummaryFilterComponentBase extends IInstanceComponentBase {\r\n reviewsSummary: IReviewsSummary;\r\n}\r\n\r\nexport abstract class ReviewWidgetSummaryFilterComponentBase extends InstanceComponentBase implements IReviewWidgetSummaryFilterComponentBase {\r\n public componentOptions : IReviewWidgetOptionBase[];\r\n public reviewsSummary: IReviewsSummary = {} as IReviewsSummary;\r\n public selectedRating: number;\r\n \r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n \r\n this.setSelectedRating();\r\n this.setReviewSummaryFromReviewSummaryAttribute();\r\n this.reviewWidgetSummaryComponentOptionsFactory();\r\n }\r\n\r\n reviewWidgetSummaryComponentOptionsFactory():void{\r\n try {\r\n console.log('ReviewWidgetSummaryFilterComponentBase: reviewWidgetSummaryComponentOptionFactory - Started');\r\n \r\n this.componentOptions = [];\r\n \r\n let optionElements: NodeListOf<HTMLElement> | null = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.ReviewWidgetRatingsOption.ratingsOption)) as NodeListOf<HTMLElement>;\r\n \r\n if(optionElements !== null){\r\n for (let i = 0; i < optionElements.length; i += 1) {\r\n let summaryOption: IReviewWidgetOptionBase =this.componentOptionFactory(optionElements[i]);\r\n this.componentOptions.push(summaryOption);\r\n }\r\n }\r\n \r\n console.log('ReviewWidgetSummaryFilterComponentBase: reviewWidgetSummaryComponentOptionFactory - Finished');\r\n } catch (error) {\r\n console.log(\"ReviewWidgetSummaryFilterComponentBase: reviewWidgetSummaryComponentOptionFactory ERROR: \", error);\r\n }\r\n }\r\n\r\n\r\n abstract componentOptionFactory(currentHtmlElement: HTMLElement): IReviewWidgetOptionBase;\r\n\r\n getStateForIsDisabledFilterOption(currentRating: number):boolean{\r\n let isDisabled = true;\r\n if(currentRating === 1 && this.reviewsSummary.totalOneStars > 0){\r\n isDisabled = false;\r\n return isDisabled;\r\n }\r\n if(currentRating === 2 && this.reviewsSummary.totalTwoStars > 0){\r\n isDisabled = false;\r\n return isDisabled;\r\n }\r\n if(currentRating === 3 && this.reviewsSummary.totalThreeStars > 0){\r\n isDisabled = false;\r\n return isDisabled;\r\n }\r\n if(currentRating === 4 && this.reviewsSummary.totalFourStars > 0){\r\n isDisabled = false;\r\n return isDisabled;\r\n }\r\n if(currentRating === 5 && this.reviewsSummary.totalFiveStars > 0){\r\n isDisabled = false;\r\n return isDisabled;\r\n }\r\n if(currentRating === -1){\r\n isDisabled = false;\r\n return isDisabled;\r\n }\r\n return isDisabled;\r\n }\r\n\r\n getStateForIsSelectedFilterOption(currentRating: number): boolean{\r\n return currentRating === this.selectedRating;\r\n }\r\n\r\n setSelectedRating(): void {\r\n this.selectedRating = +this.htmlElement.getAttribute(AttributeEnums.ReviewComponents.reviewWidgetSelectedRating);\r\n }\r\n\r\n writeToSelectedRating(selectedRating: number): void {\r\n this.htmlElement.setAttribute(AttributeEnums.ReviewComponents.reviewWidgetSelectedRating, selectedRating.toString());\r\n }\r\n\r\n updateSelectedRating(selectedRating: number): void {\r\n this.writeToSelectedRating(selectedRating);\r\n this.setSelectedRating();\r\n }\r\n\r\n setReviewSummaryFromReviewSummaryAttribute(){\r\n let reviewSummaryValueString = this.htmlElement.getAttribute(AttributeEnums.ReviewWidgetSummaryFilterComponentBase.ReviewsSummary);\r\n let reviewsSummaryArray = reviewSummaryValueString.split(',');\r\n this.reviewsSummary = { \r\n totalOneStars: +reviewsSummaryArray[0], \r\n totalTwoStars: +reviewsSummaryArray[1],\r\n totalThreeStars: +reviewsSummaryArray[2],\r\n totalFourStars: +reviewsSummaryArray[3],\r\n totalFiveStars: +reviewsSummaryArray[4]\r\n\r\n } as IReviewsSummary;\r\n }\r\n\r\n writeToReviewSummaryFromReviewSummaryAttribute(reviewsSummary: IReviewsSummary): void {\r\n let reviewsSummaryString: string = `${reviewsSummary.totalOneStars},${reviewsSummary.totalTwoStars},${reviewsSummary.totalThreeStars},${reviewsSummary.totalFourStars},${reviewsSummary.totalFiveStars}`;\r\n this.htmlElement.setAttribute(AttributeEnums.ReviewWidgetSummaryFilterComponentBase.ReviewsSummary, reviewsSummaryString);\r\n }\r\n\r\n updateReviewSummary(reviewsSummary: IReviewsSummary): void {\r\n this.writeToReviewSummaryFromReviewSummaryAttribute(reviewsSummary);\r\n this.setReviewSummaryFromReviewSummaryAttribute();\r\n }\r\n \r\n updateBase(reviewsSummary: IReviewsSummary):void{\r\n this.updateReviewSummary(reviewsSummary);\r\n }\r\n\r\n dispose()\r\n {\r\n try {\r\n console.log(`ReviewWidgetSummaryFilterComponentBase: dispose`);\r\n \r\n if (this.componentOptions) {\r\n\r\n this.componentOptions.forEach(componentOption => {\r\n componentOption.dispose();\r\n });\r\n }\r\n \r\n } catch (error) {\r\n console.log('ReviewWidgetSummaryFilterComponentBase: dispose ERROR', error);\r\n }\r\n }\r\n}","import { AsyncUtils } from \"../../shared/utilities/asyncUtils\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { SwipedEventEnums } from \"../../shared/utilities/enums/swipedEventEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { BaseMediaTile } from \"../mediaTile/baseMediaTile\";\r\nimport { SelectableCarousel, ISelectableCarousel } from \"./selectableCarousel\";\r\n\r\n\r\nexport interface IBasePagingSelectableCarousel extends ISelectableCarousel {\r\n\r\n reinitialiseCarousel: () => void;\r\n isSwipeable: () => boolean;\r\n cellsPerPage: number;\r\n}\r\n\r\nexport abstract class BasePagingSelectableCarousel extends SelectableCarousel implements IBasePagingSelectableCarousel {\r\n\r\n protected carouselPrevElement: HTMLElement;\r\n protected carouselNextElement: HTMLElement;\r\n protected sliderElement: HTMLElement;\r\n\r\n protected occupiedCellsElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(`${HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.Cell)}:not(${HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.FillerCell)})`);\r\n\r\n public cellsPerPage: number;\r\n public currentPage: number;\r\n\r\n private readonly _handleSwipedUp;\r\n private readonly _handleSwipedDown;\r\n private readonly _handleSwipedLeft;\r\n private readonly _handleSwipedRight;\r\n\r\n constructor(public htmlElement: Element, carouselOrientation: UtilityEnums.ComponentOrientation, topLevelHtmlElement?: HTMLElement) {\r\n super(htmlElement, carouselOrientation, topLevelHtmlElement);\r\n\r\n this.carouselPrevElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PagingSelectableCarousel.Prev));\r\n this.carouselNextElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PagingSelectableCarousel.Next));\r\n this.sliderElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PagingSelectableCarousel.Slider));\r\n //.totalOccupiedCells = this.occupiedCellsElements.length;\r\n this.cellsPerPage = this.getCellsPerPage();\r\n this.currentPage = this.getInitialPage();\r\n\r\n this._handleSwipedUp = this.handleSwipedUp.bind(this);\r\n this._handleSwipedDown = this.handleSwipedDown.bind(this);\r\n this._handleSwipedLeft = this.handleSwipedLeft.bind(this);\r\n this._handleSwipedRight = this.handleSwipedRight.bind(this);\r\n\r\n this.setCarouselShowHideArrows();\r\n this.attachSwipedUpEventListener();\r\n this.attachSwipedDownEventListener();\r\n this.attachSwipedLeftEventListener();\r\n this.attachSwipedRightEventListener();\r\n }\r\n\r\n //Carousel Events \r\n abstract attachCarouselPagePrevClickEventListener(): void;\r\n abstract removeCarouselPagePrevClickEventListener(): void;\r\n\r\n abstract attachCarouselPageNextClickEventListener(): void;\r\n abstract removeCarouselPageNextClickEventListener(): void;\r\n\r\n abstract attachViewportDimensionsChangedEventListener(): void;\r\n abstract removeViewportDimensionsChangedEventListener(): void;\r\n\r\n //Touch Events\r\n attachSwipedUpEventListener(): void {\r\n this.htmlElement.addEventListener(SwipedEventEnums.SwipedUp, this._handleSwipedUp);\r\n }\r\n removeSwipedUpEventListener(): void {\r\n this.htmlElement.removeEventListener(SwipedEventEnums.SwipedUp, this._handleSwipedUp);\r\n }\r\n\r\n attachSwipedDownEventListener(): void {\r\n this.htmlElement.addEventListener(SwipedEventEnums.SwipedDown, this._handleSwipedDown);\r\n }\r\n removeSwipedDownEventListener(): void {\r\n this.htmlElement.addEventListener(SwipedEventEnums.SwipedDown, this._handleSwipedDown);\r\n }\r\n\r\n attachSwipedLeftEventListener(): void {\r\n this.htmlElement.addEventListener(SwipedEventEnums.SwipedLeft, this._handleSwipedLeft);\r\n }\r\n removeSwipedLeftEventListener(): void {\r\n this.htmlElement.addEventListener(SwipedEventEnums.SwipedLeft, this._handleSwipedLeft);\r\n }\r\n\r\n attachSwipedRightEventListener(): void {\r\n this.htmlElement.addEventListener(SwipedEventEnums.SwipedRight, this._handleSwipedRight);\r\n }\r\n removeSwipedRightEventListener(): void {\r\n this.htmlElement.addEventListener(SwipedEventEnums.SwipedRight, this._handleSwipedRight);\r\n }\r\n\r\n handleSwipedUp(e: CustomEvent) {\r\n if (this.carouselOrientation == UtilityEnums.ComponentOrientation.Vertical && this.isSwipeable()) {\r\n AsyncUtils.delay(100).then(() => { this.moveCarouselToNextPosition(); });\r\n }\r\n }\r\n handleSwipedDown(e: CustomEvent) {\r\n if (this.carouselOrientation == UtilityEnums.ComponentOrientation.Vertical && this.isSwipeable()) {\r\n AsyncUtils.delay(100).then(() => { this.moveCarouselToPrevPosition(); });\r\n }\r\n }\r\n handleSwipedLeft(e: CustomEvent) {\r\n if (this.carouselOrientation == UtilityEnums.ComponentOrientation.Horizontal && this.isSwipeable()) {\r\n AsyncUtils.delay(100).then(() => { this.moveCarouselToNextPosition(); });\r\n }\r\n }\r\n handleSwipedRight(e: CustomEvent) {\r\n if (this.carouselOrientation == UtilityEnums.ComponentOrientation.Horizontal && this.isSwipeable()) {\r\n AsyncUtils.delay(100).then(() => { this.moveCarouselToPrevPosition(); });\r\n }\r\n }\r\n\r\n abstract moveCarouselToPrevPosition(): void;\r\n abstract moveCarouselToNextPosition(): void;\r\n abstract reinitialiseCarousel(): void;\r\n\r\n abstract getCellsPerPage(): number;\r\n abstract getInitialPage(): number;\r\n\r\n moveCarouselToPosition(position: number): void {\r\n\r\n console.log('BasePagingSelectableCarousel: moveCarouselToPosition' + position);\r\n let elemetToMoveToFirstPosition = this.carouselSliderElement.children[position];\r\n if (elemetToMoveToFirstPosition !== undefined) {\r\n let scrollPositionOfCarousel = this.carouselSliderElement;\r\n let offSetPositionOfCarousel = scrollPositionOfCarousel.getBoundingClientRect();\r\n let positionOfElemetToMoveToFirstPosition = elemetToMoveToFirstPosition.getBoundingClientRect();\r\n let posLeft = scrollPositionOfCarousel.scrollLeft + positionOfElemetToMoveToFirstPosition.left - offSetPositionOfCarousel.left;\r\n //let posTop = scrollPositionOfCarousel.scrollTop + positionOfElemetToMoveToFirstPosition.top - offSetPositionOfCarousel.top;\r\n //this.carouselSliderElement.scrollLeft = posLeft;\r\n this.carouselSliderElement.scrollTo({\r\n left: posLeft,\r\n //top: posTop,\r\n behavior: 'smooth'\r\n });\r\n } else {\r\n console.log(`BasePagingSelectableCarousel: moveCarouselToPosition, Element undefined error - position: ${position}, children ${this.carouselSliderElement.children.length}`);\r\n }\r\n }\r\n\r\n moveCarouselToPage(pageNumber: number) {\r\n try{\r\n console.log('BasePagingSelectableCarousel: moveCarouselToPage');\r\n let pageFirstPosition: number = ((pageNumber - 1) * this.cellsPerPage ) + 1;\r\n let pageFirstPositionZeroIndexed = pageFirstPosition - 1;\r\n this.moveCarouselToPosition(pageFirstPositionZeroIndexed);\r\n } catch(error){\r\n console.log('BasePagingSelectableCarousel: moveCarouselToPage - Error', error);\r\n }\r\n }\r\n\r\n getTotalPageCount(): number {\r\n let getTotalPageCountNumber = Math.ceil(this.totalOccupiedCells / this.cellsPerPage);\r\n return getTotalPageCountNumber;\r\n }\r\n\r\n hasPrevButton(): boolean {\r\n console.log(\"BasePagingSelectableCarousel: hasPrevButton\", this.currentPage);\r\n return (this.currentPage !== 1);\r\n }\r\n\r\n hasNextButton(): boolean {\r\n console.log(\"BasePagingSelectableCarousel: hasNextButton\", this.currentPage);\r\n return (this.currentPage !== this.getTotalPageCount());\r\n }\r\n\r\n isSwipeable() {\r\n return this.mediaTiles.every((tile: BaseMediaTile) => { return !tile.disableSwipe; });\r\n }\r\n\r\n disableCarouselShowHideArrowsWhenScrolling() {\r\n console.log('BasePagingSelectableCarousel: disableCarouselShowHideArrowsWhenScrolling');\r\n\r\n let that = this;\r\n let isScrolling: number;\r\n this.sliderElement.addEventListener('scroll', function (e) {\r\n that.carouselPrevElement.classList.add(StringEnums.CssClass.LbDisabled);\r\n that.carouselNextElement.classList.add(StringEnums.CssClass.LbDisabled);\r\n clearTimeout( isScrolling );\r\n isScrolling = window.setTimeout(function() {\r\n console.log('BasePagingSelectableCarousel: disableCarouselShowHideArrowsWhenScrolling - clear timeout after scroll ends');\r\n that.carouselPrevElement.classList.remove(StringEnums.CssClass.LbDisabled);\r\n that.carouselNextElement.classList.remove(StringEnums.CssClass.LbDisabled);\r\n }, 100);\r\n }, false);\r\n\r\n setTimeout(function () {\r\n console.log('BasePagingSelectableCarousel: disableCarouselShowHideArrowsWhenScrolling - clear timeout after 1 seconds');\r\n clearTimeout( isScrolling ); \r\n that.carouselPrevElement.classList.remove(StringEnums.CssClass.LbDisabled);\r\n that.carouselNextElement.classList.remove(StringEnums.CssClass.LbDisabled);\r\n }, 1000);\r\n }\r\n\r\n setCarouselShowHideArrows() {\r\n console.log('BasePagingSelectableCarousel: setCarouselShowHideArrows', this.carouselCurrentSelectedIndex);\r\n if (this.sliderElement !== undefined) {\r\n this.disableCarouselShowHideArrowsWhenScrolling();\r\n }\r\n this.carouselPrevElement.classList.remove(\"lb-hidden\");\r\n this.carouselNextElement.classList.remove(\"lb-hidden\");\r\n if (!this.hasPrevButton()) {\r\n this.carouselPrevElement.classList.add(\"lb-hidden\");\r\n }\r\n if (!this.hasNextButton()) {\r\n this.carouselNextElement.classList.add(\"lb-hidden\");\r\n }\r\n this.centerCarosuel();\r\n }\r\n\r\n centerCarosuel() {\r\n console.log('BasePagingSelectableCarousel: centerCarosuel');\r\n if (!this.hasPrevButton() && !this.hasNextButton()) {\r\n this.htmlElement.classList.add(\"lb_pagingSelectableCarousel-centerAlign\");\r\n } else {\r\n this.htmlElement.classList.remove(\"lb_pagingSelectableCarousel-centerAlign\");\r\n }\r\n }\r\n\r\n dispose(): void {\r\n this.removeCarouselPagePrevClickEventListener();\r\n this.removeCarouselPageNextClickEventListener();\r\n this.removeViewportDimensionsChangedEventListener();\r\n\r\n this.removeSwipedUpEventListener();\r\n this.removeSwipedDownEventListener();\r\n this.removeSwipedLeftEventListener();\r\n this.removeSwipedRightEventListener();\r\n super.dispose();\r\n }\r\n}","import { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { BasePagingSelectableCarousel, IBasePagingSelectableCarousel } from \"./basePagingSelectableCarousel\";\r\nimport { SelectableCarousel, ISelectableCarousel } from \"./selectableCarousel\";\r\n\r\n\r\nexport interface IPagingSelectableCarousel extends IBasePagingSelectableCarousel {\r\n\r\n navigateCarouselToFirstCellInCurrentPage: () => void;\r\n}\r\n\r\nexport class PagingSelectableCarousel extends BasePagingSelectableCarousel implements IPagingSelectableCarousel {\r\n\r\n private readonly _moveCarouselToNextPosition;\r\n private readonly _moveCarouselToPrevPosition;\r\n private readonly _reinitialiseCarousel;\r\n\r\n constructor(public htmlElement: Element, carouselOrientation: UtilityEnums.ComponentOrientation, topLevelHtmlElement?: HTMLElement) {\r\n super(htmlElement, carouselOrientation, topLevelHtmlElement);\r\n //this.totalOccupiedCells = this.occupiedCellsElements.length;\r\n //this.cellsPerPage = this.getCellsPerPage();\r\n //this.currentPage = this.getInitialPage();\r\n this.updateSizeOfSlider();\r\n this.addNonOccupiedCells();\r\n\r\n this._moveCarouselToNextPosition = this.moveCarouselToNextPosition.bind(this);\r\n this._moveCarouselToPrevPosition = this.moveCarouselToPrevPosition.bind(this);\r\n this._reinitialiseCarousel = this.reinitialiseCarousel.bind(this);\r\n\r\n\r\n this.attachCarouselPageNextClickEventListener();\r\n this.attachCarouselPagePrevClickEventListener();\r\n this.attachViewportDimensionsChangedEventListener();\r\n\r\n this.navigateCarouselToFirstCellInCurrentPage();\r\n }\r\n\r\n //Carousel Events \r\n attachCarouselPagePrevClickEventListener(): void {\r\n console.log('PagingSelectableCarousel: attachCarouselPagePrevClickEventListener');\r\n this.carouselPrevElement.addEventListener('click', this._moveCarouselToPrevPosition);\r\n }\r\n\r\n removeCarouselPagePrevClickEventListener(): void {\r\n this.carouselPrevElement.removeEventListener('click', this._moveCarouselToPrevPosition);\r\n }\r\n\r\n attachCarouselPageNextClickEventListener(): void {\r\n console.log('PagingSelectableCarousel: attachCarouselPageNextClickEventListener');\r\n this.carouselNextElement.addEventListener('click', this._moveCarouselToNextPosition);\r\n }\r\n\r\n removeCarouselPageNextClickEventListener(): void {\r\n this.carouselNextElement.removeEventListener('click', this._moveCarouselToNextPosition);\r\n }\r\n\r\n attachViewportDimensionsChangedEventListener(): void {\r\n console.log('PagingSelectableCarousel: attachViewportDimensionsChangedEventListener');\r\n document.addEventListener(CustomEventEnums.ViewportDimensionsChangedEvent, this._reinitialiseCarousel);\r\n }\r\n\r\n removeViewportDimensionsChangedEventListener(): void {\r\n document.removeEventListener(CustomEventEnums.ViewportDimensionsChangedEvent, this._reinitialiseCarousel);\r\n }\r\n\r\n reinitialiseCarousel(): void {\r\n console.log('PagingSelectableCarousel: reinitialiseCarousel');\r\n let firstCellOfPreResizeState = this.indexOfFirstCellInCurrentPage();\r\n console.log(`PagingSelectableCarousel: reinitialiseCarousel - firstCellOfPreResizeState ${firstCellOfPreResizeState}`);\r\n this.writeToSliderRemovingInlineStyles();\r\n this.removeNonOccupiedCells();\r\n this.totalOccupiedCells = this.occupiedCellsElements.length;\r\n this.cellsPerPage = this.getCellsPerPage();\r\n console.log(`PagingSelectableCarousel: reinitialiseCarousel - cellsPerPage ${this.cellsPerPage}`);\r\n this.currentPage = this.getPageForCell(firstCellOfPreResizeState);\r\n\r\n this.updateSizeOfSlider();\r\n this.addNonOccupiedCells();\r\n\r\n this.navigateCarouselToFirstCellInCurrentPage();\r\n };\r\n\r\n indexOfFirstCellInCurrentPage(): number {\r\n let firstCellInCurrentPage = this.indexOfLastCellInCurrentPage() - (this.cellsPerPage - 1);\r\n return firstCellInCurrentPage;\r\n }\r\n\r\n indexOfLastCellInCurrentPage(): number {\r\n let currentPage = this.currentPage;\r\n let lastCellInCurrentPage = (currentPage * this.cellsPerPage) - 1;\r\n console.log(`PagingSelectableCarousel: indexOfLastCellInCurrentPage - currentPage ${currentPage}, cellsPerPage ${this.cellsPerPage}, lastCellInCurrentPage ${lastCellInCurrentPage}`);\r\n return lastCellInCurrentPage;\r\n }\r\n\r\n navigateCarouselToFirstCellInCurrentPage(): void {\r\n let position = this.indexOfFirstCellInCurrentPage();\r\n console.log(`PagingSelectableCarousel: navigateCarouselToFirstCellInCurrentPage - position ${position}`);\r\n this.moveCarouselToPosition(position);\r\n this.setCarouselShowHideArrows();\r\n }\r\n\r\n getFirstElementOnDisplay() {\r\n console.log(`PagingSelectableCarousel: ComponentOrientation ${UtilityEnums.ComponentOrientation.Horizontal}`);\r\n let chooserTileWidth = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PagingSelectableCarousel.Cell)).getBoundingClientRect().width;\r\n if (this.carouselOrientation === UtilityEnums.ComponentOrientation.Horizontal) {\r\n let scrollPosition = Math.floor(this.carouselSliderElement.scrollLeft);\r\n return Math.ceil(scrollPosition / (chooserTileWidth+5));\r\n } else {\r\n let scrollPosition = Math.floor(this.carouselSliderElement.scrollTop);\r\n return Math.ceil(scrollPosition / 80);\r\n }\r\n }\r\n\r\n moveCarouselToPrevPosition(): void {\r\n console.log('PagingSelectableCarousel: moveCarouselToPrevPosition');\r\n if (this.hasPrevButton()) {\r\n let firstElementOnDisplayIndex: number = this.getFirstElementOnDisplay();\r\n let elementForFirstPositionIndex = firstElementOnDisplayIndex - this.cellsPerPage;\r\n this.moveCarouselToPosition(Math.max(0, elementForFirstPositionIndex));\r\n this.currentPage -= 1;\r\n this.setCarouselShowHideArrows();\r\n }\r\n }\r\n\r\n moveCarouselToNextPosition(): void {\r\n console.log('PagingSelectableCarousel: moveCarouselToNextPosition');\r\n if (this.hasNextButton()) {\r\n let firstElementOnDisplayIndex: number = this.getFirstElementOnDisplay();\r\n let elementForFirstPositionIndex = firstElementOnDisplayIndex + this.cellsPerPage;\r\n this.moveCarouselToPosition(elementForFirstPositionIndex);\r\n this.currentPage += 1;\r\n this.setCarouselShowHideArrows();\r\n }\r\n }\r\n\r\n getInitialPage(): number {\r\n let getInitialPageNumber = this.getPageForCell(this.carouselCurrentSelectedIndex);\r\n return getInitialPageNumber;\r\n }\r\n\r\n getPageForCell(cellIndex: number): number {\r\n let getPageForCellNumber = Math.ceil(((cellIndex ?? 0) + 1) / this.cellsPerPage);\r\n return getPageForCellNumber;\r\n }\r\n\r\n getCellsPerPage(): number {\r\n if (this.carouselOrientation === UtilityEnums.ComponentOrientation.Horizontal) {\r\n return this.getTileSlotsCountHorizontal();\r\n } else {\r\n return this.getTileSlotsCountVertical();\r\n }\r\n }\r\n \r\n setCurrentPage(): void {\r\n this.currentPage = this.getPageForCell(this.carouselCurrentSelectedIndex);\r\n }\r\n\r\n getTileSlotsCountVertical(): number {\r\n let chooser = this.htmlElement.getBoundingClientRect();\r\n let chooserButtonPrev = this.carouselPrevElement.getBoundingClientRect();\r\n let chooserButtonNext = this.carouselNextElement.getBoundingClientRect();\r\n let sliderHeight = chooser.height - (chooserButtonPrev.height + chooserButtonNext.height);\r\n let tileSlotCountHeight = Math.floor(sliderHeight / 75);\r\n console.log(`PagingSelectableCarousel: getTileSlotsCountVertical: ${tileSlotCountHeight}`);\r\n return tileSlotCountHeight;\r\n }\r\n\r\n getTileSlotsCountHorizontal(): number {\r\n let chooser = this.htmlElement.getBoundingClientRect();\r\n let chooserButtonPrev = this.carouselPrevElement.getBoundingClientRect();\r\n let chooserButtonNext = this.carouselNextElement.getBoundingClientRect();\r\n let chooserTileWidth = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PagingSelectableCarousel.Cell)).getBoundingClientRect().width;\r\n let sliderWidth = chooser.width - (chooserButtonPrev.width + chooserButtonNext.width);\r\n let tileSlotCountWidth = Math.floor(sliderWidth / chooserTileWidth);\r\n return tileSlotCountWidth;\r\n }\r\n\r\n updateSizeOfSlider(): void {\r\n console.log(`PagingSelectableCarousel: updateSizeOfSlider`);\r\n let chooserTileWidth = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PagingSelectableCarousel.Cell)).getBoundingClientRect().width;\r\n let totalTilesSize = this.cellsPerPage * ((this.carouselOrientation === UtilityEnums.ComponentOrientation.Horizontal) ? chooserTileWidth : 75);\r\n let totalGaps = (this.cellsPerPage - 1) * 5;\r\n if (this.carouselOrientation === UtilityEnums.ComponentOrientation.Horizontal) {\r\n let totalSize = totalTilesSize + totalGaps;\r\n this.writeToSliderWithStyleDimensions(totalSize);\r\n } else {\r\n let totalSize = totalTilesSize + totalGaps;\r\n this.writeToSliderWithStyleDimensions(totalSize);\r\n }\r\n }\r\n\r\n writeToSliderWithStyleDimensions(totalSize: number) {\r\n this.carouselSliderElement.setAttribute('style', 'flex:0 0 ' + totalSize + 'px');\r\n }\r\n\r\n writeToSliderRemovingInlineStyles() {\r\n this.carouselSliderElement.removeAttribute('style');\r\n }\r\n\r\n calculateNonOccupiedCellsRequired(): number {\r\n console.log(`PagingSelectableCarousel: calculateNonOccupiedCellsRequired totalpagecount ${this.getTotalPageCount()} cellsperpage ${this.cellsPerPage} totaloccupiedcells ${this.totalOccupiedCells}`);\r\n let calculateNonOccupiedCellsRequiredNumber = (this.getTotalPageCount() * this.cellsPerPage) - this.totalOccupiedCells;\r\n return calculateNonOccupiedCellsRequiredNumber;\r\n }\r\n\r\n addNonOccupiedCells(): void {\r\n console.log(`PagingSelectableCarousel: addNonOccupiedCells: ${this.calculateNonOccupiedCellsRequired()}`);\r\n for (let item = 0; item < this.calculateNonOccupiedCellsRequired(); item++) {\r\n this.carouselSliderElement.appendChild(this.createCell());\r\n }\r\n }\r\n\r\n removeNonOccupiedCells(): void {\r\n console.log('PagingSelectableCarousel: addNonOccupiedCells');\r\n console.log(`PagingSelectableCarousel: addNonOccupiedCells - nodelist`, this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.FillerCell)));\r\n this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.FillerCell)).forEach((fillerCellElement: HTMLElement) => fillerCellElement.remove());\r\n }\r\n\r\n createCell(): HTMLElement {\r\n let newCell = document.createElement(\"div\");\r\n newCell.classList.add('lb_selectableCarousel_cells_cell-filler', 'lb_selectableCarousel_cells_cell');\r\n newCell.setAttribute('data-selectable-carousel-filler-cell', '');\r\n return newCell;\r\n }\r\n\r\n dispose(): void {\r\n super.dispose();\r\n }\r\n}","import { AsyncUtils } from \"../../shared/utilities/asyncUtils\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { ResponsiveState } from \"../../shared/responsiveState\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"../../shared/utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\nimport { BaseMediaTile } from \"../mediaTile/baseMediaTile\";\r\nimport { mediaTileFactory } from \"../mediaTile/mediaTileFactory\";\r\nimport { NoEmitOnErrorsPlugin } from \"webpack\";\r\n\r\nexport interface ISelectableCarousel extends IInstanceComponentBase {\r\n\r\n carouselCurrentSelectedIndex: number | undefined;\r\n updateCarouselCurrentSelectedIndex: (index: number) => void;\r\n carouselOrientation: UtilityEnums.ComponentOrientation;\r\n deviceOrientation: UtilityEnums.DeviceOrientation;\r\n totalOccupiedCells: number;\r\n mediaTiles: BaseMediaTile[];\r\n topLevelHtmlElement: HTMLElement;\r\n}\r\n\r\nexport class SelectableCarousel extends InstanceComponentBase implements ISelectableCarousel {\r\n\r\n carouselCurrentSelectedIndex: number;\r\n\r\n protected carouselSliderElement: HTMLElement = this.getCarouselSliderElement();\r\n protected selectedCell: HTMLElement | null = this.getSelectedCellElement();\r\n\r\n protected occupiedCellsElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.Cell));\r\n private readonly _dispatchSelectedCarouselCellSelectedEvent;\r\n private readonly _updateCarouselCurrentSelectedIndexFromEvent;\r\n private readonly _updateDeviceOrientation;\r\n public carouselOrientation: UtilityEnums.ComponentOrientation;\r\n public deviceOrientation: UtilityEnums.DeviceOrientation;\r\n public totalOccupiedCells: number;\r\n\r\n public mediaTiles:BaseMediaTile[] = [];\r\n public topLevelHtmlElement: HTMLElement; \r\n\r\n\r\n constructor(public htmlElement: Element, carouselOrientation: UtilityEnums.ComponentOrientation, topLevelHtmlElement?: HTMLElement) {\r\n super(htmlElement);\r\n\r\n if (topLevelHtmlElement !== undefined) {\r\n this.topLevelHtmlElement = topLevelHtmlElement;\r\n } else {\r\n this.topLevelHtmlElement = this.htmlElement as HTMLElement;\r\n }\r\n this.totalOccupiedCells = this.occupiedCellsElements.length;\r\n this.mediaTilesFactory();\r\n\r\n this._dispatchSelectedCarouselCellSelectedEvent = this.dispatchSelectedCarouselCellSelectedEvent.bind(this);\r\n this._updateCarouselCurrentSelectedIndexFromEvent = this.updateCarouselCurrentSelectedIndexFromEvent.bind(this);\r\n this._updateDeviceOrientation = this.updateDeviceOrientation.bind(this);\r\n\r\n this.attachCarouselClickEventListener();\r\n this.attachDeviceOrientationChangedEventListener();\r\n this.attachSelectedCarouselCellSelectedEventListener();\r\n\r\n this.initialiseCarouselCurrentSelectedIndex(); \r\n \r\n this.updateCarouselOrientation(carouselOrientation);\r\n \r\n if(this.selectedCell!= null) {\r\n this.writeToCarouselCurrentSelectedIndex(this.carouselCurrentSelectedIndex);\r\n }\r\n this.deviceOrientation = ResponsiveState.getOrientation();\r\n }\r\n\r\n mediaTilesFactory() {\r\n console.log('SelectableCarousel: mediaTilesFactory', this.htmlElement);\r\n this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.BaseMediaTile.MediaTile)).forEach((element: HTMLElement) => {\r\n try {\r\n this.mediaTiles.push(mediaTileFactory(element));\r\n }\r\n catch (error) {\r\n console.log('SelectableCarousel: mediaTilesFactory Error', error);\r\n }\r\n });\r\n }\r\n\r\n attachCarouselClickEventListener(): void {\r\n console.log('SelectableCarousel: attachCarouselClickEventListener');\r\n let sliderElement = this.getCarouselSliderElement();\r\n sliderElement.addEventListener('click', this._dispatchSelectedCarouselCellSelectedEvent);\r\n }\r\n\r\n removeCarouselClickEventListener(): void {\r\n console.log('SelectableCarousel: removeCarouselClickEventListener');\r\n let sliderElement = this.getCarouselSliderElement();\r\n sliderElement.removeEventListener('click', this._dispatchSelectedCarouselCellSelectedEvent);\r\n }\r\n\r\n attachDeviceOrientationChangedEventListener(): void {\r\n console.log('SelectableCarousel: attachDeviceOrientationChangedEventListener');\r\n document.addEventListener(CustomEventEnums.DeviceOrientationChangeEvent, this._updateDeviceOrientation);\r\n }\r\n\r\n removeDeviceOrientationChangedEventListener(): void {\r\n console.log('SelectableCarousel: removeDeviceOrientationChangedEventListener');\r\n this.htmlElement.removeEventListener(CustomEventEnums.DeviceOrientationChangeEvent, this._updateDeviceOrientation);\r\n }\r\n\r\n attachSelectedCarouselCellSelectedEventListener(): void {\r\n console.log('SelectableCarousel: attachSelectedCarouselCellSelectedEventListener');\r\n this.topLevelHtmlElement.addEventListener(CustomEventEnums.SelectedCarouselCellSelected, this._updateCarouselCurrentSelectedIndexFromEvent);\r\n }\r\n\r\n removeSelectedCarouselCellSelectedEventListener(): void {\r\n console.log('SelectableCarousel: removeSelectedCarouselCellSelectedEventListener');\r\n this.topLevelHtmlElement.removeEventListener(CustomEventEnums.SelectedCarouselCellSelected, this._updateCarouselCurrentSelectedIndexFromEvent);\r\n }\r\n\r\n writeToMainDisplayArea(htmlElement: HTMLElement): void {\r\n\r\n }\r\n\r\n resetMediaTileActiveState() {\r\n console.log('SelectableCarousel: resetMediaTileActiveState');\r\n this.setAllMediaTilesToInactive();\r\n this.setCurrentlySelectedMediaTileToActive();\r\n }\r\n\r\n setAllMediaTilesToInactive() {\r\n this.mediaTiles.forEach((tile: BaseMediaTile) => { tile.setTileActiveState(false); });\r\n }\r\n\r\n setCurrentlySelectedMediaTileToActive() {\r\n console.log(`SelectableCarousel: setCurrentlySelectedMediaTileToActive, mediaTiles length ${this.mediaTiles.length}`);\r\n if (this.mediaTiles.length > 0) {\r\n this.mediaTiles[this.carouselCurrentSelectedIndex].setTileActiveState(true);\r\n }\r\n }\r\n\r\n setCarouselCurrentSelectedIndex() {\r\n console.log('SelectableCarousel: setCarouselCurrentSelectedIndex, HTMLelement', this.htmlElement);\r\n console.log('SelectableCarousel: setCarouselCurrentSelectedIndex HTML selected cell', this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.SelectedCell)));\r\n let selectedCell: HTMLElement | null = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.SelectedCell));\r\n\r\n if (selectedCell !== null) {\r\n try {\r\n let selectedIndex: number = +selectedCell.getAttribute(AttributeEnums.SelectableCarousel.Cell);\r\n this.carouselCurrentSelectedIndex = selectedIndex;\r\n } catch {\r\n this.carouselCurrentSelectedIndex = 0;\r\n }\r\n } else {\r\n this.carouselCurrentSelectedIndex = 0;\r\n }\r\n\r\n this.resetMediaTileActiveState();\r\n }\r\n\r\n hasCellSelectedAttribute() {\r\n if (this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.SelectedCell)) !== null) {\r\n return true;\r\n } else {\r\n return false\r\n };\r\n }\r\n\r\n initialiseCarouselCurrentSelectedIndex() {\r\n console.log('SelectableCarousel: initialiseCarouselCurrentSelectedIndex');\r\n let initialSelection = this.htmlElement.getAttribute(AttributeEnums.SelectableCarousel.InitialSelection);\r\n if (this.hasCellSelectedAttribute()) {\r\n this.setCarouselCurrentSelectedIndex();\r\n } else if(initialSelection !== \"false\") {\r\n this.updateCarouselCurrentSelectedIndex(0);\r\n } \r\n }\r\n\r\n updateCarouselCurrentSelectedIndex(index: number) {\r\n console.log('SelectableCarousel: updateCarouselCurrentSelectedIndex - index ' + index.toString());\r\n this.writeToCarouselCurrentSelectedIndex(index);\r\n this.setCarouselCurrentSelectedIndex();\r\n }\r\n\r\n updateCarouselCurrentSelectedIndexFromEvent(event: CustomEvent) {\r\n console.log('SelectableCarousel: updateCarouselCurrentSelectedIndexFromEvent - event', event);\r\n const selectedIndex: number = event.detail.selectedIndex as number;\r\n\r\n this.updateCarouselCurrentSelectedIndex(selectedIndex);\r\n }\r\n\r\n writeToCarouselCurrentSelectedIndex(index: number) {\r\n console.log('SelectableCarousel: writeToCarouselCurrentSelectedIndex - index' + index.toString());\r\n this.removeSelectedAttributesAndCss();\r\n let selectedElement = this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.Cell, index.toString()));\r\n\r\n if (selectedElement !== null) {\r\n selectedElement.setAttribute(AttributeEnums.SelectableCarousel.SelectedCell, '');\r\n selectedElement.classList.add(StringEnums.CssClass.LbGalleryChooserTilesCellSelected);\r\n }\r\n }\r\n\r\n updateCarouselOrientation(carouselOrientation: UtilityEnums.ComponentOrientation) {\r\n this.writeToCarouselOrientation(carouselOrientation);\r\n this.setCarouselOrientation();\r\n }\r\n\r\n setCarouselOrientation() {\r\n let carouselOrientationString: string = this.htmlElement.getAttribute(AttributeEnums.SelectableCarousel.ComponentOrientation);\r\n this.carouselOrientation = (UtilityEnums.ComponentOrientation.Horizontal === carouselOrientationString) ? UtilityEnums.ComponentOrientation.Horizontal : UtilityEnums.ComponentOrientation.Vertical;\r\n }\r\n\r\n writeToCarouselOrientation(carouselOrientation: UtilityEnums.ComponentOrientation) {\r\n this.htmlElement.setAttribute(AttributeEnums.SelectableCarousel.ComponentOrientation, carouselOrientation);\r\n }\r\n\r\n removeSelectedAttributesAndCss() {\r\n console.log('SelectableCarousel: removeSelectedAttributesAndCss');\r\n this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.SelectedCell))\r\n .forEach((element: HTMLElement) => {\r\n element.classList.remove(StringEnums.CssClass.LbGalleryChooserTilesCellSelected);\r\n element.removeAttribute(AttributeEnums.SelectableCarousel.SelectedCell);\r\n });\r\n }\r\n\r\n updateDeviceOrientation(event: CustomEvent): void {\r\n console.log('SelectableCarousel: updateDeviceOrientation');\r\n let target: EventTarget = event.target;\r\n let deviceOrientation = event.detail.deviceOrientation as UtilityEnums.DeviceOrientation;\r\n this.deviceOrientation = deviceOrientation;\r\n console.log('SelectableCarousel: updateDeviceOrientation - deviceOrientation: ' + deviceOrientation.toString());\r\n }\r\n\r\n selectedCarouselCellSelectedEvent(selectedIndex: number) {\r\n console.log('SelectableCarousel: selectedCarouselCellSelectedEvent', selectedIndex);\r\n return new CustomEvent(CustomEventEnums.SelectedCarouselCellSelected, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n 'selectedIndex': selectedIndex\r\n }\r\n });\r\n }\r\n\r\n dispatchSelectedCarouselCellSelectedEvent(e: Event): void {\r\n console.log('SelectableCarousel: dispatchSelectedCarouselCellSelectedEvent', this.carouselSliderElement);\r\n\r\n let targetElement = e.target as HTMLElement;\r\n let cell = this.getSelectedCellForEvent(targetElement);\r\n if (cell !== null) {\r\n let selectedIndex: number = + cell.getAttribute(AttributeEnums.SelectableCarousel.Cell);\r\n this.htmlElement.dispatchEvent(this.selectedCarouselCellSelectedEvent(selectedIndex));\r\n }\r\n }\r\n\r\n getSelectedCellForEvent(targetElement: HTMLElement){\r\n let cell = targetElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.Cell));\r\n return cell;\r\n }\r\n\r\n getCarouselSliderElement(): HTMLElement{\r\n return this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.Slider)) as HTMLElement;\r\n }\r\n\r\n getSelectedCellElement(): HTMLElement{\r\n return this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.SelectableCarousel.SelectedCell)) as HTMLElement;\r\n }\r\n dispose(): void {\r\n this.removeCarouselClickEventListener();\r\n this.removeDeviceOrientationChangedEventListener();\r\n this.removeSelectedCarouselCellSelectedEventListener();\r\n }\r\n\r\n delete(): void {\r\n\r\n }\r\n}","import { InstanceComponentBase } from '../../shared/instanceComponentBase';\r\nimport { AttributeEnums } from '../../shared/utilities/enums/attributeEnums';\r\nimport { StringEnums } from '../../shared/utilities/enums/stringEnums';\r\nimport { HelperUtils } from '../../shared/utilities/helperUtils';\r\n\r\nexport interface IShowHide {\r\n htmlElement: Element;\r\n contentElements: NodeListOf<Element>;\r\n isHidden: boolean;\r\n value: string;\r\n dispose: () => void;\r\n delete: () => void;\r\n}\r\n\r\nexport class ShowHide extends InstanceComponentBase implements IShowHide {\r\n\r\n private _minHeight: number;\r\n private _toggleElement: Element;\r\n private readonly _disableTransitionsSetHeight;\r\n private readonly _showHide;\r\n public isHidden: boolean;\r\n public value: string;\r\n constructor(public htmlElement: Element, public contentElements: NodeListOf<Element>) {\r\n super(htmlElement);\r\n this._toggleElement = htmlElement;\r\n this.contentElements = contentElements;\r\n this._minHeight = 0;\r\n\r\n this._disableTransitionsSetHeight = this.disableTransitionsSetHeight.bind(this);\r\n this.disableTransitionsSetHeight();\r\n\r\n this._showHide = this.showHide.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n this.toggleText();\r\n //----- Initialise Event Listeners Start -----//\r\n this.attachResizeControllerEvent();\r\n this.attachClickEventListener();\r\n //----- Initialise Event Listeners End -----//\r\n this.setValue();\r\n this.setIsHidden();\r\n }\r\n\r\n set setMinHeight(minHeight: number) {\r\n console.log(`ShowHide: setMinHeight ${minHeight}`);\r\n this._minHeight = minHeight;\r\n }\r\n\r\n setHeight(contentElement: Element): void {\r\n //console.log(\"this need to happen after set min height\");\r\n //console.log(`ShowHide: setHeight ${this._minHeight}`);\r\n if (contentElement.classList.contains(StringEnums.CssClass.LbHidden)) {\r\n contentElement.setAttribute(\"style\", \"max-height: \" + this._minHeight + \"px\");\r\n } else {\r\n contentElement.setAttribute(\"style\", \"max-height: \" + contentElement.scrollHeight + \"px\");\r\n this.zeroMaxHeight(contentElement);\r\n }\r\n }\r\n\r\n zeroMaxHeight(contentElement: Element): void {\r\n setTimeout(function () {\r\n contentElement.setAttribute(\"style\", \"max-height: initial\");\r\n }, 500);\r\n }\r\n\r\n toggleText(): void {\r\n if ((this._toggleElement.innerHTML === \"show\") || (this._toggleElement.innerHTML === \"hide\")) {\r\n if (this._toggleElement.classList.contains(StringEnums.CssClass.LbHidden)) {\r\n this._toggleElement.innerHTML = \"show\";\r\n } else {\r\n this._toggleElement.innerHTML = \"hide\";\r\n }\r\n }\r\n\r\n if (this._toggleElement.getAttribute(AttributeEnums.ShowHide.HideToggleText)) {\r\n if (this._toggleElement.classList.contains(StringEnums.CssClass.LbHidden)) {\r\n this._toggleElement.innerHTML = this._toggleElement.getAttribute(AttributeEnums.ShowHide.ShowToggleText);\r\n } else {\r\n this._toggleElement.innerHTML = this._toggleElement.getAttribute(AttributeEnums.ShowHide.HideToggleText);\r\n }\r\n }\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachResizeControllerEvent(): void {\r\n window.addEventListener(\"resize\", this._disableTransitionsSetHeight);\r\n }\r\n\r\n attachClickEventListener(): void {\r\n this._toggleElement.addEventListener('click', this._showHide);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removeResizeControllerEvent(): void {\r\n window.removeEventListener(\"resize\", this._disableTransitionsSetHeight);\r\n }\r\n\r\n removeClickEventListener(): void {\r\n this._toggleElement.removeEventListener('click', this._showHide);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n //------ Event Listener Methods Start -----//\r\n disableTransitionsSetHeight(): void {\r\n console.log('ShowHide: disableTransitionsSetHeight - initialise');\r\n\r\n for (let i = 0; i < this.contentElements.length; i++) {\r\n this.disableTransitions(<HTMLElement>this.contentElements[i]);\r\n this.setHeight(<HTMLElement>this.contentElements[i]);\r\n }\r\n }\r\n\r\n async showHide(): Promise<void> {\r\n console.log(`ShowHide: showHide - main loop`);\r\n this._toggleElement.classList.toggle(StringEnums.CssClass.LbHidden);\r\n for (let i = 0; i < this.contentElements.length; i++) {\r\n this.enableTransitions(<HTMLElement>this.contentElements[i]);\r\n this.toggleHiddenCss(<HTMLElement>this.contentElements[i]);\r\n this.resetMaxHeight(<HTMLElement>this.contentElements[i]);\r\n\r\n const timer: ReturnType<typeof setTimeout> = setTimeout(() => {\r\n this.setHeight(<HTMLElement>this.contentElements[i]);\r\n }, 200);\r\n\r\n\r\n this.scrollToView(this._toggleElement);\r\n }\r\n this.toggleText();\r\n this.setIsHidden(); \r\n }\r\n\r\n scrollToView(contentElement: Element): void {\r\n console.log(`ShowHide: scrollToView`);\r\n if (contentElement.classList.contains(StringEnums.CssClass.LbHidden)) {\r\n let readMoreToggleId = this._toggleElement.getAttribute(AttributeEnums.ReadMore.ReadMoreToggle);\r\n if (readMoreToggleId !== null) {\r\n let readMoreReturnElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.ReadMore.ReadMoreReturnPosition, readMoreToggleId));\r\n if (readMoreReturnElement) {\r\n readMoreReturnElement.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n }\r\n }\r\n\r\n resetMaxHeight(contentElement: Element): void {\r\n console.log(`ShowHide: resetMaxHeight ${contentElement.scrollHeight}`);\r\n contentElement.setAttribute(\"style\", \"max-height: \" + contentElement.scrollHeight + \"px\");\r\n console.log(\"--------------\");\r\n }\r\n\r\n disableTransitions(contentElement: Element): void {\r\n contentElement.classList.add(StringEnums.CssClass.LbDisableCssTransitions);\r\n }\r\n\r\n enableTransitions(contentElement: Element): void {\r\n this._toggleElement.classList.remove(StringEnums.CssClass.LbDisableCssTransitions);\r\n contentElement.classList.remove(StringEnums.CssClass.LbDisableCssTransitions);\r\n }\r\n\r\n toggleHiddenCss(contentElement: Element): void {\r\n contentElement.classList.toggle(StringEnums.CssClass.LbHidden);\r\n }\r\n\r\n\r\n setIsHidden() {\r\n try{\r\n if(this.contentElements.length > 0){\r\n let hasHiddenClass = this.contentElements[0].classList.contains(StringEnums.CssClass.LbHidden);\r\n this.isHidden = hasHiddenClass;\r\n }\r\n } catch(error){\r\n console.log(\"ShowHide: setIsHidden Error:\", error);\r\n }\r\n } \r\n\r\n setValue() {\r\n try{\r\n this.value = this.htmlElement.getAttribute(AttributeEnums.ShowHide.ShowHideToggle);\r\n } catch(error){\r\n console.log(\"ShowHide: setValue Error:\", error);\r\n }\r\n }\r\n //------ Event Listener Methods End -----//\r\n\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n this.removeResizeControllerEvent();\r\n this.removeClickEventListener();\r\n this.delete();\r\n }\r\n\r\n delete(): void {\r\n if ((<any>window)['sh' + this.htmlElement.getAttribute(AttributeEnums.ShowHide.ShowHideToggle) + 'ShowHide']) {\r\n console.log('ShowHide: Delete - Deleting ShowHide Reference');\r\n delete (<any>window)['sh' + this.htmlElement.getAttribute(AttributeEnums.ShowHide.ShowHideToggle) + 'ShowHide'];\r\n }\r\n else {\r\n console.log('ShowHide: Delete - ShowHide Reference Not Found on Window - Possible initilisation outside of global initiliser');\r\n }\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"../../shared/instanceComponentBase\";\r\nimport { ResponsiveState } from \"../../shared/responsiveState\";\r\nimport { AttributeEnums } from \"../../shared/utilities/enums/attributeEnums\";\r\nimport { StringEnums } from \"../../shared/utilities/enums/stringEnums\";\r\nimport { UtilityEnums } from \"../../shared/utilities/enums/utillityEnums\";\r\nimport { HelperUtils } from \"../../shared/utilities/helperUtils\";\r\n\r\nexport interface IYouTubeVideo extends IInstanceComponentBase {\r\n\r\n}\r\n\r\nexport class YouTubeVideo extends InstanceComponentBase implements IYouTubeVideo {\r\n\r\n private lastResponsiveState: string;\r\n private videoSource: string;\r\n private videoTitle: string;\r\n private imageFileName: string;\r\n private imageWidth: number;\r\n private imageHeight: number;\r\n private readonly _creatorForIFrame;\r\n private readonly _visibilityState;\r\n private readonly _scrollInteraction;\r\n private readonly _clickInteraction;\r\n\r\n constructor(htmlElement: Element) {\r\n super(htmlElement);\r\n\r\n this._creatorForIFrame = this.creatorForIFrame.bind(this);\r\n\r\n //----- Event Listener Bindings Start -----//\r\n this._visibilityState = this.visibilityState.bind(this);\r\n this._scrollInteraction = this.scrollInteraction.bind(this);\r\n this._clickInteraction = this.clickInteraction.bind(this);\r\n //----- Event Listener Bindings End -----//\r\n\r\n this.lastResponsiveState = ResponsiveState.getState();\r\n this.setVideoSource();\r\n this.setVideoTitle();\r\n this.setImageDetails();\r\n\r\n this.createPlaceholderImage();\r\n }\r\n\r\n //------ Add Event Listeners Start -----//\r\n attachPlaceholderClickEventListener(): void {\r\n this.htmlElement.addEventListener('click', this._creatorForIFrame);\r\n }\r\n\r\n attachVisibilityChangeEventListener(): void {\r\n document.addEventListener('visibilitychange', this._visibilityState);\r\n }\r\n\r\n attachScrollEventListener(): void {\r\n document.addEventListener('scroll', this._scrollInteraction);\r\n }\r\n\r\n attachClickEventListener(): void {\r\n document.addEventListener('click', this._clickInteraction);\r\n }\r\n //------ Add Event Listeners End -----//\r\n\r\n //------ Remove Event Listeners Start -----//\r\n removePlaceholderClickEventListener(): void {\r\n this.htmlElement.removeEventListener('click', this._creatorForIFrame);\r\n }\r\n removeVisibilityChangeEventListener(): void {\r\n document.removeEventListener('visibilitychange', this._visibilityState);\r\n }\r\n removeScrollEventListener(): void {\r\n document.removeEventListener('scroll', this._scrollInteraction);\r\n }\r\n removeClickEventListener(): void {\r\n document.removeEventListener('click', this._clickInteraction);\r\n }\r\n //------ Remove Event Listeners End -----//\r\n\r\n setVideoSource(): void {\r\n this.videoSource = this.htmlElement.getAttribute(AttributeEnums.Video.VideoSource);\r\n }\r\n\r\n setVideoTitle(): void {\r\n this.videoTitle = this.htmlElement.getAttribute(AttributeEnums.Video.VideoTitle);\r\n }\r\n\r\n setImageDetails(): void {\r\n let imageSize: string = this.htmlElement.getAttribute(AttributeEnums.Video.VideoPlaceholderSize);\r\n\r\n if (imageSize === UtilityEnums.YouTubeImageSizes.Default) {\r\n this.imageFileName = UtilityEnums.YouTubeImageFileNames.Default;\r\n this.imageWidth = UtilityEnums.YouTubeImageWidths.Default;\r\n this.imageHeight = UtilityEnums.YouTubeImageHeights.Default;\r\n } else if (imageSize === UtilityEnums.YouTubeImageSizes.Medium) {\r\n this.imageFileName = UtilityEnums.YouTubeImageFileNames.Medium;\r\n this.imageWidth = UtilityEnums.YouTubeImageWidths.Medium;\r\n this.imageHeight = UtilityEnums.YouTubeImageHeights.Medium;\r\n } else if (imageSize === UtilityEnums.YouTubeImageSizes.High) {\r\n this.imageFileName = UtilityEnums.YouTubeImageFileNames.High;\r\n this.imageWidth = UtilityEnums.YouTubeImageWidths.High;\r\n this.imageHeight = UtilityEnums.YouTubeImageHeights.High;\r\n } else if (imageSize === UtilityEnums.YouTubeImageSizes.Standard) {\r\n this.imageFileName = UtilityEnums.YouTubeImageFileNames.Standard;\r\n this.imageWidth = UtilityEnums.YouTubeImageWidths.Standard;\r\n this.imageHeight = UtilityEnums.YouTubeImageHeights.Standard;\r\n } else if (imageSize === UtilityEnums.YouTubeImageSizes.MaxRes) {\r\n this.imageFileName = UtilityEnums.YouTubeImageFileNames.MaxRes;\r\n this.imageWidth = UtilityEnums.YouTubeImageWidths.MaxRes;\r\n this.imageHeight = UtilityEnums.YouTubeImageHeights.MaxRes;\r\n } else {\r\n this.imageFileName = UtilityEnums.YouTubeImageFileNames.Standard;\r\n this.imageWidth = UtilityEnums.YouTubeImageWidths.Standard;\r\n this.imageHeight = UtilityEnums.YouTubeImageHeights.Standard;\r\n }\r\n }\r\n\r\n\r\n //------ Event Listener Methods Start -----//\r\n creatorForIFrame(): void {\r\n console.log('YouTubeVideo: creatorForIFrame');\r\n this.removePlaceholderClickEventListener();\r\n this.createYouTubeVideo();\r\n }\r\n\r\n visibilityState(): void {\r\n console.log('YouTubeVideo: visibilityState');\r\n if (document.visibilityState === \"hidden\") {\r\n this.pauseVideo();\r\n }\r\n }\r\n scrollInteraction(): void {\r\n console.log('YouTubeVideo: scrollInteraction');\r\n\r\n let myElement: HTMLElement = this.htmlElement as HTMLElement;\r\n let bounding: DOMRect = myElement.getBoundingClientRect();\r\n let myElementHeight: number = myElement.offsetHeight;\r\n let myElementWidth: number = myElement.offsetWidth;\r\n\r\n if (bounding.top >= -myElementHeight\r\n && bounding.left >= -myElementWidth\r\n && bounding.right <= (window.innerWidth || document.documentElement.clientWidth) + myElementWidth\r\n && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) + myElementHeight) {\r\n //console.log('Element is in the viewport!');\r\n } else {\r\n //console.log('Element is NOT in the viewport!');\r\n this.pauseVideo();\r\n }\r\n }\r\n clickInteraction(event: MouseEvent): void {\r\n console.log('YouTubeVideo: clickInteraction');\r\n let clickElement: EventTarget = event.target;\r\n this.ifClickElementNotOnSelf(clickElement);\r\n }\r\n\r\n createPlaceholderImage(): void {\r\n console.log('YouTubeVideo: createPlaceholderImage');\r\n let imageSource: string = this.createPlaceholderImageSource();\r\n\r\n let image: HTMLImageElement = new Image();\r\n image.src = imageSource;\r\n image.alt = this.videoTitle;\r\n image.width = this.imageWidth;\r\n image.height = this.imageHeight;\r\n image.loading = 'lazy';\r\n\r\n this.htmlElement.appendChild(image);\r\n\r\n this.attachPlaceholderClickEventListener();\r\n }\r\n\r\n createYouTubeVideo(): void {\r\n console.log('YouTubeVideo: createYouTubeVideo');\r\n let iframe: HTMLElement = this.createIFrame();\r\n this.htmlElement.innerHTML = '';\r\n this.htmlElement.appendChild(iframe);\r\n this.attachVisibilityChangeEventListener();\r\n this.attachScrollEventListener();\r\n this.attachClickEventListener();\r\n }\r\n\r\n createIFrame(): HTMLElement {\r\n console.log('YouTubeVideo: createIFrame');\r\n let iframe: HTMLElement = document.createElement('iframe');\r\n\r\n iframe.setAttribute('id', `${this.videoSource}`);\r\n iframe.setAttribute('frameborder', '0');\r\n iframe.setAttribute('allowfullscreen', '');\r\n iframe.setAttribute('allow', 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture');\r\n iframe.setAttribute('title', this.videoTitle);\r\n iframe.setAttribute('src', `https://www.youtube.com/embed/${this.videoSource}${this.createUrlParameters()}`);\r\n\r\n return iframe;\r\n }\r\n\r\n ifClickElementNotOnSelf(clickElement: EventTarget): void {\r\n console.log('YouTubeVideo: ifClickElementNotOnSelf' + clickElement);\r\n if (clickElement instanceof HTMLElement && clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.Video.VideoSource, this.videoSource))) {\r\n //console.log('true');\r\n } else {\r\n //console.log('false');\r\n this.pauseVideo();\r\n }\r\n }\r\n //------ Event Listener Methods End -----//\r\n\r\n pauseVideo(): void {\r\n console.log('YouTubeVideo: pauseVideo');\r\n let video: HTMLIFrameElement = this.htmlElement.querySelector(`#${this.videoSource}`) as HTMLIFrameElement;\r\n video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\r\n }\r\n\r\n createPlaceholderImageSource(): string {\r\n return `https://i.ytimg.com/vi/${this.videoSource}/${this.imageFileName}`;\r\n }\r\n\r\n createUrlParameters(): string {\r\n let parameters: string = `?rel=0&showinfo=0&autoplay=1`;\r\n parameters += `&enablejsapi=1&version=3&playerapiid=ytplayer`;\r\n if (ResponsiveState.getState() === StringEnums.Selectors.Desktop) {\r\n\r\n }\r\n if (ResponsiveState.getState() === StringEnums.Selectors.Mobile) {\r\n parameters += `&cc_load_policy=1&cc_lang_pref=en`;\r\n }\r\n return parameters;\r\n }\r\n\r\n //------ Clean Up Processes Start -----//\r\n dispose(): void {\r\n this.removePlaceholderClickEventListener();\r\n this.removeVisibilityChangeEventListener()\r\n this.removeScrollEventListener();\r\n this.removeClickEventListener();\r\n }\r\n //------ Clean Up Processes End -----//\r\n}","\r\nexport namespace HttpRequest {\r\n\r\n export async function getBeforAfter(route: string, doBefore?: Function, doAfter?: Function) {\r\n doBefore();\r\n let result = await get(route);\r\n doAfter();\r\n return result;\r\n }\r\n\r\n export async function getBeforAfterFailed(route: string, doBefore?: Function, doAfter?: Function, onFailed?: Function) {\r\n doBefore();\r\n let result = await get(route);\r\n if(result === null) {\r\n onFailed();\r\n }\r\n doAfter();\r\n return result;\r\n }\r\n\r\n export async function get(route: string) {\r\n return await fetch(route, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Access-Control-Allow-Origin': '*',\r\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\r\n 'Access-Control-Allow-Headers': 'Content-Type'\r\n }\r\n })\r\n .then<string>(res => {\r\n if (!res.ok) {\r\n console.log('Critical error on Get route: ' + route);\r\n throw new Error('Get Error For: ' + route);\r\n }\r\n var text = res.text();\r\n //console.log(\"getFinished\");\r\n return text;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n return null;\r\n });\r\n }\r\n\r\n export async function post(route: string, body: string) {\r\n return await fetch(route, {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Access-Control-Allow-Origin': '*',\r\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\r\n 'Access-Control-Allow-Headers': 'Content-Type'\r\n },\r\n body: body\r\n })\r\n .then<string>(res => {\r\n if (!res.ok) {\r\n console.log('Critical error on Post route: ' + route);\r\n throw new Error('Post Error For: ' + route);\r\n }\r\n var text = res.text();\r\n return text;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n throw new Error('Post Error For: ' + route);\r\n });\r\n }\r\n\r\n export async function put(route: string, body: string) {\r\n return await fetch(route, {\r\n method: 'PUT',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Access-Control-Allow-Origin': '*',\r\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\r\n 'Access-Control-Allow-Headers': 'Content-Type'\r\n },\r\n body: body\r\n })\r\n .then<string>(res => {\r\n if (!res.ok) {\r\n console.log('Critical error on Put route: ' + route);\r\n throw new Error('Put Error For: ' + route);\r\n }\r\n var text = res.text();\r\n return text;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n throw new Error('Put Error For: ' + route);\r\n });\r\n }\r\n\r\n export async function deleteCall(route: string, body: string) {\r\n return await fetch(route, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Access-Control-Allow-Origin': '*',\r\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\r\n 'Access-Control-Allow-Headers': 'Content-Type'\r\n },\r\n body: body\r\n })\r\n .then<string>(res => {\r\n if (!res.ok) {\r\n console.log('Critical error on Delete route: ' + route);\r\n throw new Error('Delete Error For: ' + route);\r\n }\r\n var text = res.text();\r\n return text;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n throw new Error('Delete Error For: ' + route);\r\n });\r\n }\r\n\r\n}","\r\nimport { HttpRequest } from \"./ajax\";\r\n\r\nexport async function AjaxGetAndReplaceHtml(htmlObj: any, url: string) {\r\n let route;\r\n\r\n route = url;\r\n\r\n let response = await HttpRequest.get(route);\r\n\r\n htmlObj.innerHTML = response;\r\n}\r\nexport async function AjaxGetAndReplaceHtmlAndOuterElement(htmlObj: HTMLElement, url: string) {\r\n console.log('AjaxGetAndReplaceHtmlAndOuterElement - url ', url);\r\n console.log('AjaxGetAndReplaceHtmlAndOuterElement - htmlObj ', htmlObj);\r\n console.log('AjaxGetAndReplaceHtmlAndOuterElement - htmlObj outHTML ', htmlObj.outerHTML);\r\n \r\n let route;\r\n\r\n route = url;\r\n\r\n let response = await HttpRequest.get(route);\r\n\r\n if (typeof response === 'string') {\r\n console.log('AjaxGetAndReplaceHtmlAndOuterElement - response ', response);\r\n htmlObj.outerHTML = response;\r\n } \r\n}\r\n// export async function AjaxGetAndAppendChildHtml(htmlObj: any, url: string) {\r\n// let route;\r\n\r\n// route = url;\r\n\r\n// let response = await HttpRequest.get(route);\r\n// console.log(`AjaxGetAndAppendChildHtml - response type = ${typeof response}`);\r\n// if(typeof response === 'string'){\r\n// var parser = new DOMParser();\r\n// var doc = parser.parseFromString(response, \"text/xml\");\r\n// htmlObj.appendChild(doc.documentElement);\r\n// }\r\n \r\n// }","import { CookieUtils } from \"./utilities/cookieUtils\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { CookieEnums } from \"./utilities/enums/cookieEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\n\r\nexport namespace CookieConsent {\r\n\r\n function attachCookieConsentClickEvent() {\r\n console.log('LbCookies: attachCookieConsentClickEvent');\r\n document.addEventListener('click', cookieConsentClick);\r\n }\r\n function removeCookieConsentClickEvent() {\r\n console.log('LbCookies: removeCookieConsentClickEvent');\r\n document.removeEventListener('click', cookieConsentClick);\r\n }\r\n\r\n function cookieConsentClick(event: Event): void {\r\n console.log('LbCookies: cookieConsentClick');\r\n let targetElement = event.target as HTMLElement;\r\n if (targetElement.hasAttribute(AttributeEnums.CookieConsent.ConsentButton)) {\r\n event.preventDefault();\r\n setDismissCookieConsent();\r\n removeCookieConsentClickEvent();\r\n removeCookieConsentElement();\r\n }\r\n }\r\n\r\n function setDismissCookieConsent(): void {\r\n CookieUtils.setCookie(CookieEnums.CookieConsent, StringEnums.Cookie.ConsentDismiss, 14);\r\n }\r\n\r\n function removeCookieConsentElement(): void {\r\n console.log('LbCookies: removeCookieConsent');\r\n let cookieConsentElement: HTMLElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.CookieConsent.CookieConsent));\r\n cookieConsentElement.remove();\r\n }\r\n\r\n export function InitialiseCookieConsent(): void {\r\n console.log('LbCookies: InitialiseCookieConsent');\r\n const cookieConsent = cookieConsentHolder();\r\n consentText(cookieConsent);\r\n consentButton(cookieConsent);\r\n document.body.appendChild(cookieConsent);\r\n attachCookieConsentClickEvent();\r\n }\r\n\r\n function cookieConsentHolder(): Element {\r\n const cookieConsentElement = document.createElement('div');\r\n cookieConsentElement.setAttribute(AttributeEnums.CookieConsent.CookieConsent, 'true');\r\n cookieConsentElement.classList.add(StringEnums.CssClass.LbCookieConsent);\r\n return cookieConsentElement;\r\n }\r\n\r\n function consentText(cookieConsentElement: Element): void {\r\n const consentText = document.createElement('p');\r\n consentText.classList.add(StringEnums.CssClass.LbCookieConsentText);\r\n consentText.innerText = StringEnums.Cookie.ConsentText;\r\n consentPrivacy(consentText);\r\n cookieConsentElement.append(consentText);\r\n }\r\n\r\n function consentPrivacy(consentText: Element): void {\r\n const consentPrivacy = document.createElement('a');\r\n consentPrivacy.href = '/privacy-policy';\r\n consentPrivacy.classList.add(StringEnums.CssClass.LbLink, StringEnums.CssClass.LbLinkWordWrap);\r\n consentPrivacy.innerText = StringEnums.Cookie.ConsentPrivacy;\r\n consentText.append(consentPrivacy);\r\n }\r\n\r\n function consentButton(cookieConsentElement: Element): void {\r\n const consentButton = document.createElement('a');\r\n consentButton.setAttribute(AttributeEnums.CookieConsent.ConsentButton, 'true');\r\n consentButton.href = '#';\r\n consentButton.classList.add(StringEnums.CssClass.LbCookieConsentBtn);\r\n consentButton.innerText = StringEnums.Cookie.ConsentButton;\r\n cookieConsentElement.append(consentButton);\r\n }\r\n\r\n}","import { HttpRequest } from \"../ajax\"\r\nimport { ProductDeliveryRequestDto } from \"./productDeliveryRequestDto\";\r\nimport { Convert, ProductDeliveryResponseDto } from \"./productDeliveryResponseDto\";\r\nconst urlPaths = require('../../config/urlPaths.json');\r\n\r\nexport namespace DeliveryServices {\r\n export async function getDeliveryInfoForAProduct(productDeliveryRequestDto: ProductDeliveryRequestDto): Promise<ProductDeliveryResponseDto> {\r\n\r\n\r\n\r\n let content = JSON.stringify(productDeliveryRequestDto);\r\n let url = urlPaths.websiteUrl + urlPaths.productDeliveryRoute;\r\n\r\n console.log('DeliveryServices: getDeliveryInfoForAProduct productDeliveryRequestDto', productDeliveryRequestDto);\r\n\r\n let responseContent = await HttpRequest.post(url, content);\r\n if (typeof responseContent === 'string') {\r\n try {\r\n let ProductDeliveryResponseDto: ProductDeliveryResponseDto = Convert.toProductDeliveryResponseDto(responseContent);\r\n return ProductDeliveryResponseDto\r\n } catch (error) {\r\n console.log('Error Converting JSON to ProductDeliveryResponseDto[]', error);\r\n throw new Error('Error Converting JSON to ProductDeliveryResponseDto[]');\r\n }\r\n }\r\n }\r\n}","// To parse this data:\r\n//\r\n// import { Convert, ProductDeliveryResponseDto } from \"./file\";\r\n//\r\n// const productDeliveryResponseDto = Convert.toProductDeliveryResponseDto(json);\r\n//\r\n// These functions will throw an error if the JSON doesn't\r\n// match the expected interface, even if the JSON is valid.\r\n\r\nexport interface ProductDeliveryResponseDto {\r\n id: number;\r\n uniqueId: string;\r\n name: string;\r\n dispatchedFrom: string;\r\n deliveryItems: number[];\r\n deliveryOptions: DeliveryOption[];\r\n}\r\n\r\nexport interface DeliveryOption {\r\n id: number;\r\n service: Service;\r\n name: string;\r\n description: string;\r\n subNote: string;\r\n zone: string;\r\n maxDeliveryMen: number;\r\n daysOfWeek: string;\r\n threshold: number;\r\n surcharge: number;\r\n cost: number;\r\n charge: number;\r\n firstDeliveryDate: Date;\r\n cutOffTime: Date;\r\n leadTimeText: string;\r\n leadTimePrefixText: string;\r\n leadTimeFromDays: number;\r\n leadTimeToDays: number;\r\n leadTimeExtension: number;\r\n isPickable: boolean;\r\n isRoomOfChoice: boolean;\r\n isSelectable: boolean;\r\n}\r\n\r\nexport interface Service {\r\n id: number;\r\n name: string;\r\n}\r\n\r\n// Converts JSON strings to/from your types\r\n// and asserts the results of JSON.parse at runtime\r\nexport class Convert {\r\n public static toProductDeliveryResponseDto(json: string): ProductDeliveryResponseDto {\r\n return cast(JSON.parse(json), r(\"ProductDeliveryResponseDto\"));\r\n }\r\n\r\n public static productDeliveryResponseDtoToJson(value: ProductDeliveryResponseDto): string {\r\n return JSON.stringify(uncast(value, r(\"ProductDeliveryResponseDto\")), null, 2);\r\n }\r\n}\r\n\r\nfunction invalidValue(typ: any, val: any, key: any, parent: any = ''): never {\r\n const prettyTyp = prettyTypeName(typ);\r\n const parentText = parent ? ` on ${parent}` : '';\r\n const keyText = key ? ` for key \"${key}\"` : '';\r\n throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);\r\n}\r\n\r\nfunction prettyTypeName(typ: any): string {\r\n if (Array.isArray(typ)) {\r\n if (typ.length === 2 && typ[0] === undefined) {\r\n return `an optional ${prettyTypeName(typ[1])}`;\r\n } else {\r\n return `one of [${typ.map(a => { return prettyTypeName(a); }).join(\", \")}]`;\r\n }\r\n } else if (typeof typ === \"object\" && typ.literal !== undefined) {\r\n return typ.literal;\r\n } else {\r\n return typeof typ;\r\n }\r\n}\r\n\r\nfunction jsonToJSProps(typ: any): any {\r\n if (typ.jsonToJS === undefined) {\r\n const map: any = {};\r\n typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });\r\n typ.jsonToJS = map;\r\n }\r\n return typ.jsonToJS;\r\n}\r\n\r\nfunction jsToJSONProps(typ: any): any {\r\n if (typ.jsToJSON === undefined) {\r\n const map: any = {};\r\n typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });\r\n typ.jsToJSON = map;\r\n }\r\n return typ.jsToJSON;\r\n}\r\n\r\nfunction transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {\r\n function transformPrimitive(typ: string, val: any): any {\r\n if (typeof typ === typeof val) return val;\r\n return invalidValue(typ, val, key, parent);\r\n }\r\n\r\n function transformUnion(typs: any[], val: any): any {\r\n // val must validate against one typ in typs\r\n const l = typs.length;\r\n for (let i = 0; i < l; i++) {\r\n const typ = typs[i];\r\n try {\r\n return transform(val, typ, getProps);\r\n } catch (_) { }\r\n }\r\n return invalidValue(typs, val, key, parent);\r\n }\r\n\r\n function transformEnum(cases: string[], val: any): any {\r\n if (cases.indexOf(val) !== -1) return val;\r\n return invalidValue(cases.map(a => { return l(a); }), val, key, parent);\r\n }\r\n\r\n function transformArray(typ: any, val: any): any {\r\n // val must be an array with no invalid elements\r\n if (!Array.isArray(val)) return invalidValue(l(\"array\"), val, key, parent);\r\n return val.map(el => transform(el, typ, getProps));\r\n }\r\n\r\n function transformDate(val: any): any {\r\n if (val === null) {\r\n return null;\r\n }\r\n const d = new Date(val);\r\n if (isNaN(d.valueOf())) {\r\n return invalidValue(l(\"Date\"), val, key, parent);\r\n }\r\n return d;\r\n }\r\n\r\n function transformObject(props: { [k: string]: any }, additional: any, val: any): any {\r\n if (val === null || typeof val !== \"object\" || Array.isArray(val)) {\r\n return invalidValue(l(ref || \"object\"), val, key, parent);\r\n }\r\n const result: any = {};\r\n Object.getOwnPropertyNames(props).forEach(key => {\r\n const prop = props[key];\r\n const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;\r\n result[prop.key] = transform(v, prop.typ, getProps, key, ref);\r\n });\r\n Object.getOwnPropertyNames(val).forEach(key => {\r\n if (!Object.prototype.hasOwnProperty.call(props, key)) {\r\n result[key] = transform(val[key], additional, getProps, key, ref);\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n if (typ === \"any\") return val;\r\n if (typ === null) {\r\n if (val === null) return val;\r\n return invalidValue(typ, val, key, parent);\r\n }\r\n if (typ === false) return invalidValue(typ, val, key, parent);\r\n let ref: any = undefined;\r\n while (typeof typ === \"object\" && typ.ref !== undefined) {\r\n ref = typ.ref;\r\n typ = typeMap[typ.ref];\r\n }\r\n if (Array.isArray(typ)) return transformEnum(typ, val);\r\n if (typeof typ === \"object\") {\r\n return typ.hasOwnProperty(\"unionMembers\") ? transformUnion(typ.unionMembers, val)\r\n : typ.hasOwnProperty(\"arrayItems\") ? transformArray(typ.arrayItems, val)\r\n : typ.hasOwnProperty(\"props\") ? transformObject(getProps(typ), typ.additional, val)\r\n : invalidValue(typ, val, key, parent);\r\n }\r\n // Numbers can be parsed by Date but shouldn't be.\r\n if (typ === Date && typeof val !== \"number\") return transformDate(val);\r\n return transformPrimitive(typ, val);\r\n}\r\n\r\nfunction cast<T>(val: any, typ: any): T {\r\n return transform(val, typ, jsonToJSProps);\r\n}\r\n\r\nfunction uncast<T>(val: T, typ: any): any {\r\n return transform(val, typ, jsToJSONProps);\r\n}\r\n\r\nfunction l(typ: any) {\r\n return { literal: typ };\r\n}\r\n\r\nfunction a(typ: any) {\r\n return { arrayItems: typ };\r\n}\r\n\r\nfunction u(...typs: any[]) {\r\n return { unionMembers: typs };\r\n}\r\n\r\nfunction o(props: any[], additional: any) {\r\n return { props, additional };\r\n}\r\n\r\nfunction m(additional: any) {\r\n return { props: new Array<any>(), additional };\r\n}\r\n\r\nfunction r(name: string) {\r\n return { ref: name };\r\n}\r\n\r\nconst typeMap: any = {\r\n \"ProductDeliveryResponseDto\": o([\r\n { json: \"id\", js: \"id\", typ: 0 },\r\n { json: \"uniqueId\", js: \"uniqueId\", typ: \"\" },\r\n { json: \"name\", js: \"name\", typ: \"\" },\r\n { json: \"dispatchedFrom\", js: \"dispatchedFrom\", typ: \"\" },\r\n { json: \"deliveryItems\", js: \"deliveryItems\", typ: a(0) },\r\n { json: \"deliveryOptions\", js: \"deliveryOptions\", typ: a(r(\"DeliveryOption\")) },\r\n ], false),\r\n \"DeliveryOption\": o([\r\n { json: \"id\", js: \"id\", typ: 0 },\r\n { json: \"service\", js: \"service\", typ: r(\"Service\") },\r\n { json: \"name\", js: \"name\", typ: \"\" },\r\n { json: \"description\", js: \"description\", typ: \"\" },\r\n { json: \"subNote\", js: \"subNote\", typ: \"\" },\r\n { json: \"zone\", js: \"zone\", typ: \"\" },\r\n { json: \"maxDeliveryMen\", js: \"maxDeliveryMen\", typ: 0 },\r\n { json: \"daysOfWeek\", js: \"daysOfWeek\", typ: \"\" },\r\n { json: \"threshold\", js: \"threshold\", typ: 0 },\r\n { json: \"surcharge\", js: \"surcharge\", typ: 0 },\r\n { json: \"cost\", js: \"cost\", typ: 0 },\r\n { json: \"charge\", js: \"charge\", typ: 0 },\r\n { json: \"firstDeliveryDate\", js: \"firstDeliveryDate\", typ: Date },\r\n { json: \"cutOffTime\", js: \"cutOffTime\", typ: Date },\r\n { json: \"leadTimeText\", js: \"leadTimeText\", typ: \"\" },\r\n { json: \"leadTimePrefixText\", js: \"leadTimePrefixText\", typ: \"\" },\r\n { json: \"leadTimeFromDays\", js: \"leadTimeFromDays\", typ: 0 },\r\n { json: \"leadTimeToDays\", js: \"leadTimeToDays\", typ: 0 },\r\n { json: \"leadTimeExtension\", js: \"leadTimeExtension\", typ: 0 },\r\n { json: \"isPickable\", js: \"isPickable\", typ: true },\r\n { json: \"isRoomOfChoice\", js: \"isRoomOfChoice\", typ: true },\r\n { json: \"isSelectable\", js: \"isSelectable\", typ: true },\r\n ], false),\r\n \"Service\": o([\r\n { json: \"id\", js: \"id\", typ: 0 },\r\n { json: \"name\", js: \"name\", typ: \"\" },\r\n ], false),\r\n};\r\n","import { ResponsiveState } from \"./responsiveState\";\r\nimport { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\n\r\nexport interface IFirstInteraction {\r\n firstInteractionFired: boolean;\r\n firstMovementInteractionFired: boolean;\r\n}\r\nexport class FirstInteraction {\r\n private readonly _handleInteraction;\r\n\r\n public firstInteractionFired: boolean = false;\r\n public firstMovementInteractionFired: boolean = false;\r\n constructor() {\r\n this._handleInteraction = this.handleInteraction.bind(this);\r\n\r\n this.attachDocumentScrollEventListener();\r\n this.attachDocumentMouseDownEventListener();\r\n this.attachDocumentMouseMoveEventListener();\r\n this.attachDocumentTouchStartEventListener();\r\n this.attachDocumentKeyDownEventListener();\r\n }\r\n\r\n attachDocumentScrollEventListener(): void {\r\n console.log('FirstInteraction: attachDocumentScrollEventListener');\r\n document.addEventListener('scroll', this._handleInteraction);\r\n }\r\n\r\n removeDocumentScrollEventListener(): void {\r\n console.log('FirstInteraction: removeDocumentScrollEventListener');\r\n document.removeEventListener('scroll', this._handleInteraction);\r\n }\r\n\r\n attachDocumentMouseDownEventListener(): void {\r\n console.log('FirstInteraction: attachDocumentMouseDownEventListener');\r\n document.addEventListener('mousedown', this._handleInteraction);\r\n }\r\n\r\n removeDocumentMouseDownEventListener(): void {\r\n console.log('FirstInteraction: removeDocumentMouseDownEventListener');\r\n document.removeEventListener('mousedown', this._handleInteraction);\r\n }\r\n\r\n attachDocumentMouseMoveEventListener(): void {\r\n console.log('FirstInteraction: attachDocumentMouseMoveEventListener');\r\n document.addEventListener('mousemove', this._handleInteraction);\r\n }\r\n\r\n removeDocumentMouseMoveEventListener(): void {\r\n console.log('FirstInteraction: removeDocumentMouseMoveEventListener');\r\n document.removeEventListener('mousemove', this._handleInteraction);\r\n }\r\n\r\n attachDocumentTouchStartEventListener(): void {\r\n console.log('FirstInteraction: attachDocumentTouchStartEventListener');\r\n document.addEventListener('touchstart', this._handleInteraction);\r\n }\r\n\r\n removeDocumentTouchStartEventListener(): void {\r\n console.log('FirstInteraction: removeDocumentTouchStartEventListener');\r\n document.removeEventListener('touchstart', this._handleInteraction);\r\n }\r\n\r\n attachDocumentKeyDownEventListener(): void {\r\n console.log('FirstInteraction: attachDocumentKeyDownEventListener');\r\n document.addEventListener('keydown', this._handleInteraction);\r\n }\r\n\r\n removeDocumentKeyDownEventListener(): void {\r\n console.log('FirstInteraction: removeDocumentKeyDownEventListener');\r\n document.removeEventListener('keydown', this._handleInteraction);\r\n }\r\n\r\n static initialise() {\r\n let firstInteraction = new FirstInteraction();\r\n (<any>window).firstInteraction = firstInteraction;\r\n }\r\n\r\n handleInteraction(e: Event) {\r\n try{\r\n let type = e.type;\r\n if(!this.firstInteractionFired){\r\n console.log(`FirstInteraction: handleInteraction firstInteractionFired Type: ${type} Started`);\r\n document.dispatchEvent(this.firstInteractionCustomEvent(type));\r\n console.log(`FirstInteraction: handleInteraction firstInteractionFired Type: ${type} Fired`);\r\n this.firstInteractionFired = true;\r\n this.disposeNonMovementEventListners();\r\n \r\n }\r\n if(type === 'scroll' || (type === 'mousemove' && ResponsiveState.getState() === StringEnums.Selectors.Desktop))\r\n {\r\n console.log(`FirstInteraction: handleInteraction firstMovementInteractionFired Type: ${type} Started`);\r\n document.dispatchEvent(this.firstMovementInteractionCustomEvent(type)); \r\n console.log(`FirstInteraction: handleInteraction firstMovementInteractionFired Type: ${type} Fired`);\r\n this.firstMovementInteractionFired = true;\r\n this.disposeMovementEventListners();\r\n\r\n }\r\n \r\n if(this.firstInteractionFired && this.firstMovementInteractionFired){\r\n console.log(`FirstInteraction: handleInteraction Delete Started`);\r\n this.delete();\r\n }\r\n }catch(error){\r\n console.log('FirstInteraction: handleInteraction error', error);\r\n }\r\n }\r\n\r\n firstInteractionCustomEvent(type: string) {\r\n console.log(`FirstInteraction: firstInteractionCustomEvent type: ${type}`);\r\n return new CustomEvent(CustomEventEnums.FirstInteraction, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n type: type,\r\n }\r\n });\r\n }\r\n\r\n firstMovementInteractionCustomEvent(type: string) {\r\n console.log(`FirstInteraction: firstMovementInteractionCustomEvent type: ${type}`);\r\n return new CustomEvent(CustomEventEnums.FirstMovementInteraction, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n type: type,\r\n }\r\n });\r\n }\r\n\r\n\r\n disposeNonMovementEventListners(){\r\n this.removeDocumentMouseDownEventListener();\r\n this.removeDocumentTouchStartEventListener();\r\n this.removeDocumentKeyDownEventListener();\r\n }\r\n disposeMovementEventListners(){\r\n this.removeDocumentMouseMoveEventListener();\r\n this.removeDocumentScrollEventListener();\r\n }\r\n\r\n \r\n\r\n delete() {\r\n console.log('FirstInteraction: delete');\r\n if ((<any>window)['firstInteraction']) {\r\n console.log('FirstInteraction: delete - has a firstInteraction');\r\n delete (<any>window)['firstInteraction'];\r\n console.log('FirstInteraction: delete - reference firstInteraction');\r\n }\r\n else {\r\n console.log('FirstInteraction: delete - firstInteraction Reference Not Found');\r\n }\r\n }\r\n}","import { AttributeEnums } from \"../utilities/enums/attributeEnums\";\r\nimport { GoogleTagManagerEnums } from \"../utilities/enums/googleTagManagerEnums\";\r\nimport { IAddToRemoveFromCartGtmDataObject, IFilterClickGtmDataObject, IItemClickGtmDataObject, IMenuClickGtmDataObject, IProductGtmDataObject, IProductViewGtmDataObject, IPromotionGtmDataObject, IQuickLinkClickGtmDataObject, ISearchProductAndPageClickGtmDataObject, ISortClickGtmDataObject, IViewCartGtmDataObject } from \"./gtmDataObject\";\r\nimport { IGtmAddToCartAdd, IGtmAddToCartEcommerce, IGtmPostAddToCartObject } from \"./gtmPostAddToCartObject\";\r\nimport { IGtmFilterClickEcommerce, IGtmPostFilterClickObject } from \"./gtmPostFilterClickObject\";\r\nimport { IGtmItemEcommerce, IGtmPostItemClickObject } from \"./gtmPostItemClickObject\";\r\nimport { IGtmMenuEcommerce, IGtmPostMenuClickObject } from \"./gtmPostMenuClickObject\";\r\nimport { IGtmProductTileActionField, IGtmProductTileEcommerce, IGtmProductTileEcommerceClick, IGtmPostProductTileClickObject } from \"./gtmPostProductTileClickObject\";\r\nimport { IGtmPostProductTileImpressionsObject, IGtmProductTileImpressionsEcommerce } from \"./gtmPostProductTileImpressionsObject\";\r\nimport { IGtmPostProductViewObject, IGtmProductViewDetail, IGtmProductViewEcommerce } from \"./gtmPostProductViewObject\";\r\nimport { IGtmPromotionEcommerce, IGtmPromotionEcommerceClick, IGtmPostPromotionClickObject } from \"./gtmPostPromotionClickObject\";\r\nimport { IGtmPostPromotionImpressionsObject, IGtmPromotionImpressionsEcommerce, IGtmPromotionImpressionsPromoView } from \"./gtmPostPromotionImpressionsObject\";\r\nimport { IGtmPostQuickLinkClickObject, IGtmQuickLinkClickEcommerce } from \"./gtmPostQuickLinkClickObject\";\r\nimport { IGtmPostRemoveFromCartObject, IGtmRemoveFromCartEcommerce, IGtmRemoveFromCartRemove } from \"./gtmPostRemoveFromCartObject\";\r\nimport { IGtmPostSearchProductAndPageClickObject, IGtmSearchProductAndPageEcommerce } from \"./gtmPostSearchProductAndPageClickObject\";\r\nimport { IGtmPostSortClickObject, IGtmSortClickEcommerce } from \"./gtmPostSortClickObject\";\r\nimport { IGtmPostViewCartEcommerce, IGtmPostViewCartObject } from \"./gtmPostViewCartObject\";\r\n\r\nconst ids = require('../../config/ids.json');\r\n\r\nexport namespace GoogleTagManager {\r\n\r\n export function sendProductGtmDataObjectAndNavigate(productGtmDataObject: IProductGtmDataObject, navigationUrl: string): void {\r\n let products = new Array<IProductGtmDataObject>();\r\n products.push(productGtmDataObject);\r\n\r\n this.sendProductsGtmDataObjectAndNavigate(products, navigationUrl, productGtmDataObject.list);\r\n }\r\n\r\n export function sendProductsGtmDataObjectAndNavigate(productGtmDataObjects: IProductGtmDataObject[], navigationUrl: string, list: string): void {\r\n try {\r\n if (checkIfWindowHasGtm()) {\r\n if (productGtmDataObjects !== null && productGtmDataObjects.length > 0) {\r\n let gtmProductTileActionField: IGtmProductTileActionField = {\r\n list: list\r\n };\r\n let gtmProductTileEcommerceClick: IGtmProductTileEcommerceClick = {\r\n actionField: gtmProductTileActionField,\r\n products: productGtmDataObjects\r\n };\r\n let gtmProductTileEcommerce: IGtmProductTileEcommerce = {\r\n click: gtmProductTileEcommerceClick\r\n };\r\n let gtmProductTilePostObject: IGtmPostProductTileClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.ProductClick,\r\n ecommerce: gtmProductTileEcommerce,\r\n eventCallback: (containerId) => { if (containerIdChecker(containerId)) { document.location = navigationUrl } }\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmProductTilePostObject);\r\n }\r\n else {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n else {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n catch {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n export function sendPromotionsGtmDataObjectAndNavigate(promotionGtmDataObjects: IPromotionGtmDataObject, navigationUrl: string): void {\r\n try {\r\n if (checkIfWindowHasGtm()) {\r\n let promotionsArray = new Array<IPromotionGtmDataObject>();\r\n promotionsArray.push(promotionGtmDataObjects);\r\n let gtmPromotionEcommerceClick: IGtmPromotionEcommerceClick = {\r\n promotions: promotionsArray\r\n };\r\n let gtmPromotionEcommerce: IGtmPromotionEcommerce = {\r\n promoClick: gtmPromotionEcommerceClick\r\n };\r\n let gtmPromotionPostObject: IGtmPostPromotionClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.PromotionClick,\r\n ecommerce: gtmPromotionEcommerce,\r\n eventCallback: (containerId) => { if (containerIdChecker(containerId)) { document.location = navigationUrl } }\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPromotionPostObject);\r\n }\r\n else {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n catch {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n export function sendProductTileImpressionsGtmDataObject(productGtmDataObjects: IProductGtmDataObject[]): boolean {\r\n try {\r\n if (productGtmDataObjects !== null && productGtmDataObjects.length > 0) {\r\n let gtmProductTileImpressionsEcommerce: IGtmProductTileImpressionsEcommerce = {\r\n currencyCode: 'GBP',\r\n impressions: productGtmDataObjects\r\n }\r\n let gtmPostProductTileImpressionsObject: IGtmPostProductTileImpressionsObject = {\r\n event: GoogleTagManagerEnums.EventTypes.ProductImpressions,\r\n ecommerce: gtmProductTileImpressionsEcommerce\r\n }\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostProductTileImpressionsObject);\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n export function sendPromotionImpressionsGtmDataObject(promotionGtmDataObject: IPromotionGtmDataObject[]): boolean {\r\n try {\r\n if (promotionGtmDataObject !== null && promotionGtmDataObject.length > 0) {\r\n let gtmPromotionImpressionsPromoView: IGtmPromotionImpressionsPromoView = {\r\n promotions: promotionGtmDataObject\r\n }\r\n\r\n let gtmPromotionImpressionsEcommerce: IGtmPromotionImpressionsEcommerce = {\r\n promoView: gtmPromotionImpressionsPromoView\r\n\r\n }\r\n let gtmPostPromotionImpressionsObject: IGtmPostPromotionImpressionsObject = {\r\n event: GoogleTagManagerEnums.EventTypes.PromotionImpressions,\r\n ecommerce: gtmPromotionImpressionsEcommerce\r\n }\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostPromotionImpressionsObject);\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n export function sendProductViewGtmDataObjectList(productViewGtmDataObjectList: IProductViewGtmDataObject[]) {\r\n try {\r\n let gtmProductViewDetail: IGtmProductViewDetail = {\r\n products: productViewGtmDataObjectList\r\n };\r\n let gtmProductViewEcommerce: IGtmProductViewEcommerce = {\r\n detail: gtmProductViewDetail\r\n };\r\n let gtmPostProductViewObject: IGtmPostProductViewObject = {\r\n event: GoogleTagManagerEnums.EventTypes.ProductView,\r\n ecommerce: gtmProductViewEcommerce\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostProductViewObject);\r\n } catch (error) {\r\n\r\n }\r\n }\r\n export function sendProductViewGtmDataObject(productViewGtmDataObject: IProductViewGtmDataObject) {\r\n try {\r\n let productViewList = new Array<IProductViewGtmDataObject>();\r\n productViewList.push(productViewGtmDataObject);\r\n\r\n this.sendProductViewGtmDataObjectList(productViewList);\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n export function sendAddToCartGtmDataObjectList(addToRemoveFromCartGtmDataObjectList: IAddToRemoveFromCartGtmDataObject[]) {\r\n try {\r\n\r\n let gtmAddToCartAdd: IGtmAddToCartAdd = {\r\n products: addToRemoveFromCartGtmDataObjectList\r\n };\r\n let gtmAddToCartEcommerce: IGtmAddToCartEcommerce = {\r\n currencyCode: 'GBP',\r\n add: gtmAddToCartAdd\r\n }\r\n let gtmPostAddToCartObject: IGtmPostAddToCartObject = {\r\n event: GoogleTagManagerEnums.EventTypes.AddToCart,\r\n ecommerce: gtmAddToCartEcommerce\r\n }\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostAddToCartObject);\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n export function sendAddToCartGtmDataObject(addToRemoveFromCartGtmDataObject: IAddToRemoveFromCartGtmDataObject) {\r\n try {\r\n let addToRemoveFromCartList = new Array<IAddToRemoveFromCartGtmDataObject>();\r\n addToRemoveFromCartList.push(addToRemoveFromCartGtmDataObject);\r\n\r\n this.sendAddToCartGtmDataObjectList(addToRemoveFromCartList);\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n export function sendRemoveFromCartGtmDataObjectList(addToRemoveFromCartGtmDataObjectList: IAddToRemoveFromCartGtmDataObject[]) {\r\n try {\r\n\r\n let gtmRemoveFromCartRemove: IGtmRemoveFromCartRemove = {\r\n products: addToRemoveFromCartGtmDataObjectList\r\n };\r\n let gtmRemoveFromCartEcommerce: IGtmRemoveFromCartEcommerce = {\r\n currencyCode: 'GBP',\r\n remove: gtmRemoveFromCartRemove\r\n }\r\n let gtmPostRemoveFromCartObject: IGtmPostRemoveFromCartObject = {\r\n event: GoogleTagManagerEnums.EventTypes.RemoveFromCart,\r\n ecommerce: gtmRemoveFromCartEcommerce\r\n }\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostRemoveFromCartObject);\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n export function sendRemoveFromCartGtmDataObject(addToRemoveFromCartGtmDataObject: IAddToRemoveFromCartGtmDataObject) {\r\n try {\r\n let addToRemoveFromCartList = new Array<IAddToRemoveFromCartGtmDataObject>();\r\n addToRemoveFromCartList.push(addToRemoveFromCartGtmDataObject);\r\n\r\n this.sendRemoveFromCartGtmDataObjectList(addToRemoveFromCartList);\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n export function sendViewCartGtmDataObjectList(viewCartGtmDataObjectList: IViewCartGtmDataObject[]): void {\r\n try {\r\n let gtmPostViewCartEcommerce: IGtmPostViewCartEcommerce = {\r\n items: viewCartGtmDataObjectList\r\n };\r\n let gtmPostViewCartObject: IGtmPostViewCartObject = {\r\n event: GoogleTagManagerEnums.EventTypes.ViewCart,\r\n ecommerce: gtmPostViewCartEcommerce\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostViewCartObject);\r\n\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n export function sendSearchProductAndPageClickGtmDataObjectAndNavigate(searchClickGtmDataObject: ISearchProductAndPageClickGtmDataObject, eventTypes: GoogleTagManagerEnums.EventTypes, navigationUrl: string): void {\r\n try {\r\n if (checkIfWindowHasGtm()) {\r\n let gtmSearchProductAndPageEcommerce: IGtmSearchProductAndPageEcommerce = {\r\n click: searchClickGtmDataObject\r\n };\r\n let gtmPostSearchProductAndPageClickObject: IGtmPostSearchProductAndPageClickObject = {\r\n event: eventTypes,\r\n ecommerce: gtmSearchProductAndPageEcommerce,\r\n eventCallback: (containerId) => { if (containerIdChecker(containerId)) { document.location = navigationUrl } }\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostSearchProductAndPageClickObject);\r\n }\r\n else {\r\n document.location = navigationUrl\r\n }\r\n }\r\n\r\n catch {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n export function sendMenuClickGtmDataObjectAndNavigate(menuClickGtmDataObject: IMenuClickGtmDataObject, navigationUrl: string): void {\r\n try {\r\n if (checkIfWindowHasGtm()) {\r\n let gtmMenuEcommerce: IGtmMenuEcommerce = {\r\n click: menuClickGtmDataObject\r\n };\r\n let gtmPostMenuPageClickObject: IGtmPostMenuClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.MenuClick,\r\n ecommerce: gtmMenuEcommerce,\r\n eventCallback: (containerId) => { if (containerIdChecker(containerId)) { document.location = navigationUrl } }\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostMenuPageClickObject);\r\n }\r\n else {\r\n document.location = navigationUrl\r\n }\r\n }\r\n\r\n catch {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n export function sendItemClickGtmDataObjectAndNavigate(itemClickGtmDataObject: IItemClickGtmDataObject, navigationUrl: string): void {\r\n try {\r\n if (checkIfWindowHasGtm()) {\r\n let gtmItemEcommerce: IGtmItemEcommerce = {\r\n click: itemClickGtmDataObject\r\n };\r\n let gtmPostItemClickObject: IGtmPostItemClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.ItemClick,\r\n ecommerce: gtmItemEcommerce,\r\n eventCallback: (containerId) => { if (containerIdChecker(containerId)) { document.location = navigationUrl } }\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostItemClickObject);\r\n }\r\n else {\r\n document.location = navigationUrl\r\n }\r\n }\r\n\r\n catch {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n export function sendItemClickGtmDataObject(itemClickGtmDataObject: IItemClickGtmDataObject): void {\r\n try {\r\n let gtmItemEcommerce: IGtmItemEcommerce = {\r\n click: itemClickGtmDataObject\r\n };\r\n let gtmPostItemClickObject: IGtmPostItemClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.ItemClick,\r\n ecommerce: gtmItemEcommerce\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostItemClickObject);\r\n }\r\n catch {\r\n\r\n }\r\n }\r\n\r\n export function sendSortClickGtmDataObject(sortClickGtmDataObject: ISortClickGtmDataObject): void {\r\n try {\r\n let gtmSortClickEcommerce: IGtmSortClickEcommerce = {\r\n click: sortClickGtmDataObject\r\n };\r\n let gtmPostSortClickObject: IGtmPostSortClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.SortClick,\r\n ecommerce: gtmSortClickEcommerce\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostSortClickObject);\r\n }\r\n catch {\r\n\r\n }\r\n }\r\n\r\n export function sendFilterClickGtmDataObject(filterClickGtmDataObject: IFilterClickGtmDataObject): void {\r\n try {\r\n let gtmFilterClickEcommerce: IGtmFilterClickEcommerce = {\r\n click: filterClickGtmDataObject\r\n };\r\n let gtmPostFilterClickObject: IGtmPostFilterClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.FilterClick,\r\n ecommerce: gtmFilterClickEcommerce\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostFilterClickObject);\r\n }\r\n catch {\r\n\r\n }\r\n }\r\n\r\n export function sendQuickLinkClickGtmDataObjectAndNavigate(quickLinkClickGtmDataObject: IQuickLinkClickGtmDataObject, navigationUrl: string): void {\r\n try {\r\n if (checkIfWindowHasGtm()) {\r\n\r\n let gtmQuickLinkClickEcommerce: IGtmQuickLinkClickEcommerce = {\r\n click: quickLinkClickGtmDataObject\r\n };\r\n let gtmPostQuickLinkClickObject: IGtmPostQuickLinkClickObject = {\r\n event: GoogleTagManagerEnums.EventTypes.QuickLinkClick,\r\n ecommerce: gtmQuickLinkClickEcommerce,\r\n eventCallback: (containerId) => { if (containerIdChecker(containerId)) { document.location = navigationUrl } }\r\n };\r\n\r\n let dataLayer = (<any>window).dataLayer;\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gtmPostQuickLinkClickObject);\r\n }\r\n else {\r\n document.location = navigationUrl\r\n }\r\n\r\n }\r\n catch {\r\n document.location = navigationUrl;\r\n }\r\n }\r\n\r\n function containerIdChecker(containerId: string): boolean {\r\n if (containerId !== ids.GoogleContainerIdToIgnore) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n function checkIfWindowHasGtm(): boolean {\r\n try {\r\n if ((<any>window).google_tag_manager) {\r\n console.log('Google Tag Manager is loaded');\r\n return true;\r\n }\r\n else {\r\n console.log('Google Tag Manager is not loaded');\r\n return false;\r\n }\r\n } catch (error) {\r\n console.log(`GoogleTagManager: checkIfWindowHasGtm ERROR`, error);\r\n return false;\r\n }\r\n }\r\n}","import { ProductListingPage } from \"../components/productListingPage/productListingPage\";\r\nimport { IPopOutController, IPopOutState } from \"./popOutController\";\r\nimport { ResponsiveState } from \"./responsiveState\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\nimport { UtilityEnums } from \"./utilities/enums/utillityEnums\";\r\nimport { TimeUtils } from \"./utilities/timeUtils\";\r\nconst urlPaths = require('../config/urlPaths.json');\r\nexport interface IHistoryController {\r\n pushProductListingPageHistoryToStack: (pageUrl: string, title: string) => void; \r\n}\r\n\r\nexport interface IHistoryState {\r\n title: string;\r\n type: UtilityEnums.HistoryStateType;\r\n}\r\n\r\nexport interface IHistoryStatePopOut extends IHistoryState {\r\n popOutState: IPopOutState;\r\n}\r\n\r\nexport interface IHistoryStateProductListingPage extends IHistoryState {\r\n querySelector: string;\r\n}\r\n\r\nexport class HistoryController {\r\n\r\n private readonly popoutController: IPopOutController;\r\n private readonly _handlePopState;\r\n\r\n\r\n constructor() {\r\n this.popoutController = (<any>window).popOutController;\r\n\r\n this._handlePopState = this.handlePopState.bind(this);\r\n this.attachHistoryControllerPopStateEventListener();\r\n\r\n }\r\n attachHistoryControllerPopStateEventListener(): void {\r\n console.log('HistoryController: attachHistoryControllerPopStateEventListener');\r\n (<any>window).addEventListener(\"popstate\", this._handlePopState);\r\n }\r\n\r\n removeHistoryControllerPopStateEventListener(): void {\r\n console.log('HistoryController: removeHistoryControllerPopStateEventListener');\r\n (<any>window).removeEventListener('popstate', this._handlePopState);\r\n }\r\n\r\n\r\n handleBeforeUnload() {\r\n\r\n console.log('HistoryController: handleBeforeUnload hashchange FIRED');\r\n \r\n HistoryController.removeAllPopOutHistory();\r\n }\r\n\r\n\r\n handlePopState(e: PopStateEvent) {\r\n console.log('HistoryController: handlePopState POPPED Event Started');\r\n\r\n let state = e.state as IHistoryState;\r\n if (state !== null && state !== undefined) {\r\n\r\n if (state.type === UtilityEnums.HistoryStateType.PopOut) {\r\n if (location.href.includes('/browse')) {\r\n console.log('HistoryController: handlePopState - Pop Out PLP ', state.title);\r\n let historyStatePopOut = e.state as IHistoryStatePopOut;\r\n this.handlePopOutStateChangeForProductListingPage(historyStatePopOut.popOutState);\r\n } else {\r\n console.log('HistoryController: handlePopState - Pop Out', state.title);\r\n let historyStatePopOut = e.state as IHistoryStatePopOut;\r\n this.handlePopOutStateChange(historyStatePopOut.popOutState);\r\n }\r\n } else if (state.type === UtilityEnums.HistoryStateType.ProductListingPageUpdate && ProductListingPage.hasDifferentQuerySelector(location.href.split('/browse/')[1])) {\r\n let historyStateProductListingPage = e.state as IHistoryStateProductListingPage;\r\n historyStateProductListingPage.querySelector = historyStateProductListingPage.querySelector.replace('browse/', '');\r\n console.log(`HistoryController: handlePopState - PLP ${historyStateProductListingPage.querySelector}`);\r\n\r\n this.handleProductListingPageStateChange(historyStateProductListingPage.querySelector);\r\n\r\n } else if (state.type === UtilityEnums.HistoryStateType.BasketUpdate) {\r\n this.handleBasketUpdated();\r\n } else {\r\n console.log(`HistoryController: handlePopState - location.href ${location.href}`);\r\n \r\n this.handleOther();\r\n }\r\n\r\n document.title = state.title;\r\n } else if (location.href.includes('/browse/') && ProductListingPage.hasDifferentQuerySelector(location.href.split('/browse/')[1])) {\r\n let querySelector = location.href.split('/browse/')[1];\r\n console.log(`HistoryController: handlePopState - PLP Browse(Initial Page) ${querySelector}`);\r\n this.handleProductListingPageStateChange(querySelector);\r\n } else if (location.href.includes('/browse') && !location.href.includes('/browse/') && !location.href.includes('#')) {\r\n console.log(`HistoryController: handlePopState - PLP Browse(Initial Page) plp home (page--1)`);\r\n this.handleProductListingPageStateChange('page--1');\r\n }\r\n else {\r\n console.log(`HistoryController: handlePopState - Other`);\r\n this.handleOther();\r\n }\r\n }\r\n\r\n handleOther() {\r\n console.log('HistoryController: handleOther');\r\n this.popoutController.closeAllMenus();\r\n }\r\n\r\n handlePopOutStateChange(popOutState: IPopOutState) {\r\n console.log('HistoryController: handlePopOutStateChange');\r\n this.popoutController.openByIdAndFamilyNoHistoryPush(popOutState.popOutId, popOutState.popOutFamily);\r\n }\r\n\r\n handlePopOutStateChangeForProductListingPage(popOutState: IPopOutState) {\r\n console.log('HistoryController: handlePopOutStateChange');\r\n this.popoutController.openByIdAndFamilyNoHistoryPush(popOutState.popOutId, popOutState.popOutFamily);\r\n }\r\n\r\n handleProductListingPageStateChange(querySelector: string) {\r\n console.log('HistoryController: handlePopOutStateChange');\r\n document.dispatchEvent(HistoryController.productListingPageHistoryBackCustomEvent(querySelector));\r\n }\r\n\r\n handleBasketUpdated() {\r\n console.log('HistoryController: handleBasketUpdated');\r\n location.reload();\r\n }\r\n\r\n\r\n\r\n static productListingPageHistoryBackCustomEvent(querySelector: string) {\r\n console.log(`ProductListingPage: productListingPageHistoryBackCustomEvent querySelector: ${querySelector}`);\r\n return new CustomEvent(CustomEventEnums.ProductListingPageHistoryBack, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n querySelector: querySelector\r\n }\r\n });\r\n }\r\n\r\n static pushPopOutHistoryToStack(popOutFamily: string, popOutId: string, pageUrl: string) {\r\n console.log(`HistoryController: pushPopOutHistoryToStack HISTORY PUSHED - ${pageUrl}`);\r\n let popoutHistoryLength: number = HistoryController.getPopoutHistoryLength();\r\n let urlWithoutHash: string = pageUrl.split('#')[0];\r\n let urlWithHash: string = `${urlWithoutHash}#${popOutFamily}${popOutId}`;\r\n let popOutState: IPopOutState = { popOutFamily: popOutFamily, popOutId: popOutId, popOutHistoryLength: popoutHistoryLength + 1 } as IPopOutState;\r\n let historyStatePopOut: IHistoryStatePopOut = { title: document.title, type: UtilityEnums.HistoryStateType.PopOut, popOutState: popOutState } as IHistoryStatePopOut;\r\n\r\n history.pushState(historyStatePopOut, document.title, urlWithHash);\r\n\r\n }\r\n\r\n static getPopoutHistoryLength(): number {\r\n console.log('HistoryController: getPopoutHistoryLength');\r\n try {\r\n let state = history.state as IHistoryState;\r\n if (state !== null && state !== undefined) {\r\n if (state.type === UtilityEnums.HistoryStateType.PopOut) {\r\n let historyStatePopOut = history.state as IHistoryStatePopOut;\r\n return historyStatePopOut.popOutState.popOutHistoryLength;\r\n } else {\r\n return 0;\r\n }\r\n } else {\r\n return 0;\r\n }\r\n } catch (error) {\r\n console.log('HistoryController: getPopoutHistoryLength ERROR', error);\r\n\r\n return 0;\r\n }\r\n\r\n }\r\n\r\n async pushProductListingPageHistoryToStack(pageUrl: string, title: string) {\r\n console.log(`HistoryController: pushProductListingPageHistoryToStack Start - pageUrl ${pageUrl} title ${title}`);\r\n this.removeHistoryControllerPopStateEventListener();\r\n this.popoutController.active =false;\r\n let currentHistoryHasPopout: boolean = (HistoryController.getPopoutHistoryLength() > 0) ? true : false;\r\n if (currentHistoryHasPopout) {\r\n HistoryController.removeAllPopOutHistory();\r\n console.log('HistoryController: pushProductListingPageHistoryToStack - POP OUT HISTORY REMOVED');\r\n\r\n }\r\n\r\n let historyState: IHistoryStateProductListingPage;\r\n let currentUrl = window.location.href;\r\n if (currentUrl === urlPaths.websiteUrl + '/browse') {\r\n pageUrl = 'browse/' + pageUrl;\r\n \r\n } \r\n historyState = { title: title, type: UtilityEnums.HistoryStateType.ProductListingPageUpdate, querySelector: pageUrl } as IHistoryStateProductListingPage;\r\n let querySelector: string = historyState.querySelector;\r\n\r\n\r\n if (currentHistoryHasPopout) {\r\n //await this.pushPopOutHistoryToStackOnPollIsTrue(querySelector, pageUrl);\r\n await this.pushStateForProductListingPageOnPollIsTrue(historyState, title, pageUrl, querySelector);\r\n } else {\r\n\r\n history.pushState(historyState, title, pageUrl);\r\n \r\n document.title = title;\r\n this.attachHistoryControllerPopStateEventListener();\r\n this.popoutController.active = true;\r\n\r\n }\r\n console.log(`HistoryController: pushProductListingPageHistoryToStack - finished`);\r\n // if (currentHistoryHasPopout) {\r\n // setTimeout(() => {\r\n // HistoryController.pushPopOutHistoryToStack(AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue, '1', `${pageUrl}#${AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue}1`, `${title}#${AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue}1`);\r\n // },1000);\r\n // }\r\n\r\n\r\n\r\n\r\n }\r\n\r\n async pushStateForProductListingPageOnPollIsTrue(historyState: IHistoryStateProductListingPage, title: string, pageUrl: string, querySelector: string) {\r\n let maxTime = 0\r\n let that = this;\r\n let intervalId1 = await setInterval(async function () {\r\n\r\n if (history.state === null || UtilityEnums.HistoryStateType.ProductListingPageUpdate === history.state.type) {\r\n\r\n history.pushState(historyState, title, pageUrl);\r\n document.title = title;\r\n console.log(`HistoryController: pushProductListingPageHistoryToStack - PLP HISTORY PUSHED AFTER POPOUT STATE REMOVED ${pageUrl}`);\r\n //await this.pushPopOutHistoryToStackOnPollIsTrue(querySelector, pageUrl);\r\n await (async function () {\r\n let maxTime = 0\r\n\r\n let intervalId2 = await setInterval(async function () {\r\n\r\n if (querySelector === history.state.querySelector) {\r\n let popOutUrl = `${pageUrl}#${AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue}1`\r\n HistoryController.pushPopOutHistoryToStack(AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue, '1', popOutUrl);\r\n console.log(`HistoryController: pushProductListingPageHistoryToStack - POP OUT HISTORY PUSHED AFTER POPOUT STATE REMOVED - ${popOutUrl}`);\r\n that.attachHistoryControllerPopStateEventListener();\r\n that.popoutController.active = true;\r\n clearInterval(intervalId2);\r\n }\r\n if (maxTime > 1000) {\r\n clearInterval(intervalId2);\r\n that.attachHistoryControllerPopStateEventListener();\r\n that.popoutController.active = true;\r\n }\r\n maxTime += 100;\r\n }, 100);\r\n })();\r\n clearInterval(intervalId1);\r\n }\r\n\r\n if (maxTime > 1000) {\r\n clearInterval(intervalId1);\r\n that.attachHistoryControllerPopStateEventListener();\r\n that.popoutController.active = true;\r\n }\r\n\r\n maxTime += 100;\r\n }, 100);\r\n }\r\n\r\n async pushPopOutHistoryToStackOnPollIsTrue(querySelector: string, pageUrl: string) {\r\n let timeCounter = 0\r\n\r\n let intervalId2 = setInterval(async function () {\r\n\r\n if (querySelector === history.state.querySelector) {\r\n let popOutUrl = `${pageUrl}#${AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue}1`\r\n HistoryController.pushPopOutHistoryToStack(AttributeEnums.ProductListingPageOptions.ProductListingPageOptionsPopOutValue, '1', popOutUrl);\r\n console.log(`HistoryController: pushProductListingPageHistoryToStack - POP OUT HISTORY PUSHED AFTER POPOUT STATE REMOVED - ${popOutUrl}`);\r\n clearInterval(intervalId2);\r\n }\r\n if (timeCounter > 1000) {\r\n clearInterval(intervalId2);\r\n }\r\n timeCounter += 100;\r\n }, 100);\r\n }\r\n\r\n static replaceProductListingPageHistoryOnStack(pageUrl: string, title: string) {\r\n let currentHistoryIsPopout: boolean = (this.getPopoutHistoryLength() > 0) ? true : false;\r\n if (currentHistoryIsPopout) {\r\n\r\n HistoryController.removeAllPopOutHistory();\r\n\r\n }\r\n console.log('HistoryController: replaceProductListingPageHistoryOnStack HISTORY REPLACED');\r\n let historyState: IHistoryState = { title: title, type: UtilityEnums.HistoryStateType.ProductListingPageUpdate } as IHistoryState;\r\n\r\n history.replaceState(historyState, title, pageUrl);\r\n document.title = title;\r\n\r\n }\r\n\r\n\r\n\r\n static replaceBasketHistoryToStack(pageUrl: string) {\r\n let title: string = 'Basket Update | Land of Beds';\r\n let historyState: IHistoryState = { title: title, type: UtilityEnums.HistoryStateType.BasketUpdate } as IHistoryState;\r\n\r\n history.replaceState(historyState, title, pageUrl);\r\n document.title = title;\r\n }\r\n\r\n static async removeAllPopOutHistory() {\r\n\r\n console.log('HistoryController: removeAllPopOutHistory');\r\n if (history.state !== null && history.state.type !== null && history.state.type === UtilityEnums.HistoryStateType.PopOut) {\r\n\r\n let stepsToGoBack: number = 0 - HistoryController.getPopoutHistoryLength();\r\n history.go(stepsToGoBack);\r\n console.log(`HistoryController: removeAllPopOutHistory - History.go(${stepsToGoBack}) Called`);\r\n }\r\n\r\n }\r\n\r\n\r\n static async historyBackOneIfPopOut() {\r\n let state = history.state as IHistoryState\r\n if (state.type === UtilityEnums.HistoryStateType.PopOut) {\r\n console.log('HistoryController: historyBackOneIfPopOut - History.Back() Called');\r\n history.back();\r\n }\r\n }\r\n\r\n static initialiseHistoryController() {\r\n let historyController = new HistoryController();\r\n (<any>window).historyController = historyController;\r\n }\r\n\r\n static getHistoryControllerClassReference(): IHistoryController {\r\n return ((<any>window).historyController as IHistoryController);\r\n }\r\n\r\n dispose() {\r\n this.removeHistoryControllerPopStateEventListener();\r\n }\r\n}","import { DomUtils } from \"./utilities/domUtils\";\r\nimport { InstantiationUtils } from \"./utilities/instantiationUtils\";\r\nimport { initialisePopOutController } from './popOutControllerInitialiser';\r\nimport { initialiseBasketPopOut } from \"../components/basketPopOut/basketPopOutInitialiser\";\r\nimport { ResponsiveState } from \"./responsiveState\";\r\nimport { initialiseOverlay } from \"./overlayInitialiser\";\r\nimport { initialiseMegaMenu } from \"./megaMenuInitialiser\";\r\nimport { swipedEvents } from \"./utilities/swipeEvents\";\r\nimport { FirstInteraction } from \"./firstInteraction\";\r\nimport { HistoryController } from \"./historyController\";\r\nimport { ScrollService } from \"./scrollService\";\r\nimport { GlobalComponents } from \"../components/globalComponents/globalComponents\";\r\nimport { LiveChat } from \"./liveChat\";\r\nimport { Notification } from \"../components/notification/notification\";\r\nimport { LbCookies } from \"./lbCookies\";\r\nimport { OneTrustCookieConsent } from \"./oneTrust/oneTrustCookieConsent\";\r\nconst initialiseationConfigData = require('../config/initialisationConfig.json');\r\nconst toggleFeatures = require('../config/toggleFeatures.json');\r\n//const urlPaths = global.require('../../config/urlPaths.json');\r\n\r\nwindow.addEventListener('DOMContentLoaded', () => {\r\n pageLoad();\r\n});\r\n\r\nasync function pageLoad() {\r\n ResponsiveState.responsiveStateInitialiser();\r\n swipedEvents(<any>window, document);\r\n initialisePopOutController();\r\n HistoryController.initialiseHistoryController();\r\n initialiseOverlay();\r\n initialiseMegaMenu();\r\n await initialise();\r\n initialiseBasketPopOut();\r\n if (toggleFeatures.LiveChat) {\r\n Notification.notificationFactory();\r\n LiveChat.initialise();\r\n }\r\n FirstInteraction.initialise();\r\n ScrollService.initialise();\r\n GlobalComponents.initialiseGlobalComponents();\r\n HistoryController.removeAllPopOutHistory();\r\n if (toggleFeatures.CookieConsent) {\r\n LbCookies.getOrInitialiseCookieConsent();\r\n }\r\n LbCookies.setAffiliateClickRefCookie(OneTrustCookieConsent.getTargetingConsent());\r\n OneTrustCookieConsent.addOneTrustEventListeners();\r\n}\r\n\r\nexport async function initialise() {\r\n let allDataAttributeNames = DomUtils.createArrayOfDataElement();\r\n let uniqueAttributeNames = Array.from(new Set(allDataAttributeNames));\r\n await matchInitialiseationConfigWithDomElement(uniqueAttributeNames);\r\n}\r\n\r\nasync function matchInitialiseationConfigWithDomElement(uniqueAttributeNames: string[]) {\r\n for (var items in initialiseationConfigData.bundles) {\r\n let dataAttributeName: string = initialiseationConfigData.bundles[items][0].dataAttributeName;\r\n let functionName: string = initialiseationConfigData.bundles[items][0].functionName;\r\n let moduleUrl: string = initialiseationConfigData.bundles[items][0].moduleUrl;\r\n if (uniqueAttributeNames.includes(dataAttributeName)) {\r\n await InstantiationUtils.importAndInstatiate(moduleUrl, functionName);\r\n }\r\n }\r\n}","export interface IInstanceComponentBase {\r\n dispose:() => void;\r\n}\r\nexport abstract class InstanceComponentBase implements IInstanceComponentBase{\r\n\r\n constructor(protected htmlElement: Element) {\r\n this.htmlElement = htmlElement;\r\n }\r\n\r\n getHtmlElement(): Element {\r\n return this.htmlElement;\r\n }\r\n\r\n abstract dispose(): void;\r\n\r\n //abstract delete(): void;\r\n}","import { InstanceComponentBase } from \"./instanceComponentBase\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\n\r\nexport function initialiseInstanceComponents<Type extends InstanceComponentBase>(arg:Function, dataAttributeName:string, instanceComponentFactory:Function) {\r\n let instanceComponentsOfType:Type[] = getAllComponentsOfType<Type>(arg);\r\n let componentElements = document.querySelectorAll(dataAttributeName+ ':not(' + HelperUtils.addDataAttributeTags(AttributeEnums.InstanceComponentInitialiser.Ignore,'true')+')');\r\n createNewInstanceComponentBaseForAllNonExistant(instanceComponentsOfType, componentElements, instanceComponentFactory);\r\n}\r\n\r\nfunction getAllComponentsOfType<Type extends InstanceComponentBase>(arg:Function):Type[]{\r\n let instanceComponentBaseList: Type[] = [];\r\n for (let member in window) {\r\n if (window[member] instanceof arg) {\r\n let currentComponent = (window[member] as unknown) as Type; \r\n instanceComponentBaseList.push(currentComponent);\r\n }\r\n }\r\n return instanceComponentBaseList;\r\n}\r\n\r\nfunction createNewInstanceComponentBaseForAllNonExistant(instanceComponentBaseList:InstanceComponentBase[], componentElements:NodeListOf<Element>, instanceComponentFactory:Function){\r\n for (let i = 0; i < componentElements.length; i += 1) {\r\n let componentElement = componentElements[i];\r\n createInstanceComponentBaseForElementIfNonExistant(instanceComponentBaseList, componentElement, instanceComponentFactory);\r\n }\r\n}\r\n\r\nfunction createInstanceComponentBaseForElementIfNonExistant(instanceComponentBaseList:InstanceComponentBase[], componentElement:Element, instanceComponentFactory:Function) {\r\n if (instanceComponentBaseList.length === 0) {\r\n instanceComponentFactory(componentElement);\r\n } else {\r\n let componentExists = instanceComponentBaseList.some((c:InstanceComponentBase) => { return(componentElement === c.getHtmlElement()) });\r\n if (!componentExists) {\r\n instanceComponentFactory(componentElement);\r\n }\r\n }\r\n}","import { CookieConsent } from \"./cookieConsent\";\r\nimport { CookieUtils } from \"./utilities/cookieUtils\";\r\nimport { CookieEnums } from \"./utilities/enums/cookieEnums\";\r\nimport { OneTrustEnums } from \"./utilities/enums/oneTrustEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\nimport { GuidUtils } from \"./utilities/guidUtils\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\n\r\nexport namespace LbCookies {\r\n\r\n export function getOrInitialiseBasketSession(basketSession?: string) {\r\n\r\n let sessionId: string | null = CookieUtils.getCookie(CookieEnums.BasketSessionId);\r\n if (!sessionId) {\r\n if (basketSession === undefined || basketSession.length === 0) {\r\n sessionId = GuidUtils.generateUUID().toUpperCase();\r\n } else {\r\n sessionId = basketSession;\r\n }\r\n CookieUtils.setCookie(CookieEnums.BasketSessionId, sessionId, 14);\r\n }\r\n\r\n return sessionId;\r\n }\r\n\r\n export function getOrInitialiseCookieConsent(): void {\r\n try {\r\n let consentStatus: string | null = CookieUtils.getCookie(CookieEnums.CookieConsent);\r\n if (consentStatus) {\r\n if (consentStatus === StringEnums.Cookie.ConsentEnable) {\r\n CookieConsent.InitialiseCookieConsent();\r\n }\r\n } else {\r\n CookieUtils.setCookie(CookieEnums.CookieConsent, StringEnums.Cookie.ConsentEnable, 14);\r\n CookieConsent.InitialiseCookieConsent();\r\n }\r\n } catch {\r\n console.log('LbCookies: getOrInitialiseCookieConsent ERROR');\r\n }\r\n }\r\n\r\n export function setAffiliateClickRefCookie(targetingConsent: boolean): void {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n try {\r\n console.log('LbCookies: setAffiliateClickRefCookie - ' + targetingConsent);\r\n if (targetingConsent) {\r\n let clickRefParam: string | null = urlParams.get(StringEnums.QueryStringParameters.AffiliateClickRef);\r\n\r\n if (clickRefParam != null) {\r\n if (clickRefParam.length > 0) {\r\n CookieUtils.setCookie(CookieEnums.AffiliateClickRef, clickRefParam, 30);\r\n }\r\n }\r\n } else {\r\n CookieUtils.setCookie(CookieEnums.AffiliateClickRef, '', -1);\r\n }\r\n\r\n }\r\n catch {\r\n console.log('LbCookies: setAffiliateClickRefCookie ERROR');\r\n }\r\n }\r\n\r\n export function getAffiliateClickRefCookie(): string {\r\n try {\r\n let clickRefCookie: string | null = CookieUtils.getCookie(CookieEnums.AffiliateClickRef);\r\n let clickRef: string = '';\r\n\r\n if (clickRefCookie != null) {\r\n if (clickRefCookie.length > 0) {\r\n clickRef = clickRefCookie;\r\n }\r\n }\r\n\r\n return clickRef;\r\n }\r\n catch {\r\n console.log('LbCookies: getAffiliateClickRefCookie ERROR');\r\n return \"\";\r\n }\r\n }\r\n}","import { initialise } from \"./initialiser\";\r\nimport { IInstanceComponentBase } from \"./instanceComponentBase\";\r\nimport { CustomEvents } from \"./utilities/customEvents\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\nimport { SessionStorageEnums } from \"./utilities/enums/sessionStorageEnums\";\r\nimport { InstantiationUtils } from \"./utilities/instantiationUtils\";\r\nconst settings = require('../config/settings.json');\r\nexport interface ILiveChat {\r\n\r\n}\r\nexport class LiveChat implements ILiveChat {\r\n private readonly _handleFirstMovementInteraction;\r\n private readonly _handleLiveChatLink;\r\n private readonly _handleHideOverlay;\r\n private readonly _handleShowOverlay;\r\n private readonly _handleShowLiveChatEvent;\r\n private readonly _handleHideLiveChatEvent;\r\n private readonly _handleOpenLiveChatEvent;\r\n private readonly _handleCloseLiveChatEvent;\r\n\r\n constructor() {\r\n this._handleFirstMovementInteraction = this.handleFirstMovementInteraction.bind(this);\r\n this._handleLiveChatLink = this.handleLiveChatLink.bind(this);\r\n this._handleHideOverlay = this.handleHideOverlay.bind(this);\r\n this._handleShowOverlay = this.handleShowOverlay.bind(this);\r\n this._handleShowLiveChatEvent = this.handleShowLiveChatEvent.bind(this);\r\n this._handleHideLiveChatEvent = this.handleHideLiveChatEvent.bind(this);\r\n this._handleOpenLiveChatEvent = this.handleOpenLiveChatEvent.bind(this);\r\n this._handleCloseLiveChatEvent = this.handleCloseLiveChatEvent.bind(this);\r\n\r\n let sessionStorageLiveChatCached: string | null = sessionStorage.getItem(SessionStorageEnums.LiveChatCached);\r\n if(sessionStorageLiveChatCached === 'true'){\r\n this.handleFirstMovementInteraction();\r\n }else{\r\n this.attachFirstMovementInteractionEventListener();\r\n }\r\n }\r\n\r\n attachFirstMovementInteractionEventListener(): void {\r\n console.log('LiveChat: attachFirstMovementInteractionEventListener');\r\n (<any>window).addEventListener(CustomEventEnums.FirstMovementInteraction, this._handleFirstMovementInteraction);\r\n }\r\n\r\n removeFirstMovementInteractionEventListener(): void {\r\n console.log('LiveChat: removeFirstMovementInteractionEventListener');\r\n (<any>window).removeEventListener(CustomEventEnums.FirstMovementInteraction, this._handleFirstMovementInteraction);\r\n }\r\n\r\n attachLiveChatClickEventListener(): void {\r\n console.log('LiveChat: attachLiveChatClickEventListener');\r\n (<any>window).addEventListener('click', this._handleLiveChatLink);\r\n }\r\n removeLiveChatClickEventListener(): void {\r\n console.log('LiveChat: removeLiveChatClickEventListener');\r\n (<any>window).removeEventListener('click', this._handleLiveChatLink);\r\n }\r\n\r\n \r\n attachShowOverlayEventListener(): void {\r\n console.log('LiveChat: attachShowOverlayEventListener');\r\n (<any>window).addEventListener(CustomEventEnums.ShowOverlay, this._handleShowOverlay);\r\n }\r\n removeShowOverlayEventListener(): void {\r\n console.log('LiveChat: removeShowOverlayEventListener');\r\n (<any>window).removeEventListener(CustomEventEnums.ShowOverlay, this._handleShowOverlay);\r\n }\r\n attachHideOverlayEventListener(): void {\r\n console.log('LiveChat: attachHideOverlayEventListener');\r\n (<any>window).addEventListener(CustomEventEnums.HideOverlay, this._handleHideOverlay);\r\n }\r\n removeHideOverlayEventListener(): void {\r\n console.log('LiveChat: removeHideOverlayEventListener');\r\n (<any>window).removeEventListener(CustomEventEnums.HideOverlay, this._handleHideOverlay);\r\n }\r\n\r\n attachShowLiveChatEventListener(): void {\r\n console.log('LiveChat: attachShowLiveChatEventListener');\r\n (<any>window).addEventListener(CustomEventEnums.ShowLiveChat, this._handleShowLiveChatEvent);\r\n }\r\n removeShowLiveChatEventListener(): void {\r\n console.log('LiveChat: removeShowLiveChatEventListener');\r\n (<any>window).removeEventListener(CustomEventEnums.ShowLiveChat, this._handleShowLiveChatEvent);\r\n }\r\n\r\n attachHideLiveChatEventListener(): void {\r\n console.log('LiveChat: attachHideLiveChatEventListener');\r\n (<any>window).addEventListener(CustomEventEnums.HideLiveChat, this._handleHideLiveChatEvent);\r\n }\r\n removeHideLiveChatEventListener(): void {\r\n console.log('LiveChat: removeHideLiveChatEventListener');\r\n (<any>window).removeEventListener(CustomEventEnums.HideLiveChat, this._handleHideLiveChatEvent);\r\n }\r\n\r\n attachOpenLiveChatEventListener(): void {\r\n console.log('LiveChat: attachOpenLiveChatEventListener');\r\n (<any>window).addEventListener(CustomEventEnums.OpenLiveChat, this._handleOpenLiveChatEvent);\r\n }\r\n removeOpenLiveChatEventListener(): void {\r\n console.log('LiveChat: removeOpenLiveChatEventListener');\r\n (<any>window).removeEventListener(CustomEventEnums.OpenLiveChat, this._handleOpenLiveChatEvent);\r\n }\r\n\r\n attachCloseLiveChatEventListener(): void {\r\n console.log('LiveChat: attachCloseLiveChatEventListener');\r\n (<any>window).addEventListener(CustomEventEnums.CloseLiveChat, this._handleCloseLiveChatEvent);\r\n }\r\n removeCloseLiveChatEventListener(): void {\r\n console.log('LiveChat: removeCloseLiveChatEventListener');\r\n (<any>window).removeEventListener(CustomEventEnums.CloseLiveChat, this._handleCloseLiveChatEvent);\r\n }\r\n\r\n\r\n async handleFirstMovementInteraction(): Promise<void> {\r\n try{\r\n console.log('LiveChat: handleFirstInteraction');\r\n await this.loadLiveChat();\r\n this.removeFirstMovementInteractionEventListener();\r\n this.attachLiveChatClickEventListener();\r\n this.attachHideOverlayEventListener();\r\n this.attachShowOverlayEventListener();\r\n this.attachShowLiveChatEventListener();\r\n this.attachHideLiveChatEventListener();\r\n this.attachOpenLiveChatEventListener();\r\n this.attachCloseLiveChatEventListener();\r\n\r\n this.customiseChatLabel();\r\n } catch(error) {\r\n console.log('LiveChat: handleFirstInteraction: Error', error);\r\n }\r\n }\r\n\r\n customiseChatLabel(){\r\n try{\r\n (<any>window).zESettings = {\r\n webWidget: {\r\n launcher: {\r\n chatLabel: {\r\n '*': settings.LiveChatButtonOnlineMessage\r\n }\r\n }\r\n }\r\n };\r\n console.log(`LiveChat: customiseChatLabel chatLabel Online: ${settings.LiveChatButtonOnlineMessage} `);\r\n\r\n // (<any>window).zESettings = {\r\n // webWidget: {\r\n // contactOptions: {\r\n // enabled: true,\r\n // chatLabelOnline: { '*': settings.LiveChatButtonOnlineMessage },\r\n // chatLabelOffline: { '*': settings.LiveChatButtonOfflineMessage }\r\n // }\r\n // }\r\n // };\r\n console.log(`LiveChat: customiseChatLabel contactOptions chatLabelOnline: ${settings.LiveChatButtonOnlineMessage} chatLabelOffline: ${settings.LiveChatButtonOfflineMessage}`);\r\n (<any>window).zESettings = {\r\n webWidget: {\r\n launcher: {\r\n mobile: {\r\n labelVisible: true\r\n }\r\n }\r\n }\r\n };\r\n console.log(`LiveChat: customiseChatLabel - Label visible true`);\r\n\r\n } catch(error) {\r\n console.log('LiveChat: customiseChatLabel: Error', error);\r\n\r\n }\r\n }\r\n\r\n async loadLiveChat(): Promise<void> {\r\n //Requires Additional Cross Browser Testing\r\n await InstantiationUtils.injectScript('https://static.zdassets.com/ekr/snippet.js?key=026f3fa2-c554-400c-b1c9-d3eb7521baca', document.head, 'ze-snippet', true)\r\n .then(() => {\r\n console.log('LiveChat: loadLiveChat: Script loaded!');\r\n (<any>window).dispatchEvent(CustomEvents.liveChatLoadCompleteEvent());\r\n sessionStorage.setItem(SessionStorageEnums.LiveChatCached, 'true');\r\n }).catch(error => {\r\n console.error('LiveChat: LoadLiveChat: Error', error);\r\n });\r\n \r\n }\r\n \r\n handleLiveChatLink(event: Event): void {\r\n try{\r\n console.log('LiveChat: handleLiveChatLink');\r\n let targetElement = event.target as HTMLElement;\r\n if (targetElement.hasAttribute(AttributeEnums.LiveChat.LiveChatLink)) {\r\n event.preventDefault();\r\n this.openLiveChat();\r\n }\r\n } catch(error) {\r\n console.log('LiveChat: handleLiveChatLink: Error', error);\r\n }\r\n }\r\n\r\n openLiveChat(): void {\r\n console.log('LiveChat: openLiveChat');\r\n // (<any>window).$zopim.livechat.window.show();\r\n //this.showHideLiveChat(true);\r\n (<any>window).zE('webWidget', 'open');\r\n (<any>window).dispatchEvent(CustomEvents.closeAllMenusEvent());\r\n }\r\n handleHideOverlay(): void {\r\n this.showHideLiveChat(true);\r\n }\r\n\r\n handleShowOverlay(): void {\r\n this.showHideLiveChat(false);\r\n }\r\n\r\n handleShowLiveChatEvent(): void {\r\n this.showHideLiveChat(true);\r\n }\r\n handleHideLiveChatEvent(): void {\r\n this.showHideLiveChat(false);\r\n }\r\n\r\n handleOpenLiveChatEvent(): void {\r\n this.openLiveChat();\r\n }\r\n handleCloseLiveChatEvent(): void {\r\n //this.showHideLiveChat(false);\r\n }\r\n\r\n static initialise() {\r\n try{\r\n let doesObjectExistOnWindow = () => { return typeof (<any>window).liveChat };\r\n if (doesObjectExistOnWindow()) {\r\n let liveChat:ILiveChat = new LiveChat();\r\n (<any>window).liveChat = liveChat;\r\n }\r\n } catch(error) {\r\n\r\n console.log('LiveChat: initialise: Error', error);\r\n\r\n }\r\n }\r\n\r\n showHideLiveChat(chatVisibility: boolean): void {\r\n try{\r\n if(chatVisibility){\r\n (<any>window).zE('webWidget', 'show');\r\n }else{\r\n (<any>window).zE('webWidget', 'hide');\r\n }\r\n } catch(error) {\r\n\r\n console.log('LiveChat: showHideLiveChat: Error', error);\r\n\r\n }\r\n }\r\n \r\n\r\n dispose() {\r\n try{\r\n this.removeLiveChatClickEventListener();\r\n this.removeShowOverlayEventListener();\r\n this.removeHideOverlayEventListener();\r\n this.removeShowLiveChatEventListener();\r\n this.removeHideLiveChatEventListener();\r\n this.removeOpenLiveChatEventListener();\r\n this.removeCloseLiveChatEventListener();\r\n } catch(error){\r\n console.log('LiveChat: dispose: Error disposing', error);\r\n \r\n }\r\n\r\n }\r\n\r\n delete(): void {\r\n\r\n }\r\n}","import { IPopOutController, PopOutController } from \"./popOutController\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\nimport { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\nimport { AjaxGetAndReplaceHtml } from \"./ajaxGetAndReplaceHtml\";\r\nimport { UrlEnums } from \"./utilities/enums/urlEnums\";\r\nimport { HttpRequest } from \"./ajax\";\r\nimport { initialise } from \"./initialiser\";\r\nimport { IMegaMenuDesktop, MegaMenuDesktop } from \"./megaMenuDesktop\";\r\nimport { IMegaMenuHandheld, MegaMenuHandheld } from \"./megaMenuHandheld\";\r\nconst urlPaths = require('../config/urlPaths.json');\r\nexport class MegaMenu {\r\n\r\n private readonly _closeMobilePopOutOnDesktop;\r\n private readonly _setMegaMenuZIndex;\r\n private readonly _unsetMegaMenuZIndex;\r\n private readonly _handleFirstInteraction;\r\n private readonly _handleHandHeldMenuOpen;\r\n private megaMenuContainer: HTMLElement;\r\n private desktopMenuLoaded: boolean = false;\r\n private handHeldMenuLoaded: boolean = false;\r\n private megaMenuDesktop: IMegaMenuDesktop;\r\n private megaMenuHandheld: IMegaMenuHandheld;\r\n private timeOutHandler:ReturnType<typeof setTimeout>;\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n this.setMegaMenuContainer();\r\n\r\n this._closeMobilePopOutOnDesktop = this.closeMobilePopOutOnDesktop.bind(this);\r\n this._setMegaMenuZIndex = this.setMegaMenuZIndex.bind(this);\r\n this._unsetMegaMenuZIndex = this.unsetMegaMenuZIndex.bind(this);\r\n\r\n this._handleFirstInteraction = this.handleFirstInteraction.bind(this);\r\n this._handleHandHeldMenuOpen = this.handleHandHeldMenuOpen.bind(this);\r\n this.attachFirstInteractionChangeEventListener();\r\n this.attachOpenHandHeldMenuClickEventListener();\r\n\r\n this.megaMenuDesktopFactory();\r\n\r\n }\r\n attachOpenHandHeldMenuClickEventListener(): void {\r\n console.log('megaMenu: attachOpenHandHeldMenuClickEventListener');\r\n document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuHandHeldButton)).addEventListener('click', this._handleHandHeldMenuOpen);\r\n }\r\n\r\n removeOpenHandHeldMenuClickEventListener(): void {\r\n console.log('megaMenu: removeOpenHandHeldMenuClickEventListener');\r\n document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuHandHeldButton)).addEventListener('click', this._handleHandHeldMenuOpen);\r\n }\r\n\r\n attachFirstInteractionChangeEventListener(): void {\r\n console.log('megaMenu: attachFirstInteractionChangeEventListener');\r\n document.addEventListener(CustomEventEnums.FirstInteraction, this._handleFirstInteraction);\r\n }\r\n\r\n removeFirstInteractionChangeEventListener(): void {\r\n console.log('megaMenu: removeFirstInteractionChangeEventListener');\r\n document.removeEventListener(CustomEventEnums.FirstInteraction, this._handleFirstInteraction);\r\n }\r\n\r\n attachDeviceTypeChangeEventListener(): void {\r\n console.log('megaMenu: attachViewportDimensionsChangedEventListener');\r\n document.addEventListener(CustomEventEnums.DeviceTypeChangeEvent, this._closeMobilePopOutOnDesktop);\r\n }\r\n\r\n removeDeviceTypeChangeEventListener(): void {\r\n console.log('megaMenu: removeDeviceTypeChangeEventListener');\r\n document.removeEventListener(CustomEventEnums.DeviceTypeChangeEvent, this._closeMobilePopOutOnDesktop);\r\n }\r\n\r\n attachMegaMouseOverEventListener(): void {\r\n console.log('megaMenu: attachMegaMouseOverEventListener');\r\n this.htmlElement.addEventListener('mouseover', this._setMegaMenuZIndex);\r\n }\r\n\r\n removeMegaMenuMouseOverEventListener(): void {\r\n console.log('megaMenu: removeMegaMenuMouseOverEventListener');\r\n this.htmlElement.removeEventListener('mouseover', this._setMegaMenuZIndex);\r\n }\r\n\r\n attachMegaMouseOutEventListener(): void {\r\n console.log('megaMenu: attachMegaMouseOutEventListener');\r\n this.htmlElement.addEventListener('mouseout', this._unsetMegaMenuZIndex);\r\n }\r\n\r\n removeMegaMenuMouseOutEventListener(): void {\r\n console.log('megaMenu: removeMegaMenuMouseOutEventListener');\r\n this.htmlElement.removeEventListener('mouseover', this._unsetMegaMenuZIndex);\r\n }\r\n\r\n megaMenuDesktopFactory(): void {\r\n try {\r\n this.megaMenuDesktop = new MegaMenuDesktop(this.htmlElement);\r\n } catch (error) {\r\n console.log('MegaMenu: megaMenuDesktopFactory Error', error);\r\n }\r\n }\r\n\r\n megaMenuHandheldFactory(): void {\r\n try {\r\n let megaMenuHandheldElement: HTMLElement = this.megaMenuContainer.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenuHandheld.MegaMenuHandheld));\r\n this.megaMenuHandheld = new MegaMenuHandheld(megaMenuHandheldElement);\r\n } catch (error) {\r\n console.log('MegaMenu: megaMenuHandheldFactory Error', error);\r\n }\r\n }\r\n\r\n setMegaMenuContainer(): void {\r\n try {\r\n this.megaMenuContainer = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuContainer)) as HTMLElement;\r\n } catch (error) {\r\n console.log('MegaMenu: setMegaMenuContainer ERROR', error);\r\n }\r\n }\r\n\r\n\r\n reinitialiseMegaMenuDesktop(): void {\r\n if (this.megaMenuDesktop) {\r\n this.megaMenuDesktop.dispose();\r\n this.megaMenuDesktop = null;\r\n }\r\n this.megaMenuDesktopFactory();\r\n }\r\n\r\n async handleFirstInteraction() {\r\n console.log('MegaMenu: handleFirstInteraction');\r\n\r\n await this.loadDesktopMenu();\r\n await initialise();\r\n this.reinitialiseMegaMenuDesktop();\r\n this.htmlElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenu));\r\n\r\n this.megaMenuHoverDelay();\r\n\r\n this.megaMenuOverlay();\r\n\r\n this.attachDeviceTypeChangeEventListener();\r\n this.attachMegaMouseOverEventListener();\r\n this.attachMegaMouseOutEventListener();\r\n this.desktopMenuLoaded = true;\r\n }\r\n\r\n async handleHandHeldMenuOpen() {\r\n if (!this.handHeldMenuLoaded) {\r\n await this.loadHandHeldMenu();\r\n await initialise();\r\n this.megaMenuHandheldFactory();\r\n this.handHeldMenuLoaded = true;\r\n }\r\n ((<any>window).popOutController as IPopOutController).openByIdAndFamily('1', 'megaMenu');\r\n }\r\n\r\n megaMenuHoverDelay() {\r\n console.log('MegaMenu: megaMenuHoverDelay ');\r\n let menuEnterTimer: NodeJS.Timeout;\r\n let showDelay = 250;\r\n\r\n let categoryItems = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuHover));\r\n\r\n if (this.isElement(categoryItems[0])) {\r\n for (let i = 0; i < categoryItems.length; i++) {\r\n categoryItems[i].addEventListener('mouseenter', (e: any) => {\r\n let thisItem = e.target;\r\n let thisItemParent = (thisItem as Element).closest(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuPopOut));\r\n let thisItemParentItems = thisItemParent.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuHover));\r\n clearTimeout(menuEnterTimer);\r\n menuEnterTimer = setTimeout(function () {\r\n\r\n for (let j = 0; j < thisItemParentItems.length; j++) {\r\n thisItemParentItems[j].classList.remove('lb-active');\r\n }\r\n thisItem.classList.add('lb-active');\r\n }, showDelay);\r\n });\r\n }\r\n }\r\n }\r\n\r\n async loadDesktopMenu(): Promise<void> {\r\n console.log('MegaMenu: loadDesktopMenu - Started');\r\n //let desktopElement= this.htmlElement.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenu));\r\n await AjaxGetAndReplaceHtml(this.htmlElement, urlPaths.websiteUrl + UrlEnums.PartialUrls.MegaMenuDesktop);\r\n console.log('MegaMenu: loadDesktopMenu - Finished');\r\n this.desktopMenuLoaded = true;\r\n }\r\n\r\n async loadHandHeldMenu(): Promise<void> {\r\n let handHeldlement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, 'megaMenu'));\r\n let megaMenuHandHeldHtmlString: string = await HttpRequest.get(urlPaths.websiteUrl + UrlEnums.PartialUrls.MegaMenuMobile);\r\n handHeldlement.innerHTML = megaMenuHandHeldHtmlString;\r\n }\r\n\r\n async loadMenu(): Promise<void> {\r\n console.log('MegaMenu: loadMenu - Started');\r\n let element = this.htmlElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuContainer));\r\n let megaMenuHtmlString: string = await HttpRequest.get(urlPaths.websiteUrl + UrlEnums.PartialUrls.MegaMenu);\r\n element.innerHTML = megaMenuHtmlString;\r\n console.log('MegaMenu: loadMenu - Finished');\r\n }\r\n\r\n setMegaMenuZIndex(): void {\r\n console.log('megaMenu: setmegaMenuZIndex');\r\n let megaMenuRibbon: HTMLElement = document.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbMainMenuRibbon));\r\n megaMenuRibbon.style.zIndex = '30';\r\n\r\n let megaMenu: HTMLElement = document.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbMegaMenu));\r\n megaMenu.style.zIndex = '20';\r\n\r\n let headerMenu: HTMLElement = document.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbMainMenuHeader));\r\n headerMenu.style.zIndex = '20';\r\n\r\n clearTimeout(this.timeOutHandler);\r\n\r\n };\r\n\r\n unsetMegaMenuZIndex(): void {\r\n console.log('megaMenu: unsetmegaMenuZIndex');\r\n this.timeOutHandler = setTimeout(function () {\r\n let megaMenuRibbon: HTMLElement = document.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbMainMenuRibbon));\r\n megaMenuRibbon.style.zIndex = 'unset';\r\n\r\n let megaMenu: HTMLElement = document.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbMegaMenu));\r\n megaMenu.style.zIndex = 'unset';\r\n\r\n let headerMenu: HTMLElement = document.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbMainMenuHeader));\r\n headerMenu.style.zIndex = 'unset';\r\n }, 250);\r\n };\r\n \r\n isElement(element: any) {\r\n return element instanceof Element || element instanceof HTMLDocument;\r\n }\r\n\r\n toggleModifier(element: string, modifier: string, state: boolean) {\r\n let obj = document.querySelectorAll(element)[0];\r\n if (this.isElement(obj)) {\r\n if (state == true) {\r\n obj.classList.add(\"lb-\" + modifier);\r\n } else {\r\n obj.classList.remove(\"lb-\" + modifier);\r\n }\r\n }\r\n }\r\n\r\n megaMenuOverlay() {\r\n console.log('MegaMenu: megaMenuOverlay');\r\n let categoryItems = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenuPopOut));\r\n categoryItems.forEach(item => {\r\n item.addEventListener('mouseenter', this.displayOverlay);\r\n item.addEventListener('mouseleave', this.hideOverlay);\r\n });\r\n }\r\n\r\n displayOverlay() {\r\n (<any>window).overlay.showOverlay();\r\n }\r\n\r\n hideOverlay() {\r\n (<any>window).overlay.hideOverlay();\r\n }\r\n\r\n\r\n closeMobilePopOutOnDesktop(e: CustomEvent) {\r\n console.log('megaMenu:close', e.detail.deviceType);\r\n if (e.detail.deviceType == \"desktop\") {\r\n ((<any>window).popOutController as PopOutController).closeAllMenus();\r\n }\r\n }\r\n\r\n dispose(): void {\r\n this.removeFirstInteractionChangeEventListener();\r\n this.removeOpenHandHeldMenuClickEventListener();\r\n this.removeDeviceTypeChangeEventListener();\r\n this.removeMegaMenuMouseOverEventListener();\r\n this.removeMegaMenuMouseOutEventListener();\r\n }\r\n\r\n delete(): void {\r\n\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"./instanceComponentBase\";\r\nimport { IMegaMenuDeviceBase, MegaMenuDeviceBase } from \"./megaMenuDeviceBase\";\r\nimport { IMegaMenuItem, MegaMenuItem } from \"./megaMenuItem\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\n\r\nexport interface IMegaMenuDesktop extends IMegaMenuDeviceBase {\r\n}\r\n\r\nexport class MegaMenuDesktop extends MegaMenuDeviceBase implements IMegaMenuDesktop {\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n }\r\n\r\n dispose(): void {\r\n super.dispose();\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"./instanceComponentBase\";\r\nimport { IMegaMenuItem, MegaMenuItem } from \"./megaMenuItem\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\n\r\nexport interface IMegaMenuDeviceBase extends IInstanceComponentBase {\r\n megaMenuItemList: IMegaMenuItem[];\r\n}\r\n\r\nexport abstract class MegaMenuDeviceBase extends InstanceComponentBase implements IMegaMenuDeviceBase {\r\n\r\n public megaMenuItemList: IMegaMenuItem[];\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this.megaMenuItemListFactory();\r\n }\r\n\r\n megaMenuItemListFactory(): void {\r\n try {\r\n let megaMenuItemElements: NodeListOf<HTMLElement> = this.htmlElement.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenuGtm.GtmMegaMenuName));\r\n this.megaMenuItemList = new Array<IMegaMenuItem>();\r\n\r\n for (let i = 0; i < megaMenuItemElements.length; i += 1) {\r\n let megaMenuItemElement: HTMLElement = megaMenuItemElements[i];\r\n let megaMenuItem: IMegaMenuItem = new MegaMenuItem(megaMenuItemElement);\r\n this.megaMenuItemList.push(megaMenuItem);\r\n }\r\n } catch (error) {\r\n console.log('MegaMenuDeviceBase: megaMenuItemListFactory ERROR', error);\r\n }\r\n\r\n }\r\n dispose(): void {\r\n\r\n try {\r\n this.megaMenuItemList.forEach((megaMenuItem: IMegaMenuItem) => megaMenuItem.dispose());\r\n } catch (error) {\r\n console.log('MegaMenuDeviceBase: dispose ERROR', error);\r\n }\r\n }\r\n}","import { IInstanceComponentBase, InstanceComponentBase } from \"./instanceComponentBase\";\r\nimport { IMegaMenuDeviceBase, MegaMenuDeviceBase } from \"./megaMenuDeviceBase\";\r\nimport { IMegaMenuItem, MegaMenuItem } from \"./megaMenuItem\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\n\r\nexport interface IMegaMenuHandheld extends IMegaMenuDeviceBase {\r\n}\r\n\r\nexport class MegaMenuHandheld extends MegaMenuDeviceBase implements IMegaMenuHandheld {\r\n\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n }\r\n\r\n dispose(): void {\r\n super.dispose();\r\n }\r\n}","import { MegaMenu } from './megaMenu';\r\nimport { Overlay } from './overlay';\r\nimport { AttributeEnums } from './utilities/enums/attributeEnums';\r\nimport { HelperUtils } from './utilities/helperUtils';\r\n\r\nexport function initialiseMegaMenu() {\r\n let doesObjectExistOnWindow = () => { return typeof (<any>window).megaMenu }\r\n if (doesObjectExistOnWindow()) {\r\n\r\n let htmlElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.MegaMenu.MegaMenu)) as HTMLElement;\r\n if (htmlElement) {\r\n createMegaMenu(htmlElement);\r\n }\r\n\r\n function createMegaMenu(htmlElement: HTMLElement) {\r\n let megaMenu = new MegaMenu(htmlElement);\r\n (<any>window).megaMenu = megaMenu;\r\n }\r\n }\r\n}","import { IMenuClickGtmDataObject } from \"./googleTagManager/gtmDataObject\";\r\nimport { GoogleTagManager } from \"./googleTagManager/gtmService\";\r\nimport { IInstanceComponentBase, InstanceComponentBase } from \"./instanceComponentBase\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\n\r\nexport interface IMegaMenuItem extends IInstanceComponentBase {\r\n name: string;\r\n href: string;\r\n}\r\n\r\nexport class MegaMenuItem extends InstanceComponentBase implements IMegaMenuItem {\r\n public name: string;\r\n public href: string;\r\n\r\n private readonly _handleClick;\r\n constructor(public htmlElement: HTMLElement) {\r\n super(htmlElement);\r\n\r\n this._handleClick = this.handleClick.bind(this);\r\n\r\n this.setName();\r\n this.setHref();\r\n\r\n this.attachClickEventListener();\r\n }\r\n\r\n attachClickEventListener() {\r\n this.htmlElement.addEventListener('click', this._handleClick);\r\n }\r\n\r\n removeClickEventListener() {\r\n this.htmlElement.removeEventListener('click', this._handleClick);\r\n }\r\n\r\n handleClick(): void {\r\n try {\r\n let dataObject: IMenuClickGtmDataObject = {\r\n name: this.name,\r\n url: this.href,\r\n id: ''\r\n } as IMenuClickGtmDataObject;\r\n GoogleTagManager.sendMenuClickGtmDataObjectAndNavigate(dataObject, this.href);\r\n\r\n } catch (error) {\r\n document.location = this.href;\r\n }\r\n\r\n }\r\n\r\n\r\n setName(): void {\r\n this.name = this.htmlElement.getAttribute(AttributeEnums.MegaMenuGtm.GtmMegaMenuName);\r\n }\r\n\r\n setHref(): void {\r\n this.href = this.htmlElement.getAttribute('href');\r\n }\r\n\r\n dispose(): void {\r\n this.removeClickEventListener();\r\n }\r\n}","import { LbCookies } from \"../lbCookies\";\r\nimport { CookieUtils } from \"../utilities/cookieUtils\";\r\nimport { OneTrustEnums } from \"../utilities/enums/oneTrustEnums\";\r\n\r\nexport namespace OneTrustCookieConsent {\r\n\r\n export function addOneTrustEventListeners(): void {\r\n window.addEventListener(OneTrustEnums.Events.OneTrustGroupsUpdated, OneTrustCookieConsent.OT_OneTrustGroupsUpdated);\r\n }\r\n export function OT_OneTrustGroupsUpdated() {\r\n let necessaryConsent: boolean = OneTrustCookieConsent.getStrictlyNecessaryConsent();\r\n let performanceConsent: boolean = OneTrustCookieConsent.getPerformanceConsent();\r\n let functionalConsent: boolean = OneTrustCookieConsent.getFunctionalConsent();\r\n let targetingConsent: boolean = OneTrustCookieConsent.getTargetingConsent();\r\n let socialMediaConsent: boolean = OneTrustCookieConsent.getSocialMediaConsent();\r\n\r\n LbCookies.setAffiliateClickRefCookie(targetingConsent);\r\n\r\n console.log(`OneTrustCookieConsent: OT_OneTrustGroupsUpdated necessaryConsent-${necessaryConsent} performanceConsent-${performanceConsent} functionalConsent-${functionalConsent} targetingConsent-${targetingConsent} socialMediaConsent-${socialMediaConsent}`);\r\n }\r\n\r\n\r\n export function getOneTrustCookie(): string {\r\n let consentCookie: string = '';\r\n\r\n try {\r\n let oneTrustCookie: string | null = CookieUtils.getCookie(OneTrustEnums.OneTrustCookie.OneTrustCookie);\r\n\r\n if (oneTrustCookie != null) {\r\n consentCookie = oneTrustCookie;\r\n }\r\n }\r\n catch {\r\n console.log('OneTrustCookieConsent: getOneTrustCookie ERROR');\r\n return consentCookie;\r\n }\r\n\r\n return consentCookie;\r\n }\r\n\r\n\r\n export function getStrictlyNecessaryConsent(): boolean {\r\n try {\r\n let consentCookie = OneTrustCookieConsent.getOneTrustCookie();\r\n\r\n if ((consentCookie.length > 0) && consentCookie.includes(OneTrustEnums.CategoryConsentTrue.StrictlyNecessary)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n catch {\r\n console.log('OneTrustCookieConsent: getStrictlyNecessaryConsent ERROR');\r\n return false;\r\n }\r\n }\r\n export function getPerformanceConsent(): boolean {\r\n try {\r\n let consentCookie = OneTrustCookieConsent.getOneTrustCookie();\r\n\r\n if ((consentCookie.length > 0) && consentCookie.includes(OneTrustEnums.CategoryConsentTrue.Performance)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n catch {\r\n console.log('OneTrustCookieConsent: getPerformanceConsent ERROR');\r\n return false;\r\n }\r\n }\r\n\r\n export function getFunctionalConsent(): boolean {\r\n try {\r\n let consentCookie = OneTrustCookieConsent.getOneTrustCookie();\r\n\r\n if ((consentCookie.length > 0) && consentCookie.includes(OneTrustEnums.CategoryConsentTrue.Functional)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n catch {\r\n console.log('OneTrustCookieConsent: getFunctionalConsent ERROR');\r\n return false;\r\n }\r\n }\r\n\r\n export function getTargetingConsent(): boolean {\r\n try {\r\n let consentCookie = OneTrustCookieConsent.getOneTrustCookie();\r\n\r\n if ((consentCookie.length > 0) && consentCookie.includes(OneTrustEnums.CategoryConsentTrue.Targeting)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n catch {\r\n console.log('OneTrustCookieConsent: getTargetingConsent ERROR');\r\n return false;\r\n }\r\n }\r\n\r\n export function getSocialMediaConsent(): boolean {\r\n try {\r\n let consentCookie = OneTrustCookieConsent.getOneTrustCookie();\r\n\r\n if ((consentCookie.length > 0) && consentCookie.includes(OneTrustEnums.CategoryConsentTrue.SocialMedia)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n catch {\r\n console.log('OneTrustCookieConsent: getSocialMediaConsent ERROR');\r\n return false;\r\n }\r\n }\r\n\r\n}","import { ResponsiveState } from \"./responsiveState\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\n\r\nexport class Overlay {\r\n constructor(public htmlElement: Element) { }\r\n _scrollPosition: number;\r\n\r\n showOverlay() {\r\n console.log('Overlay: showOverlay');\r\n this._scrollPosition = window.scrollY;\r\n if (this.htmlElement.getAttribute(AttributeEnums.Overlay.OverlayHidden) === 'true') {\r\n\r\n this.htmlElement.setAttribute(AttributeEnums.Overlay.OverlayHidden, \"false\");\r\n let scrolbarWidth = window.innerWidth - document.documentElement.clientWidth;\r\n document.body.setAttribute(\"style\", \"padding-right:\" + scrolbarWidth + \"px\");\r\n document.body.classList.add(StringEnums.CssClass.LbNoScroll);\r\n this.htmlElement.classList.remove(StringEnums.CssClass.LbHidden);\r\n (<any>window).dispatchEvent(this.showOverlayCustomEvent());\r\n }\r\n }\r\n\r\n hideOverlay() {\r\n console.log('Overlay: hideOverlay');\r\n if (this.htmlElement.getAttribute(AttributeEnums.Overlay.OverlayHidden) === 'false') {\r\n this.htmlElement.setAttribute(AttributeEnums.Overlay.OverlayHidden, \"true\");\r\n document.body.setAttribute(\"style\", \"padding-right:0\");\r\n document.body.classList.remove(StringEnums.CssClass.LbNoScroll);\r\n this.htmlElement.classList.add(StringEnums.CssClass.LbHidden);\r\n if ((ResponsiveState.getState() === StringEnums.Selectors.Mobile) || (ResponsiveState.getState() === StringEnums.Selectors.Tablet)) {\r\n console.log('Overlay: Scroll back to position');\r\n window.scrollTo(0, this._scrollPosition);\r\n }\r\n (<any>window).dispatchEvent(this.hideOverlayCustomEvent());\r\n }\r\n }\r\n\r\n showOverlayCustomEvent() {\r\n console.log(`Overlay: showOverlayCustomEvent`);\r\n return new CustomEvent(CustomEventEnums.ShowOverlay, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n \r\n }\r\n });\r\n }\r\n hideOverlayCustomEvent() {\r\n console.log(`Overlay: hideOverlayCustomEvent`);\r\n return new CustomEvent(CustomEventEnums.HideOverlay, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n \r\n }\r\n });\r\n }\r\n}","import { Overlay } from './overlay';\r\nimport { StringEnums } from './utilities/enums/stringEnums';\r\nimport { HelperUtils } from './utilities/helperUtils';\r\n\r\nexport function initialiseOverlay() {\r\n\r\n let doesObjectExistOnWindow = () => { return typeof (<any>window).overlay }\r\n if (doesObjectExistOnWindow()) {\r\n\r\n let htmlElement = document.querySelector(HelperUtils.addCssClassDot(StringEnums.CssClass.LbOverlay));\r\n createOverlay(htmlElement);\r\n\r\n function createOverlay(htmlElement: Element) {\r\n let overlay = new Overlay(htmlElement);\r\n (<any>window).overlay = overlay;\r\n }\r\n }\r\n}","import { HistoryController } from \"./historyController\";\r\nimport { AttributeEnums } from \"./utilities/enums/attributeEnums\";\r\nimport { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\nimport { HelperUtils } from \"./utilities/helperUtils\";\r\nexport interface IPopOutController {\r\n closeAllMenus: () => void;\r\n openByIdAndFamily: (id: string, family: string) => void;\r\n openByIdAndFamilyNoHistoryPush: (id: string, family: string) => void;\r\n active: boolean;\r\n}\r\n\r\nexport interface IPopOutState {\r\n popOutFamily: string;\r\n popOutId: string;\r\n popOutHistoryLength: number;\r\n}\r\nexport class PopOutController {\r\n private readonly _popOutClickEventHandler;\r\n private readonly _backLinkClosePopOutControlsEventHandler;\r\n private readonly _handleCloseAllMenus;\r\n\r\n public active: boolean;\r\n\r\n constructor() {\r\n this._popOutClickEventHandler = this.popOutClickEventHandler.bind(this);\r\n this._backLinkClosePopOutControlsEventHandler = this.backLinkClosePopOutControlsEventHandler.bind(this);\r\n this._handleCloseAllMenus = this.handleCloseAllMenus.bind(this);\r\n //this.createPopOutEventListener();\r\n this.attachPopOutClickEventListener();\r\n this.attachEventForCloseAllAside();\r\n\r\n this.attachBackLinkClosePopOutControlsEventListener();\r\n this.attachCloseAllMenusPopOutControlsEventListener();\r\n this.active = true;\r\n }\r\n\r\n // createPopOutEventListener() {\r\n // console.log('PopOutController: createPopOutEventListener');\r\n // document.addEventListener('click', event => {\r\n\r\n // let clickElement = event.target;\r\n\r\n // if (clickElement instanceof HTMLElement && this.hasPopOutOpenAsParentOrSelf(clickElement)) {\r\n // event.preventDefault();\r\n // let popOutId = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutIdOpen)).getAttribute(AttributeEnums.PopOut.PopOutIdOpen);\r\n // let popOutFamily = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamilyOpen)).getAttribute(AttributeEnums.PopOut.PopOutFamilyOpen);\r\n // this.openByIdAndFamily(popOutId, popOutFamily);\r\n\r\n // }\r\n // });\r\n // }\r\n\r\n attachPopOutClickEventListener() {\r\n document.addEventListener('click', this._popOutClickEventHandler);\r\n }\r\n removePopOutClickEventListener() {\r\n document.removeEventListener('click', this._popOutClickEventHandler);\r\n }\r\n\r\n attachEventForCloseAllAside() {\r\n console.log('PopOutController: addEventForCloseAllAside');\r\n document.addEventListener('click', e => { this.handleOverlayClick(e) });\r\n }\r\n\r\n removeEventForCloseAllAside() {\r\n console.log('PopOutController: removeEventForCloseAllAside');\r\n document.removeEventListener('click', this.handleOverlayClick);\r\n }\r\n\r\n attachBackLinkClosePopOutControlsEventListener() {\r\n document.addEventListener('click', this._backLinkClosePopOutControlsEventHandler);\r\n }\r\n\r\n removeBackLinkClosePopOutControlsEventListener() {\r\n document.removeEventListener('click', this._backLinkClosePopOutControlsEventHandler);\r\n }\r\n\r\n attachCloseAllMenusPopOutControlsEventListener() {\r\n (<any>window).addEventListener(CustomEventEnums.CloseAllMenus, this._handleCloseAllMenus);\r\n }\r\n\r\n removeCloseAllMenusPopOutControlsEventListener() {\r\n (<any>window).removeEventListener(CustomEventEnums.CloseAllMenus, this._handleCloseAllMenus);\r\n }\r\n\r\n popOutClickEventHandler(event: Event) {\r\n let clickElement = event.target;\r\n\r\n if (clickElement instanceof HTMLElement && this.hasPopOutOpenAsParentOrSelf(clickElement)) {\r\n event.preventDefault();\r\n let popOutId = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutIdOpen)).getAttribute(AttributeEnums.PopOut.PopOutIdOpen);\r\n let popOutFamily = clickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamilyOpen)).getAttribute(AttributeEnums.PopOut.PopOutFamilyOpen);\r\n this.openByIdAndFamily(popOutId, popOutFamily);\r\n\r\n }\r\n }\r\n \r\n backLinkClosePopOutControlsEventHandler() {\r\n console.log('PopOutController: addBackLinkClosePopOutControlsEventListener - click event fired');\r\n const closestPopOutElement = event.target as HTMLElement;\r\n\r\n this.backLinkPopOutCloseCorrectPopoutLayer(closestPopOutElement);\r\n console.log('PopOutController: addBackLinkClosePopOutControlsEventListener - end of method');\r\n }\r\n\r\n backLinkPopOutCloseCorrectPopoutLayer(backLickElement: HTMLElement) {\r\n if (backLickElement.hasAttribute(AttributeEnums.PopOut.PopOutBacklink) && this.active) {\r\n const popOutLayerId = backLickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId)).getAttribute(AttributeEnums.PopOut.PopOutId);\r\n const popOutLayerFamily = backLickElement.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId)).getAttribute(AttributeEnums.PopOut.PopOutFamily);\r\n if (popOutLayerId.indexOf(\":\") === -1) {\r\n console.log('PopOutController: backLinkPopOutCloseCorrectPopoutLayer - closeAllMenus');\r\n this.closeAllMenus();\r\n } else {\r\n console.log('PopOutInitialiser: backLinkPopOutCloseCorrectPopoutLayer - openByIdAndFamily');\r\n HistoryController.historyBackOneIfPopOut();\r\n this.openByIdAndFamilyNoHistoryPush(popOutLayerId.substring(0, popOutLayerId.lastIndexOf(\":\")), popOutLayerFamily);\r\n\r\n }\r\n }\r\n }\r\n\r\n attachAllPopOutEventListners() {\r\n this.attachPopOutClickEventListener();\r\n this.attachEventForCloseAllAside();\r\n this.attachBackLinkClosePopOutControlsEventListener();\r\n }\r\n\r\n closeAllLevel1NoneFamilyMembers(popOutFamily: string) {\r\n console.log('PopOutController: closeAllLevel1NoneFamilyMembers');\r\n let popOutElements = document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily)\r\n + ':not(' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, popOutFamily)\r\n + ')' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId, '1'));\r\n popOutElements.forEach(item => {\r\n item.classList.remove(StringEnums.CssClass.LbActive);\r\n });\r\n }\r\n\r\n closeAllLevel1() {\r\n console.log('PopOutController: closeAllLevel1');\r\n let popOutElements = document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily)\r\n + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId, '1'));\r\n popOutElements.forEach(item => {\r\n item.classList.remove(StringEnums.CssClass.LbActive);\r\n });\r\n }\r\n\r\n popOutOpen() {\r\n let popOutOpen: boolean = false;\r\n let popOutElements = document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily)\r\n + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId, '1'));\r\n popOutElements.forEach(item => {\r\n if (item.classList.contains(StringEnums.CssClass.LbActive)) {\r\n popOutOpen = true;\r\n }\r\n });\r\n return popOutOpen;\r\n }\r\n\r\n\r\n noneFamilyMemberIsOpen(popOutFamily: string) {\r\n console.log('PopOutController: noneFamilyMemberIsOpen');\r\n let popOutElements = document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily)\r\n + ':not(' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, popOutFamily)\r\n + ')' + HelperUtils.addCssClassDot(StringEnums.CssClass.LbActive));\r\n if (popOutElements.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n closeAllNoneFamilyMembers(popOutFamily: string) {\r\n console.log('PopOutController: closeAllNoneFamilyMembers');\r\n let popOutElements = document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily) + ':not(' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, popOutFamily) + ')');\r\n this.removeRelevantActiveAndTransitionCss(popOutElements);\r\n }\r\n\r\n closeAllFamilyMembers(popOutFamily: string) {\r\n console.log('PopOutController: closeAllFamilyMembers');\r\n let popOutElements = document.querySelectorAll(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, popOutFamily));\r\n this.removeRelevantActiveAndTransitionCss(popOutElements);\r\n }\r\n\r\n removeRelevantActiveAndTransitionCss(elements: NodeListOf<Element>) {\r\n console.log('PopOutController: removeRelevantActiveAndTransitionCss');\r\n elements.forEach(element => {\r\n element.classList.remove(StringEnums.CssClass.LbActive);\r\n if (this.getDataPopOutIdLevel(element) !== 1) {\r\n element.classList.remove(StringEnums.CssClass.LbPopOutTransition);\r\n }\r\n });\r\n }\r\n\r\n initializePopOut(popOutFamily: string) {\r\n console.log('PopOutController: initializePopOut');\r\n this.closeAllFamilyMembers(popOutFamily);\r\n }\r\n\r\n closeAllNoneLinealSiblingsAndTheirDescendantsByIdAndFamily(id: string, family: string) {\r\n console.log('PopOutController: closeAllNoneLinealSiblingsAndTheirDescendantsByIdAndFamily');\r\n let element = this.getElementByIdAndFamily(id, family);\r\n this.closeAllNoneLinealSiblingsAndTheirDescendants(element);\r\n }\r\n\r\n closeAllNoneLinealSiblingsAndTheirDescendants(selectedElement: Element) {\r\n console.log('PopOutController: closeAllNoneLinealSiblingsAndTheirDescendants');\r\n let family = selectedElement.getAttribute(AttributeEnums.PopOut.PopOutFamily);\r\n let level: number = this.getDataPopOutIdLevel(selectedElement);\r\n let popOutElements = document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, family));\r\n\r\n for (let currentElement = 0; currentElement < popOutElements.length; currentElement += 1) {\r\n let currentElementLevel = this.getDataPopOutIdLevel(popOutElements[currentElement]);\r\n if ((currentElementLevel > level) ||\r\n !this.hasSameLineage(popOutElements[currentElement], selectedElement)) {\r\n popOutElements[currentElement].classList.remove(StringEnums.CssClass.LbActive);\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n sleep(ms: number) {\r\n console.log('PopOutController: sleep');\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n getElementByIdAndFamily(id: string, family: string) {\r\n return document.querySelector('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, family) + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId, id));\r\n }\r\n\r\n getAllPopOutElements() {\r\n return document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily));\r\n }\r\n\r\n getElementsByFamily(family: string) {\r\n return document.querySelectorAll('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily, family));\r\n }\r\n\r\n getPopOutTransitionDelayTimeInMs() {\r\n let popOutElement = document.querySelector('div' + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily) + HelperUtils.addCssClassDot(StringEnums.CssClass.LbPopOutTransition));\r\n if (popOutElement) {\r\n let transitionDuration = parseFloat(window.getComputedStyle(popOutElement).transitionDuration) * 1000;\r\n let transitionDelay = parseFloat(window.getComputedStyle(popOutElement).transitionDelay) * 1000;\r\n return transitionDuration + transitionDelay;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n closeUnneededMenusReadyForNewSelection(id: string, family: string, callback: (id: string, family: string, that: this) => void) {\r\n console.log('PopOutController: closeUnneededMenusReadyForNewSelection');\r\n if (this.noneFamilyMemberIsOpen(family)) {\r\n this.closeAllLevel1NoneFamilyMembers(family);\r\n this.sleep(this.getPopOutTransitionDelayTimeInMs() + 100).then(() => {\r\n this.closeAllNoneLinealSiblingsAndTheirDescendantsByIdAndFamily(id, family)\r\n callback(id, family, this);\r\n });\r\n } else {\r\n this.closeAllNoneLinealSiblingsAndTheirDescendantsByIdAndFamily(id, family);\r\n callback(id, family, this);\r\n }\r\n }\r\n\r\n openByIdAndFamily(id: string, family: string) {\r\n console.log('PopOutController: openByIdAndFamily');\r\n if ((id !== null && id !== undefined) && (family !== null && family !== undefined) && this.active) {\r\n this.closeUnneededMenusReadyForNewSelection(id, family, this.openCorrectElementsForOpenByIdAndFamily);\r\n\r\n HistoryController.pushPopOutHistoryToStack(family, id, location.href);\r\n }\r\n }\r\n openByIdAndFamilyNoHistoryPush(id: string, family: string) {\r\n console.log('PopOutController: openByIdAndFamilyNoHistoryPush');\r\n if ((id !== null && id !== undefined) && (family !== null && family !== undefined) && this.active) {\r\n this.closeUnneededMenusReadyForNewSelection(id, family, this.openCorrectElementsForOpenByIdAndFamily);\r\n\r\n }\r\n }\r\n\r\n openCorrectElementsForOpenByIdAndFamily(id: string, family: string, that: this) {\r\n console.log('PopOutController: openCorrectElementsForOpenByIdAndFamily');\r\n let popOutFamily = that.getElementsByFamily(family);\r\n let selectedElement = that.getElementByIdAndFamily(id, family);\r\n\r\n that.openLevel1Elements(popOutFamily);\r\n\r\n that.sleep(that.getPopOutTransitionDelayTimeInMs() + 100).then(() => {\r\n that.openAllRelevantNoneLevel1Levels(selectedElement, popOutFamily);\r\n });\r\n\r\n }\r\n\r\n openLevel1Elements(popOutFamily: NodeListOf<Element>) {\r\n console.log('PopOutController: openLevel1Elements');\r\n for (let i = 0; i < popOutFamily.length; i += 1) {\r\n const currentElement = popOutFamily[i];\r\n if (this.getDataPopOutIdLevel(currentElement) === 1) {\r\n (<any>window).overlay.showOverlay();\r\n //this.addEventForCloseAllAside();\r\n currentElement.classList.add(StringEnums.CssClass.LbActive);\r\n currentElement.classList.add(StringEnums.CssClass.LbPopOutTransition);\r\n }\r\n }\r\n\r\n }\r\n\r\n openAllRelevantNoneLevel1Levels(selectedElement: Element, popOutFamily: NodeListOf<Element>) {\r\n console.log('PopOutController: openAllRelevantNoneLevel1Levels');\r\n selectedElement.classList.add(StringEnums.CssClass.LbActive);\r\n selectedElement.classList.add(StringEnums.CssClass.LbPopOutTransition);\r\n\r\n for (let i = 0; i < popOutFamily.length; i += 1) {\r\n const currentElement = popOutFamily[i];\r\n if (this.hasSameLineage(currentElement, selectedElement) && this.getDataPopOutIdLevel(currentElement) < this.getDataPopOutIdLevel(selectedElement)) {\r\n currentElement.classList.add(StringEnums.CssClass.LbActive);\r\n currentElement.classList.add(StringEnums.CssClass.LbPopOutTransition);\r\n }\r\n }\r\n }\r\n\r\n getDataPopOutIdLevel(element: Element) {\r\n let id: string = element.getAttribute(AttributeEnums.PopOut.PopOutId);\r\n return id.split(':').length;\r\n }\r\n\r\n hasSameLineage(element1: Element, element2: Element) {\r\n let lowerIdCount: number;\r\n let element1Id: string = element1.getAttribute(AttributeEnums.PopOut.PopOutId);\r\n let element2Id: string = element2.getAttribute(AttributeEnums.PopOut.PopOutId);\r\n let element1IdParts = (element1Id).split(\":\");\r\n let element2IdParts = (element2Id).split(\":\");\r\n\r\n if (element1IdParts.length > element2IdParts.length) {\r\n lowerIdCount = element2IdParts.length;\r\n } else {\r\n lowerIdCount = element1IdParts.length;\r\n }\r\n\r\n for (let i = 0; i < lowerIdCount; i += 1) {\r\n if (element1IdParts[i] !== element2IdParts[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n closeAllPopOutMenus() {\r\n console.log('PopOutController: closeAllPopOutMenus');\r\n this.closeAllLevel1();\r\n this.sleep(this.getPopOutTransitionDelayTimeInMs() + 100).then(() => {\r\n let popOutElements = this.getAllPopOutElements();\r\n popOutElements.forEach(item => {\r\n item.classList.remove(StringEnums.CssClass.LbActive);\r\n item.classList.remove(StringEnums.CssClass.LbPopOutTransition);\r\n });\r\n });\r\n }\r\n\r\n getTopLevelActiveMenu(activeMenuElements: NodeListOf<Element>) {\r\n console.log('PopOutController: getTopLevelActiveMenu');\r\n let maxLevel: number = -1;\r\n for (let i = 0; i < activeMenuElements.length; i += 1) {\r\n\r\n const currentElement = activeMenuElements[i] as HTMLElement;\r\n\r\n let levelNumber = this.getDataPopOutIdLevel(currentElement);\r\n if (levelNumber > maxLevel) {\r\n maxLevel = levelNumber;\r\n }\r\n }\r\n return maxLevel;\r\n }\r\n\r\n\r\n\r\n handleOverlayClick(e: MouseEvent) {\r\n\r\n console.log('PopOutController: handleOverlayClick');\r\n let htmlElement = document.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamily) + HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutId, '1') + HelperUtils.addCssClassDot(StringEnums.CssClass.LbActive));\r\n\r\n if (htmlElement && this.active) {\r\n\r\n let htmlElementEdge = htmlElement.getBoundingClientRect();\r\n\r\n let target = e.target;\r\n\r\n if (target instanceof HTMLElement) {\r\n if (target.hasAttribute(AttributeEnums.PopOut.PopOutFamily)) {\r\n if ((((e as MouseEvent).clientX < htmlElementEdge.left) || ((e as MouseEvent).clientX > htmlElementEdge.right))) {\r\n e.preventDefault();\r\n console.log('PopOutController: handleOverlayClick - closeAllMenus');\r\n this.handleOverlayCloseCorrectPopout(target); \r\n //this.closeAllMenus();\r\n \r\n return;\r\n }\r\n if ((((e as MouseEvent).clientY < htmlElementEdge.bottom))) {\r\n e.preventDefault();\r\n console.log('PopOutController: handleOverlayClick - closeAllMenus');\r\n //this.closeAllMenus();\r\n this.handleOverlayCloseCorrectPopout(target); \r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleOverlayCloseCorrectPopout(target: HTMLElement) {\r\n let popOutElement = target.hasAttribute(AttributeEnums.PopOut.PopOutOverlayClickIsBack);\r\n if (target.hasAttribute(AttributeEnums.PopOut.PopOutOverlayClickIsBack) && target.getAttribute(AttributeEnums.PopOut.PopOutOverlayClickIsBack) === \"true\") {\r\n let backLinkElement: HTMLElement = target.querySelector(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutBacklink));\r\n if(backLinkElement){\r\n console.log('PopOutController: handleOverlayCloseCorrectPopout - back');\r\n this.backLinkPopOutCloseCorrectPopoutLayer(backLinkElement);\r\n } else{\r\n console.log('PopOutController: handleOverlayCloseCorrectPopout - closeAllMenus');\r\n this.closeAllMenus();\r\n }\r\n } else {\r\n console.log('PopOutController: handleOverlayCloseCorrectPopout - closeAllMenus');\r\n this.closeAllMenus();\r\n }\r\n }\r\n handleCloseAllMenus() {\r\n this.closeAllMenus();\r\n }\r\n\r\n closeAllMenus() {\r\n console.log('PopOutController: closeAllMenus');\r\n\r\n (<any>window).popOutController.closeAllPopOutMenus();\r\n (<any>window).overlay.hideOverlay();\r\n this.removeEventForCloseAllAside();\r\n HistoryController.removeAllPopOutHistory();\r\n }\r\n\r\n hasPopOutOpenAsParentOrSelf(target: HTMLElement) {\r\n try {\r\n return (target.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutIdOpen)).hasAttribute(AttributeEnums.PopOut.PopOutIdOpen) && target.closest(HelperUtils.addDataAttributeTags(AttributeEnums.PopOut.PopOutFamilyOpen)).hasAttribute(AttributeEnums.PopOut.PopOutFamilyOpen));\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n\r\n static hasIdLowerLevel(popoutId: string) {\r\n if (popoutId.indexOf(':') >= 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n static getIdLowerLevel(popoutId: string): string | undefined {\r\n let lastIndexOfColon = popoutId.lastIndexOf(':');\r\n if (lastIndexOfColon >= 0) {\r\n return popoutId.substring(0, lastIndexOfColon);\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n \r\n}","import { PopOutController } from './popOutController';\r\n\r\nexport function initialisePopOutController() {\r\n let popOutController = new PopOutController();\r\n (<any>window).popOutController = popOutController;\r\n}\r\n","import { AsyncUtils } from \"./utilities/asyncUtils\";\r\nimport { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\nimport { StringEnums } from \"./utilities/enums/stringEnums\";\r\nimport { UtilityEnums } from \"./utilities/enums/utillityEnums\";\r\n\r\nexport namespace ResponsiveState {\r\n\r\n export function getState(): string {\r\n return getStateAsEnum();\r\n }\r\n\r\n export function getStateAsEnum(): StringEnums.Selectors {\r\n if (window.innerWidth >= 1200) {\r\n return StringEnums.Selectors.Desktop;\r\n } else if (window.innerWidth >= 768) {\r\n return StringEnums.Selectors.Tablet;\r\n } else {\r\n return StringEnums.Selectors.Mobile;\r\n }\r\n }\r\n\r\n export function getOrientation(){\r\n const mediaQueryLandscape = window.matchMedia('(orientation:landscape)');\r\n\r\n if(mediaQueryLandscape.matches){\r\n return UtilityEnums.DeviceOrientation.Landscape\r\n } else{\r\n return UtilityEnums.DeviceOrientation.Portrait;\r\n }\r\n }\r\n\r\n export function responsiveStateInitialiser() {\r\n attachDispatchDeviceTypeChangeEventListeners();\r\n attachDispatchOrientationEventListeners();\r\n attachDispatchViewportDimensionsChangedEventListeners();\r\n //attachDispatchDocumentBodyScrollHeightChangedEventListeners();\r\n }\r\n\r\n /* ---------- EVENT Listeners ---------- */\r\n function attachDispatchDeviceTypeChangeEventListeners() {\r\n const mediaQueryMobile = window.matchMedia('(max-width:767px)');\r\n const mediaQueryTablet = window.matchMedia('(min-width:768px) and (max-width:1199px)');\r\n const mediaQueryDesktop = window.matchMedia('(min-width: 1200px)');\r\n \r\n mediaQueryMobile.addEventListener('change', function () {\r\n if(mediaQueryMobile.matches) {\r\n console.log('ResponsiveState: attachDispatchDeviceTypeChangeEventListeners - mediaQueryMobile');\r\n document.dispatchEvent(deviceTypeChangedEvent(UtilityEnums.DeviceType.Mobile));\r\n }\r\n }, false);\r\n \r\n mediaQueryTablet.addEventListener('change', function () {\r\n if(mediaQueryTablet.matches) {\r\n console.log('ResponsiveState: attachDispatchDeviceTypeChangeEventListeners - mediaQueryTablet');\r\n document.dispatchEvent(deviceTypeChangedEvent(UtilityEnums.DeviceType.Tablet));\r\n }\r\n }, false);\r\n \r\n mediaQueryDesktop.addEventListener('change', function () {\r\n if(mediaQueryDesktop.matches) {\r\n document.dispatchEvent(deviceTypeChangedEvent(UtilityEnums.DeviceType.Desktop));\r\n console.log('ResponsiveState: attachDispatchDeviceTypeChangeEventListeners - mediaQueryDesktop');\r\n }\r\n }, false);\r\n }\r\n\r\n function attachDispatchOrientationEventListeners() {\r\n const mediaQueryLandscape = window.matchMedia('(orientation:landscape)');\r\n const mediaQueryPortrait = window.matchMedia('(orientation:portrait)');\r\n \r\n mediaQueryLandscape.addEventListener('change', function () {\r\n if(mediaQueryLandscape.matches) {\r\n console.log('ResponsiveState: attachDispatchOrientationEventListeners - mediaQueryLandscape');\r\n document.dispatchEvent(deviceOrientationChangedEvent(UtilityEnums.DeviceOrientation.Landscape));\r\n }\r\n }, false);\r\n \r\n mediaQueryPortrait.addEventListener('change', function () {\r\n if(mediaQueryPortrait.matches) {\r\n console.log('ResponsiveState: attachDispatchOrientationEventListeners - mediaQueryPortrait');\r\n document.dispatchEvent(deviceOrientationChangedEvent(UtilityEnums.DeviceOrientation.Portrait));\r\n }\r\n }, false);\r\n\r\n }\r\n\r\n let VIEWPORT_DIMENSION_CHANGE_EVENT_FIRING: boolean = false;\r\n function attachDispatchViewportDimensionsChangedEventListeners() { \r\n window.addEventListener('resize', async function () {\r\n const sample = async () => {\r\n VIEWPORT_DIMENSION_CHANGE_EVENT_FIRING = true;\r\n await AsyncUtils.delay(500);\r\n VIEWPORT_DIMENSION_CHANGE_EVENT_FIRING = false;\r\n }\r\n if(VIEWPORT_DIMENSION_CHANGE_EVENT_FIRING === false) {\r\n await sample();\r\n console.log('ResponsiveState: attachDispatchViewportDimensionsChangedEventListeners - dispatchEvent');\r\n const documentWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n const documentHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n document.dispatchEvent(viewportDimensionsChangedEvent(documentWidth, documentHeight));\r\n }\r\n }, false);\r\n }\r\n\r\n\r\n\r\n function deviceTypeChangedEvent(deviceType: UtilityEnums.DeviceType ) {\r\n console.log('ResponsiveState: deviceTypeChangedEvent - '+ deviceType.toString());\r\n return new CustomEvent(CustomEventEnums.DeviceTypeChangeEvent, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n deviceType: deviceType\r\n }\r\n });\r\n }\r\n\r\n function deviceOrientationChangedEvent(deviceOrientation: UtilityEnums.DeviceOrientation ) {\r\n console.log('ResponsiveState: deviceOrientationChangedEvent - '+ deviceOrientation.toString());\r\n return new CustomEvent(CustomEventEnums.DeviceOrientationChangeEvent, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n deviceOrientation: deviceOrientation \r\n }\r\n });\r\n }\r\n\r\n function viewportDimensionsChangedEvent(documentWidth:number, documentHeight:number) {\r\n console.log(`ResponsiveState: viewportDimensionsChangedEvent - documentWidth: ${documentWidth}, documentHeight ${documentHeight}`);\r\n return new CustomEvent(CustomEventEnums.ViewportDimensionsChangedEvent, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n documentWidth,\r\n documentHeight\r\n }\r\n });\r\n }\r\n}","import { CustomEventEnums } from \"./utilities/enums/customEventEnums\";\r\n\r\nexport interface IScrollService {\r\n\r\n}\r\n\r\nexport class ScrollService implements IScrollService {\r\n private readonly _handleScroll;\r\n\r\n constructor() {\r\n this._handleScroll = this.handleScroll.bind(this);\r\n this.attachScrollEventListener();\r\n }\r\n\r\n attachScrollEventListener(): void {\r\n (<any>window).addEventListener('scroll', this._handleScroll)\r\n }\r\n\r\n removeScrollEventListener(): void {\r\n (<any>window).removeEventListener('scroll', this._handleScroll)\r\n }\r\n\r\n handleScroll(event: Event): void {\r\n let windowInnerWidth = window.innerWidth;\r\n let windowInnerHeight = window.innerHeight;\r\n let windowScrollX = window.scrollX;\r\n let windowScrollY = window.scrollY;\r\n (<any>window).dispatchEvent(this.onScrollCustomEvent(windowInnerWidth, windowInnerHeight, windowScrollX, windowScrollY));\r\n }\r\n\r\n onScrollCustomEvent(windowInnerWidth: number, windowInnerHeight: number, windowScrollX: number, windowScrollY: number) {\r\n //console.log(`ScrollService: scrollCustomEvent windowInnerWidth: ${windowInnerWidth} windowInnerHeight ${windowInnerHeight} windowScrollX: ${windowScrollX} windowScrollY ${windowScrollY}`);\r\n return new CustomEvent(CustomEventEnums.OnScroll, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: {\r\n windowInnerWidth: windowInnerWidth,\r\n windowInnerHeight: windowInnerHeight,\r\n windowScrollX: windowScrollX,\r\n windowScrollY: windowScrollY\r\n }\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.removeScrollEventListener();\r\n }\r\n\r\n public static initialise(): void {\r\n (<any>window).scrollService = new ScrollService();\r\n }\r\n}","export namespace AsyncUtils {\r\n export async function asyncFuncBeforAfter(func: Function, doBefore?: Function, doAfter?: Function) {\r\n\r\n if (doBefore != null || doBefore != undefined) {\r\n doBefore();\r\n }\r\n\r\n let result = await func();\r\n\r\n if (doAfter != null || doAfter != undefined) {\r\n doAfter();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n export const delay = (delayInms:number) => {\r\n return new Promise(resolve => setTimeout(resolve, delayInms));\r\n }\r\n \r\n \r\n}","const urlPaths = require('../../config/urlPaths.json');\r\nexport namespace CookieUtils {\r\n // Given a cookie key `name`, returns the value of\r\n // the cookie or `null`, if the key is not found.\r\n export function getCookie(name: string): string | null {\r\n try {\r\n const nameLenPlus = (name.length + 1);\r\n return document.cookie\r\n .split(';')\r\n .map(c => c.trim())\r\n .filter(cookie => {\r\n return cookie.substring(0, nameLenPlus) === `${name}=`;\r\n })\r\n .map(cookie => {\r\n return decodeURIComponent(cookie.substring(nameLenPlus));\r\n })[0] || null;\r\n } catch (error) {\r\n console.log('CookieUtils: getCookie ERROR', error);\r\n throw new Error();\r\n }\r\n }\r\n\r\n export function setCookie(name: string, val: string, daysTillExpires?: number, hoursTillExpires?: number) {\r\n try {\r\n const date = new Date();\r\n const value = val;\r\n\r\n daysTillExpires = daysTillExpires ?? 7;\r\n // Set it expire in 7 days or daysTillExpires\r\n\r\n hoursTillExpires = hoursTillExpires ?? 0;\r\n //set it to expire in 0 hours or hoursTillExpires\r\n\r\n date.setTime(date.getTime() + (daysTillExpires * 24 * 60 * 60 * 1000) + (hoursTillExpires * 60 * 60 * 1000));\r\n\r\n // Set it\r\n // document.cookie = name+\"=\"+value+\"; expires=\"+date.toUTCString()+\"; domain=.example.com; path=/\";\r\n document.cookie = `${name}=${value}; expires=${date.toUTCString()}; domain=${urlPaths.cookieDomain}; path=/`;\r\n } catch (error) {\r\n console.log('CookieUtils: setCookie ERROR', error);\r\n }\r\n }\r\n\r\n export function deleteCookie(name: string) {\r\n try {\r\n const date = new Date();\r\n\r\n // Set it expire in -1 days\r\n date.setTime(date.getTime() + (-1 * 24 * 60 * 60 * 1000));\r\n\r\n // Set it\r\n // document.cookie = name+\"=; expires=\"+date.toUTCString()+\"; path=/\";\r\n document.cookie = `${name}=; expires=${+date.toUTCString()}; domain=${urlPaths.cookieDomain}; path=/`;\r\n } catch (error) {\r\n console.log('CookieUtils: deleteCookie ERROR', error);\r\n }\r\n }\r\n}","import { CustomEventEnums } from \"./enums/customEventEnums\";\r\nexport namespace CustomEvents {\r\n export const closeAllMenusEvent = () => {\r\n console.log(`CustomEvents: closeAllMenusEvent`);\r\n return new CustomEvent(CustomEventEnums.CloseAllMenus, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n export const liveChatLoadCompleteEvent = () => {\r\n console.log(`CustomEvents: liveChatLoadComplete`);\r\n return new CustomEvent(CustomEventEnums.LiveChatLoadComplete, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n export const notificationPanelIsOpenEvent = () => {\r\n console.log(`CustomEvents: notificationPanelIsOpen`);\r\n return new CustomEvent(CustomEventEnums.NotificationPanelIsOpen, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n export const notificationPanelIsClosedEvent = () => {\r\n console.log(`CustomEvents: notificationPanelIsClosed`);\r\n return new CustomEvent(CustomEventEnums.NotificationPanelIsClosed, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n export const showLiveChatEvent = () => {\r\n console.log(`CustomEvents: showLiveChatEvent`);\r\n return new CustomEvent(CustomEventEnums.ShowLiveChat, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n export const hideLiveChatEvent = () => {\r\n console.log(`CustomEvents: hideLiveChatEvent`);\r\n return new CustomEvent(CustomEventEnums.HideLiveChat, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n\r\n export const openLiveChatEvent = () => {\r\n console.log(`CustomEvents: openLiveChatEvent`);\r\n return new CustomEvent(CustomEventEnums.OpenLiveChat, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n\r\n export const closeLiveChatEvent = () => {\r\n console.log(`CustomEvents: closeLiveChatEvent`);\r\n return new CustomEvent(CustomEventEnums.CloseLiveChat, {\r\n bubbles: true,\r\n cancelable: true,\r\n composed: false,\r\n detail: { \r\n }\r\n });\r\n }\r\n}","export namespace DomUtils {\r\n export function createArrayOfDataElement(): string[] {\r\n let allDataAttributeNames: string[] = [];\r\n let allElements = document.querySelectorAll('*');\r\n for (let i = 0; i < allElements.length; i++) {\r\n for (let x = 0; x < allElements[i].attributes.length; x++) {\r\n if (allElements[i].attributes[x].name.includes(\"data-\")) {\r\n allDataAttributeNames.push(allElements[i].attributes[x].name);\r\n }\r\n }\r\n }\r\n return allDataAttributeNames;\r\n }\r\n\r\n // export function removeChildren(element: HTMLElement): void {\r\n // while (element.firstChild) {\r\n // element.removeChild(element.firstChild);\r\n\r\n // }\r\n //}\r\n}\r\n","export namespace AnalyticEnums {\r\n\r\n export enum InteractionState {\r\n ImpressionLogged = 'data-impression-logged'\r\n }\r\n\r\n}","export namespace AttributeEnums {\r\n export enum Countdown {\r\n Countdown = 'data-countdown',\r\n CountdownSeconds = 'data-countdown-seconds',\r\n CountdownMinutes = 'data-countdown-minutes',\r\n CountdownHours = 'data-countdown-hours',\r\n CountdownDays = 'data-countdown-days',\r\n CountdownEnds = 'data-countdown-ends',\r\n CountdownExpires = 'data-countdown-expires'\r\n }\r\n\r\n export enum DropDowns {\r\n ProductDropDown = 'data-product-drop-down',\r\n ProductDisplayText = 'data-product-display-text',\r\n ProductDisplayName = 'data-product-display-name',\r\n ProductDisplaySwatch = 'data-product-display-swatch',\r\n SelectedProductUrl = 'data-selected-product-url'\r\n }\r\n\r\n export enum Product {\r\n Product = 'data-product-parent',\r\n ProductUrl = 'data-product-url',\r\n ProductSizeId = 'data-product-size-id',\r\n ProductGroupId = 'data-product-group-id',\r\n ProductLineId = 'data-product-line-id',\r\n ProductPrice = 'data-product-price',\r\n ProductPriceSummary = 'data-product-price-summary',\r\n ProductAdditionPrice = 'data-product-addition-price',\r\n ProductScrollIntoView = 'data-product-scroll-into-view',\r\n ProductOptionsPanel = 'data-product-options-panel',\r\n ProductAddToCart = 'data-product-add-to-cart',\r\n ProductAddToCartAttempted = 'data-product-add-to-cart-attempted',\r\n ProductSelectionPanel = 'data-product-selection-panel',\r\n ProductReviews = 'data-product-reviews'\r\n }\r\n\r\n export enum ProductFinancePanel {\r\n ProductFinancePanel = 'data-product-finance-panel'\r\n }\r\n\r\n export enum ProductPrice {\r\n ProductRrpPrice = 'data-product-rrp-price',\r\n ProductWasPrice = 'data-product-was-price',\r\n ProductNowPrice = 'data-product-now-price',\r\n ProductSavePrice = 'data-product-save-price',\r\n ProductBaseRrpPrice = 'data-product-base-rrp-price',\r\n ProductBaseWasPrice = 'data-product-base-was-price',\r\n ProductBaseNowPrice = 'data-product-base-now-price',\r\n ProductBaseSavePrice = 'data-product-base-save-price',\r\n }\r\n\r\n export enum ProductDelivery {\r\n ProductDeliveryPanel = 'data-product-delivery-panel',\r\n ProductDeliveryPostcode = 'data-product-delivery-postcode',\r\n ProductDeliveryPostcodeChange = 'data-product-delivery-postcode-change',\r\n ProductDeliveryPanelLineId = 'data-product-delivery-panel-line-id'\r\n }\r\n\r\n export enum ProductSelector {\r\n ProductSelector = 'data-product-selector',\r\n ProductSelectorItem = 'data-product-selector-item',\r\n ProductSelectorGroupName = 'data-product-selector-group-name',\r\n ProductSelectorGroupId = 'data-product-selector-group-id',\r\n ProductSelectorSizeId = 'data-product-selector-size-id',\r\n ProductSelectorExtraId = 'data-product-selector-extra-id',\r\n ProductSelectorName = 'data-product-selector-name',\r\n ProductSelectorSwatchSrc = 'data-product-selector-swatch-src',\r\n ProductSelectorSwatchPreviewSrc = 'data-product-selector-swatch-preview-src',\r\n ProductSelectorPrice = 'data-product-selector-price',\r\n ProductSelectorType = 'data-product-selector-type',\r\n ProductSelectorFor = 'data-product-selector-for',\r\n ProductSelectorIsSelected = 'data-product-selector-is-selected',\r\n ProductSelectorFullsizeUrl = 'data-product-selector-full-size-url'\r\n }\r\n\r\n export enum ColourPicker {\r\n ColourPicker = 'data-colour-picker',\r\n ColourPickerGroupId = 'data-colour-picker-group-id',\r\n ColourPickerValue = 'data-colour-picker-value',\r\n ColourPickerName = 'data-colour-picker-name',\r\n ColourPickerSwatchSrc = 'data-colour-picker-swatch-src',\r\n ColourPickerAdditionPrice = 'data-colour-picker-addition-price',\r\n ColourPickerLineId = 'data-colour-picker-line-id',\r\n ColourPickerFor = 'data-colour-picker-for',\r\n ColourPickerGallery = 'data-colour-picker-gallery',\r\n ConfirmColourFor = 'data-confirm-colour-for',\r\n ColourPickerDropDown = 'data-colour-picker-drop-down'\r\n }\r\n export enum Gallery {\r\n Gallery = 'data-gallery',\r\n GalleryId = 'data-gallery-id',\r\n GallerySelectableCell = 'data-gallery-selectableCell'\r\n }\r\n\r\n export enum GroupPicker {\r\n GroupPicker = 'data-group-picker'\r\n }\r\n\r\n export enum SizePicker {\r\n ProductSizePicker = 'data-product-size-picker',\r\n ProductSizePickerHandheld = 'data-product-size-picker-handheld'\r\n }\r\n\r\n export enum ProductGtm {\r\n GtmProduct = 'data-gtm-product',\r\n GtmProductId = 'data-gtm-product-id',\r\n GtmProductGroupSku = 'data-gtm-product-group-sku',\r\n GtmProductSku = 'data-gtm-product-sku',\r\n GtmProductName = 'data-gtm-product-name',\r\n GtmProductPrice = 'data-gtm-product-price',\r\n GtmProductBrand = 'data-gtm-product-brand',\r\n GtmProductSize = 'data-gtm-product-size',\r\n GtmProductCategory = 'data-gtm-product-category'\r\n }\r\n\r\n export enum PopOut {\r\n PopOutId = 'data-pop-out-id',\r\n PopOutFamily = 'data-pop-out-family',\r\n PopOutWrapper = 'data-pop-out-wrapper',\r\n PopOutBacklink = 'data-pop-out-backlink',\r\n PopOutIdOpen = 'data-pop-out-id-open',\r\n PopOutFamilyOpen = 'data-pop-out-family-open',\r\n PopOutIdCloseAll = 'data-pop-out-id-close-all',\r\n PopOutOverlayClickIsBack = 'data-pop-out-overlay-click-is-back'\r\n }\r\n\r\n export enum BasketPopOut {\r\n BasketPopOut = 'data-basket-pop-out',\r\n BasketPopOutWrapper = 'data-pop-out-wrapper',\r\n BasketPopOutProduct = 'data-basket-pop-out-product',\r\n BasketPopOutSummary = 'data-basket-pop-out-summary',\r\n BasketPopOutItemSummary = 'data-basket-pop-out-item-summary',\r\n BasketPopOutRecommendations = 'data-basket-pop-out-recommendations'\r\n }\r\n\r\n export enum Carousel {\r\n LineId = 'data-line-id',\r\n Tile = 'data-tile',\r\n Carousel = 'data-carousel',\r\n CarouselTileAddButton = 'data-carousel-tile-add-button',\r\n Container = 'data-carousel-container',\r\n Cells = 'data-carousel-cell',\r\n CellsPerPage = 'data-carousel-cells-per-page',\r\n }\r\n\r\n export enum CarouselGtm {\r\n GtmProductCarousel = 'data-gtm-product-carousel',\r\n GtmProductCarouselId = 'data-gtm-product-carousel-id',\r\n GtmProductCarouselGroupSku = 'data-gtm-product-carousel-group-sku',\r\n GtmProductCarouselSku = 'data-gtm-product-carousel-sku',\r\n GtmProductCarouselName = 'data-gtm-product-carousel-name',\r\n GtmProductCarouselPrice = 'data-gtm-product-carousel-price',\r\n GtmProductCarouselBrand = 'data-gtm-product-carousel-brand',\r\n GtmProductCarouselSize = 'data-gtm-product-carousel-size',\r\n GtmProductCarouselCategory = 'data-gtm-product-carousel-category',\r\n GtmProductCarouselUrl = 'data-gtm-product-carousel-url'\r\n }\r\n\r\n export enum CarouselInfiniteLoad {\r\n CarouselInfiniteLoad = 'data-carousel-infinite-load',\r\n Url = 'data-url',\r\n LastTile = 'data-last-tile',\r\n GetCellsOnInitialise = 'data-get-cells-on-initialise'\r\n }\r\n export enum CarouselTileLoad {\r\n CarouselTileLoad = 'data-carousel-tile-load',\r\n Url = 'data-carousel-tile-load-url'\r\n }\r\n\r\n export enum ReadMore {\r\n ReadMoreButting = 'data-read-more-butting',\r\n ReadMoreButtingOffset = 'data-read-more-butting-offset',\r\n ReadMoreToggle = 'data-read-more-toggle',\r\n ReadMoreReturnPosition = 'data-read-more-return-position',\r\n ReadMoreHeight = 'data-read-more-height',\r\n ReadMoreContent = 'data-read-more-content'\r\n }\r\n export enum ShowHide {\r\n ShowHideToggle = 'data-show-hide-toggle',\r\n ShowHideContent = 'data-show-hide-content',\r\n ShowToggleText = 'data-show-hide-show',\r\n HideToggleText = 'data-show-hide-hide'\r\n }\r\n\r\n export enum Forms {\r\n Checkbox = 'data-checkBox',\r\n CheckboxElementToggle = 'data-checkBoxElementToggle',\r\n RadioGroup = 'data-radioGroup',\r\n RadioToggle = 'data-radioToggle'\r\n }\r\n\r\n export enum ZoomableGallery {\r\n ZoomableGallery = 'data-zoomable-gallery',\r\n ZoomableGalleryPopOutPlaceholder = 'data-zoomable-gallery-pop-out-placeholder'\r\n\r\n }\r\n export enum CarouselGallery {\r\n CarouselGallery = 'data-carousel-gallery',\r\n ComponentOrientation = 'data-carousel-gallery-component-orientation',\r\n SingleCarouselComponentOrientation = 'data-carousel-gallery-single-carousel-component-orientation'\r\n }\r\n\r\n export enum PagingCarouselGallery {\r\n PagingCarouselGallery = 'data-paging-carousel-gallery',\r\n CarouselSliderElement = 'data-carousel-slider',\r\n MainDisplayPrevElement = 'data-main-display-prev',\r\n MainDisplayNextElement = 'data-main-display-next',\r\n CarouselPrevElement = 'data-carousel-prev',\r\n CarouselNextElement = 'data-carousel-next'\r\n }\r\n\r\n export enum ProductListingPage {\r\n ProductListingPage = 'data-product-listing-page',\r\n ProductListingPageShowNoProductsDialogue = 'data-product-listing-page-show-no-products-dialogue'\r\n }\r\n\r\n export enum ProductListingPageTiles {\r\n ProductListingPageTiles = 'data-product-listing-page-tiles' \r\n }\r\n\r\n export enum ProductListingPageTile {\r\n ProductListingPageTile = 'data-product-listing-page-tile',\r\n ProductListingPageTileLineId = 'data-product-listing-page-tile-line-id',\r\n ProductListingPageTileUrl = 'data-product-listing-page-tile-url',\r\n ProductListingPageTileName = 'data-product-listing-page-tile-name',\r\n ProductListingPageTilePrice = 'data-product-listing-page-tile-price',\r\n ProductListingPageTileBrand = 'data-product-listing-page-tile-brand',\r\n ProductListingPageTileSize = 'data-product-listing-page-tile-size',\r\n ProductListingPageTileCategory = 'data-product-listing-page-tile-category'\r\n }\r\n\r\n export enum ProductListingPageHeader {\r\n ProductListingPageHeader = 'data-product-listing-page-header',\r\n ProductListingPageFilterBarResults = 'data-product-listing-page-filter-bar-results',\r\n ProductListingPageSort = 'data-product-listing-page-sort',\r\n ProductListingPageFilterBarResultsStartProduct = 'data-product-listing-page-filter-bar-results-start-product',\r\n ProductListingPageFilterBarResultsProductCount = 'data-product-listing-page-filter-bar-results-product-count',\r\n ProductListingPageFilterBarResultsTotalProducts = 'data-product-listing-page-filter-bar-results-total-products',\r\n ProductListingPageHeaderHeading = 'data-product-listing-page-header-heading',\r\n ProductListingPageHeaderQuickLinks = 'data-product-listing-page-header-quick-links',\r\n ProductListingPageHeaderQuickLink = 'data-product-listing-page-header-quick-link',\r\n ProductListingPageHeaderQuickLinkName = 'data-product-listing-page-header-quick-link-name',\r\n ProductListingPageHeaderReadMoreValue = 'plp-header-intro-1'\r\n }\r\n export enum ProductListingPageDescription {\r\n ProductListingPageDescription = 'data-product-listing-page-description'\r\n }\r\n export enum ProductListingPageQuestionsAnswers {\r\n ProductListingPageQuestionsAnswers = 'data-product-listing-page-questions-answers'\r\n }\r\n export enum BreadcrumbHiddenField {\r\n BreadcrumbHiddenField = 'data-breadcrumb-hidden-field',\r\n BreadcrumbHiddenFieldUrl = 'data-breadcrumb-hidden-field-url',\r\n BreadcrumbHiddenFieldName = 'data-breadcrumb-hidden-field-name',\r\n BreadcrumbHiddenFieldPosition = 'data-breadcrumb-hidden-field-position'\r\n }\r\n\r\n export enum ProductListingPageOptions {\r\n ProductListingPageOptions = 'data-product-listing-page-options',\r\n ProductTotal = 'data-view-products-button-total-products',\r\n ProductListingPageOptionsPopOutValue = 'product-listing-page-options-pop-out'\r\n }\r\n\r\n export enum ProductListingPageGroupOptions {\r\n ProductListingPageGroupOptions = 'data-product-listing-page-group-options',\r\n }\r\n\r\n export enum ProductListingPageShowMore {\r\n ProductListingPageShowMore = 'data-product-listing-page-show-more',\r\n ProductListingPageShowMoreButton = 'data-product-listing-page-show-more-button',\r\n ProductListingPageShowingStartProduct = 'data-product-listing-page-showing-start-product',\r\n ProductListingPageShowingProductCount = 'data-product-listing-page-showing-product-count',\r\n ProductListingPageShowingTotalProducts = 'data-product-listing-page-total-products',\r\n\r\n }\r\n\r\n export enum ProductListingPageOption {\r\n ProductListingPageOption = 'data-product-listing-page-option',\r\n ProductListingPageOptionSelected = 'data-product-listing-page-option-selected',\r\n ProductListingPageOptionTitle = 'data-product-listing-page-option-title'\r\n }\r\n \r\n export enum ProductListingPageSelectedOptionsCarousel {\r\n ProductListingPageSelectedOptionsCarousel = 'data-product-listing-page-selected-options-carousel'\r\n }\r\n\r\n export enum CategoryGroup {\r\n CategoryGroup = 'data-category-group'\r\n\r\n }\r\n\r\n export enum BannerPromotion {\r\n BannerPromotion = 'data-banner-promotion',\r\n BannerPromotionName = 'data-banner-promotion-name'\r\n }\r\n\r\n export enum Breadcrumb {\r\n Breadcrumb = \"data-breadcrumb\",\r\n BreadcrumbContainer = \"data-breadcrumb-container\",\r\n }\r\n\r\n export enum CategoryPagingSelectableCarousel {\r\n CategoryPagingSelectableCarousel = 'data-category-paging-selectable-carousel',\r\n CategoryPagingSelectableCarouselValue = 'data-category-paging-selectable-carousel-value'\r\n }\r\n\r\n export enum ButtonCarousel {\r\n ButtonCarousel = 'data-button-carousel'\r\n\r\n }\r\n export enum ButtonCarouselButton {\r\n ButtonCarouselButton = 'data-button-carousel-button',\r\n ButtonCarouselButtonValue = 'data-button-carousel-button-value'\r\n }\r\n\r\n export enum PagingCarouselGalleryWithZoomButton {\r\n PagingCarouselGalleryWithZoomButton = 'data-paging-carousel-gallery-with-zoom-button',\r\n ZoomButton = 'data-paging-carousel-gallery-with-zoom-button-button'\r\n }\r\n\r\n export enum PopOutCarouselGallery {\r\n PopOutCarouselGallery = 'data-pop-out-carousel-gallery',\r\n Close = 'data-pop-out-carousel-gallery-close',\r\n singlePagingHorizontal = 'lb_popUpCarouselGallery-singleHorizontal',\r\n pagingSelectableHorizontal = 'lb_popUpCarouselGallery-pagingHorizontal',\r\n singlePagingVertical = 'lb_popUpCarouselGallery-singleVertical',\r\n pagingSelectableVertical = 'lb_popUpCarouselGallery-pagingVertical'\r\n }\r\n\r\n export enum SelectableCarousel {\r\n SelectableCarousel = 'data-selectable-carousel',\r\n Slider = 'data-selectable-carousel-slider',\r\n Cell = 'data-selectable-carousel-cell',\r\n FillerCell = 'data-selectable-carousel-filler-cell',\r\n SelectedCell = 'data-selectable-carousel-cell-selected',\r\n ComponentOrientation = 'data-selectable-carousel-component-orientation',\r\n InitialSelection = 'data-selectable-carousel-component-initial-selection'\r\n\r\n }\r\n\r\n export enum PagingSelectableCarousel {\r\n PagingSelectableCarousel = 'data-paging-selectable-carousel',\r\n Slider = 'data-selectable-carousel-slider',\r\n Prev = 'data-paging-selectable-carousel-prev',\r\n Next = 'data-paging-selectable-carousel-next',\r\n Cell = 'data-selectable-carousel-cell'\r\n }\r\n\r\n export enum SinglePagingSelectableCarousel {\r\n SinglePagingSelectableCarousel = 'data-single-paging-selectable-carousel'\r\n }\r\n\r\n export enum InstanceComponentInitialiser {\r\n Ignore = 'data-initialiser-ignore'\r\n }\r\n\r\n export enum BaseMediaTile {\r\n MediaTile = \"data-media-tile\"\r\n }\r\n\r\n export enum ImageMediaTile {\r\n ImageMediaTile = \"data-image-media-tile\"\r\n }\r\n\r\n export enum ButtonImageMediaTile {\r\n ButtonImageMediaTile = \"data-button-image-media-tile\"\r\n }\r\n\r\n export enum ZoomedImageMediaTile {\r\n ZoomedImageMediaTile = \"data-zoomed-image-media-tile\"\r\n }\r\n\r\n export enum YouTubeMediaTile {\r\n YouTubeMediaTile = \"data-you-tube-media-tile\",\r\n DisplayControl = \"data-you-tube-media-tile-display-control\",\r\n DisableKeyboardControls = \"data-you-tube-media-tile-disable-keyboard-controls\",\r\n AutoPlay = \"data-you-tube-media-tile-auto-play\",\r\n ClosedCaptionOnLoad = \"data-you-tube-media-tile-closed-caption-on-load\",\r\n DisableFullScreen = \"data-you-tube-media-tile-disable-full-screen\"\r\n }\r\n export enum LazyYouTubeMediaTile {\r\n LazyYouTubeMediaTile = \"data-lazy-you-tube-media-tile\"\r\n }\r\n\r\n export enum SwatchImage {\r\n SwatchImage = 'data-swatch-image',\r\n IsHidden = 'data-swatch-image-is-hidden',\r\n GallerySwatchImage = 'data-gallery-swatch-image'\r\n }\r\n\r\n export enum Basket {\r\n Basket = 'data-basket',\r\n BasketRecommendations = 'data-basket-recommendations',\r\n BasketSummary = 'data-basket-summary',\r\n BasketCheckoutButton = \"data-basket-checkout-button\"\r\n }\r\n\r\n export enum BasketLine {\r\n BasketLine = 'data-basket-line',\r\n Assembly = 'data-basket-line-assembly',\r\n Removal = 'data-basket-line-removal',\r\n Quantity = 'data-basket-line-quantity',\r\n Delete = 'data-basket-line-delete',\r\n Price = 'data-basket-line-price',\r\n Saving = 'data-basket-line-saving',\r\n TotalPrice = 'data-basket-line-total-price',\r\n AssemblyCost = 'data-basket-line-assembly-cost',\r\n RemovalCost = 'data-basket-line-removal-cost',\r\n Id = 'data-basket-line-id',\r\n SizeId = 'data-basket-line-size-id'\r\n }\r\n\r\n export enum BasketLineGtm {\r\n GtmBasketLine = 'data-gtm-basket-line',\r\n GtmBasketLineId = 'data-gtm-basket-line-id',\r\n GtmBasketLineGroupSku = 'data-gtm-basket-line-group-sku',\r\n GtmBasketLineSku = 'data-gtm-basket-line-sku',\r\n GtmBasketLineName = 'data-gtm-basket-line-name',\r\n GtmBasketLinePrice = 'data-gtm-basket-line-price',\r\n GtmBasketLineItemPrice = 'data-gtm-basket-line-item-price',\r\n GtmBasketLineQuantity = 'data-gtm-basket-line-qty',\r\n GtmBasketLineBrand = 'data-gtm-basket-line-brand',\r\n GtmBasketLineSize = 'data-gtm-basket-line-size',\r\n GtmBasketLineCategory = 'data-gtm-basket-line-category',\r\n GtmBasketLineUrl = 'data-gtm-basket-line-url'\r\n }\r\n\r\n export enum BasketPrices {\r\n BasketPrices = 'data-basket-prices',\r\n TotalPrice = 'data-basket-prices-total-price',\r\n TotalSaving = 'data-basket-prices-total-saving'\r\n }\r\n\r\n export enum BasketDelivery {\r\n BasketDelivery = 'data-basket-delivery'\r\n }\r\n\r\n export enum MegaMenu {\r\n MegaMenuWrapper = 'data-mega-menu-wrapper',\r\n MegaMenu = 'data-mega-menu',\r\n MegaMenuHover = 'data-mega-menu-hover',\r\n MegaMenuPopOut = 'data-mega-menu-pop-out',\r\n MegaMenuContainer = 'data-mega-menu-container',\r\n MegaMenuHandHeldButton = 'data-mega-menu-hand-held-button'\r\n }\r\n export enum MegaMenuDesktop {\r\n MegaMenuDesktop = 'data-mega-menu-desktop',\r\n }\r\n\r\n export enum MegaMenuHandheld {\r\n MegaMenuHandheld = 'data-mega-menu-handheld',\r\n }\r\n\r\n export enum MegaMenuGtm {\r\n GtmMegaMenuName = 'data-gtm-mega-menu-name'\r\n }\r\n export enum Video {\r\n Video = 'data-video',\r\n VideoSource = 'data-video-source',\r\n VideoTitle = 'data-video-title',\r\n VideoPlaceholderSize = 'data-video-placeholder-size'\r\n }\r\n\r\n export enum Home {\r\n Home = 'data-home'\r\n }\r\n\r\n export enum Brand {\r\n Brand = 'data-brand'\r\n }\r\n\r\n export enum StaticPage {\r\n StaticPage = 'data-static'\r\n }\r\n\r\n export enum BasketSimple {\r\n BasketSimple = 'data-basket-simple'\r\n }\r\n\r\n export enum SearchBase {\r\n Search = 'data-search',\r\n Results = 'data-search-results',\r\n SearchBody = 'data-search-body'\r\n }\r\n\r\n export enum Search {\r\n Input = 'data-search-input',\r\n ClearButton = 'data-search-clear-button'\r\n }\r\n\r\n export enum SearchProducts {\r\n SearchProducts = 'data-search-products'\r\n }\r\n export enum SearchProduct {\r\n SearchProduct = 'data-search-product'\r\n }\r\n export enum SearchPages {\r\n SearchPages = 'data-search-pages'\r\n }\r\n export enum SearchPage {\r\n SearchPage = 'data-search-page'\r\n }\r\n\r\n export enum SearchGtm {\r\n GtmSearchItem = 'data-gtm-search-item',\r\n GtmSearchItemUrl = 'data-gtm-search-item-url',\r\n GtmSearchItemName = 'data-gtm-search-item-name',\r\n }\r\n\r\n export enum NotFoundSearch {\r\n NotFoundSearch = 'data-not-found-search',\r\n NotFoundSearchTerm = 'data-not-found-search-term'\r\n }\r\n\r\n export enum PageLoad {\r\n PageLoad = 'data-page-load'\r\n }\r\n\r\n export enum ContentItem {\r\n ContentItem = 'data-gtm-item',\r\n ContentItemUrl = 'data-gtm-item-url',\r\n ContentItemName = 'data-gtm-item-name',\r\n ContentItemId = 'data-gtm-item-id'\r\n }\r\n\r\n export enum Overlay {\r\n OverlayHidden = 'data-overlay-hidden'\r\n }\r\n\r\n export enum LiveChat {\r\n LiveChatLink = 'data-live-chat-link'\r\n }\r\n\r\n export enum CookieConsent {\r\n CookieConsent = 'data-cookie-consent',\r\n ConsentButton = 'data-cookie-consent-button'\r\n }\r\n\r\n\r\n export enum Notification {\r\n Notification = 'data-notification',\r\n Placeholder = 'data-notification-placeholder',\r\n Timeout = 'data-notification-timeout',\r\n Delay = 'data-notification-delay',\r\n Buttons = 'data-notification-buttons',\r\n Button = 'data-notification-button',\r\n ProgressBar = 'data-notification-progress-bar',\r\n ProgressBarTimer = 'data-notification-progress-bar-timer',\r\n CloseButton = 'data-notification-close-button',\r\n Display = 'data-notification-display',\r\n Message = 'data-notification-message',\r\n Role = 'data-notification-role',\r\n Agent = 'data-notification-agent',\r\n ButtonShow = 'data-notification-button-show'\r\n }\r\n\r\n export enum PopUpTimer {\r\n popUpTimer = 'data-notification',\r\n popUpTimerStart = 'data-notification-start',\r\n popUpTimerEnd = 'data-notification-end',\r\n popUpTimerProgressBar = 'data-notification-progress-bar',\r\n popUpTimerProgressBarTimer = 'data-notification-progress-bar-timer',\r\n popUpTimerClose = 'data-notification-close'\r\n }\r\n\r\n export enum ReviewComponents{\r\n reviewWidgetParent = 'data-review-widget-parent',\r\n reviewWidget = 'data-review-widget',\r\n headerReviewWidget = 'data-header-review-widget',\r\n reviewWidgetAggregatePanel = 'data-review-widget-aggregate-panel',\r\n reviewWidgetPager = 'data-review-widget-pager',\r\n reviewWidgetPagerReviews = 'data-review-widget-pager-reviews',\r\n reviewWidgetPagerReview = 'data-review-widget-pager-review', \r\n reviewWidgetPagerRatingsFilter = 'data-review-widget-pager-ratings-filter',\r\n reviewWidgetPagerIsEof = 'data-review-widget-pager-is-eof',\r\n reviewWidgetPagerPage = 'data-review-widget-pager-page',\r\n reviewWidgetSelectedRating = 'data-review-widget-selected-rating',\r\n }\r\n export enum ReviewWidgetAggregateComponent{\r\n reviewWidgetAggregateComponent = 'data-review-widget-aggregate-component',\r\n reviewsAverage = 'data-review-widget-aggregate-component-reviews-average',\r\n totalReviews = 'data-review-widget-aggregate-component-total-reviews'\r\n }\r\n export enum ReviewWidgetSummaryComponent{\r\n reviewWidgetSummaryComponent = 'data-review-widget-summary-component'\r\n }\r\n export enum ReviewWidgetFeatureAggregateComponent{\r\n reviewWidgetFeatureAggregateComponent = 'data-review-widget-feature-aggregate-component',\r\n qualityAverage = 'data-review-widget-feature-aggregate-quality-average',\r\n valueForMoneyAverage = 'data-review-widget-feature-aggregate-value-for-money-average',\r\n aggregateMeter = 'data-review-widget-feature-aggregate-meter',\r\n aggregateTotal = 'data-review-widget-feature-aggregate-total'\r\n }\r\n\r\n export enum ReviewWidgetRatingsOption{\r\n ratingsOption = 'data-review-widget-ratings-option',\r\n ratingsOptionRating = 'data-review-widget-ratings-option-rating',\r\n ratingsOptionMeter = 'data-review-widget-ratings-option-meter',\r\n ratingsOptionTotal = 'data-review-widget-ratings-option-total'\r\n }\r\n\r\n export enum ReviewWidgetPagerShowMore{\r\n reviewWidgetPagerShowMore = 'data-review-widget-pager-show-more'\r\n }\r\n\r\n export enum ReviewWidgetSummaryFilterComponentBase{\r\n ReviewsSummary= 'data-review-widget-summary-filter-component-base-summary'\r\n }\r\n}\r\n","export enum CookieEnums {\r\n BasketSessionId = 'lobbasket',\r\n CookieConsent = 'lobconsent',\r\n RecentlyViewedIds = 'lob_viewed_products',\r\n NotificationStatus = 'lobnotificationstatus',\r\n NotificationTriggerCount = 'lobnotificationcount',\r\n AffiliateClickRef = 'lobaffiliateclickref'\r\n}\r\n","export enum CustomEventEnums {\r\n ZoomButtonPressed = 'gallery-zoom-button-pressed',\r\n CarouselGalleryMainDisplayAreaChanged = 'carousel-gallery-main-display-area-changed',\r\n DeviceTypeChangeEvent = 'device-type-change-event',\r\n DeviceOrientationChangeEvent = 'device-orientation-change-event',\r\n ViewportDimensionsChangedEvent = 'viewport-dimensions-changed-event',\r\n DocumentBodyScrollHeightChangedEvent = 'document-body-scroll-height-changed-event',\r\n SelectedCarouselCellSelected = 'selected-carousel-cell-selected',\r\n ProductSelectorChanged = 'product-selector-changed',\r\n AddProductStarted = 'add-product-started',\r\n AddProductCompleted = 'add-product-completed',\r\n ColourConfirmed = 'colour-confirmed',\r\n BasketLineDeleted = 'basket-line-deleted',\r\n BasketLineUpdated = 'basket-line-updated',\r\n BasketUpdateFailed = 'basket-update-failed',\r\n BasketAddRemoveCompleted = 'basket-add-remove-completed',\r\n ProductPriceUpdated = 'product-price-updated',\r\n ProductListingPageOptionSelected = \"product-listing-page-option-selected\",\r\n ProductListingPageSortChanged = \"product-listing-page-sort-changed\",\r\n ProductListingPageShowMore = 'product-listing-page-show-more',\r\n ProductListingPageHistoryBack = \"product-listing-page-history-back\",\r\n ProductListingPageHistoryShowMoreBack = \"product-listing-page-history-show-more-back\",\r\n ProductListingNoProductsReturned = \"product-listing-page-no-products-returned\",\r\n ProductListingPageHeaderQuickLink = \"product-listing-page-header-quick-link\",\r\n ButtonCarouselButtonClicked = 'button-carousel-button-clicked',\r\n ProductListingPageOptionDeselected = 'product-listing-page-option-deselected',\r\n FirstInteraction = 'first-interaction',\r\n FirstMovementInteraction = 'first-movement-interaction',\r\n OnScroll = 'on-scroll',\r\n ShowOverlay = 'show-overlay',\r\n HideOverlay = 'hide-overlay',\r\n CloseAllMenus = 'close-all-menus',\r\n NotificationPanelIsOpen = 'notification-panel-is-open',\r\n NotificationPanelIsClosed = 'notification-panel-is-closed',\r\n ShowLiveChat = 'show-live-chat',\r\n HideLiveChat = 'hide-live-chat',\r\n OpenLiveChat = 'open-live-chat',\r\n CloseLiveChat = 'close-live-chat',\r\n LiveChatLoadComplete = 'live-chat-load-complete',\r\n ReviewWidgetOptionSelected = \"review-widget-option-selected\",\r\n ReviewWidgetPagerShowMore = \"review-widget-pager-show-more\"\r\n}","export namespace GoogleTagManagerEnums {\r\n\r\n export enum ListSuffixes {\r\n ProductListingPage = 'PLP',\r\n ProductDisplayPage = 'PDP',\r\n Basket = 'BSK',\r\n Home = 'HME',\r\n Brand = 'BRN',\r\n Finance = 'FIN',\r\n Static = 'STA'\r\n }\r\n export enum EventTypes {\r\n ProductImpressions = 'productImpressions',\r\n PromotionImpressions = 'promotionImpressions',\r\n ProductClick = 'productClick',\r\n PromotionClick = 'promotionClick',\r\n ProductView = 'productView',\r\n AddToCart = 'addToCart',\r\n RemoveFromCart = 'removeFromCart',\r\n ViewCart = 'view_cart',\r\n SearchPageClick = 'searchPageClick',\r\n SearchProductClick = 'searchProductClick',\r\n MenuClick = 'menuClick',\r\n SortClick = 'sortClick',\r\n FilterClick = 'filterClick',\r\n ItemClick = 'itemClick',\r\n QuickLinkClick = 'quickLinkClick',\r\n }\r\n\r\n export enum SearchClickListValues {\r\n Page = 'Page',\r\n Product = 'Product'\r\n }\r\n} ","export namespace GroupEnums{ \r\n export enum GroupIds{\r\nColour=5\r\n}}\r\n\r\n","export namespace OneTrustEnums {\r\n\r\n export enum OneTrustCookie {\r\n OneTrustCookie = 'OptanonConsent'\r\n }\r\n export enum CategoryConsentTrue {\r\n StrictlyNecessary = 'C0001:1',\r\n Performance = 'C0002:1',\r\n Functional = 'C0003:1',\r\n Targeting = 'C0004:1',\r\n SocialMedia = 'C0005:1'\r\n }\r\n export enum Events {\r\n OTConsentApplied = 'OTConsentApplied',\r\n OneTrustPCLoaded = 'OneTrustPCLoaded',\r\n ConsentOnetrust = 'consent.onetrust',\r\n OneTrustGroupsUpdated = 'OneTrustGroupsUpdated'\r\n }\r\n}","export namespace SchemaDataEnums {\r\n export enum ItemList {\r\n ItemType = 'itemtype',\r\n ItemTypeValue = 'https://schema.org/ItemList',\r\n ItemListElement = 'itemListElement',\r\n ItemProp = 'itemprop',\r\n Content = 'content',\r\n Name = 'name',\r\n Size = 'size',\r\n Brand = 'brand',\r\n Category = 'category',\r\n Model = 'model',\r\n Position = 'position'\r\n }\r\n\r\n\r\n}","export enum SessionStorageEnums {\r\n LiveChatCached = 'loblivechatcached'\r\n}\r\n","export namespace StringEnums {\r\n export enum CssClass {\r\n LbActive = 'lb-active',\r\n LbDisabled = 'lb-disabled',\r\n LbCarouselCell = 'lb_carousel_cell',\r\n LbCarouselCells = 'lb_carousel_cells',\r\n LbCarouselNext = 'lb_carousel_next',\r\n LbCarouselPrevious = 'lb_carousel_previous',\r\n LbColourPickerTile = 'lb_colourPickerTile',\r\n LbCookieConsent = 'lb_cookieConsent',\r\n LbCookieConsentBtn = 'lb_cookieConsent_btn',\r\n LbCookieConsentText = 'lb_cookieConsent_text',\r\n LbDisableCssTransitions = 'lb-disableCssTransitions',\r\n LbFormElement = 'lb_formElement',\r\n LbFormElementDropDown = 'lb_formElement-dropDown',\r\n LbFormElementInput = 'lb_formElement_input',\r\n LbFormElementTextBox = 'lb_formElement-textBox',\r\n LbGalleryMainArea = 'lb_gallery_mainArea',\r\n LbGalleryChooserTiles = 'lb_gallery_chooser_tiles',\r\n LbGalleryChooserTilesCell = 'lb_gallery_chooser_tiles_cell',\r\n LbGalleryChooserTilesCellSelected = 'lb-selected',\r\n LbHeading = 'lb_heading',\r\n LbHeadingDelivery = 'lb_heading-delivery',\r\n LbHidden = 'lb-hidden',\r\n LbIcon = 'lb_icon',\r\n LbIconButton = 'lb_icon-button',\r\n LbIconDelivery = 'lb_icon-delivery',\r\n LbIconSmall = 'lb_icon-small',\r\n LbLink = 'lb_link',\r\n LbLinkWordWrap = 'lb_link-wordWrap',\r\n LbMainMenuHeader = 'lb_mainMenuHeader',\r\n ClearanceDot = 'lb_megaMenu_list_item-clearance',\r\n LbMainMenuRibbon = 'lb_mainMenuRibbon',\r\n LbMegaMenu = 'lb_megaMenu',\r\n LbNoScroll = 'lb_noScroll',\r\n LbOverlay = 'lb_overlay',\r\n LbOptionsGrid = 'lb_optionsGrid',\r\n LbOptionsGridOption = 'lb_optionsGrid_option',\r\n LbOptionsGridPrice = 'lb_optionsGrid_price',\r\n LbPopOut = 'lb_popOut',\r\n LbPopOutControl = 'lb_popOut_control',\r\n LbPopOutTransition = 'lb_popOut-transition',\r\n LbProductPageLayoutGallery = 'lb_productPageLayout_gallery',\r\n LbReadMoreFade = 'lb-readMoreFade',\r\n LbSelectableCarouselZoomHidden = \"lb_selectableCarousel_zoom-hidden\",\r\n LbSelected = 'lb-selected',\r\n LbSuccess = 'lb-success',\r\n LbText = 'lb_text',\r\n LbTextItalic = 'lb_text-italic',\r\n LbTextSmall = 'lb_text-small',\r\n LbWarning = 'lb-warning'\r\n }\r\n export enum Content {\r\n ReadLess = 'read less',\r\n ReadMore = 'read more',\r\n PleaseSelectAColour = 'Please select a colour.',\r\n PleaseSelectAllProductOptions = 'Please select all product options',\r\n SorryThisSelectionIsNoLongerAvailable = 'Sorry! This selection is no longer available. Please try a different selection',\r\n SorryThisSelectionIsNoLongerAvailableTitle = 'Sorry! This selection is no longer available | Land of Beds',\r\n\r\n }\r\n\r\n export enum Selectors {\r\n Desktop = 'Desktop',\r\n Tablet = 'Tablet',\r\n Mobile = 'Mobile'\r\n }\r\n export enum Delivery {\r\n DefaultPostCode = 'LS18 4SF',\r\n InputPlaceholderPostCode = 'Enter your postcode'\r\n }\r\n\r\n export enum Cookie {\r\n ConsentEnable = 'enable',\r\n ConsentDismiss = 'dismiss',\r\n ConsentText = 'To give you the best experience our website uses cookies. You can learn more by ',\r\n ConsentPrivacy = 'clicking here',\r\n ConsentButton = 'OK'\r\n }\r\n export enum Notification {\r\n ConsentEnable = 'enable',\r\n ConsentDismiss = 'dismiss'\r\n }\r\n export enum QueryStringParameters {\r\n AffiliateClickRef = 'clickref'\r\n }\r\n}","export enum SwipedEventEnums {\r\n SwipedDown = 'swiped-down',\r\n SwipedUp = 'swiped-up',\r\n SwipedLeft = 'swiped-left',\r\n SwipedRight = 'swiped-right'\r\n}","export namespace UrlEnums {\r\n export enum ApiUrls {\r\n BasketUpdateAssembly = '/api/basketapi/update-assembly',\r\n BasketUpdateRemoval = '/api/basketapi/update-removal',\r\n BasketUpdateLineQuantity = '/api/basketapi/update-line-quantity',\r\n BasketDeleteLine = '/api/basketapi/delete-line',\r\n BasketLine = '/api/basket/line',\r\n ProductReviews = '/api/product/reviews'\r\n }\r\n export enum PartialUrls {\r\n Basket = '/basket',\r\n BasketEmpty = '/basket/empty',\r\n BasketSimple = '/basket/simple/',\r\n BasketSummary = '/basket/basket-with-summary-only/',\r\n BasketRecommendationsTemplate = '/basket/recommendations-template/',\r\n ProductGalleryPopOut = '/product/gallery-pop-out',\r\n ProductFinancePanel = '/product/finance-panel/',\r\n ProductSelectionPanel = '/product/selection-panel/',\r\n ProductListingPageTiles = '/product-listing-page/product-tiles/',\r\n ProductListingPageTilesUnpaged = '/product-listing-page/product-tiles-unpaged/',\r\n ProductListingPageOptions = '/product-listing-page/product-options/',\r\n ProductListingPageHeaders = '/product-listing-page/page-header/',\r\n ProductListingPageTilesUpdate = '/product-listing-page/product-tiles/update',\r\n ProductListingPageOptionsUpdate = '/product-listing-page/product-options/update',\r\n ProductListingPageHeadersUpdate = '/product-listing-page/page-header/update',\r\n Search = '/search/',\r\n TrendingSearches = 'search/placeholders/trending-searches',\r\n MegaMenu = '/mega-menu',\r\n MegaMenuDesktop = '/mega-menu/desktop',\r\n MegaMenuMobile = '/mega-menu/handheld',\r\n Reviews = '/reviews/'\r\n }\r\n export enum PageUrls{\r\n ProductListingPageNoProducts = '/browse/no-products',\r\n }\r\n export enum ImageUrls {\r\n LbActive = 'lb-active'\r\n }\r\n\r\n export enum NotificationUrls{\r\n Notification = '/notification'\r\n }\r\n}","export namespace UtilityEnums {\r\n export enum DeviceOrientation {\r\n Landscape = 'landscape',\r\n Portrait = 'potrait'\r\n }\r\n export enum DeviceType {\r\n Mobile = 'mobile',\r\n Tablet = 'tablet',\r\n Desktop = 'desktop'\r\n }\r\n export enum ComponentOrientation {\r\n Vertical = 'vertical',\r\n Horizontal = 'horizontal'\r\n }\r\n export enum ProductTypeValue {\r\n Product = 'product',\r\n BasketPopOut = 'basketPopOut',\r\n Basket = 'basket'\r\n }\r\n //Product = 'Product' - is prefixed by data-product-parent value\r\n export enum WindowObjectName {\r\n Product = 'Product',\r\n BasketPopOut = 'basketPopOut',\r\n Basket = 'basket'\r\n }\r\n\r\n export enum SingleSelectType {\r\n Size = 'size',\r\n Category = 'category',\r\n Delivery = 'delivery',\r\n Campaign = 'campaign',\r\n Price = 'price',\r\n Sort = 'sort',\r\n Page = 'page'\r\n }\r\n\r\n export enum ProductCarouselNames {\r\n ProductCarouselOne = 'productCarouselOne',\r\n ProductCarouselTwo = 'productCarouselTwo',\r\n ProductCarouselThree = 'productCarouselThree',\r\n ProductCarouselFour = 'productCarouselFour',\r\n ProductCarouselFive = 'productCarouselFive',\r\n ProductCarouselSix = 'productCarouselSix',\r\n ProductCarouselSeven = 'productCarouselSeven'\r\n }\r\n\r\n export enum AnchorIds {\r\n CategoryCarousel = 'category-carousel'\r\n }\r\n\r\n export enum HistoryStateType {\r\n PopOut = 'history-state-pop-out',\r\n ProductListingPageUpdate = 'product-listing-page-update',\r\n BasketUpdate = 'basket-update',\r\n Other = ''\r\n }\r\n\r\n export enum YouTubeImageSizes {\r\n Default = 'Default',\r\n Medium = 'Medium',\r\n High = 'High',\r\n Standard = 'Standard',\r\n MaxRes = 'MaxRes'\r\n }\r\n export enum YouTubeImageFileNames {\r\n Default = 'default.jpg',\r\n Medium = 'mqdefault.jpg',\r\n High = 'hqdefault.jpg',\r\n Standard = 'sddefault.jpg',\r\n MaxRes = 'maxresdefault.jpg'\r\n }\r\n export enum YouTubeImageWidths {\r\n Default = 120,\r\n Medium = 320,\r\n High = 480,\r\n Standard = 640,\r\n MaxRes = 1280\r\n }\r\n export enum YouTubeImageHeights {\r\n Default = 90,\r\n Medium = 180,\r\n High = 360,\r\n Standard = 480,\r\n MaxRes = 720\r\n }\r\n\r\n export enum NotificationButtonTypes{\r\n Chat = 'chat',\r\n Phone = 'phone'\r\n }\r\n}","export enum ValidationState{\r\n Error,\r\n Warning,\r\n Success,\r\n None\r\n }","declare global {\r\n interface HTMLElement {\r\n removeChildren():void;\r\n }\r\n\r\n interface Number {\r\n currency(decimals: number, changeZeroToFree:boolean):string;\r\n }\r\n }\r\n \r\n HTMLElement.prototype.removeChildren = function() {\r\n while (this.firstChild) {\r\n this.removeChild(this.firstChild);\r\n }\r\n }\r\n\r\n Number.prototype.currency = function(decimals: number, changeZeroToFree:boolean = false): string {\r\n\r\n const comma = \",\";\r\n\r\n const stop = \".\";\r\n\r\n const commaGroup = 3;\r\n if (parseInt(this) === 0 && changeZeroToFree) return 'Free';\r\n\r\n let re = '\\\\d(?=(\\\\d{' + (commaGroup || 3) + '})+' + (decimals > 0 ? '\\\\D' : '$') + ')', num = this.toFixed(Math.max(0, ~~decimals));\r\n\r\n return \"£\" + (stop ? num.replace('.', stop) : num).replace(new RegExp(re, 'g'), '$&' + (comma || ','));\r\n};\r\n\r\nexport {}","export namespace GuidUtils{\r\n export function generateUUID() { \r\n var d = new Date().getTime();//Timestamp\r\n var d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now()*1000)) || 0;//Time in microseconds since page-load or 0 if unsupported\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16;//random number between 0 and 16\r\n if(d > 0){//Use timestamp until depleted\r\n r = (d + r)%16 | 0;\r\n d = Math.floor(d/16);\r\n } else {//Use microseconds since page-load if supported\r\n r = (d2 + r)%16 | 0;\r\n d2 = Math.floor(d2/16);\r\n }\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n }\r\n}","import { Exception } from \"sass\";\r\nimport { AttributeEnums } from \"./enums/attributeEnums\";\r\n\r\nexport namespace HelperUtils {\r\n export function addDataAttributeTags(dataAttribute: string, dataAttributeValue?: string): string {\r\n if (dataAttributeValue) {\r\n return '[' + dataAttribute + '=\"' + dataAttributeValue + '\"]';\r\n } else {\r\n return '[' + dataAttribute + ']';\r\n }\r\n }\r\n\r\n export function addCssClassDot(cssClass: string): string {\r\n return '.' + cssClass;\r\n }\r\n\r\n export function getValueForElementAndAttribute(htmlElementForSelector: HTMLElement, elementAttribute: string, attributeToGetIfDifferent?: string): string|undefined{\r\n let element = htmlElementForSelector.querySelector(HelperUtils.addDataAttributeTags(elementAttribute));\r\n if(element) {\r\n if(attributeToGetIfDifferent){\r\n return element.getAttribute(attributeToGetIfDifferent);\r\n } else {\r\n return element.getAttribute(elementAttribute);\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n export function setValueForElementAndAttribute(value: string, htmlElementForSelector: HTMLElement, elementAttribute: string, attributeToGetIfDifferent?: string): void{\r\n let element = htmlElementForSelector.querySelector(HelperUtils.addDataAttributeTags(elementAttribute));\r\n if(element) {\r\n if(attributeToGetIfDifferent){\r\n element.setAttribute(attributeToGetIfDifferent, value);\r\n } else {\r\n element.setAttribute(elementAttribute, value);\r\n }\r\n }\r\n }\r\n\r\n export function getValueForElementAndAttributeOrThrows(htmlElementForSelector: HTMLElement, elementAttribute: string, attributeToGetIfDifferent?: string): string{\r\n let value = this.getValueForElementAndAttribute(htmlElementForSelector, elementAttribute, attributeToGetIfDifferent);\r\n if(value === undefined){\r\n throw Error();\r\n }\r\n return value;\r\n }\r\n\r\n export function setValueForElementAndAttributeOrThrows(value: string, htmlElementForSelector: HTMLElement, elementAttribute: string, attributeToGetIfDifferent?: string): void{\r\n let element = htmlElementForSelector.querySelector(HelperUtils.addDataAttributeTags(elementAttribute));\r\n if(element) {\r\n if(attributeToGetIfDifferent){\r\n element.setAttribute(attributeToGetIfDifferent, value);\r\n } else {\r\n element.setAttribute(elementAttribute, value);\r\n }\r\n }else{\r\n throw Error();\r\n }\r\n }\r\n}","export namespace InstantiationUtils {\r\n export async function importAndInstatiate(url: string, functionName: string) {\r\n let initualiseScript = await import(`../../${url}.ts`);\r\n initualiseScript[functionName]();\r\n }\r\n\r\n export function injectScript(src: string, parentElement?: HTMLElement, id?:string, runAsAsync?: boolean) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n if(id){\r\n script.id = id;\r\n }\r\n if(runAsAsync){\r\n script.async = true;\r\n }\r\n script.src = src;\r\n script.addEventListener('load', resolve);\r\n script.addEventListener('error', e => reject(e.error));\r\n if (parentElement) {\r\n parentElement.appendChild(script);\r\n } else {\r\n document.head.appendChild(script);\r\n }\r\n });\r\n }\r\n}","export namespace OnScreenUtils {\r\n\r\n export function isVerticallyOnScreen(element: HTMLElement): boolean {\r\n\r\n let elementBoundingRect = element.getBoundingClientRect();\r\n let windowInnerHeight = window.innerHeight;\r\n let windowScrollY = window.scrollY;\r\n let midPointPosition = elementBoundingRect.top + (elementBoundingRect.height / 2);\r\n let midPointPositionWithScroll = (midPointPosition + windowScrollY);\r\n let pageBottomWithScroll = windowInnerHeight + windowScrollY;\r\n let isOnScreen: boolean = midPointPositionWithScroll < pageBottomWithScroll;\r\n\r\n if (isOnScreen) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n}","export namespace ReadyUtils {\r\n export function removeBodyNoScroll() {\r\n document.body.classList.remove('lb_noScroll');\r\n }\r\n export function addBodyNoScroll() {\r\n document.body.classList.add('lb_noScroll');\r\n }\r\n}","/*!\r\n * swiped-events.js - v@version@\r\n * Pure JavaScript swipe events\r\n * https://github.com/john-doherty/swiped-events\r\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\r\n * @author John Doherty <www.johndoherty.info>\r\n * @license MIT\r\n */\r\ninterface CustomParams {\r\n bubbles?: boolean;\r\n cancelable?: boolean;\r\n detail: any | undefined;\r\n}\r\n\r\nexport function swipedEvents(window:any, document: Document) {\r\n\r\n 'use strict';\r\n\r\n // patch CustomEvent to allow constructor creation (IE/Chrome)\r\n if (typeof window.CustomEvent !== 'function') {\r\n\r\n (<any>window).CustomEvent = function (event: string, params: CustomParams): CustomEvent {\r\n console.log(`swipedEvents: CustomEvent Wrapper event: ${event}`);\r\n\r\n params = params || ({ bubbles: false, cancelable: false, detail: undefined } as CustomParams);\r\n\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n };\r\n\r\n (<any>window).CustomEvent.prototype = window.Event.prototype;\r\n }\r\n\r\n document.addEventListener('touchstart', handleTouchStart, false);\r\n document.addEventListener('touchmove', handleTouchMove, false);\r\n document.addEventListener('touchend', handleTouchEnd, false);\r\n\r\n var xDown:number| null = null;\r\n var yDown:number| null = null;\r\n var xDiff:number| null = null;\r\n var yDiff:number| null = null;\r\n var timeDown:number | null = null;\r\n var startEl:HTMLElement | null = null;\r\n\r\n\r\n function handleTouchEnd(e: TouchEvent) {\r\n\r\n console.log('handleTouchEnd: Started');\r\n // if the user released on a different target, cancel!\r\n if (startEl !== e.target) return;\r\n\r\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20px\r\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\r\n var timeDiff = Date.now() - timeDown;\r\n var eventType = '';\r\n var changedTouches: TouchList = e.changedTouches || e.touches || new TouchList();\r\n\r\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\r\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\r\n if (xDiff > 0) {\r\n eventType = 'swiped-left';\r\n console.log('handleTouchEnd: swiped-left');\r\n }\r\n else {\r\n eventType = 'swiped-right';\r\n console.log('handleTouchEnd: swiped-right');\r\n }\r\n }\r\n }\r\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\r\n if (yDiff > 0) {\r\n eventType = 'swiped-up';\r\n console.log('handleTouchEnd: swiped-up');\r\n }\r\n else {\r\n eventType = 'swiped-down';\r\n console.log('handleTouchEnd: swiped-down');\r\n }\r\n }\r\n \r\n console.log(`handleTouchEnd: eventType ${eventType}`);\r\n if (eventType !== '') {\r\n \r\n var eventData = {\r\n dir: eventType.replace(/swiped-/, ''),\r\n touchType: 'direct',\r\n xStart: xDown,\r\n xEnd: changedTouches[0].clientX,\r\n yStart: yDown,\r\n yEnd: changedTouches[0].clientY\r\n };\r\n\r\n // fire `swiped` event event on the element that started the swipe\r\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\r\n console.log('handleTouchEnd: dispatchEvent swiped');\r\n // fire `swiped-dir` event on the element that started the swipe\r\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\r\n console.log(`handleTouchEnd: dispatchEvent ${eventType}`);\r\n }\r\n\r\n // reset values\r\n xDown = null;\r\n yDown = null;\r\n timeDown = null;\r\n console.log(`handleTouchEnd: Ended`);\r\n }\r\n\r\n\r\n function handleTouchStart(e: TouchEvent) {\r\n console.log('handleTouchStart');\r\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\r\n if ((e.target as HTMLElement).getAttribute('data-swipe-ignore') === 'true') return;\r\n\r\n startEl = e.target as HTMLElement;\r\n\r\n timeDown = Date.now();\r\n xDown = e.touches[0].clientX;\r\n yDown = e.touches[0].clientY;\r\n xDiff = 0;\r\n yDiff = 0;\r\n }\r\n\r\n\r\n function handleTouchMove(e: TouchEvent) {\r\n console.log('handleTouchMove');\r\n if (!xDown || !yDown) return;\r\n\r\n var xUp = e.touches[0].clientX;\r\n var yUp = e.touches[0].clientY;\r\n\r\n xDiff = xDown - xUp;\r\n yDiff = yDown - yUp;\r\n }\r\n\r\n\r\n function getNearestAttribute(el:HTMLElement, attributeName:string, defaultValue: string) {\r\n console.log('swipedEvents: getNearestAttribute: Started');\r\n\r\n // walk up the dom tree looking for attributeName\r\n while (el && el !== document.documentElement) {\r\n\r\n var attributeValue = el.getAttribute(attributeName);\r\n\r\n if (attributeValue) {\r\n return attributeValue;\r\n }\r\n\r\n el = (el.parentNode as HTMLElement);\r\n }\r\n console.log('swipedEvents: getNearestAttribute: Ended');\r\n return defaultValue;\r\n }\r\n console.log(`swipedEvents: Ended`);\r\n}","export namespace TrustpilotUtils{\r\n export function GetReviewStarSvgPath(stars: number):string {\r\n \r\n let imageFolderAddress: string = '_content/LbRazor/dist/img/';\r\n let starSvgPath: string = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_5star-RGB.svg`;\r\n \r\n if (stars < 0.3)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_0star-RGB.svg`;\r\n }\r\n else if (stars >= 0.3 && stars < 0.8)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_1star-RGB.svg`;\r\n }\r\n else if (stars >= 0.8 && stars < 1.3)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_1star-RGB.svg`;\r\n }\r\n else if (stars >= 1.3 && stars < 1.8)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_1halfstar-RGB.svg`;\r\n }\r\n else if (stars >= 1.8 && stars < 2.3)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_2star-RGB.svg`;\r\n }\r\n else if (stars >= 2.3 && stars < 2.8)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_2halfstar-RGB.svg`;\r\n }\r\n else if (stars >= 2.8 && stars < 3.3)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_3star-RGB.svg`;\r\n }\r\n else if (stars >= 3.3 && stars < 3.8)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_3halfstar-RGB.svg`;\r\n }\r\n else if (stars >= 3.8 && stars < 4.3)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_4star-RGB.svg`;\r\n }\r\n else if (stars >= 4.3 && stars < 4.8)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_4halfstar-RGB.svg`;\r\n }\r\n else if (stars >= 4.8)\r\n {\r\n starSvgPath = `/${imageFolderAddress}trustPilot/Trustpilot_ratings_5star-RGB.svg`;\r\n }\r\n return starSvgPath;\r\n }\r\n}","export namespace TypeUtils {\r\n export function castStringToNumberOrUndefined(potentialNumber: string | undefined,) {\r\n let nullableNumber = +potentialNumber;\r\n return (!Number.isNaN(nullableNumber)) ? nullableNumber : undefined;\r\n }\r\n\r\n export class Holder<T> {\r\n value: T;\r\n constructor(value: T) {\r\n this.value = value;\r\n }\r\n typeof(): string {\r\n return typeof this.value;\r\n }\r\n }\r\n\r\n export function convertToBoolean(input: string): boolean | undefined {\r\n try {\r\n return JSON.parse(input.toLowerCase());\r\n }\r\n catch (e) {\r\n return undefined;\r\n }\r\n }\r\n\r\n}","export namespace ValidationUtilities {\r\n export function isPostcode(value: string) {\r\n\r\n const postcodeRegEx = /^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))\\s?[0-9][A-Za-z]{2}))$/;\r\n \r\n return postcodeRegEx.test(value);\r\n \r\n }\r\n}","var map = {\n\t\"./components/basket/basket.ts\": [\n\t\t9062,\n\t\t9,\n\t\t4214,\n\t\t9062\n\t],\n\t\"./components/basket/basketDelivery.ts\": [\n\t\t1186,\n\t\t9,\n\t\t1186\n\t],\n\t\"./components/basket/basketInitialiser.ts\": [\n\t\t8817,\n\t\t9,\n\t\t4214,\n\t\t8817\n\t],\n\t\"./components/basket/basketLine.ts\": [\n\t\t4214,\n\t\t9,\n\t\t4214\n\t],\n\t\"./components/basket/basketLineGtm.ts\": [\n\t\t7961,\n\t\t9,\n\t\t7961\n\t],\n\t\"./components/basket/basketPrices.ts\": [\n\t\t2623,\n\t\t9,\n\t\t2623\n\t],\n\t\"./components/basket/basketRecommendations.ts\": [\n\t\t8303,\n\t\t9,\n\t\t8303\n\t],\n\t\"./components/basket/basketService.ts\": [\n\t\t444,\n\t\t9\n\t],\n\t\"./components/basket/basketUtils.ts\": [\n\t\t860,\n\t\t9,\n\t\t860\n\t],\n\t\"./components/basketPopOut/basketPopOut.ts\": [\n\t\t6141,\n\t\t9\n\t],\n\t\"./components/basketPopOut/basketPopOutInitialiser.ts\": [\n\t\t4434,\n\t\t9\n\t],\n\t\"./components/basketSimple/basketSimple.ts\": [\n\t\t2757,\n\t\t9,\n\t\t2757\n\t],\n\t\"./components/basketSimple/basketSimpleInitialiser.ts\": [\n\t\t209,\n\t\t9,\n\t\t209\n\t],\n\t\"./components/brand/brand.ts\": [\n\t\t7074,\n\t\t9,\n\t\t7074\n\t],\n\t\"./components/brand/brandInitialiser.ts\": [\n\t\t2305,\n\t\t9,\n\t\t2305\n\t],\n\t\"./components/buttonCarousel/buttonCarousel.ts\": [\n\t\t4682,\n\t\t9\n\t],\n\t\"./components/buttonCarousel/buttonCarouselButton.ts\": [\n\t\t3794,\n\t\t9\n\t],\n\t\"./components/carousel/carousel.ts\": [\n\t\t3659,\n\t\t9\n\t],\n\t\"./components/carousel/carouselGtm.ts\": [\n\t\t4188,\n\t\t9\n\t],\n\t\"./components/carousel/carouselInfiniteLoad.ts\": [\n\t\t424,\n\t\t9\n\t],\n\t\"./components/carousel/carouselInfiniteLoadInitialiser.ts\": [\n\t\t3062,\n\t\t9,\n\t\t3062\n\t],\n\t\"./components/carousel/carouselInitialiser.ts\": [\n\t\t9051,\n\t\t9,\n\t\t9051\n\t],\n\t\"./components/carousel/carouselTileLoad.ts\": [\n\t\t7830,\n\t\t9\n\t],\n\t\"./components/categoryGroup/categoryGroup.ts\": [\n\t\t7762,\n\t\t9,\n\t\t7762\n\t],\n\t\"./components/categoryGroup/categoryGroupInitialiser.ts\": [\n\t\t2253,\n\t\t9,\n\t\t2253\n\t],\n\t\"./components/colourPicker/colourPickerController.ts\": [\n\t\t4585,\n\t\t9\n\t],\n\t\"./components/colourPicker/colourPickerInitialiser.ts\": [\n\t\t6558,\n\t\t9,\n\t\t5196\n\t],\n\t\"./components/contentItems/contentItem.ts\": [\n\t\t6312,\n\t\t9\n\t],\n\t\"./components/contentItems/contentItems.ts\": [\n\t\t4890,\n\t\t9\n\t],\n\t\"./components/countdown/countdownController.ts\": [\n\t\t6241,\n\t\t9,\n\t\t6241\n\t],\n\t\"./components/countdown/countdownInitialiser.ts\": [\n\t\t5436,\n\t\t9,\n\t\t5436\n\t],\n\t\"./components/gallery/galleryController.ts\": [\n\t\t5883,\n\t\t9\n\t],\n\t\"./components/gallery/galleryInitialiser.ts\": [\n\t\t7655,\n\t\t9,\n\t\t7655\n\t],\n\t\"./components/globalComponents/globalComponents.ts\": [\n\t\t8400,\n\t\t9\n\t],\n\t\"./components/groupPicker/groupPicker.ts\": [\n\t\t1453,\n\t\t9\n\t],\n\t\"./components/home/home.ts\": [\n\t\t8545,\n\t\t9,\n\t\t8545\n\t],\n\t\"./components/home/homeInitialiser.ts\": [\n\t\t928,\n\t\t9,\n\t\t928\n\t],\n\t\"./components/loading/loadingTemplates.ts\": [\n\t\t1349,\n\t\t9\n\t],\n\t\"./components/mediaTile/baseMediaTile.ts\": [\n\t\t1032,\n\t\t9\n\t],\n\t\"./components/mediaTile/buttonImageMediaTile.ts\": [\n\t\t9399,\n\t\t9\n\t],\n\t\"./components/mediaTile/imageMediaTile.ts\": [\n\t\t2581,\n\t\t9\n\t],\n\t\"./components/mediaTile/lazyYouTubeMediaTile.ts\": [\n\t\t1383,\n\t\t9\n\t],\n\t\"./components/mediaTile/mediaTileFactory.ts\": [\n\t\t3373,\n\t\t9\n\t],\n\t\"./components/mediaTile/youTubeMediaTile.ts\": [\n\t\t6070,\n\t\t9\n\t],\n\t\"./components/mediaTile/zoomedImageMediaTile.ts\": [\n\t\t2741,\n\t\t9\n\t],\n\t\"./components/notification/notification.ts\": [\n\t\t4612,\n\t\t9\n\t],\n\t\"./components/product/basketProduct.ts\": [\n\t\t9629,\n\t\t9,\n\t\t9629\n\t],\n\t\"./components/product/product.ts\": [\n\t\t8078,\n\t\t9\n\t],\n\t\"./components/product/productCarouselOrchestrator.ts\": [\n\t\t4846,\n\t\t9\n\t],\n\t\"./components/product/productColourDropDown.ts\": [\n\t\t8662,\n\t\t9\n\t],\n\t\"./components/product/productDeliveryPanel.ts\": [\n\t\t2484,\n\t\t9\n\t],\n\t\"./components/product/productDeliveryPanelInitialiser.ts\": [\n\t\t5164,\n\t\t9,\n\t\t5164\n\t],\n\t\"./components/product/productDropDown.ts\": [\n\t\t1286,\n\t\t9\n\t],\n\t\"./components/product/productFinancePanel.ts\": [\n\t\t9864,\n\t\t9\n\t],\n\t\"./components/product/productGroupDropDown.ts\": [\n\t\t2876,\n\t\t9\n\t],\n\t\"./components/product/productGtm.ts\": [\n\t\t5693,\n\t\t9\n\t],\n\t\"./components/product/productInitialiser.ts\": [\n\t\t4209,\n\t\t9\n\t],\n\t\"./components/product/productOptionsPanel.ts\": [\n\t\t4780,\n\t\t9\n\t],\n\t\"./components/product/productPrice.ts\": [\n\t\t6079,\n\t\t9\n\t],\n\t\"./components/product/productReviewsParent.ts\": [\n\t\t8378,\n\t\t9\n\t],\n\t\"./components/product/productSizeDropDown.ts\": [\n\t\t6524,\n\t\t9\n\t],\n\t\"./components/productListingPage/categoryPagingSelectableCarousel.ts\": [\n\t\t9874,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPage.ts\": [\n\t\t5615,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageBreadcrumb.ts\": [\n\t\t8405,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageGroupOptions.ts\": [\n\t\t1425,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageHeader.ts\": [\n\t\t892,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageHeaderQuickLinks.ts\": [\n\t\t8160,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageInitialiser.ts\": [\n\t\t1058,\n\t\t9,\n\t\t1058\n\t],\n\t\"./components/productListingPage/productListingPageOption.ts\": [\n\t\t7840,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageOptions.ts\": [\n\t\t3191,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageQuickLink.ts\": [\n\t\t9836,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageSelectedOptionsCarousel.ts\": [\n\t\t2283,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageShowMore.ts\": [\n\t\t9072,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageTile.ts\": [\n\t\t6862,\n\t\t9\n\t],\n\t\"./components/productListingPage/productListingPageTiles.ts\": [\n\t\t2472,\n\t\t9\n\t],\n\t\"./components/promotions/bannerPromotion.ts\": [\n\t\t8316,\n\t\t9\n\t],\n\t\"./components/promotions/bannerPromotions.ts\": [\n\t\t5098,\n\t\t9\n\t],\n\t\"./components/readMore/interfaces.ts\": [\n\t\t7818,\n\t\t9,\n\t\t7818\n\t],\n\t\"./components/readMore/readMoreController.ts\": [\n\t\t9484,\n\t\t9\n\t],\n\t\"./components/readMore/readMoreInitialiser.ts\": [\n\t\t9025,\n\t\t9,\n\t\t9025\n\t],\n\t\"./components/reviewComponents/headerReviewWidget.ts\": [\n\t\t1308,\n\t\t9\n\t],\n\t\"./components/reviewComponents/productReviewWidget.ts\": [\n\t\t9205,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidget.ts\": [\n\t\t3914,\n\t\t9,\n\t\t3914\n\t],\n\t\"./components/reviewComponents/reviewWidgetAggregateComponent.ts\": [\n\t\t542,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetAggregatePanel.ts\": [\n\t\t8457,\n\t\t9,\n\t\t8457\n\t],\n\t\"./components/reviewComponents/reviewWidgetAggregatePanelBase.ts\": [\n\t\t7579,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetAggregatePanelProduct.ts\": [\n\t\t6886,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetBase.ts\": [\n\t\t404,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetFeatureAggregateComponent.ts\": [\n\t\t1629,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetOptionBase.ts\": [\n\t\t4240,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetPager.ts\": [\n\t\t5015,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetPagerRatingsFilter.ts\": [\n\t\t8874,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetPagerRatingsFilterOption.ts\": [\n\t\t7162,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetPagerReview.ts\": [\n\t\t8247,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetPagerReviews.ts\": [\n\t\t150,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetPagerShowMore.ts\": [\n\t\t5685,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetSummaryComponent.ts\": [\n\t\t4628,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetSummaryComponentOption.ts\": [\n\t\t2087,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewWidgetSummaryFilterComponentBase.ts\": [\n\t\t9168,\n\t\t9\n\t],\n\t\"./components/reviewComponents/reviewsAggregate.ts\": [\n\t\t7823,\n\t\t9,\n\t\t7823\n\t],\n\t\"./components/search/notFoundSearch.ts\": [\n\t\t6461,\n\t\t9,\n\t\t6461\n\t],\n\t\"./components/search/search.ts\": [\n\t\t5184,\n\t\t9,\n\t\t5184\n\t],\n\t\"./components/search/searchBase.ts\": [\n\t\t7939,\n\t\t9,\n\t\t7939\n\t],\n\t\"./components/search/searchGtmItem.ts\": [\n\t\t2922,\n\t\t9,\n\t\t2922\n\t],\n\t\"./components/search/searchInitialiser.ts\": [\n\t\t2126,\n\t\t9,\n\t\t2126\n\t],\n\t\"./components/search/searchItemBase.ts\": [\n\t\t2194,\n\t\t9,\n\t\t2194\n\t],\n\t\"./components/search/searchPage.ts\": [\n\t\t5616,\n\t\t9,\n\t\t5616\n\t],\n\t\"./components/search/searchPages.ts\": [\n\t\t8039,\n\t\t9,\n\t\t8039\n\t],\n\t\"./components/search/searchProduct.ts\": [\n\t\t1329,\n\t\t9,\n\t\t1329\n\t],\n\t\"./components/search/searchProducts.ts\": [\n\t\t9912,\n\t\t9,\n\t\t9912\n\t],\n\t\"./components/selectableCarousel/basePagingSelectableCarousel.ts\": [\n\t\t5518,\n\t\t9\n\t],\n\t\"./components/selectableCarousel/pagingSelectableCarousel.ts\": [\n\t\t5663,\n\t\t9\n\t],\n\t\"./components/selectableCarousel/pagingSelectableCarouselInitialiser.ts\": [\n\t\t7673,\n\t\t9,\n\t\t6109\n\t],\n\t\"./components/selectableCarousel/selectableCarousel.ts\": [\n\t\t5094,\n\t\t9\n\t],\n\t\"./components/selectableCarousel/singlePagingSelectableCarousel.ts\": [\n\t\t4056,\n\t\t9,\n\t\t4056\n\t],\n\t\"./components/selectableCarousel/singlePagingSelectableCarouselInitialiser.ts\": [\n\t\t9523,\n\t\t9,\n\t\t9523\n\t],\n\t\"./components/showHide/showHideController.ts\": [\n\t\t1122,\n\t\t9\n\t],\n\t\"./components/showHide/showHideInitialiser.ts\": [\n\t\t6038,\n\t\t9,\n\t\t6038\n\t],\n\t\"./components/staticPages/staticPage.ts\": [\n\t\t2098,\n\t\t9,\n\t\t2098\n\t],\n\t\"./components/staticPages/staticPageInitialiser.ts\": [\n\t\t4519,\n\t\t9,\n\t\t4519\n\t],\n\t\"./components/video/youTubeVideo.ts\": [\n\t\t7825,\n\t\t9\n\t],\n\t\"./components/zoomableGallery/carouselGallery.ts\": [\n\t\t3104,\n\t\t9,\n\t\t3104\n\t],\n\t\"./components/zoomableGallery/pagingCarouselGallery.ts\": [\n\t\t227,\n\t\t9,\n\t\t227\n\t],\n\t\"./components/zoomableGallery/pagingCarouselGalleryInitialiser.ts\": [\n\t\t5052,\n\t\t9,\n\t\t5052\n\t],\n\t\"./components/zoomableGallery/pagingCarouselGalleryWithZoomButton.ts\": [\n\t\t608,\n\t\t9,\n\t\t608\n\t],\n\t\"./components/zoomableGallery/pagingCarouselGalleryWithZoomButtonInitialiser.ts\": [\n\t\t7561,\n\t\t9,\n\t\t7561\n\t],\n\t\"./components/zoomableGallery/popOutCarouselGallery.ts\": [\n\t\t3832,\n\t\t9,\n\t\t3832\n\t],\n\t\"./components/zoomableGallery/popOutCarouselGalleryInitialiser.ts\": [\n\t\t5953,\n\t\t9,\n\t\t5649\n\t],\n\t\"./components/zoomableGallery/zoomableGallery.ts\": [\n\t\t6121,\n\t\t9,\n\t\t6121\n\t],\n\t\"./components/zoomableGallery/zoomableGalleryInitialiser.ts\": [\n\t\t8968,\n\t\t9,\n\t\t8968\n\t],\n\t\"./css.ts\": [\n\t\t1989,\n\t\t9,\n\t\t0,\n\t\t6663,\n\t\t7676,\n\t\t2449,\n\t\t1989\n\t],\n\t\"./index.ts\": [\n\t\t3607,\n\t\t7,\n\t\t3607\n\t],\n\t\"./shared/ajax.ts\": [\n\t\t6756,\n\t\t9\n\t],\n\t\"./shared/ajaxGetAndReplaceHtml.ts\": [\n\t\t2151,\n\t\t9\n\t],\n\t\"./shared/cookieConsent.ts\": [\n\t\t945,\n\t\t9\n\t],\n\t\"./shared/delivery/deliveryServices.ts\": [\n\t\t1584,\n\t\t9\n\t],\n\t\"./shared/delivery/productDeliveryRequestDto.ts\": [\n\t\t931,\n\t\t9,\n\t\t931\n\t],\n\t\"./shared/delivery/productDeliveryResponseDto.ts\": [\n\t\t7728,\n\t\t9\n\t],\n\t\"./shared/domContentLoaded.ts\": [\n\t\t4127,\n\t\t7,\n\t\t4127\n\t],\n\t\"./shared/firstInteraction.ts\": [\n\t\t8753,\n\t\t9\n\t],\n\t\"./shared/googleTagManager/gtmDataObject.ts\": [\n\t\t9126,\n\t\t9,\n\t\t9126\n\t],\n\t\"./shared/googleTagManager/gtmPostAddToCartObject.ts\": [\n\t\t349,\n\t\t9,\n\t\t349\n\t],\n\t\"./shared/googleTagManager/gtmPostFilterClickObject.ts\": [\n\t\t873,\n\t\t9,\n\t\t873\n\t],\n\t\"./shared/googleTagManager/gtmPostItemClickObject.ts\": [\n\t\t8427,\n\t\t9,\n\t\t8427\n\t],\n\t\"./shared/googleTagManager/gtmPostMenuClickObject.ts\": [\n\t\t4179,\n\t\t9,\n\t\t4179\n\t],\n\t\"./shared/googleTagManager/gtmPostProductTileClickObject.ts\": [\n\t\t9180,\n\t\t9,\n\t\t9180\n\t],\n\t\"./shared/googleTagManager/gtmPostProductTileImpressionsObject.ts\": [\n\t\t1847,\n\t\t9,\n\t\t1847\n\t],\n\t\"./shared/googleTagManager/gtmPostProductViewObject.ts\": [\n\t\t6395,\n\t\t9,\n\t\t6395\n\t],\n\t\"./shared/googleTagManager/gtmPostPromotionClickObject.ts\": [\n\t\t5533,\n\t\t9,\n\t\t5533\n\t],\n\t\"./shared/googleTagManager/gtmPostPromotionImpressionsObject.ts\": [\n\t\t4952,\n\t\t9,\n\t\t4952\n\t],\n\t\"./shared/googleTagManager/gtmPostQuickLinkClickObject.ts\": [\n\t\t1942,\n\t\t9,\n\t\t1942\n\t],\n\t\"./shared/googleTagManager/gtmPostRemoveFromCartObject.ts\": [\n\t\t1689,\n\t\t9,\n\t\t1689\n\t],\n\t\"./shared/googleTagManager/gtmPostSearchProductAndPageClickObject.ts\": [\n\t\t1685,\n\t\t9,\n\t\t1685\n\t],\n\t\"./shared/googleTagManager/gtmPostSortClickObject.ts\": [\n\t\t5360,\n\t\t9,\n\t\t5360\n\t],\n\t\"./shared/googleTagManager/gtmPostViewCartObject.ts\": [\n\t\t2542,\n\t\t9,\n\t\t2542\n\t],\n\t\"./shared/googleTagManager/gtmService.ts\": [\n\t\t7948,\n\t\t9\n\t],\n\t\"./shared/historyController.ts\": [\n\t\t3835,\n\t\t9\n\t],\n\t\"./shared/initialiser.ts\": [\n\t\t4855,\n\t\t9\n\t],\n\t\"./shared/instanceComponentBase.ts\": [\n\t\t943,\n\t\t9\n\t],\n\t\"./shared/instanceComponentInitialiser.ts\": [\n\t\t1213,\n\t\t9\n\t],\n\t\"./shared/interfaces.ts\": [\n\t\t1452,\n\t\t9,\n\t\t1452\n\t],\n\t\"./shared/lbCookies.ts\": [\n\t\t5649,\n\t\t9\n\t],\n\t\"./shared/liveChat.ts\": [\n\t\t1005,\n\t\t9\n\t],\n\t\"./shared/megaMenu.ts\": [\n\t\t2521,\n\t\t9\n\t],\n\t\"./shared/megaMenuDesktop.ts\": [\n\t\t4409,\n\t\t9\n\t],\n\t\"./shared/megaMenuDeviceBase.ts\": [\n\t\t2201,\n\t\t9\n\t],\n\t\"./shared/megaMenuHandheld.ts\": [\n\t\t767,\n\t\t9\n\t],\n\t\"./shared/megaMenuInitialiser.ts\": [\n\t\t6109,\n\t\t9\n\t],\n\t\"./shared/megaMenuItem.ts\": [\n\t\t1946,\n\t\t9\n\t],\n\t\"./shared/oneTrust/oneTrustCookieConsent.ts\": [\n\t\t7043,\n\t\t9\n\t],\n\t\"./shared/overlay.ts\": [\n\t\t427,\n\t\t9\n\t],\n\t\"./shared/overlayInitialiser.ts\": [\n\t\t7362,\n\t\t9\n\t],\n\t\"./shared/popOutController.ts\": [\n\t\t240,\n\t\t9\n\t],\n\t\"./shared/popOutControllerInitialiser.ts\": [\n\t\t1169,\n\t\t9\n\t],\n\t\"./shared/popUpTimer.ts\": [\n\t\t1190,\n\t\t9,\n\t\t1190\n\t],\n\t\"./shared/responsiveState.ts\": [\n\t\t380,\n\t\t9\n\t],\n\t\"./shared/scrollService.ts\": [\n\t\t7664,\n\t\t9\n\t],\n\t\"./shared/toggleModifier.ts\": [\n\t\t225,\n\t\t9,\n\t\t225\n\t],\n\t\"./shared/utilities/asyncUtils.ts\": [\n\t\t6498,\n\t\t9\n\t],\n\t\"./shared/utilities/cookieUtils.ts\": [\n\t\t1822,\n\t\t9\n\t],\n\t\"./shared/utilities/customEvents.ts\": [\n\t\t6596,\n\t\t9\n\t],\n\t\"./shared/utilities/domUtils.ts\": [\n\t\t8810,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/analyticsEnums.ts\": [\n\t\t9850,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/attributeEnums.ts\": [\n\t\t7087,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/cookieEnums.ts\": [\n\t\t1777,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/customEventEnums.ts\": [\n\t\t708,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/googleTagManagerEnums.ts\": [\n\t\t8396,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/groupEnums.ts\": [\n\t\t4698,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/oneTrustEnums.ts\": [\n\t\t6150,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/schemaDataEnums.ts\": [\n\t\t1738,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/sessionStorageEnums.ts\": [\n\t\t5095,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/stringEnums.ts\": [\n\t\t7647,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/swipedEventEnums.ts\": [\n\t\t8858,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/urlEnums.ts\": [\n\t\t9176,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/utillityEnums.ts\": [\n\t\t337,\n\t\t9\n\t],\n\t\"./shared/utilities/enums/validationStateEnum.ts\": [\n\t\t3494,\n\t\t9\n\t],\n\t\"./shared/utilities/extensionUtilities.ts\": [\n\t\t4392,\n\t\t9\n\t],\n\t\"./shared/utilities/guidUtils.ts\": [\n\t\t5498,\n\t\t9\n\t],\n\t\"./shared/utilities/helperUtils.ts\": [\n\t\t8198,\n\t\t9\n\t],\n\t\"./shared/utilities/instantiationUtils.ts\": [\n\t\t4491,\n\t\t9\n\t],\n\t\"./shared/utilities/onScreenUtils.ts\": [\n\t\t8627,\n\t\t9\n\t],\n\t\"./shared/utilities/readyUtils.ts\": [\n\t\t8274,\n\t\t9\n\t],\n\t\"./shared/utilities/swipeEvents.ts\": [\n\t\t5196,\n\t\t9\n\t],\n\t\"./shared/utilities/timeUtils.ts\": [\n\t\t1360,\n\t\t9,\n\t\t1360\n\t],\n\t\"./shared/utilities/trustpilotUtils.ts\": [\n\t\t2470,\n\t\t9\n\t],\n\t\"./shared/utilities/typeUtils.ts\": [\n\t\t3314,\n\t\t9\n\t],\n\t\"./shared/utilities/validationUtilities.ts\": [\n\t\t6776,\n\t\t9\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(2).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__.t(id, ids[1] | 16)\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 7529;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"0\":\"css/promo\",\"2449\":\"css/home\",\"6663\":\"css/core\",\"7676\":\"css/firstLoad\"}[chunkId] || chunkId) + \".bundle_074.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"0\":\"css/promo\",\"2449\":\"css/home\",\"6663\":\"css/core\",\"7676\":\"css/firstLoad\"}[chunkId] || chunkId) + \"_074.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t7126: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"0\":1,\"1989\":1,\"2449\":1,\"6663\":1,\"7676\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t7126: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkLoBSiteTemplates\"] = self[\"webpackChunkLoBSiteTemplates\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(4855);\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","module","exports","_callSuper","t","o","e","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","constructor","apply","_construct","r","arguments","push","p","bind","_setPrototypeOf","prototype","Boolean","valueOf","call","_iterableToArrayLimit","l","Symbol","iterator","n","i","u","a","f","next","Object","done","value","length","return","_toPrimitive","toPrimitive","TypeError","String","Number","_toPropertyKey","_typeof","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","enumerable","configurable","writable","defineProperty","key","_createClass","protoProps","staticProps","_inherits","subClass","superClass","create","setPrototypeOf","getPrototypeOf","__proto__","_assertThisInitialized","self","ReferenceError","_superPropBase","object","property","hasOwnProperty","_get","get","receiver","base","desc","getOwnPropertyDescriptor","this","_slicedToArray","arr","_arrayWithHoles","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","Array","isArray","_arrayLikeToArray","iter","from","minLen","toString","slice","name","test","len","arr2","_classPrivateFieldGet","privateMap","_classApplyDescriptorGet","_classExtractFieldDescriptor","_classPrivateFieldSet","_classApplyDescriptorSet","action","has","set","_checkPrivateRedeclaration","obj","privateCollection","_classPrivateFieldInitSpec","RESTORE_FOCUS_TIMEOUT","globalState","focusPreviousActiveElement","previousActiveElement","HTMLElement","focus","document","body","restoreActiveElement","returnFocus","Promise","resolve","x","window","scrollX","y","scrollY","restoreFocusTimeout","setTimeout","scrollTo","swalPrefix","swalClasses","reduce","acc","className","iconTypes","icon","capitalizeFirstLetter","str","charAt","toUpperCase","warn","message","error","previousWarnOnceMessages","warnOnce","includes","warnAboutDeprecation","deprecatedParam","useInstead","concat","callIfFunction","arg","hasToPromiseFn","toPromise","asPromise","isPromise","getContainer","querySelector","container","elementBySelector","selectorString","elementByClass","getPopup","popup","getIcon","getIconContent","getTitle","title","getHtmlContainer","getImage","image","getProgressSteps","getValidationMessage","getConfirmButton","actions","confirm","getCancelButton","cancel","getDenyButton","deny","getInputLabel","getLoader","loader","getActions","getFooter","footer","getTimerProgressBar","getCloseButton","close","focusable","getFocusableElements","focusableElementsWithTabindex","querySelectorAll","focusableElementsWithTabindexSorted","sort","b","tabindexA","parseInt","getAttribute","tabindexB","otherFocusableElements","otherFocusableElementsFiltered","filter","el","Set","isVisible$1","isModal","hasClass","shown","isToast","toast","isLoading","hasAttribute","setInnerHtml","elem","html","textContent","parsed","DOMParser","parseFromString","head","childNodes","forEach","child","appendChild","HTMLVideoElement","HTMLAudioElement","cloneNode","classList","split","contains","removeCustomClasses","params","values","showClass","remove","applyCustomClass","customClass","addClass","getInput$1","inputClass","checkbox","radio","range","input","focusInput","type","val","toggleClass","condition","add","removeClass","getDirectChildByClass","children","applyNumericalStyle","style","setProperty","removeProperty","show","display","undefined","hide","showWhenInnerHtmlPresent","MutationObserver","toggle","innerHTML","observe","childList","subtree","setStyle","parent","selector","offsetWidth","offsetHeight","getClientRects","allButtonsAreHidden","isScrollable","scrollHeight","clientHeight","hasCssAnimation","getComputedStyle","animDuration","parseFloat","getPropertyValue","transDuration","animateTimerProgressBar","timer","reset","timerProgressBar","transition","width","stopTimerProgressBar","timerProgressBarWidth","timerProgressBarPercent","isNodeEnv","sweetHTML","file","select","label","textarea","replace","resetOldContainer","oldContainer","documentElement","resetValidationMessage$1","currentInstance","resetValidationMessage","addInputChangeListeners","rangeOutput","oninput","onchange","getTarget","setupAccessibility","setAttribute","setupRTL","targetElement","direction","rtl","init","oldContainerExisted","createElement","parseHtmlToContainer","param","handleObject","jquery","handleJqueryElem","animationEndEvent","testEl","webkitAnimation","animation","renderActions","showConfirmButton","showDenyButton","showCancelButton","renderButtons","loaderHtml","confirmButton","denyButton","cancelButton","renderButton","handleButtonsStyling","reverseButtons","insertBefore","buttonsStyling","styled","confirmButtonColor","backgroundColor","denyButtonColor","cancelButtonColor","button","buttonType","buttonName","renderCloseButton","closeButton","closeButtonHtml","showCloseButton","closeButtonAriaLabel","renderContainer","handleBackdropParam","backdrop","handlePositionParam","position","handleGrowParam","grow","background","center","privateProps","innerParams","WeakMap","domCache","inputClasses","renderInput","rerender","inputContainer","setAttributes","inputAttributes","showInput","setCustomClass","renderInputType","getInputContainer","inputAutoFocus","keys","join","removeAttributes","attributes","attrName","removeAttribute","attr","setInputPlaceholder","placeholder","inputPlaceholder","setInputLabel","prependTo","inputLabel","labelClass","id","innerText","insertAdjacentElement","inputType","checkAndSetInputValue","inputValue","text","email","password","number","tel","url","search","date","time","week","month","rangeInput","disabled","selected","checkboxContainer","checked","getMargin","marginLeft","marginRight","initialPopupWidth","textareaWidth","attributeFilter","renderContent","htmlContainer","renderFooter","renderIcon","setContent","applyStyles","iconHtml","indexOf","_i","_Object$entries","entries","_Object$entries$_i","iconType","iconClassName","setColor","adjustSuccessIconBackgroundColor","popupBackgroundColor","successIconParts","successIconHtml","errorIconHtml","oldContent","newContent","iconContent","question","warning","info","trim","iconColor","color","borderColor","_i2","_arr","sel","content","renderImage","imageUrl","imageAlt","imageWidth","imageHeight","renderPopup","padding","addClasses$1","modal","renderProgressSteps","progressStepsContainer","progressSteps","currentProgressStep","step","index","stepEl","createStepElement","lineEl","createLineElement","progressStepsDistance","renderTitle","titleText","render","didRender","isVisible","clickConfirm","_dom$getConfirmButton","click","clickDeny","_dom$getDenyButton","clickCancel","_dom$getCancelButton","DismissReason","freeze","esc","removeKeydownHandler","keydownTarget","keydownHandlerAdded","removeEventListener","keydownHandler","capture","keydownListenerCapture","addKeydownHandler","dismissWith","addEventListener","setFocus","increment","_dom$getPopup","focusableElements","arrowKeysNextButton","arrowKeysPreviousButton","event","isComposing","keyCode","stopKeydownPropagation","stopPropagation","handleEnter","handleTab","handleArrows","handleEsc","allowEnterKey","outerHTML","preventDefault","btnIndex","shiftKey","buttons","activeElement","sibling","buttonToFocus","HTMLButtonElement","allowEscapeKey","privateMethods","swalPromiseResolve","swalPromiseReject","setAriaHidden","unsetAriaHidden","isSafariOrIOS","GestureEvent","iOSfix","iosfix","offset","scrollTop","top","lockBodyScroll","preventTouchMove","ontouchstart","shouldPreventTouchMove","ontouchmove","isStylus","isZoom","tagName","touches","touchType","undoIOSfix","measureScrollbar","scrollDiv","scrollbarWidth","getBoundingClientRect","clientWidth","removeChild","previousBodyPadding","replaceScrollbarWithPadding","initialBodyOverflow","innerHeight","paddingRight","undoReplaceScrollbarWithPadding","removePopupAndResetState","didClose","triggerDidCloseAndDispose","then","removeBodyClasses","resolveValue","prepareResolveValue","triggerClosePopup","isAwaitingPromise","isDismissed","handleAwaitingPromise","hideClass","handlePopupAnimation","rejectPromise","_destroy","isConfirmed","isDenied","assign","animationIsSupported","willClose","animatePopup","swalCloseEventFinishedCallback","showLoading","buttonToReplace","Swal","replaceButton","loading","handleInputOptionsAndValue","handleInputOptions","some","handleInputValue","getInputValue","getInput","getCheckboxValue","getRadioValue","getFileValue","inputAutoTrim","files","processInputOptions","inputOptions","populateSelectOptions","formatInputOptions","populateRadioOptions","hideLoading","err","renderOption","optionLabel","optionValue","option","isSelected","inputOption","optgroup","radioValue","radioLabel","radioInput","radioLabelElement","radios","result","Map","valueFormatted","_this","handleConfirmButtonClick","disableButtons","handleConfirmOrDenyWithInput","handleDenyButtonClick","returnInputValueOnDeny","handleCancelButtonClick","inputValidator","handleInputValidator","checkValidity","enableButtons","showValidationMessage","validationMessage","disableInput","enableInput","showLoaderOnDeny","preDeny","preDenyValue","rejectWith","succeedWith","showLoaderOnConfirm","preConfirm","preConfirmValue","showRelatedButton","getElementsByClassName","setButtonsDisabled","setInputDisabled","inputerror","defaultParams","template","heightAuto","allowOutsideClick","confirmButtonText","confirmButtonAriaLabel","denyButtonText","denyButtonAriaLabel","cancelButtonText","cancelButtonAriaLabel","focusConfirm","focusDeny","focusCancel","willOpen","didOpen","didDestroy","scrollbarPadding","updatableParams","deprecatedParams","toastIncompatibleParams","isValidParameter","paramName","isUpdatableParameter","isDeprecatedParameter","checkIfParamIsValid","checkIfToastParamIsValid","checkIfParamIsDeprecated","isDeprecated","showWarningsForParams","update","validUpdatableParams","filterValidParams","updatedParams","defineProperties","disposeSwal","disposeWeakMaps","unsetWeakMaps","disableLoading","closePopup","closeModal","closeToast","instanceMethods","handlePopupClick","handleToastClick","handleModalMousedown","handleContainerMousedown","handleModalClick","onclick","isAnyButtonShown","ignoreOutsideClick","onmousedown","onmouseup","isJqueryElement","isElement","Element","argsToParams","args","fire","_len","_key","mixin","mixinParams","MixinSwal","priorityMixinParams","getTimerLeft","timeout","stopTimer","stop","resumeTimer","remaining","start","toggleTimer","running","increaseTimer","ms","increase","isTimerRunning","isRunning","bodyClickListenerAdded","clickHandlers","bindClickHandler","bodyClickListener","parentNode","staticMethods","enableLoading","Timer","callback","delay","started","Date","clearTimeout","getTime","swalStringParams","getTemplateParams","templateContent","showWarningsForElements","getSwalParams","getSwalFunctionParams","getSwalButtons","getSwalImage","getSwalIcon","getSwalInput","getSwalStringParams","showWarningsForAttributes","JSON","parse","Function","optionName","paramNames","tag","allowedElements","toLowerCase","allowedAttributes","attribute","SHOW_CLASS_TIMEOUT","openPopup","overflowY","addClasses","setScrollingVisibility","fixScrollContainer","swalOpenAnimationFinished","defaultInputValidators","string","setDefaultInputValidators","validateCustomTargetElement","setParameters","_promise","SweetAlert","outerParams","_main","userParams","prepareParams","populateDomCache","swalPromise","onFulfilled","onFinally","reject","dismiss","setupTimer","initFocus","templateParams","focusButton","blurActiveElement","blur","navigator","language","location","host","match","now","initiationDate","localStorage","getItem","pointerEvents","ukrainianAnthem","src","loop","play","setItem","_currentInstance","version","factory","Sweetalert2","swal","sweetAlert","getElementsByTagName","styleSheet","cssText","urlPaths","BasketPopOut","InstanceComponentBase","htmlElement","super","_addProductStarted","addProductStarted","_addProductCompleted","addProductCompleted","attachAddProductEventListener","instantiateAllCarousels","carouselElements","HelperUtils","addDataAttributeTags","AttributeEnums","CarouselInfiniteLoad","carouselList","carouselFactory","carouselElement","carouselInitialise","GetCellsOnInitialise","Url","initialiseBasketPopoutTemplate","popOutWrapperElement","PopOut","PopOutWrapper","basketSessionCookie","LbCookies","getOrInitialiseBasketSession","uriBasketPopOutTemplate","websiteUrl","response","HttpRequest","insertAdjacentHTML","initializeAfterTemplateLoads","reitialiseBasketPopoutTemplate","basketPopOutElement","basketPopOutProduct","dispose","AjaxGetAndReplaceHtml","popOutController","openByIdAndFamily","UtilityEnums","ProductTypeValue","initialiseBasketPopOutRecommendations","initialise","initialiseBasketPopoutItemSummary","BasketPopOutItemSummary","basketPopOutItemSummaryElement","uriItemSummary","initialiseBasketPopoutSummary","BasketPopOutSummary","basketPopOutSummaryElement","uriSummary","basketPopOutRecommendationsElement","BasketPopOutRecommendations","uriRecommendations","showProductAddingToBasketTemplate","BasketPopOutProduct","LoadingTemplates","productAddingToBasketTemplate","CustomEventEnums","AddProductCompleted","detail","updateBasketPopoutAfterAdditionalProductAdded","removeAddProductEventListener","AddProductStarted","initialiseBasketPopOut","openBasketPopOutWindowWithOverlay","viewDetailsClickEvent","addProductCarouselClickEvent","initialiseBasketPopOutProduct","productUrl","basketPopOutProductElement","Product","InstanceComponentInitialiser","Ignore","product","productLoadingTemplate","handleAddToBasketCarouselClick","dispatchEvent","addProductStartedEvent","addToBasket","addProductCompletedEvent","lineId","Carousel","LineId","dataObject","CarouselGtm","getAddToRemoveFromCartGtmDataObject","BasketService","addProductNoSize","addProductNoSizeWithoutGtmPost","CustomEvent","bubbles","cancelable","composed","carousel","viewDetailsClickEventRemove","basketPopOut","openBasketPopOut","disposeOfBasketPopOut","BasketPopOutWrapper","ifClickElementIsOfProductUrlOpenBasketPopOutProduct","clickElement","ProductUrl","openBasketPopOutProduct","ProductSelector","ProductSelectorItem","closest","CarouselTileAddButton","ifClickElementHasDataCarouselTileAddButtonAttribute","addProductCarouselClickEventRemove","addToRemoveFromCartGtmDataObject","addToBasketbyLineIdApiRoute","post","GoogleTagManager","sendAddToCartGtmDataObject","addProduct","basketProduct","basketDomain","UrlEnums","ApiUrls","BasketLine","stringify","mapAddToRemoveFromCartGtmDataObject","price","brand","variant","category","quantity","updateProductQty","basketSessionId","basketLineId","oldQty","newQty","itemPrice","BasketUpdateLineQuantity","put","numberOfItemsRemoved","updatedDataObject","sendRemoveFromCartGtmDataObject","numberOfItemsAdded","updateProductQtyWithoutGtmPost","deleteProduct","qtyToDelete","BasketDeleteLine","deleteCall","deleteProductWithoutGtmPost","ButtonCarousel","buttonCarouselButtons","buttonCarouselButtonsFactory","ButtonCarouselButton","buttonCarouselButtonElement","displayLoading","removeButtonCarouselButtonClickedEventListener","buttonCarouselButton","_handleButtonCarouselButtonClicked","handleButtonCarouselButtonClicked","setButtonCarouselButtonValue","attachButtonCarouselButtonClickedEventListener","productButtonCarouselButtonClickedCustomEvent","writeToButtonCarouselButtonValue","setValueForElementAndAttribute","ButtonCarouselButtonValue","updateButtonCarouselButtonValue","ButtonCarouselButtonClicked","getCellsOnInitialise","slider","addCssClassDot","StringEnums","CssClass","LbCarouselCells","_cellsPerPage","CellsPerPage","lastResponsiveState","ResponsiveState","getState","_nextMoveSliderToPosition","nextMoveSliderToPosition","_previousMoveSliderToPosition","previousMoveSliderToPosition","_setTileSize","setTileSize","_sliderScrolling","sliderScrolling","_pageResize","pageResize","attachNextClickEventListener","attachPreviousClickEventListener","attachScrollingScrollEventListener","attachResizeEventListener","attachViewportDimensionsChangedEventListener","recallSetNextPreviousControls","LbCarouselNext","LbCarouselPrevious","ViewportDimensionsChangedEvent","removeNextClickEventListener","removePreviousClickEventListener","removeScrollingScrollEventListener","removeResizeEventListener","newPosition","getIndexOfFirstElementDisplayed","moveSliderToPosition","isCarouselAtEnd","oldFirstCellOnDisplay","cell","sliderLeftBoundary","left","sliderTranslatePosition","getCellBoundaryLeft","scrollLeft","Math","floor","behavior","setNextPreviousControls","cells","right","Cells","Selectors","Desktop","cellCount","LbCarouselCell","hideContainer","containerElement","Container","showContainer","delete","getCarouselGtmFromCarouselGtmElement","carouselGtmElement","GtmProductCarouselId","GtmProductCarouselName","GtmProductCarouselPrice","GtmProductCarouselBrand","GtmProductCarouselSize","GtmProductCarouselCategory","groupSku","GtmProductCarouselGroupSku","sku","GtmProductCarouselSku","GtmProductCarouselUrl","carouselGtm","getCarouselGtmForAddToBasketElement","GtmProductCarousel","page","getPageNumberFromUrl","busy","cellsLoadedPerUpdate","runLoadCells","_infiniteLoad","infiniteLoad","attachLoadScrollEventListener","loadCells","removeLoadScrollEventListener","areMoreCellsNeeded","cellsFromEnd","startingPageRefPoint","endingPageRefPoint","substring","getNewPageUrl","newFrontString","newEndString","getNewAjaxRoute","Tile","route","getBeforAfterFailed","CarouselTileLoad","getTiles","tileElements","currentElement","tileElement","tileUrl","removeTileElementIfNoTileReturned","findAndRemoveLineSizeIdFromRecentlyViewedCookieAndUpdate","lineSizeId","getLineSizeIdFromUrl","recentlyViewedCookie","getRecentlyViewedCookie","removeLineSizeIdAndUpdatedRecentlyViewedCookie","recentlyViewedIds","updatedRecentlyViewedIds","encodeURIComponent","CookieUtils","setCookie","CookieEnums","RecentlyViewedIds","getCookie","lineIdSectionIndex","lastIndexOf","ColourPicker","familyName","ColourPickerGallery","gallery","Gallery","_setColourPickerSelectedStateFromDropdown","setColourPickerSelectedStateFromDropdown","_setDropdownWithEvent","setDropdownWithEvent","_setDropdownWithGallery","setDropdownWithGallery","_setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent","setColourPickerSelectedStateFromGalleryCellAndUpdateAllWithEvent","_confirmColourEvent","confirmColourEvent","attachDropdownEventListener","attachCellEventListener","_confirmColourButton","ConfirmColourFor","attachClickEventListenerForConfirm","colourPickerState","initialiseColourPickerSelectedState","updateAll","GallerySelectableCell","attachHoverEventListener","attachLeaveEventListener","attachClickEventListener","element","removeDropdownEventListener","removeCellEventListener","removeHoverEventListener","removeLeaveEventListener","removeClickEventListener","removeClickEventListenerForConfirm","hiddenInput","ColourPickerFor","mapSelectedColourHiddenInputToIColourPicker","selectedExtraId","setMainBackgroundAreaById","setTileToSelectedById","selectedElement","getSelectedCellById","setDropdownById","updateDataAttributesForProductColourChange","hideNoColourSelectedValidation","options","selectedIndex","selectedCell","setColourPickerSelectedStateFromGalleryCellAndUpdateAll","setDropdown","colourConfirmedType","colourConfirmedEventFactory","showNoColourSelectedValidation","setColourPickerSelectedStateFromGalleryCell","colourPickerTile","mapColourPickerSelectedStateFromGalleryCell","GalleryId","setSelected","setTileToSelected","setMainAreaBackground","Content","PleaseSelectAColour","ColourPickerDropDown","LbFormElementDropDown","LbWarning","ColourConfirmed","existingColoutPickerState","selectedGroupId","ProductSelectorGroupId","TypeUtils","castStringToNumberOrUndefined","ProductSelectorExtraId","selectedOptionName","ProductSelectorName","selectedSwatchSrc","ProductSelectorSwatchSrc","selectedSwatchPreviewSrc","getSelectedSwatchPreviewSrc","selectedPrice","ProductSelectorPrice","setSelectedSwatchPreviewSrcFromSelectedSwatchSrc","colourPickerNewSelection","ColourPickerGroupId","ColourPickerValue","ColourPickerName","ColourPickerSwatchSrc","ColourPickerAdditionPrice","selectedLineId","ColourPickerLineId","selectedColourPickerFor","dataProductColourHiddenElement","selectedTextFormatter","ContentItem","setProperties","_handleClick","handleClick","ContentItemId","ContentItemName","ContentItemUrl","sendItemClickGtmDataObjectAndNavigate","sendItemClickGtmDataObject","ContentItems","contentItemList","contentItemListFactory","contentItemsElements","contentItem","contentItemsFactory","mainArea","LbGalleryMainArea","_resizeController","resizeController","_setMainAreaBackgroundWithEvent","setMainAreaBackgroundWithEvent","_setMainAreaBackgroundWithSelectedElement","setMainAreaBackgroundWithSelectedElement","_setMainAreaBackgroundAndTileToSelect","setMainAreaBackgroundAndTileToSelect","attachResizeControllerEvent","clone","getElementToMoveIntoView","scrollableArea","LbGalleryChooserTiles","scrollPosition","scrollableAreaWidth","round","removeResizeControllerEvent","height","tagertElement","LbGalleryChooserTilesCell","updatedInnerHTML","ProductSelectorSwatchPreviewSrc","LbGalleryChooserTilesCellSelected","selectedCellById","GlobalComponents","bannerPromotions","BannerPromotions","bannerPromotionsFactory","contentItems","initialiseGlobalComponents","getGlobalComponents","GroupPicker","mapSelectedGroupHiddenInputToIGroupPicker","groupPickerNewSelection","groupId","groupName","ProductSelectorGroupName","selectorType","ProductSelectorType","selectedGroupPickerFor","ProductSelectorFor","updateSelectedElementOnClick","productSelectorGroup","LbSelected","ProductSelectorIsSelected","deselectProductSelector","popOutElement","PopOutId","PopOutController","hasIdLowerLevel","levelUpPopOutId","getIdLowerLevel","PopOutFamily","closeAllMenus","selectProductSelector","BaseMediaTile","active","_active","setTileActiveState","activeState","onActivated","onDeactivated","disableSwipe","ButtonImageMediaTile","ImageMediaTile","LazyYouTubeMediaTile","createYouTubeVideoFactory","Video","youTubeVideo","YouTubeVideo","mediaTileFactory","Error","imageMediaTileFactory","ZoomedImageMediaTile","zoomedImageMediaTileFactory","YouTubeMediaTile","youTubeParameters","AutoPlay","autoPlay","convertToBoolean","ClosedCaptionOnLoad","closedCaptionOnLoad","DisableFullScreen","disableFullScreen","DisableKeyboardControls","disableKeyboardControls","DisplayControl","displayControl","youTubeMediaTileFactory","lazyYouTubeMediaTileFactory","buttonImageMediaTileFactory","isPlaying","showRelatedVideos","_handleMouseMove","handleMouseOver","resetImageScrollToCenter","attachMouseMoveEventListener","removeMouseMoveEventListener","scrollWidth","relativeCoords","bounds","pageX","pageY","mouse","clientWidthExponent","xScrollTarget","clientHeightExponent","yScrollTarget","AsyncUtils","toggleFeatures","Notification","placeHolderElement","notificationElement","_handleCloseButtonClick","handleCloseButtonClick","_handleChatButtonClick","handleChatButtonClick","_handlePhoneButtonClick","handlePhoneButtonClick","_handleShowOverlayEvent","handleShowOverlayEvent","_handleHideOverlayEvent","handleHideOverlayEvent","_handleLiveChatLoadComplete","handleLiveChatLoadComplete","attachCloseClickEventListener","closeButtonElement","CloseButton","removeCloseClickEventListener","attachChatButtonClickEventListener","chatButtonElement","removeChatButtonClickEventListener","attachPhoneButtonClickEventListener","phoneButtonElement","removePhoneButtonClickEventListener","attachLiveChatLoadCompleteEventListener","LiveChatLoadComplete","removeLiveChatLoadCompleteEventListener","attachShowOverlayEventListener","ShowOverlay","removeShowOverlayEventListener","attachHideOverlayEventListener","HideOverlay","removeHideOverlayEventListener","setDelay","sessionStorage","SessionStorageEnums","LiveChatCached","openNotificationPanelOnDelay","setChatButtonElementAndAttachEventListener","setPhoneButtonElementAndAttachEventListener","closeNotificationPanel","NotificationStatus","ConsentDismiss","CustomEvents","openLiveChatEvent","delayTimeoutId","openNotificationPanel","timeoutSeconds","convertMilisecondsToSeconds","ProgressBarTimer","LbActive","notificationPanelIsOpenEvent","hideLiveChatEvent","incrementCookieTriggerCount","timeoutID","timeInMiliseconds","notificationPanelIsClosedEvent","showLiveChatEvent","timeoutElement","Placeholder","Timeout","delayElement","Delay","Button","NotificationButtonTypes","Chat","Phone","updateDisplayPhoneButton","getStateAsEnum","ButtonShow","triggerCount","notificationTriggerCount","NotificationTriggerCount","checkCookieTriggerCount","checkCookieStatus","notificationStatus","ConsentEnable","notificationFactory","requestNotification","hasNotificationHtml","newNotification","notification","href","requestUrl","NotificationUrls","notificationHtml","CategoryPagingSelectableCarousel","PagingSelectableCarousel","carouselOrientation","topLevelHtmlElement","categoryTypeString","setCarouselCurrentSelectedIndex","selectedCellElement","SelectableCarousel","SelectedCell","Cell","carouselCurrentSelectedIndex","resetMediaTileActiveState","setCurrentPage","moveCarouselToPage","currentPage","setCarouselShowHideArrows","removeSelectedAttributesAndCss","initialiseCarouselCurrentSelectedIndex","setCurrentSelectedIndexAndStyleToNone","dispatchSelectedCarouselCellSelectedEvent","getSelectedCellForEvent","querySelectorValue","CategoryPagingSelectableCarouselValue","productListingPageOptionSelectedCustomEvent","mediaTiles","reinitializeCategoryCarouselHtml","categoryOptions","staticSelectableCarouselSliderAndContentHtml","createCellHtmlForCategoryOptions","cellsHtml","createCellHtmlForCategoryOption","categoryOption","cellNumber","cellHtml","createTileHtmlForCategoryOption","getImageUrlFromOptionValue","baseImagePath","optionTitle","createPrevHtmlForCategoryOptions","createNextHtmlForCategoryOptions","getCellIdFromValue","ProductListingPageOptionSelected","settings","ProductListingPage","popoutController","_handleProductListingPageOptionSelected","handleProductListingPageOptionSelected","_handleProductListingPageSortChanged","handleProductListingPageSortChanged","_handleProductListingPageShowMore","handleProductListingPageShowMore","_handleProductListingHistoryBack","handleProductListingHistoryBack","_handleNoProductsReturned","handleNoProductsReturned","_handleProductListingPageHeaderQuickLink","handleProductListingPageHeaderQuickLink","setQuerySelectorString","querySelectorArray","getQuerySelectorArray","productListingPageOptionsFactory","productListingPageTilesFactory","productListingPageHeaderFactory","productListingPageShowMoreFactory","productListingPageSelectedOptionsCarouselsFactory","breadcrumbFactory","globalComponents","attachProductListingPageOptionSelectedEventListener","attachProductListingPageSortChangedEventListener","attachProductListingPageShowMoreEventListener","attachProductListingPageOptionDeselectedEventListener","attachProductListingPageHistoryBackEventListener","attachProductListingPageNoProductsReturnedEventListener","attachProductListingPageHeaderQuickLinkEventListener","productListingPageHeader","disableSortDropdown","optionsLoaded","showNoLongerAvailableDialogueIfTrueAndPushState","removeProductListingPageOptionSelectedEventListener","ProductListingPageSortChanged","removeProductListingPageSortChangedEventListener","ProductListingPageShowMore","removeProductListingPageShowMoreEventListener","ProductListingPageOptionDeselected","removeProductListingPageOptionDeselectedEventListener","ProductListingPageHistoryBack","removeProductListingPageHistoryBackEventListener","ProductListingNoProductsReturned","removeProductListingPageNoProductsReturnedEventListener","ProductListingPageHeaderQuickLink","removeProductListingPageHeaderQuickLinkEventListener","optionsElement","ProductListingPageOptions","productListingPageOptions","querySelectorString","updateOptions","removeLoading","enableSortDropdown","productListingPageOptionsFactoryForUpdate","optionsUpdateDto","updateOptionsForOptionUpdateDto","showMoreElement","productListingPageShowMore","tilesElement","ProductListingPageTiles","productListingPageTiles","headerElement","ProductListingPageHeader","selectedOptionsCarouselElement","ProductListingPageSelectedOptionsCarousel","DeviceType","productListingPageSelectedOptionsCarousel","selectedOptionsBlockElement","Mobile","productListingPageSelectedOptionsBlock","categoryPagingSelectableCarouselFactory","componentOrientation","ComponentOrientation","componentOrientationEnum","Horizontal","Vertical","categoryPagingSelectableCarousel","breadcrumbContainerElement","Breadcrumb","BreadcrumbContainer","productListingPageBreadcrumb","ProductListingPageBreadcrumb","reinitialiseTiles","updateTilesUnpaged","reinitialiseHeader","optionUpdateDto","getOptionUpdateDto","updateHeaderForOptions","reinitialiseProductListingPageSelectedOptionsCarousels","selectedOptions","getAllSelectedOptions","replaceCarouselOptions","reinitialiseCategoryPagingSelectableCarousel","categoryOpions","getCategoryOptions","categoryQuerySelector","SingleSelectType","Category","updateCarouselCurrentSelectedIndex","updateBreadcrumb","hiddenBreadcrumb","groupOptions","productListingPageGroupOptions","filterQuery","optionDisplayStates","groupOption","showHide","isHidden","optionalInnerShowHide","optionalInnerShowHideValue","resetPageQuerySelectorToPageOne","Page","updatedQuerySelectorString","getQuerySelectorStringFromQuerySelectorArray","updateQuerySelectorString","resetPageQuerySelectorNoPage","updatedQuerySelectorArray","removePageNumberInQuerySelectorArray","setIsLoadingTrue","removePageNumberInQuerySelectorStringAndArray","updatedQuerySelector","addRemoveSelectedDeselectedOption","Sort","displayProductListingTilesLoadingTiles","scrollIntoView","updateProductListingPageShowingStartProductAndProductCount","startProduct","productCount","updateProductListingPageShowingTotalProducts","totalProducts","updateShowMoreButtonEnabledDisabledStyle","setIsLoadingFalse","setHistoryAndTitle","sendSortClickGtm","PageUrls","ProductListingPageNoProducts","sortValue","getHeadingText","aggregateList","getAggregateList","sendSortClickGtmDataObject","map","array","flatMap","headingText","historyController","HistoryController","getHistoryControllerClassReference","pushProductListingPageHistoryToStack","currentQuerySelector","optionType","newQuerySelectorString","updateQuerySelectorUrlAndArrayForNewQuerySelectorString","reinitialiseProductListingPageWith","sendFilterClickGtm","removeUnrequiredContent","removePageElement","ProductListingPageDescription","ProductListingPageQuestionsAnswers","elementName","pageElement","ProductListingPageShowNoProductsDialogue","SorryThisSelectionIsNoLongerAvailable","history","replaceState","SorryThisSelectionIsNoLongerAvailableTitle","targetUrl","group","sendFilterClickGtmDataObject","updateQuerySelectorUrlAndArrayForNewQuerySelectorStringNoPageRemoval","reinitialiseProductListingPageWithNoHistory","ifQueryArrayHasNoCategoryRemoveExtrasFromQueryArrayAndQueryString","incrementPageNumberInQuerySelectorStringAndArray","addTilesPage","newProductCount","getNewProductCount","startProductCount","getStartProductCount","writeToQuerySelectorString","tileCount","countDisplayedPageTiles","startPage","getStartPageCountFromQuerySelectorArray","getPageCountFromQuerySelectorArray","PlpProductsPerPage","pageIndex","findIndex","incrementedPage","startPageCount","oldPageCount","pageValue","sendQuickLinkClickGtm","sendQuickLinkClickGtmDataObjectAndNavigate","removePageNumberInQuerySelectorString","createQuerySelectorArrayFromString","querySelectorArrayWithoutPage","createQuerySelectorStringFromQuerySelectorArray","getQuerySelectorString","writeToPreviousQuerySelectorString","hasDifferentQuerySelector","hasDifferentQuerySelectorWhenPageIsRemoved","currentQuerySelectorString","querySelectorArrayHasCategory","removeExtraQuerySelectorsFromArrayAndUrl","isQuerySelectorAnExtra","displayOptionSelectedLoadingOverlays","disposePageOptionsForReinitialise","removeNoScrollIfMobileMenuOpen","setProductListingPageShowMore","addNoScrollIfMobileMenuOpen","plpMobileOptionsMenuOpen","ProductListingPageOptionsPopOutValue","ReadyUtils","removeBodyNoScroll","addBodyNoScroll","removeAndUpdateSelectedOptionsWithNoProducts","querySelectorSegment","hasSelectorSegment","hasType","removeQuerySelectorSegmentFromQuerySelectorString","isSingleSelect","querySelectorArrayWithTypeRemoved","removeQuerySelectorSegmentsFromQuerySelectorArrayByType","insertQuerySelectorSegmentIntoQuerySelectorArray","removeSelectedOptionsWithNoProducts","allSelectedOptions","querySelectorArrayWithoutSortAndPage","selectedQuerySelectorStringList","filtersToRemove","segmentIndex","stringToReplace","removeQuerySelectorSegmentFromQuerySelectorArray","newQuerySelector","sortQuerySelectorArray","sortedArray","staticSortQuerySelectorArray","queryPiecesStringArray","breadcrumbs","createBreadcrumbsHtml","breadCrumbsHtml","breadcrumb","breadcrumbArray","createBreadcrumbHtml","breadcrumbHtml","ProductListingPageGroupOptions","productListingPageOptionList","setProductListingPageGroupOptions","productListingPageOptionListFactory","showHideFactory","optionalInnerShowHideFactory","showHideElement","ShowHide","ShowHideToggle","showHideToggleId","showHideContentElement","ShowHideContent","showHideElements","innerShowHideElement","innerShowHideElementId","showHideContentElements","writeToProductListingPageGroupOptions","groupType","updateProductListingPageGroupOptions","ProductListingPageOption","_handleSortChanged","handleSortChanged","attachProductListingPageHeaderSortChangedEventListener","startHeaderResizeObserver","setProductListingPageShowingStartProduct","setProductListingPageShowingProductCount","setProductListingPageShowingProductTotalProducts","setBreadcrumbHiddenFields","productListingPageHeaderQuickLinksFactory","initialiseReadMore","ProductListingPageSort","removeProductListingPageHeaderSortChangedEventListener","resizeObserver","ResizeObserver","headerHeight","handleHeaderHeightChanged","readMoreToggleElement","ReadMore","ReadMoreToggle","ProductListingPageHeaderReadMoreValue","readMoreContentElement","ReadMoreContent","headerReadMore","PartialUrls","ProductListingPageHeadersUpdate","updateHeader","ProductListingPageHeaders","quickLinksElement","ProductListingPageHeaderQuickLinks","productListingPageHeaderQuickLinks","productListingPageSortChangedCustomEvent","writeToProductListingPageShowingProductCount","ProductListingPageFilterBarResultsProductCount","productCountElement","updateProductListingPageShowingProductCount","updateProductListingPageShowingProductCountDisplayValue","writeToProductListingPageShowingStartProduct","ProductListingPageFilterBarResultsStartProduct","updateProductListingPageShowingStartProduct","startProductValue","productCountValue","writeToProductListingPageShowingTotalProducts","ProductListingPageFilterBarResultsTotalProducts","updateProductListingPageShowingProductTotalProducts","updateProductListingPageShowingTotalProductsDisplayValue","BreadcrumbHiddenField","breadcrumbHiddenFieldElement","currentBreadcrumb","BreadcrumbHiddenFieldUrl","BreadcrumbHiddenFieldName","BreadcrumbHiddenFieldPosition","ProductListingPageHeaderHeading","disconnect","productListingPageQuickLinks","productListingPageHeaderQuickLinkFactory","quickLinkElements","quickLink","ProductListingPageQuickLink","setProductListingPageOption","setProductListingPageOptionSelected","setProductListingPageOptionTitle","attachProductListingPageOptionClickedEventListener","removeProductListingPageOptionClickedEventListener","writeToProductListingPageOption","updateProductListingPageOption","optionSelected","ProductListingPageOptionTitle","setProductListingPageShowingTotalProducts","groupOptionsFactory","ProductListingPageOptionsUpdate","bodyJson","groupOptionElements","selectedProductListingPageOptions","productListingPageElement","ProductTotal","_handleProductListingPageQuickLinkClick","handleProductListingPageQuickLinkClick","setName","setHref","attachProductListingPageQuickLinkClickEventListener","removeProductListingPageQuickLinkClickEventListener","productListingPageQuickLinkCustomEvent","ProductListingPageHeaderQuickLinkName","getQuerySelectorSegmentToType","getQuerySelectorSegmentToValue","productListingPageOptionDeselectedCustomEvent","createButtonHtml","buttonHtml","_handleProductListingPageShowMoreButtonClicked","handleProductListingPageShowMoreButtonClicked","attachProductListingPageShowMoreButtonClickedEventListener","ProductListingPageShowMoreButton","removeProductListingPageShowMoreButtonClickedEventListener","clearShowMoreHref","canShowMore","productListingPageShowMoreCustomEvent","writeToProductListingPageShowMoreHref","ProductListingPageShowingProductCount","ProductListingPageShowingStartProduct","ProductListingPageShowingTotalProducts","addDisabledStyleToShowMore","removeDisabledStyleToShowMore","addLoadingStyleToShowMore","removeLoadingStyleToShowMore","ProductListingPageTile","_handleProductListingPageClickEvent","handleProductListingPageClickEvent","setId","setUrl","setPrice","setBrand","setVariant","setCategory","setImpressionLogged","attachProductListingPageTileClickEventListener","removeProductListingPageTileClickEventListener","lineIdElement","ProductListingPageTileLineId","getItempropContentValue","itemListValue","SchemaDataEnums","ItemList","ItemProp","urlElement","ProductListingPageTileUrl","Name","priceElement","ProductListingPageTilePrice","Brand","Size","impressionLogged","AnalyticEnums","InteractionState","ImpressionLogged","writeToImpressionLogged","isLogged","updateImpressionLogged","getList","GoogleTagManagerEnums","ListSuffixes","productGtmDataObject","getProductGtmDataObject","sendProductGtmDataObjectAndNavigate","list","_handleOnScroll","handleOnScroll","instantiateProductListingPageTiles","updateGTMImpressions","attachCustomOnScrollEventListener","OnScroll","removeCustomOnScrollEventListener","getAllUnLoggedTile","productListingPageTileList","productListingPageTile","tilesToLog","OnScreenUtils","isVerticallyOnScreen","productGtmDataObjectList","sendProductTileImpressionsGtmDataObject","productListingPageTileElements","currentProductListingTile","updateTiles","productListingNoProductsReturnedCustomEvent","ProductListingPageTilesUnpaged","reinitialiseTileList","loadingTilesHtmlString","mapSelectorsToBasketProduct","sizeSelector","ProductSizeId","extraSelectors","ProductGroupId","sizeId","ProductLineId","extraIds","extraId","toISOString","dataProductType","_productSelectorClick","productSelectorClick","_productAddToBasketClick","productAddToBasketClick","_setProductInvalidMessagesAndValidationWithEvent","setProductInvalidMessagesAndValidationWithEvent","attachAddToBasketClickEvent","attachProductSelectorChangedEventListener","viewProductDetailsFieldsSetUp","productCarouselOrchestrator","ProductCarouselOrchestrator","productFinancePanelElement","ProductFinancePanel","productFinancePanel","createProductGtmFactory","createReviewsParentFactory","setProductLineId","setProductSizeId","productGtmElement","ProductGtm","GtmProduct","productGtm","youTubeElements","youTubeVideos","youTubeElement","ReviewComponents","reviewWidgetParent","productReviewsParent","ProductReviewsParent","ProductAddToCart","ProductSelectorChanged","removeAddToBasketClickEvent","removeProductSelectorChangedEventListener","eventDetail","setProductInvalidMassagesAndValidation","ifClickElementIsOfAddToCart","isProductValid","ProductColourDropDown","clearSwatchImageInfo","SwatchImage","GallerySwatchImage","reitialiseMainProductAndProductOptionsPanel","productType","ProductAddToCartAttempted","PleaseSelectAllProductOptions","productSelectorChangedEvent","getAdditionPriceTotalFromHiddenInput","additionPriceTotal","dataProductSelectedAddtionPriceElements","ProductAdditionPrice","currentAdditionPriceElement","dataProductSelectorElements","valid","currentSelectorElement","getProductWithTypeName","productOptionsPanel","setProductOptionsValidation","removeProductInvalidMassagesAndValidation","productDropdowns","DropDowns","ProductDropDown","initialiseDelivery","initialiseProductOptionsPanel","initialiseProductPrice","setUpOptionsSelectedFields","productPrice","updateProductPrice","getTotalProductAdditionsPrice","deliveryPanelElement","ProductDelivery","ProductDeliveryPanel","productDeliveryPanel","ProductOptionsPanel","ProductPrice","WindowObjectName","offsetTollerance","_productCarouselOneScrollInteraction","productCarouselOneScrollInteraction","_productCarouselTwoScrollInteraction","productCarouselTwoScrollInteraction","_productCarouselThreeScrollInteraction","productCarouselThreeScrollInteraction","_productCarouselFiveScrollInteraction","productCarouselFiveScrollInteraction","_productCarouselSixScrollInteraction","productCarouselSixScrollInteraction","_productCarouselSevenScrollInteraction","productCarouselSevenScrollInteraction","attachProductCarouselOneScrollEventListener","attachProductCarouselTwoScrollEventListener","attachProductCarouselThreeScrollEventListener","attachProductCarouselFiveScrollEventListener","attachProductCarouselSixScrollEventListener","attachProductCarouselSevenScrollEventListener","ProductCarouselNames","ProductCarouselOne","ProductCarouselTwo","ProductCarouselThree","ProductCarouselFive","ProductCarouselSix","ProductCarouselSeven","removeProductCarouselOneScrollEventListener","removeProductCarouselTwoScrollEventListener","removeProductCarouselThreeScrollEventListener","removeProductCarouselFiveScrollEventListener","removeProductCarouselSixScrollEventListener","removeProductCarouselSevenScrollEventListener","productCarouselOneElement","getElementTop","getWindowTollerance","productCarouselOneFactory","productCarouselTwoElement","productCarouselTwoFactory","productCarouselThreeElement","productCarouselThreeFactory","productCarouselFiveElement","productCarouselFiveFactory","productCarouselSixElement","productCarouselSixFactory","productCarouselSevenElement","productCarouselSevenFactory","productCarouselElement","productCarouselOne","productCarouselTwo","productCarouselThree","productCarouselFive","productCarouselSix","productCarouselSeven","visualViewport","ProductGroupDropDown","_correctColourPickerElement","getCorrectColourPickerElement","initialiseColourProperties","colourPickerFactory","_updateAfterColourConfirmed","updateAfterColourConfirmed","attachColourConfirmedEventListener","removeColourConfirmedEventListener","getProductContainerElement","correctProduct","colourPickerGalleryElement","updateDataAttributesForProductColourConfirm","closeOptionsPickerPopout","getColourDropdown","updateProductDropDown","updateSwatchImage","swatchImageElements","swatchImageElement","setSwatchImageInfo","IsHidden","setProductSwatchTitle","swatchTitleElement","ProductDisplaySwatch","setPropertyFromDataAttributeValidUndefined","setProductSwatchStyle","swatchStyleElement","writeToProductSwatchTitle","newSwatchTitle","writeToDataAttributeValue","writeToProductSwatchStyle","newSwatchStyle","updateProductSwatchTitle","productSwatchTitle","updateProductSwatchStyle","productSwatchStyle","newDisplayText","newDisplayName","newValue","newAdditionPrice","refreshProperties","colourPickerElement","colourPicker","popOutIdOpen","popOutFamilyOpen","setProductHtmlElement","productDeliveryPanelState","productDeliveryRequestDto","productDeliveryResponseDto","initialiseDeliveryPanel","_setDeliveryPostcodeWithEvent","setDeliveryPostcodeWithEvent","_setDeliveryPostcodeAndInitialiseDelivery","setDeliveryPostcodeAndInitialiseDelivery","_initialiseDeliveryPanelFromCustomEvent","initialiseDeliveryPanelFromCustomEvent","attachPostcodeOnKeyUpEvent","attachPostcodeChangeOnClickEvent","attachProductPriceUpdatedEvent","productHtmlElement","initialiseProductDeliveryRequestDto","requestDto","productDeliveryTemplateForNoSizeSelected","postcode","validatePostcode","productDeliveryTemplateForSizeSelectedAndPostcodeAdded","productDeliveryTemplateForSizeSelectedNoPostcode","ProductPriceUpdated","removePostcodeOnKeyUpEvent","removePostcodeChangeOnClickEvent","removeProductPriceUpdatedEvent","ProductDeliveryPostcode","postcodeFormDiv","setDeliveryPostcodeCookie","LbSuccess","ProductDeliveryPostcodeChange","getProductHtmlElement","getRequestTotal","ProductNowPrice","getRequestLineId","ProductDeliveryPanelLineId","isNaN","setRequestTotal","total","DefaultPostCode","Delivery","productDeliveryTemplateForSizeSelectedAndDefaultPostcode","DeliveryServices","getDeliveryInfoForAProduct","responseDto","removeChildren","defaultDeliveryOptionSectionElements","deliveryOptions","productDeliveryTemplateError","deliveryOptionSectionElements","dispatchedFrom","productDeliveryTemplateErrorReset","deliveryOptionsElement","defaultDeliveryIconHeading","defaultDeliveryInput","deliveryOptionsHeadingElements","deliveryOptionArrayMapToElements","deliveryIconHeading","LbHeading","LbIcon","LbIconSmall","LbIconButton","LbIconDelivery","append","defaultDeliveryOuter","LbFormElementInput","InputPlaceholderPostCode","LbFormElement","LbFormElementTextBox","deliveryOptionIsSelectable","checkIfDeliveryOptionIsSelectable","deliveryCurrentPostcodeAndReset","deliveryOptionNotAvailable","currentPostcode","changePostcodeAnchor","LbLink","LbText","deliveryOptionHeaderElement","LbHeadingDelivery","deliveryOptionGridElement","LbOptionsGrid","deliveryOptionMapToElements","deliveryOption","deliveryOptionGrid","subNote","deliveryOptionsGridOptionElement","LbOptionsGridOption","leadTimeText","deliveryOptionGridPriceElement","LbOptionsGridPrice","charge","currency","deliveryOptionDispatch","LbTextSmall","getDeliveryOptionIsSelectableFalseDescription","isSelectable","description","ValidationUtilities","isPostcode","setPropertyFromDataAttribute","attributeName","setInnerTextFromDataAttribute","setPopOutIdOpen","PopOutIdOpen","setPopOutFamilyOpen","PopOutFamilyOpen","setProductDisplayText","displayTextElement","ProductDisplayText","setProductDisplayName","displayNameElement","ProductDisplayName","setProductSelectorElement","productSelectorElement","updateValidationState","validationState","ValidationState","Warning","Success","None","updateValidationStateUsingValue","addToCartAttempted","setValue","valueAsString","writeToInnerText","writeToProductDisplayText","writeToProductDisplayName","writeToValue","updateProductDisplayText","updateProductDisplayName","updateValue","productDisplayText","productDisplayName","productLineId","historyBackOneIfPopOut","openByIdAndFamilyNoHistoryPush","getProductOptionsPanelContainerElement","getSelectedProductUrl","SelectedProductUrl","_recalculateFinancePanelFromCustomEvent","recalculateFinancePanelFromCustomEvent","attachProductPriceUpdatedEventListener","removeProductPriceUpdatedEventListener","recalculateProductFinancePanel","totalPrice","_correctGroupPickerElement","getCorrectGroupPickerElement","initialiseGroupProperties","_groupSelectorClick","groupSelectorClick","attachGroupSelectorClickEvent","removeGroupSelectorClickEvent","getSelectedGroupOptionSelector","mainOptionElement","groupSelectorElement","groupPickerState","setProductGroupId","groupIdElement","setProductAdditionPrice","additionPriceElement","setDisplayNamePrice","updateProductAdditionPrice","writeToProductAdditionPrice","productAdditionPrice","updateProductGroupPanelSelected","productGroupId","productGroupSelectorSetSelected","LbColourPickerTile","setGtmValues","sendGtmProductView","GtmProductId","GtmProductGroupSku","GtmProductSku","GtmProductName","GtmProductPrice","GtmProductBrand","GtmProductSize","GtmProductCategory","productViewGtmDataObject","getProductViewGtmDataObject","sendProductViewGtmDataObject","initialiseProduct","initialiseInstanceComponents","productFactory","newProduct","dataProductSelectionPanelElement","ProductSelectionPanel","clearFinancePanelElements","AjaxGetAndReplaceHtmlAndOuterElement","productElement","urlFinance","financePanelElement","productProduct","dataProductFinancePanelElement","productOptionsPanelElement","productGroupDropDownList","fixedValueProductSelectorList","productSizeDropDownFactory","productGroupDropDownListFactory","productFixedValueProductSelectorListFactory","productSizeDropDownElement","productSizeDropDown","ProductSizeDropDown","productGroupDropDownFactory","productGroupDropDownElement","productColourDropDownFactory","productColourDropDownElement","allProductGroupSelectorElements","productGroupOrColourDropDownFactory","productSelector","returnProductGroupDropDownFactory","allFixedValueProductSelectorElements","productFixedValueProductSelectorFactory","productFixedValueProductSelectorElement","productGroupSelectorFactory","productSizeSelectorFactory","productSizeId","totalAdditionsPrice","productGroup","refreshAllDropdowns","getGroupDropdownById","selectedGroupDropdowns","groupDropDown","GroupEnums","GroupIds","Colour","hasSizeDropdown","hasColourDropdown","groupDropdowns","checkIfProductSizeSelectorHasOptionsThenSetsSelector","productSizeSelectorSetSelected","dropDown","setBaseNowPrice","setBaseWasPrice","setBaseRrpPrice","setBaseSavePrice","setTotalPrice","baseNowPrice","getPriceFromAttribute","ProductBaseNowPrice","baseWasPrice","ProductBaseWasPrice","baseRrpPrice","ProductBaseRrpPrice","baseSavePrice","ProductBaseSavePrice","additionalPriceTotals","updateProductPrefixAndPrice","ProductRrpPrice","ProductWasPrice","productPriceUpdatesEvent","pricePrefix","priceAttribute","newPrice","dataProductPriceElement","prefix","toLocaleString","dataProductPriceAsString","productReviewsAggregate","_handleRatingsOptionClick","handleRatingsOptionClick","_handleShowMoreClick","handleShowMoreClick","_handleScroll","handleScroll","productReviewWidget","ProductReviewWidget","setLineId","attachRatingsOptionClickEventListener","attachShowMoreClickEventListener","attachScrollEventListener","getValueForElementAndAttributeOrThrows","ReviewWidgetOptionSelected","removeRatingsOptionClickEventListener","ReviewWidgetPagerShowMore","removeShowMoreClickEventListener","removeScrollEventListener","all","getProductReviews","getProductReviewsHtml","results","updateWidget","selectedRating","rating","isDisabled","isEof","pageNumber","incrementPage","ProductReviews","Reviews","newReviews","clearReviews","_sizePickerElement","getSizePickerElement","_sizePickerHandheldElement","getSizePickerHandheldElement","intialiseSizeProperties","_sizeSelectorClick","sizeSelectorClick","attachSizeSelectorClickEvent","removeSizeSelectorClickEvent","ifClickElementIsOfProductSelectorTypeUpdateAttributesForOptionChange","updateDataAttributesForProductSizeChange","dataProductElement","dataProductSizeHandheldElement","SizePicker","ProductSizePickerHandheld","dataProductSizeHandheldSelectedElement","ProductSelectorSizeId","ProductScrollIntoView","productSizeSelectorScrollToView","dataProductSizeHSelectedElement","ProductSizePicker","parentElement","previousElementSibling","compareLineSizeAndReloadProductWithNewSize","productSelectorSizeId","productSelectorFullSizeUrl","dataProductUrl","dataProductUrlElement","hiddenInputFieldForSize","dataProductUrlNew","checkLineSizeThenCreateUpdatedProductUrl","getProductData","productLineSizeNew","replaceLineAndSizeIdInProductUrl","nameUrl","startCharacterForName","stringBeforeName","endCharacterForIds","stringAfterLineId","ProductSelectorFullsizeUrl","sizeIdElement","setSizeHandheldValidation","handheldElement","BannerPromotion","_handleBannerPromotionClickEvent","handleBannerPromotionClickEvent","attachBannerPromotionClickEventListener","removeBannerPromotionClickEventListener","BannerPromotionName","promotionGtmDataObject","getPromotionGtmDataObject","sendPromotionsGtmDataObjectAndNavigate","creative","bannerPromotionList","_handlePromotionImpressionsOnScroll","handlePromotionImpressionsOnScroll","bannerPromotionListFactory","getAllUnLoggedPromotions","bannerPromotion","promotionsToLog","promotionGtmDataObjectList","sendPromotionImpressionsGtmDataObject","bannerPromotionElements","contentElement","_setReadMore","setReadMore","_toggleElement","_contentElement","buttingElement","ReadMoreButting","_buttingElement","dynamicHeight","ReadMoreHeight","_staticMinHeight","contentElements","contentElementMinHeight","isContentBelowButtingElement","buttingElementBottom","bottom","contentElementTop","toggleElementHeight","ReadMoreButtingOffset","setMinHeight","displayLink","toggleText","setHeight","LbReadMoreFade","LbHidden","ReadLess","HeaderReviewWidget","createReviewWidgetAggregateComponent","setReviewsAverage","setTotalReviews","reviewWidgetAggregateComponent","ReviewWidgetAggregateComponent","reviewsAverage","totalReviews","ReviewWidgetBase","setReviewsAggregateFactory","createHeaderReviewWidget","headerReviewWidgetElement","getHtmlElementForHeaderReviewWidget","headerReviewWidget","reviewsAggregateElement","getHtmlElementForReviewWidgetAggregatePanel","reviewWidgetAggregatePanel","ReviewWidgetAggregatePanelProduct","reviewsSummary","featureAggregates","qualityAverage","valueForMoneyAverage","reviewWidgetPager","writeToReviewsAverage","setValueForElementAndAttributeOrThrows","updateReviewsAverage","writeToTotalReviews","updateTotalReviews","setDisplayTotalReviews","setDisplayReviewsAverage","setDisplayStarImage","TrustpilotUtils","GetReviewStarSvgPath","updateDisplay","ReviewWidgetAggregatePanelBase","reviewsAggregate","createReviewWidgetSummaryComponent","reviewWidgetAggregateComponentElement","getHtmlElementForReviewWidgetAggregateComponent","reviewWidgetSummaryComponentElement","getHtmlElementForReviewWidgetSummaryComponent","reviewWidgetSummaryComponent","ReviewWidgetSummaryComponent","setReviewsAggregate","updateReviewsAggregate","updateBase","createReviewWidgetFeatureAggregateComponent","reviewWidgetFeatureAggregateComponentElement","getHtmlElementForReviewWidgetFeatureAggregateComponent","reviewWidgetFeatureAggregateComponent","ReviewWidgetFeatureAggregateComponent","createReviewWidgetPager","reviewWidgetPagerElement","getHtmlElementForReviewWidgetPager","ReviewWidgetPager","setQualityAverage","setValueForMoneyAverage","updatePanelIsHidden","updateQualityAverageIsHidden","updateValueForMoneyAverageIsHidden","writeQualityAverage","updateQualityAverage","setQualityAverageMeterAndValue","qualityAverageElement","aggregateMeter","aggregateTotal","writeValueForMoneyAverage","updateValueForMoneyAverage","setValueForMoneyAverageMeterAndValue","valueForMoneyAverageElement","updatePanelIsHiddenCssClass","meterElement","ReviewWidgetOptionBase","_handleOptionClick","handleOptionClick","setRating","updateIsDisabled","attachOptionClickEventListener","removeOptionClickEventListener","optionCustomEvent","ReviewWidgetRatingsOption","ratingsOptionRating","setDisabledCssClass","setDisabledAriaState","LbDisabled","setPage","setIsEof","setIsDisabled","createReviewWidgetPagerRatingsFilter","createReviewWidgetPagerReviews","createReviewWidgetPagerShowMore","reviewWidgetPagerRatingsFilterElement","getHtmlElementForReviewWidgetPagerRatingsFilter","reviewWidgetPagerRatingsFilter","ReviewWidgetPagerRatingsFilter","reviewWidgetPagerReviewsElement","getHtmlElementForReviewWidgetPagerReviews","reviewWidgetPagerReviews","ReviewWidgetPagerReviews","reviewWidgetPagerShowMoreElement","getHtmlElementForReviewWidgetPagerShowMore","reviewWidgetPagerShowMore","reviewWidgetPagerPage","writeToPage","updatePage","reviewWidgetPagerIsEof","updateIsEof","updateReviewWidgetPagerShowMore","ReviewWidgetSummaryFilterComponentBase","componentOptionFactory","currentHtmlElement","currentRating","getStateForIsDisabledFilterOption","getStateForIsSelectedFilterOption","ReviewWidgetPagerRatingsFilterOption","setIReviewWidgetPagerRatingsFilterOption","ratingsFilterOption","updateIReviewWidgetPagerRatingsFilterOptions","componentOptions","updateState","updateSelectedRating","updateIsSelected","setIsSelectedCssClass","ReviewWidgetPagerReview","readMore","reviewWidgetPagerReviewListFactory","getHtmlElementsReviewWidgetPagerReview","reviewWidgetPagerReview","reviewWidgetPagerReviewElements","reviewList","review","reviewWidgetPagerReviewList","updateReviews","clearAllReviewsFromHtmlElement","clearAllReviews","disposeReviewList","showMoreCustomEvent","setSelectedRating","setIsDisabledCssClass","getTotalReviewsFromIReviewsSummary","ratingCount","getRatingCountFromReviewsSummary","ReviewWidgetSummaryComponentOption","totalFiveStars","totalFourStars","totalThreeStars","totalTwoStars","totalOneStars","setIReviewWidgetSummaryComponentOption","ratingsComponentOption","updateIReviewWidgetSummaryComponentOptions","writeToSelectedRating","setOptionMeter","summaryOptionMeter","ratingsOptionMeter","max","setOptionReviewTotal","ratingsOptionTotal","updateOptionMeter","updateOptionReviewTotal","setReviewSummaryFromReviewSummaryAttribute","reviewWidgetSummaryComponentOptionsFactory","optionElements","ratingsOption","summaryOption","reviewWidgetSelectedRating","reviewsSummaryArray","ReviewsSummary","writeToReviewSummaryFromReviewSummaryAttribute","reviewsSummaryString","updateReviewSummary","componentOption","BasePagingSelectableCarousel","occupiedCellsElements","FillerCell","carouselPrevElement","Prev","carouselNextElement","Next","sliderElement","Slider","cellsPerPage","getCellsPerPage","getInitialPage","_handleSwipedUp","handleSwipedUp","_handleSwipedDown","handleSwipedDown","_handleSwipedLeft","handleSwipedLeft","_handleSwipedRight","handleSwipedRight","attachSwipedUpEventListener","attachSwipedDownEventListener","attachSwipedLeftEventListener","attachSwipedRightEventListener","SwipedEventEnums","SwipedUp","removeSwipedUpEventListener","SwipedDown","removeSwipedDownEventListener","SwipedLeft","removeSwipedLeftEventListener","SwipedRight","removeSwipedRightEventListener","isSwipeable","moveCarouselToNextPosition","moveCarouselToPrevPosition","moveCarouselToPosition","elemetToMoveToFirstPosition","carouselSliderElement","scrollPositionOfCarousel","offSetPositionOfCarousel","positionOfElemetToMoveToFirstPosition","posLeft","pageFirstPositionZeroIndexed","getTotalPageCount","ceil","totalOccupiedCells","hasPrevButton","hasNextButton","every","tile","disableCarouselShowHideArrowsWhenScrolling","isScrolling","that","centerCarosuel","removeCarouselPagePrevClickEventListener","removeCarouselPageNextClickEventListener","removeViewportDimensionsChangedEventListener","updateSizeOfSlider","addNonOccupiedCells","_moveCarouselToNextPosition","_moveCarouselToPrevPosition","_reinitialiseCarousel","reinitialiseCarousel","attachCarouselPageNextClickEventListener","attachCarouselPagePrevClickEventListener","navigateCarouselToFirstCellInCurrentPage","firstCellOfPreResizeState","indexOfFirstCellInCurrentPage","writeToSliderRemovingInlineStyles","removeNonOccupiedCells","getPageForCell","indexOfLastCellInCurrentPage","getFirstElementOnDisplay","chooserTileWidth","elementForFirstPositionIndex","cellIndex","getTileSlotsCountHorizontal","getTileSlotsCountVertical","chooser","chooserButtonPrev","chooserButtonNext","sliderHeight","sliderWidth","totalTilesSize","totalGaps","totalSize","writeToSliderWithStyleDimensions","calculateNonOccupiedCellsRequired","item","createCell","fillerCellElement","newCell","getCarouselSliderElement","getSelectedCellElement","mediaTilesFactory","_dispatchSelectedCarouselCellSelectedEvent","_updateCarouselCurrentSelectedIndexFromEvent","updateCarouselCurrentSelectedIndexFromEvent","_updateDeviceOrientation","updateDeviceOrientation","attachCarouselClickEventListener","attachDeviceOrientationChangedEventListener","attachSelectedCarouselCellSelectedEventListener","updateCarouselOrientation","writeToCarouselCurrentSelectedIndex","deviceOrientation","getOrientation","MediaTile","removeCarouselClickEventListener","DeviceOrientationChangeEvent","removeDeviceOrientationChangedEventListener","SelectedCarouselCellSelected","removeSelectedCarouselCellSelectedEventListener","writeToMainDisplayArea","setAllMediaTilesToInactive","setCurrentlySelectedMediaTileToActive","hasCellSelectedAttribute","initialSelection","InitialSelection","writeToCarouselOrientation","setCarouselOrientation","carouselOrientationString","selectedCarouselCellSelectedEvent","_minHeight","_disableTransitionsSetHeight","disableTransitionsSetHeight","_showHide","setIsHidden","minHeight","zeroMaxHeight","HideToggleText","ShowToggleText","disableTransitions","enableTransitions","toggleHiddenCss","resetMaxHeight","scrollToView","readMoreToggleId","readMoreReturnElement","ReadMoreReturnPosition","LbDisableCssTransitions","hasHiddenClass","_creatorForIFrame","creatorForIFrame","_visibilityState","visibilityState","_scrollInteraction","scrollInteraction","_clickInteraction","clickInteraction","setVideoSource","setVideoTitle","setImageDetails","createPlaceholderImage","attachPlaceholderClickEventListener","attachVisibilityChangeEventListener","removePlaceholderClickEventListener","removeVisibilityChangeEventListener","videoSource","VideoSource","videoTitle","VideoTitle","imageSize","VideoPlaceholderSize","YouTubeImageSizes","Default","imageFileName","YouTubeImageFileNames","YouTubeImageWidths","YouTubeImageHeights","Medium","High","Standard","MaxRes","createYouTubeVideo","pauseVideo","myElement","bounding","myElementHeight","myElementWidth","innerWidth","ifClickElementNotOnSelf","imageSource","createPlaceholderImageSource","Image","alt","iframe","createIFrame","createUrlParameters","contentWindow","postMessage","parameters","fetch","method","headers","res","ok","catch","getBeforAfter","doBefore","doAfter","onFailed","htmlObj","CookieConsent","cookieConsentClick","ConsentButton","Cookie","InitialiseCookieConsent","cookieConsent","cookieConsentElement","LbCookieConsent","cookieConsentHolder","consentText","LbCookieConsentText","ConsentText","consentPrivacy","LbLinkWordWrap","ConsentPrivacy","consentButton","LbCookieConsentBtn","productDeliveryRoute","responseContent","Convert","toProductDeliveryResponseDto","json","typ","transform","jsonToJSProps","productDeliveryResponseDtoToJson","jsToJSONProps","invalidValue","prettyTyp","prettyTypeName","literal","jsonToJS","js","jsToJSON","getProps","ref","typeMap","cases","transformEnum","typs","_","transformUnion","unionMembers","transformArray","arrayItems","additional","getOwnPropertyNames","prop","v","transformObject","d","transformDate","transformPrimitive","FirstInteraction","firstInteractionFired","firstMovementInteractionFired","_handleInteraction","handleInteraction","attachDocumentScrollEventListener","attachDocumentMouseDownEventListener","attachDocumentMouseMoveEventListener","attachDocumentTouchStartEventListener","attachDocumentKeyDownEventListener","removeDocumentScrollEventListener","removeDocumentMouseDownEventListener","removeDocumentMouseMoveEventListener","removeDocumentTouchStartEventListener","removeDocumentKeyDownEventListener","firstInteraction","firstInteractionCustomEvent","disposeNonMovementEventListners","firstMovementInteractionCustomEvent","disposeMovementEventListners","FirstMovementInteraction","ids","containerIdChecker","containerId","GoogleContainerIdToIgnore","checkIfWindowHasGtm","google_tag_manager","navigationUrl","products","sendProductsGtmDataObjectAndNavigate","productGtmDataObjects","gtmProductTileEcommerce","actionField","gtmProductTilePostObject","EventTypes","ProductClick","ecommerce","eventCallback","dataLayer","promotionGtmDataObjects","promotionsArray","gtmPromotionEcommerce","promoClick","promotions","gtmPromotionPostObject","PromotionClick","gtmProductTileImpressionsEcommerce","currencyCode","impressions","gtmPostProductTileImpressionsObject","ProductImpressions","gtmPromotionImpressionsEcommerce","promoView","gtmPostPromotionImpressionsObject","PromotionImpressions","sendProductViewGtmDataObjectList","productViewGtmDataObjectList","gtmProductViewEcommerce","gtmPostProductViewObject","ProductView","productViewList","sendAddToCartGtmDataObjectList","addToRemoveFromCartGtmDataObjectList","gtmAddToCartEcommerce","gtmPostAddToCartObject","AddToCart","addToRemoveFromCartList","sendRemoveFromCartGtmDataObjectList","gtmRemoveFromCartEcommerce","gtmPostRemoveFromCartObject","RemoveFromCart","sendViewCartGtmDataObjectList","viewCartGtmDataObjectList","gtmPostViewCartEcommerce","items","gtmPostViewCartObject","ViewCart","sendSearchProductAndPageClickGtmDataObjectAndNavigate","searchClickGtmDataObject","eventTypes","gtmPostSearchProductAndPageClickObject","sendMenuClickGtmDataObjectAndNavigate","menuClickGtmDataObject","gtmMenuEcommerce","gtmPostMenuPageClickObject","MenuClick","itemClickGtmDataObject","gtmItemEcommerce","gtmPostItemClickObject","ItemClick","sortClickGtmDataObject","gtmSortClickEcommerce","gtmPostSortClickObject","SortClick","filterClickGtmDataObject","gtmFilterClickEcommerce","gtmPostFilterClickObject","FilterClick","quickLinkClickGtmDataObject","gtmQuickLinkClickEcommerce","gtmPostQuickLinkClickObject","QuickLinkClick","_handlePopState","handlePopState","attachHistoryControllerPopStateEventListener","removeHistoryControllerPopStateEventListener","handleBeforeUnload","removeAllPopOutHistory","state","HistoryStateType","historyStatePopOut","handlePopOutStateChangeForProductListingPage","popOutState","handlePopOutStateChange","ProductListingPageUpdate","historyStateProductListingPage","handleProductListingPageStateChange","BasketUpdate","handleBasketUpdated","handleOther","popOutId","popOutFamily","productListingPageHistoryBackCustomEvent","reload","pushPopOutHistoryToStack","pageUrl","popoutHistoryLength","getPopoutHistoryLength","urlWithHash","popOutHistoryLength","pushState","historyState","currentHistoryHasPopout","pushStateForProductListingPageOnPollIsTrue","maxTime","intervalId1","setInterval","intervalId2","popOutUrl","clearInterval","pushPopOutHistoryToStackOnPollIsTrue","timeCounter","replaceProductListingPageHistoryOnStack","replaceBasketHistoryToStack","stepsToGoBack","go","back","initialiseHistoryController","initialiseationConfigData","allDataAttributeNames","DomUtils","createArrayOfDataElement","uniqueAttributeNames","bundles","dataAttributeName","functionName","moduleUrl","InstantiationUtils","importAndInstatiate","matchInitialiseationConfigWithDomElement","responsiveStateInitialiser","swipedEvents","initialisePopOutController","initialiseOverlay","initialiseMegaMenu","LiveChat","ScrollService","getOrInitialiseCookieConsent","setAffiliateClickRefCookie","OneTrustCookieConsent","getTargetingConsent","addOneTrustEventListeners","pageLoad","getHtmlElement","instanceComponentFactory","instanceComponentsOfType","instanceComponentBaseList","member","currentComponent","getAllComponentsOfType","componentElements","createInstanceComponentBaseForElementIfNonExistant","createNewInstanceComponentBaseForAllNonExistant","componentElement","c","basketSession","sessionId","BasketSessionId","GuidUtils","generateUUID","consentStatus","targetingConsent","urlParams","URLSearchParams","clickRefParam","QueryStringParameters","AffiliateClickRef","getAffiliateClickRefCookie","clickRefCookie","clickRef","_handleFirstMovementInteraction","handleFirstMovementInteraction","_handleLiveChatLink","handleLiveChatLink","_handleHideOverlay","handleHideOverlay","_handleShowOverlay","handleShowOverlay","_handleShowLiveChatEvent","handleShowLiveChatEvent","_handleHideLiveChatEvent","handleHideLiveChatEvent","_handleOpenLiveChatEvent","handleOpenLiveChatEvent","_handleCloseLiveChatEvent","handleCloseLiveChatEvent","attachFirstMovementInteractionEventListener","removeFirstMovementInteractionEventListener","attachLiveChatClickEventListener","removeLiveChatClickEventListener","attachShowLiveChatEventListener","ShowLiveChat","removeShowLiveChatEventListener","attachHideLiveChatEventListener","HideLiveChat","removeHideLiveChatEventListener","attachOpenLiveChatEventListener","OpenLiveChat","removeOpenLiveChatEventListener","attachCloseLiveChatEventListener","CloseLiveChat","removeCloseLiveChatEventListener","loadLiveChat","customiseChatLabel","zESettings","webWidget","launcher","chatLabel","LiveChatButtonOnlineMessage","mobile","labelVisible","injectScript","liveChatLoadCompleteEvent","LiveChatLink","openLiveChat","zE","closeAllMenusEvent","showHideLiveChat","liveChat","doesObjectExistOnWindow","chatVisibility","MegaMenu","desktopMenuLoaded","handHeldMenuLoaded","setMegaMenuContainer","_closeMobilePopOutOnDesktop","closeMobilePopOutOnDesktop","_setMegaMenuZIndex","setMegaMenuZIndex","_unsetMegaMenuZIndex","unsetMegaMenuZIndex","_handleFirstInteraction","handleFirstInteraction","_handleHandHeldMenuOpen","handleHandHeldMenuOpen","attachFirstInteractionChangeEventListener","attachOpenHandHeldMenuClickEventListener","megaMenuDesktopFactory","MegaMenuHandHeldButton","removeOpenHandHeldMenuClickEventListener","removeFirstInteractionChangeEventListener","attachDeviceTypeChangeEventListener","DeviceTypeChangeEvent","removeDeviceTypeChangeEventListener","attachMegaMouseOverEventListener","removeMegaMenuMouseOverEventListener","attachMegaMouseOutEventListener","removeMegaMenuMouseOutEventListener","megaMenuDesktop","MegaMenuDesktop","megaMenuHandheldFactory","megaMenuHandheldElement","megaMenuContainer","MegaMenuHandheld","megaMenuHandheld","MegaMenuContainer","reinitialiseMegaMenuDesktop","loadDesktopMenu","megaMenuHoverDelay","megaMenuOverlay","loadHandHeldMenu","menuEnterTimer","categoryItems","MegaMenuHover","thisItem","thisItemParentItems","MegaMenuPopOut","j","handHeldlement","megaMenuHandHeldHtmlString","MegaMenuMobile","loadMenu","megaMenuHtmlString","LbMainMenuRibbon","zIndex","LbMegaMenu","LbMainMenuHeader","timeOutHandler","HTMLDocument","toggleModifier","modifier","displayOverlay","hideOverlay","overlay","showOverlay","deviceType","MegaMenuDeviceBase","megaMenuItemListFactory","megaMenuItemElements","MegaMenuGtm","GtmMegaMenuName","megaMenuItemList","megaMenuItemElement","megaMenuItem","MegaMenuItem","megaMenu","createMegaMenu","OneTrustEnums","Events","OneTrustGroupsUpdated","OT_OneTrustGroupsUpdated","getStrictlyNecessaryConsent","getPerformanceConsent","getFunctionalConsent","getSocialMediaConsent","getOneTrustCookie","consentCookie","oneTrustCookie","OneTrustCookie","CategoryConsentTrue","StrictlyNecessary","Performance","Functional","Targeting","SocialMedia","Overlay","_scrollPosition","OverlayHidden","scrolbarWidth","LbNoScroll","showOverlayCustomEvent","Tablet","hideOverlayCustomEvent","createOverlay","LbOverlay","_popOutClickEventHandler","popOutClickEventHandler","_backLinkClosePopOutControlsEventHandler","backLinkClosePopOutControlsEventHandler","_handleCloseAllMenus","handleCloseAllMenus","attachPopOutClickEventListener","attachEventForCloseAllAside","attachBackLinkClosePopOutControlsEventListener","attachCloseAllMenusPopOutControlsEventListener","removePopOutClickEventListener","handleOverlayClick","removeEventForCloseAllAside","removeBackLinkClosePopOutControlsEventListener","CloseAllMenus","removeCloseAllMenusPopOutControlsEventListener","hasPopOutOpenAsParentOrSelf","closestPopOutElement","backLinkPopOutCloseCorrectPopoutLayer","backLickElement","PopOutBacklink","popOutLayerId","popOutLayerFamily","attachAllPopOutEventListners","closeAllLevel1NoneFamilyMembers","closeAllLevel1","popOutOpen","noneFamilyMemberIsOpen","closeAllNoneFamilyMembers","popOutElements","removeRelevantActiveAndTransitionCss","closeAllFamilyMembers","elements","getDataPopOutIdLevel","LbPopOutTransition","initializePopOut","closeAllNoneLinealSiblingsAndTheirDescendantsByIdAndFamily","family","getElementByIdAndFamily","closeAllNoneLinealSiblingsAndTheirDescendants","level","hasSameLineage","sleep","getAllPopOutElements","getElementsByFamily","getPopOutTransitionDelayTimeInMs","transitionDuration","transitionDelay","closeUnneededMenusReadyForNewSelection","openCorrectElementsForOpenByIdAndFamily","openLevel1Elements","openAllRelevantNoneLevel1Levels","element1","element2","lowerIdCount","element1Id","element2Id","element1IdParts","element2IdParts","closeAllPopOutMenus","getTopLevelActiveMenu","activeMenuElements","maxLevel","levelNumber","htmlElementEdge","clientX","handleOverlayCloseCorrectPopout","clientY","PopOutOverlayClickIsBack","backLinkElement","popoutId","lastIndexOfColon","matchMedia","matches","DeviceOrientation","Landscape","Portrait","mediaQueryMobile","mediaQueryTablet","mediaQueryDesktop","deviceTypeChangedEvent","attachDispatchDeviceTypeChangeEventListeners","mediaQueryLandscape","mediaQueryPortrait","deviceOrientationChangedEvent","attachDispatchOrientationEventListeners","sample","VIEWPORT_DIMENSION_CHANGE_EVENT_FIRING","documentWidth","documentHeight","viewportDimensionsChangedEvent","windowInnerWidth","windowInnerHeight","windowScrollX","windowScrollY","onScrollCustomEvent","scrollService","asyncFuncBeforAfter","func","delayInms","nameLenPlus","cookie","decodeURIComponent","daysTillExpires","hoursTillExpires","setTime","toUTCString","cookieDomain","deleteCookie","NotificationPanelIsOpen","NotificationPanelIsClosed","closeLiveChatEvent","allElements","Countdown","Forms","ZoomableGallery","CarouselGallery","PagingCarouselGallery","CategoryGroup","PagingCarouselGalleryWithZoomButton","PopOutCarouselGallery","SinglePagingSelectableCarousel","Basket","BasketLineGtm","BasketPrices","BasketDelivery","Home","StaticPage","BasketSimple","SearchBase","Search","SearchProducts","SearchProduct","SearchPages","SearchPage","SearchGtm","NotFoundSearch","PageLoad","PopUpTimer","SearchClickListValues","ImageUrls","AnchorIds","firstChild","decimals","changeZeroToFree","re","num","toFixed","RegExp","d2","performance","random","dataAttribute","dataAttributeValue","cssClass","getValueForElementAndAttribute","htmlElementForSelector","elementAttribute","attributeToGetIfDifferent","runAsAsync","script","async","elementBoundingRect","evt","createEvent","initCustomEvent","Event","startEl","timeDown","xDown","yDown","xDiff","yDiff","xUp","yUp","swipeThreshold","getNearestAttribute","swipeTimeout","timeDiff","eventType","changedTouches","TouchList","abs","eventData","dir","xStart","xEnd","yStart","yEnd","defaultValue","attributeValue","stars","imageFolderAddress","starSvgPath","potentialNumber","nullableNumber","Holder","webpackAsyncContext","req","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","m","getter","__esModule","mode","ns","def","current","definition","chunkId","promises","miniCssF","g","globalThis","needAttach","scripts","s","charset","nc","onScriptComplete","prev","onerror","onload","doneFns","fn","toStringTag","scriptUrl","importScripts","currentScript","loadStylesheet","fullhref","existingLinkTags","dataHref","rel","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","request","nextSibling","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","chunkLoadingGlobal"],"sourceRoot":""}