{"version":3,"sources":["webpack:///webpack/bootstrap 4271f45f0b996f874d81?2a70********************","webpack:///./assets/scripts/plp.js","webpack:///./assets/scripts/components/callout.js?b683*********","webpack:///./assets/scripts/components/carousel.js?b8ba*****","webpack:///./assets/scripts/product/index.js?2c86****","webpack:///./assets/scripts/components/accordion.js?a50a****","webpack:///./assets/scripts/services/easing.js?0342****","webpack:///./assets/scripts/product/addToCartMsg.js?b8d7****","webpack:///./assets/scripts/enhancedSeo.js?6a5c****","webpack:///./assets/scripts/components/seo.js?8875****","webpack:///./assets/scripts/product/giftCardHelper.js?8ac6****","webpack:///./assets/scripts/util/cookieUtil.js?c5f2","webpack:///./assets/scripts/components/wishlist.js?1371*","webpack:///./assets/scripts/util/urlParams.js","webpack:///./assets/scripts/widgets/recentlyViewed.js","webpack:///./assets/scripts/performance/owl.js","webpack:///./assets/scripts/performance/helpers/scriptLoader.js","webpack:///./assets/scripts/performance/wishlist.js"],"names":["target","jsTarget","observer","root","rootMargin","threshold","entries","entry","$updates","$results","$","updateDom","updateRefinementListeners","selector","delta","$scrollable","$target","event","newPageTitleValue","specialHandlers","Object","rect","element","window","document","Plp","EnhancedSeo","recentlyViewed","Seo","location","history","pid","top","behavior","block","elementPage","currentUrl","dataLayer","eventID","eventCategory","eventAction","eventLabel","eventElement01","eventElement02","eventElement03","scrollTop","display","Foundation","current","e","list","url","data","selectedUrl","href","method","success","parseResults","getSortOptions","response","sortOptions","$tempDom","option","showMoreUrl","isPrevious","beforeSend","valueParam","pageParam","sessionStorage","urlWithSize","JSON","attachShowMoreObserver","clickedFilter","refinements","currentFooter","counterSpan","complete","$self","pagenumber","parseInt","Number","searchKeywords","paginationUrl","resultsLabel","currentPage","timeOut","setTimeout","center","$this","itemsOnView","$sliderWrap","$slider","$itemsLenght","total","Math","responsive","items","margin","autoWidth","slideBy","mouseDrag","lastIndex","init","final","texts","length","index","text","selected","results","text2","selected2","id","matches","url2","number","value","encodeURIComponent","separator","values","p2","replacement","plp","callout","title","message","type","closable","el","prepend","scroll","$callout","Callout","Carousel","slides","navText","carousels","breakpoints","small","medium","large","count","isScrollable","setting","carousel","$el","getQuantitySelector","attr","$attrValue","$productContainer","attrValue","$swatchAnchor","$attr","attrsWithSwatches","attrs","processSwatchValues","processNonSwatchValues","processNonSwatchValuesMiniSet","availabilityValue","availabilityMessages","controlSizeModalProduct","$nameGroup","$labels","label","product","resources","html","promotions","promotion","attributes","attributeGroup","attribute","isChoiceOfBonusProducts","isVaraint","isNewtest","isInWishlist","isOnSale","updateAttrs","$priceSelector","getPromotionsHtml","updateAvailability","$selectButton","getAttributesHtml","updateMiniAttrs","optionsHtml","quantity","colorName","$secondaryCall","handleVariantResponse","updateQuantities","updateColorName","updateAddToCartEvent","updateLabel","replaceProductsetWidget","updateScalapayWidget","container","color","error","console","scalapayWidget","dataType","carouselImages","productContainerImages","owl","productModalImages","price","addToCartEvent","addToCartEventParse","datalayerEvent","name","brand","category","variant","dimension14","dimension15","dimension16","encodedDatalayerEvent","elem","productAccordion","Accordion","handleVariantMiniSetResponse","controlSizeModalProductSet","$html","body","footer","elemSelect","elemModalId","childProducts","breakpoint","width","$render","smartSpeed","slideTransition","editBonusProducts","oldColor","self","description","ogDescription","attributeSelect","replaceImages","replaceModalImages","replaceAccordion","isUserEvent","colorIndex","referencedSelect","attributeSelectMiniSet","options","div","errorMsg","addToCartUrl","getQuantitySelected","form","gaHitType","event_category","event_action","pageTypeForJS","AddToCartMsg","ecommerce","win","gridImages","scrollToSlider","edge","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","$selected","parsedHtml","cart","item","priceValue","currency","Array","i","categories","discount","parseFloat","size","item_id","item_name","item_brand","item_category","item_category2","item_category3","item_list_name","item_variant","isSingleQnt","item_availability","item_discount_tag","available_size_percentage","item_size","item_variant_v2","item_url","item_img","event_label","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","Product","accordion","setARIA","Easing","def","swing","easeOutQuad","easeInOutCirc","x","bonusUrl","htmlString","messageType","modal","addToCartMsg","minicart","chooseBonusProducts","clearTimeout","triggerMinicart","initAddedToCartConfirmationModal","addedToCartModal","enhancedSeo","marker","$isStoreLocatorList","elements","address1","$isPopupFooterHeader","isMobileMenu","iconName","isCookieAlert","elementList","eventType","login_method","timestamp","isSearch","classObj","isChat","accordionText","accordionExpanded","categoryID","isColor","$selfButton","profiling","checkoutStep","shipping","payment","placeorder","analyticsP","listName","modalOpen","section","selectedSizeElem","selectedSize","selectedFamilyColorElem","selectedFamilyColor","analyticsObj","dataLayerGA4","pageAction","context","originalPrice","finalPrice","pidSplit","colorID","variantID","obj","SEO","productTiles","_this","listingProductsArrayForHomePage","currentElement","impression","listingProductsJson","asyncProductsArray","array","productCurrency","imageUrl","chunks","chunkArray","fullPrice","salesPrice","dataLayerObject","getPageType","trackForWish","selectedVariant","arr_info_product","prodLayer","click","actionField","catListingSearch","products","socialNetwork","socialAction","socialTarget","promotionsAsset","lookArray","position","gridImageAndButton","componentElements","creative","componentID","componentName","promoClick","widgetLook","lookName","itemPosition","hrefSplit","lookIdSplit","itemList","lookId","widgetLookElements","aElem","indexEl","impressions","promoView","listingProduct","productTile","productJson","prod","where","selectedSortOption","attribute_group","attribute_value","filter_sort","filter","actionName","module","showAlertModal","cookieUtil","cookieName","decodedCookie","decodeURIComponent","cookieArray","cookieItem","expires","date","days","CookieUtil","wishlistModal","modalInstances","$modal","modalID","link","action","$openWishlistLink","wishlistAdd","headerWishlist","headerWishlistMobile","optionId","optionVal","addToWishlistCall","removeWishlist","WishlistAdd","urlParams","arr","a","paramName","paramNum","v","paramValue","key","rtn","paramsarr","param","found","UrlParams","RecentlyViewed","$widget","slider","move","initOwlCarousel","src","reject","getUnloadedScripts","currentScripts","script","scriptsData","owlScripts","promiseAllScripts","scriptUrls","callback","initWishlist"],"mappings":"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","file":"plp.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4271f45f0b996f874d81","import CookieUtil from './util/cookieUtil';\nimport EnhancedSeo from './enhancedSeo';\nimport UrlParams from './util/urlParams';\nimport recentlyViewed from './widgets/recentlyViewed';\nimport {wishlistModal} from './components/wishlist';\nimport Seo from './components/seo.js';\nimport {initOwlCarousel} from './performance/owl';\nimport {initWishlist} from \"./performance/wishlist\";\nimport {getUnloadedScripts, promiseAllScripts} from \"./performance/helpers/scriptLoader\";\n\nfunction attachShowMoreObserver(target, callback){\n if(target.length < 1)\n return;\n\n let jsTarget = target[0];\n if(jsTarget.classList && jsTarget.classList.contains('observed'))\n return;\n\n const observer = new IntersectionObserver(callback, {\n root: null,\n rootMargin: '0px',\n threshold: 0.5\n });\n\n observer.observe(jsTarget);\n jsTarget.classList.add('observed');\n}\n\nfunction enterView(entries, observer) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting){\n entry.target.click();\n observer.unobserve(entry.target)\n }\n });\n}\n\n\n/**\n * Update DOM elements with Ajax results\n *\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n * @return {undefined}\n */\nfunction updateDom($results, selector) {\n const $updates = $results.find(selector);\n $(selector).html($updates.html());\n}\n\n/**\n * Keep refinement panes expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @return {undefined}\n */\nfunction handleRefinements($results) {\n $('.refinement.active').each(function () {\n $(this).removeClass('active');\n\n $results.find(`.${$(this)[0].className.replace(/ /g, '.')}`).addClass('active');\n });\n\n updateDom($results, '.refinements');\n updateRefinementListeners('.refinement-bar');\n}\n\n/**\n * Remove and readd scroll event listener after Ajax refresh\n *\n * @param {String} selector - a CSS selector to find the target\n * @return {undefined}\n */\nfunction updateRefinementListeners(selector = '.refinement-bar') {\n // Handle horizontal scroll on mobile filters\n const delta = 20;\n const $scrollable = $(selector).find('.mobile-filter-nav-wrapper .plp-sort-order');\n\n if ($scrollable.length) {\n // Always hide scrim if scrollable amount is less then the available width (with some delta)\n if ($scrollable.get(0).scrollWidth < $scrollable.get(0).clientWidth + delta / 4) {\n $scrollable.closest('.plp-header-top-sort').addClass('no-scrim');\n } else {\n // Add listener directly to target element, as scroll event does not bubble\n $scrollable.closest('.plp-header-top-sort').removeClass('no-scrim');\n $scrollable.off('scroll');\n $scrollable.on('scroll', (event) => {\n const $target = $(event.currentTarget);\n\n if ($target.scrollLeft() > delta) {\n $target.closest('.plp-header-top-sort').addClass('scrolled');\n } else {\n $target.closest('.plp-header-top-sort').removeClass('scrolled');\n }\n });\n }\n }\n}\n\n/**\n * Keep refinement panes expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @return {undefined}\n */\nfunction handlePageTitle($results) {\n if ($results.find('[data-page-title]').length > 0) {\n var newPageTitleValue = $results.find('[data-page-title]').attr('data-page-title');\n\n $('[data-page-title]').attr('data-page-title', newPageTitleValue);\n $('title').text(newPageTitleValue);\n }\n}\n\n/**\n * Parse Ajax results and updated select DOM elements\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction parseResults(response) {\n const $results = $(response);\n const specialHandlers = {\n '.refinements': handleRefinements,\n '[data-page-title]': handlePageTitle\n };\n\n ['.grid-header',\n '.header-bar',\n '.header.page-title',\n '.product-grid',\n '.show-more-previous',\n '.show-more',\n '.filter-bar',\n '.plp-header-bottom-sort-wrapper',\n '.plp-header-top-sort',\n '.info-box-element',\n '.show-for-breakpoint-tablet-extra-global-plp',\n '.labelCounts'\n ].forEach((selector) => {\n updateDom($results, selector);\n });\n\n Object.keys(specialHandlers).forEach((selector) => {\n specialHandlers[selector]($results);\n });\n}\n\n\nfunction isElementInViewport(element) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n}\n\nclass Plp {\n constructor() {\n this.bodyElement = 'body';\n this.container = '.container';\n this.filterSelectors = '.refinements li a, .refinement-bar a.reset, .filter-value a, .swatch-filter a';\n this.gridFooter = '.grid-footer';\n this.gridHeader = '.grid-content-header',\n this.htmlBody = 'html, body';\n this.interchangePlaceholder = '[data-interchange][src*=uninitialized]';\n this.pagCurrent = '.pagination .current';\n this.productGrid = '.product-grid';\n }\n\n run() {\n this.applyFilter();\n this.buttonGotoTop();\n this.closeRefinments();\n this.filter();\n this.paginationPlp();\n this.plpMobileMenu();\n // this.rellax();\n this.rowSwitch();\n this.showMore();\n this.sort();\n this.categoriesWidget();\n this.plpAccordionBehavior();\n EnhancedSeo.productColorClick(['.color-swatches', 'a', '[data-pid]', 'pid', 'data-family-color-search']);\n recentlyViewed.run();\n Seo.viewItemListGA4Event();\n\n this.goToPDP();\n initWishlist();\n\n this.initializePosition();\n this.handleGoBack();\n }\n\n handleGoBack(){\n window.addEventListener('popstate', function(event) {\n if($(\"body\").hasClass('menu-visible') || window.location.href.endsWith('/#')){\n return\n }\n location.reload();\n });\n }\n\n initializePosition(){\n document.addEventListener('DOMContentLoaded', () => {\n history.scrollRestoration = 'manual';\n });\n\n window.onload = function(){\n let pid = window.history && window.history.state ? window.history.state.pid : false;\n if(!pid)\n return;\n\n let element = document.querySelector('.image-link[data-pid=\"' + pid + '\"]');\n if(element && !isElementInViewport(element)){\n const rect = element.getBoundingClientRect();\n window.scrollTo({\n top: window.pageYOffset + rect.top - 175,\n behavior: 'smooth',\n block: 'start'\n })\n }\n };\n }\n\n goToPDP(){\n $(document).on('click', '.image-link', (event) => {\n event.preventDefault();\n let elementPage = event.currentTarget.dataset ? event.currentTarget.dataset.page : false;\n let currentUrl = new URL(window.location.href);\n if(elementPage && elementPage !== 'null')\n currentUrl.searchParams.set('page', elementPage);\n\n history.scrollRestoration = 'manual';\n window.history.pushState({'pid' : event.currentTarget.dataset.pid}, '', currentUrl);\n\n window.location.href = event.currentTarget.href;\n });\n }\n\n plpAccordionBehavior(){\n $(document).on('click', '.open-plp-accordion', (event) => {\n $('.compact-plp-accordion').hide();\n $('.extended-plp-accordion').show();\n\n dataLayer.push({\n event: \"GAevent\",\n eventID: \"001\",\n eventCategory: \"user_interaction\",\n eventAction: \"plp_insights\",\n eventLabel: \"read_more_open\",\n eventElement01: \"-\",\n eventElement02: \"-\",\n eventElement03: \"-\"\n })\n });\n\n $(document).on('click', '.close-plp-accordion', (event) => {\n $('.compact-plp-accordion').show();\n $('.extended-plp-accordion').hide();\n\n dataLayer.push({\n event: \"GAevent\",\n eventID: \"001\",\n eventCategory: \"user_interaction\",\n eventAction: \"plp_insights\",\n eventLabel: \"read_more_closed\",\n eventElement01: \"-\",\n eventElement02: \"-\",\n eventElement03: \"-\"\n })\n });\n }\n\n ajaxRequestComplete() {\n this.lazyLoadImage();\n this.filterAccordion();\n wishlistModal();\n }\n\n buttonGotoTop() {\n $(document).on('click', '.button-goto-top', (event) => {\n event.preventDefault();\n this.goToTop();\n });\n }\n\n goToTop() {\n $(this.htmlBody).animate({\n scrollTop: 0\n }, 650, 'easeInOutCirc');\n }\n\n lazyLoadImage() {\n $(this.interchangePlaceholder).foundation();\n }\n\n rowSwitch() {\n $('.cta-layout-1').click(() => {\n $(this.bodyElement).removeClass('plp-two-row');\n window.localStorage.setItem('plpTwoRow', false);\n EnhancedSeo.layoutSmallViewPlp();\n });\n\n $('.cta-layout-2').click(() => {\n $(this.bodyElement).addClass('plp-two-row');\n window.localStorage.setItem('plpTwoRow', true);\n EnhancedSeo.layoutBigViewPlp();\n });\n\n let block = window.localStorage.getItem('plpTwoRow');\n\n if (block === 'true') {\n $(this.bodyElement).addClass('plp-two-row');\n }\n }\n\n filter() {\n $(this.container).on('click', 'button.filter-results', () => {\n $('.refinement-bar').css({display: 'flex'});\n updateRefinementListeners();\n $(this.bodyElement).addClass('mobile-filter-nav-visible');\n document.dispatchEvent(new Event('plp:afterRefinementBarOpen'));\n });\n\n this.filterAccordion();\n this.activeFilters();\n }\n\n filterAccordion() {\n if (['small', 'medium'].indexOf(Foundation.MediaQuery.current) > -1) return;\n\n $('.plp-header-content-card-body .toggle p').click((e) => {\n const current = $(e.currentTarget);\n const list = current.next('ul');\n\n if (list.is(':visible')) {\n current.removeClass('open');\n list.slideUp();\n } else {\n $('.plp-header-content-card-body .toggle p').removeClass('open');\n if ($('.plp-header-content-card-body .toggle ul').not(list).is(':visible')) {\n $('.plp-header-content-card-body .toggle ul').not(list).slideUp(() => {\n list.slideDown();\n current.addClass('open');\n });\n } else {\n list.slideDown();\n current.addClass('open');\n }\n }\n });\n }\n\n closeRefinments() {\n $(this.container).on('click', '.refinement-bar button.close', () => {\n $('.refinement-bar').hide();\n $(this.bodyElement).removeClass('mobile-filter-nav-visible');\n document.dispatchEvent(new Event('plp:afterRefinementBarClose'));\n });\n }\n\n sort() {\n $(this.container).on('click', '.plp-sort-order a', (event) => {\n event.preventDefault();\n $(event.currentTarget).parent().addClass('current').siblings()\n .removeClass('current');\n $(event.currentTarget).trigger('search:sort', event);\n $.ajax({\n url: event.target.href,\n data: {\n selectedUrl: event.target.href\n },\n method: 'GET',\n success: (response) => {\n $(this.productGrid).html(response);\n parseResults(response);\n this.ajaxRequestComplete();\n }\n });\n });\n\n updateRefinementListeners();\n $(window).on('resize', updateRefinementListeners);\n }\n\n sortOptionsUpdate() {\n const getSortOptions = $(this.gridFooter).data('sort-options');\n\n $(`.${getSortOptions.ruleId}`).addClass('current').siblings().removeClass('current');\n }\n\n updateSortOptions(response, isPrevious) {\n let sortOptions;\n if(isPrevious){\n sortOptions = $(document).find('.grid-footer').data('sort-options').options;\n }\n else {\n const $tempDom = $('
').append($(response));\n sortOptions = $tempDom.find('.grid-footer').data('sort-options').options;\n }\n\n sortOptions.forEach((option) => {\n $(`option.${option.id}`).val(option.url);\n });\n }\n\n showMore() {\n $(document).on('click', '.show-more button, .show-more-previous button', (event) => {\n event.preventDefault();\n\n EnhancedSeo.showMoreClick();\n\n const showMoreUrl = $(event.currentTarget).data('url');\n\n $(event.currentTarget).trigger('search:showMore', event);\n\n\n let isPrevious = event.currentTarget.classList.contains('js-previous');\n $.ajax({\n url: showMoreUrl,\n data: {\n selectedUrl: showMoreUrl\n },\n method: 'GET',\n beforeSend: () => {\n $(this.productGrid).addClass('loading');\n $(this.gridFooter).addClass('loading');\n },\n success: (response) => {\n const valueParam = new URLSearchParams(showMoreUrl);\n let pageParam = valueParam.get(\"page\");\n if(pageParam && pageParam !== 'null'){\n let currentUrl = new URL(window.location.href);\n sessionStorage.setItem('pageNumber', pageParam);\n\n currentUrl.searchParams.set('page', pageParam);\n window.history.pushState({}, '', currentUrl);\n }\n\n if(isPrevious)\n $(this.gridHeader).replaceWith(response);\n else\n $(this.gridFooter).replaceWith(response);\n\n $(this.bodyElement).addClass('show-more-loaded');\n $(this.productGrid).removeClass('loading');\n $(this.gridFooter).removeClass('loading');\n this.updateSortOptions(response, isPrevious);\n this.ajaxRequestComplete();\n var urlWithSize = JSON.parse($('.grid-footer').attr('data-sort-options'));\n window.localStorage.setItem('page_size_url', urlWithSize.options[0].url);\n\n if($('.extended-plp-accordion').css('display') !== 'none'){\n $('.compact-plp-accordion').show();\n $('.extended-plp-accordion').hide();\n }\n\n $(window).trigger('gtmAsyncTrack::impression');\n\n attachShowMoreObserver($('.show-more button'), enterView);\n }\n });\n });\n }\n\n applyFilter() {\n $(this.container).on('click', this.filterSelectors, (event) => {\n event.preventDefault();\n\n var clickedFilter = $(event.currentTarget);\n\n if ($(event.currentTarget).hasClass('disabled')) {\n return false;\n }\n\n $(event.currentTarget).trigger('search:filter', event);\n\n if ($(event.currentTarget).hasClass('reset')) {\n window.localStorage.removeItem('category_filter');\n }\n\n $('body').addClass('filtering-products');\n\n if (event.currentTarget.dataset.type === 'category') {\n window.localStorage.setItem('category_filter', 'true');\n }\n\n var url = event.currentTarget.href;\n\n // TR-1864\n window.history.pushState({}, '', url);\n\n $.ajax({\n 'url': url,\n data: {\n // page: $(this.gridFooter).data('page-number'),\n selectedUrl: event.currentTarget.href\n },\n method: 'GET',\n success: (response) => {\n parseResults(response);\n this.ajaxRequestComplete();\n\n // this trigger is for datalayer update in seo.js\n var refinements = $('div.refinements');\n refinements.trigger('refinements:update', { clickedFilter: clickedFilter });\n\n this.activeFilters();\n\n // TR-1864\n this.detoxUrl(url, refinements);\n\n let currentFooter = $('.grid-footer');\n let counterSpan = $('.plp-content-counter');\n if(currentFooter.length > 0 && counterSpan.length > 0){\n counterSpan[0].innerHTML = currentFooter.data('count');\n }\n },\n complete: (jqXHR, textStatus) => {\n $('body').removeClass('filtering-products');\n }\n });\n });\n }\n\n paginationPlp() {\n $(this.productGrid).on('click', '.pagination-item', (event) => {\n event.preventDefault();\n\n const $self = $(event.currentTarget).find('button');\n let pagenumber = parseInt($self.data('page-number'), 10);\n pagenumber = (Number.isNaN(pagenumber)) ? 1 : pagenumber;\n let searchKeywords = $self.data('searchkeywords') || '';\n\n let currentUrl = new URL(window.location.href);\n currentUrl.searchParams.set('page', pagenumber);\n if(searchKeywords && searchKeywords !== '')\n currentUrl.searchParams.set('q', searchKeywords);\n window.history.pushState({}, '', currentUrl);\n\n const paginationUrl = $self.data('url');\n if (!paginationUrl || $self.parent().hasClass('current')) {\n return;\n }\n\n EnhancedSeo.paginationEventClick($self, [$(event.currentTarget)[0], 'pagination-next', 'pagination-prev', 'data-page-number']);\n\n this.navigateToPage(paginationUrl);\n });\n }\n\n navigateToPage(paginationUrl) {\n $.ajax({\n url: paginationUrl,\n data: {\n selectedUrl: paginationUrl\n },\n beforeSend: () => {\n $(this.productGrid).addClass('loading');\n },\n method: 'GET',\n success: (response) => {\n $(this.productGrid).html(response).removeClass('loading');\n var resultsLabel = $('#resultsLabel').text()\n $('#labelElements').empty().text(resultsLabel);\n this.ajaxRequestComplete();\n this.goToTop();\n var currentPage = parseInt($('.plp-pagination .current').children().first().text(), 10);\n if (!isNaN(currentPage) && parseInt(currentPage, 10) > 1) {\n if ($('.info-box').length > 0) {\n if (!$('.info-box').parents('.grid-container').hasClass('hidden')) {\n $('.info-box').parents('.grid-container').addClass('hidden');\n }\n if ($('.show-for-breakpoint-tablet-extra-global-plp').length > 0) {\n if (!$('.show-for-breakpoint-tablet-extra-global-plp').hasClass('hidden')) {\n $('.show-for-breakpoint-tablet-extra-global-plp').addClass('hidden');\n $('.show-for-breakpoint-tablet-extra-global-plp').removeClass('show-for-breakpoint-tablet-extra-global-plp');\n }\n }\n }\n } else if ($('.info-box').length > 0) {\n $('.info-box').parents('.grid-container').removeClass('hidden');\n }\n $(window).trigger('gtmAsyncTrack::impression');\n }\n });\n }\n\n rellax(timeOut = 0) {\n if (!$('[data-rellax]').length || ['small', 'medium'].indexOf(Foundation.MediaQuery.current) > -1) return;\n\n $('[data-rellax]:not(.rellax-active)').each((i, el) => {\n $(el).addClass('rellax-active');\n setTimeout(() => {\n const rellax = new Rellax(el, {\n center: $(el).data('rellax-center')\n });\n }, timeOut);\n });\n }\n\n plpMobileMenu() {\n if (['small', 'medium'].indexOf(Foundation.MediaQuery.current) === -1) return;\n\n $(this.container).on('click', '.plp-header-content-card-title', (event) => {\n event.preventDefault();\n\n const $this = $(event.currentTarget);\n\n if ($this.next().hasClass('show')) {\n $this.next().removeClass('show');\n $this.next().slideUp(350);\n } else {\n $this.parent().parent().find('.plp-header-content-card-body').removeClass('show');\n $this.parent().parent().find('.plp-header-content-card-body').slideUp(350);\n $this.next().toggleClass('show');\n $this.next().slideToggle(350);\n }\n });\n }\n\n categoriesWidget() {\n const itemsOnView = 4;\n const $sliderWrap = $('.categories-render');\n const $slider = $('.categories-row-render');\n const $itemsLenght = $('.category-cell-render').length;\n const total = Math.ceil($itemsLenght / itemsOnView);\n\n if ($itemsLenght <= itemsOnView) {\n $sliderWrap.find('.counters').hide();\n }\n\n //Lazyload owl carousel for quick view\n function owlInitialization(){\n $('.categories-row-render').owlCarousel({\n dots: false,\n responsiveClass: true,\n responsive: {\n 0: {\n items: 2,\n center: true,\n margin: 20,\n autoWidth: true\n },\n 640: {\n items: 3,\n slideBy: 3,\n margin: 20\n },\n 1024: {\n items: itemsOnView,\n slideBy: itemsOnView,\n margin: 40,\n mouseDrag: !(($itemsLenght <= itemsOnView))\n },\n 1600: {\n items: itemsOnView,\n slideBy: itemsOnView,\n margin: 40,\n mouseDrag: !(($itemsLenght <= itemsOnView))\n }\n }\n })\n }\n initOwlCarousel(owlInitialization);\n\n\n $sliderWrap.find('.total').text(total);\n\n $sliderWrap.on('click', '.prev', (event) => {\n $sliderWrap.find('.owl-prev').trigger('click');\n });\n\n $sliderWrap.on('click', '.next', (event) => {\n $sliderWrap.find('.owl-next').trigger('click');\n });\n\n $slider.on('changed.owl.carousel', (e) => {\n const lastIndex = e.item.index + (itemsOnView - 1);\n const init = Math.floor(lastIndex / itemsOnView);\n const test = init * itemsOnView;\n const final = (lastIndex >= test) ? init + 1 : null;\n\n $sliderWrap.find('.current').text(final);\n });\n }\n\n activeFilters() {\n const refinements = $('.plp-header-content .refinement:not(.hide)');\n ['.plp-hero-with-filters .filters .button-text',\n '.plp-header-top .refinement:not(.hide) .plp-header-content-card-title'\n ].forEach((selector) => {\n const texts = $(selector);\n const length = Math.min(texts.length, refinements.length);\n for (let index = 0; index < length; index++) {\n let text = $(texts[index]).contents().get(0);\n let selected = $(refinements[index]).find('.selected');\n text.nodeValue = $.trim(text.nodeValue).replace(/\\s+\\(\\d+\\)$/, '') + (selected.length ? (' (' + selected.length + ')') : '');\n }\n });\n\n const results = $('.plp-header-top .filter-results');\n const text2 = results.contents().get(0);\n const selected2 = $('.plp-header-top .refinement:not(.hide) .selected');\n text2 && (text2.nodeValue = (results.data(selected2.length ? 'msgFiltersN' : 'msgButtonFilter') || '').replace('{0}', '' + selected2.length));\n }\n\n detoxUrl(url, refinements) {\n var url2 = url;\n refinements.find('a.disabled[role=\"button\"]').each(function () {\n var id = $(this).data('id');\n var matches = url2.match(new RegExp(`[?&]prefn(\\\\d+)=${id}&`));\n if (!matches) return;\n var number = matches[1];\n var value = encodeURIComponent($.trim($('span.disabled', this).contents().get(0).nodeValue));\n var separator = encodeURIComponent('|');\n // console.log('id', id, 'number', number, 'value', value, 'separator', separator);\n url2 = url2.replace(new RegExp(`(&prefv${number}=)([^&]*)`), function (match, p1, p2) {\n var values = p2.split(separator);\n var index = values.indexOf(value);\n (index !== -1) && values.splice(index, 1);\n var replacement = `${p1}${values.join(separator)}`;\n // console.log('p2', p2, 'index', index, 'values', values, 'replacement', replacement);\n return replacement;\n });\n // console.log('url2', url2);\n });\n (url2 !== url) && window.history.pushState({}, '', url2);\n }\n\n}\n\nconst plp = new Plp();\nplp.run();\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/plp.js","class callout {\n add (title = null, message = null, type = 'success', closable = true, el, prepend = false, scroll = true) {\n let callout = `
`;\n\n if (title) {\n callout += `\n
\n \n ${title}\n
`;\n }\n\n if (message) {\n if (typeof message === 'object') {\n message.forEach(line => {\n callout += `
${line}
`;\n });\n } else {\n callout += `
${message}
`;\n }\n }\n\n if (closable) {\n callout += `\n \n
\n `;\n } else {\n callout += '
';\n }\n\n const $callout = $(callout);\n $callout.find('.close-button').click(e => {\n $callout.remove();\n });\n\n if (prepend) {\n $(el).prepend($callout);\n } else {\n $(el).empty().append($callout);\n }\n\n if (scroll) {\n $('html, body').animate({\n scrollTop: $callout.offset().top - 70\n }, 500);\n }\n }\n\n primary (title, message, el, closable = true, prepend = false, scroll = true) {\n this.add(title, message, 'primary', closable, el, prepend, scroll);\n }\n\n success (title, message, el, closable = true, prepend = false, scroll = true) {\n this.add(title, message, 'success', closable, el, prepend, scroll);\n }\n\n error (title, message, el, closable = true, prepend = false, scroll = true) {\n this.add(title, message, 'alert', closable, el, prepend, scroll);\n }\n\n warning (title, message, el, closable = true, prepend = false, scroll = true) {\n this.add(title, message, 'warning', closable, el, prepend, scroll);\n }\n}\n\nconst Callout = new callout();\nexport default Callout;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/components/callout.js","class Carousel {\n quickviewCarousel() {\n let slides = $('#quickViewModal .slides');\n slides.owlCarousel({\n loop: false,\n nav: true,\n items: 1,\n navText: ['', '']\n });\n\n slides.trigger('refresh.owl.carousel');\n }\n initCarouselComponent(){\n let carousels = $('.products-carousel .slides');\n carousels.each((id, el) => {\n $(el).owlCarousel(this.getSetting(el));\n });\n carousels.trigger('refresh.owl.carousel');\n }\n\n getSetting(element){\n let breakpoints = {\n small: 0,\n medium: 640,\n large: 1024,\n };\n let count = $(element).data('count').split('-');\n let isScrollable = $(element).data('scrollable');\n let setting = {\n loop: true,\n margin: 10,\n navText: ['', ''],\n mouseDrag: isScrollable,\n touchDrag: isScrollable,\n responsive: {\n [breakpoints.small]: {\n nav: false,\n dots: true,\n items: count[2]\n },\n [breakpoints.medium]: {\n nav: true,\n dots: false,\n items: count[1]\n },\n [breakpoints.large]: {\n nav: true,\n dots: false,\n items: count[0]\n }\n }\n }\n return setting;\n }\n}\nconst carousel = new Carousel();\nexport default carousel;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/components/carousel.js","import Accordion from '../components/accordion';\nimport AddToCartMsg from './addToCartMsg';\nimport EnhancedSeo from '../enhancedSeo';\nimport carousel from '../components/carousel';\nimport {showAlertModal} from './giftCardHelper';\nimport Callout from '../components/callout';\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else if ($($el).closest('.product-detail').length === 0) {\n pid = $($el).attr('data-pid');\n } else {\n pid = $($el).closest('.product-detail:not(\".bundle-item\")').attr('data-pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n return $el && $('.set-items').length ? $($el).closest('.product-detail').find('.quantity-select') : $('.quantity-select');\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processSwatchValues(attr, $productContainer) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' + attrValue.value + '\"]');\n var $swatchAnchor = $attrValue;\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n } else {\n $attrValue.removeClass('selected');\n }\n\n if (attrValue.url) {\n $swatchAnchor.attr('href', attrValue.url);\n $attrValue.attr('data-image-url', attrValue.imageUrl).removeAttr('disabled');\n $attrValue.attr('data-modal-image-url', attrValue.imageModalUrl).removeAttr('disabled');\n $attrValue.attr('data-accordion-url', attrValue.accordionUrl).removeAttr('disabled');\n } else {\n $swatchAnchor.removeAttr('href');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be selected. If there is no variant that corresponds to a specific combination of attribute values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('data-url-value', attrValue.url).removeAttr('disabled');\n $attrValue.attr('data-accordion-url', attrValue.accordionUrl).removeAttr('disabled');\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n } else {\n $attrValue.removeClass('selected');\n }\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be selected. If there is no variant that corresponds to a specific combination of attribute values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValuesMiniSet(attr, $productContainer) {\n let $attr = $productContainer.find($('.list-' + attr.id));\n\n attr.values.forEach(function (attrValue) {\n let $attrValue = $attr.find('[data-attr-value=\"' + attrValue.value + '\"]');\n\n $attrValue.attr('value', attrValue.url).removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n\n if (attrValue.selected) {\n $attrValue.attr('selected', 'selected');\n $attrValue.addClass('selected');\n } else {\n $attrValue.removeAttr('selected');\n $attrValue.removeClass('selected');\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAttrs(attrs, $productContainer) {\n const attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateMiniAttrs(attrs, $productContainer) {\n const attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer);\n } else {\n processNonSwatchValuesMiniSet(attr, $productContainer);\n }\n });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '
' + response.resources.info_selectforstock + '
';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
' + message + '
';\n });\n controlSizeModalProduct(null, response);\n }\n\n /** Controllo che mostra la label del prodotto in quick view solo se la label del prodotto è presente */\n var $nameGroup = $('.product-name-group');\n var $labels = $('.product-tag-labels');\n var label = response.product.label;\n\n if ($labels.length === 0 && label) {\n $nameGroup.prepend('');\n } else if ($labels.length > 0 && label) {\n $labels.find('span').text(label);\n $labels.removeClass('hide');\n } else if (!label && $labels.length > 0) {\n $labels.addClass('hide');\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n/**\n * Generates html for promotions section\n *\n * @param {array} promotions - list of promotions\n * @return {string} - Compiled HTML\n */\nfunction getPromotionsHtml(promotions) {\n if (!promotions) {\n return '';\n }\n\n var html = '';\n\n promotions.forEach(function (promotion) {\n html += '
' + promotion.calloutMsg + '
';\n });\n\n return html;\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '
' + attribute.label + ': '\n + attribute.value + '
';\n });\n }\n });\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n let isChoiceOfBonusProducts = $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n let isVaraint;\n let isNewtest = response.product.isNewtest;\n let isInWishlist = response.product.isInWishlist;\n let isOnSale = response.product.isSale;\n\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item').data('pid', response.product.id);\n $productContainer.parent('.bonus-product-item').data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.product-name-group .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n $('.side-details .product-name').empty().html(response.product.productName);\n $('.promotions').empty().html(getPromotionsHtml(response.product.promotions));\n\n updateAvailability(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product,\n $productContainer: $productContainer\n });\n } else {\n $('button.add-to-cart, button.add-to-cart-global').trigger('product:updateAddToCart', {\n product: response.product,\n $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n if (isNewtest) {\n $('.side-details .new-arrival').addClass('show').removeClass('hide');\n } else {\n $('.side-details .new-arrival').addClass('hide').removeClass('show');\n }\n\n if (isOnSale) {\n $('.side-details .is-sale').addClass('show').removeClass('hide');\n } else {\n $('.side-details .is-sale').addClass('hide').removeClass('show');\n }\n\n if (isInWishlist) {\n $('.side-details .add-to-wish-list, .side-grid-images .add-to-wish-list').addClass('is-in-wishlist');\n } else {\n $('.side-details .add-to-wish-list, .side-grid-images .add-to-wish-list').removeClass('is-in-wishlist');\n }\n\n if ($productContainer.find('.error-msg').length) {\n $productContainer.find('.error-msg').remove();\n }\n\n $productContainer.find('.add-to-wish-list').each(function (index, el) {\n el = $(el);\n el.attr('disabled', false);\n const attr = el.attr('data-remove-url');\n\n if (typeof attr !== typeof undefined && attr !== false) {\n el.attr('data-remove-url', el.attr('data-remove-url').replace(/\\?pid=.*/g, '?pid=' + response.product.id));\n }\n });\n\n $productContainer.find('.main-attributes').empty().html(getAttributesHtml(response.product.attributes));\n $productContainer.removeClass('loading');\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected on a mini product set.\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantMiniSetResponse(response, $productContainer) {\n if (response.product.variationAttributes) {\n updateMiniAttrs(response.product.variationAttributes, $productContainer);\n }\n\n var $priceSelector = $productContainer.find('.price');\n $priceSelector.replaceWith(response.product.price.html);\n\n $productContainer.find('.product-info .product-link').text(response.product.productName);\n $productContainer.find('button.add-to-cart-set').trigger('product:updateAddToCartMiniSet', {\n product: response.product,\n $productContainer: $productContainer\n });\n\n $productContainer.removeClass('loading');\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options, etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if (!($productContainer.parent('.bonus-product-item').length > 0)) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * Updates the \"color name\" DOM element post Ajax call\n */\nfunction updateColorName() {\n if ($('.color-cell-container').find('.swatch-color').hasClass('selected')) {\n var colorName = $('.swatch-color.selected').attr('data-display-value');\n $('[data-attr=\"color\"]').find('.color-name').text(colorName);\n } else {\n $('[data-attr=\"color\"]').find('.color-name').text('');\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer, $secondaryCall) {\n if (typeof $secondaryCall === 'undefined') {\n $secondaryCall = false;\n }\n\n if (selectedValueUrl) {\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n beforeSend: function () {\n $productContainer.addClass('loading');\n },\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n updateColorName();\n updateAddToCartEvent(data.product);\n updateLabel(data.product);\n controlSizeModalProduct(null, ($productContainer.hasClass('product-quickview')) ? data : null);\n if (!$secondaryCall) {\n replaceProductsetWidget(data);\n updateScalapayWidget(data.product);\n }\n $('body').trigger('product:afterAttributeSelect', {\n data: data,\n container: $productContainer\n });\n\n if (data.product.oosProduct) {\n $('button.add-to-cart', $productContainer).addClass('hidden');\n $('.availability-msg.oos', $productContainer).css({ 'font-size': '18px', 'font-weight': '500', color: '#C82828' });\n $('.availability-msg.oos', $productContainer).text(data.product.oosLabel);\n $('.availability-msg.oos', $productContainer).removeClass('hidden');\n } else {\n $('button.add-to-cart', $productContainer).removeClass('hidden');\n $('.availability-msg.oos', $productContainer).addClass('hidden');\n }\n },\n error: function () {\n console.log('error in process the request');\n }\n });\n }\n}\n\nfunction updateScalapayWidget(product){\n if(!product) return;\n\n const scalapayWidget = $('scalapay-widget');\n try{\n if(scalapayWidget.length && !!product.price.sales.decimalPrice){\n scalapayWidget.attr('amount', product.price.sales.decimalPrice);\n }\n }catch(ex){}\n}\n\nfunction replaceProductsetWidget(data) {\n if (typeof productSetWidgetAction === 'undefined' || typeof data === 'undefined') {\n return;\n }\n\n if (typeof data.product.productSets !== 'undefined' && data.product.productSets.length > 0) {\n $.ajax({\n url: productSetWidgetAction,\n type: 'GET',\n dataType: 'html',\n data: data.queryString,\n success: function (data) {\n if ($('.extra-product-container').length > 0) {\n if ($('.extra-product-container .product-set').length > 0) {\n $('.extra-product-container .product-set').remove();\n }\n\n $('.extra-product-container').prepend(data);\n $(document).foundation();\n }\n }\n });\n } else if ($('.extra-product-container .product-set').length > 0) {\n $('.extra-product-container .product-set').remove();\n }\n}\n\n/**\n * get template for replace all PDP images\n */\nfunction replaceImages(url, $productContainer) {\n var productContainerImages = $productContainer;\n var carouselImages = null;\n if (productContainerImages.find('.slides').length) {\n carouselImages = productContainerImages.find('.slides');\n }\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n beforeSend: function () {\n productContainerImages.addClass('loading');\n },\n success: function (data) {\n productContainerImages.empty().html(data);\n productContainerImages.removeClass('loading');\n if (carouselImages) {\n carouselImages.owlCarousel('destroy');\n carousel.quickviewCarousel();\n } else {\n productContainerImages.owlCarousel('destroy');\n owl(productContainerImages);\n }\n },\n error: function () {\n console.log('error in process the request');\n }\n });\n }\n}\n\n/**\n * get template for replace all PDP modal images\n */\nfunction replaceModalImages(url) {\n var productModalImages = $(document).find('.product-zoom-modal');\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function (data) {\n productModalImages.empty().html(data);\n },\n error: function () {\n console.log('error in process the request');\n }\n });\n }\n}\n\n/**\n * function to update price for SEO event addToCart\n */\nfunction updateAddToCartEvent(product) {\n $(document).ready(function () {\n if (typeof $(document).find('.add-to-cart').data('analiticsp') !== 'undefined') {\n let price = 0;\n if (Object.prototype.hasOwnProperty.call(product.price, 'min')) {\n price = product.price.min;\n } else if (Object.prototype.hasOwnProperty.call(product.price, 'max')) {\n price = product.price.max;\n } else if (Object.prototype.hasOwnProperty.call(product.price, 'sales')) {\n price = product.price.sales.value;\n } else price = product.price;\n\n let addToCartEvent = $(document).find('.add-to-cart').data('analiticsp');\n let addToCartEventParse = JSON.parse(decodeURIComponent(addToCartEvent));\n\n let datalayerEvent = {\n name: addToCartEventParse.name,\n id: addToCartEventParse.id,\n price: price,\n brand: 'twinset milano',\n category: addToCartEventParse.category,\n variant: addToCartEventParse.variant,\n quantity: '1',\n dimension14: addToCartEventParse.dimension14,\n dimension15: addToCartEventParse.dimension15,\n dimension16: addToCartEventParse.dimension16\n };\n\n let encodedDatalayerEvent = encodeURIComponent(JSON.stringify(datalayerEvent));\n\n let elem = $(document).find('.add-to-cart').not('.add-to-wish-list');\n elem.data('analiticsp', encodedDatalayerEvent);\n }\n });\n}\n\n\nfunction updateLabel(product){\n if(product.label){\n $('.product-tag-label').text(product.label);\n }\n}\n/**\n * get template for replace accordion PDP\n */\nfunction replaceAccordion(url) {\n var productAccordion = $(document).find('.product-accordion');\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function (data) {\n productAccordion.empty().html(data);\n },\n complete: function (data) {\n Accordion.run();\n },\n error: function () {\n console.log('error in process the request');\n }\n });\n }\n}\n\n/**\n * updates the product view when a \"mini product set\" attribute is selected or deselected or when changing size\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelectMiniSet(selectedValueUrl, $productContainer) {\n if (selectedValueUrl) {\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n beforeSend: function () {\n $productContainer.addClass('loading');\n },\n success: function (data) {\n handleVariantMiniSetResponse(data, $productContainer);\n controlSizeModalProductSet();\n\n // changhe set mini product set PID\n $('body').trigger('product:afterMiniAttributeSelect', {\n data: data,\n container: $productContainer\n });\n },\n error: function () {\n console.log('error in process the request');\n }\n });\n }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('
').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return {\n body: body,\n footer: footer\n };\n}\n\n/**\n * Assignment of post Ajax parameters to open the \"size modal\" in case the user does not select a size.\n * @param {Object} html - the element to be assigned the parameters to open the \"size modal\"\n */\nfunction controlSizeModalProduct(elem, response) {\n elem = (!elem) ? $('button.add-to-cart') : $(elem);\n\n if(!!response && response.hasGiftCard){\n Callout.error(null, response.giftCardAllert, $('#quickViewModal .error-wrapper'), false, false, false);\n }else if ($('[data-attr=\"size\"] .selected').length === 0) {\n if ($('.size-modal').length === 0) {\n elem.removeClass('disabled');\n elem.addClass('no-modal-no-size-selected');\n } else {\n elem.each(function (index, el) {\n if ($(el).parent().is('.cart-and-ipay')) {\n $(el).removeAttr('disabled').attr('data-open', 'size-modal').addClass('disabled');\n } else {\n $(el).removeAttr('disabled').addClass('disabled');\n }\n });\n }\n } else {\n elem.removeAttr('data-open').removeClass('disabled no-size-selected').removeClass('no-modal-no-size-selected');\n elem.removeAttr('disabled');\n }\n}\n\n/**\n * Assignment of post Ajax parameters to open the \"size modal\" in case the user does not select a size.\n * dedicated to products of type product-set\n * @param {Object} html - the element to be assigned the parameters to open the \"size modal\"\n */\nfunction controlSizeModalProductSet(elem) {\n elem = (!elem) ? $('button.add-to-cart-set') : $(elem);\n\n elem.each(function (index, el) {\n var elemSelect = $(el).parents('[data-attr=\"size\"]').find('select');\n var elemModalId = $(el).parents('[data-attr=\"size\"]').data('modal');\n\n if (elemSelect.length > 0) {\n if (typeof elemSelect.find(':selected').data('attr-value') !== 'undefined') {\n $(el).removeAttr('data-open');\n } else if ($('#' + elemModalId).length > 0) {\n $(el).attr('data-open', elemModalId);\n }\n }\n });\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Initialize \"images grid\" carousel on mobile breakpoint\n *\n * @param {jQuery} $el - DOM element for initialize the carousel\n */\nfunction owl($el) {\n const breakpoint = 720;\n let width = $(window).innerWidth();\n let $render = $el;\n\n if (width > breakpoint) {\n if (!$render.hasClass('owl-carousel') || !$render.length) {\n return;\n }\n\n $render.removeClass('owl-carousel').trigger('destroy.owl.carousel');\n } else if (width <= breakpoint) {\n if ($render.hasClass('owl-loaded') || !$render.length) {\n return;\n }\n\n $render.addClass('owl-carousel').owlCarousel({\n items: 1,\n loop: true,\n nav: false,\n dots: true,\n smartSpeed: 450,\n slideTransition: 'ease-in-out'\n });\n }\n}\n\nclass product {\n constructor() {\n this.methods = {\n editBonusProducts: function (data) {\n // chooseBonusProducts(data);\n }\n };\n }\n\n colorValue() {\n updateColorName();\n }\n\n colorAttributeNoClick(element, forceSelect) {\n var oldColor = $('a.swatch-color.selected').data('familyColorSearch');\n var self = $(element);\n\n if (!forceSelect && (self.attr('disabled') || self.hasClass('unselectable') || self.hasClass('selected'))) {\n return;\n }\n\n try {\n document.title = document.title.replace(oldColor, self.data('familyColorSearch'));\n var description = $('meta[name=\"description\"]').attr('content');\n var ogDescription = $('meta[property=\"og:description\"]').attr('content');\n $('meta[name=\"description\"]').attr('content', description.replace(oldColor, self.data('familyColorSearch')));\n $('meta[property=\"og:description\"]').attr('content', ogDescription.replace(oldColor, self.data('familyColorSearch')));\n } catch (error) {\n\n }\n\n var $productContainer = self.closest('.product-quickview');\n\n if (!$productContainer.length) {\n $productContainer = self.closest('.product-detail');\n attributeSelect(self.attr('href'), $productContainer);\n attributeSelect(self.attr('href'), $('.size-modal'), true);\n replaceImages(self.data('image-url'), $productContainer.find('.grid-render'));\n replaceModalImages(self.data('modal-image-url'));\n replaceAccordion(self.data('accordion-url'));\n EnhancedSeo.clickAccordion(['.product-accordion .trigger', 'aria-expanded']);\n } else {\n attributeSelect(self.attr('href'), $productContainer);\n replaceImages(self.data('image-url') + '&quickview=true', $productContainer.find('.quick-view-images'));\n }\n }\n\n colorAttribute() {\n $(document).on('click', '[data-attr=\"color\"] a', function (e) {\n e.preventDefault();\n this.colorAttributeNoClick(e.currentTarget);\n // check if the event is user generated or programmatically triggered\n var isUserEvent = true;\n if (typeof e.isTrusted !== 'undefined') {\n isUserEvent = e.isTrusted;\n } else if (e.clientX === 0 && e.clientY === 0) {\n // compatibility for browser that does not yet support isTrusted property\n isUserEvent = false;\n }\n // do not trigger variant event if the click is not user generated\n if (isUserEvent) {\n EnhancedSeo.selectedVariant($(e.currentTarget), ['.product-detail', 'pid', 'data-family-color-search']);\n }\n }.bind(this));\n\n $(document).ready(function () {\n if (colorValueHtmlHead) {\n $('a.swatch-color').each(function (i, el) {\n var colorIndex = $(el).data('familyColorSearch');\n if (colorIndex !== colorValueHtmlHead) {\n try {\n document.title = document.title.replace(colorIndex, colorValueHtmlHead);\n var description = $('meta[name=\"description\"]').attr('content');\n var ogDescription = $('meta[property=\"og:description\"]').attr('content');\n $('meta[name=\"description\"]').attr('content', description.replace(colorIndex, colorValueHtmlHead));\n $('meta[property=\"og:description\"]').attr('content', ogDescription.replace(colorIndex, colorValueHtmlHead));\n } catch (error) {\n\n }\n }\n });\n }\n });\n }\n\n selectAttributeNoClick(element) {\n var self = $(element);\n\n if (self.attr('disabled') || self.hasClass('selected')) {\n return;\n }\n\n var $productContainer = self.closest('.product-quickview');\n\n if (!$productContainer.length) {\n $productContainer = $('.product-detail');\n attributeSelect(self.attr('data-url-value'), $productContainer);\n attributeSelect(self.attr('data-url-value'), $('.size-modal'), true);\n replaceAccordion(self[0].dataset.accordionUrl);\n } else {\n attributeSelect(self.attr('data-url-value'), $productContainer);\n }\n }\n\n selectAttribute() {\n $(document).on('click', '[data-attr=\"size\"] .list-size > li, .options-select', function (e) {\n e.preventDefault();\n this.selectAttributeNoClick(e.currentTarget);\n }.bind(this));\n\n $(document).on('click', '[data-productset-attr=\"size\"] .list-size > li', function (e) {\n e.preventDefault();\n var self = $(e.currentTarget);\n var referencedSelect = $('[data-modal=\"' + self.parents('section').attr('id') + '\"]').find('select');\n\n if (self.attr('disabled') || self.hasClass('selected')) {\n return;\n }\n\n referencedSelect.val(self.attr('data-url-value')).trigger('change');\n var $productContainer = $('[data-modal=\"' + self.parents('section').attr('id') + '\"]');\n attributeSelectMiniSet(self.attr('data-url-value'), $productContainer);\n attributeSelectMiniSet(self.attr('data-url-value'), self.parents('section'), true);\n });\n }\n\n selectMiniSetAttribute() {\n $(document).on('change', '.set-items-render .list-size', function (e) {\n e.preventDefault();\n\n const self = $(e.currentTarget);\n const $productContainer = self.closest('.set-items-render');\n let url = self.val();\n\n if (url === 'null' || url === '') {\n self.closest('.set-items-render').find('.add-to-cart-set').addClass('disabled');\n } else {\n attributeSelectMiniSet(url, $productContainer);\n }\n });\n }\n\n availability() {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(e.currentTarget).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(e.currentTarget).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'), $productContainer);\n }\n });\n }\n\n addToCart() {\n $(document).off('click', 'button.add-to-cart, button.add-to-cart-global')\n .on('click', 'button.add-to-cart, button.add-to-cart-global', (e, options) => {\n e.preventDefault();\n\n var addToCartUrl;\n var pid;\n var quantity;\n var pidsObj;\n var options = !!options ? JSON.stringify(options) : null;\n var self = $(e.currentTarget);\n\n if ((self.hasClass('disabled') && self.hasClass('no-size-selected')) || self.hasClass('no-modal-no-size-selected')) {\n if ($('.list-size').next('.error-msg').length === 0) {\n const div = $('
');\n const errorMsg = $('.variation-attr').attr('data-error-msg');\n div.text(errorMsg).insertAfter('.quick-view-details .list-size');\n }\n\n return;\n }\n\n pid = getPidValue(self);\n\n if (self.hasClass('disabled') || self.hasClass('not-enabled-to-add') || self.hasClass('no-modal-no-size-selected')) {\n if (self.hasClass('add-to-wish-list')) {\n EnhancedSeo.noSizeWishlistClick(pid, ['.swatch-color.selected', 'familyColorSearch']);\n } else {\n EnhancedSeo.noSizeClick(pid, ['.swatch-color.selected', 'familyColorSearch']);\n }\n return;\n }\n\n addToCartUrl = getAddToCartUrl();\n quantity = getQuantitySelected(self) || 1;\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: quantity,\n options: options\n };\n\n if (!self.parents('.size-modal').length) {\n controlSizeModalProduct(e.currentTarget);\n } else {\n $('.size-modal .close-modal').trigger('click');\n }\n\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: (data) => {\n if(data.error && data.hasGiftCardError){\n showAlertModal(data);\n return;\n }\n if (data.excess || data.error) {\n $('.mini-cart-link').attr('data-has-error', 'true');\n } else {\n $('.mini-cart-link').removeAttr('data-has-error');\n }\n\n // Trigger Goal Event: cart_created\n if (data.created) {\n dataLayer.push({\n gaHitType: 'event',\n event: 'goal_event',\n event_category: 'cart_created',\n event_action: pid.replace(/_/g, '|')\n });\n }\n if (pageTypeForJS === 'cart') {\n location.reload();\n $(document).ready(function () {\n $(this).scrollTop(0);\n });\n }\n AddToCartMsg.handlePostCartAdd(data);\n EnhancedSeo.pushATC(\n self.data(\"analiticsp\"),\n this.getDataLayerGA4(data.cart, pid, \"add_to_cart\", true)\n );\n $('body').trigger('product:afterAddToCart', data);\n },\n error: function () {\n console.log('error in process request');\n }\n });\n }\n });\n }\n\n addToCartMiniSet() {\n $(document).on('click', 'button.add-to-cart-set', function (e) {\n e.preventDefault();\n\n var addToCartUrl;\n var pid;\n var pidsObj;\n var self = $(e.currentTarget);\n var $productContainer = self.closest('.set-item');\n\n if (self.hasClass('disabled')) {\n return;\n }\n\n if (!self.parents('.size-modal').length) {\n controlSizeModalProductSet(e.currentTarget);\n } else {\n $('.size-modal .close-modal').trigger('click');\n }\n\n $('body').trigger('product:beforeAddToCart', this);\n pid = $productContainer.attr('data-pid');\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: [],\n quantity: 1\n };\n\n if (addToCartUrl && !self.hasClass('disabled')) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: (data) => {\n AddToCartMsg.handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push({\n event: 'shop_by_look_add_to_cart',\n ecommerce: this.getDataLayerGA4(data.cart, pid, \"add_to_cart\", false)\n });\n }\n },\n error: function () {\n console.log('error in process request');\n }\n });\n }\n }.bind(this));\n }\n\n gridImagesCarousel() {\n const win = $(window);\n const gridImages = $('.grid-render');\n\n let scrollToSlider = function () {\n var breakpoint = Foundation.MediaQuery.current;\n var edge = $('.header-banner').outerHeight(true) + $('header').outerHeight(true);\n\n if (window.device && (window.device.type === 'mobile' || window.device.type === 'tablet') || breakpoint === 'medium' || breakpoint === 'small') {\n if ($(window).scrollTop() <= edge) {\n $('html, body').animate({\n scrollTop: edge + 10\n }, 500);\n }\n }\n };\n\n $(document).ready(owl(gridImages));\n\n win.on('resize', function () {\n owl(gridImages);\n });\n\n win.on('load', function () {\n scrollToSlider();\n });\n }\n\n selectBonusProduct() {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var submittedQty = parseInt($(this).parents('.choice-of-bonus-product').find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $(this).parents('.choice-of-bonus-product').find('.product-option').data('option-id');\n var valueId = $(this).parents('.choice-of-bonus-product').find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = ''\n + '
'\n + '
'\n + $choiceOfBonusProduct.find('.product-name').html()\n + '
'\n + '
'\n + '
';\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n }\n });\n }\n\n removeBonusProduct() {\n $(document).on('click', '.selected-pid', function () {\n $(this).remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data('qty'), 10);\n });\n }\n\n $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n });\n }\n\n enableBonusProductSelection() {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product').data('pid', pid);\n });\n }\n\n showMoreBonusProducts() {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').spinner().stop();\n }\n });\n });\n }\n\n /**\n * @param {Object} cart - Cart/Basket Model\n * @param {String|Object} product - ID of product or Product Model\n * @param {String} event - GA4 Event\n * @param {boolean} isSingleQnt - true if the request come from the UpdateQuantity Route\n */\n getDataLayerGA4(cart, product, event, isSingleQnt) {\n var item = (typeof product === \"object\") ? this.getProductGA4Model(product)\n : cart.items.filter((el) => { return el.id === product; }).map((prod) => this.getProductGA4Model(prod, isSingleQnt));\n\n var priceValue = item.price ? (Number(item.price) - Number(item.discount)) : (Number(item[0].price) - Number(item[0].discount))\n\n return {\n currency: currentCurrency,\n value: priceValue,\n items: event === \"remove_from_cart\" ? (Array.isArray(item) ? item : [item]) : item,\n }\n }\n\n getCartGA4Model(cart, event, isSingleQnt){\n\n var items = [];\n\n for(let i = 0; i < cart.items.length; i++){\n var item = this.getProductGA4Model(cart.items[i], isSingleQnt);\n items.push(item);\n }\n document.dispatchEvent(new Event('cart:update'));\n\n return {\n currency: currentCurrency,\n value: Number(cart.totals.grandTotal.substring(2).replace(',', '')),\n items: items,\n }\n\n }\n\n getProductGA4Model(product, isSingleQnt) {\n try{\n const categories = product.categoryPath.split(\"/\");\n const discount = (product.price.list !== null && product.price.sales !== null)\n ? (parseFloat(product.price.list.decimalPrice) - parseFloat(product.price.sales.decimalPrice)).toFixed(2) : '0.00';\n const color = product.variationAttributes.filter((el) => { return el.id === \"color\"} )[0];\n const size = product.variationAttributes.filter((el) => { return el.id === \"size\"} )[0];\n\n return {\n item_id: product.masterid,\n item_name: product.productName,\n currency: currentCurrency,\n discount: Number(discount),\n item_brand: 'twinset milano',\n item_category: categories.length > 0 ? categories[0] : '',\n item_category2: categories.length > 1 ? categories[1] : '',\n item_category3: categories.length > 2 ? categories[2] : '',\n item_list_name: 'cart',\n item_variant: color.displayValue,\n price: product.price.list ? product.price.list.value : product.price.sales.value,\n quantity: isSingleQnt ? '1' : product.quantity,\n item_availability: product.availability.inStock ? 'in_stock' : 'out_of_stock',\n item_discount_tag: discount !== '0.00' ? 'on_sale' : 'not_on_sale',\n available_size_percentage: product.available_size_percentage,\n item_size: size.displayValue,\n item_variant_v2: product.id,\n item_url: product.masterUrl,\n item_img: product.defaultColorImageObj ? product.defaultColorImageObj.large[0].url : product.images.large[0].url\n }\n }catch(ex){\n return {};\n }\n }\n\n addToCartMobileSEO() {\n $(document).on('click', '.add-to-cart-messages', function () {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'funzionalita_cross',\n event_action: 'prodotto_aggiunto_al_carrello'\n });\n });\n\n $(document).on('click', '#mobile-checkout', function () {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'funzionalita_cross',\n event_action: 'prodotto_aggiunto_al_carrello_new',\n event_label: 'procedi_all_acquisto'\n });\n });\n\n $(document).on('click', '#mobile-view-cart', function () {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'funzionalita_cross',\n event_action: 'prodotto_aggiunto_al_carrello_new',\n event_label: 'mostra_carrello'\n });\n });\n }\n\n addBonusProductsToCart() {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption = parseInt($(this)\n .data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $('.error-choice-of-bonus-products').html(data.errorMessage);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '
'\n );\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '
'\n + data.msgSuccess + '
'\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n window.location.reload();\n }\n }, 3000);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n }\n}\n\nconst Product = new product();\nexport default Product;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/product/index.js","import Easing from '../services/easing';\n\n/**\n * @function setARIA\n * @description Apply the correct ARIA attribute at the moment of click.\n * @param {jQuery} $el - DOM element to set the correct ARIA attribute.\n * @param {jQuery} $container - DOM element to check if it is hidden or not.\n */\nfunction setARIA($el, $container) {\n if ($el.siblings($container).is(':hidden')) {\n $el.attr('aria-expanded', 'false');\n } else {\n $el.attr('aria-expanded', 'true');\n }\n}\n\nclass accordion {\n constructor() {\n this.parent = '.accordion';\n this.triggerEl = '.trigger';\n this.expandable = '.expandable';\n this.content = '.content';\n this.defEasing = 'easeInOutCirc';\n this.defTiming = 450;\n }\n\n run() {\n this.findOpenContents();\n this.setWCAG();\n this.trigger();\n }\n\n findOpenContents() {\n $(this.parent).find('[data-init-open]').each((index, el) => {\n $(el).addClass('open').removeAttr('data-init-open').find(this.content)\n .show();\n });\n }\n\n setWCAG() {\n $(this.parent).attr('role', 'tablist').find(this.triggerEl).each((index, el) => {\n $(el).attr('role', 'tab').attr('tabindex', '0');\n $(el).siblings(this.content).attr('role', 'tabpanel');\n setARIA($(el), this.content);\n });\n }\n\n trigger() {\n $(this.parent).on('click', this.triggerEl, (event) => {\n event.preventDefault();\n let self = $(event.currentTarget);\n\n this.toggleTriggerClass(self);\n this.toggleContent(self);\n this.siblingsSlideUp(self);\n });\n }\n\n toggleTriggerClass(elem) {\n elem.closest(this.expandable).toggleClass('open');\n }\n\n toggleContent(elem) {\n elem.siblings(this.content).stop().slideToggle(this.defTiming, this.defEasing, () => {\n setARIA(elem, this.content);\n });\n }\n\n siblingsSlideUp(elem) {\n if (elem.parents(this.parent).attr('data-trigger-once') !== 'true') {\n elem.closest(this.expandable).siblings(this.expandable).find(this.content).slideUp(this.defTiming, this.defEasing);\n elem.closest(this.expandable).siblings(this.expandable).removeClass('open');\n elem.closest(this.expandable).siblings(this.expandable).find(this.triggerEl).attr('aria-expanded', 'false');\n }\n }\n}\n\nconst Accordion = new accordion();\nexport default Accordion;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/components/accordion.js","if (typeof $.easing !== 'undefined') {\n\t$.easing['jswing'] = $.easing['swing'];\n}\n\nexport const Easing = $.extend($.easing, {\n\tdef: 'easeOutQuad',\n\tswing: (x) => {\n\t\treturn $.easing[$.easing.def](x);\n\t},\n\teaseOutQuad: (x) => {\n\t\treturn 1 - (1 - x) * (1 - x);\n\t},\n\teaseInOutCirc: (x) => {\n\t\treturn x < 0.5 ?\n\t\t(1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 :\n\t\t(Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n\t}\n});\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/services/easing.js","/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = ''\n + '
'\n + '
'\n + ''\n + '
'\n + '
'\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
'\n + '
'\n + '
'\n + '
'\n + '
'\n + '
';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'html',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nclass addToCartMsg {\n handlePostCartAdd(response) {\n const minicart = $('.mini-cart');\n const breakpoint = Foundation.MediaQuery.current;\n\n minicart.trigger('count:update', response);\n\n if (response.newBonusDiscountLineItem && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else if (breakpoint === 'large' || breakpoint === 'xlarge' || breakpoint === 'xxlarge') {\n minicart.addClass('popup-open');\n $('.mini-cart-link').trigger('mouseenter');\n\n $('.mini-cart-link').on('mouseenter', () => {\n clearTimeout(triggerMinicart);\n });\n\n let triggerMinicart = setTimeout(() => {\n minicart.removeClass('popup-open');\n }, 3500);\n } else if (breakpoint === 'small') {\n var modal = $('#added-to-cart-modal')\n initAddedToCartConfirmationModal(modal, response);\n\n var addedToCartModal = new Foundation.Reveal(modal);\n addedToCartModal.open();\n }\n }\n}\n\nfunction initAddedToCartConfirmationModal(modal, data) {\n const messageType = data.error ? 'alert' : 'success';\n modal.find('header').removeClass('alert success');\n modal.find('header h4').html('');\n modal.find('.modal-content .product-preview').html('');\n\n modal.find('header').addClass(`${messageType}`);\n modal.find('header h4').html(`${data.message}`);\n modal.find('.modal-content .product-preview').html(`${data.cartLastItemSnippet}`);\n\n modal.on('open.zf.reveal', function (event) {\n document.dispatchEvent(new Event('product:afterConfirmationModalOpen'));\n })\n\n modal.on('closed.zf.reveal', function (event) {\n document.dispatchEvent(new Event('product:afterConfirmationModalClose'));\n })\n\n}\n\nconst AddToCartMsg = new addToCartMsg();\nexport default AddToCartMsg;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/product/addToCartMsg.js","import Seo from './components/seo.js';\n\nclass enhancedSeo {\n /**\n * @function clickStoreDetails - Get store detail when click to details button\n * @param {Object} marker - store object information\n * @param {Array} elements - array with all necessary elements\n */\n clickStoreDetails(marker, elements) {\n if (this.checkIfArray(elements, 2)) {\n const $isStoreLocatorList = $(elements[0]);\n if ($isStoreLocatorList.length) {\n $isStoreLocatorList.on('click', elements[1], (e) => {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'store_locator',\n event_action: 'dettaglio_store',\n event_label: marker.store.name + ', ' + marker.store.address1\n });\n });\n }\n }\n }\n\n /**\n * @function selectedStoreDetail - Get selected store for seo\n * @param {Object} marker - store object information\n */\n selectedStoreDetail(marker) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'store_locator',\n event_action: 'select_store',\n event_label: marker.store.name + ', ' + marker.store.address1\n });\n }\n\n /**\n * @function clickCreateAccountHeaderPopup - Get store detail when click on create account button header\n * @param {Array} elements - array with all necessary elements\n */\n clickCreateAccountHeaderPopup(elements) {\n if (this.checkIfArray(elements, 2)) {\n const $isPopupFooterHeader = $(elements[0]);\n if ($isPopupFooterHeader.length) {\n $isPopupFooterHeader.on('click', elements[1], (e) => {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'my_account',\n event_action: 'crea_il_mio_account',\n event_label: ''\n });\n });\n }\n }\n }\n\n /**\n * @function clickMobileFooterMenu - Get seo when click on mobile footer menu\n * @param {Array} elements - array with all necessary elements\n */\n clickMobileFooterMenu(elements) {\n if (this.checkIfArray(elements, 3)) {\n const isMobileMenu = $(elements[0]);\n if (isMobileMenu.length) {\n $(isMobileMenu).on('click', elements[1], (e) => {\n const iconName = $(e.currentTarget).attr(elements[2]);\n if (iconName) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'funzionalita_cross',\n event_action: 'menu',\n event_label: iconName\n });\n }\n });\n }\n }\n }\n\n /**\n * @function clickOnCookieBanner - Get seo click on cookie banner\n * @param {Array} elements - array with all necessary elements\n */\n clickOnCookieBanner(elements) {\n if (this.checkIfArray(elements, 3)) {\n const isCookieAlert = $(elements[0]);\n if (isCookieAlert.length) {\n const elementList = [elements[1], elements[2]];\n elementList.forEach((elem) => {\n isCookieAlert.on('click', elem, (e) => {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'funzionalita_cross',\n event_action: 'cookie_bar',\n event_label: 'accettazione_cookie_policy'\n });\n });\n });\n }\n }\n }\n\n loginLogoutEvent(eventType, loyaltyLevel){\n dataLayer.push({\n event: \"account_login\",\n login_method: \"email\",\n timestamp: new Date().toISOString(),\n membership_type: loyaltyLevel,\n event_action: eventType\n });\n }\n\n /**\n * @function clickOnSearch - Get seo click on search\n * @param {Array} elements - array with all necessary elements\n */\n clickOnSearch(elements) {\n if (this.checkIfArray(elements, 4)) {\n const isSearch = $(elements[0]);\n if (isSearch.length) {\n let classObj = {};\n classObj[elements[1]] = 'chiudi';\n classObj[elements[2]] = 'scoprili_tutti';\n classObj[elements[3]] = 'esplora';\n\n Object.keys(classObj).forEach((element) => {\n isSearch.on('click', element, (e) => {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'funzionalita_cross',\n event_action: 'ricerca',\n event_label: classObj[element]\n });\n });\n });\n }\n }\n }\n\n /**\n * @function clickChat - Get seo event when click on chat button\n * @param {Array} elements - array with all necessary elements\n */\n clickChat(elements) {\n if (this.checkIfArray(elements, 1)) {\n const isChat = $(elements[0]);\n if (isChat.length) {\n isChat.on('click', (e) => {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'funzionalita_cross',\n event_action: 'chat'\n });\n });\n }\n }\n }\n\n /**\n * @function noSizeClick - Get seo event when no size product was clicked\n * @param pid - product id\n * @param {Array} elements - array with all necessary elements\n */\n noSizeClick(pid, elements) {\n if (this.checkIfArray(elements, 2)) {\n let colorName = $(elements[0]).data(elements[1]);\n if (pid && colorName) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'pdp',\n event_action: 'aggiungi_alla_shopping_bag',\n event_label: pid + '|' + colorName\n });\n }\n }\n }\n\n /**\n * @function noSizeWishlistClick - Get seo event when no size product was clicked\n * @param pid - product id\n * @param {Array} elements - array with all necessary elements\n */\n noSizeWishlistClick(pid, elements) {\n if (this.checkIfArray(elements, 2)) {\n let colorName = $(elements[0]).data(elements[1]);\n if (pid && colorName) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'pdp',\n event_action: 'add_to_wishlist',\n event_label: pid + '|' + colorName\n });\n }\n }\n }\n\n /**\n * @function clickAccordion - Get seo event when click accordion PDP\n * @param {Array} elements - array with all necessary elements\n */\n clickAccordion(elements) {\n if (this.checkIfArray(elements, 2)) {\n $(document).on('click', elements[0], (event) => {\n const $self = $(event.currentTarget);\n var accordionText = $self.text().trim();\n var accordionExpanded = $self.attr(elements[1]);\n\n if (accordionExpanded == 'true') {\n accordionExpanded = 'chiudi';\n } else {\n accordionExpanded = 'apri';\n }\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'pdp',\n event_action: 'contenuti',\n event_label: accordionText + '|' + accordionExpanded\n });\n });\n }\n }\n\n /**\n * @function breadcrumbsClick - Get seo event when click on breadcrumbs\n * @param {Array} elements - array with all necessary elements\n */\n breadcrumbsClick(elements) {\n if (this.checkIfArray(elements, 2)) {\n $(document).on('click', elements[0], (e) => {\n if (window.device.type === 'mobile') {\n let categoryID = $(e.currentTarget).attr(elements[1]);\n if (categoryID) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'pdp',\n event_action: 'breadcrumb',\n event_label: categoryID\n });\n }\n }\n });\n }\n }\n\n /**\n * @function sizeGuideClick - Get seo event when click on product size guide\n * @param {Array} elements - array with all necessary elements\n */\n sizeGuideClick(elements) {\n if (this.checkIfArray(elements, 3)) {\n $(document).on('click', elements[0], (e) => {\n let pid = $(elements[1]).data(elements[2]);\n if (pid) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'pdp',\n event_action: 'guida_alle_taglie',\n event_label: pid\n });\n }\n });\n }\n }\n\n /**\n * @function selectedVariant - Get seo event when select a variant product\n * @param {Array} elements - array with all necessary elements\n */\n selectedVariant($self, elements) {\n if (this.checkIfArray(elements, 3)) {\n let $productContainer = $self.closest(elements[0]);\n let pid = $productContainer.data(elements[1]);\n let colorName = $self.attr(elements[2]);\n if (pid && colorName) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'pdp',\n event_action: 'selezione_variante',\n event_label: pid + '|' + colorName\n });\n }\n }\n }\n\n /**\n * @function clickQuickviewProduct - Get seo event when open quickview product\n * @param {Array} elements - array with all necessary elements\n */\n clickQuickViewProduct(elements) {\n if (this.checkIfArray(elements, 5)) {\n var pid = $(elements[0]).find(elements[1]).data(elements[2]);\n var colorName = $($(elements[3])[0]).attr(elements[4]);\n if (pid && colorName) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'popup_prodotto',\n event_label: pid + '|' + colorName\n });\n }\n }\n }\n\n /**\n * @function productColorClick - Get seo event when click on product color in PLP\n * @param {Array} elements - array with all necessary elements\n */\n productColorClick(elements) {\n if (this.checkIfArray(elements, 5)) {\n const isColor = $(elements[0]);\n if (isColor.length) {\n isColor.on('click', elements[1], (event) => {\n const $self = $(event.currentTarget);\n let pid = $self.closest(elements[2]).data(elements[3]);\n let colorName = $self.attr(elements[4]);\n if (pid && colorName) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'selezione_variante',\n event_label: pid + '|' + colorName\n });\n }\n });\n }\n }\n }\n\n /**\n * @function showMoreClick - Get seo event when click on show more button in PLP\n */\n showMoreClick() {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'carica_altri_prodotti'\n });\n }\n\n /**\n * @function layout1ViewPlp - Get seo event when click on layout1 view plp\n */\n layoutSmallViewPlp() {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'tipo_visualizzazione',\n event_label: 'small' // click sul pulsante a sinistra\n });\n }\n\n /**\n * @function layout2ViewPlp - Get seo event when click on layout2 view plp\n */\n layoutBigViewPlp() {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'tipo_visualizzazione',\n event_label: 'big' // click sul pulsante a destra\n });\n }\n\n /**\n * @function paginationEventClick - Get seo event when click on pagination\n * @param $selfButton - Pagination button\n * @param {Array} elements - array with all necessary elements\n */\n paginationEventClick($selfButton, elements) {\n if (this.checkIfArray(elements, 4)) {\n if ($(elements[0]).hasClass(elements[1])) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'paginazione',\n event_label: 'next_page'\n });\n } else if ($(elements[0]).hasClass(elements[2])) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'paginazione',\n event_label: 'prev_page'\n });\n } else {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'listing',\n event_action: 'paginazione',\n event_label: $selfButton.attr(elements[3])\n });\n }\n }\n }\n\n /**\n * @function registerOkEvent - Get seo event when click on register account and return ok\n * @param profiling - Profilazione user\n * @param newsletter - Newsletter user\n */\n registerOkEvent(profiling, newsletter) {\n let event_label = [];\n if (newsletter) {\n event_label.push('newsletter');\n }\n if (profiling) {\n event_label.push('profilazione');\n }\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'registrazione',\n event_action: 'registrazione_ok',\n event_label: event_label.join('|')\n });\n }\n\n /**\n * @function clickOnChangeEmail - Get seo event when click on change email in edit profile myaccount\n * @param {Array} elements - array with all necessary elements\n */\n clickOnChangeEmail(elements) {\n if (this.checkIfArray(elements, 2)) {\n $(elements[0]).on('click', elements[1], (e) => {\n // click su Cambia Indirizzo Email\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'my_account',\n event_action: 'cambia_indirizzo_email',\n event_label: ''\n });\n });\n }\n }\n\n /**\n * @function clickOnChangeEmail - Get seo event when click on change password in edit profile myaccount\n * @param {Array} elements - array with all necessary elements\n */\n clickOnChangePassword(elements) {\n if (this.checkIfArray(elements, 2)) {\n $(elements[0]).on('click', elements[1], (e) => {\n // click su Cambia Password\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'my_account',\n event_action: 'cambia_password',\n event_label: ''\n });\n });\n }\n }\n\n /**\n * @function checkoutFormError - Get seo event when click on submit form checkout\n * @param {String} checkoutStep - checkout step number\n * @param {Object} element - jquery object representing the element with error\n */\n checkoutFormError(checkoutStep, elements) {\n if (this.checkIfArray(elements, 1) && checkoutStep) {\n let checkoutStages = {\n shipping: '1',\n payment: '2',\n placeorder: '3'\n };\n let eventAction = [];\n let eventLabel = [];\n\n elements.forEach((element) => {\n if (!$(element).is('input') && !$(element).is('select')) {\n element = $(element).find('input, select').get(0);\n }\n\n if (eventAction.indexOf(element.id) <= -1) {\n eventAction.push(element.id);\n }\n\n if (typeof element.dataset !== 'undefined' && typeof element.dataset.parsleyRequiredMessage !== 'undefined') {\n eventLabel.push(element.dataset.parsleyRequiredMessage);\n } else if ($(element).siblings('.errors-list').length > 0) {\n eventLabel.push($(element).siblings('.errors-list').first().text());\n } else {\n eventLabel.push('');\n }\n });\n if (eventAction.length && eventLabel.length) {\n dataLayer.push({\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'errori_checkout_' + checkoutStages[checkoutStep],\n event_action: eventAction.join('|'),\n event_label: eventLabel.join('|')\n });\n }\n }\n }\n\n checkIfArray(elements, mandatoryLength) {\n if (elements instanceof Array && elements.length >= mandatoryLength) {\n return true;\n }\n return false;\n }\n\n init() {\n // placeholder\n }\n\n /* // rimosso con il tracciamento ibrido con GA4\n productSeoValorize() {\n $(document).on('click', '.product-tile a', function (e) {\n Seo.productImpressions();\n if ($(this).hasClass('quickview')) {\n return true;\n }\n var listArray = [];\n var prodLayerArray = [];\n var listObj = Seo.generateProductTrackingModel($(e.target).closest('.product-tile'));\n listArray.push(listObj);\n var productObj = Seo.generateProductTrackingModel($(e.target).closest('.product-tile'));\n prodLayerArray.push(productObj);\n if (prodLayerArray[0].list) {\n delete prodLayerArray[0].list;\n }\n\n if (typeof dataLayer !== 'undefined') {\n let event = {\n event: 'productClick',\n ecommerce: {\n click: {\n actionField: {\n list: (listArray[0] && listArray[0].list) ? listArray[0].list : ''\n },\n products: prodLayerArray\n }\n }\n };\n dataLayer.push(event);\n }\n });\n } */\n\n pushATC(analyticsP, dataLayerGA4){\n let listName = this.pushListType();\n let modalOpen = $('.quick-view-modal').attr('aria-hidden'); //if open aria-hidden == false\n let section = pageTypeForJS;\n if(modalOpen === 'false'){\n section = 'quick_view'\n }\n if (analyticsP) {\n analyticsP = JSON.parse(decodeURIComponent(analyticsP));\n let selectedSizeElem = $('.list-size li.selected span')[0];\n let selectedSize = selectedSizeElem?selectedSizeElem.innerHTML:null;\n let selectedFamilyColorElem = $('a.swatch-color.selected');\n let selectedFamilyColor = selectedFamilyColorElem?selectedFamilyColorElem.data('familyColorSearch'):null;\n if(selectedSize){\n let analyticsObj = {\n where: section,\n event: 'add_to_cart'\n };\n\n if(typeof dataLayerGA4 !== \"undefined\" && dataLayerGA4 !== null) analyticsObj.ecommerce = dataLayerGA4;\n dataLayer.push(analyticsObj);\n }\n }\n }\n\n pushListType() {\n let list;\n let modalOpen = $('.quick-view-modal').attr('aria-hidden'); //if open aria-hidden == false\n if (modalOpen === 'false') {\n switch (pageTypeForJS) {\n case 'plp':\n list = 'category_listing';\n break;\n case 'pdp':\n list = 'related_product';\n break;\n case 'cart':\n list = 'related_products_cart';\n break;\n default:\n list = 'null';\n break;\n }\n }\n return list;\n }\n\n generateProductTrackingModelWishlist(element){\n return Seo.generateProductTrackingModelWishlist(element);\n }\n}\n\nconst EnhancedSeo = new enhancedSeo();\nexport default EnhancedSeo;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/enhancedSeo.js","import Product from \"../product\";\n\n\nclass SEO {\n run() {\n this.plp();\n this.breadcrumbs();\n this.filters();\n this.homepage();\n this.checkout();\n this.changecountry();\n this.socialshare();\n this.newsletter();\n this.wishlist();\n this.myaccount();\n this.productImpressions();\n this.asyncProductImpressions();\n }\n\n productImpressions() {\n var productTiles = $('.product-tile').not('.tracked');\n var _this = this;\n if (listingProductsArrayForHomePage && productTiles.length > 0) {\n productTiles.each(function () {\n var currentElement = $(this);\n var impression = _this.generateProductTrackingModel(currentElement);\n\n // Before adding an item to the listingProductsArrayForHomePage array,\n // check if already exists and avoid duplicates.\n if ((listingProductsArrayForHomePage.findIndex(item => item.id === impression.id) == '-1') && !currentElement.hasClass('tracked')) {\n listingProductsArrayForHomePage.push(impression);\n listingProductsJson[currentElement.attr('data-pid')] = impression;\n $('.product-tile[data-pid=\"' + currentElement.attr('data-pid') + '\"]').addClass('tracked');\n }\n });\n }\n }\n\n asyncProductImpressions() {\n var _this = this;\n $(window).on('gtmAsyncTrack::impression', function () {\n _this.viewItemListGA4Event();\n });\n }\n\n viewItemListGA4Event(){\n var _this = this;\n var productTiles = $('.product-tile').not('.tracked');\n var asyncProductsArray = [];\n if (productTiles.length > 0) {\n productTiles.each(function () {\n var currentElement = $(this);\n if(!currentElement.hasClass('impression')) {\n var impression = _this.generateProductTrackingModel(currentElement);\n\n // Before adding an item to the asyncProductsArray array,\n // check if already exists and avoid duplicates.\n if ((asyncProductsArray.findIndex(item => item.id === impression.id) == '-1') && !currentElement.hasClass('tracked')) {\n asyncProductsArray.push(impression);\n $('.product-tile[data-pid=\"' + currentElement.attr('data-pid') + '\"]').addClass('tracked');\n }\n }\n });\n _this.asyncProductsArray = asyncProductsArray;\n }\n\n if (typeof currentCurrency !== 'undefined' && asyncProductsArray.length > 0) {\n let items = [];\n let productCurrency = currentCurrency;\n\n asyncProductsArray.forEach(function (product) {\n if (product.category) {\n let categories = product.category.split(\"/\");\n let item = {\n item_id: product.id,\n item_name: product.name,\n currency: productCurrency,\n discount: product.discount,\n index: product.position,\n item_brand: 'twinset milano',\n item_category: categories.length > 0 ? categories[0] : '',\n item_category2: categories.length > 1 ? categories[1] : '',\n item_category3: categories.length > 2 ? categories[2] : '',\n item_list_name: categoryPLP,\n item_variant: product.colorName,\n price: product.price,\n quantity: 1,\n item_availability: product.available,\n item_discount_tag: product.discount != 0 ? 'on_sale' : 'not_on_sale',\n available_size_percentage: product.available_size_percentage,\n item_size: '',\n item_url: product.url,\n item_img: product.imageUrl\n }\n items.push(item);\n }\n });\n\n function chunkArray(array, chunkSize) {\n const results = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n results.push(array.slice(i, i + chunkSize));\n }\n return results;\n }\n\n // Suddividi l'array in gruppi di massimo 15 elementi\n const chunks = chunkArray(items, 15);\n\n // Itera sui gruppi e inviali al dataLayer\n chunks.forEach(function(chunk) {\n var event = {\n event: 'view_item_list',\n ecommerce: {\n currency: currentCurrency,\n items: chunk\n }\n };\n dataLayer.push(event);\n });\n }\n }\n\n generateProductTrackingModel(element) {\n var product = {};\n var data = element.data();\n\n product.name = data.name;\n\n // TR-2126\n // product.id = element.parent().data('pid');\n product.id = element.data('pid');\n product.variantID = element.data('container');\n\n if(element.find('.price-wrapper').data('plist')){\n var fullPrice = element.find('.price-wrapper').data('plist');\n var salesPrice = element.find('.price-wrapper').data('pmin');\n }else{\n var fullPrice = element.find('.price-wrapper').data('pmin');\n var salesPrice = element.find('.price-wrapper').data('pmin');\n }\n\n\n product.price = fullPrice;\n product.discount = fullPrice - salesPrice;\n product.available = element.data('item_availability');\n product.available_size_percentage = Number(element.data('available_size_percentage'));\n product.brand = 'twinset milano';\n product.category = element.data('category');\n product.url= element.data('master_url');\n product.imageUrl= element.data('default_color_image');\n product.colorName = element.data('color_name')\n product.position = data.pos;\n if (!product.position) {\n product.position = element.parent().parent().index() + 1;\n }\n\n if (typeof catListingSearch !== 'undefined') {\n product.list = catListingSearch;\n }\n if (typeof pageTypeForJS !== 'undefined') {\n if (pageTypeForJS == 'home') {\n product.list = 'homepage';\n }\n if (pageTypeForJS == 'plp') {\n product.list = 'plp';\n }\n if (pageTypeForJS == 'pdp' && element.parents('.recommendations').length) {\n product.list = 'related_products';\n }\n if (pageTypeForJS == 'cart' && element.parents('.recommendations').length) {\n product.list = 'related_products_cart';\n }\n }\n if (!product.list && element.parents('.recommendations').length) {\n product.list = 'related_products';\n }\n\n return product;\n }\n\n generateProductTrackingModelWishlist(element) {\n var product = {};\n var data = element.data();\n\n let categories = element.data('category').split(\"/\");\n\n product.currency = element.data('currency');\n product.item_name = data.name;\n product.item_id = element.data('pid').split('_')[0];\n product.discount = Number(element.data('list_price')) - Number(element.data('price'));\n product.price = Number(element.data('list_price'));\n product.brand = 'twinset milano';\n product.item_category = categories.length > 0 ? categories[0] : '';\n product.item_category2 = categories.length > 1 ? categories[1] : '',\n product.item_category3 = categories.length > 2 ? categories[2] : '',\n product.item_variant = element.data('variant-color');\n product.item_size= element.data('variant-size');\n product.item_availability = element.data('item_availability');\n product.item_discount_tag = element.data('item_discount_tag');\n product.quantity = 1;\n product.item_variant_v2 = element.data('pid');\n product.available_size_percentage= Number(element.data('available_size_percentage'));\n product.item_img = element.data('default-color-image');\n product.item_url= element.data('master-url');\n\n if (typeof catListingSearch !== 'undefined') {\n product.item_list_name = catListingSearch;\n }\n if (typeof pageTypeForJS !== 'undefined') {\n if (pageTypeForJS == 'home') {\n product.item_list_name = 'homepage';\n }\n if (pageTypeForJS == 'wishlist') {\n product.item_list_name = 'wishlist';\n }\n if (pageTypeForJS == 'pdp' && element.parents('.recommendations').length) {\n product.item_list_name = 'related_products';\n }\n if (pageTypeForJS == 'cart' && element.parents('.recommendations').length) {\n product.item_list_name = 'related_products_cart';\n }\n }\n if (!product.item_list_name && element.parents('.recommendations').length) {\n product.item_list_name = 'related_products';\n }\n\n return product;\n }\n\n myaccount() {\n $('.my-account-side-nav a.link').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'my_account',\n event_action: $(this).html() // TODO: missing id, using innerHTML\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n }\n\n wishlist() {\n var _this = this;\n $('button.add-to-wishlist-modal, button.add-to-wish-list').on('click', function (e) {\n var variantID = $('.wishlist-list-size li.selected').attr('data-id');\n\n var item_list_name = getPageType($('.js-page').data('action'), this);\n trackForWish(\n $(e.target).closest('.modal').data('url'),\n $(e.target).hasClass('is-in-wishlist'),\n variantID,\n item_list_name);\n });\n\n $('a.add-to-wish-list').on('click', function (e) {\n var eventAction = 'product_page';\n var product;\n var selectedVariant;\n var variantID = $(this).attr('data-pid') ? $(this).attr('data-pid') : $('.container.product-detail').attr('data-pid');\n\n if ($('[data-action=\"Search-Show\"]').length > 0) {\n\n product = $(this).data('id');\n selectedVariant = $('.attribute .list-size .selected .value').text();\n } else if ($('[data-action=\"Cart-Show\"]').length > 0) {\n let arr_info_product = $('.card.product-info').attr('data-pid').split('_');\n product = arr_info_product[0] + '_' + arr_info_product[1];\n selectedVariant = $('.line-item-attributes.item-list-size').attr('data-label');\n } else {\n let arr_info_product = variantID.split('_');\n product = arr_info_product[0] + '_' + arr_info_product[1];\n selectedVariant = $('.attribute .list-size .selected .value').text();\n }\n\n if (selectedVariant === '' || selectedVariant === null) {\n return;\n }\n\n var item_list_name = getPageType($('.js-page').data('action'), this);\n if($(this).parents().find('.quick-view-modal').css('display') === 'block'){\n item_list_name = 'quick_view';\n }\n\n trackForWish(\n $(e.target).closest('.add-to-wish-list').data('track-url'),\n $(this).hasClass('is-in-wishlist'),\n variantID,\n item_list_name);\n });\n\n $('.wishlist-row a.action-link.edit, .wishlist-row .side-image a').on('click', function (e) {\n var prodLayer = [];\n prodLayer.push(_this.generateProductTrackingModelWishlist($(e.target).closest('.wishlist-row')));\n prodLayer.position = $(e.target).closest('.product-row').attr('data-pos').split('.')[0];\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push({\n event: 'productClick',\n ecommerce: {\n click: {\n actionField: {\n list: catListingSearch\n },\n products: prodLayer\n }\n }\n });\n }\n });\n\n $('.wishlist-row a.remove-from-wishlist').on('click', function (e) {\n //This is the remove event from wishlist\n\n var product = _this.generateProductTrackingModelWishlist($(e.target).closest('.wishlist-row'));\n\n const dataLayerGA4 = {\n event: 'remove_from_wishlist',\n ecommerce: {\n currency: product.currency,\n value: product.price - product.discount,\n items: []\n }\n }\n dataLayerGA4.ecommerce.items.push(product);\n dataLayer.push(dataLayerGA4);\n });\n }\n\n newsletter() {\n $('.newsletterfooterform button').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'newsletter_subscription',\n event_action: 'start',\n event_label: 'footer'\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n }\n\n socialshare() {\n $('.social-share-icons a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'social',\n socialNetwork: $(this).children('svg').attr('class'),\n socialAction: 'share',\n socialTarget: window.location.href\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('.social-links a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'social',\n socialNetwork: $(this).attr('title').toLowerCase(),\n socialAction: 'click'\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n }\n\n changecountry() {\n $('.select-country-content a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'default_homepage',\n event_action: 'select_country_lang',\n event_label: $(this).data('locale')\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('.select-lang-modal a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'default_homepage',\n event_action: 'select_country_lang',\n event_label: $(this).data('locale')\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n }\n\n homepage() {\n var promotionsAsset = [];\n var lookArray = [];\n var position = 0;\n var gridImageAndButton = $('.widget, .widget-1-col-video').not('.widget-3-col-img-shopbylook').find('[data-resize], a.button.editorial, a.js-data-layer-link').add($('.widget-customer-care').find('a.button.editorial'));\n var componentElements = document.getElementsByClassName('experience-component');\n\n //OLD METHOD TO PUSH IN DATALAYER ID AND NAME OF HOMEPAGE ELEMENT\n\n if (componentElements.length == 0) {\n $.each(gridImageAndButton, (itemIndex) => {\n promotionsAsset.push({\n id: $(gridImageAndButton[itemIndex]).closest('[data-asset]').data('asset'),\n name: $(gridImageAndButton[itemIndex]).closest('.widget').find('h2').text() || $(gridImageAndButton[itemIndex]).closest('.box').find('h5').text(),\n creative: '',\n position: itemIndex\n });\n });\n }\n //NEW METHOD TO PUSH IN DATALAYER ID AND NAME OF PAGE DESIGNER COMPONENT\n if (componentElements) {\n\n $.each(componentElements, (i) => {\n var componentID = $(componentElements[i]).contents('[data-id]').attr('data-id');\n var componentName = $(componentElements[i]).contents('[data-title]').attr('data-title');\n\n if (componentName === \"undefined\") {\n componentName = $(componentElements[i]).contents('[data-asset]').attr('data-asset');\n }\n\n promotionsAsset.push({\n id: componentID,\n name: componentName,\n creative: '',\n position: i\n })\n });\n }\n\n\n gridImageAndButton.on('click', (e) => {\n if ($(e.currentTarget).closest('.widget-3-col-img-shopbylook').length == 0) {\n $.each(gridImageAndButton, (itemIndex) => {\n if ($(gridImageAndButton[itemIndex])[0].dataset.resize == $(e.currentTarget)[0].dataset.resize && $(gridImageAndButton[itemIndex])[0].href == $(e.currentTarget)[0].href) {\n position = itemIndex;\n }\n });\n\n var dataLayerObject = {\n event: 'promotionClick',\n ecommerce: {\n promoClick: {\n promotions: [{\n id: $(e.currentTarget).closest('[data-asset]').data('asset') || $(e.currentTarget).closest('[data-id]').attr('data-id'),\n name: $(e.currentTarget).closest('[data-title]').attr('data-title') || $(e.currentTarget).closest('.widget').find('h2').text() || $(gridImageAndButton[position]).closest('.box').find('h5').text(),\n creative: '',\n position: position\n }]\n }\n }\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n }\n });\n\n var widgetLook = $('.widget-3-col-img-shopbylook');\n // product look click\n $(widgetLook).on('click', '.owl-item a', function (e) {\n var $self = $(e.currentTarget);\n var lookName = $self.closest('.owl-item').find('h6')[0].innerText;\n var itemPosition = 0;\n var lookId = lookName;\n if ($self[0].href != '' && $self[0].href != 'undefined') {\n var hrefSplit = $self[0].href.split('/');\n var lookIdSplit = hrefSplit[hrefSplit.length - 1].split('-');\n var itemList = $('.widget-3-col-img-shopbylook').find('.owl-item a.button.editorial');\n lookId = lookIdSplit[lookIdSplit.length - 1].replace('.html', '');\n $.each(itemList, (itemIndex) => {\n if ($(itemList[itemIndex])[0].href == $self[0].href) {\n itemPosition = itemIndex;\n }\n });\n }\n if (itemPosition == 9) {\n itemPosition = 1;\n } else if (itemPosition == 10) {\n itemPosition = 2;\n } else if (itemPosition = 11) {\n itemPosition = 3;\n }\n var dataLayerObject = {\n event: 'shop_by_look_click',\n ecommerce: {\n click: {\n actionField: {\n list: 'shop_by_look_home_page'\n },\n products: [{\n name: 'look|' + lookName,\n id: lookId,\n // 'price': '$$$total_price$$$',\n brand: 'twinset milano',\n category: '',\n // 'list': 'shop_by_look_home_page',\n position: itemPosition\n }]\n }\n }\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n // product look impressions\n var widgetLookElements = $(widgetLook).find('.slide');\n $.each(widgetLookElements, (indexEl) => {\n var $self = $(widgetLookElements[indexEl]);\n var lookName = $($self).find('h6')[0].innerText;\n var aElem = $($self).find('a.button.editorial');\n var lookId = lookName;\n if (aElem[0].href != '' && aElem[0].href != 'undefined') {\n var hrefSplit = aElem[0].href.split('/');\n var lookIdSplit = hrefSplit[hrefSplit.length - 1].split('-');\n lookId = lookIdSplit[lookIdSplit.length - 1].replace('.html', '');\n }\n lookArray.push({\n name: 'look|' + lookName,\n id: lookId,\n // 'price': $$$total_price$$$,\n brand: 'twinset milano',\n category: '',\n list: 'shop_by_look_home_page',\n position: (indexEl + 1)\n });\n });\n\n if (typeof dataLayer !== 'undefined' && lookArray.length > 0) {\n dataLayer.push({\n event: 'shop_by_look_impression',\n ecommerce: {\n impressions: lookArray\n }\n });\n }\n\n if (typeof dataLayer !== 'undefined' && promotionsAsset.length > 0) {\n dataLayer.push({\n event: 'promotionImpression',\n ecommerce: {\n promoView: {\n promotions: promotionsAsset\n }\n }\n });\n }\n }\n\n plp() {\n var _this = this;\n $('div.main-menu a.nav-link').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'menu',\n event_action: e.target.id,\n event_label: 'only_first_level'\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('.navbar h6 a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'menu',\n event_action: $(e.target).parents('li.dropdown').children('a').attr('id'),\n event_label: e.target.id\n\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('.menuitem ul a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'menu',\n event_action: $(e.target).parents('li.dropdown').children('a').attr('id'),\n event_label: e.target.id\n\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n $(document).on('click', '.product-tile a', function (e) {\n\n var id = $(e.target).closest('.product-tile').attr('data-pid');\n var listingProduct = listingProductsJson[$(e.target).closest('.product-tile').attr('data-pid')];\n if(!listingProduct){\n var productTile = $(e.target).closest('.product-tile');\n var impression = _this.generateProductTrackingModel(productTile);\n if ((listingProductsArrayForHomePage.findIndex(item => item.id === impression.id) == '-1')) {\n listingProductsArrayForHomePage.push(impression);\n listingProductsJson[productTile.attr('data-pid')] = impression;\n }\n\n listingProduct = listingProductsJson[$(e.target).closest('.product-tile').attr('data-pid')];\n }\n var productJson = _this.asyncProductsArray ? _this.asyncProductsArray.find(prod => prod.id === id) : listingProduct;\n\n if(!productJson && listingProduct)\n productJson = listingProduct;\n\n if (productJson) {\n\n let list;\n if (typeof catListingSearch !== 'undefined') {\n list = catListingSearch;\n }\n\n if (pageTypeForJS === 'cart') {\n list = 'related_products_cart';\n }\n // triggered both here and enhancedseo.js - disabled here if list is not set due to duplicate tracking TR-1476\n // if (typeof dataLayer !== 'undefined' && list) {\n if (typeof dataLayer !== 'undefined') {\n\n let categories = productJson.category ? productJson.category.split(\"/\") : [];\n let colorName = $(e.currentTarget).data('display-value') ? $(e.currentTarget).data('display-value') : productJson.colorName;\n\n if ($(this).hasClass('quickview')) {\n dataLayer.push({\n event: 'view_item',\n where: 'quick_view',\n ecommerce: {\n currency: currentCurrency,\n items: [\n {\n item_id: productJson.id,\n item_name: productJson.name,\n currency: currentCurrency,\n discount: productJson.discount,\n item_brand: productJson.brand,\n item_category: categories.length > 0 ? categories[0] : '',\n item_category2: categories.length > 1 ? categories[1] : '',\n item_category3: categories.length > 2 ? categories[2] : '',\n item_list_name: productJson.list,\n item_variant: colorName,\n price: productJson.price,\n quantity: 1,\n item_availability: productJson.available,\n item_discount_tag: productJson.discount !== 0 ? 'on_sale' : 'not_on_sale',\n available_size_percentage: productJson.available_size_percentage,\n item_size: '',\n item_variant_v2: productJson.variantID,\n item_url: productJson.url,\n item_img: productJson.imageUrl\n }\n ]\n }\n });\n }else{\n dataLayer.push({\n event: 'select_item',\n ecommerce: {\n currency: currentCurrency,\n items: [\n {\n item_id: productJson.id,\n item_name: productJson.name,\n currency: currentCurrency,\n discount: productJson.discount,\n index: productJson.position,\n item_brand: productJson.brand,\n item_category: categories.length > 0 ? categories[0] : '',\n item_category2: categories.length > 1 ? categories[1] : '',\n item_category3: categories.length > 2 ? categories[2] : '',\n item_list_name: productJson.list,\n item_variant: colorName,\n price: productJson.price,\n quantity: 1,\n item_availability: productJson.available,\n item_discount_tag: productJson.discount !== 0 ? 'on_sale' : 'not_on_sale',\n available_size_percentage: productJson.available_size_percentage,\n item_size: '',\n item_url: productJson.url,\n item_img: productJson.imageUrl\n }\n ]\n }\n });\n }\n\n\n }\n }\n });\n }\n\n breadcrumbs() {\n $('.breadcrumbs-nav a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'breadcrumbs',\n event_action: $(this).data('event-action'),\n event_label: $(this).data('event-label')\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n }\n\n filters() {\n $('div.refinements').on('refinements:update', function (e, data) {\n var clickedFilter = $(data.clickedFilter) || null;\n var selectedSortOption = $('.plp-sort-order .current').length > 0 ?\n $('.plp-sort-order .current').data('id') : '-';\n\n\n if(clickedFilter && $('span.selected').length > 0){\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'filters',\n event_action: 'apply',\n attribute_group: clickedFilter.data('id'),\n attribute_value: clickedFilter.find('span').text().trim(),\n filter_sort: selectedSortOption\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n } else if ($('span.selected').toArray().map(filter => filter.innerText).join('/')) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'filters',\n event_action: 'apply',\n event_label: $('span.selected').toArray().map(filter => filter.innerText).join('/')\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n }\n });\n\n $('.plp-header-bottom-rocker a.reset').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'filters',\n event_action: 'reset'\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('.plp-sort-order a').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'filters',\n event_action: 'sort_by',\n attribute_group: '-',\n attribute_value: '-',\n filter_sort: this.parentNode.dataset.id\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('.plp-header-content-top button.close').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'filters',\n event_action: 'close'\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('button.filter-results').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'filters',\n event_action: 'open'\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n $('.select-categories .sub-categories a.sub-category-link').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'fascia_categorie',\n event_action: (($(this).data('level') == '3') ? 'third_level' : 'second_level'),\n event_label: $(this).html()\n };\n\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n }\n\n checkout() {\n $('div#store-picker button').on('click', function (e) {\n var dataLayerObject = {\n event: 'asyncAction',\n gaHitType: 'event',\n event_category: 'find_a_store',\n event_action: $('#store-picker-autocomplete').val().split(', ').slice(-1)[0],\n event_label: `${$('#store-picker-autocomplete').val().split(', ')[0]}|${$('#store-picker-range').val()}km`\n };\n\n console.log(JSON.stringify(dataLayerObject));\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(dataLayerObject);\n }\n });\n\n // code moved and modified in checkout.js\n\n // $('.single-shipping .tab-nav a').on('click', function (e) {\n // var dataLayerObject = {\n // 'event': 'checkoutOption',\n // 'ecommerce': {\n // 'checkout_option': {\n // 'actionField': {\n // 'step': 1,\n // 'option': $(e.target).parents('li').data('target')\n // }\n // }\n // }\n // };\n\n // actionField.option = $(e.target).parents('li').data('target');\n // console.log(JSON.stringify(dataLayerObject));\n // if(typeof dataLayer !== 'undefined'){\n // dataLayer.push(dataLayerObject);\n // }\n // });\n\n // $('.payment-options input[type=\"radio\"]').on('click', function (e) {\n // var dataLayerObject = {\n // 'event': 'checkoutOption',\n // 'ecommerce': {\n // 'checkout_option': {\n // 'actionField': {\n // 'step': 2,\n // 'option': this.id.toLowerCase()\n // }\n // }\n // }\n // };\n\n // actionField.option = this.id.toLowerCase();\n // console.log(JSON.stringify(dataLayerObject));\n // if(typeof dataLayer !== 'undefined'){\n // dataLayer.push(dataLayerObject);\n // }\n // });\n }\n\n passwordInteractionEvent(actionName){\n dataLayer.push({\n event: \"GAevent\",\n eventID: \"002\",\n eventCategory: \"user_interaction\",\n eventAction: \"password-interaction\",\n eventLabel: actionName,\n eventElement01: \"-\",\n eventElement02: \"-\",\n eventElement03: \"-\"\n })\n }\n}\n\nfunction getPageType(pageAction, element){\n var item_list_name = ''\n if (pageAction === 'Home-Show') {\n item_list_name = 'homepage';\n } else if (pageAction === 'Search-Show') {\n item_list_name = $('.js-page').data('querystring').includes('cgid') ? 'category_listing' : 'search_results';\n }else if (pageAction === 'Product-Show') {\n item_list_name = $(element).parents('.recommendations').length > 0 ? 'related_products' : 'pdp';\n }else if (pageAction === 'Cart-Show') {\n item_list_name = $(element).parents('.recommendations').length > 0 ? 'related_products' : 'cart';\n }\n\n return item_list_name;\n}\n\nfunction trackForWish(urlProductVariant, isInWishlist, variantID, item_list_name) {\n\n $.ajax({\n url: urlProductVariant,\n type: 'get',\n context: this,\n dataType: 'json',\n success: (data) => {\n let discount = '0.00';\n let originalPrice = data.product.price.list;\n let finalPrice = data.product.price.sales;\n\n if(data.product.price.type === 'range'){\n finalPrice = data.product.price.min.sales;\n originalPrice = data.product.price.min.list ? data.product.price.min.list : finalPrice;\n }\n\n if (originalPrice)\n discount = ((parseFloat(originalPrice.decimalPrice) - parseFloat(finalPrice.decimalPrice)).toFixed(2)).toString();\n\n let currency = finalPrice.currency;\n let categories = data.product.categoryPath.split(\"/\");\n let variant = '';\n let pidSplit = data.queryString.split('_');\n if (pidSplit.length > 1) {\n variant = pidSplit[1];\n }\n\n var colorID = variantID.split('_')[1];\n var size = variantID.split('_')[2];\n\n var colorName = colorID;\n data.product.variationAttributes[0].values.filter((obj) => {\n if(obj.id === colorID){\n colorName = obj.displayValue;\n }\n });\n\n const dataLayerGA4 = {\n event: isInWishlist ? 'remove_from_wishlist' : 'add_to_wishlist',\n ecommerce: {\n currency: currency,\n where: item_list_name,\n value: Number(finalPrice.decimalPrice),\n items: [\n {\n item_id: data.product.id,\n item_name: data.product.productName,\n currency: currency,\n discount: Number(discount),\n item_brand: 'twinset milano',\n item_category: categories.length > 0 ? categories[0] : '',\n item_category2: categories.length > 1 ? categories[1] : '',\n item_category3: categories.length > 2 ? categories[2] : '',\n item_list_name: item_list_name,\n item_variant: colorName,\n price: originalPrice ? Number(originalPrice.decimalPrice) : Number(finalPrice.decimalPrice),\n quantity: data.product.selectedQuantity,\n item_availability: data.product.availability.inStock ? 'in_stock' : 'out_of_stock',\n item_discount_tag: discount !== '0.00' ? 'on_sale' : 'not_on_sale',\n available_size_percentage: Number(data.product.available_size_percentage),\n item_size: size,\n item_variant_v2: variantID,\n item_url: data.product.masterUrl,\n item_img: data.product.images.large[0].url\n }\n ]\n }\n }\n dataLayer.push(dataLayerGA4);\n },\n error: (err) => {\n }\n });\n}\n\nconst Seo = new SEO();\nexport default Seo;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/components/seo.js","function showAlertModal(data) {\r\n const modal = $('.modal-background')\r\n modal.css('display', 'flex').html(data.message);\r\n modal.find('.js-continue-btn').click((e) => {\r\n e.preventDefault();\r\n $('.prices-add-to-cart-actions button').first().trigger('click', {destroyBasket: true});\r\n modal.empty().hide();\r\n });\r\n modal.find('.js-not-continue-btn').click((e) => {\r\n e.preventDefault();\r\n modal.hide();\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n showAlertModal: showAlertModal\r\n};\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/product/giftCardHelper.js","class cookieUtil {\n\n getCookie(cookieName) {\n var name = cookieName + '=';\n var decodedCookie = decodeURIComponent(document.cookie);\n var cookieArray = decodedCookie.split(';');\n\n for (var i = 0; i < cookieArray.length; i++) {\n var cookieItem = cookieArray[i];\n\n while (cookieItem.charAt(0) === ' ') {\n cookieItem = cookieItem.substring(1);\n }\n\n if (cookieItem.indexOf(name) === 0) {\n return cookieItem.substring(name.length, cookieItem.length);\n }\n }\n\n return '';\n }\n\n setCookie(cookieName, value, days, path) {\n var expires = '';\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toUTCString();\n }\n if (path) {\n document.cookie = cookieName + '=' + (value || '') + expires + '; path=' + path;\n } else {\n document.cookie = cookieName + '=' + (value || '') + expires + '; path=/';\n }\n }\n\n deleteCookie(name) {\n document.cookie = name + '=; Path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n }\n\n};\n\nconst CookieUtil = new cookieUtil()\nexport default CookieUtil\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/util/cookieUtil.js","export const wishlistModal = () => {\n const modalInstances = {};\n const breakpoint = Foundation.MediaQuery.current;\n // generate wishlist modals\n $('.wishlist-modal:not(.initialized)').each((i, el) => {\n const $modal = $(el);\n const id = $modal.data('id');\n $modal.addClass('initialized');\n if (!Object.prototype.hasOwnProperty.call(modalInstances, id)) {\n modalInstances[id] = new Foundation.Reveal($modal);\n }\n\n // const $modalError = $modal.find('.wishlist-modal-error-wrapper');\n\n let pid;\n $modal.find('.wishlist-list-size li').click((e) => {\n $(e.currentTarget).siblings().removeClass('selected');\n $(e.currentTarget).addClass('selected');\n pid = $(e.currentTarget).data('id');\n $modal.find('.add-to-wishlist-modal').attr('disabled', false);\n });\n\n $modal.find('.add-to-wishlist-modal').click((e) => {\n const url = $(e.currentTarget).data('url');\n const modalID = $(e.currentTarget).data('id');\n if (!pid) return;\n\n $.ajax({\n url: url,\n method: 'POST',\n data: {\n pid\n },\n success: (data) => {\n if (breakpoint !== 'large' && breakpoint !== 'xlarge' && breakpoint !== 'xxlarge') {\n if (!$('.add-to-wl-messages').hasClass('show')) {\n var link = $('.add-to-wl-messages').attr('data-href');\n $('.add-to-wl-messages').append(\n `
\n \n ${data.msg}\n \n
`\n ).addClass('show');\n\n setTimeout(function () {\n $('.add-to-wl-messages').removeClass('show');\n $('.add-to-wl-alert').remove();\n $('.header-toolbar .wishlist-icon, .mobile-pane-header .wishlist-render').addClass('has-wishlist-list');\n $modal.find('.add-to-wishlist-modal').attr('disabled', true);\n $modal.find('.wishlist-list-size li').removeClass('selected');\n modalInstances[modalID].close();\n }, 1500);\n }\n } else {\n $('.header-toolbar .wishlist-icon, .mobile-pane-header .wishlist-render').addClass('has-wishlist-list');\n $modal.find('.add-to-wishlist-modal').attr('disabled', true);\n $modal.find('.wishlist-list-size li').removeClass('selected');\n modalInstances[modalID].close();\n // $(`#wishlist-modal-${modalID}`).foundation('close');\n }\n\n $('.wishlist-modal-open[data-id=' + modalID + ']').addClass('is-in-wishlist');\n\n let event_action = '';\n let action = $('.js-page').data('action');\n if (action === 'Home-Show') {\n event_action = 'homepage';\n } else if (action === 'Search-Show') {\n event_action = 'category_page';\n } else {\n event_action = (action || action.length >0 ) ? action.split('-')[0].toLowerCase() + '_page' : 'undefined_action';\n }\n\n // Trigger Goal Event: wishlist_created\n if (data.created) {\n dataLayer.push({\n gaHitType: 'event',\n event: 'goal_event',\n event_category: 'wishlist_created',\n event_action: event_action,\n event_label: pid.replace(/_([^_]*)$/, '|$1', '|$1')\n });\n }\n },\n error: (error) => {\n console.log('error in process request', error);\n // Callout.error(null, error.)\n }\n });\n });\n });\n\n // open modals\n $('.wishlist-modal-open:not(.initialized)').each((i, el) => {\n const $openWishlistLink = $(el);\n $openWishlistLink.addClass('initialized');\n\n $openWishlistLink.click((e) => {\n const modalID = $(e.currentTarget).data('id');\n if (modalInstances[modalID] !== 'undefined') {\n modalInstances[modalID].open();\n }\n });\n });\n};\n\nclass wishlistAdd {\n run() {\n this.addToWishlist();\n $(window).off('wishlist:initialize').on('wishlist:initialize', (e, data) => {\n this.addToWishlist();\n wishlistModal();\n });\n }\n\n addToWishlist() {\n $(document).on('click', '.add-to-wish-list', (e) => {\n e.preventDefault();\n\n const self = $(e.currentTarget);\n const url = (!self.hasClass('is-in-wishlist')) ? (self.attr('href') || self.attr('data-action-add')) : self.attr('data-remove-url');\n const headerWishlist = $('.header-toolbar .wishlist-icon');\n const headerWishlistMobile = $('.mobile-pane-header .wishlist-render');\n const breakpoint = Foundation.MediaQuery.current;\n\n let pid = self.closest('.product-detail').attr('data-pid') || self.attr('data-pid');\n let optionId;\n let optionVal;\n\n optionId = optionId || null;\n optionVal = optionVal || null;\n\n const addToWishlistCall = (u, id, optId, optVal) => {\n self.attr('disabled', true);\n\n $.ajax({\n url: u,\n type: 'post',\n dataType: 'json',\n data: {\n pid: id,\n optionId: optId,\n optionVal: optVal\n },\n success: (data) => {\n self.attr('disabled', false).addClass('is-in-wishlist');\n\n if (!headerWishlist.hasClass('has-wishlist-list')) {\n headerWishlist.addClass('has-wishlist-list');\n }\n\n if (!headerWishlistMobile.hasClass('has-wishlist-list')) {\n headerWishlistMobile.addClass('has-wishlist-list');\n }\n\n if (self.parent('.edit-add-to-wishlist').length) {\n self.closest('.card').find('.add-to-wish-list').each((index, el) => {\n el = $(el);\n const label = el.attr('data-remove-label');\n el.addClass('is-in-wishlist').children('.label').text(label).attr('title', label);\n });\n }\n\n if (self.parents('#size-modal-wishlist').length) {\n $('#size-modal-wishlist .close-modal').trigger('click');\n $('.product-detail .add-to-wish-list').addClass('is-in-wishlist');\n }\n if (breakpoint !== 'large' && breakpoint !== 'xlarge' && breakpoint !== 'xxlarge') {\n if (!$('.add-to-wl-messages').hasClass('show')) {\n var link = $('.add-to-wl-messages').attr('data-href');\n $('.add-to-wl-messages').append(\n `
\n \n ${data.msg}\n \n
`\n ).addClass('show');\n\n setTimeout(function () {\n $('.add-to-wl-messages').removeClass('show');\n $('.add-to-wl-alert').remove();\n }, 3500);\n }\n }\n\n let event_action = '';\n let action = $('.js-page').data('action');\n if (action === 'Home-Show') {\n event_action = 'homepage';\n } else if (action === 'Search-Show') {\n event_action = 'category_page';\n } else {\n event_action = (action || action.length >0 ) ? action.split('-')[0].toLowerCase() + '_page' : 'undefined_action';\n }\n // Trigger Goal Event: wishlist_created\n if (data.created) {\n dataLayer.push({\n gaHitType: 'event',\n event: 'goal_event',\n event_category: 'wishlist_created',\n event_action: event_action,\n event_label: pid.replace(/_([^_]*)$/, '|$1', '|$1')\n });\n }\n },\n error: (err) => {\n console.log(err);\n }\n });\n };\n\n const removeWishlist = (u) => {\n $.ajax({\n url: u,\n type: 'get',\n dataType: 'json',\n data: {},\n success: (data) => {\n self.attr('disabled', false).removeClass('is-in-wishlist');\n\n if (data.list.length === 1) {\n headerWishlist.removeClass('has-wishlist-list');\n headerWishlistMobile.removeClass('has-wishlist-list');\n }\n\n if (self.parent('.edit-add-to-wishlist').length) {\n self.closest('.card').find('.add-to-wish-list').each((index, el) => {\n el = $(el);\n const label = el.attr('data-add-label');\n el.removeClass('is-in-wishlist').children('.label').text(label).attr('title', label);\n });\n }\n },\n error: () => {\n document.location.reload();\n }\n });\n };\n\n if (!url || !pid || self.attr('disabled') || self.hasClass('disabled')) {\n return;\n }\n\n if ($('.list-size').length) {\n if ($('.list-size > li.selected').length === 0) {\n if ($('.size-modal-wishlist-button').length) {\n $('.size-modal-wishlist-button').trigger('click');\n } else if ($('.list-size').next('.error-msg').length === 0) {\n const div = $('
');\n const errorMsg = $('.variation-attr').attr('data-error-msg');\n div.text(errorMsg).insertAfter('.quick-view-details .list-size');\n }\n } else if (!self.hasClass('is-in-wishlist')) {\n addToWishlistCall(url, pid, optionId, optionVal);\n } else {\n removeWishlist(url);\n }\n } else if (!self.hasClass('is-in-wishlist')) {\n addToWishlistCall(url, pid, optionId, optionVal);\n } else {\n removeWishlist(url);\n }\n });\n }\n}\n\nconst WishlistAdd = new wishlistAdd();\nexport default WishlistAdd;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/components/wishlist.js","class urlParams {\n /**\n * @function getAllUrlParams - get params from querystring\n * @param {string} queryString - querystring parameters\n * @returns {object} - object with all params of the querystring argument\n */\n getAllUrlParams(queryString) {\n // we'll store the parameters here\n var obj = {};\n\n // if query string exists\n if (queryString) {\n // stuff after # is not part of query string, so get rid of it\n queryString = queryString.split('#')[0];\n\n // split our query string into its component parts\n var arr = queryString.split('&');\n\n for (var i = 0; i < arr.length; i++) {\n // separate the keys and the values\n var a = arr[i].split('=');\n\n // in case params look like: list[]=thing1&list[]=thing2\n var paramNum = undefined;\n var paramName = a[0].replace(/\\[\\d*]/, function (v) {\n paramNum = v.slice(1, -1);\n return '';\n });\n\n // set parameter value (use 'true' if empty)\n var paramValue = typeof (a[1]) === 'undefined' ? true : a[1];\n\n // (optional) keep case consistent\n paramName = paramName;\n paramValue = paramValue;\n\n // if parameter name already exists\n if (obj[paramName]) {\n // convert value to array (if still string)\n if (typeof obj[paramName] === 'string') {\n obj[paramName] = [obj[paramName]];\n }\n // if no array index number specified...\n if (typeof paramNum === 'undefined') {\n // put the value on the end of the array\n obj[paramName].push(paramValue);\n }\n // if array index number specified...\n else {\n // put the value at that index number\n obj[paramName][paramNum] = paramValue;\n }\n }\n // if param name doesn't exist yet, set it\n else {\n obj[paramName] = paramValue;\n }\n }\n }\n\n return obj;\n }\n\n /**\n * @function removeParamFromUrl - remove param from url by key\n * @param {string} key - param key\n * @param {string} url - url with params\n * @returns {string} - url without param\n */\n removeParamFromUrl(key, url) {\n var rtn = url.split('?')[0];\n var param;\n var paramsarr = [];\n var queryString = (url.indexOf('?') !== -1) ? url.split('?')[1] : '';\n if (queryString !== '') {\n paramsarr = queryString.split('&');\n for (var i = paramsarr.length - 1; i >= 0; i -= 1) {\n param = paramsarr[i].split('=')[0];\n if (param === key) {\n paramsarr.splice(i, 1);\n }\n }\n rtn = rtn + '?' + paramsarr.join('&');\n }\n return rtn;\n }\n\n /**\n * @function removeParamFromUrl - remove param from url by key\n * @param {string} key - param key\n * @param {string} url - url with params\n * @returns {string} - url without param\n */\n replaceParamFromUrl(key, url, newparam) {\n if (!url) {\n return;\n }\n var rtn = url.split('?')[0];\n let found = false;\n var param;\n var paramsarr = [];\n var queryString = (url.indexOf('?') !== -1) ? url.split('?')[1] : '';\n if (queryString !== '') {\n paramsarr = queryString.split('&');\n for (var i = paramsarr.length - 1; i >= 0; i -= 1) {\n param = paramsarr[i].split('=')[0];\n if (param === key) {\n paramsarr[i] = param + '=' + newparam;\n found = true;\n }\n }\n if (!found) {\n paramsarr.push(key + '=' + newparam);\n }\n\n rtn = rtn + '?' + paramsarr.join('&');\n }\n return rtn;\n }\n\n addParam(url, param) {\n return (url || '').indexOf('?') !== -1 ? url + '&' + param : url + '?' + param;\n }\n}\n\nconst UrlParams = new urlParams();\nexport default UrlParams;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/util/urlParams.js","class RecentlyViewed {\n run() {\n this.initialize();\n\n $(window).off('recentlyviewed:initialize').on('recentlyviewed:initialize', (e, data) => {\n this.initialize();\n });\n }\n\n\n initialize() {\n $('.widget-recently-viewed:not(.initialized)').each((i, el) => {\n const $widget = $(el);\n $widget.addClass('initialized');\n\n const count = Math.round($widget.find('.slider').children().length / 4);\n let current = 0;\n const slider = $widget.find('.slider').owlCarousel({\n loop: false,\n nav: false,\n responsive: {\n 0: {\n items: 2,\n margin: 5\n },\n 600: {\n items: 4,\n margin: 16\n },\n 800: {\n items: 4,\n margin: 40\n }\n }\n });\n slider.on('changed.owl.carousel', (e) => {\n current = e.page.index;\n $widget.find('.widget-current').text(current + 1);\n });\n var move = () => {\n $widget.find('.widget-current').text(current + 1);\n slider.trigger('to.owl.carousel', [current]);\n };\n $widget.find('.widget-total').text(count);\n $widget.find('.widget-next').click(() => {\n if (current + 1 >= count) { return; }\n current++;\n move();\n });\n $widget.find('.widget-prev').click(() => {\n if (current - 1 < 0) { return; }\n current--;\n move();\n });\n });\n }\n}\n\n\nconst recentlyViewed = new RecentlyViewed();\nexport default recentlyViewed;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/widgets/recentlyViewed.js","'use strict'\r\n\r\nimport {promiseAllScripts, getUnloadedScripts} from './helpers/scriptLoader'\r\n\r\n/**\r\n * Lazyloads owl scripts\r\n */\r\nexport function initOwlCarousel(callback){\r\n if('requestIdleCallback' in window){\r\n window.requestIdleCallback(function(){\r\n return promiseAllScripts(getUnloadedScripts('.js-async-owl'), callback);\r\n })\r\n }\r\n else {\r\n window.addEventListener('load', function(){\r\n return promiseAllScripts(getUnloadedScripts('.js-async-owl'), callback);\r\n })\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/performance/owl.js","'use strict'\r\n\r\nfunction loadScript(src) {\r\n return new Promise(function(resolve, reject) {\r\n let element;\r\n\r\n if (src.endsWith('.css')) {\r\n element = document.createElement('link');\r\n element.href = src;\r\n element.rel = 'stylesheet';\r\n } else if (src.endsWith('.js')) {\r\n element = document.createElement('script');\r\n element.src = src;\r\n element.async = true;\r\n } else {\r\n return reject(new Error('Unsupported resource type: ' + src));\r\n }\r\n\r\n element.onload = () => resolve(src);\r\n element.onerror = () => reject(new Error('Error while lazy loading resource: ' + src));\r\n\r\n document.head.appendChild(element);\r\n });\r\n}\r\n\r\n\r\n/**\r\n * Retrieves owl scripts data, excluding already loaded scripts\r\n * @param selector\r\n * @returns {string[]}\r\n */\r\nexport function getUnloadedScripts(selector){\r\n const currentScripts = Array.from(document.querySelectorAll('script')).map(script => script.src);\r\n const scriptsData = document.querySelector(selector);\r\n if(!scriptsData)\r\n return [];\r\n\r\n const owlScripts = [scriptsData.dataset.urlJs, scriptsData.dataset.urlCss].filter(function(url){\r\n return (url && !currentScripts.includes(url));\r\n });\r\n\r\n scriptsData.remove();\r\n return owlScripts;\r\n}\r\n\r\n\r\n/**\r\n * Function that loads an array of scripts.\r\n * Useful for lazyloading purposes\r\n * @param scriptUrls\r\n * @returns {Promise}\r\n */\r\nexport function promiseAllScripts(scriptUrls, callback){\r\n //STEP 1 -- Use a promise all to load every script, then initialize them as usual\r\n return Promise.all(scriptUrls.map(loadScript))\r\n .then(() => {\r\n if (typeof callback === 'function')\r\n callback();\r\n })\r\n .catch(error => {\r\n console.error('Error while loading scripts. Error: ', error.message);\r\n });\r\n}\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/performance/helpers/scriptLoader.js","'use strict'\r\n\r\nimport {promiseAllScripts, getUnloadedScripts} from './helpers/scriptLoader'\r\n\r\n/**\r\n * Lazyloads wishlist scripts\r\n * @param [callback]\r\n */\r\nexport function initWishlist(callback){\r\n if('requestIdleCallback' in window){\r\n window.requestIdleCallback(function(){\r\n return promiseAllScripts(getUnloadedScripts('.js-async-wishlist'), callback);\r\n })\r\n }\r\n else {\r\n window.addEventListener('load', function(){\r\n return promiseAllScripts(getUnloadedScripts('.js-async-wishlist'), callback);\r\n })\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/performance/wishlist.js"],"sourceRoot":""}