{"version":3,"file":"shoppingbasket.a35f354bc2a7cde9e757.js","mappings":"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","sources":["webpack://gak.frontend/./ReskinScripts/Debounce.js","webpack://gak.frontend/./ReskinScripts/cookie-consent.js","webpack://gak.frontend/./ReskinScripts/enhanced-ecommerce.js","webpack://gak.frontend/./ReskinScripts/price-formatter.js","webpack://gak.frontend/./ReskinScripts/tracking-scripts.js","webpack://gak.frontend/./node_modules/tabbyjs/dist/js/tabby.min.js","webpack://gak.frontend/./ReskinScripts/common.ts","webpack://gak.frontend/./node_modules/@stripe/stripe-js/dist/stripe.esm.js","webpack://gak.frontend/./ReskinScripts/gak-DeliveryOptions.ts","webpack://gak.frontend/./ReskinScripts/gak-DeliveryOptions-persist.js","webpack://gak.frontend/./node_modules/@paypal/paypal-js/dist/esm/paypal-js.js","webpack://gak.frontend/./ReskinScripts/gak-PayPalButton.ts","webpack://gak.frontend/./ReskinScripts/price-helper.ts","webpack://gak.frontend/./ReskinScripts/gak-ProductDetail.ts","webpack://gak.frontend/./ReskinScripts/gak-ShoppingBasket.ts","webpack://gak.frontend/./ReskinScripts/shopping-basket-panel.ts","webpack://gak.frontend/./ReskinScripts/tabs.ts","webpack://gak.frontend/./ReskinScripts/utils.ts","webpack://gak.frontend/./node_modules/ssr-window/ssr-window.esm.js","webpack://gak.frontend/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://gak.frontend/./node_modules/swiper/core/breakpoints/index.js","webpack://gak.frontend/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://gak.frontend/./node_modules/swiper/core/check-overflow/index.js","webpack://gak.frontend/./node_modules/swiper/core/classes/addClasses.js","webpack://gak.frontend/./node_modules/swiper/core/classes/index.js","webpack://gak.frontend/./node_modules/swiper/core/classes/removeClasses.js","webpack://gak.frontend/./node_modules/swiper/core/core.js","webpack://gak.frontend/./node_modules/swiper/core/defaults.js","webpack://gak.frontend/./node_modules/swiper/core/events-emitter.js","webpack://gak.frontend/./node_modules/swiper/core/events/index.js","webpack://gak.frontend/./node_modules/swiper/core/events/onClick.js","webpack://gak.frontend/./node_modules/swiper/core/events/onLoad.js","webpack://gak.frontend/./node_modules/swiper/core/events/onResize.js","webpack://gak.frontend/./node_modules/swiper/core/events/onScroll.js","webpack://gak.frontend/./node_modules/swiper/core/events/onTouchEnd.js","webpack://gak.frontend/./node_modules/swiper/core/events/onTouchMove.js","webpack://gak.frontend/./node_modules/swiper/core/events/onTouchStart.js","webpack://gak.frontend/./node_modules/swiper/core/grab-cursor/index.js","webpack://gak.frontend/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://gak.frontend/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://gak.frontend/./node_modules/swiper/core/loop/index.js","webpack://gak.frontend/./node_modules/swiper/core/loop/loopCreate.js","webpack://gak.frontend/./node_modules/swiper/core/loop/loopDestroy.js","webpack://gak.frontend/./node_modules/swiper/core/loop/loopFix.js","webpack://gak.frontend/./node_modules/swiper/core/moduleExtendParams.js","webpack://gak.frontend/./node_modules/swiper/core/modules/observer/observer.js","webpack://gak.frontend/./node_modules/swiper/core/modules/resize/resize.js","webpack://gak.frontend/./node_modules/swiper/core/slide/index.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideNext.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slidePrev.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideReset.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideTo.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideToClosest.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideToLoop.js","webpack://gak.frontend/./node_modules/swiper/core/transition/index.js","webpack://gak.frontend/./node_modules/swiper/core/transition/setTransition.js","webpack://gak.frontend/./node_modules/swiper/core/transition/transitionEmit.js","webpack://gak.frontend/./node_modules/swiper/core/transition/transitionEnd.js","webpack://gak.frontend/./node_modules/swiper/core/transition/transitionStart.js","webpack://gak.frontend/./node_modules/swiper/core/translate/getTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/index.js","webpack://gak.frontend/./node_modules/swiper/core/translate/maxTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/minTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/setTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/translateTo.js","webpack://gak.frontend/./node_modules/swiper/core/update/index.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateProgress.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSize.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlides.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://gak.frontend/./node_modules/swiper/modules/navigation/navigation.js","webpack://gak.frontend/./node_modules/swiper/modules/pagination/pagination.js","webpack://gak.frontend/./node_modules/swiper/modules/thumbs/thumbs.js","webpack://gak.frontend/./node_modules/swiper/modules/zoom/zoom.js","webpack://gak.frontend/./node_modules/swiper/shared/classes-to-selector.js","webpack://gak.frontend/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://gak.frontend/./node_modules/swiper/shared/get-browser.js","webpack://gak.frontend/./node_modules/swiper/shared/get-device.js","webpack://gak.frontend/./node_modules/swiper/shared/get-support.js","webpack://gak.frontend/./node_modules/swiper/shared/process-lazy-preloader.js","webpack://gak.frontend/./node_modules/swiper/shared/utils.js","webpack://gak.frontend/webpack/bootstrap","webpack://gak.frontend/webpack/runtime/define property getters","webpack://gak.frontend/webpack/runtime/global","webpack://gak.frontend/webpack/runtime/hasOwnProperty shorthand","webpack://gak.frontend/webpack/startup"],"sourcesContent":["/*\r\n * Debounce (with a few helpers as local functions, changes to remove dependencies)\r\n * extracted from Lohash (V4.17.4)\r\n * LoHash:\r\n * Copyright JS Foundation and other contributors \r\n * Released under MIT license \r\n */\r\n\r\n/**\r\n * Creates a debounced function that delays invoking `func` until after `wait`\r\n * milliseconds have elapsed since the last time the debounced function was\r\n * invoked. The debounced function comes with a `cancel` method to cancel\r\n * delayed `func` invocations and a `flush` method to immediately invoke them.\r\n * Provide `options` to indicate whether `func` should be invoked on the\r\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\r\n * with the last arguments provided to the debounced function. Subsequent\r\n * calls to the debounced function return the result of the last `func`\r\n * invocation.\r\n *\r\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\r\n * invoked on the trailing edge of the timeout only if the debounced function\r\n * is invoked more than once during the `wait` timeout.\r\n *\r\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\r\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\r\n *\r\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\r\n * for details over the differences between `_.debounce` and `_.throttle`.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 0.1.0\r\n * @category Function\r\n * @param {Function} func The function to debounce.\r\n * @param {number} [wait=0] The number of milliseconds to delay.\r\n * @param {Object} [options={}] The options object.\r\n * @param {boolean} [options.leading=false]\r\n * Specify invoking on the leading edge of the timeout.\r\n * @param {number} [options.maxWait]\r\n * The maximum time `func` is allowed to be delayed before it's invoked.\r\n * @param {boolean} [options.trailing=true]\r\n * Specify invoking on the trailing edge of the timeout.\r\n * @returns {Function} Returns the new debounced function.\r\n * @example\r\n *\r\n * // Avoid costly calculations while the window size is in flux.\r\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\r\n *\r\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\r\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\r\n * 'leading': true,\r\n * 'trailing': false\r\n * }));\r\n *\r\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\r\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\r\n * var source = new EventSource('/stream');\r\n * jQuery(source).on('message', debounced);\r\n *\r\n * // Cancel the trailing debounced invocation.\r\n * jQuery(window).on('popstate', debounced.cancel);\r\n */\r\nvar debounceScript = function debounce(func, wait, options) {\r\n var lastArgs,\r\n lastThis,\r\n maxWait,\r\n result,\r\n timerId,\r\n lastCallTime,\r\n lastInvokeTime = 0,\r\n leading = false,\r\n maxing = false,\r\n trailing = true;\r\n\r\n function toNumber(value) {\r\n if (typeof value == 'Number') {\r\n return value;\r\n } else {\r\n var v = parseInt(value);\r\n return isNaN(v) ? 0 : v;\r\n }\r\n }\r\n function isObject(value) {\r\n var type = typeof value;\r\n return value != null && (type == 'object' || type == 'function');\r\n }\r\n function now() {\r\n return Date.now();\r\n }\r\n\r\n if (typeof func != 'function') {\r\n throw \"debounce: param 'func' must be a function\";\r\n }\r\n wait = toNumber(wait) || 0;\r\n\r\n if (isObject(options)) {\r\n leading = !!options.leading;\r\n maxing = 'maxWait' in options;\r\n maxWait = maxing ? Math.max(toNumber(options.maxWait) || 0, wait) : maxWait;\r\n trailing = 'trailing' in options ? !!options.trailing : trailing;\r\n }\r\n\r\n function invokeFunc(time) {\r\n var args = lastArgs,\r\n thisArg = lastThis;\r\n\r\n lastArgs = lastThis = undefined;\r\n lastInvokeTime = time;\r\n result = func.apply(thisArg, args);\r\n return result;\r\n }\r\n\r\n function leadingEdge(time) {\r\n // Reset any `maxWait` timer.\r\n lastInvokeTime = time;\r\n // Start the timer for the trailing edge.\r\n timerId = setTimeout(timerExpired, wait);\r\n // Invoke the leading edge.\r\n return leading ? invokeFunc(time) : result;\r\n }\r\n\r\n function remainingWait(time) {\r\n var timeSinceLastCall = time - lastCallTime,\r\n timeSinceLastInvoke = time - lastInvokeTime,\r\n result = wait - timeSinceLastCall;\r\n\r\n return maxing ? Math.min(result, maxWait - timeSinceLastInvoke) : result;\r\n }\r\n\r\n function shouldInvoke(time) {\r\n var timeSinceLastCall = time - lastCallTime,\r\n timeSinceLastInvoke = time - lastInvokeTime;\r\n\r\n // Either this is the first call, activity has stopped and we're at the\r\n // trailing edge, the system time has gone backwards and we're treating\r\n // it as the trailing edge, or we've hit the `maxWait` limit.\r\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\r\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\r\n }\r\n\r\n function timerExpired() {\r\n var time = now();\r\n if (shouldInvoke(time)) {\r\n return trailingEdge(time);\r\n }\r\n // Restart the timer.\r\n timerId = setTimeout(timerExpired, remainingWait(time));\r\n }\r\n\r\n function trailingEdge(time) {\r\n timerId = undefined;\r\n\r\n // Only invoke if we have `lastArgs` which means `func` has been\r\n // debounced at least once.\r\n if (trailing && lastArgs) {\r\n return invokeFunc(time);\r\n }\r\n lastArgs = lastThis = undefined;\r\n return result;\r\n }\r\n\r\n function cancel() {\r\n if (timerId !== undefined) {\r\n clearTimeout(timerId);\r\n }\r\n lastInvokeTime = 0;\r\n lastArgs = lastCallTime = lastThis = timerId = undefined;\r\n }\r\n\r\n function flush() {\r\n return timerId === undefined ? result : trailingEdge(now());\r\n }\r\n\r\n function debounced() {\r\n\r\n var time = now(),\r\n isInvoking = shouldInvoke(time);\r\n\r\n lastArgs = arguments;\r\n lastThis = this;\r\n lastCallTime = time;\r\n\r\n if (isInvoking) {\r\n if (timerId === undefined) {\r\n return leadingEdge(lastCallTime);\r\n }\r\n if (maxing) {\r\n // Handle invocations in a tight loop.\r\n timerId = setTimeout(timerExpired, wait);\r\n return invokeFunc(lastCallTime);\r\n }\r\n }\r\n if (timerId === undefined) {\r\n timerId = setTimeout(timerExpired, wait);\r\n }\r\n return result;\r\n }\r\n debounced.cancel = cancel;\r\n debounced.flush = flush;\r\n return debounced;\r\n}\r\n\r\n\r\n\r\nexport { debounceScript }","var CookieConsentService = {\r\n CookieConsentKey: \"\",\r\n EnableImpliedCookieConsent: false,\r\n didConsentToAllCookies: function () {\r\n //Logic shared with MvcExtensions.DidConsentToCookie\r\n //Please keep in sync\r\n \r\n if (this.CookieConsentKey === \"\") {\r\n //console.log(\"Cookie consent key was not set\");\r\n return false;\r\n }\r\n\r\n var cookieSettings = this.getCookieSettings();\r\n\r\n var didConsent = cookieSettings.didConsentToAllManually ||\r\n (this.EnableImpliedCookieConsent && cookieSettings.didConsentImplicitly && !cookieSettings.didConsentToEssentialManually);\r\n return didConsent;\r\n },\r\n shouldShowCookieBanner: function () {\r\n var cookieSettings = this.getCookieSettings();\r\n\r\n return (this.EnableImpliedCookieConsent && cookieSettings.shouldShowImpliedCookieBanner) ||\r\n (!this.EnableImpliedCookieConsent && cookieSettings.shouldShowCookieBanner);\r\n },\r\n clearAllCookiesIfConsentNotGiven: function () {\r\n //Clearing all cookies but consent cookie and essential cookies\r\n var cookieSettings = this.getCookieSettings();\r\n\r\n if (!this.didConsentToAllCookies()) {\r\n var cookies = document.cookie.split(\";\");\r\n for (var cookie in cookies) {\r\n if (cookie !== this.CookieConsentKey && cookieSettings.essentialCookies.indexOf(cookie) == -1) {\r\n deleteCookie(cookie);\r\n }\r\n }\r\n }\r\n },\r\n getCookieSettings: function () {\r\n //Logic shared with MvcExtensions.DidConsentToCookie\r\n //Please keep in sync\r\n var result = {\r\n didConsentImplicitly: this.EnableImpliedCookieConsent,\r\n didConsentToAllManually: false,\r\n didConsentToEssentialManually: false,\r\n shouldShowCookieBanner: true,\r\n shouldShowImpliedCookieBanner: true,\r\n essentialCookies: [\"pdt\", \"GAK_ShoppinBasket\", \"GAK_CookieConsent\", \"GAK_SearchRef\",\r\n \"GAK_VoucherPromoPopup\", \"LocationId\", \"ChannelID\", \"__RequestVerificationToken\",\r\n \"GAK_FinanceOptions\", \"amazon-pay-connectedAuth\", \"apay-session-set\",\r\n \"GAK_FE_Email\", \".AspNet.ApplicationCookie\"]\r\n };\r\n\r\n ///Returning boolValue if it's a bool, fallbackBool otherwise\r\n function getSafeBool(boolValue, fallbackBool) {\r\n if (typeof (boolValue) === \"boolean\") {\r\n return boolValue;\r\n }\r\n\r\n return fallbackBool;\r\n }\r\n\r\n try {\r\n var consentCookie = unescape(getCookie(this.CookieConsentKey));\r\n var cookieObj = JSON.parse(consentCookie);\r\n\r\n if (cookieObj === true) {\r\n result.didConsentImplicitly = true;\r\n result.didConsentToAllManually = false;\r\n result.didConsentToEssentialManually = true;\r\n result.shouldShowCookieBanner = false;\r\n result.shouldShowImpliedCookieBanner = false;\r\n }\r\n else if (cookieObj != null && typeof (cookieObj) === \"object\") {\r\n result.didConsentImplicitly = getSafeBool(cookieObj.didConsentImplicitly, result.didConsentImplicitly);\r\n result.didConsentToAllManually = getSafeBool(cookieObj.didConsentToAllManually, result.didConsentToAllManually);\r\n result.didConsentToEssentialManually = getSafeBool(cookieObj.didConsentToEssentialManually, result.didConsentToEssentialManually);\r\n result.shouldShowCookieBanner = getSafeBool(cookieObj.shouldShowCookieBanner, result.shouldShowCookieBanner);\r\n result.shouldShowImpliedCookieBanner = getSafeBool(cookieObj.shouldShowImpliedCookieBanner, result.shouldShowImpliedCookieBanner);\r\n }\r\n\r\n } catch (e) {\r\n //In case of exception assume cookie doesn't exist\r\n //Nothing to do\r\n }\r\n\r\n return result;\r\n },\r\n onManuallyConsentToAllCookies: function () {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentToAllManually = true;\r\n settings.didConsentImplicitly = true;\r\n settings.shouldShowCookieBanner = false;\r\n settings.shouldShowImpliedCookieBanner = false;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n },\r\n onManuallyConsentToEssentialCookies: function () {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentToAllManually = false;\r\n settings.didConsentToEssentialManually = true;\r\n settings.didConsentImplicitly = true;\r\n settings.shouldShowCookieBanner = false;\r\n settings.shouldShowImpliedCookieBanner = false;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n },\r\n onHideImpliedConsentBanner: function () {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentImplicitly = true;\r\n settings.shouldShowImpliedCookieBanner = false;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n },\r\n onRevokeConsent: function () {\r\n confirm(\"Checkout cannot work without cookies.
Are you sure you want to revoke your cookie consent?\",\r\n function (didConfirm) {\r\n if (didConfirm) {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentToAllManually = false;\r\n settings.didConsentImplicitly = false;\r\n settings.shouldShowCookieBanner = true;\r\n settings.shouldShowImpliedCookieBanner = true;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n }\r\n },\r\n \"Cookie consent\",\r\n \"REVOKE CONSENT\",\r\n \"CANCEL\");\r\n },\r\n saveCookieConsent: function (consentSettings) {\r\n if (this.CookieConsentKey === \"\") {\r\n //console.log(\"Cookie consent key was not set\");\r\n return;\r\n }\r\n\r\n var settingsJson = JSON.stringify(consentSettings);\r\n\r\n //Checking if settings changed\r\n //If changed, cookie will be set and page reloaded\r\n var consentCookie = getCookie(this.CookieConsentKey);\r\n if (settingsJson !== consentCookie) {\r\n setCookie(this.CookieConsentKey, settingsJson, 730);\r\n }\r\n },\r\n showConsentModal: function () {\r\n var message = \"This feature is not available without cookie consent.\" +\r\n \"Learn more\";\r\n var title = \"Consent to cookies\";\r\n\r\n confirm(message, function (didNotConsent) {\r\n //We're inversing button names and hence meaning so that Consent is shown as blue (ie: safe option)\r\n if (!didNotConsent) {\r\n CookieConsentService.onManuallyConsentToAllCookies();\r\n }\r\n },\r\n title,\r\n \"CLOSE\",\r\n \"ACCEPT & CLOSE\",\r\n //Hiding close button for express consent\r\n //Putting back close button will also need extra work since \r\n //close and 'Consent to cookies' will have same meaning\r\n false);\r\n }\r\n};\r\n\r\n//Cookie consent bindings\r\n\r\n//Preventing redirect\r\n\r\nfunction ConsentBinding(event) {\r\n //TODO: improve on design so that instead of refresh we redirect to basket/account login\r\n if (!CookieConsentService.didConsentToAllCookies()) {\r\n //Preventing redirect\r\n event.preventDefault();\r\n\r\n CookieConsentService.showConsentModal();\r\n }\r\n}\r\n\r\n//document.getElementById(\"basketLink\").addEventListener(ConsentBinding);\r\n//document.getElementById(\"accountLoginLink\").addEventListener(ConsentBinding);\r\n\r\n//End - cookie consent bindings\r\nconst deleteCookie = (name) => {\r\n document.cookie = name + \"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\r\n};\r\n\r\nfunction getCookie(cookieName) {\r\n let cookie = {};\r\n document.cookie.split(';').forEach(function (el) {\r\n let [key, value] = el.split('=');\r\n cookie[key.trim()] = value;\r\n })\r\n return cookie[cookieName];\r\n}\r\n\r\nfunction setCookie(name, value, days) {\r\n var expires = \"\";\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n}\r\n\r\n\r\n\r\nexport { CookieConsentService }\r\n\r\n","var elements = document.getElementsByClassName(\"product-card\");\r\nvar productDetailsEl = document.getElementsByClassName(\"pdp-basket\").item(0);\r\n\r\nvar pushEnhancedEcommerce = function () {\r\n pushEcommerce();\r\n}\r\n\r\nfunction getProductDetails() {\r\n if (productDetailsEl) {\r\n return getProductDetailObj(productDetailsEl);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction getProductDetailObj(el) {\r\n var productObj =\r\n {\r\n 'name': el.getAttribute(\"data-name\"),\r\n 'id': el.getAttribute(\"data-google-product-id\")\r\n ?? el.getAttribute(\"data-product-id\")\r\n ?? el.getAttribute(\"data-id\"),\r\n 'internalId': el.getAttribute(\"data-product-id\") ?? el.getAttribute(\"data-id\"),\r\n 'price': el.getAttribute(\"data-price\"),\r\n 'brand': el.getAttribute(\"data-brand\"),\r\n 'category': el.getAttribute(\"data-category\")\r\n };\r\n\r\n return productObj;\r\n}\r\n\r\nfunction getProductObj(el) {\r\n var productObj =\r\n {\r\n 'name': el.getAttribute(\"data-name\"),\r\n 'id': el.getAttribute(\"data-google-product-id\") \r\n ?? el.getAttribute(\"data-product-id\")\r\n ?? el.getAttribute(\"data-id\"),\r\n 'internalId': el.getAttribute(\"data-product-id\") ?? el.getAttribute(\"data-id\"),\r\n 'price': el.getAttribute(\"data-price\"),\r\n 'brand': el.getAttribute(\"data-brand\"),\r\n 'category': el.getAttribute(\"data-category\"),\r\n 'position': el.getAttribute(\"data-position\"),\r\n 'list': el.getAttribute(\"data-list\")\r\n };\r\n\r\n return productObj;\r\n}\r\n\r\nfunction pushEcommerce() {\r\n var products = getProducts();\r\n var promotions = getPromotions();\r\n var productDetails = getProductDetails();\r\n\r\n var ecommerceObj = {\r\n ecommerce: {\r\n currencyCode: 'GBP'\r\n },\r\n }\r\n\r\n if (products.length > 0) {\r\n ecommerceObj.ecommerce.eec = {\r\n impressionView: { products }\r\n };\r\n }\r\n\r\n if (promotions.length > 0) {\r\n ecommerceObj.ecommerce.eec.promoView = {\r\n promoView: { promotions: promotions }\r\n };\r\n }\r\n\r\n if (productDetails != null) {\r\n ecommerceObj.ecommerce.eec = {\r\n detail: { products: [productDetails] }\r\n };\r\n }\r\n\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(ecommerceObj);\r\n}\r\n\r\nfunction getProducts() {\r\n var products = [];\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n elements[i].addEventListener('click', onProductClick);\r\n\r\n products.push(getProductObj(elements[i]));\r\n }\r\n\r\n return products;\r\n}\r\n\r\nfunction onProductClick(e) {\r\n e.preventDefault();\r\n\r\n var el = e.currentTarget;\r\n var productObj = getProductObj(el);\r\n var productUrl = el.getAttribute(\"href\");\r\n\r\n pushProductClick(productObj, productUrl);\r\n}\r\n\r\nfunction getPromotions() {\r\n var banners = document.querySelector('a.hero-banner');\r\n var promotionsObj = [];\r\n\r\n if (banners) {\r\n for (var i = 0; i < banners.length; i++) {\r\n banners[i].addEventListener('click', onBannerClick);\r\n\r\n promotionsObj.push(getPromotionObj(banners[i]));\r\n }\r\n }\r\n\r\n return promotionsObj;\r\n}\r\n\r\nfunction onBannerClick(e) {\r\n e.preventDefault();\r\n\r\n var el = e.currentTarget;\r\n var promotionObj = getPromotionObj(el);\r\n\r\n onPromoClick(promotionObj);\r\n}\r\n\r\nfunction getPromotionObj(el) {\r\n var promotionObj =\r\n {\r\n 'id': el.getAttribute(\"data-id\"),\r\n 'name': el.getAttribute(\"data-name\"),\r\n 'creative': el.getAttribute(\"data-creative\"),\r\n 'position': el.getAttribute(\"data-position\"),\r\n 'destinationUrl': el.getAttribute(\"href\")\r\n }\r\n\r\n return promotionObj;\r\n}\r\n\r\nfunction onPromoClick(promoObj) {\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n 'event': 'eec.promoClick',\r\n 'ecommerce': {\r\n 'promoClick': {\r\n 'promotions': [promoObj]\r\n }\r\n }\r\n });\r\n\r\n document.location = promoObj.destinationUrl;\r\n\r\n}\r\n\r\nfunction pushProductClick(productObj, productUrl) {\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.productClick',\r\n 'ecommerce': {\r\n 'click': {\r\n 'products': [productObj]\r\n }\r\n }\r\n });\r\n\r\n if (productUrl)\r\n document.location = productUrl;\r\n}\r\n\r\nfunction pushAddToCart(productId, quantity = 1) {\r\n var product = getProductsToAddRemove(productId);\r\n product.quantity = quantity;\r\n\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.addToCart',\r\n 'ecommerce': {\r\n 'add': {\r\n 'products': [product]\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction getProductsToAddRemove(productId) {\r\n var productContainer = document.querySelector(`[data-id=\"${productId}\"]`);\r\n\r\n if (!productContainer)\r\n productContainer = document.querySelector(`[data-product-id='${productId}']`);\r\n\r\n if (!productContainer)\r\n return;\r\n\r\n return getProductDetailObj(productContainer);\r\n}\r\n\r\nfunction pushRemoveFromCart(productId, quantity = 1) {\r\n var product = getProductsToAddRemove(productId);\r\n product.quantity = quantity;\r\n\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.removeFromCart',\r\n 'ecommerce': {\r\n 'remove': {\r\n 'products': [product]\r\n }\r\n }\r\n });\r\n\r\n}\r\n\r\nfunction getCheckoutProducts() {\r\n var products = [];\r\n var el = document.getElementsByClassName(\"basket-item\");\r\n\r\n for (var i = 0; i < el.length; i++) {\r\n products.push(getProductDetailObj(el[i]));\r\n }\r\n\r\n return products;\r\n}\r\n\r\nfunction getBasketItems(step, option, basketItemsURL) {\r\n fetch(basketItemsURL, {\r\n method: \"POST\"\r\n }).then(response => response.json())\r\n .then(function (result) {\r\n var products = result.basketVm.Items;\r\n var basketContainer = document.getElementById(\"basketItemsContainer\");\r\n var ulElemen = document.createElement(\"ul\")\r\n var liElem = \"\";\r\n\r\n if (products) {\r\n products.forEach(function (item) {\r\n liElem +=\r\n `
  • \r\n
  • `\r\n });\r\n }\r\n\r\n ulElemen.innerHTML = liElem;\r\n basketContainer.append(ulElemen);\r\n pushCheckout(step, option);\r\n });\r\n}\r\n\r\nfunction onCheckout(step, option, basketItemsURL) {\r\n if (basketItemsURL) {\r\n getBasketItems(step, option, basketItemsURL);\r\n }\r\n else {\r\n pushCheckout(step, option);\r\n }\r\n}\r\n\r\nfunction pushCheckout(step, option) {\r\n var products = getCheckoutProducts();\r\n dataLayer.push({ ecommerce: null });\r\n\r\n var ecommerceObj = {\r\n event: 'eec.checkout',\r\n ecommerce: {\r\n checkout: {\r\n actionField: { step: step },\r\n }\r\n }\r\n }\r\n\r\n if (products && products.length > 0)\r\n ecommerceObj.ecommerce.checkout.products = products;\r\n\r\n if (option)\r\n ecommerceObj.ecommerce.checkout.actionField.option = option.toLowerCase();\r\n\r\n dataLayer.push(ecommerceObj);\r\n}\r\n\r\nfunction onCheckoutOption(step, checkoutOption) {\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'checkoutOption',\r\n 'ecommerce': {\r\n 'checkout_option': {\r\n 'actionField': { 'step': step, 'option': checkoutOption }\r\n }\r\n }\r\n });\r\n}\r\n\r\n\r\nfunction pushProductView() {\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.detail',\r\n 'ecommerce': {\r\n 'detail': {\r\n 'products': [getProductDetailObj(productDetailsEl)]\r\n }\r\n }\r\n });\r\n}\r\n\r\nwindow.onload = function () {\r\n pushEcommerce();\r\n}\r\n\r\nexport { pushEnhancedEcommerce, pushAddToCart, pushRemoveFromCart, onCheckout, onCheckoutOption, pushProductView };","export function getFormattedPrice(myPrice, symbol, conversionRate) {\r\n var xPrice = parseFloat(myPrice);\r\n var formattedPrice = \"\";\r\n if (xPrice > 0) {\r\n formattedPrice = numberToCurrency(xPrice, symbol, conversionRate);\r\n }\r\n else {\r\n formattedPrice = \"FREE\";\r\n }\r\n return formattedPrice;\r\n};\r\n\r\nexport function numberToCurrency(number, symbol, conversionRate) {\r\n return symbol + (number * conversionRate).toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,');\r\n};","var GoogleScriptsService = {\r\n addTagManager: function (id) {\r\n addScriptOnHead(`(function (w, d, s, l, i) {\r\n w[l] = w[l] || []; w[l].push({\r\n 'gtm.start':\r\n new Date().getTime(), event: 'gtm.js'\r\n }); var f = d.getElementsByTagName(s)[0],\r\n j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =\r\n '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);\r\n })(window, document, 'script', 'dataLayer', '${id}');`);\r\n },\r\n addOptmise: function (analyticsId, optmiseId) {\r\n //addScriptOnHead(`(function (i, s, o, g, r, a, m) {\r\n // i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {\r\n // (i[r].q = i[r].q || []).push(arguments)\r\n // }, i[r].l = 1 * new Date(); a = s.createElement(o),\r\n // m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)\r\n //})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\r\n\r\n //ga('create', '${analyticsId}', 'auto');\r\n //ga('require', '${optmiseId}');`);\r\n },\r\n addConversionPage: function (paymentAmount) {\r\n addScriptOnBody(`gtag('event', 'conversion', {\r\n 'send_to': 'AW-1071972399/zlivCL7EpLoBEK-AlP8D',\r\n 'value': ${paymentAmount},\r\n 'currency': 'GBP',\r\n 'transaction_id': ''\r\n });`);\r\n },\r\n //commented as it was causing page flickers\r\n addAntiFlicker: function (id) {\r\n //addScriptOnHead(`(function(a,s,y,n,c,h,i,d,e){s.className += ' ' + y; h.start=1*new Date;\r\n // h.end=i=function(){s.className = s.className.replace(RegExp(' ?' + y), '')};\r\n // (a[n]=a[n]||[]).hide=h;setTimeout(function(){i(); h.end=null},c);h.timeout=c;\r\n // })(window,document.documentElement,'async-hide','dataLayer',4000,{'${id}': true});`);\r\n },\r\n consentGranted: function () {\r\n gtag('consent', 'update', {\r\n 'ad_storage': 'granted',\r\n 'analytics_storage': 'granted',\r\n 'security_storage': 'granted'\r\n });\r\n\r\n addScriptOnHead(`window.dataLayer.push({\r\n 'event': 'cookieConsent',\r\n 'consentStatus': true\r\n })`);\r\n\r\n },\r\n consentRevoked: function () {\r\n gtag('consent', 'update', {\r\n 'ad_storage': 'denied',\r\n 'analytics_storage': 'denied',\r\n 'security_storage': 'granted'\r\n });\r\n\r\n addScriptOnHead(`window.dataLayer.push({\r\n 'event': 'cookieConsent',\r\n 'consentStatus': false\r\n })`);\r\n\r\n },\r\n pushEvent: function (event) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(event);\r\n }\r\n}\r\n\r\nvar FacebookScriptsService = {\r\n addFacebookTracking: function (isSearch) {\r\n addScriptOnBodyTop(`!function (f, b, e, v, n, t, s) {\r\n if (f.fbq) return; n = f.fbq = function () {\r\n n.callMethod ?\r\n n.callMethod.apply(n, arguments) : n.queue.push(arguments)\r\n };\r\n if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0';\r\n n.queue = []; t = b.createElement(e); t.async = !0;\r\n t.src = v; s = b.getElementsByTagName(e)[0];\r\n s.parentNode.insertBefore(t, s)\r\n }(window, document, 'script',\r\n 'https://connect.facebook.net/en_US/fbevents.js');\r\n fbq('init', '1755089831374739');\r\n fbq('track', 'PageView');`);\r\n },\r\n addFacebookEvent: function (event) {\r\n addScriptOnBody(`fbq('track', '${event}');`);\r\n },\r\n getFbq: function () {\r\n return fbq;\r\n }\r\n}\r\n\r\nvar BingScriptsService = {\r\n addBingTracking: function () {\r\n addScriptOnBody(`(function (w, d, t, r, u) { var f, n, i; w[u] = w[u] || [], f = function () { var o = { ti: \"5296147\" }; \r\n o.q = w[u], w[u] = new UET(o), w[u].push(\"pageLoad\") }, n = d.createElement(t), n.src = r, n.async = 1, n.onload = n.onreadystatechange = function () {\r\n var s = this.readyState; s && s !== \"loaded\" && s !== \"complete\" || (f(), n.onload = n.onreadystatechange = null) }, i = d.getElementsByTagName(t)[0], i.parentNode.insertBefore(n, i)\r\n })(window, document, \"script\", \"//bat.bing.com/bat.js\", \"uetq\");`)\r\n }\r\n}\r\n\r\nvar addScriptOnHead = function (script) {\r\n document.head.appendChild(createScriptElement(script));\r\n}\r\n\r\nvar addScriptOnBody = function (script) {\r\n document.body.appendChild(createScriptElement(script));\r\n}\r\n\r\n\r\nvar addScriptOnBodyTop = function (script) {\r\n document.body.insertBefore(createScriptElement(script), document.body.firstChild);\r\n}\r\n\r\nfunction createScriptElement(script) {\r\n var addDataLayer = document.createElement(\"script\");\r\n\r\n var dataLayerData = document.createTextNode(script);\r\n\r\n addDataLayer.appendChild(dataLayerData);\r\n return addDataLayer;\r\n}\r\n\r\nexport { GoogleScriptsService, FacebookScriptsService, BingScriptsService }","/*! tabbyjs v12.0.1 | (c) 2019 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/tabby */\nElement.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.Tabby=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={idPrefix:\"tabby-toggle_\",default:\"[data-tabby-default]\"},r=function(e){if(e&&\"true\"!=e.getAttribute(\"aria-selected\")){var t=document.querySelector(e.hash);t&&(function(e){var t=e.closest('[role=\"tablist\"]');if(t){var r=t.querySelector('[role=\"tab\"][aria-selected=\"true\"]');if(r){var o=document.querySelector(r.hash);r.setAttribute(\"aria-selected\",\"false\"),r.setAttribute(\"tabindex\",\"-1\"),o&&o.setAttribute(\"hidden\",\"hidden\")}}}(e),(function(e,t){e.setAttribute(\"aria-selected\",\"true\"),e.setAttribute(\"tabindex\",\"0\"),t.removeAttribute(\"hidden\"),e.focus()})(e,t),(function(e,t){var r=new CustomEvent(\"tabby\",{bubbles:!0,cancelable:!0,detail:{tab:e,content:t}});e.dispatchEvent(r)})(e,t))}},o=function(e,t){var o=(function(e){var t=e.closest('[role=\"tablist\"]'),r=t?t.querySelectorAll('[role=\"tab\"]'):null;if(r)return{tabs:r,index:Array.prototype.indexOf.call(r,e)}})(e);if(o){var n,i=o.tabs.length-1;[\"ArrowUp\",\"ArrowLeft\",\"Up\",\"Left\"].indexOf(t)>-1?n=o.index<1?i:o.index-1:[\"ArrowDown\",\"ArrowRight\",\"Down\",\"Right\"].indexOf(t)>-1?n=o.index===i?0:o.index+1:\"Home\"===t?n=0:\"End\"===t&&(n=i),r(o.tabs[n])}};return function(n,i){var a,l,u={};u.destroy=function(){var e=l.querySelectorAll(\"a\");Array.prototype.forEach.call(e,(function(e){var t=document.querySelector(e.hash);t&&(function(e,t,r){e.id.slice(0,r.idPrefix.length)===r.idPrefix&&(e.id=\"\"),e.removeAttribute(\"role\"),e.removeAttribute(\"aria-controls\"),e.removeAttribute(\"aria-selected\"),e.removeAttribute(\"tabindex\"),e.closest(\"li\").removeAttribute(\"role\"),t.removeAttribute(\"role\"),t.removeAttribute(\"aria-labelledby\"),t.removeAttribute(\"hidden\")})(e,t,a)})),l.removeAttribute(\"role\"),document.documentElement.removeEventListener(\"click\",c,!0),l.removeEventListener(\"keydown\",d,!0),a=null,l=null},u.setup=function(){if(l=document.querySelector(n)){var e=l.querySelectorAll(\"a\");l.setAttribute(\"role\",\"tablist\"),Array.prototype.forEach.call(e,(function(e){var t=document.querySelector(e.hash);t&&(function(e,t,r){e.id||(e.id=r.idPrefix+t.id),e.setAttribute(\"role\",\"tab\"),e.setAttribute(\"aria-controls\",t.id),e.closest(\"li\").setAttribute(\"role\",\"presentation\"),t.setAttribute(\"role\",\"tabpanel\"),t.setAttribute(\"aria-labelledby\",e.id),e.matches(r.default)?e.setAttribute(\"aria-selected\",\"true\"):(e.setAttribute(\"aria-selected\",\"false\"),e.setAttribute(\"tabindex\",\"-1\"),t.setAttribute(\"hidden\",\"hidden\"))})(e,t,a)}))}},u.toggle=function(e){var t=e;\"string\"==typeof e&&(t=document.querySelector(n+' [role=\"tab\"][href*=\"'+e+'\"]')),r(t)};var c=function(e){var t=e.target.closest(n+' [role=\"tab\"]');t&&(e.preventDefault(),r(t))},d=function(e){var t=document.activeElement;t.matches(n+' [role=\"tab\"]')&&([\"ArrowUp\",\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\",\"Up\",\"Down\",\"Left\",\"Right\",\"Home\",\"End\"].indexOf(e.key)<0||o(t,e.key))};return a=(function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var r in t){if(!t.hasOwnProperty(r))return;e[r]=t[r]}})),e})(t,i||{}),u.setup(),(function(t){if(!(e.location.hash.length<1)){var o=document.querySelector(t+' [role=\"tab\"][href*=\"'+e.location.hash+'\"]');r(o)}})(n),document.documentElement.addEventListener(\"click\",c,!0),l.addEventListener(\"keydown\",d,!0),u}}));","import Utils from './utils';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\ndeclare var globalParms: any;\r\n\r\n/**********************************\r\n* Mega Menu Functions \r\n**********************************/\r\n\r\nfunction getElementIndex(node: HTMLElement): number {\r\n var index = 0;\r\n while ((node = node.previousElementSibling as HTMLElement)) {\r\n index++;\r\n }\r\n return index;\r\n}\r\n\r\n//Initialise menu\r\nfunction initMenu(menu: any): void {\r\n //Only load the initial menu for desktop\r\n if (screen.width > 1023) {\r\n menu.setAttribute('data-display', 'd');\r\n var level2 = document.querySelectorAll('[data-navLevel = \"2\"]')[0];\r\n if (level2) {\r\n level2.querySelector('.category-column > ul > li:first-child')?.setAttribute('data-hovered', 'true')\r\n level2.querySelector('.category-column > ul > li:first-child button')?.setAttribute('aria-expanded', 'true');\r\n level2.querySelectorAll('.category-column-sub')[0].setAttribute('data-active', 'true');\r\n }\r\n }\r\n else {\r\n menu.setAttribute('data-display', 'm');\r\n }\r\n}\r\n\r\n//Reset menu\r\nfunction resetMenu(menu: any): void {\r\n menu.querySelectorAll('[aria-expanded]').forEach(function (item: any) {\r\n item.setAttribute('aria-expanded', 'false');\r\n });\r\n menu.querySelectorAll('[data-active]:not([data-navlevel=\"3\"])').forEach(function (item: any) {\r\n item.setAttribute('data-active', 'false');\r\n });\r\n menu.querySelectorAll('[data-hovered]').forEach(function (item: any) {\r\n item.setAttribute('data-hovered', 'false');\r\n });\r\n menu.querySelectorAll('.active').forEach(function (item: any) {\r\n item.classList.remove('active');\r\n });\r\n\r\n initMenu(menu);\r\n}\r\n\r\n//action: on|off\r\nfunction onOffItems(element: HTMLElement, action: string): void {\r\n element.setAttribute('aria-expanded', (action === \"on\") ? 'true' : 'false');\r\n if (action === \"on\") {\r\n element.parentElement?.classList.add('active');\r\n } else {\r\n element.parentElement?.classList.remove('active');\r\n }\r\n\r\n element.nextElementSibling?.setAttribute('data-active', (action === \"on\") ? 'true' : 'false');\r\n}\r\n\r\nfunction handleMobileMenu(this: HTMLElement) {\r\n var expanded = this.getAttribute('aria-expanded');\r\n var body = document.body;\r\n if (expanded == \"false\") {\r\n this.setAttribute('aria-expanded', \"true\");\r\n document.querySelector('header.site-head')?.setAttribute('data-mobile-toggled', \"true\");\r\n body.classList.add(\"menu-open\");\r\n } else {\r\n this.setAttribute('aria-expanded', \"false\");\r\n document.querySelector('header.site-head')?.setAttribute('data-mobile-toggled', \"false\");\r\n body.classList.remove(\"menu-open\");\r\n //TODO: what are we resetting? resetMenu();\r\n }\r\n}\r\n\r\nfunction closeMobileMenu() {\r\n var body = document.body;\r\n document.querySelector('button.mobile-menu')?.setAttribute('aria-expanded', \"false\");\r\n document.querySelector('header.site-head')?.setAttribute('data-mobile-toggled', \"false\");\r\n body.classList.remove(\"menu-open\");\r\n // handleMobileMenu;\r\n}\r\n\r\n// Standard offset.top not working properly: https://medium.com/@alexcambose/js-offsettop-property-is-not-great-and-here-is-why-b79842ef7582\r\nfunction getOffsetTop(element: any) {\r\n let offsetTop = 0;\r\n let parentElem = element;\r\n while (parentElem) {\r\n offsetTop += parentElem.offsetTop;\r\n parentElem = parentElem.offsetParent;\r\n }\r\n return offsetTop;\r\n}\r\n\r\n//we have js\r\nif (document.documentElement.classList.contains('no-js')) {\r\n document.documentElement.classList.remove('no-js');\r\n document.documentElement.classList.add('js');\r\n\r\n if (document.getElementsByClassName('site-head').length) {\r\n\r\n var menu = document.querySelector('#primary-navigation');\r\n\r\n if (menu) {\r\n\r\n initMenu(menu);\r\n\r\n //TODO - add debounce - resize init();\r\n //window.addEventListener('resize', function (e) {\r\n // if (screen.width > 1023 && menu.getAttribute('data-display') != \"d\") {\r\n // resetMenu(menu);\r\n // }\r\n // else if (screen.width <= 1023 && menu.getAttribute('data-display') != \"m\") {\r\n // resetMenu(menu);\r\n // }\r\n //});\r\n\r\n //Main menu click event\r\n menu.addEventListener('click', function (e) {\r\n let clickElement = e.srcElement;\r\n if ((clickElement as HTMLElement).tagName.toLowerCase() == 'span' || (clickElement as HTMLElement).tagName.toLowerCase() == 'svg') {\r\n clickElement = (clickElement as HTMLElement)?.closest('button')\r\n }\r\n if ((clickElement as HTMLElement)?.classList.contains('cat-link')) {\r\n var level = (clickElement as HTMLElement)?.closest('[data-navLevel]')?.getAttribute(\"data-navLevel\");\r\n if (level != \"2\") {\r\n //Simple toggle\r\n if ((clickElement as HTMLElement)?.getAttribute('aria-expanded') == \"false\") {\r\n //Switch off any items that are active\r\n var activeItemLevel = document.querySelector('[data-navLevel = \"' + level + '\"]');\r\n var activeItems = activeItemLevel?.querySelectorAll('button[aria-expanded=\"true\"]');\r\n for (var i = 0, max = activeItems?.length; i < (max ? max : 0); i++) {\r\n if (activeItems != null && activeItems[i]?.closest('[data-navLevel]')?.getAttribute(\"data-navLevel\") == level) {\r\n onOffItems(activeItems[i] as HTMLElement, 'off');\r\n }\r\n }\r\n onOffItems((clickElement as HTMLElement), 'on');\r\n }\r\n else {\r\n onOffItems((clickElement as HTMLElement), 'off');\r\n }\r\n }\r\n else {\r\n //Level 2 items\r\n var index = getElementIndex((clickElement as HTMLElement)?.parentElement as HTMLElement);\r\n var menuSubs = document.querySelectorAll('.category-column-sub');\r\n\r\n var menuSub = null;\r\n for (var i = 0, max1 = menuSubs.length; i < max1; i++) {\r\n if (index == i) {\r\n menuSub = menuSubs[i];\r\n }\r\n }\r\n if ((clickElement as HTMLElement).getAttribute('aria-expanded') == \"false\") {\r\n //Switch off any active items first\r\n var activeItem = document.querySelector('.category-column ul li[data-hovered=\"true\"]');\r\n if (activeItem !== null) {\r\n var activeItemIndex = getElementIndex(activeItem as HTMLElement);\r\n activeItem.setAttribute('data-hovered', 'false');//li\r\n activeItem.querySelector('button')?.setAttribute('aria-expanded', 'false');//button\r\n var menuSubOff = null;\r\n for (var i = 0, max2 = menuSubs.length; i < max2; i++) {\r\n if (activeItemIndex == i) {\r\n menuSubOff = menuSubs[i];\r\n }\r\n }\r\n menuSubOff?.setAttribute('data-active', 'false');\r\n }\r\n (clickElement as HTMLElement).setAttribute('aria-expanded', 'true');\r\n (clickElement as HTMLElement).parentElement?.setAttribute('data-hovered', 'true');\r\n menuSub?.setAttribute('data-active', 'true');\r\n }\r\n }\r\n }\r\n else {\r\n // if non .cat-link\r\n if ((clickElement as HTMLElement).closest('[data-navLevel]')?.getAttribute(\"data-navLevel\") == \"1\") {\r\n resetMenu(menu);\r\n }\r\n }\r\n\r\n });\r\n\r\n //Close menu when user clicks outside\r\n document.addEventListener('click', function (e) {\r\n // This closes menu on click outside\r\n let target = e.target;\r\n if (menu && target && !menu.contains(target as HTMLElement)) {\r\n resetMenu(menu);\r\n }\r\n });\r\n\r\n //TODO // key functions for keyboard navigation\r\n //var level2MenuCatColumns = menu.querySelectorAll('.category-column');\r\n //for (var i = 0, max = level2MenuCatColumns.length; i < max; i++) {\r\n // var level2MenuCatColumn = level2MenuCatColumns[i];\r\n // level2MenuCatColumn.addEventListener('keyup', function (e) {\r\n // if ((e as Event).key == \"Enter\") {\r\n // console.log(e.srcElement);\r\n // var firstElementSub = document.querySelectorAll('.category-column-sub[data-active=\"true\"] ul li a')[0];\r\n // firstElementSub.focus();\r\n // }\r\n // });\r\n //}\r\n\r\n var level2MenuSub = menu.querySelectorAll('.category-column-sub');\r\n let max = level2MenuSub.length;\r\n for (var i = 0; i < max; i++) {\r\n var level2MenuSubAnchors = level2MenuSub[i].querySelectorAll('a');\r\n let max2 = level2MenuSubAnchors.length;\r\n for (var b = 0; b < max2; b++) {\r\n if (b + 1 == max2) {\r\n level2MenuSubAnchors[b].addEventListener('keydown', function (e) {\r\n if (e.keyCode == 9) {\r\n menu?.querySelector('.category-column li[data-hovered=\"true\"]')?.querySelector('button')?.focus();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n //Breadcrumb functions\r\n var breadcrumbButtons = menu.querySelectorAll('.breadcrumb .parent-page');\r\n var maxBreadcrumbs = breadcrumbButtons.length;\r\n for (var i = 0; i < maxBreadcrumbs; i++) {\r\n breadcrumbButtons[i].addEventListener('click', function (e) {\r\n var navLevelElm = (e.srcElement as HTMLElement).closest('[data-navlevel]') as HTMLElement;\r\n var navLevel = navLevelElm.getAttribute('data-navlevel');\r\n if (navLevel && parseInt(navLevel) != 2) {\r\n navLevelElm = navLevelElm.closest('li') as HTMLElement;\r\n navLevelElm.setAttribute('class', 'false');\r\n }\r\n else {\r\n navLevelElm.setAttribute('data-active', 'false');\r\n }\r\n\r\n navLevelElm.querySelectorAll('[aria-expanded]').forEach(function (item: any) {\r\n item.setAttribute('aria-expanded', 'false');\r\n });\r\n navLevelElm.querySelectorAll('[data-active]:not([data-navlevel=\"3\"])').forEach(function (item: any) {\r\n item.setAttribute('data-active', 'false');\r\n });\r\n navLevelElm.querySelectorAll('[data-hovered]').forEach(function (item: any) {\r\n item.setAttribute('data-hovered', 'false');\r\n });\r\n navLevelElm.querySelectorAll('.active').forEach(function (item: any) {\r\n item.classList.remove('active');\r\n });\r\n\r\n if (navLevel && parseInt(navLevel) == 2) {\r\n //Go up a level and switch off the button that opened the level\r\n var navLevelElmUp1 = navLevelElm.closest('[data-navlevel=\"' + (parseInt(navLevel) - 1) + '\"]');\r\n var navLevelElmUp1Button = navLevelElmUp1?.querySelector('button[aria-expanded=\"true\"]');\r\n if (navLevelElmUp1Button != null) {\r\n navLevelElmUp1Button.setAttribute('aria-expanded', 'false');\r\n }\r\n }\r\n });\r\n }\r\n\r\n //Mobile menu functions\r\n var mobilemenu = document.querySelector('button.mobile-menu');\r\n mobilemenu?.addEventListener(\"click\", handleMobileMenu); \r\n\r\n var mobilebg = document.querySelector('.mobile-background');\r\n mobilebg?.addEventListener(\"click\", closeMobileMenu);\r\n\r\n var tertiarynav = document.querySelector('.tertiary-nav');\r\n if (tertiarynav && mobilemenu && mobilebg) {\r\n var primarynav = document.getElementById('nav-container');\r\n if (primarynav) {\r\n primarynav.style.top = \"81px\";\r\n }\r\n (mobilebg as HTMLElement).style.top = \"81px\";\r\n }\r\n }\r\n\r\n ///////////////////////////////////////////////////////////////////\r\n // Sticky search bar on mobile //\r\n ///////////////////////////////////////////////////////////////////\r\n\r\n var sh = document.querySelector(\".site-head\");\r\n var h = document.querySelector(\".search-container\");\r\n var stuck = false;\r\n var stickPoint = getOffsetTop(h);\r\n\r\n window.onscroll = function (e) {\r\n var offset = window.pageYOffset;\r\n\r\n if (!stuck && offset > stickPoint) {\r\n if (h) h.classList.add('stuck');\r\n if (sh) sh.classList.add('stuck');\r\n stuck = true;\r\n } else if (stuck && offset <= stickPoint) {\r\n if (h) h.classList.remove('stuck');;\r\n if (sh) sh.classList.remove('stuck');\r\n stuck = false\r\n }\r\n }\r\n }\r\n\r\n /*toggles, used in mobile footer used in all pages*/\r\n var ToggleButtons = document.querySelectorAll('[data-toggle-parent]');\r\n if (ToggleButtons.length) {\r\n ToggleButtons.forEach(function (toggle) {\r\n if (!toggle.classList.contains('click-bound')) {\r\n toggle.classList.add('click-bound');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (elem.getAttribute('aria-expanded') == \"false\") {\r\n elem.setAttribute('aria-expanded', 'true')\r\n }\r\n else {\r\n elem.setAttribute('aria-expanded', 'false');\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n\r\n\r\n\r\n var loginPartial = document.querySelector(\".loginPartial\");\r\n var loginPartialMobile = document.getElementById(\"sign-in-mobile\");\r\n\r\n if (loginPartial) {\r\n if (globalParms && globalParms.LoginPartialURL) {\r\n fetch(globalParms.LoginPartialURL)\r\n .then(response => response.text())\r\n .then(function (data) {\r\n if (data && loginPartial) {\r\n loginPartial.innerHTML = data;\r\n }\r\n if (data && loginPartialMobile) {\r\n loginPartialMobile.innerHTML = data;\r\n }\r\n });\r\n }\r\n }\r\n\r\n var accountLinks = document.querySelector(\".account-links\");\r\n\r\n if (accountLinks) {\r\n if (globalParms && globalParms.AccountLinksURL) {\r\n fetch(globalParms.AccountLinksURL)\r\n .then(response => response.text())\r\n .then(function (data) {\r\n if (data && accountLinks) {\r\n accountLinks.innerHTML = data;\r\n var basketButton = document.getElementById(\"basketButton\");\r\n if (basketButton) {\r\n basketButton.addEventListener(\"click\", function () {\r\n window.location.href = basketButton!.getAttribute(\"data-url\")!;\r\n });\r\n\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n initLightYouTube();\r\n\r\n document.addEventListener('DOMContentLoaded', function () {\r\n let mainNavContainers = document.querySelectorAll('#nav-container ul li div[data-navlevel=\"2\"]')\r\n let navHeight = 0;\r\n for (let i = 0; i < mainNavContainers.length; i++) { \r\n let elemHeight = window.getComputedStyle(mainNavContainers[i]).getPropertyValue(\"height\");\r\n if (Number(elemHeight.replace('px','')) > navHeight) {\r\n navHeight = Number(elemHeight.replace('px',''));\r\n }\r\n }\r\n let mainContent = document.getElementById('main-content');\r\n if (mainContent) {\r\n mainContent.style.minHeight = (navHeight - 86) + 'px';\r\n }\r\n });\r\n}\r\n\r\nexport function ShoppingBasket_UpdateItemCount() {\r\n var itemCount = document.querySelector(\".basket--link span.item-count\");\r\n\r\n if (itemCount != null) {\r\n try {\r\n var cookie = Utils.getCookie(ShoppingBasketParms.CookieKey);\r\n if (cookie) {\r\n var basketDataJSON = JSON.parse(unescape(cookie));\r\n\r\n itemCount.innerHTML = basketDataJSON.NumberOfItems;\r\n\r\n } else {\r\n itemCount.innerHTML = \"0\";\r\n }\r\n }\r\n catch (err) { console.log(err) }\r\n }\r\n}\r\n\r\n/* Light YouTube Embeds by @labnol */\r\n/* and img lazy loads */\r\n/* Web: http://labnol.org/?p=27941 */\r\n\r\nfunction initLightYouTube() {\r\n var div, n,\r\n v = document.getElementsByClassName(\"youtube-player\");\r\n for (n = 0; n < v.length; n++) {\r\n div = document.createElement(\"div\");\r\n div.setAttribute(\"data-id\", (v[n] as any).dataset.id);\r\n div.innerHTML = labnolThumb((v[n] as any).dataset.id);\r\n div.onclick = labnolIframe;\r\n v[n].appendChild(div);\r\n }\r\n loadLazyImages();\r\n\r\n function labnolThumb(id: string) {\r\n var thumb = '', //hqdefault\r\n play = '
    ';\r\n return thumb.replace(\"ID\", id) + play;\r\n }\r\n\r\n function labnolIframe(evt: Event) {\r\n let target = (evt.target as HTMLElement).parentNode;\r\n if (target) {\r\n var iframe = document.createElement(\"iframe\");\r\n var embed = \"https://www.youtube.com/embed/ID?autoplay=1\";\r\n let dataID = (target as HTMLElement).getAttribute(\"data-id\");\r\n if (dataID) iframe.setAttribute(\"src\", embed.replace(\"ID\", dataID as string));\r\n iframe.setAttribute(\"frameborder\", \"0\");\r\n iframe.setAttribute(\"allowfullscreen\", \"1\");\r\n let parent = (target as HTMLElement).parentElement;\r\n if (parent) parent.replaceChild(iframe, target);\r\n }\r\n }\r\n\r\n // Lazy-load images. Observe images until they are loaded.\r\n function loadLazyImages() {\r\n var lazyLoadOptions = {\r\n // https://www.competa.com/blog/lazy-loading-with-the-intersection-observer/\r\n //root: document.querySelector('div.gak-container'), // Comment this to use the default browser's viewport.\r\n rootMargin: '25px',\r\n threshold: 0//1.0\r\n };\r\n\r\n //initImagesForProductListings();\r\n\r\n var myImgs = document.querySelectorAll('img[lazy-src]');\r\n try {\r\n var observer = new IntersectionObserver(function (entries) {\r\n //console.log('loadLazyImages: entries ' + entries.length);\r\n entries.forEach(function (entry) {\r\n if (entry.isIntersecting) {\r\n // Load image\r\n var imgElem = entry.target;\r\n loadLazyImages_doImage(imgElem as HTMLElement);\r\n //console.log('in the view');\r\n observer.unobserve(imgElem);\r\n } else {\r\n //console.log('out of view');\r\n }\r\n });\r\n }, lazyLoadOptions);\r\n\r\n myImgs.forEach(function (image) {\r\n observer.observe(image);\r\n });\r\n }\r\n catch (err) {\r\n loadLazyImages_notSupported(myImgs);\r\n }\r\n\r\n function loadLazyImages_notSupported(myImgs: any) {\r\n // IntersectionObserver (and forEach()) not supported on Safari and old versions of IE 28/01/2019.\r\n //console.log(\"lazy load images not supported\");\r\n for (var i = 0, len = myImgs.length; i < len; i++) {\r\n loadLazyImages_doImage(myImgs[i]);\r\n }\r\n }\r\n\r\n function loadLazyImages_doImage(imgElem: HTMLElement) {\r\n setTimeout(function () {\r\n var realSrc = imgElem.getAttribute(\"lazy-src\"); //$(imgElem).attr(\"lazy-src\");\r\n if (realSrc) {\r\n imgElem.setAttribute(\"src\", realSrc); //.src = realSrc;\r\n imgElem.removeAttribute(\"lazy-src\"); //$(imgElem).removeAttr(\"lazy-src\");\r\n }\r\n }, 1);\r\n }\r\n\r\n //function initImagesForProductListings() {\r\n // $('ul.productListing').each(function (index) {\r\n // var curProdList = $(this);\r\n // loadImagesForProductListings_BasedOnView(curProdList);\r\n // });\r\n //}\r\n }\r\n\r\n};\r\n\r\n//function loadImagesForProductListings_BasedOnView(prodListing) {\r\n// var isGridView = prodListing.hasClass('view-as-grid');\r\n// prodListing.find('.productImageWrapper img').each(function (index) {\r\n// var img = $(this);\r\n// setTimeout(function () {\r\n// var newImgUrl = img.closest('.innerwrapper').data(isGridView ? 'prodimggridview' : 'prodimglistview');\r\n// // Set the new Img Url to the proper attribute src or lazy-src.\r\n// if (img.attr(\"lazy-src\")) {\r\n// img.attr(\"lazy-src\", newImgUrl);\r\n// }\r\n// else if (img[0].src) {\r\n// img[0].src = newImgUrl;\r\n// }\r\n// }, 1);\r\n// });\r\n//}","var V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"1.34.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n }\n\n script.addEventListener('load', function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n });\n script.addEventListener('error', function () {\n reject(new Error('Failed to load Stripe.js'));\n });\n } catch (error) {\n reject(error);\n return;\n }\n });\n return stripePromise;\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n// own script injection.\n\nvar stripePromise$1 = Promise.resolve().then(function () {\n return loadScript(null);\n});\nvar loadCalled = false;\nstripePromise$1[\"catch\"](function (err) {\n if (!loadCalled) {\n console.warn(err);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now();\n return stripePromise$1.then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","import * as Stripe from '@stripe/stripe-js';\r\nimport { deliveryOptionsPersist } from './gak-DeliveryOptions-persist';\r\nimport Utils from './utils';\r\nimport { updateWholeCart, ShoppingBasket_BindEvents, ShoppingBasket_ProceedToCheckout, showBasketError } from './gak-ShoppingBasket';\r\nimport { initTabs } from \"./tabs\"\r\nimport { debounceScript } from './Debounce.js';\r\nimport { loadPayPalButton } from './gak-PayPalButton';\r\nimport { getFormattedPrice, numberToCurrency } from './price-formatter';\r\n\r\nvar bpj: any;\r\nvar paymentRequest: any;\r\n\r\ndeclare var DeliveryOptionsParms: any;\r\ndeclare var EuroPrice_CurrencySymbol: any;\r\ndeclare var EuroPrice_ConversionRate: any;\r\ndeclare var basketConfig: any;\r\ndeclare var ShoppingBasketParms: any;\r\n\r\nexport var basketParams: any;\r\n\r\nconst requestHeaders: HeadersInit = new Headers();\r\nrequestHeaders.set('Content-Type', 'application/json');\r\n\r\nexport function DeliveryOptions_Init(bpjValue: any) {\r\n bpj = bpjValue;\r\n}\r\n\r\nvar pdojj: any;\r\nvar shoppingBasketContainer = \"#shoppingBasketContent\";\r\nvar deliveryOptionsContainer = \"#divDeliveryOptionsContainer\";\r\nvar divPaymentButtonsSelector = \"#divBasketPaymentsButtonRow\";\r\n\r\nexport function DeliveryOptions_BindEvents(isInit: boolean): void {\r\n var requestApplyVoucher =\r\n (debounceScript as any)(invokeApplyVoucher,\r\n 500,\r\n { 'leading': false, 'trailing': true });\r\n /***** PARAMETERS SECTION ******/\r\n\r\n /* Delivery options JSON, containing the reduced necessary data for all delivery options available and the defaults (window.dojj) */\r\n showHideCheckoutBox();\r\n if (isInit) {\r\n if (bpj)\r\n basketParams = JSON.parse(Utils.atou(bpj));\r\n } else {\r\n var dojj = (document.getElementById(\"dojj\"));\r\n\r\n if (dojj) {\r\n /* Delivery options JSON, containing the reduced necessary data for all delivery options available and the defaults */\r\n pdojj = JSON.parse(Utils.atou(dojj.value));\r\n /* This pdojj will contain:\r\n pdojj.doj: Reduced Deliver Options data\r\n pdojj.dodj: Reduced Default data\r\n pdojj.pdj: Payment data containing the data necessary to display the payment buttons.\r\n */\r\n }\r\n }\r\n\r\n // No params whatsoever: return\r\n if (!basketParams && !pdojj) return;\r\n\r\n /***** END PARAMETERS SECTION ******/\r\n\r\n function triggerFinance() {\r\n //FinanceTab callback\r\n var financeTabInitializeData = (window).financeTabInitializeData;\r\n if (typeof financeTabInitializeData === 'function' && financeTabInitializeData !== null) {\r\n financeTabInitializeData();\r\n }\r\n }\r\n //Defines callback used by FinanceTab\r\n var lastHasFinanceOptions: boolean;\r\n (window).onHasFinanceOptions = function (hasFinanceOptions: boolean) {\r\n lastHasFinanceOptions = hasFinanceOptions;\r\n setCurrentDeliveryOptions();\r\n };\r\n\r\n // Perform processing that does not depend on having dojj & dodjj defined (eg. when there is nothing\r\n // in stock in the current basket)\r\n if (basketParams && basketParams.showLowStock) {\r\n var el = document.getElementById('delvStockIsLow');\r\n if (el) {\r\n el.classList.remove('hidden');\r\n }\r\n }\r\n\r\n // Region / Country changed.\r\n var delvRegId = (document.getElementById(\"DeliveryRegionId\")!);\r\n var delvRegIdSelect = (document.getElementById(\"DeliveryRegionIdSelect\")!);\r\n\r\n if (delvRegId) {\r\n delvRegId.addEventListener(\"change\", handledelvRgIdChange);\r\n }\r\n\r\n if (delvRegIdSelect) {\r\n delvRegIdSelect.addEventListener(\"change\", handledelvRgIdChange);\r\n }\r\n if (isInit === true) {\r\n if (!isBasketEmpty()) {\r\n var selDlvReg = delvRegId.value;\r\n\r\n DeliveryOptions_refresh(selDlvReg, deliveryOptionsPersist.getSelectedDeliveryTypeOption(), isInit !== true);\r\n }\r\n } else {\r\n if (basketParams && (basketParams.OutOfStock || basketParams.IsGiftVoucherOnlyOrder)) {\r\n setCurrentDeliveryOptions();\r\n }\r\n\r\n Voucher_BindEvents();\r\n }\r\n\r\n /*\r\n When clicking a DAY in the calendar:\r\n *\tIf currently selected Delivery Option is not available for that day,\r\n -\tSelect default Delivery Option for that day\r\n *\tUpdate price from matrix [DeliveryOption][Day]\r\n */\r\n\r\n var speficDays = document.querySelectorAll(`${deliveryOptionsContainer} #specificDayTable td:not(.unavailable)`);\r\n\r\n if (speficDays) {\r\n speficDays.forEach(function (el, i) {\r\n el.addEventListener('click', function (e) {\r\n var internalDay = el!.getAttribute(\"data-day\");\r\n var dtid = getSelectedDelvOptData().dtid;\r\n if (isSuperSaverDt(dtid)) {\r\n // reset to default delivery type if current is super saved\r\n // (maybe override again below)\r\n dtid = getDefaultData().i;\r\n }\r\n var selPrice = getDelvOptPrice(dtid, internalDay);\r\n // Null, undefined, and 0 are falsey, but 0 is a valid price.\r\n if (!selPrice && selPrice !== 0) {\r\n dtid = getDefaultDelvOptID(internalDay);\r\n selPrice = getDelvOptPrice(dtid, internalDay);\r\n }\r\n\r\n setSelectedDelvOptData(dtid, internalDay, selPrice, true);\r\n });\r\n });\r\n }\r\n /*\r\n When clicking a DELIVERY OPTION item in the list:\r\n *\tIf currently selected Day is not available for that Delivery Option,\r\n -\tSelect default DAY for that Delivery Option\r\n *\tUpdate price from matrix [DeliveryOption][Day]\r\n */\r\n const handleOptionBoxChangeEvent = new Event('handleOptionBoxChangeEvent');\r\n\r\n var optionBoxes = document.querySelectorAll(`${deliveryOptionsContainer} .deliveryOption .input-checkbox.optionBox`);\r\n if (optionBoxes) {\r\n optionBoxes.forEach(function (el, i) {\r\n el.addEventListener(\"change\", handleOptionBoxChange);\r\n el.addEventListener(\"handleOptionBoxChangeEvent\", handleOptionBoxChange);\r\n });\r\n }\r\n\r\n var calendarLink = document.getElementById(\"openCalendar\");\r\n\r\n if (calendarLink)\r\n calendarLink.addEventListener(\"click\", openCalendar);\r\n\r\n\r\n function handleOptionBoxChange(el: any) {\r\n var dtid = el.target!.getAttribute(\"data-dtid\");\r\n var internalDay = getSelectedDelvOptData().day;\r\n var selPrice = getDelvOptPrice(dtid, internalDay);\r\n // Null, undefined, and 0 are falsey, but 0 is a valid price.\r\n if (!selPrice && selPrice !== 0) {\r\n internalDay = getDefaultDay(dtid);\r\n selPrice = getDelvOptPrice(dtid, internalDay);\r\n }\r\n\r\n setSelectedDelvOptData(dtid, internalDay, selPrice);\r\n }\r\n\r\n const handledelvRgIdChangeEvent = new Event('handledelvRgIdChangeEvent');\r\n\r\n function handledelvRgIdChange(el: any) {\r\n var delvRgIdVal = el.target.value\r\n updateWholeCart(delvRgIdVal);\r\n }\r\n\r\n // Trigger the selection.\r\n\r\n var selDlv = deliveryOptionsPersist.getSelectedDelivery();\r\n var defaultSelection = document.querySelector(`${deliveryOptionsContainer} .deliveryOption .input-checkbox.optionBox.default`);\r\n\r\n if (selDlv && selDlv.deliveryTypeID && selDlv.deliveryDate\r\n // The Price might change for the same delivery, depending on the value of the basket.\r\n && setSelectedDelvOptData(selDlv.deliveryTypeID, selDlv.deliveryDate, getDelvOptPrice(selDlv.deliveryTypeID, selDlv.deliveryDate))\r\n ) {\r\n // Nothing, already done.\r\n }\r\n else {\r\n // Trigger the default selection.\r\n if (defaultSelection) {\r\n defaultSelection.dispatchEvent(handleOptionBoxChangeEvent)\r\n }\r\n }\r\n\r\n function getCheckboxInputForDeliveryType(dtid: any): HTMLInputElement {\r\n return (document.querySelector(`${deliveryOptionsContainer} .deliveryOption .input-checkbox.optionBox[data-dtid='${dtid}']`));\r\n }\r\n\r\n function isSuperSaverDt(dtid: any) {\r\n var myDt = getDtById(dtid);\r\n if (!myDt || myDt.length <= 0) return null;\r\n\r\n return myDt[0].ss;\r\n }\r\n\r\n function isClickAndCollectDt(dtid: any) {\r\n var myDt = getDtById(dtid);\r\n if (!myDt || myDt.length <= 0) return null;\r\n\r\n return myDt[0].cc;\r\n }\r\n\r\n //function isAllDaysAvbleDt(dtid) {\r\n // var myDt = getDtById(dtid);\r\n // if (!myDt || myDt.length <= 0) return null;\r\n\r\n // return myDt[0].ada;\r\n //}\r\n\r\n // *********** gak-DeliveryOptions internal use\r\n function getSelectedDelvOptData() {\r\n var deliveryTypeID = (document.getElementById(\"deliveryTypeID\"))!;\r\n var deliveryDate = (document.getElementById(\"deliveryDate\"))!;\r\n var selectedData = {\r\n dtid: deliveryTypeID.value, // Get dtid from the selected item in DT List.\r\n day: deliveryDate.value // Get day from the selected day in Calendar.\r\n };\r\n\r\n return selectedData;\r\n }\r\n\r\n function setSelectedDelvOptData(dtid: any, internalDay: any, selPrice: any, fromCalendar: boolean = false) {\r\n // Update UI:\r\n // Update DT List\r\n // Remove all selections\r\n if ((!internalDay || !isSuperSaverDt(dtid)) && !fromCalendar) {\r\n internalDay = getDefaultDay(dtid);\r\n }\r\n\r\n var calendarSelector = `${deliveryOptionsContainer} #specificDayTable td`;\r\n var elemDay = document.querySelector(`${calendarSelector}[data-day='${internalDay}']`);\r\n var deliveryTypeID = (document.getElementById(\"deliveryTypeID\"))!;\r\n var deliveryPrice = (document.getElementById(\"deliveryPrice\"))!;\r\n var deliveryDate = (document.getElementById(\"deliveryDate\"))!;\r\n \r\n if (elemDay?.classList.contains('unavailable') || selPrice == null) {\r\n var checkoutPrice = document.getElementById(\"checkoutDeliveryPrice\");\r\n\r\n if (checkoutPrice && deliveryPrice)\r\n checkoutPrice.textContent = getFormattedPrice(deliveryPrice.value, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n return false;\r\n }\r\n\r\n var elemDt = getCheckboxInputForDeliveryType(dtid);\r\n // Anything changed?\r\n\r\n var isDeliveryTypeChangedx = deliveryTypeID ? deliveryTypeID.value != dtid : false;\r\n var isDeliveryPriceChangedx = deliveryPrice ? parseFloat(deliveryPrice?.value || \"-1\") !== parseFloat(selPrice || 0) : false;\r\n var isDeliveryDateChangedx = deliveryDate ? deliveryDate.value != internalDay : false;\r\n var isNothingChanged = isInit || !(isDeliveryTypeChangedx || isDeliveryPriceChangedx || isDeliveryDateChangedx);\r\n\r\n if (isNothingChanged) {\r\n if (elemDt)\r\n elemDt.checked = true;\r\n return true;\r\n }\r\n\r\n document.querySelector(`${deliveryOptionsContainer} .deliveryOption`)?.classList.remove('highlightBlue');\r\n document.querySelector(`${deliveryOptionsContainer} .deliveryOption.chosenOption`)?.classList.remove('chosenOption');\r\n (document.querySelector(`${deliveryOptionsContainer} .deliveryOption .input-checkbox`)).setAttribute('checked', \"false\");\r\n // Select current item\r\n elemDt.checked = true;\r\n elemDt.closest(\".deliveryOption\")?.classList.add('chosenOption');\r\n\r\n // Current item's day-type prefix\r\n var myDtDays = getDaysForDtid(dtid, internalDay);\r\n // Don't prefix Super Saver (only super saver's input has a truthy value for 'daywindow' data value)\r\n // Plus always switch to first possible dates\r\n if (isSuperSaverDt(dtid)) {\r\n var superSaverinternalDay = myDtDays[0].d;\r\n if (superSaverinternalDay != internalDay) {\r\n setSelectedDelvOptData(dtid, superSaverinternalDay, selPrice);\r\n return; // Make sure we don't process the rest of the current function.\r\n }\r\n }\r\n\r\n var allDays = document.querySelectorAll(calendarSelector);\r\n\r\n if (allDays) {\r\n allDays.forEach(function (e, i) {\r\n e.classList.remove('chosenDay')\r\n });\r\n }\r\n\r\n if (elemDay)\r\n elemDay.classList.add('chosenDay');\r\n\r\n // When a day is selected, the prices displayed for all the items in DT List must be updated.\r\n var deliveryOptions = document.querySelectorAll(`${deliveryOptionsContainer} .deliveryOption`);\r\n\r\n deliveryOptions.forEach(function (el, i) {\r\n var myDtid = el.querySelector(\".input-checkbox.optionBox\")?.getAttribute(\"data-dtid\");\r\n var myPrice = getDelvOptPrice(myDtid, internalDay);\r\n\r\n if (myPrice == null) {\r\n // Dt not available for the day. Get Default price.\r\n myPrice = getDelvOptPrice(myDtid, getDefaultDay(myDtid)); //\"-\";\r\n }\r\n\r\n // Format Price\r\n var formattedPrice = getFormattedPrice(myPrice, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var priceSpan = el.querySelector(\".deliveryOptionPrice\");\r\n\r\n if (priceSpan)\r\n priceSpan.textContent = formattedPrice;\r\n });\r\n\r\n // Update form data\r\n var deliveryTypeID = (document.getElementById(\"deliveryTypeID\"));\r\n\r\n if (deliveryTypeID)\r\n deliveryTypeID.value = dtid;\r\n\r\n var deliveryDate = (document.getElementById(\"deliveryDate\"));\r\n\r\n if (deliveryDate)\r\n deliveryDate.value = internalDay;\r\n\r\n // DeliveryLastDate. Is there a dayWindow?\r\n var dayWindow = elemDt.getAttribute(\"data-daywindow\");\r\n var dayTo = null;\r\n\r\n if (dayWindow) {\r\n var daysToAdd = parseInt(dayWindow) - 1;\r\n var dayWindowArray = getDayWindowForDt(dtid, internalDay, daysToAdd);\r\n // Select the whole set of days in the window\r\n dayWindowArray?.forEach(function (x, index) {\r\n document.querySelector(`${calendarSelector}[data-day='${x}']`)?.classList.add('chosenDay');\r\n });\r\n dayTo = dayWindowArray?.slice(-1)[0];\r\n }\r\n var deliveryLastDate = (document.getElementById(\"deliveryLastDate\"));\r\n\r\n if (deliveryLastDate)\r\n deliveryLastDate.value = dayTo;\r\n //// Note \"|| -1\"\r\n //var isDeliveryPriceChanged = parseFloat($('#deliveryPrice').val() || -1) !== parseFloat(selPrice || 0);\r\n var deliveryPrice = (document.getElementById(\"deliveryPrice\"));\r\n\r\n if (deliveryPrice)\r\n deliveryPrice.value = selPrice;\r\n\r\n var checkoutPrice = document.getElementById(\"checkoutDeliveryPrice\");\r\n\r\n if (checkoutPrice)\r\n checkoutPrice.textContent = getFormattedPrice(selPrice, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var checkoutSubtotalPrice = document.getElementById(\"checkoutSubtotalPrice\");\r\n\r\n if (checkoutSubtotalPrice && basketParams.PriceTotalItems)\r\n checkoutSubtotalPrice.textContent = getFormattedPrice(basketParams.PriceTotalItems, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var giftVoucher = basketParams.GiftVouchers && basketParams.GiftVouchers.IsAnyApplied\r\n ? basketParams.GiftVouchers.DiscountValue : 0;\r\n var totalIncludingVATAndDelivery = document.getElementById(\"TotalIncludingVATAndDelivery\");\r\n if (totalIncludingVATAndDelivery && basketParams.PriceTotalItems) {\r\n totalIncludingVATAndDelivery.textContent = getFormattedPrice(basketParams.PriceTotalItems + selPrice - giftVoucher, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n }\r\n\r\n // Keep selected values.\r\n deliveryOptionsPersist.saveSelectedDelivery(deliveryTypeID.value, deliveryDate.value);\r\n\r\n // Update calendar header.\r\n document.querySelector(`${deliveryOptionsContainer} .deliveryCalendar #deliveryMonthName`)!.innerHTML = internaldateToMonthDisplayString(internalDay);\r\n\r\n // Update Delivery Date field\r\n var newDeliveryHtml = isClickAndCollectDt(dtid) ? \"Click & Collect from our Brighton store \" : \"Delivery \";\r\n var displayDay = elemDay ? elemDay.getAttribute(\"data-displayday\") : \"\";\r\n if (dayTo == null) {\r\n newDeliveryHtml += \"\" + displayDay + \"\";\r\n }\r\n else {\r\n newDeliveryHtml += \"between \" + displayDay + \" and \" + internaldateToDisplayString(dayTo) + \"\";\r\n }\r\n var confirmationMessage = (elemDt.getAttribute(\"data-confirmationmsg\") || '').trim();\r\n newDeliveryHtml += confirmationMessage ? \", \" + confirmationMessage : \"\"; //Add confirmation message to the delivery text\r\n\r\n //Setting back previous title\r\n document.querySelectorAll(`${deliveryOptionsContainer} .deliveryOption .dtDescription`)?.forEach(function (e: any, i: any) {\r\n var title = e.getAttribute(\"data-title\");\r\n e.textContent = title;\r\n });\r\n\r\n var elemDtDescription = elemDt.closest(\".deliveryOption\")?.querySelector(\".dtDescription\");\r\n\r\n if (elemDtDescription)\r\n elemDtDescription.innerHTML = newDeliveryHtml;\r\n\r\n updatePaymentButtons(dtid, internalDay);\r\n\r\n return true;\r\n }\r\n\r\n function updatePaymentButtons(dtid: any, internalDay: any) {\r\n if (lastHasFinanceOptions === undefined) {\r\n triggerFinance();\r\n return;\r\n }\r\n\r\n var divPaymentButtons = document.querySelector(divPaymentButtonsSelector)!;\r\n var data = {\r\n dtid: dtid,\r\n d: internalDay,\r\n dop: getDelvOpts(),\r\n finance: lastHasFinanceOptions || false\r\n };\r\n\r\n //We need to work out if payment buttons are rendered, without considering STRIPE\r\n var paymentButtonsRendered = divPaymentButtons.querySelectorAll(`.payment-buttons button[name='checkout']:not([data-payment-mehtod='STRIPE']),\r\n .payment-buttons-finance,\r\n #paypal-button-container`).length > 0;\r\n\r\n if (!paymentButtonsRendered) {\r\n fetch(basketConfig.paymentButtonsUrl, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n showBasketError(\"Sorry but there was an error when loading payment buttons.\");\r\n }).then(function (result) {\r\n if (result) {\r\n divPaymentButtons.innerHTML = result;\r\n PaymentData_BindEvents(result);\r\n\r\n let parser = new DOMParser();\r\n const doc = parser.parseFromString(result, 'text/html');\r\n\r\n var netPayment = doc.getElementById(\"NetPayment\")!;\r\n var giftVoucherTotalRedeemed = doc.getElementById(\"GiftVoucherTotalRedeemed\")!;\r\n var hasPayPalCredit = doc.getElementById(\"HasPayPalCredit\")!;\r\n var hasPayPal = doc.getElementById(\"HasPayPal\")!;\r\n var highestDeposit = doc.getElementById(\"highestDeposit\")!;\r\n var highestDepositAmount = doc.getElementById(\"highestDepositAmount\")!;\r\n var shouldDisplayFinanceOptions = doc.getElementById(\"ShouldDisplayFinanceOptions\")!;\r\n\r\n DeliveryOptions_UpdatePdParams(parseFloat(netPayment.value), parseFloat(highestDeposit.value),\r\n parseFloat(highestDepositAmount.value), parseFloat(giftVoucherTotalRedeemed.value),\r\n hasPayPalCredit.value == 'True', hasPayPal.value == 'True', shouldDisplayFinanceOptions.value == 'True');\r\n\r\n var buttons = document.querySelectorAll(`${divPaymentButtonsSelector} button`);\r\n\r\n if (divPaymentButtons)\r\n buttons.forEach(function (button) {\r\n button.addEventListener('click', ShoppingBasket_ProceedToCheckout);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n fetch(basketConfig.updatePaymentButtonsUrl, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n showBasketError(\"Sorry but there was an error when loading payment buttons.\");\r\n }).then(function (result: any) {\r\n DeliveryOptions_UpdatePdParams(result.NetPayment, result.HighestDeposit, result.highestDepositAmount,\r\n result.GiftVoucherTotalRedeemed, result.HasPayPalCredit, result.HasPayPal, result.ShouldDisplayFinanceOptions);\r\n PaymentData_BindEvents(result);\r\n });\r\n }\r\n }\r\n\r\n function setCurrentDeliveryOptions() {\r\n var dtid = (document.getElementById('deliveryTypeID'));\r\n var dd = (document.getElementById('deliveryDate'));\r\n\r\n if (!dtid && !dd) return;\r\n\r\n deliveryOptionsPersist.saveSelectedDelivery(dtid.value, dd.value);\r\n updatePaymentButtons(dtid.value, dd.value);\r\n }\r\n\r\n function Voucher_BindEvents() {\r\n var voucherCodeInput = (document.getElementById(\"voucherCode\"));\r\n var applyVoucherButton = document.getElementById(\"applyVoucherButton\");\r\n var removeVoucherButton = document.querySelectorAll(\"button.removeVoucherButton\");\r\n if (voucherCodeInput) {\r\n voucherCodeInput.addEventListener(\"keypress\", handleVoucherCodeInputKeyPress);\r\n }\r\n if (applyVoucherButton && voucherCodeInput) {\r\n applyVoucherButton.addEventListener(\"click\", handleApplyVoucherClick);\r\n }\r\n\r\n if (removeVoucherButton && removeVoucherButton.length > 0) {\r\n removeVoucherButton.forEach(function (button) {\r\n button.addEventListener(\"click\", handleRemoveVoucherClick);\r\n });\r\n }\r\n\r\n function handleRemoveVoucherClick(e: any) {\r\n var voucherCode = e.currentTarget.getAttribute(\"data-code\");\r\n var data = { voucherCode: voucherCode, remove: true };\r\n\r\n requestApplyVoucher(data);\r\n }\r\n\r\n function handleApplyVoucherClick(e: any) {\r\n e.preventDefault();\r\n\r\n var voucherCodeVal = voucherCodeInput.value;\r\n if (!voucherCodeVal || voucherCodeVal === \"\") return;\r\n\r\n var data = { voucherCode: voucherCodeInput.value, remove: false };\r\n\r\n requestApplyVoucher(data);\r\n }\r\n\r\n function handleVoucherCodeInputKeyPress(e: any) {\r\n if (e.keyCode === 13) {\r\n handleApplyVoucherClick(e);\r\n }\r\n }\r\n }\r\n\r\n function invokeApplyVoucher(data: any) {\r\n var applyVoucherButton = document.getElementById(\"applyVoucherButton\");\r\n\r\n fetch(ShoppingBasketParms.ApplyVoucherURL, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.text())\r\n .then(function (result) {\r\n var basket = document.querySelector(shoppingBasketContainer)!;\r\n basket.innerHTML = result;\r\n\r\n if (applyVoucherButton) {\r\n var newButton = applyVoucherButton.cloneNode(true);\r\n if (applyVoucherButton.parentNode)\r\n applyVoucherButton.parentNode.replaceChild(newButton, applyVoucherButton);\r\n }\r\n var bpj = (document.getElementById(\"bpj\")!);\r\n if (bpj)\r\n DeliveryOptions_Init(bpj.value);\r\n\r\n ShoppingBasket_BindEvents();\r\n DeliveryOptions_BindEvents(true);\r\n\r\n var voucherError = document.getElementById(\"voucherError\");\r\n var voucherErrorContainer = document.getElementById(\"voucherErrorContainer\")!;\r\n let voucherInput = document.querySelector(\"#gift-voucher-input .floating-button\");\r\n\r\n if (voucherError) {\r\n voucherErrorContainer.innerHTML = `${voucherError.value}`;\r\n if (voucherInput) voucherInput.classList.add('is-invalid');\r\n }\r\n else {\r\n voucherErrorContainer.hidden = true;\r\n if (voucherInput) voucherInput.classList.remove('is-invalid');\r\n }\r\n });\r\n }\r\n\r\n function PaymentData_BindEvents(result: any) {\r\n if (result.Buttons) {\r\n var buttonsSelector = document.querySelectorAll(\".btn-item:not(.stripe-button-container)\");\r\n var paymentButtonsContainer = document.querySelector(divPaymentButtonsSelector)!;\r\n\r\n if (buttonsSelector)\r\n buttonsSelector.forEach(function (button) {\r\n button.remove();\r\n });\r\n\r\n const financeText = document.getElementById(\"financeOptionsText\");\r\n\r\n if (financeText) {\r\n if (result.HasFinanceOptions) {\r\n financeText.removeAttribute(\"hidden\");\r\n } else {\r\n financeText.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n }\r\n\r\n var buttonsContainer = document.getElementsByClassName(\"payment-buttons\")?.item(0);\r\n\r\n if (buttonsContainer) {\r\n let hasPayPal = false;\r\n result.Buttons.forEach(function (el: any) {\r\n const btnData = el;\r\n const amazonPayStyle = btnData.value == \"amz\" ? \"margin-top: 8px\" : \"\";\r\n const btnContent = btnData.displayImg === \"\"\r\n ? btnData.displayText\r\n : `${btnData.displayText}`;\r\n\r\n if (btnData.value != 'stripe') {\r\n if (btnData.value === 'pp') {\r\n hasPayPal = true;\r\n } else {\r\n const button = renderButton(!btnData.isFinance);\r\n const container = btnData.isFinance ? getFinanceContainer()! : buttonsContainer!\r\n\r\n addButtonToContainer(container, button);\r\n }\r\n }\r\n\r\n function getFinanceContainer() {\r\n if (!paymentButtonsContainer.querySelector(\".payment-buttons-finance\")) {\r\n const paymentButtonsFinance = document.createElement(\"div\");\r\n\r\n paymentButtonsFinance.classList.add(\"payment-buttons-finance\");\r\n paymentButtonsFinance.setAttribute(\"data-columns\", \"\");\r\n paymentButtonsContainer.appendChild(paymentButtonsFinance);\r\n }\r\n\r\n return document.getElementsByClassName(\"payment-buttons-finance\")?.item(0);\r\n }\r\n\r\n function renderButton(isFullWidth: boolean = true) {\r\n return `\r\n `;\r\n }\r\n\r\n function addButtonToContainer(container: Element, button: string) {\r\n container.innerHTML += button;\r\n }\r\n });\r\n\r\n const payPalButtonContainer = document.getElementById(\"paypal-button-container\");\r\n let ppMessage = document.querySelector(\"[data-pp-message]\");\r\n\r\n if (!hasPayPal && payPalButtonContainer?.hasChildNodes()) {\r\n payPalButtonContainer!.innerHTML = '';\r\n\r\n if (ppMessage) {\r\n ppMessage.remove();\r\n }\r\n } else if (hasPayPal && (!payPalButtonContainer || !payPalButtonContainer.hasChildNodes())) {\r\n setPayPalButton(result.ShouldDisplayFinanceOptions);\r\n\r\n if (!ppMessage && payPalButtonContainer) {\r\n ppMessage = document.createElement(\"div\");\r\n ppMessage.setAttribute(\"data-pp-message\", \"\");\r\n ppMessage.setAttribute(\"data-pp-amount\", result.NetPayment);\r\n ppMessage.setAttribute(\"data-pp-style-text-size\", \"11\");\r\n\r\n payPalButtonContainer.insertAdjacentElement(\"afterend\", ppMessage)\r\n }\r\n }\r\n }\r\n }\r\n\r\n var buttons = document.querySelectorAll(\"#divBasketPaymentsButtonRow button\");\r\n\r\n if (buttons) {\r\n buttons.forEach(function (btn) {\r\n btn.addEventListener('click', ShoppingBasket_ProceedToCheckout);\r\n });\r\n }\r\n\r\n var updateForm = document.getElementById(\"UpdateStockForm\");\r\n\r\n if (updateForm) {\r\n var oldBtoajDelvOptParams = (document.querySelector(\"input[name=btoajDelvOptParams]\"));\r\n if (oldBtoajDelvOptParams)\r\n oldBtoajDelvOptParams.remove();\r\n\r\n var btoajDelvOptParams = document.createElement(\"input\");\r\n btoajDelvOptParams.setAttribute(\"name\", \"btoajDelvOptParams\");\r\n btoajDelvOptParams.setAttribute(\"hidden\", \"hidden\");\r\n\r\n btoajDelvOptParams.value = getDelvOptsSerialised();\r\n\r\n updateForm.append(btoajDelvOptParams);\r\n\r\n }\r\n\r\n DeliveryOptionsButtons_BindEvents();\r\n }\r\n\r\n function DeliveryOptionsButtons_BindEvents() {\r\n // Show warning.\r\n var ccwarning = document.querySelectorAll(`${deliveryOptionsContainer} .ccwarning`);\r\n var ccEarliestwarning = document.querySelectorAll(`${shoppingBasketContainer} .basket-item-stock.ccEarliestwarning`);\r\n\r\n if (getDelvOpts().IsClickAndCollectShowWarning && isUKMainland()) {\r\n // Reset Delivered / Click & Collect buttons.\r\n deliveryOptionsPersist.resetSelectedDeliveryTypeOption();\r\n\r\n // Display warning\r\n if (ccwarning) {\r\n ccwarning.forEach(function (el, i) {\r\n el.classList.remove('hidden');\r\n });\r\n }\r\n\r\n // Hide Earliest c&c warning from basket items.\r\n if (ccEarliestwarning) {\r\n ccEarliestwarning.forEach(function (el, i) {\r\n el.classList.add('hidden');\r\n });\r\n }\r\n }\r\n else {\r\n // Hide warning\r\n if (ccwarning) {\r\n ccwarning.forEach(function (el, i) {\r\n el.classList.add('hidden');\r\n });\r\n }\r\n // Show Earliest c&c warning from basket items.\r\n if (ccEarliestwarning) {\r\n ccEarliestwarning.forEach(function (el, i) {\r\n el.classList.remove('hidden');\r\n });\r\n }\r\n }\r\n\r\n // Show buttons\r\n var devOptBtns = document.querySelectorAll(`${deliveryOptionsContainer} a.devOptsLinks`);\r\n\r\n if (devOptBtns) {\r\n devOptBtns.forEach(function (el) {\r\n el.addEventListener('click', handleDeliveryOptionClicked);\r\n });\r\n }\r\n }\r\n\r\n function handleDeliveryOptionClicked(el: any) {\r\n var curBtnName = el.target.getAttribute('name');\r\n if (deliveryOptionsPersist.getSelectedDeliveryTypeOption() !== curBtnName) {\r\n deliveryOptionsPersist.saveSelectedDeliveryTypeOption(curBtnName);\r\n\r\n DeliveryOptions_refresh(selDlvReg, deliveryOptionsPersist.getSelectedDeliveryTypeOption(), false);\r\n }\r\n }\r\n\r\n DeliveryOptionsButtons_BindEvents();\r\n // *********** gak-DeliveryOptions internal use\r\n}\r\n\r\nexport function SetDojj(doj: string) {\r\n if (doj) {\r\n pdojj = JSON.parse(Utils.atou(doj));\r\n }\r\n}\r\n\r\nexport function DeliveryOptions_refresh(deliveryRegionId: any, deliveryOptionTypeSelected: any, isResetDelivery: boolean) {\r\n var body = {\r\n deliveryRegionId: deliveryRegionId,\r\n deliveryOptionType: deliveryOptionTypeSelected,\r\n basketParams: basketParams\r\n };\r\n\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n fetch(DeliveryOptionsParms.IndexDeliveryOptionsURL, {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n headers: requestHeaders\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n showBasketError(\"Sorry but there was an error: Invalid delivery options\");\r\n }).then(function (data) {\r\n if (data) {\r\n var divContainer = document.querySelector(deliveryOptionsContainer)!;\r\n if (isResetDelivery) deliveryOptionsPersist.resetSelectedDelivery();\r\n if (divContainer) divContainer.innerHTML = data;\r\n\r\n DeliveryOptions_BindEvents(false);\r\n initTabs();\r\n }\r\n });\r\n}\r\n\r\n// JSON Data. Get the Price for a delivery option and a day. Returns NULL if not found.\r\nexport function getDelvOptPrice(dtid: any, internalDay: any) {\r\n var myDay = getDaysForDtid(dtid, internalDay);\r\n if (!myDay || myDay.length <= 0) return null;\r\n\r\n var myPrice = myDay[0].p;\r\n\r\n return myPrice;\r\n}\r\n// JSON Data. Get the default (cheapest) delivery option available for a day.\r\nexport function getDefaultDelvOptID(internalDay: any) {\r\n var myDts = getDelvOptsData().map(function (x: any) {\r\n return { xID: x.i, xPrice: (getDelvOptPrice(x.i, internalDay)), isSuperSaver: x.ss };\r\n });\r\n var availableDts = myDts.filter(function (x: any) {\r\n return x.xPrice !== null;\r\n });\r\n\r\n // Get Delv opt with min value\r\n var minPriceDt = availableDts.reduce(function (res: any, obj: any) {\r\n return (obj.xPrice < res.xPrice) ? obj : res;\r\n });\r\n if (!minPriceDt) return null;\r\n\r\n return minPriceDt.xID;\r\n}\r\n// JSON Data. Get the default (first) day available for a delivery option.\r\nfunction getDefaultDay(dtid: any) {\r\n var myDays = getDaysForDtid(dtid, null);\r\n\r\n if (!myDays || myDays.length <= 0) return null;\r\n\r\n // Get the first available\r\n var minDay = myDays[0].d;\r\n return minDay;\r\n}\r\n\r\n// JSON Data. Returns the day available in the future: from the base internalDay + daysAdd forward.\r\nfunction getDayWindowForDt(dtid: any, internalDay: boolean, daysAdd: number) {\r\n // Get the index of the base internalDay\r\n var myDay = getDaysForDtid(dtid, internalDay);\r\n if (!myDay || myDay.length <= 0) return null;\r\n\r\n var myDtDays = getDaysForDtid(dtid, null);\r\n var dayIndex = myDtDays.indexOf(myDay[0]);\r\n if (dayIndex < 0) return null;\r\n var dayWindow = [];\r\n for (var i = dayIndex; i <= dayIndex + daysAdd; i++) {\r\n dayWindow.push(myDtDays[i].d);\r\n }\r\n return dayWindow;\r\n}\r\n\r\nfunction getDaysForDtid(dtid: any, internalDay: any) {\r\n var myDt = getDtById(dtid);\r\n\r\n if (!myDt || myDt.length <= 0) return null;\r\n\r\n var myDtDays = myDt[0].dpl;\r\n\r\n if (internalDay == null) return myDtDays;\r\n\r\n // Ability to filter by day.\r\n var myDay = myDtDays.filter(function (x: any, i: any) {\r\n return (x.d == internalDay);\r\n });\r\n return myDay;\r\n}\r\n\r\nfunction getDtById(dtid: any) {\r\n var myDt = getDelvOptsData().filter(function (x: any, i: any) {\r\n return (x.i == dtid);\r\n });\r\n\r\n return myDt;\r\n}\r\n\r\nexport function getDelvOptsData() {\r\n return !pdojj ? [] : pdojj.doj; // Array expected\r\n}\r\nexport function getDefaultData() {\r\n return !pdojj ? {} : pdojj.dod; // Object expected\r\n}\r\nfunction getDelvOpts() {\r\n return (pdojj || {}); // Object expected\r\n}\r\nfunction getDelvOptsSerialised() {\r\n return Utils.utoa(JSON.stringify(getDelvOpts()));\r\n}\r\n\r\nfunction internaldateToDisplayString(internalDay: any) {\r\n var options = {\r\n weekday: \"short\", year: \"numeric\", month: \"short\",\r\n day: \"numeric\"\r\n };\r\n return internalDayToDisplayStringOptions(internalDay, options);\r\n}\r\nfunction internaldateToMonthDisplayString(internalDay: any) {\r\n var options = {\r\n month: \"long\"\r\n };\r\n return internalDayToDisplayStringOptions(internalDay, options);\r\n}\r\nfunction internalDayToDisplayStringOptions(internalDay: any, options: any) {\r\n // Parse date dd/MM/yyyy (LogicConstants.Formats.DateTime.DeliveryDate)\r\n if (internalDay) {\r\n var dateSplit = internalDay.split(\"/\");\r\n var myDate = new Date(dateSplit[2], parseInt(dateSplit[1]) - 1, dateSplit[0]);\r\n // Convert to short string\r\n return myDate.toLocaleDateString(\"en-GB\", options);\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\n// Update Payment data.\r\nfunction DeliveryOptions_UpdatePdParams(netPayment: number,\r\n highestDeposit: number,\r\n highestDepositAmount: number,\r\n gvTotalRedeemed: number,\r\n hasPayPalCreditPayment: boolean,\r\n hasPayPal: boolean,\r\n shouldDisplayFinanceOptions: boolean) {\r\n // New payment value\r\n if (!isNaN(netPayment)) {\r\n var total = document.getElementById(\"TotalIncludingVATAndDelivery\");\r\n\r\n if (total)\r\n total.innerHTML = numberToCurrency(netPayment, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var voucherApplied = document.querySelectorAll('.giftVoucherValueApplied');\r\n\r\n if (voucherApplied)\r\n voucherApplied.forEach(function (e: any) {\r\n e.textContent = numberToCurrency(gvTotalRedeemed, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate)\r\n });\r\n\r\n var isNoNetPayment = netPayment <= 0;\r\n\r\n if (highestDeposit > 0 && highestDepositAmount > 0) {\r\n var depositPlaceholder = document.querySelector('#divDeliveryOptionsContainer .depositPlaceholder');\r\n if (depositPlaceholder) {\r\n depositPlaceholder.innerHTML = `${highestDeposit} % deposit required today: \r\n ${numberToCurrency(highestDepositAmount, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate)}\r\n
    Balance payable upon collection: ${numberToCurrency(netPayment - highestDepositAmount, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate)} `\r\n depositPlaceholder.classList.remove('hidden');\r\n }\r\n }\r\n\r\n var stripePaymentRequestBtn = document.getElementById(\"paymentRequestButton\");\r\n\r\n if (stripePaymentRequestBtn && !isNoNetPayment) {\r\n setStripePaymentRequestButton(netPayment);\r\n }\r\n }\r\n\r\n // Paypal Credit\r\n var ppDiv = document.getElementById('paypal-credit-section-contents');\r\n if (ppDiv) {\r\n if (hasPayPalCreditPayment || hasPayPal) {\r\n ppDiv.classList.remove('hidden');\r\n }\r\n else {\r\n ppDiv.classList.remove('hidden');\r\n }\r\n }\r\n\r\n const payPalButtonContainer = document.getElementById(\"paypal-button-container\")!;\r\n if (hasPayPal && payPalButtonContainer.children.length == 0) {\r\n setPayPalButton(false);\r\n }\r\n\r\n //do we need express checkout section\r\n var h1text = document.getElementById(\"h1text\");\r\n if (h1text) {\r\n h1text.innerHTML = h1text.innerHTML + '**1';\r\n }\r\n\r\n var expresscheckout = document.querySelector(\"#divBasketPaymentsButtonRow .express-checkout\");\r\n var othercheckout = document.querySelector(\"#divBasketPaymentsButtonRow .other-checkout h2\");\r\n var expressbuttonsContainer = document.getElementById(\"paymentRequestButton\");\r\n var paypalContainer = document.getElementById(\"paypal-button-container\");\r\n if (!hasPayPal && expresscheckout && othercheckout && expressbuttonsContainer && expressbuttonsContainer.innerHTML == '' && \r\n paypalContainer && paypalContainer.innerHTML == '') {\r\n expresscheckout.classList.remove('show');\r\n othercheckout.classList.remove('show');\r\n }\r\n}\r\n\r\nfunction setPayPalButton(enablePayLater: boolean) {\r\n loadPayPalButton({\r\n clientId: ShoppingBasketParms.PaylPalClientId,\r\n currency: \"GBP\",\r\n enableFunding: \"\",\r\n components: \"messages,buttons\"\r\n });\r\n}\r\n\r\nfunction isUKMainland() {\r\n var deliveryRegionId = (document.getElementById(\"DeliveryRegionId\")!).value;\r\n return deliveryRegionId && deliveryRegionId == (window).ukMainlandRegionId;\r\n}\r\n\r\nfunction getAmountInCents(amount: any) {\r\n return parseInt((amount * 100).toFixed());\r\n}\r\n\r\nfunction getPlainText(text: string) {\r\n return text.replace(/(\\r\\n|\\n|\\r)|(\\s\\s+)/gm, \"\");\r\n}\r\n\r\nfunction getStripeShippingOptions(selPrice: any) {\r\n if (document.querySelector(`.chosenOption>input`)?.hasAttribute(\"data-dtid\")) {\r\n return [\r\n {\r\n id: document.querySelector(\".chosenOption>input\")!.getAttribute(\"data-dtid\"),\r\n label: getPlainText(document.querySelector(\".chosenOption .dtDescription\")!.getAttribute(\"data-title\")!),\r\n detail: getPlainText(document.querySelector(\".chosenOption .dtDescription\")!.textContent!),\r\n amount: getAmountInCents(selPrice)\r\n }];\r\n } else {\r\n return [{\r\n id: \"oos\",\r\n label: document.querySelector(\".delivery-out-of-stock > #outOfStockLabel\") != null ? getPlainText(document.querySelector(\".delivery-out-of-stock > #outOfStockLabel\")!.textContent!) : \"Delivery not available\",\r\n detail: document.querySelector(\".delivery-out-of-stock > #outOfStockDetail\") != null ? getPlainText(document.querySelector(\".delivery-out-of-stock > #outOfStockDetail\")!.textContent!) : \"Delivery not available\",\r\n amount: getAmountInCents(selPrice)\r\n }];\r\n }\r\n}\r\n\r\nfunction setStripePaymentRequestButton(amount: any) {\r\n if (isNaN(amount)) {\r\n return;\r\n }\r\n\r\n var stripeKey = (document.getElementById('StripePublishableKey'))!.value;\r\n var selPrice = (document.getElementById('deliveryPrice'))!.value;\r\n //var shippingOptions = getStripeShippingOptions(selPrice);\r\n Stripe.loadStripe(stripeKey).then(function (stripe: any) {\r\n var paymentRequestButton = document.getElementById(\"paymentRequestButton\");\r\n if (paymentRequestButton?.childElementCount == 0) {\r\n paymentRequest = stripe.paymentRequest(getPaymentRequestOptions(amount, getStripeShippingOptions(selPrice)));\r\n\r\n var elements = stripe.elements();\r\n var prButton = elements.create('paymentRequestButton', {\r\n paymentRequest: paymentRequest,\r\n });\r\n\r\n // Check the availability of the Payment Request API first.\r\n paymentRequest.canMakePayment().then(function (result: any) {\r\n if (result) {\r\n prButton.mount('#paymentRequestButton');\r\n let stripeButtonContainer = document.querySelector(\".stripe-button-container.loading\");\r\n if (stripeButtonContainer) stripeButtonContainer.classList.remove('loading');\r\n } else {\r\n var stripeButtonContainer = document.getElementsByClassName(\"stripe-button-container\")?.item(0);\r\n if (stripeButtonContainer) {\r\n stripeButtonContainer.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n }\r\n\r\n paymentRequest.on('paymentmethod', function (ev: any) {\r\n var updateForm = document.getElementById('UpdateStockForm');\r\n\r\n function submitForm() {\r\n var dojj = (document.getElementById(\"dojj\"))!;\r\n\r\n var url = updateForm.getAttribute('action')!;\r\n\r\n var data = new FormData(updateForm);\r\n\r\n data.set(\"btoajDelvOptParams\", dojj.value);\r\n data.set(\"checkout\", \"stripe\");\r\n data.set(\"IsDigitalWallet\", \"true\");\r\n\r\n fetch(url, {\r\n method: 'POST',\r\n body: data\r\n }).then((response) => {\r\n if (response.ok) {\r\n isPaymentRequested = true;\r\n\r\n fetch(`/checkout/createPaymentIntent?paymentmethodId=${ev.paymentMethod.id}&recipient=${ev.shippingAddress.recipient}&customerEmail=${ev.payerEmail}&payerPhone==${ev.payerPhone}`).then(function (response) {\r\n return response.json();\r\n }).then(function (createPaymentIntentResponse) {\r\n stripe.confirmCardPayment(\r\n createPaymentIntentResponse.ClientSecret,\r\n {\r\n payment_method: ev.paymentMethod.id,\r\n shipping: {\r\n address: {\r\n city: ev.shippingAddress.city,\r\n country: ev.shippingAddress.country,\r\n line1: ev.shippingAddress.addressLine[0],\r\n line2: ev.shippingAddress.addressLine.length == 2 ? ev.shippingAddress.addressLine[1] : null,\r\n postal_code: ev.shippingAddress.postalCode,\r\n state: ev.shippingAddress.region\r\n },\r\n name: ev.shippingAddress.recipient,\r\n phone: ev.payerPhone\r\n }\r\n },\r\n { handleActions: false }\r\n ).then(function (confirmResult: any) {\r\n LogStripeResponse(confirmResult, false);\r\n if (confirmResult.error) {\r\n alert(confirmResult.error);\r\n ev.complete('fail');\r\n } else {\r\n // Report to the browser that the confirmation was successful, prompting\r\n // it to close the browser payment method collection interface.\r\n ev.complete('success');\r\n // Check if the PaymentIntent requires any actions and if so let Stripe.js\r\n // handle the flow. If using an API version older than \"2019-02-11\"\r\n // instead check for: `paymentIntent.status === \"requires_source_action\"`.\r\n if (confirmResult.paymentIntent.status === \"requires_action\") {\r\n // Let Stripe.js handle the rest of the payment flow.\r\n stripe.confirmCardPayment(createPaymentIntentResponse.ClientSecret).then(function (result: any) {\r\n LogStripeResponse(result, true);\r\n if (result.error) {\r\n alert(result.error);\r\n } else {\r\n ProcessDigitalWalletPayment(ev, confirmResult, createPaymentIntentResponse);\r\n }\r\n });\r\n } else {\r\n ProcessDigitalWalletPayment(ev, confirmResult, createPaymentIntentResponse);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (!isPaymentRequested)\r\n submitForm();\r\n\r\n function LogStripeResponse(confirmResult: any, is3DSResult: boolean) {\r\n var data = {\r\n is3DSResult: is3DSResult,\r\n confirmResult: JSON.stringify(confirmResult)\r\n };\r\n\r\n fetch('Checkout/LogStripeResponse', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n });\r\n }\r\n\r\n function ProcessDigitalWalletPayment(ev: any, confirmResult: any, createPaymentIntentResponse: any) {\r\n var data = {\r\n shippingAddress: ev.shippingAddress,\r\n paymentIntentId: confirmResult.paymentIntent.id,\r\n customerEmail: ev.payerEmail,\r\n clientSecret: createPaymentIntentResponse.ClientSecret,\r\n customerPhone: ev.payerPhone\r\n };\r\n fetch('Checkout/ValidateAddress',\r\n {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (result) {\r\n if (result.success && result.redirectUrl !== \"\") {\r\n window.location = result.redirectUrl;\r\n }\r\n else if (result.redirectUrl !== \"\") {\r\n window.location = result.redirectUrl;\r\n }\r\n });\r\n }\r\n });\r\n\r\n paymentRequest.on('shippingaddresschange', function (ev: any) {\r\n var delvRegId = (document.getElementById(\"DeliveryRegionId\"))!.value;\r\n var deliveryRegionMap: any = JSON.parse((document.getElementById(\"deliveryRegionMap\"))!.value);\r\n if (ev.shippingAddress.country !== deliveryRegionMap[delvRegId]) {\r\n ev.updateWith({ status: 'invalid_shipping_address' });\r\n } else if (ev.shippingAddress.country == 'GB') {\r\n var data = {\r\n shippingAddress: ev.shippingAddress,\r\n customerEmail: ev.payerEmail,\r\n customerPhone: ev.payerPhone\r\n };\r\n\r\n fetch('Checkout/ValidatePostCodeAndRegion',\r\n {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (result) {\r\n if (result.success && result.redirectUrl !== \"\") {\r\n ev.updateWith({ status: 'success', shippingOptions: getStripeShippingOptions(selPrice) });\r\n }\r\n else {\r\n ev.updateWith({ status: 'invalid_shipping_address' });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n \r\n }\r\n else {\r\n paymentRequest.update(getPaymentRequestUpdateOptions(amount, getStripeShippingOptions(selPrice)));\r\n }\r\n\r\n var isPaymentRequested = false;\r\n\r\n function getPaymentRequestOptions(amount: number, shippingOptions: any) {\r\n return {\r\n country: 'GB',\r\n currency: 'gbp',\r\n total: {\r\n label: 'Total including VAT',\r\n amount: getAmountInCents(amount),\r\n },\r\n requestPayerName: true,\r\n requestPayerEmail: true,\r\n requestShipping: true,\r\n requestPayerPhone: true,\r\n shippingOptions: shippingOptions\r\n }\r\n }\r\n\r\n function getPaymentRequestUpdateOptions(amount: number, shippingOptions: any) {\r\n return {\r\n total: {\r\n label: 'Total including VAT',\r\n amount: getAmountInCents(amount),\r\n },\r\n shippingOptions: shippingOptions,\r\n }\r\n }\r\n\r\n\r\n });\r\n}\r\n\r\nfunction openCalendar(el: any) {\r\n el.target.style.display = \"none\";\r\n\r\n var calendar = document.getElementsByClassName(\"deliveryCalendar\");\r\n if (calendar && calendar.item(0)) {\r\n calendar.item(0)!.removeAttribute(\"hidden\");\r\n }\r\n}\r\n\r\nfunction showHideCheckoutBox() {\r\n var basketEmpty = document.getElementById(\"basketEmptyText\");\r\n var checkoutBox = document.getElementsByClassName(\"checkout-box-container\")?.item(0);\r\n if (checkoutBox) {\r\n if (basketEmpty) {\r\n checkoutBox.setAttribute(\"hidden\", \"hidden\");\r\n } else {\r\n checkoutBox.removeAttribute(\"hidden\");\r\n }\r\n }\r\n}\r\n\r\nfunction isBasketEmpty() {\r\n var basketEmptyEl = document.getElementById(\"basketEmptyText\");\r\n\r\n return basketEmptyEl != null && basketEmptyEl != undefined;\r\n}\r\n","// Getter&Setter Delivered / Click & Collect buttons\r\nvar deliveryOptionsPersist =\r\n{\r\n\r\n getSelectedDeliveryTypeOption: function () {\r\n if (this.isLocalStorageSupported()) {\r\n return window.sessionStorage.getItem('gak_selected_delivery_type_option');\r\n }\r\n },\r\n saveSelectedDeliveryTypeOption: function (selectedDot) {\r\n if (this.isLocalStorageSupported()) {\r\n if (!selectedDot) {\r\n window.sessionStorage.removeItem('gak_selected_delivery_type_option');\r\n }\r\n else {\r\n window.sessionStorage.setItem('gak_selected_delivery_type_option', selectedDot);\r\n }\r\n }\r\n },\r\n resetSelectedDeliveryTypeOption: function () {\r\n this.saveSelectedDeliveryTypeOption(null);\r\n },\r\n\r\n getSelectedDelivery: function () {\r\n if (this.isLocalStorageSupported()) {\r\n var tempObj = window.sessionStorage.getItem('gak_selected_delivery_option');\r\n return tempObj ? JSON.parse(tempObj) : null;\r\n }\r\n },\r\n saveSelectedDelivery: function (selectedDeliveryTypeID, selectedDeliveryDate, isForceSetValues) {\r\n if (isForceSetValues || (selectedDeliveryTypeID && selectedDeliveryDate)) {\r\n var newDlv = {\r\n deliveryTypeID: selectedDeliveryTypeID,\r\n deliveryDate: selectedDeliveryDate\r\n };\r\n if (this.isLocalStorageSupported()) {\r\n window.sessionStorage.setItem('gak_selected_delivery_option', JSON.stringify(newDlv));\r\n }\r\n }\r\n },\r\n\r\n resetSelectedDelivery: function () {\r\n this.saveSelectedDelivery(null, null, true);\r\n },\r\n\r\n // Other functions\r\n resetAllDelvOpts: function () {\r\n this.resetSelectedDeliveryTypeOption();\r\n //saveSelectedDeliveryRegion(null);\r\n this.resetSelectedDelivery();\r\n },\r\n isLocalStorageSupported: function () {\r\n var testKey = 'test', storage = window.sessionStorage;\r\n try {\r\n storage.setItem(testKey, '1');\r\n storage.removeItem(testKey);\r\n return true;\r\n } catch (error) {\r\n console.log(error, \"isLocalStorageSupported\", 59);\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport { deliveryOptionsPersist }","/*!\n * paypal-js v7.0.3 (2023-09-19T14:17:47.731Z)\n * Copyright 2020-present, PayPal, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction findScript(url, attributes) {\n var currentScript = document.querySelector(\"script[src=\\\"\".concat(url, \"\\\"]\"));\n if (currentScript === null)\n return null;\n var nextScript = createScriptElement(url, attributes);\n // ignore the data-uid-auto attribute that gets auto-assigned to every script tag\n var currentScriptClone = currentScript.cloneNode();\n delete currentScriptClone.dataset.uidAuto;\n // check if the new script has the same number of data attributes\n if (Object.keys(currentScriptClone.dataset).length !==\n Object.keys(nextScript.dataset).length) {\n return null;\n }\n var isExactMatch = true;\n // check if the data attribute values are the same\n Object.keys(currentScriptClone.dataset).forEach(function (key) {\n if (currentScriptClone.dataset[key] !== nextScript.dataset[key]) {\n isExactMatch = false;\n }\n });\n return isExactMatch ? currentScript : null;\n}\nfunction insertScriptElement(_a) {\n var url = _a.url, attributes = _a.attributes, onSuccess = _a.onSuccess, onError = _a.onError;\n var newScript = createScriptElement(url, attributes);\n newScript.onerror = onError;\n newScript.onload = onSuccess;\n document.head.insertBefore(newScript, document.head.firstElementChild);\n}\nfunction processOptions(options) {\n var sdkBaseUrl = \"https://www.paypal.com/sdk/js\";\n if (options.sdkBaseUrl) {\n sdkBaseUrl = options.sdkBaseUrl;\n delete options.sdkBaseUrl;\n }\n var optionsWithStringIndex = options;\n var _a = Object.keys(optionsWithStringIndex)\n .filter(function (key) {\n return (typeof optionsWithStringIndex[key] !== \"undefined\" &&\n optionsWithStringIndex[key] !== null &&\n optionsWithStringIndex[key] !== \"\");\n })\n .reduce(function (accumulator, key) {\n var value = optionsWithStringIndex[key].toString();\n key = camelCaseToKebabCase(key);\n if (key.substring(0, 4) === \"data\") {\n accumulator.dataAttributes[key] = value;\n }\n else {\n accumulator.queryParams[key] = value;\n }\n return accumulator;\n }, {\n queryParams: {},\n dataAttributes: {},\n }), queryParams = _a.queryParams, dataAttributes = _a.dataAttributes;\n if (queryParams[\"merchant-id\"] &&\n queryParams[\"merchant-id\"].indexOf(\",\") !== -1) {\n dataAttributes[\"data-merchant-id\"] = queryParams[\"merchant-id\"];\n queryParams[\"merchant-id\"] = \"*\";\n }\n return {\n url: \"\".concat(sdkBaseUrl, \"?\").concat(objectToQueryString(queryParams)),\n dataAttributes: dataAttributes,\n };\n}\nfunction camelCaseToKebabCase(str) {\n var replacer = function (match, indexOfMatch) {\n return (indexOfMatch ? \"-\" : \"\") + match.toLowerCase();\n };\n return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, replacer);\n}\nfunction objectToQueryString(params) {\n var queryString = \"\";\n Object.keys(params).forEach(function (key) {\n if (queryString.length !== 0)\n queryString += \"&\";\n queryString += key + \"=\" + params[key];\n });\n return queryString;\n}\nfunction createScriptElement(url, attributes) {\n if (attributes === void 0) { attributes = {}; }\n var newScript = document.createElement(\"script\");\n newScript.src = url;\n Object.keys(attributes).forEach(function (key) {\n newScript.setAttribute(key, attributes[key]);\n if (key === \"data-csp-nonce\") {\n newScript.setAttribute(\"nonce\", attributes[\"data-csp-nonce\"]);\n }\n });\n return newScript;\n}\n\n/**\n * Load the Paypal JS SDK script asynchronously.\n *\n * @param {Object} options - used to configure query parameters and data attributes for the JS SDK.\n * @param {PromiseConstructor} [PromisePonyfill=window.Promise] - optional Promise Constructor ponyfill.\n * @return {Promise} paypalObject - reference to the global window PayPal object.\n */\nfunction loadScript(options, PromisePonyfill) {\n if (PromisePonyfill === void 0) { PromisePonyfill = Promise; }\n validateArguments(options, PromisePonyfill);\n // resolve with null when running in Node or Deno\n if (typeof document === \"undefined\")\n return PromisePonyfill.resolve(null);\n var _a = processOptions(options), url = _a.url, dataAttributes = _a.dataAttributes;\n var namespace = dataAttributes[\"data-namespace\"] || \"paypal\";\n var existingWindowNamespace = getPayPalWindowNamespace(namespace);\n // resolve with the existing global paypal namespace when a script with the same params already exists\n if (findScript(url, dataAttributes) && existingWindowNamespace) {\n return PromisePonyfill.resolve(existingWindowNamespace);\n }\n return loadCustomScript({\n url: url,\n attributes: dataAttributes,\n }, PromisePonyfill).then(function () {\n var newWindowNamespace = getPayPalWindowNamespace(namespace);\n if (newWindowNamespace) {\n return newWindowNamespace;\n }\n throw new Error(\"The window.\".concat(namespace, \" global variable is not available.\"));\n });\n}\n/**\n * Load a custom script asynchronously.\n *\n * @param {Object} options - used to set the script url and attributes.\n * @param {PromiseConstructor} [PromisePonyfill=window.Promise] - optional Promise Constructor ponyfill.\n * @return {Promise} returns a promise to indicate if the script was successfully loaded.\n */\nfunction loadCustomScript(options, PromisePonyfill) {\n if (PromisePonyfill === void 0) { PromisePonyfill = Promise; }\n validateArguments(options, PromisePonyfill);\n var url = options.url, attributes = options.attributes;\n if (typeof url !== \"string\" || url.length === 0) {\n throw new Error(\"Invalid url.\");\n }\n if (typeof attributes !== \"undefined\" && typeof attributes !== \"object\") {\n throw new Error(\"Expected attributes to be an object.\");\n }\n return new PromisePonyfill(function (resolve, reject) {\n // resolve with undefined when running in Node or Deno\n if (typeof document === \"undefined\")\n return resolve();\n insertScriptElement({\n url: url,\n attributes: attributes,\n onSuccess: function () { return resolve(); },\n onError: function () {\n var defaultError = new Error(\"The script \\\"\".concat(url, \"\\\" failed to load. Check the HTTP status code and response body in DevTools to learn more.\"));\n return reject(defaultError);\n },\n });\n });\n}\nfunction getPayPalWindowNamespace(namespace) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return window[namespace];\n}\nfunction validateArguments(options, PromisePonyfill) {\n if (typeof options !== \"object\" || options === null) {\n throw new Error(\"Expected an options object.\");\n }\n if (typeof PromisePonyfill !== \"undefined\" &&\n typeof PromisePonyfill !== \"function\") {\n throw new Error(\"Expected PromisePonyfill to be a function.\");\n }\n}\n\n// replaced with the package.json version at build time\nvar version = \"7.0.3\";\n\nexport { loadCustomScript, loadScript, version };\n","import { loadScript, PayPalScriptOptions } from \"@paypal/paypal-js\";\r\nimport { ShoppingBasket_ProceedToCheckout } from './gak-ShoppingBasket';\r\n\r\ndeclare const ShoppingBasketParms: any;\r\nconst requestHeaders: HeadersInit = new Headers();\r\nrequestHeaders.set('Content-Type', 'application/json');\r\n\r\nconst DisabledFundings = \"card,bancontact,blik,eps,giropay,ideal,mercadopago,mybank,p24,sepa,sofort,venmo\";\r\n\r\nexport function loadPayPalButton(\r\n scriptOptions: PayPalScriptOptions,\r\n label?:\r\n | \"paypal\"\r\n | \"checkout\"\r\n | \"buynow\"\r\n | \"pay\"\r\n | \"installment\"\r\n | \"subscribe\"\r\n | \"donate\",\r\n isSlideOutBasket = false) {\r\n var paypalButtonContainer = document.getElementById(\"paypal-button-container\");\r\n if (paypalButtonContainer) {\r\n scriptOptions.disableFunding = DisabledFundings;\r\n loadScript(scriptOptions)\r\n .then((paypal) => {\r\n paypal!.Buttons!({\r\n style: {\r\n shape: \"pill\",\r\n height: 41,\r\n label: label,\r\n disableMaxWidth: true\r\n },\r\n createOrder: function () {\r\n if (isSlideOutBasket) {\r\n return fetch(ShoppingBasketParms.CheckoutWithPayPalURL, {\r\n method: 'POST',\r\n }).then(function (res) {\r\n if (res.ok)\r\n return PayPalSetExpressCheckout();\r\n });\r\n }\r\n else {\r\n const updateForm = document.getElementById(\"UpdateStockForm\");\r\n const dojj = (document.getElementById(\"dojj\"))!;\r\n const url = updateForm.getAttribute('action')!;\r\n const data = new FormData(updateForm);\r\n\r\n data.set(\"btoajDelvOptParams\", dojj.value);\r\n data.set(\"checkout\", \"pp\");\r\n data.set(\"IsDigitalWallet\", \"false\");\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n body: data,\r\n }).then(function () {\r\n return PayPalSetExpressCheckout();\r\n })\r\n }\r\n },\r\n onApprove(data) {\r\n const ppButton = document.createElement(\"button\");\r\n\r\n ppButton.setAttribute(\"data-payment-mehtod\", \"PAYPAL\")\r\n ppButton.addEventListener(\"click\", ShoppingBasket_ProceedToCheckout);\r\n ppButton.click();\r\n\r\n return fetch(ShoppingBasketParms.PayPalSettle, {\r\n method: \"POST\",\r\n headers: requestHeaders,\r\n body: JSON.stringify({\r\n token: data.orderID,\r\n payerId: data.payerID\r\n })\r\n }).then((response) => response.json())\r\n .then((orderData) => {\r\n if (orderData.success === true) {\r\n let spinner = document.querySelector(\".page-loading-spinner.darker\");\r\n if (spinner) {\r\n spinner.classList.remove(\"hidden\");\r\n }\r\n\r\n let modalBasket = document.getElementById(\"modalbasket\");\r\n\r\n if (modalBasket) {\r\n modalBasket.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n window.location.href = ShoppingBasketParms.PayPalConfirm;\r\n } else {\r\n window.location.href = ShoppingBasketParms.PayPalErrorURL;\r\n }\r\n });\r\n },\r\n onError(err) {\r\n window.location.href = ShoppingBasketParms.PayPalErrorURL;\r\n }\r\n }).render('#paypal-button-container');\r\n })\r\n .catch((err) => {\r\n console.error(\"failed to load the PayPal JS SDK script\", err);\r\n });\r\n }\r\n\r\n function PayPalSetExpressCheckout() {\r\n return fetch(ShoppingBasketParms.PayPalSetExpressCheckout, {\r\n method: 'post',\r\n headers: requestHeaders\r\n }).then(function (res) {\r\n return res.json();\r\n }).then(function (data) {\r\n return data.token;\r\n });\r\n }\r\n}","import Utils from './utils'\r\ndeclare var setPriceDisplayTypeUrl: string;\r\n\r\nexport default class PriceHelper {\r\n public static isVATExPrice: boolean = false;\r\n public static formatter = new Intl.NumberFormat('en-GB', { style: 'currency', currency: 'GBP' });\r\n\r\n constructor() {\r\n this.initVATExPrice();\r\n }\r\n\r\n public initVATExPrice() {\r\n if (!this.getPDCookieAndSetFlag()) {\r\n fetch(setPriceDisplayTypeUrl,\r\n {\r\n method: 'POST'\r\n }\r\n ).then(this.getPDCookieAndSetFlag);\r\n }\r\n }\r\n\r\n public getPDCookieAndSetFlag(): boolean {\r\n var cookie = Utils.getCookie('pdt');\r\n if (cookie != null) {\r\n PriceHelper.isVATExPrice = cookie.split(',').length > 0 && cookie.split(',')[0] === \"VE\";\r\n if (PriceHelper.isVATExPrice) {\r\n PriceHelper.setPriceDisplay();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public static setPriceDisplay() {\r\n var elements = document.querySelectorAll('[data-price][data-pricevatex]');\r\n\r\n elements.forEach(function (el) {\r\n if (el != undefined) {\r\n var price: number = Number(el.querySelector('span')?.dataset?.price);\r\n var priceVATEx: number = Number(el.querySelector('span')?.dataset?.pricevatex);\r\n\r\n if (PriceHelper.isVATExPrice && !isNaN(priceVATEx)) {\r\n el.textContent = PriceHelper.formatter.format(priceVATEx);\r\n } else if (!PriceHelper.isVATExPrice && !isNaN(price)) {\r\n el.textContent = PriceHelper.formatter.format(price);\r\n }\r\n }\r\n });\r\n\r\n //For listing pages\r\n var isVatExelements = document.querySelectorAll('[data - isvatex]')!;\r\n\r\n isVatExelements.forEach(function (el) {\r\n el.querySelector('span')!.dataset.isvatex = String(PriceHelper.isVATExPrice)\r\n });\r\n }\r\n\r\n\r\n static formatPrice(price: number) {\r\n return PriceHelper.formatter.format(price);\r\n };\r\n\r\n static displayPrices() {\r\n PriceHelper.setPriceDisplay();\r\n }\r\n static excludeVAT(price: number, rate: number) {\r\n if (price > 0) {\r\n return Math.round((price / (1 + rate)) * 100) / 100;\r\n }\r\n return 0;\r\n }\r\n}","import { CookieConsentService } from \"./cookie-consent.js\";\r\nimport { GoogleScriptsService, FacebookScriptsService } from \"./tracking-scripts.js\";\r\nimport Swiper, { Navigation, Zoom, Pagination, Thumbs } from 'swiper';\r\nimport { pushEnhancedEcommerce, pushAddToCart, pushProductView } from \"./enhanced-ecommerce.js\";\r\nimport Utils from \"./utils\";\r\nimport PriceHelper from \"./price-helper\";\r\nimport { ShoppingBasket_BindEvents } from './gak-ShoppingBasket'\r\nimport { SetDojj } from './gak-DeliveryOptions';\r\nimport { ShoppingBasket_UpdateItemCount } from './common';\r\nimport { initBasketPanelSwiper } from './shopping-basket-panel';\r\nimport { loadPayPalButton } from './gak-PayPalButton';\r\nimport { getFormattedPrice } from './price-formatter';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\ndeclare var productDetailsParams: any;\r\ndeclare var EuroPrice_CurrencySymbol: any;\r\ndeclare var EuroPrice_ConversionRate: any;\r\n\r\nwindow.onload = function () {\r\n ProductDetails_BindEvents();\r\n pushEnhancedEcommerce();\r\n pushProductView();\r\n};\r\n\r\nfunction showWaitElement(show: any) {\r\n var waitElem = document.getElementsByClassName(\"wait-spinner\")!.item(0)!;\r\n if (waitElem) {\r\n if (show) waitElem.classList.remove('hidden');\r\n else waitElem.classList.add('hidden');\r\n }\r\n}\r\n\r\nfunction showItemAddedAlert() {\r\n var basketAlert = document.getElementById(\"basketAlert\");\r\n var alertText = document.querySelector(\"#basketAlert p\");\r\n\r\n if (basketAlert && alertText) {\r\n basketAlert.className = \"[ alert ] [ bg-green-1 text-green text-15 text-md-16 ]\";\r\n alertText.textContent = \"1x item added to basket\";\r\n }\r\n}\r\nfunction ProductDetails_BindEvents() {\r\n getDynamicData();\r\n\r\n var addToBasketButton = document.querySelectorAll(\".add-to-basket-button\");\r\n\r\n addToBasketButton.forEach(function (button) {\r\n button.addEventListener(\"click\", function () {\r\n ProductDetail_AddProductToOrder(productDetailsParams.ProductID, productDetailsParams.Title, productDetailsParams.FbContentIDS, 1);\r\n });\r\n button.removeAttribute(\"disabled\");\r\n button.removeAttribute(\"data-modal-disabled\");\r\n button.classList.remove(\"btn-disabled\");\r\n });\r\n\r\n bindAddToBasketFromPanel();\r\n\r\n //about finance link\r\n var financeLink = document.querySelector(\"a[href='#about-finance']\");\r\n if (financeLink) {\r\n financeLink.addEventListener(\"click\", function (evt) {\r\n evt.preventDefault();\r\n let financeTab = document.getElementById(\"financeTab\");\r\n if (financeTab) {\r\n financeTab.click();\r\n let detailsSection = document.querySelector('.pdp-full-details ');\r\n if (detailsSection) {\r\n detailsSection.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n });\r\n }\r\n\r\n //description read more button\r\n let descriptionTabContents = document.getElementById(\"t1\");\r\n if (descriptionTabContents) {\r\n if (descriptionTabContents.getBoundingClientRect().height > 550) {\r\n let toggleContents = document.querySelector(\"#t1 .toggle-parent .toggle-content\");\r\n if (toggleContents) {\r\n toggleContents.classList.add('show-more-item');\r\n }\r\n let toggleButtons = document.querySelector(\"#t1 .toggle-parent .toggle-control\");\r\n if (toggleButtons) {\r\n toggleButtons.classList.remove('hidden');\r\n }\r\n addToggleEvent();\r\n }\r\n }\r\n\r\n var ToggleButtons = document.querySelectorAll('[data-toggle-parent]');\r\n if (ToggleButtons.length) {\r\n ToggleButtons.forEach(function (toggle) {\r\n if (!toggle.classList.contains('click-bound')) {\r\n toggle.classList.add('click-bound');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (elem.getAttribute('aria-expanded') == \"false\") {\r\n elem.setAttribute('aria-expanded', 'true')\r\n }\r\n else {\r\n elem.setAttribute('aria-expanded', 'false');\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n\r\n let buyNowWithPayPal = document.getElementById(\"buyNowWithPayPal\");\r\n\r\n if (buyNowWithPayPal) {\r\n buyNowWithPayPal.addEventListener(\"click\", function (e: any) {\r\n buyNowWithPayPal_do(false);\r\n });\r\n\r\n buyNowWithPayPal.classList.remove(\"btn-disabled\");\r\n }\r\n\r\n const checkoutWithPayPalbtn = document.getElementById(\"paypal-button-container\");\r\n\r\n if (checkoutWithPayPalbtn) {\r\n loadPayPalButton({\r\n clientId: ShoppingBasketParms.PaylPalClientId,\r\n currency: \"GBP\",\r\n components: \"messages,buttons\"\r\n }, \"checkout\", true);\r\n }\r\n\r\n const products = document.querySelectorAll(\".list-view li\");\r\n products.forEach(function (productItem) {\r\n productItem.addEventListener('mouseover', function () {\r\n productItem.classList.add('hover');\r\n });\r\n productItem.addEventListener('mouseout', function () {\r\n productItem.classList.remove('hover');\r\n });\r\n });\r\n\r\n function getDynamicData() {\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var data = { productId: productDetailsParams.ProductID };\r\n\r\n fetch(`${productDetailsParams.GetBStockProductsURL}?productId=${data.productId}`, {\r\n method: 'GET'\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n }).then(function (data: any) {\r\n if (data && data.trim().length > 0) {\r\n var tabContainer = document.querySelector(\"[data-tab-name='bstock']\");\r\n var bStockTab = document.getElementById(\"bStockTab\");\r\n\r\n if (bStockTab && tabContainer) {\r\n bStockTab.classList.remove(\"visually-hidden\");\r\n tabContainer.innerHTML = data;\r\n }\r\n }\r\n });\r\n\r\n if (!productDetailsParams.SkipGetDynamicData) {\r\n fetch(productDetailsParams.GetDynamicDataURL, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n processDeliveryTimingDisplayData(data.timingDisplayData);\r\n processStockStatusData(data.stockStatusData);\r\n });\r\n }\r\n\r\n function processDeliveryTimingDisplayData(data: any) {\r\n productDetailsParams.DeliveryNextDayPossible = data.nextDayDeliveryPossible;\r\n productDetailsParams.DeliveryCutOffDisplay = data.deliveryCutOffTimeDisplay;\r\n productDetailsParams.DeliveryCutOffms = data.deliveryCutOffMsSinceUnixEpoch;\r\n }\r\n function processStockStatusData(data: any) {\r\n if (!data.inStock) {\r\n let elem = document.getElementById('inStock');\r\n if (elem) document.getElementById('inStock')!.style.display = \"none\";\r\n loadNotifyMeDiv();\r\n }\r\n else {\r\n var msgHtml = data.msg2 || data.msg1 || (data.inStock ? \"Next day delivery\" + (data.isEligibleClickAndCollect ? \" or Click & Collect\" : \"\") : \"Out of stock,
    available to order\");\r\n if (msgHtml === productDetailsParams.CollectionDeliveryMsg) msgHtml = \"\";\r\n let deliveryInfoMessage = data.msg2 || data.msg1 || (data.inStock ? \"Next day delivery\" + (data.isEligibleClickAndCollect ? \" or Click & Collect\" : \"\") : \"Out of stock,
    available to order\");\r\n let deliveryInfoElems = document.querySelectorAll('.pdp-heading-reviews .delivery-info');\r\n deliveryInfoElems.forEach(function (element) {\r\n (element as HTMLElement).style.display = \"block\";\r\n element.innerHTML = deliveryInfoMessage;\r\n });\r\n\r\n var nowMs = (new Date).getUTCMilliseconds();\r\n\r\n if (productDetailsParams.DeliveryNextDayPossible && data.isNextDay && data.inStock && productDetailsParams.DeliveryCutOffms > nowMs)\r\n setCountDown(productDetailsParams.DeliveryCutOffms);\r\n }\r\n\r\n if (data.isEligibleClickAndCollect) {\r\n let elem = document.getElementById('clickAndCollect');\r\n if (elem) document.getElementById('clickAndCollect')!.style.display = \"flex\";\r\n }\r\n\r\n let usps = document.getElementById('product-usps');\r\n if (usps) usps.style.opacity = \"1\";\r\n }\r\n\r\n\r\n function loadHtmlWithRecaptcha(htmlContent: string) {\r\n let parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlContent, 'text/html');\r\n\r\n var recaptchaContainer = doc.getElementsByClassName('ajaxRecaptchaContainer');\r\n\r\n if (recaptchaContainer && recaptchaContainer.item(0))\r\n recaptchaContainer.item(0)!.getElementsByTagName('script')!.item(0)!.remove();\r\n\r\n var notifyMeWhenInStockDiv = document.getElementById(\"notifyMeWhenInStockDiv\");\r\n\r\n if (notifyMeWhenInStockDiv)\r\n document.getElementById(\"notifyMeWhenInStockDiv\")!.innerHTML = htmlContent;\r\n\r\n var recaptchaElem = document.getElementsByClassName('g-recaptcha')!;\r\n if (typeof grecaptcha !== 'undefined' && grecaptcha && grecaptcha.render && recaptchaElem.length > 0) {\r\n grecaptcha.render((recaptchaElem.item(0)));\r\n }\r\n }\r\n\r\n function onNotifyMeWhenInStock(e: any) {\r\n if (e.success) {\r\n let modal = document.getElementById('notifyMeWhenInStockModal');\r\n var msgClass = e.success ? 'text-success success' : 'text-danger';\r\n var newDiv = '
    ' + e.message + '
    ';\r\n let div = document.getElementById(\"notifyMeWhenInStockDiv\");\r\n if (div) div.innerHTML = newDiv;\r\n let defaultContent = document.getElementById('notify-default');\r\n let defaultSuccess = document.getElementById('notify-success');\r\n if (defaultContent) defaultContent.classList.add(\"hidden\");\r\n if (defaultSuccess) defaultSuccess.classList.remove(\"hidden\");\r\n }\r\n else {\r\n let elem = document.getElementById('notifyMeWhenInStockModalErrorList')\r\n if (elem) elem.textContent = e.message;\r\n document.getElementById('notifyMeWhenInStockModalErrors')?.classList?.remove('hidden');\r\n }\r\n }\r\n\r\n // Notify Me When In Stock Div\r\n function loadNotifyMeDiv() {\r\n\r\n var recaptchaS = document.createElement(\"script\");\r\n recaptchaS.setAttribute(\"src\", \"https://www.google.com/recaptcha/api.js\");\r\n document.body.appendChild(recaptchaS);\r\n\r\n fetch(productDetailsParams.NotifyMeURL,\r\n {\r\n method: 'GET',\r\n cache: 'no-cache'\r\n }).then(response => response.text())\r\n .then(function (data) {\r\n loadHtmlWithRecaptcha(data);\r\n var modal = document.getElementById(\"notifyMeWhenInStockModal\");\r\n\r\n if (modal)\r\n modal.setAttribute('data-modal', '');\r\n\r\n var notifyMeBtn = document.getElementsByClassName('notifyMeWhenInStockBtn')!.item(0)!;\r\n\r\n if (notifyMeBtn) {\r\n\r\n notifyMeBtn.setAttribute('data-modal-open', 'notifyMeWhenInStockModal');\r\n\r\n (window as any).ARIAmodal.init();\r\n\r\n notifyMeBtn.addEventListener('click', function () {\r\n let notifyModal = document.getElementById('notifyMeWhenInStockModal')!;\r\n\r\n document.getElementById('notifyMeWhenInStockModalErrors')!.classList.add('hidden');\r\n\r\n if (typeof grecaptcha !== 'undefined' && grecaptcha && grecaptcha.reset) {\r\n grecaptcha.reset();\r\n }\r\n\r\n notifyModal.style.display = \"block\";\r\n });\r\n }\r\n var btnSubmit = document.getElementById(\"btnSubmit\")!;\r\n if (btnSubmit) {\r\n btnSubmit.addEventListener(\"click\", function (e) {\r\n var notifyForm = (document.querySelector('#notifyMeWhenInStockForm')!);\r\n let data = new FormData(notifyForm);\r\n\r\n fetch(productDetailsParams.NotifyMeURL, {\r\n method: 'POST',\r\n body: data\r\n }).then(response => response.json())\r\n .then(function (data) {\r\n onNotifyMeWhenInStock(data);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction bindAddToBasketFromPanel() {\r\n var addToBasketFromPanel = document.querySelectorAll(\".add-to-basket-from-panel-button\");\r\n\r\n addToBasketFromPanel.forEach(function (button: any) {\r\n button.addEventListener(\"click\", function () {\r\n const productCard = button.closest(\".product-card\");\r\n const productId = productCard.getAttribute(\"data-id\");\r\n const title = productCard.getAttribute(\"data-name\");\r\n ProductDetail_AddProductToOrder(productId, title, productDetailsParams.FbContentIDS, 1);\r\n });\r\n });\r\n\r\n var addCompanionToBasketFromPanel = document.querySelectorAll(\".add-companion-to-basket-from-panel-button\");\r\n\r\n addCompanionToBasketFromPanel.forEach(function (button: any) {\r\n button.addEventListener(\"click\", function () {\r\n const companionCard = button.closest(\".product-card\");\r\n const companionProductId = companionCard.getAttribute(\"data-id\");\r\n const primaryProductId = companionCard.getAttribute(\"data-primary-product-id\");\r\n\r\n if (primaryProductId)\r\n ProductDetail_AddCompanaionToOrder(+primaryProductId, +companionProductId);\r\n });\r\n });\r\n}\r\n\r\n//function loadVideo(url) {\r\n// $('#videoIframe').prop('src', url);\r\n// $('#remoteVideoModal').modal('show');\r\n//}\r\n\r\nfunction ProductDetail_GoToShoppingBasket(facebookFeedId?: any, basketErrorId?: number) {\r\n if (facebookFeedId != null && facebookFeedId != \"\" && CookieConsentService.didConsentToAllCookies()) {\r\n // Facebook Track code\r\n // AddToCart\r\n // Track when items are added to a shopping cart (ex. click/landing page on Add to Cart button)\r\n\r\n FacebookScriptsService.addFacebookTracking(false);\r\n var fbq = FacebookScriptsService.getFbq();\r\n fbq('track', 'AddToCart', {\r\n content_type: 'product', // Required for Dynamic Product Ads\r\n content_ids: facebookFeedId // Required for Dynamic Product Ads\r\n });\r\n // End Facebook Track code\r\n }\r\n\r\n window.location.href = ShoppingBasketParms.GoToShoppingBasketURL;\r\n}\r\n\r\n// It will add the product and quantity to the basket, taking into account that the underlyingProduct must be created as an order item also.\r\nfunction ProductDetail_AddFreeGift(theModalDialog: any, theSlickElement: any, theJqueryProduct: any, underlyingProductId: number, underlyingProductFacebookFeedId: any, maxItemsAllowed: number) {\r\n\r\n ShoppingBasketParms.FreeGiftList.push({\r\n productId: parseInt(theJqueryProduct.attr(\"myId\")),\r\n //quantity: parseInt(theJqueryProduct.attr(\"myQuantity\")),\r\n masterProductId: underlyingProductId,\r\n facebookFeedId: underlyingProductFacebookFeedId\r\n });\r\n\r\n //if (ShoppingBasketParms.FreeGiftList.length >= maxItemsAllowed) {\r\n // // Proceed to add the FreeGifts To Order.\r\n // //ProductDetail_AddFreeGiftsToOrder();\r\n // theModalDialog.modal('toggle'); // Closing the modal makes the AddFreeGiftsToOrder being invoked.\r\n //}\r\n //else {\r\n // // Remove the selected item\r\n // // http://stackoverflow.com/questions/30739499/slick-js-how-to-remove-current-slide\r\n // //theJqueryProduct.addClass(\"hidden\");\r\n // var i = theJqueryProduct.attr(\"data-slick-index\");\r\n // theSlickElement.slick('slickRemove', i);\r\n // $(\"div.slick-slide\").each(function () {\r\n // var j = $(this).attr(\"data-slick-index\");\r\n // if (j > i) {\r\n // $(this).attr(\"data-slick-index\", j - 1);\r\n // }\r\n // });\r\n\r\n //}\r\n}\r\n\r\nexport function ProductDetail_AddCompanaionToOrder(primaryProductId: number, companionId: number) {\r\n if (primaryProductId === null || companionId == null) return;\r\n\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var body = { primaryId: primaryProductId, companionId: companionId };\r\n\r\n fetch(ShoppingBasketParms.AddCompanionToOrderURL, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: JSON.stringify(body)\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n loadBasketPanel(function () {\r\n pushAddToCart(primaryProductId, 1);\r\n });\r\n\r\n if (data.basketErrorId) {\r\n var checkoutBtn = document.getElementById(\"checkout-btn\");\r\n var basketButton = document.getElementById(\"basketButton\");\r\n var errorUrl = `${ShoppingBasketParms.GoToShoppingBasketURL}?errorId=${data.basketErrorId}`;\r\n if (checkoutBtn)\r\n checkoutBtn.setAttribute(\"href\", errorUrl);\r\n\r\n if (basketButton)\r\n basketButton.setAttribute(\"data-url\", errorUrl);\r\n }\r\n\r\n showItemAddedAlert();\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n });\r\n}\r\n\r\nexport function ProductDetail_AddProductToOrder(productId: number, productTitle: string, facebookFeedId: any, productQuantity: number, redirectToBasket?: any) {\r\n if (productId === null) return;\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var body = { productId: productId, quantity: productQuantity }\r\n\r\n var basketEmptyMessage = document.getElementById(\"basketEmptyMessage\")!;\r\n var modalBasketContent = document.getElementById(\"modalBasketContent\")!;\r\n var modalBasketTotals = document.getElementById(\"modalBasketTotals\")!;\r\n\r\n modalBasketContent.removeAttribute(\"hidden\");\r\n modalBasketTotals.removeAttribute(\"hidden\");\r\n basketEmptyMessage.setAttribute(\"hidden\", \"hidden\");\r\n\r\n fetch(ShoppingBasketParms.AddProductToOrderURL, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: JSON.stringify(body)\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n loadBasketPanel(function () {\r\n pushAddToCart(productId, 1);\r\n });\r\n\r\n if (redirectToBasket) {\r\n ProductDetail_GoToShoppingBasket(facebookFeedId, data.basketErrorId);\r\n }\r\n\r\n if (data.basketErrorId) {\r\n let checkoutBtn = document.getElementById(\"checkout-btn\");\r\n let basketButton = document.getElementById(\"basketButton\");\r\n let errorUrl = `${ShoppingBasketParms.GoToShoppingBasketURL}?errorId=${data.basketErrorId}`;\r\n if (checkoutBtn)\r\n checkoutBtn.setAttribute(\"href\", errorUrl);\r\n\r\n if (basketButton)\r\n basketButton.setAttribute(\"data-url\", errorUrl);\r\n }\r\n\r\n showItemAddedAlert();\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n });\r\n}\r\nfunction waitForElm(selector: string) {\r\n return new Promise(resolve => {\r\n if (document.querySelector(selector)) {\r\n return resolve(document.querySelector(selector));\r\n }\r\n\r\n const observer = new MutationObserver(mutations => {\r\n if (document.querySelector(selector)) {\r\n resolve(document.querySelector(selector));\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n });\r\n}\r\nexport function loadBasketPanel(callback?: any) {\r\n const body = { includeEarliestDeliveryDates: true }\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n fetch(ShoppingBasketParms.GetBasketItemsURL, {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n var ulElem = document.getElementsByClassName(\"order-process-basket\")!.item(0)!;\r\n var totalElem = document.getElementById(\"basketTotal\")!;\r\n var subTotalElem = document.getElementById(\"basketSubTotal\")!;\r\n var deliveryPriceElem = document.getElementById(\"checkoutDeliveryPrice\")!;\r\n var deliveryDescriptionElem = document.getElementById(\"checkoutDeliveryDescription\")!;\r\n var deliveryMoreOptionsElem = document.getElementById(\"checkoutDeliveryMoreOptions\")!;\r\n var basketEmptyMessage = document.getElementById(\"basketEmptyMessage\")!;\r\n var modalBasketContent = document.getElementById(\"modalBasketContent\")!;\r\n var modalBasketTotals = document.getElementById(\"modalBasketTotals\")!;\r\n\r\n if (ulElem && data.basketVm.Items.length > 0) {\r\n modalBasketContent.removeAttribute(\"hidden\");\r\n modalBasketTotals.removeAttribute(\"hidden\");\r\n basketEmptyMessage.setAttribute(\"hidden\", \"hidden\");\r\n\r\n var nonGVItems = data.basketVm.Items.filter(function (item: any) {\r\n return !item.IsGiftVoucher\r\n });\r\n var liElem = \"\";\r\n var minDeliveryPrice = 0;\r\n\r\n if (nonGVItems.length == 0) {\r\n deliveryPriceElem.textContent = getFormattedPrice(0, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n } else {\r\n SetDojj(data.deliveryOptions);\r\n var defaultDeliveryOption = data.defaultDeliveryOption;\r\n minDeliveryPrice = defaultDeliveryOption.DayPriceList[0].Price;\r\n var formattedPrice = getFormattedPrice(minDeliveryPrice, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n deliveryPriceElem.textContent = formattedPrice;\r\n deliveryDescriptionElem.textContent = defaultDeliveryOption.Description;\r\n\r\n if (defaultDeliveryOption.IsSuperSaverNationalRatioApplied) {\r\n deliveryMoreOptionsElem.textContent = \"For next day, special and international delivery go to checkout\";\r\n } else {\r\n deliveryMoreOptionsElem.textContent = \"For special and international delivery go to checkout\";\r\n }\r\n }\r\n data.basketVm.Items.forEach(function (item: any) {\r\n liElem +=\r\n `
  • \r\n
    \r\n \r\n \"${item.Title}\"\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n ${PriceHelper.formatPrice(item.Price)}\r\n ${setOldPrice(item)}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
  • `\r\n });\r\n\r\n setQuickBuys(data);\r\n\r\n if (subTotalElem) {\r\n subTotalElem.textContent = PriceHelper.formatPrice(data.basketVm.PriceTotalItems);\r\n }\r\n var total = data.basketVm.PriceTotalItems;\r\n\r\n if (minDeliveryPrice > 0)\r\n total += minDeliveryPrice;\r\n\r\n if (totalElem) {\r\n totalElem.textContent = PriceHelper.formatPrice(total);\r\n }\r\n\r\n ulElem.innerHTML = liElem;\r\n ShoppingBasket_BindEvents(true);\r\n }\r\n else {\r\n modalBasketContent.setAttribute(\"hidden\", \"hidden\");\r\n modalBasketTotals.setAttribute(\"hidden\", \"hidden\");\r\n basketEmptyMessage.removeAttribute(\"hidden\");\r\n ulElem.innerHTML = \"\";\r\n\r\n var swiper = document.querySelector(\"#quickBuysSection .swiper-wrapper\");\r\n\r\n if (swiper)\r\n swiper.closest(\"section\")!.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n\r\n ShoppingBasket_UpdateItemCount();\r\n\r\n\r\n //sometime basket panel loads and disappears leaving the mask on. check if this happened\r\n let basketpanel = document.getElementById('modalbasket');\r\n if (basketpanel && basketpanel?.getAttribute('hidden') != null) {\r\n let closeButton = document.querySelector('#modalbasket .a11y-modal__close-btn') as HTMLButtonElement;\r\n if (closeButton) closeButton.click(); \r\n }\r\n\r\n if (callback)\r\n callback();\r\n });\r\n\r\n const quantitySelectMax = 20\r\n\r\n function getQuantityOptions(quantity: number) {\r\n let options = \"\";\r\n\r\n for (var i = 1; i <= quantitySelectMax; i++) {\r\n options += ``\r\n }\r\n\r\n return options;\r\n }\r\n}\r\n\r\nfunction setOldPrice(item: any) {\r\n if (item.Price < item.RRP)\r\n return `
    ${PriceHelper.formatPrice(item.RRP)}
    `;\r\n\r\n return \"\";\r\n}\r\n\r\nfunction setQuickBuys(data: any) {\r\n var companions = data.basketCompanions;\r\n var accessories = data.basketVm?.CrossSellProducts;\r\n var inStockCompanions = companions?.filter(function (item: any) {\r\n return item.IsProductStockAvailable;\r\n });\r\n var inStockAccessories = accessories?.filter(function (item: any) {\r\n return item.Availability == 1; // In Stock\r\n });\r\n\r\n if (inStockCompanions && inStockCompanions.length > 0) {\r\n renderQuickBuys(inStockCompanions);\r\n } else if (inStockAccessories && inStockAccessories.length > 0) {\r\n renderQuickBuys(inStockAccessories);\r\n } else if (companions?.length > 0) {\r\n renderQuickBuys(companions)\r\n } else if (accessories?.length > 0) {\r\n renderQuickBuys(accessories)\r\n }\r\n else {\r\n var swiper = document.querySelector(\"#quickBuysSection .swiper-wrapper\");\r\n\r\n if (swiper)\r\n swiper.closest(\"section\")!.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n}\r\n\r\nfunction renderQuickBuys(items: any) {\r\n let swiperElem = \"\";\r\n let counter = 1;\r\n let swiper = document.querySelector(\"#quickBuysSection .swiper-wrapper\");\r\n\r\n if (!swiper || !items) {\r\n return;\r\n }\r\n\r\n items.forEach(function (item: any) {\r\n swiperElem +=\r\n `
    \r\n
    \r\n \r\n
    \r\n ${setSavings(item)}\r\n
    \r\n
    \r\n \r\n ${PriceHelper.formatPrice(getItemPrice(item))}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    `;\r\n\r\n counter++;\r\n });\r\n\r\n swiper.innerHTML = `${swiperElem}
     
    `;\r\n swiper.closest(\"section\")!.removeAttribute(\"hidden\");\r\n initBasketPanelSwiper();\r\n bindAddToBasketFromPanel();\r\n\r\n function setSavings(item: any) {\r\n var itemPrice = getItemPrice(item);\r\n var itemRRPPrice = Math.max(item.RRP, item.Price);\r\n var savePrice = itemRRPPrice - itemPrice;\r\n\r\n if (item.IsCompanion && savePrice > 0)\r\n return `
    Save ${PriceHelper.formatPrice(savePrice)}
    `\r\n\r\n return \"\";\r\n }\r\n\r\n function getItemPrice(item: any) {\r\n return item.IsCompanion ? Math.min(item.CompanionPrice, item.Price) : item.Price;\r\n }\r\n\r\n function getItemAddToBasketClass(item: any) {\r\n return item.IsCompanion ? 'add-companion-to-basket-from-panel-button' : 'add-to-basket-from-panel-button';\r\n }\r\n\r\n function getListName(item: any) {\r\n return item.IsCompanion ? \"Companions\" : \"Accessories\";\r\n }\r\n}\r\n\r\nfunction setCountDown(date: any) {\r\n var countDownDate = new Date(date).getTime();\r\n // Update the count down every 1 second\r\n var x = setInterval(function () {\r\n\r\n var now = new Date().getTime();\r\n\r\n var distance = countDownDate - now;\r\n var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n var seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n if (distance < 0) {\r\n clearInterval(x);\r\n let elem1 = document.getElementById('inStock');\r\n if (elem1) document.getElementById('inStock')!.style.display = \"none\";\r\n\r\n } else {\r\n let elem2 = document.getElementById('coundDownContainer');\r\n if (elem2) document.getElementById('coundDownContainer')!.style.display = \"flex\";\r\n let countdownTime = document.getElementById(\"countdownTime\")\r\n if (countdownTime)\r\n countdownTime.innerHTML = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\r\n }\r\n }, 1000);\r\n}\r\n\r\nfunction checkoutWithPayPal() {\r\n const requestHeaders: HeadersInit = new Headers();\r\n\r\n let checkoutWithPayPal = document.getElementById(\"checkoutWithPayPal\");\r\n let spinner = document.querySelector(\".page-loading-spinner.darker\");\r\n let addToBasketBtn = document.querySelector(\".add-to-basket-button\");\r\n let modalBasket = document.getElementById(\"modalbasket\");\r\n\r\n if (modalBasket) {\r\n modalBasket.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n\r\n if (spinner) {\r\n spinner.classList.remove(\"hidden\");\r\n }\r\n\r\n requestHeaders.set('Content-Type', 'application/json');\r\n fetch(ShoppingBasketParms.CheckoutWithPayPalURL,\r\n {\r\n method: 'POST',\r\n headers: requestHeaders\r\n }\r\n ).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n window.location = data.redirectUrl;\r\n }\r\n else {\r\n alert(data.message);\r\n }\r\n }).finally(() => {\r\n //On a timeout as loading Paypal takes some time\r\n setTimeout(() => {\r\n if (checkoutWithPayPal) {\r\n checkoutWithPayPal.classList.remove(\"btn-disabled\");\r\n checkoutWithPayPal.removeAttribute(\"disabled\");\r\n\r\n if (spinner) {\r\n spinner.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n if (addToBasketBtn) {\r\n addToBasketBtn.classList.remove(\"btn-disabled\");\r\n addToBasketBtn.removeAttribute(\"disabled\");\r\n }\r\n }, 3500);\r\n });\r\n}\r\n\r\n\r\nfunction buyNowWithPayPal_do(isPayPalCredit: boolean) {\r\n buyNowWithPayment(productDetailsParams.ProductID, 1, isPayPalCredit);\r\n\r\n function buyNowWithPayment(productId: any, quantity: any, isPayPalCredit: boolean) {\r\n var qty = parseInt(quantity);\r\n if (isNaN(qty)) {\r\n alert(\"Please insert a valid quantity\");\r\n } else {\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var body = { productId: productId, quantity: qty, isPayPalCredit: isPayPalCredit }\r\n var addToBasketBtn = document.querySelector(\".add-to-basket-button\");\r\n\r\n if (addToBasketBtn) {\r\n addToBasketBtn.classList.add(\"btn-disabled\");\r\n addToBasketBtn.setAttribute(\"disabled\", \"true\");\r\n }\r\n var buyNowWithPayPal = document.getElementById(\"buyNowWithPayPal\");\r\n var spinner = document.querySelector(\".page-loading-spinner.darker\");\r\n\r\n if (buyNowWithPayPal) {\r\n buyNowWithPayPal.classList.add(\"btn-disabled\");\r\n buyNowWithPayPal.setAttribute(\"disabled\", \"true\");\r\n\r\n if (spinner) {\r\n spinner.classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n fetch(ShoppingBasketParms.BuyNowWithPayPalURL,\r\n {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: JSON.stringify(body)\r\n }\r\n ).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n window.location = data.redirectUrl;\r\n }\r\n else {\r\n alert(data.message);\r\n }\r\n }).finally(() => {\r\n //On a timeout as loading Paypal takes some time\r\n setTimeout(() => {\r\n if (buyNowWithPayPal) {\r\n buyNowWithPayPal.classList.remove(\"btn-disabled\");\r\n buyNowWithPayPal.removeAttribute(\"disabled\");\r\n\r\n if (spinner) {\r\n spinner.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n if (addToBasketBtn) {\r\n addToBasketBtn.classList.remove(\"btn-disabled\");\r\n addToBasketBtn.removeAttribute(\"disabled\");\r\n }\r\n }, 3500);\r\n });\r\n }\r\n }\r\n}\r\n\r\n///////////////////////////////////////////////////////////////////\r\n// Tabs //\r\n///////////////////////////////////////////////////////////////////\r\n\r\nconst Tabby = require('tabbyjs');\r\nif (document.getElementsByClassName('tabs').length) {\r\n const tabSelectors = document.querySelectorAll('[data-tabs]');\r\n\r\n tabSelectors.forEach((tabs, i) => {\r\n tabs.setAttribute(`data-tabs-${i}`, '');\r\n new Tabby(`[data-tabs-${i}]`);\r\n });\r\n\r\n\r\n\r\n /* The below code is used to scroll the tabs along when mobile users click,\r\n so they can see there are more tabs available. Safari doesn't yet support scroll-behaviour:smooth thouhg, but will soon */\r\n\r\n document.querySelectorAll('.tabs li').forEach((tabItem) => {\r\n tabItem.addEventListener('click', (elem) => {\r\n ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollLeft = (elem.currentTarget as HTMLElement).offsetLeft;\r\n });\r\n });\r\n}\r\n\r\n///////////////////////////////////////////////////////////////////\r\n// Carousels //\r\n///////////////////////////////////////////////////////////////////\r\nfunction initNavigationSwipers(swiperName: string, nextButton: string, prevButton: string) {\r\n let newSwiper = new Swiper(swiperName, {\r\n modules: [Navigation],\r\n direction: 'horizontal',\r\n cssMode: true,\r\n slidesPerView: \"auto\",\r\n loop: false,\r\n speed: 600,\r\n navigation: {\r\n nextEl: nextButton,\r\n prevEl: prevButton,\r\n },\r\n breakpoints: {\r\n 1024: {\r\n cssMode: false,\r\n slidesPerView: 4,\r\n spaceBetween: 40,\r\n },\r\n },\r\n });\r\n return newSwiper;\r\n}\r\n\r\nif (document.querySelector(\".thumbnail-gallery .swiper\")) {\r\n var galleryThumbs = new Swiper(\".thumbnail-gallery .swiper\", {\r\n modules: [Navigation, Pagination],\r\n centeredSlides: true,\r\n centeredSlidesBounds: true,\r\n slidesPerView: \"auto\",\r\n direction: 'horizontal',\r\n navigation: {\r\n nextEl: '.thumbnail-gallery .swiper-button-next',\r\n prevEl: '.thumbnail-gallery .swiper-button-prev',\r\n },\r\n breakpoints: {\r\n 900: {\r\n direction: 'vertical',\r\n slidesPerView: 5,\r\n },\r\n },\r\n });\r\n\r\n const gallerymain = new Swiper('.main-gallery .swiper', {\r\n modules: [Navigation, Zoom, Pagination, Thumbs],\r\n slidesPerView: \"auto\",\r\n zoom: true,\r\n loop: false,\r\n speed: 600,\r\n navigation: {\r\n nextEl: '.thumbnail-gallery .swiper-button-next',\r\n prevEl: '.thumbnail-gallery .swiper-button-prev',\r\n },\r\n thumbs: {\r\n swiper: galleryThumbs\r\n },\r\n });\r\n gallerymain.on('zoomChange', function () {\r\n var picture = document.querySelector('.main-gallery .swiper-slide.swiper-slide-active picture');\r\n var img = picture?.querySelector('img');\r\n var sourceAll = picture?.querySelectorAll('source');\r\n if (img && img.hasAttribute('data-zoomsrc') && sourceAll) {\r\n for (var i = 0, max = sourceAll.length; i < max; i++) {\r\n if (sourceAll) sourceAll[i]?.remove();\r\n }\r\n let zoomSrc = img?.getAttribute('data-zoomsrc')?.toString();\r\n if (zoomSrc) img?.setAttribute('src', zoomSrc);\r\n }\r\n });\r\n}\r\nif (document.querySelector(\".swiper.recommended\")) {\r\n const recommended = initNavigationSwipers('.swiper.recommended', '.recommended-container .swiper-button-next', '.recommended-container .swiper-button-prev');\r\n //const recommended = new Swiper('.swiper.recommended', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.recommended-container .swiper-button-next',\r\n // prevEl: '.recommended-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.alsobought\")) {\r\n const alsobought = initNavigationSwipers('.swiper.alsobought', '.alsobought-container .swiper-button-next', '.alsobought-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.alsobought', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.alsobought-container .swiper-button-next',\r\n // prevEl: '.alsobought-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.packagedeals\")) {\r\n const packagedeals = initNavigationSwipers('.swiper.packagedeals', '.packagedeals-container .swiper-button-next', '.packagedeals-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.packagedeals', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.packagedeals-container .swiper-button-next',\r\n // prevEl: '.packagedeals-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.accessories\")) {\r\n const accessories = initNavigationSwipers('.swiper.accessories', '.accessories-container .swiper-button-next', '.accessories-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.accessories', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.accessories-container .swiper-button-next',\r\n // prevEl: '.accessories-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.upgrade\")) {\r\n const upgrade = initNavigationSwipers('.swiper.upgrade', '.upgrade-container .swiper-button-next', '.upgrade-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.upgrade', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.upgrade-container .swiper-button-next',\r\n // prevEl: '.upgrade-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\n///////////////////////////////////////////////////////////////////\r\n// Toggle function (Show more) //\r\n///////////////////////////////////////////////////////////////////\r\naddToggleEvent();\r\n\r\nfunction addToggleEvent() {\r\n if (document.getElementsByClassName('toggle-parent').length) {\r\n // Show more boxes\r\n var showMoreToggles = document.querySelectorAll('.toggle-control .btn');\r\n showMoreToggles.forEach(function (toggle) {\r\n if (!toggle.classList.contains('event-added')) {\r\n toggle.classList.add('event-added');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (!(e.target as HTMLElement).outerHTML.startsWith('= 0 && basketButtonPos.bottom <= window.innerHeight && !isSticky) ||\r\n (footerPosition.top >= 0 && footerPosition.bottom <= window.innerHeight && !isSticky)) {\r\n documentBody.classList.remove('sticky-buy-now');\r\n isSticky = false\r\n } else {\r\n documentBody.classList.add('sticky-buy-now');\r\n isSticky = true;\r\n }\r\n }\r\n}\r\n","import { DeliveryOptions_BindEvents, DeliveryOptions_Init } from \"./gak-DeliveryOptions\"\r\nimport { FacebookScriptsService } from \"./tracking-scripts.js\";\r\nimport { basketParams } from './gak-DeliveryOptions'\r\nimport { debounceScript } from './Debounce.js';\r\nimport { loadBasketPanel } from './gak-ProductDetail';\r\nimport { ShoppingBasket_UpdateItemCount } from './common';\r\nimport { pushRemoveFromCart, pushAddToCart, onCheckout, onCheckoutOption, pushEnhancedEcommerce } from \"./enhanced-ecommerce.js\";\r\nimport Swiper, { Navigation } from 'swiper';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\ndeclare var basketConfig: any;\r\ndeclare var bpj: any;\r\n\r\nvar basketPanel: boolean = false;\r\nvar requestBasketUpdate =\r\n (debounceScript as any)(updateWholeCart,\r\n 500,\r\n { 'leading': false, 'trailing': true });\r\n\r\nvar qtyUpdateKeyUp =\r\n (debounceScript as any)(onQtyKeyUp,\r\n 500,\r\n { 'leading': false, 'trailing': true });\r\n\r\nfunction showWaitElement(show: any) {\r\n var waitElem = document.getElementsByClassName(\"wait-spinner\")!.item(0)!;\r\n if (waitElem) {\r\n if (show) waitElem.classList.remove('hidden');\r\n else waitElem.classList.add('hidden');\r\n }\r\n}\r\n\r\nfunction disableBasketButtons() {\r\n //Disable +, - and remove buttons\r\n var buttons = document.querySelectorAll(\r\n \".order-process-basket button.decrease, \\\r\n .order-process-basket button.increase, \\\r\n .order-process-basket button.remove-order-item-button, \\\r\n .order-process-basket .quantity-select\");\r\n buttons.forEach(function (b) {\r\n b.classList.add(\"btn-disabled\");\r\n b.setAttribute(\"disabled\", \"\");\r\n });\r\n\r\n var qtys = document.querySelectorAll(\".order-process-basket input.js-stepper.quantity\");\r\n qtys.forEach(function (q) {\r\n q.setAttribute(\"readonly\", \"\");\r\n });\r\n}\r\n\r\nfunction onQtyKeyUp(e: any) {\r\n let inputElement = e.srcElement;\r\n if (inputElement.readOnly) return;\r\n\r\n let oldValue = parseInt(inputElement.closest('li').getAttribute('data-quantity'));\r\n let newValue = parseInt(inputElement.value);\r\n if (isNaN(newValue)) return;\r\n newValue = sanitizeQtyInput(newValue);\r\n if (oldValue !== newValue) {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n updateStepper(e.srcElement);\r\n inputElement.focus();\r\n }\r\n}\r\n\r\nexport function updateWholeCart(newRegionId: any) {\r\n var basketItems = document.querySelectorAll(\".basket-item\");\r\n var form = new FormData();\r\n\r\n if (basketItems)\r\n basketItems.forEach(function (item, i) {\r\n var id = item.getAttribute(\"data-id\")!;\r\n var quantity = item.getAttribute(\"data-quantity\")!;\r\n\r\n form.append(`orderItems[${i}][ID]`, id);\r\n form.append(`orderItems[${i}][Quantity]`, quantity);\r\n });\r\n\r\n if (newRegionId) {\r\n form.append(\"newRegionId\", newRegionId);\r\n }\r\n\r\n form.append(\"redirectToShoppingBasket\", (!basketPanel).toString());\r\n\r\n fetch(ShoppingBasketParms.UpdateCartURL, {\r\n method: 'POST',\r\n body: form\r\n }).then(response => response.text())\r\n .then(function (data: any) {\r\n if (basketPanel) {\r\n loadBasketPanel();\r\n }\r\n else {\r\n updateBasketContent(data);\r\n }\r\n showItemUpdatedAlert();\r\n showWaitElement(false);\r\n });\r\n}\r\n\r\nfunction showItemUpdatedAlert() {\r\n var basketAlert = document.getElementById(\"basketAlert\");\r\n var alertText = document.querySelector(\"#basketAlert p\");\r\n\r\n if (basketAlert && alertText) {\r\n basketAlert.className = \"[ alert ] [ bg-green-1 text-green text-15 text-md-16 ]\";\r\n alertText.textContent = \"Item quantity updated\";\r\n }\r\n}\r\n\r\nfunction showItemRemovedAlert() {\r\n var basketAlert = document.getElementById(\"basketAlert\");\r\n var alertText = document.querySelector(\"#basketAlert p\");\r\n\r\n if (basketAlert && alertText) {\r\n basketAlert.className = \"[ alert ] [ bg-red-1 text-red text-15 text-md-16 ]\";\r\n alertText.textContent = \"1x item removed from basket\";\r\n }\r\n}\r\n\r\nfunction sanitizeQtyInput(value: number) {\r\n if (value < 0)\r\n return 0;\r\n if (value > 1000)\r\n return 1000;\r\n return value;\r\n}\r\n\r\nfunction updateStepper(element: any) {\r\n var quantityInput = element.parentNode.querySelector(\"input\");\r\n var li = element.closest(\"[data-quantity]\");\r\n var productId = li.getAttribute(\"data-product-id\");\r\n if (quantityInput) {\r\n var newValue = parseInt(quantityInput.value);\r\n var oldValue = parseInt(quantityInput.getAttribute('value'));\r\n var classList = element.classList;\r\n if (classList.contains(\"decrease\")) {\r\n newValue--;\r\n } else if (classList.contains(\"increase\")) {\r\n newValue++;\r\n }\r\n newValue = sanitizeQtyInput(newValue);\r\n quantityInput.value = newValue;\r\n quantityInput.setAttribute(\"value\", newValue);\r\n li.setAttribute(\"data-quantity\", newValue);\r\n\r\n if (oldValue > newValue)\r\n pushRemoveFromCart(productId, oldValue - newValue);\r\n else\r\n pushAddToCart(productId, newValue - oldValue);\r\n }\r\n\r\n requestBasketUpdate();\r\n}\r\n\r\nexport function ShoppingBasket_BindEvents(isBasketPanel: boolean = false) {\r\n basketPanel = isBasketPanel;\r\n let decreaseBtns = document.querySelectorAll(\".stepper button.decrease\");\r\n let increaseBtns = document.querySelectorAll(\".stepper button.increase\");\r\n let removeBtns = document.querySelectorAll(\".remove-order-item-button\");\r\n let qtyInputs = document.querySelectorAll(\".stepper .js-stepper.quantity\");\r\n\r\n const quantitySelect = document.querySelectorAll(\".quantity-select\");\r\n\r\n if (quantitySelect) {\r\n quantitySelect.forEach(function (element: any) {\r\n element.addEventListener(\"change\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n\r\n const li = element.closest(\"[data-quantity]\");\r\n li.setAttribute(\"data-quantity\", element.value);\r\n requestBasketUpdate();\r\n });\r\n });\r\n }\r\n\r\n if (decreaseBtns) {\r\n decreaseBtns.forEach(function (element: any) {\r\n element.addEventListener(\"click\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n updateStepper(element);\r\n });\r\n });\r\n }\r\n\r\n if (increaseBtns) {\r\n increaseBtns.forEach(function (element: any) {\r\n element.addEventListener(\"click\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n updateStepper(element);\r\n });\r\n });\r\n }\r\n\r\n removeBtns.forEach(function (element: any) {\r\n element.addEventListener(\"click\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n var ordermItemId = element.closest(\"li\").getAttribute(\"data-id\");\r\n removeOrderItem(ordermItemId);\r\n });\r\n });\r\n\r\n qtyInputs.forEach(function (qty) {\r\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2) {\r\n qty.addEventListener(\"blur\", qtyUpdateKeyUp);\r\n } else {\r\n qty.addEventListener(\"keyup\", qtyUpdateKeyUp);\r\n }\r\n });\r\n\r\n const recommended = new Swiper('.swiper.recommended', {\r\n modules: [Navigation],\r\n direction: 'horizontal',\r\n cssMode: true,\r\n slidesPerView: \"auto\",\r\n loop: false,\r\n speed: 600,\r\n navigation: {\r\n nextEl: '.recommended-container .swiper-button-next',\r\n prevEl: '.recommended-container .swiper-button-prev',\r\n },\r\n breakpoints: {\r\n 1024: {\r\n cssMode: false,\r\n slidesPerView: 4,\r\n spaceBetween: 40,\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport function showBasketError(msg: string) {\r\n var basketErrorContainer = document.getElementsByClassName(\"basketErrorContainer\")?.item(0);\r\n\r\n if (basketErrorContainer)\r\n basketErrorContainer.textContent = msg;\r\n}\r\n\r\n\r\nfunction removeOrderItem(orderItemId: any) {\r\n if (orderItemId != null && orderItemId != \"\") {\r\n var form = new FormData();\r\n form.append(\"orderItemId\", orderItemId)\r\n fetch(ShoppingBasketParms.DestroyOrderItemURL, {\r\n method: \"POST\",\r\n body: form\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n showBasketError(\"Unable to remove from basket, please try again\");\r\n })\r\n .then(function (data) {\r\n if (basketPanel) {\r\n loadBasketPanel();\r\n pushProductRemovalToGA(orderItemId);\r\n }\r\n else {\r\n pushProductRemovalToGA(orderItemId);\r\n updateBasketContent(data);\r\n }\r\n showWaitElement(true);\r\n showItemRemovedAlert();\r\n });\r\n }\r\n}\r\n\r\n\r\nfunction pushProductRemovalToGA(orderItemId: any) {\r\n var product = document.querySelector(`[data-id=\"${orderItemId}\"]`);\r\n if (product) {\r\n var productId = product.getAttribute(\"data-product-id\");\r\n if (productId) {\r\n var quantity = product.getAttribute(\"data-quantity\");\r\n var quantityNo = 0;\r\n\r\n if (quantity)\r\n quantityNo = parseInt(quantity);\r\n else {\r\n var productDetails = document.querySelector(`[data-product-id='${product.id}']`);\r\n\r\n if (productDetails)\r\n quantityNo = parseInt(productDetails.getAttribute(\"data-quantity\") || \"0\");\r\n }\r\n\r\n pushRemoveFromCart(productId, quantityNo);\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction loadShoppingBasket() {\r\n fetch(basketConfig.basketUrl, {\r\n method: 'GET',\r\n }).then(response => response.text())\r\n .then(function (data: any) {\r\n updateBasketContent(data);\r\n pushEnhancedEcommerce();\r\n onCheckout(1);\r\n });\r\n}\r\n\r\n\r\nfunction updateBasketContent(data: any) {\r\n var currentBasketContainer = document.getElementById(\"shoppingBasketContent\")\r\n\r\n if (currentBasketContainer)\r\n currentBasketContainer.innerHTML = data;\r\n\r\n var parser = new DOMParser();\r\n var html = parser.parseFromString(data, 'text/html');\r\n\r\n if (html) {\r\n var bpj = (html.getElementById(\"bpj\")!);\r\n if (bpj) {\r\n DeliveryOptions_Init(bpj.value);\r\n ShoppingBasket_BindEvents(basketPanel);\r\n if (!basketPanel) {\r\n DeliveryOptions_BindEvents(true);\r\n }\r\n }\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n}\r\n\r\nexport function ShoppingBasket_ProceedToCheckout(e: any) {\r\n var theButton = e.currentTarget;\r\n var deliveryTypeId = (document.getElementById(\"deliveryTypeID\"));\r\n\r\n if (basketParams && basketParams.OutOfStock && ((deliveryTypeId!.value || '') == '')) {\r\n // Monkeypatched alert is async... so prevent first!\r\n e.preventDefault();\r\n alert(\"You must select a Delivery Option before Checkout\");\r\n return;\r\n }\r\n\r\n // Facebook Track code\r\n // InitiateCheckout\r\n // Track when people enter the checkout flow (ex. click/landing page on checkout button)\r\n\r\n FacebookScriptsService.addFacebookTracking(false);\r\n FacebookScriptsService.addFacebookEvent('InitiateCheckout');\r\n\r\n var chosenOption = document.querySelector(\".chosenOption span[data-helptext]\");\r\n\r\n if (chosenOption) {\r\n var chosenOptionDesc = chosenOption.getAttribute(\"data-helptext\");\r\n\r\n if (chosenOptionDesc)\r\n onCheckoutOption(1, chosenOptionDesc);\r\n }\r\n\r\n var paymentMethod = theButton.getAttribute(\"data-payment-mehtod\");\r\n\r\n onCheckoutOption(1, paymentMethod);\r\n\r\n //(document.getElementById(\"UpdateStockForm\") as any).submit();\r\n}\r\n\r\nfunction toggleFooter() {\r\n var ToggleButtons = document.querySelectorAll('[data-toggle-parent]');\r\n if (ToggleButtons.length) {\r\n ToggleButtons.forEach(function (toggle) {\r\n if (!toggle.classList.contains('click-bound')) {\r\n toggle.classList.add('click-bound');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (elem.getAttribute('aria-expanded') == \"false\") {\r\n elem.setAttribute('aria-expanded', 'true')\r\n }\r\n else {\r\n elem.setAttribute('aria-expanded', 'false');\r\n }\r\n })\r\n }\r\n })\r\n }\r\n}\r\n\r\nwindow.onload = function () {\r\n loadShoppingBasket();\r\n toggleFooter();\r\n}","import Swiper, { Navigation, Pagination } from 'swiper';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\n\r\nfunction waitForElm(selector: string) {\r\n return new Promise(resolve => {\r\n if (document.querySelector(selector)) {\r\n return resolve(document.querySelector(selector));\r\n }\r\n\r\n const observer = new MutationObserver(mutations => {\r\n if (document.querySelector(selector)) {\r\n resolve(document.querySelector(selector));\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n });\r\n}\r\n\r\nexport function initBasketPanelSwiper() {\r\n const basketalsobought = new Swiper('.swiper.basket-alsobought', {\r\n modules: [Navigation, Pagination],\r\n direction: 'horizontal',\r\n cssMode: true,\r\n slidesPerView: 3.5,\r\n slidesPerGroup: 3,\r\n spaceBetween: 8,\r\n loop: false,\r\n speed: 600,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true,\r\n type: 'bullets',\r\n },\r\n breakpoints: {\r\n 500: {\r\n cssMode: false,\r\n slidesPerView: 4.5,\r\n slidesPerGroup: 4,\r\n },\r\n },\r\n });\r\n}\r\n\r\n\r\n","const Tabby = require('tabbyjs');\r\ninitTabs();\r\n\r\nfunction initTabs() {\r\n let tabsList = document.querySelectorAll('[data-tabs]');\r\n if (tabsList && tabsList.length > 0) {\r\n var tabs = new Tabby('[data-tabs]');\r\n if (document.getElementsByClassName('tabs').length) {\r\n const tabSelectors = document.querySelectorAll('ul.tabs') as NodeList;\r\n tabSelectors.forEach((tab, i) => {\r\n let selector = `data-tabs-${i}`;\r\n (tab as HTMLElement).setAttribute(selector, '');\r\n new Tabby(`[data-tabs-${i}]`);\r\n });\r\n\r\n //Scroll the tabs along when mobile/desktop users click\r\n document.querySelectorAll('.tabs li').forEach((tabItem) => {\r\n tabItem.addEventListener('click', (elem) => {\r\n if (window.matchMedia(\"(min-width: 1024px)\").matches) {\r\n let viewport = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).parentElement;\r\n let offset = (elem.currentTarget as HTMLElement).offsetLeft;\r\n if (viewport && (offset > ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollWidth - viewport.clientWidth)) {\r\n offset = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollWidth - viewport.clientWidth;\r\n }\r\n ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).style.transform = 'translate(-' + offset + 'px)';\r\n let prevButton = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).previousElementSibling as HTMLElement;\r\n let nextButton = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).nextElementSibling as HTMLElement;\r\n checkButtons((elem.currentTarget as HTMLElement).parentNode as HTMLElement, nextButton, prevButton);\r\n }\r\n else {\r\n ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollLeft = (elem.currentTarget as HTMLElement).offsetLeft;\r\n }\r\n });\r\n });\r\n\r\n window.onresize = checkScrollingTabContainers;\r\n checkScrollingTabContainers();\r\n }\r\n }\r\n}\r\n\r\nfunction checkScrollingTabContainers(): void {\r\n document.querySelectorAll('.scrolling-tab-container').forEach((tabContainer) => {\r\n let tablisting: any = tabContainer.getElementsByClassName('tabs').item(0);\r\n (tablisting as HTMLElement).removeAttribute('style');\r\n let prevButton = tabContainer.getElementsByClassName('tab-previous').item(0);\r\n (prevButton as HTMLElement).classList.remove('disabled');\r\n let nextButton = tabContainer.getElementsByClassName('tab-next').item(0);\r\n (nextButton as HTMLElement).classList.remove('disabled');\r\n if (!tablisting) {\r\n (prevButton as HTMLElement).classList.add('disabled');\r\n (nextButton as HTMLElement).classList.add('disabled');\r\n }\r\n else {\r\n //initial state\r\n (prevButton as HTMLElement).classList.add('disabled');\r\n if (getLastVisibleTab(tablisting) == tablisting.children.length - 1) {\r\n (nextButton as HTMLElement).classList.add('disabled');\r\n }\r\n }\r\n\r\n //click events\r\n nextButton?.addEventListener('click', (elem) => {\r\n elem.preventDefault();\r\n let buttonElem = (elem.currentTarget as HTMLElement);\r\n let tablist: any = buttonElem.previousElementSibling;\r\n let prevButton: HTMLElement = tablist.previousElementSibling;\r\n let index = getLastVisibleTab(tablist);\r\n if (index < tablist.children.length - 1) {\r\n let viewport = (tablist as HTMLElement).parentElement;\r\n let offset = tablist.children[index + 1].offsetLeft;\r\n if (viewport && offset > (tablist as HTMLElement).scrollWidth - viewport.clientWidth + 45) {\r\n offset = (tablist as HTMLElement).scrollWidth - viewport.clientWidth + 45;\r\n }\r\n (tablist as HTMLElement).style.transform = 'translate(-' + offset + 'px)';\r\n checkButtons((tablist as HTMLElement), buttonElem, prevButton);\r\n }\r\n else {\r\n buttonElem.classList.add('disabled');\r\n }\r\n });\r\n prevButton?.addEventListener('click', (elem) => {\r\n elem.preventDefault();\r\n let buttonElem = (elem.currentTarget as HTMLElement);\r\n let tablist: any = buttonElem.nextElementSibling;\r\n let nextButton: HTMLElement = tablist.nextElementSibling;\r\n let index = getFirstVisibleTab(tablist);\r\n if (index > 0) {\r\n let viewport = (tablist as HTMLElement).parentElement;\r\n let offset = tablist.children[index - 1].offsetLeft;\r\n if (viewport && offset < 0) {\r\n offset = 0;\r\n }\r\n (tablist as HTMLElement).style.transform = 'translate(-' + offset + 'px)';\r\n checkButtons((tablist as HTMLElement), nextButton, buttonElem);\r\n }\r\n else {\r\n buttonElem.classList.add('disabled');\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction getFirstVisibleTab(tabList: any): number {\r\n let index = 0;\r\n let viewport = (tabList as HTMLElement).parentElement;\r\n for (let child of tabList.children) {\r\n if (viewport && tabList &&\r\n (child.getBoundingClientRect().x) >= viewport.getBoundingClientRect().x) {\r\n break;\r\n }\r\n index++;\r\n }\r\n return index;\r\n}\r\n\r\nfunction getLastVisibleTab(tabList: any): number {\r\n let count = (tabList as any).children.length - 1;\r\n let ctr = count;\r\n let viewport = (tabList as HTMLElement).parentElement;\r\n for (ctr = count; ctr >= 0; ctr--) {\r\n if (viewport && tabList && tabList.children[ctr]) {\r\n if ((tabList.children[ctr].getBoundingClientRect().x + tabList.children[ctr].getBoundingClientRect().width + 20) <=\r\n (viewport.getBoundingClientRect().x + viewport.getBoundingClientRect().width)) {\r\n break;\r\n }\r\n }\r\n }\r\n return ctr;\r\n}\r\n\r\nfunction checkButtons(tablist: HTMLElement, nextButton: HTMLElement, prevButton: HTMLElement): void {\r\n setTimeout(() => {\r\n if (getLastVisibleTab(tablist) == (tablist.children.length - 1)) {\r\n nextButton?.classList.add('disabled');\r\n }\r\n else {\r\n nextButton?.classList.remove('disabled');\r\n }\r\n if (getFirstVisibleTab(tablist) > 0) {\r\n prevButton?.classList.remove('disabled');\r\n }\r\n else {\r\n prevButton?.classList.add('disabled');\r\n }\r\n }, 500);\r\n}\r\n\r\n\r\nexport { initTabs };","declare var ImagesParams: {\r\n UseCDNImageCache: boolean,\r\n CloudflareAccountHash: string\r\n};\r\n\r\nexport default class Utils {\r\n static deleteCookie = (name: string) => {\r\n document.cookie = name + \"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\r\n };\r\n\r\n static getCookie(cookieName: string) {\r\n let cookie: any = {};\r\n document.cookie.split(';').forEach(function (el) {\r\n let [key, value] = el.split('=');\r\n cookie[key.trim()] = value;\r\n })\r\n\r\n return cookie[cookieName];\r\n }\r\n\r\n static setCookie(name: string, value: any, days: number) {\r\n var expires = \"\";\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n else {\r\n expires = \"; expires=Session\";\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n }\r\n\r\n static setSessionCookie(name: string, value: any) {\r\n var expires = \"\";\r\n expires = \"; expires=Session\";\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n }\r\n\r\n\r\n static getHashKeyValuePairs() {\r\n return this.getUrlKeyValuePairs(window.location.hash);\r\n }\r\n\r\n static getHrefKeyValuePairs() {\r\n return this.getUrlKeyValuePairs(window.location.search);\r\n }\r\n\r\n static getUrlKeyValuePairs(url: string) {\r\n var result = [];\r\n\r\n if (url) {\r\n var hash = url.substring(1); //removes the # or ? character for hash or queryString repectively.\r\n var pairs = hash.split('&');\r\n for (var i = 0; i < pairs.length; i++) {\r\n var pairParts = pairs[i].split('=');\r\n if (pairParts.length == 2) {\r\n var key = pairParts[0];\r\n var value = pairParts[1];\r\n result.push({ key: key, value: value });\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n static loadImagesForProductListings_BasedOnView(prodListing: any) {\r\n var isGridView = prodListing.hasClass('view-as-grid');\r\n prodListing.find('.productImageWrapper img').each(function (index: any) {\r\n var img = document.querySelector(index);\r\n setTimeout(function () {\r\n var newImgUrl = img.closest('.innerwrapper').data(isGridView ? 'prodimggridview' : 'prodimglistview');\r\n // Set the new Img Url to the proper attribute src or lazy-src.\r\n if (img.attr(\"lazy-src\")) {\r\n img.attr(\"lazy-src\", newImgUrl);\r\n }\r\n else if (img[0].src) {\r\n img[0].src = newImgUrl;\r\n }\r\n }, 1);\r\n });\r\n }\r\n\r\n static getImageURL(width: number, height: number, imgUrl: string): string {\r\n if (ImagesParams.UseCDNImageCache) {\r\n if (imgUrl.startsWith('~')) {\r\n imgUrl = imgUrl.substring(1);\r\n }\r\n return `https://www.gak.co.uk/cdn-cgi/image/fit=scale-down,width=${width},height=${height},format=auto/${imgUrl}`;\r\n }\r\n else {\r\n return `https://www.gak.co.uk/cdn-cgi/imagedelivery/${ImagesParams.CloudflareAccountHash}/${imgUrl}/${width}x${height}`;\r\n }\r\n \r\n }\r\n\r\n static atou(b64: string) {\r\n return decodeURIComponent(escape(atob(b64)));\r\n }\r\n\r\n static utoa(data: any) {\r\n return btoa(unescape(encodeURIComponent(data)));\r\n }\r\n}","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { extend } from '../../shared/utils.js';\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n }\n swiper.emit('breakpoint', breakpointParams);\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nexport default {\n checkOverflow\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","export default function removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { extend, deleteProps, createElement, elementChildren, elementStyle, elementIndex } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nimport { processLazyPreloader, preload } from '../shared/process-lazy-preloader.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.shadowEl) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement ? el : wrapperEl,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","export default {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nimport onLoad from './onLoad.js';\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nexport default {\n attachEvents,\n detachEvents\n};","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","import { processLazyPreloader } from '../../shared/process-lazy-preloader.js';\nexport default function onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) {\n const proceed = event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","import { getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n if (!data.isMoved) {\n if (isLoop) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","export default function unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { elementChildren } from '../../shared/utils.js';\nexport default function loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}","export default function loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n slideTo: false,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix(loopParams);\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix(loopParams);\n }\n }\n swiper.emit('loopFix');\n}","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","import { getWindow } from 'ssr-window';\nimport { elementParents } from '../../../shared/utils.js';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.el);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.el, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}","import { elementChildren, nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n }\n swiper.emit('setTransition', duration, byController);\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { preload } from '../../shared/process-lazy-preloader.js';\nexport function getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nexport default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}","export default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = e.closest(`.${params.slideClass}, swiper-slide`);\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}","import { elementStyle } from '../../shared/utils.js';\nexport default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { elementChildren, elementOuterSize, elementStyle, setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}","import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';\nexport default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}","export default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.shadowRoot.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport { elementIndex, elementOuterSize, elementParents } from '../../shared/utils.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const newSlideIndex = swiper.getSlideIndexByData(index);\n const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);\n if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {\n swiper.loopFix({\n direction: newSlideIndex > currentSlideIndex ? 'next' : 'prev',\n activeSlideIndex: newSlideIndex,\n slideTo: false\n });\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(params.clickableClass);\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n let {\n el\n } = swiper.pagination;\n if (!Array.isArray(el)) el = [el].filter(element => !!element);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport { elementChildren, isObject } from '../../shared/utils.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementChildren, elementOffset, elementParents, getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.el.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\n }\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import { createElement, elementChildren } from './utils.js';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}","import { getWindow } from 'ssr-window';\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\nexport { getBrowser };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\nexport { getDevice };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nexport { getSupport };","export const processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nexport const preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};","import { getWindow, getDocument } from 'ssr-window';\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction findElementsInElements(elements = [], selector = '') {\n const found = [];\n elements.forEach(el => {\n found.push(...el.querySelectorAll(selector));\n });\n return found;\n}\nfunction elementChildren(element, selector = '') {\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty, getSlideTransformEl,\n// dom\nfindElementsInElements, createElement, elementChildren, elementOffset, elementPrevAll, elementNextAll, elementStyle, elementIndex, elementParents, elementTransitionEnd, elementOuterSize };","// 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","// 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__.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))","// startup\n// Load entry module and return exports\n__webpack_require__(6069);\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_require__(3353);\nvar __webpack_exports__ = __webpack_require__(7532);\n"],"names":["debounceScript","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","value","type","lastInvokeTime","leading","maxing","trailing","toNumber","v","parseInt","isNaN","now","Date","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeSinceLastInvoke","Math","min","remainingWait","debounced","isInvoking","arguments","this","max","cancel","clearTimeout","flush","CookieConsentService","CookieConsentKey","EnableImpliedCookieConsent","didConsentToAllCookies","cookieSettings","getCookieSettings","didConsentToAllManually","didConsentImplicitly","didConsentToEssentialManually","shouldShowCookieBanner","shouldShowImpliedCookieBanner","clearAllCookiesIfConsentNotGiven","cookies","document","cookie","split","essentialCookies","indexOf","deleteCookie","getSafeBool","boolValue","fallbackBool","consentCookie","unescape","getCookie","cookieObj","JSON","parse","e","onManuallyConsentToAllCookies","settings","saveCookieConsent","onManuallyConsentToEssentialCookies","onHideImpliedConsentBanner","onRevokeConsent","confirm","didConfirm","consentSettings","settingsJson","stringify","name","expires","date","setTime","getTime","toUTCString","showConsentModal","didNotConsent","cookieName","forEach","el","key","trim","elements","getElementsByClassName","productDetailsEl","item","pushEnhancedEcommerce","pushEcommerce","getProductDetailObj","getAttribute","getProductObj","products","i","length","addEventListener","onProductClick","push","getProducts","promotions","banners","querySelector","promotionsObj","onBannerClick","getPromotionObj","getPromotions","productDetails","ecommerceObj","ecommerce","currencyCode","eec","impressionView","promoView","detail","dataLayer","preventDefault","productObj","productUrl","currentTarget","location","promoObj","destinationUrl","pushAddToCart","productId","quantity","product","getProductsToAddRemove","productContainer","pushRemoveFromCart","onCheckout","step","option","basketItemsURL","fetch","method","then","response","json","basketVm","Items","basketContainer","getElementById","ulElemen","createElement","liElem","Title","Price","Quantity","ID","GoogleProductID","ProductID","CategoryDescription","BrandDescription","innerHTML","append","pushCheckout","getBasketItems","getCheckoutProducts","event","checkout","actionField","toLowerCase","onCheckoutOption","checkoutOption","pushProductView","window","onload","getFormattedPrice","myPrice","symbol","conversionRate","xPrice","parseFloat","numberToCurrency","number","toFixed","replace","FacebookScriptsService","addFacebookTracking","isSearch","addScriptOnBodyTop","addFacebookEvent","addScriptOnBody","getFbq","fbq","script","body","appendChild","createScriptElement","insertBefore","firstChild","addDataLayer","dataLayerData","createTextNode","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","g","t","idPrefix","default","r","hash","closest","o","setAttribute","removeAttribute","focus","CustomEvent","bubbles","cancelable","tab","content","dispatchEvent","n","a","l","u","querySelectorAll","Array","call","id","slice","documentElement","removeEventListener","c","d","target","activeElement","tabs","index","hasOwnProperty","setup","getElementIndex","node","previousElementSibling","initMenu","menu","screen","width","level2","resetMenu","classList","remove","onOffItems","element","action","parentElement","add","nextElementSibling","contains","clickElement","srcElement","tagName","level","activeItemLevel","activeItems","menuSubs","menuSub","max1","activeItem","activeItemIndex","menuSubOff","max2","level2MenuSub","level2MenuSubAnchors","b","keyCode","breadcrumbButtons","maxBreadcrumbs","navLevelElm","navLevel","navLevelElmUp1","navLevelElmUp1Button","mobilemenu","expanded","mobilebg","primarynav","style","top","sh","h","stuck","stickPoint","offsetTop","parentElem","offsetParent","getOffsetTop","onscroll","offset","pageYOffset","ToggleButtons","toggle","elem","loginPartial","loginPartialMobile","globalParms","LoginPartialURL","text","data","accountLinks","AccountLinksURL","basketButton","href","ShoppingBasket_UpdateItemCount","div","dataset","play","onclick","labnolIframe","evt","parentNode","iframe","dataID","replaceChild","myImgs","observer","IntersectionObserver","entries","entry","isIntersecting","imgElem","loadLazyImages_doImage","unobserve","rootMargin","threshold","image","observe","err","len","loadLazyImages_notSupported","realSrc","loadLazyImages","initLightYouTube","mainNavContainers","navHeight","elemHeight","getComputedStyle","getPropertyValue","Number","mainContent","minHeight","itemCount","ShoppingBasketParms","CookieKey","basketDataJSON","NumberOfItems","console","log","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","stripePromise","initStripe","maybeStripe","startTime","stripe","_registerWrapper","version","registerWrapper","stripePromise$1","Promise","resolve","params","reject","Stripe","warn","scripts","concat","test","src","findScript","queryString","advancedFraudSignals","headOrBody","head","Error","injectScript","error","loadCalled","bpj","paymentRequest","basketParams","pdojj","deliveryOptionsPersist","getSelectedDeliveryTypeOption","isLocalStorageSupported","sessionStorage","getItem","saveSelectedDeliveryTypeOption","selectedDot","setItem","removeItem","resetSelectedDeliveryTypeOption","getSelectedDelivery","tempObj","saveSelectedDelivery","selectedDeliveryTypeID","selectedDeliveryDate","isForceSetValues","newDlv","deliveryTypeID","deliveryDate","resetSelectedDelivery","resetAllDelvOpts","testKey","storage","requestHeaders","Headers","DeliveryOptions_Init","bpjValue","set","shoppingBasketContainer","deliveryOptionsContainer","divPaymentButtonsSelector","DeliveryOptions_BindEvents","isInit","basketEmpty","checkoutBox","requestApplyVoucher","applyVoucherButton","ApplyVoucherURL","headers","newButton","cloneNode","voucherError","voucherErrorContainer","voucherInput","hidden","dojj","lastHasFinanceOptions","onHasFinanceOptions","hasFinanceOptions","setCurrentDeliveryOptions","showLowStock","basketEmptyEl","delvRegId","delvRegIdSelect","handledelvRgIdChange","selDlvReg","DeliveryOptions_refresh","OutOfStock","IsGiftVoucherOnlyOrder","voucherCodeInput","removeVoucherButton","handleRemoveVoucherClick","voucherCode","handleApplyVoucherClick","voucherCodeVal","button","Voucher_BindEvents","speficDays","internalDay","dtid","getSelectedDelvOptData","isSuperSaverDt","dod","selPrice","getDelvOptPrice","minPriceDt","getDelvOptsData","map","x","xID","isSuperSaver","ss","filter","reduce","res","obj","getDefaultDelvOptID","setSelectedDelvOptData","handleOptionBoxChangeEvent","Event","optionBoxes","handleOptionBoxChange","calendarLink","openCalendar","selDlv","defaultSelection","DeliveryOptionsButtons_BindEvents","day","getDefaultDay","delvRgIdVal","myDt","getDtById","fromCalendar","calendarSelector","elemDay","deliveryPrice","checkoutPrice","textContent","EuroPrice_CurrencySymbol","EuroPrice_ConversionRate","elemDt","getCheckboxInputForDeliveryType","isDeliveryTypeChangedx","isDeliveryPriceChangedx","isDeliveryDateChangedx","checked","myDtDays","getDaysForDtid","superSaverinternalDay","allDays","myDtid","formattedPrice","priceSpan","dayWindow","dayTo","daysToAdd","dayWindowArray","daysAdd","myDay","dayIndex","getDayWindowForDt","deliveryLastDate","checkoutSubtotalPrice","PriceTotalItems","giftVoucher","GiftVouchers","IsAnyApplied","DiscountValue","totalIncludingVATAndDelivery","internalDayToDisplayStringOptions","month","internaldateToMonthDisplayString","newDeliveryHtml","cc","isClickAndCollectDt","displayDay","weekday","year","internaldateToDisplayString","confirmationMessage","title","elemDtDescription","updatePaymentButtons","financeTabInitializeData","divPaymentButtons","dop","getDelvOpts","finance","basketConfig","updatePaymentButtonsUrl","ok","DeliveryOptions_UpdatePdParams","NetPayment","HighestDeposit","highestDepositAmount","GiftVoucherTotalRedeemed","HasPayPalCredit","HasPayPal","ShouldDisplayFinanceOptions","PaymentData_BindEvents","paymentButtonsUrl","doc","DOMParser","parseFromString","netPayment","giftVoucherTotalRedeemed","hasPayPalCredit","hasPayPal","highestDeposit","shouldDisplayFinanceOptions","buttons","dd","Buttons","buttonsSelector","paymentButtonsContainer","financeText","HasFinanceOptions","buttonsContainer","isFullWidth","btnData","amazonPayStyle","btnContent","displayImg","displayText","isFinance","cssClass","container","paymentButtonsFinance","getFinanceContainer","addButtonToContainer","payPalButtonContainer","ppMessage","hasChildNodes","setPayPalButton","insertAdjacentElement","btn","updateForm","oldBtoajDelvOptParams","btoajDelvOptParams","deliveryRegionId","ccwarning","ccEarliestwarning","IsClickAndCollectShowWarning","ukMainlandRegionId","devOptBtns","handleDeliveryOptionClicked","curBtnName","SetDojj","doj","deliveryOptionTypeSelected","isResetDelivery","deliveryOptionType","DeliveryOptionsParms","IndexDeliveryOptionsURL","divContainer","p","myDays","dpl","dateSplit","toLocaleDateString","gvTotalRedeemed","hasPayPalCreditPayment","total","voucherApplied","isNoNetPayment","depositPlaceholder","amount","stripeKey","_len","_key","paymentRequestButton","childElementCount","shippingOptions","country","currency","label","getAmountInCents","requestPayerName","requestPayerEmail","requestShipping","requestPayerPhone","getPaymentRequestOptions","getStripeShippingOptions","prButton","create","canMakePayment","mount","stripeButtonContainer","on","ev","url","LogStripeResponse","confirmResult","is3DSResult","ProcessDigitalWalletPayment","createPaymentIntentResponse","shippingAddress","paymentIntentId","paymentIntent","customerEmail","payerEmail","clientSecret","ClientSecret","customerPhone","payerPhone","success","redirectUrl","isPaymentRequested","FormData","paymentMethod","recipient","confirmCardPayment","payment_method","shipping","address","city","line1","addressLine","line2","postal_code","postalCode","state","region","phone","handleActions","alert","complete","status","deliveryRegionMap","updateWith","update","getPaymentRequestUpdateOptions","setStripePaymentRequestButton","ppDiv","children","h1text","expresscheckout","othercheckout","expressbuttonsContainer","paypalContainer","enablePayLater","clientId","PaylPalClientId","enableFunding","components","getPlainText","hasAttribute","display","calendar","attributes","newScript","Object","keys","getPayPalWindowNamespace","namespace","validateArguments","PromisePonyfill","loadPayPalButton","scriptOptions","isSlideOutBasket","PayPalSetExpressCheckout","token","disableFunding","_a","sdkBaseUrl","optionsWithStringIndex","accumulator","replacer","toString","match","indexOfMatch","substring","dataAttributes","queryParams","processOptions","existingWindowNamespace","currentScript","nextScript","currentScriptClone","uidAuto","isExactMatch","onSuccess","onError","onerror","firstElementChild","insertScriptElement","defaultError","loadCustomScript","newWindowNamespace","loadScript","paypal","shape","height","disableMaxWidth","createOrder","CheckoutWithPayPalURL","onApprove","ppButton","click","PayPalSettle","orderID","payerId","payerID","orderData","spinner","modalBasket","PayPalConfirm","PayPalErrorURL","render","catch","initVATExPrice","getPDCookieAndSetFlag","setPriceDisplayTypeUrl","PriceHelper","isVATExPrice","setPriceDisplay","price","priceVATEx","pricevatex","formatter","format","isvatex","String","formatPrice","displayPrices","excludeVAT","rate","round","Intl","NumberFormat","showItemAddedAlert","basketAlert","alertText","className","bindAddToBasketFromPanel","productCard","ProductDetail_AddProductToOrder","productDetailsParams","FbContentIDS","companionCard","companionProductId","primaryProductId","companionId","primaryId","AddCompanionToOrderURL","loadBasketPanel","basketErrorId","checkoutBtn","errorUrl","GoToShoppingBasketURL","ProductDetail_AddCompanaionToOrder","productTitle","facebookFeedId","productQuantity","redirectToBasket","basketEmptyMessage","modalBasketContent","modalBasketTotals","AddProductToOrderURL","C","content_type","content_ids","ProductDetail_GoToShoppingBasket","callback","GetBasketItemsURL","includeEarliestDeliveryDates","ulElem","totalElem","subTotalElem","deliveryPriceElem","deliveryDescriptionElem","deliveryMoreOptionsElem","nonGVItems","IsGiftVoucher","minDeliveryPrice","deliveryOptions","defaultDeliveryOption","DayPriceList","Description","IsSuperSaverNationalRatioApplied","Url","ProductImageUrl","RRP","setOldPrice","IsFreeGift","getQuantityOptions","companions","basketCompanions","accessories","CrossSellProducts","inStockCompanions","IsProductStockAvailable","inStockAccessories","Availability","renderQuickBuys","swiper","setQuickBuys","basketpanel","closeButton","items","swiperElem","counter","getItemPrice","IsCompanion","CompanionPrice","Id","getListName","PrimaryProductID","WebsiteUrl","itemPrice","savePrice","setSavings","getItemAddToBasketClass","processStockStatusData","inStock","msgHtml","msg2","msg1","isEligibleClickAndCollect","CollectionDeliveryMsg","nowMs","getUTCMilliseconds","DeliveryNextDayPossible","isNextDay","DeliveryCutOffms","countDownDate","setInterval","distance","hours","floor","minutes","seconds","clearInterval","countdownTime","padStart","recaptchaS","NotifyMeURL","cache","htmlContent","recaptchaContainer","getElementsByTagName","recaptchaElem","grecaptcha","loadHtmlWithRecaptcha","modal","notifyMeBtn","ARIAmodal","init","notifyModal","reset","btnSubmit","notifyForm","newDiv","message","defaultContent","defaultSuccess","onNotifyMeWhenInStock","usps","opacity","GetBStockProductsURL","tabContainer","bStockTab","SkipGetDynamicData","GetDynamicDataURL","nextDayDeliveryPossible","DeliveryCutOffDisplay","deliveryCutOffTimeDisplay","deliveryCutOffMsSinceUnixEpoch","processDeliveryTimingDisplayData","timingDisplayData","stockStatusData","getDynamicData","financeLink","financeTab","detailsSection","scrollIntoView","behavior","descriptionTabContents","getBoundingClientRect","toggleContents","toggleButtons","addToggleEvent","buyNowWithPayPal","isPayPalCredit","qty","addToBasketBtn","BuyNowWithPayPalURL","finally","buyNowWithPayment","productItem","ProductDetails_BindEvents","Tabby","initNavigationSwipers","swiperName","nextButton","prevButton","modules","direction","cssMode","slidesPerView","loop","speed","navigation","nextEl","prevEl","breakpoints","spaceBetween","tabItem","scrollLeft","offsetLeft","galleryThumbs","centeredSlides","centeredSlidesBounds","zoom","thumbs","picture","img","sourceAll","zoomSrc","outerHTML","startsWith","msg","closeddmsg","toggledmsg","innerWidth","documentBody","isSticky","basketButtonPos","footerPosition","bottom","innerHeight","basketPanel","requestBasketUpdate","updateWholeCart","qtyUpdateKeyUp","inputElement","readOnly","oldValue","newValue","sanitizeQtyInput","disableBasketButtons","showWaitElement","updateStepper","show","waitElem","q","newRegionId","basketItems","form","UpdateCartURL","updateBasketContent","quantityInput","li","ShoppingBasket_BindEvents","isBasketPanel","decreaseBtns","increaseBtns","removeBtns","qtyInputs","quantitySelect","orderItemId","DestroyOrderItemURL","showBasketError","pushProductRemovalToGA","removeOrderItem","navigator","userAgent","maxTouchPoints","basketErrorContainer","quantityNo","currentBasketContainer","html","ShoppingBasket_ProceedToCheckout","theButton","deliveryTypeId","chosenOption","chosenOptionDesc","basketUrl","initBasketPanelSwiper","slidesPerGroup","pagination","clickable","initTabs","tabsList","selector","matchMedia","viewport","scrollWidth","clientWidth","transform","checkButtons","onresize","checkScrollingTabContainers","tablisting","getLastVisibleTab","buttonElem","tablist","getFirstVisibleTab","tabList","child","count","ctr","setCookie","days","setSessionCookie","getHashKeyValuePairs","getUrlKeyValuePairs","getHrefKeyValuePairs","search","pairs","pairParts","loadImagesForProductListings_BasedOnView","prodListing","isGridView","hasClass","find","each","newImgUrl","attr","getImageURL","imgUrl","ImagesParams","UseCDNImageCache","CloudflareAccountHash","atou","b64","decodeURIComponent","escape","atob","utoa","btoa","encodeURIComponent","isObject","constructor","extend","ssrDocument","blur","nodeName","createEvent","initEvent","childNodes","createElementNS","importNode","host","hostname","origin","pathname","protocol","getDocument","ssrWindow","history","replaceState","pushState","go","back","Image","requestAnimationFrame","cancelAnimationFrame","getWindow","win","getBreakpoint","base","containerEl","breakpoint","currentHeight","clientHeight","points","point","minRatio","substr","sort","setBreakpoint","isGridEnabled","grid","rows","realIndex","initialized","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","enabled","containerModifierClass","emitContainerClasses","fill","prop","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","changeDirection","isEnabled","assign","allowTouchMove","allowSlideNext","allowSlidePrev","emit","loopDestroy","loopCreate","updateSlides","checkOverflow","isLocked","wasLocked","slidesOffsetBefore","lastSlideIndex","slides","lastSlideRightEdge","slidesGrid","slidesSizesGrid","size","snapGrid","isEnd","addClasses","classNames","rtl","device","suffixes","prefix","resultClasses","prepareClasses","freeMode","autoHeight","android","ios","watchSlidesProgress","removeClasses","prototypes","eventsEmitter","translate","transition","slide","grabCursor","events","classes","extendedDefaults","Swiper","swipers","newParams","__swiper__","support","browser","eventsListeners","eventsAnyListeners","__modules__","isArray","allModulesParams","mod","extendParams","bind","once","off","swiperParams","passedParams","eventName","onAny","isHorizontal","isVertical","activeIndex","isBeginning","previousTranslate","progress","velocity","animating","cssOverflowAdjustment","trunc","touchEventsData","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","focusableElements","lastClickTime","clickTimeout","velocities","allowMomentumBounce","startMoving","evCache","allowClick","touches","startX","startY","currentX","currentY","diff","imagesToLoad","imagesLoaded","getSlideIndex","slideEl","slidesEl","slideClass","firstSlideIndex","getSlideIndexByData","recalcSlides","setGrabCursor","unsetGrabCursor","setProgress","minTranslate","current","maxTranslate","translateTo","updateActiveIndex","updateSlidesClasses","_emitClasses","cls","join","getSlideClasses","destroyed","emitSlidesClasses","updates","slidesPerViewDynamic","view","exact","swiperSize","spv","breakLoop","slideSize","swiperSlideSize","setTranslate","translateValue","rtlTranslate","newTranslate","translated","imageEl","updateSize","updateProgress","updateAutoHeight","virtual","slideTo","watchOverflow","newDirection","needUpdate","currentDirection","changeLanguageDirection","dir","mounted","shadowEl","isElement","getWrapperSelector","wrapperClass","wrapperEl","shadowRoot","createElements","wrongRTL","initialSlide","slidesBefore","runCallbacksOnInit","attachEvents","destroy","deleteInstance","cleanStyles","detachEvents","slideVisibleClass","slideActiveClass","slideNextClass","slidePrevClass","static","newDefaults","defaults","module","m","installModule","prototypeGroup","protoMethod","use","oneWayMovement","touchEventsTarget","updateOnWindowResize","resizeObserver","nested","preventInteractionOnTransition","edgeSwipeDetection","edgeSwipeThreshold","setWrapperSize","virtualTranslate","effect","slidesPerGroupSkip","slidesPerGroupAuto","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","resistance","resistanceRatio","preventClicks","preventClicksPropagation","slideToClickedSlide","loopedSlides","loopPreventsSliding","rewind","swipeHandler","noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","maxBackfaceHiddenSlides","lazyPreloaderClass","lazyPreloadPrevNext","handler","priority","self","onceHandler","__emitterProxy","offAny","splice","eventHandler","context","unshift","dummyEventAttached","dummyEventListener","capture","domMethod","swiperMethod","onTouchStart","passive","onTouchMove","onTouchEnd","onClick","onScroll","onLoad","stopPropagation","stopImmediatePropagation","onResize","offsetWidth","isVirtual","isVirtualLoop","slideToLoop","autoplay","running","paused","resizeTimeout","resume","newProgress","scrollTop","translatesDiff","pointerIndex","findIndex","cachedEv","pointerId","includes","isSafari","isWebView","pointerType","originalEvent","touchEndTime","timeDiff","pathTree","path","composedPath","updateClickedSlide","swipeDirection","currentPos","stopIndex","groupSize","increment","rewindFirstIndex","rewindLastIndex","ratio","abs","targetTouch","pageX","pageY","preventedByNestedSwiper","prevX","prevY","targetTouches","diffX","diffY","sqrt","atan2","PI","touchesDiff","previousX","previousY","prevTouchesDirection","touchesDirection","isLoop","loopFix","getTranslate","setTransition","loopFixed","disableParentSwiper","activeSlideIndex","ceil","targetEl","which","swipingClassHasValue","eventPath","isTargetShadow","__closestFrom","assignedSlot","found","getRootNode","closestElement","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","shouldPreventDefault","isContentEditable","moving","__preventObserver__","cursor","slideRealIndex","newSlidesOrder","swiperSlideIndex","byController","byMousewheel","snapIndex","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","swiperLoopMoveDOM","prepend","updateSlidesOffset","currentSlideTranslate","controller","control","loopParams","moduleExtendParams","moduleParamName","moduleParams","auto","Observer","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","Resize","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","newHeight","contentBoxSize","contentRect","inlineSize","blockSize","slideNext","slidePrev","slideReset","slideToClosest","runCallbacks","internal","perGroup","_clientLeft","clientLeft","normalize","val","normalizedTranslate","normalizedSnapGrid","prevSnap","prevSnapIndex","snap","prevIndex","lastIndex","initial","slideIndex","previousIndex","skip","normalizedGrid","normalizedGridNext","transitionStart","transitionEnd","isH","scrollSnapType","_immediateVirtual","_cssModeVirtualInitialSet","smoothScroll","targetPosition","side","scrollTo","onSlideToWrapperTransitionEnd","slideToIndex","clickedIndex","slideSelector","clickedSlide","currentSnap","newIndex","duration","transitionDuration","transitionEmit","getSwiperTranslate","axis","y","translateBounds","onTranslateToWrapperTransitionEnd","updateSlidesProgress","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","getActiveIndexByTranslate","activeSlides","getSlideByIndex","visibleSlides","offsetHeight","slideFound","multiplier","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","getDirectionLabel","property","getDirectionPropertyValue","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","gridEnabled","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","paddingLeft","paddingRight","boxSizing","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesAfter","_","allSlidesSize","slideSizeValue","maxSnap","allSlidesOffset","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","getFilteredSlide","activeSlide","nextSlide","prevSlide","minusOffset","swiperSlideOffset","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","Navigation","hideOnClick","disabledClass","hiddenClass","lockClass","navigationDisabledClass","makeElementsArray","getEl","toggleEl","disabled","subEl","onPrevClick","onNextClick","initButton","destroyButton","_s","isHidden","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","position","onBulletClick","newSlideIndex","currentSlideIndex","firstIndex","midIndex","classesToRemove","suffix","s","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","paginationHTML","numberOfBullets","Thumb","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","HTMLElement","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","Zoom","maxRatio","containerClass","zoomedSlideClass","fakeGestureTouched","fakeGestureMoved","currentScale","isScaling","gesture","originX","originY","slideWidth","slideHeight","imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","eventWithinSlide","onGestureStart","scaleStart","box","getScaleOrigin","onGestureChange","scaleMove","onGestureEnd","eventWithinZoomContainer","scaledWidth","scaledHeight","scaleRatio","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","overflow","touchAction","forceZoomRatio","left","scrollX","scrollY","zoomOut","zoomToggle","getListeners","passiveListener","activeListenerWithCapture","defineProperty","get","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","classesToSelector","createElementIfNotDefined","checkProps","getBrowser","needPerspectiveFix","ua","major","minor","num","calcBrowser","deviceCached","getDevice","overrides","platform","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","touch","os","calcDevice","getSupport","DocumentTouch","calcSupport","processLazyPreloader","lazyEl","unlazy","preload","activeColumn","preloadColumns","from","column","slideIndexLastInView","deleteProps","object","nextTick","delay","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","to","noExtend","nextSource","nodeType","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","startPosition","cssModeFrameID","isOutOfBound","animate","easeProgress","cos","currentPosition","elementChildren","tag","elementOffset","clientTop","elementPrevAll","prevEls","prev","elementNextAll","nextEls","next","elementStyle","elementIndex","previousSibling","elementParents","parents","parent","elementOuterSize","includeMargins","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","definition","globalThis","Function"],"sourceRoot":""}