{"version":3,"sources":["webpack:///webpack/bootstrap 4271f45f0b996f874d81?2a70*******************","webpack:///./assets/scripts/pdp.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/components/wishlist.js?1371","webpack:///./assets/scripts/services/device.js"],"names":["detail","device","Product","EnhancedSeo","$","$nameGroup","$labels","label","response","newTitleColor","oldTitleColor","document","description","ogDescription","console","enable","allAvailable","allReady","pid","sizeElem","option","arr","Object","key","values","notifyMe","i","refreshSelectNotify","$elem","transition","$form","$sizeChart","e","url","type","dataType","success","data","modal","self","index","current","length","parseInt","next","control","prev","carousel","width","height","x","y","window","breakpoint","Foundation","render","changeImage","img","generateImages","firstImg","mouseenter","$sideImage","counter","mouseleave","masterProductId","selectedColorId","sizeId","productID","action","error","info","prdSetDetail","$self","setItem","setItemPrice","dataLayer","event","ecommerce","click","actionField","list","products","name","id","price","brand","category","position","variant","itemList","itemsImpression","element","elementPrice","itemIndex","impressions","observer","handleIntersection","entries","entry","table","root","rootMargin","threshold","target","ProductDetail","callout","title","message","closable","el","prepend","scroll","$callout","scrollTop","Callout","Carousel","slides","items","navText","carousels","breakpoints","small","medium","large","count","isScrollable","setting","margin","responsive","$el","getQuantitySelector","attr","$attrValue","$productContainer","attrValue","$swatchAnchor","$attr","attrsWithSwatches","attrs","processSwatchValues","processNonSwatchValues","processNonSwatchValuesMiniSet","availabilityValue","availabilityMessages","controlSizeModalProduct","product","resources","html","promotions","promotion","attributes","attributeGroup","attribute","isChoiceOfBonusProducts","isVaraint","isNewtest","isInWishlist","isOnSale","updateAttrs","$priceSelector","getPromotionsHtml","updateAvailability","$selectButton","getAttributesHtml","updateMiniAttrs","optionsHtml","selected","quantity","colorName","$secondaryCall","method","beforeSend","handleVariantResponse","updateQuantities","updateColorName","updateAddToCartEvent","updateLabel","replaceProductsetWidget","updateScalapayWidget","container","color","scalapayWidget","carouselImages","productContainerImages","owl","productModalImages","addToCartEvent","addToCartEventParse","JSON","datalayerEvent","dimension14","dimension15","dimension16","encodedDatalayerEvent","encodeURIComponent","elem","productAccordion","complete","Accordion","handleVariantMiniSetResponse","controlSizeModalProductSet","$html","body","footer","elemSelect","elemModalId","childProducts","$render","smartSpeed","slideTransition","editBonusProducts","oldColor","attributeSelect","replaceImages","replaceModalImages","replaceAccordion","isUserEvent","colorIndex","referencedSelect","attributeSelectMiniSet","options","div","errorMsg","addToCartUrl","getQuantitySelected","form","gaHitType","event_category","event_action","pageTypeForJS","location","AddToCartMsg","win","gridImages","scrollToSlider","edge","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","$selected","parsedHtml","cart","item","priceValue","Number","currency","Array","value","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","setTimeout","accordion","setARIA","Easing","def","swing","easeOutQuad","easeInOutCirc","Math","bonusUrl","htmlString","messageType","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","eventAction","eventLabel","shipping","payment","placeorder","analyticsP","listName","modalOpen","section","selectedSizeElem","selectedSize","selectedFamilyColorElem","selectedFamilyColor","analyticsObj","dataLayerGA4","Seo","pageAction","context","originalPrice","finalPrice","pidSplit","colorID","variantID","obj","SEO","productTiles","_this","listingProductsArrayForHomePage","currentElement","impression","listingProductsJson","asyncProductsArray","results","array","productCurrency","imageUrl","chunks","chunkArray","fullPrice","salesPrice","dataLayerObject","getPageType","trackForWish","selectedVariant","arr_info_product","prodLayer","catListingSearch","socialNetwork","socialAction","socialTarget","href","promotionsAsset","lookArray","gridImageAndButton","componentElements","creative","componentID","componentName","promoClick","widgetLook","lookName","itemPosition","hrefSplit","lookIdSplit","lookId","widgetLookElements","aElem","indexEl","promoView","listingProduct","productTile","productJson","prod","where","clickedFilter","selectedSortOption","attribute_group","attribute_value","filter_sort","filter","actionName","eventID","eventCategory","eventElement01","eventElement02","eventElement03","module","showAlertModal","wishlistModal","modalInstances","$modal","modalID","link","$openWishlistLink","wishlistAdd","headerWishlist","headerWishlistMobile","optionId","optionVal","addToWishlistCall","removeWishlist","WishlistAdd","userAgent","documentElement","currentClassNames","removeClass","addClass","walkOnChangeOrientationList","setOrientationCache","changeOrientationList","findMatch","previousDevice","television","find","screen","orientationEvent","handleOrientation"],"mappings":"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","file":"pdp.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 EnhancedSeo from './enhancedSeo';\nimport Product from './product';\nimport device from './services/device';\nimport { wishlistModal } from './components/wishlist';\n\nclass detail {\n constructor() {\n // eslint-disable-next-line no-unused-vars\n let dev = device; // non rimuovere, serve a non far auto-rimuovere l'import\n\n Product.colorValue();\n Product.colorAttribute();\n Product.selectAttribute();\n Product.selectMiniSetAttribute();\n Product.availability();\n Product.addToCart();\n Product.addToCartMiniSet();\n Product.gridImagesCarousel();\n Product.addToCartMobileSEO();\n\n this.defaultColor();\n this.updateAttribute();\n this.updateMiniSetAttribute();\n this.updateAddToCart();\n this.updateAddToCartMiniSet();\n this.updateProductLabels();\n // this.updateNotifyMe();\n this.sizeChart();\n this.visibilitySizeGuideModalElements();\n this.controlsZoom();\n this.zoom();\n this.panningZoom();\n // this.gridImagesCarousel();\n this.toggleShare();\n this.productSetImage();\n this.sizeGuide();\n this.notifyMe();\n this.setItemClick();\n EnhancedSeo.sizeGuideClick(['.size', '.product-detail', 'pid']);\n EnhancedSeo.breadcrumbsClick(['.header-product-breadcrumb a', 'data-category-id']);\n // EnhancedSeo.productSeoValorize();\n Product.colorAttributeNoClick($('.product-wrapper .swatch-color.selected')[0], true);\n wishlistModal();\n }\n\n updateProductLabels() {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n var $nameGroup = $('.product-name-group');\n var $labels = $('.product-tag-labels');\n var label = response.data.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 }\n\n defaultColor() {\n $(document).ready(function () {\n if ($('.product-wrapper .swatch-color.selectable').length !== 0) {\n if (!$('.product-wrapper .swatch-color.selected').length) {\n // $('.product-wrapper .swatch-color.selectable')[0].click();\n if (!$('.product-detail').hasClass('default-click-color')) {\n $('.product-detail').addClass('default-click-color');\n Product.colorAttributeNoClick($('.product-wrapper .swatch-color.selectable')[0]);\n }\n\n // set title with selected color familyColorSearch\n var newTitleColor = $($('.product-wrapper .swatch-color.selectable')[0]).data('familyColorSearch');\n var oldTitleColor = $('div[data-attr=\"color\"]').data('masterColor');\n try {\n document.title = document.title.replace(oldTitleColor, newTitleColor);\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(oldTitleColor, newTitleColor));\n $('meta[property=\"og:description\"]').attr('content', ogDescription.replace(oldTitleColor, newTitleColor));\n } catch (error) {\n console.error(error);\n }\n }\n }\n });\n }\n\n updateAttribute() {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.product-detail > .bundle-items').length) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else if ($('.product-set-detail').length) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n $('.product-detail:not(\".bundle-item\")').attr('data-pid', response.data.product.id);\n }\n });\n }\n\n updateMiniSetAttribute() {\n $('body').on('product:afterMiniAttributeSelect', function (e, response) {\n response.container.find('.set-item').attr('data-pid', response.data.product.id);\n });\n }\n\n updateAddToCart() {\n $('body').on('product:updateAddToCart', function (e, response) {\n $('.product-detail .prices-add-to-cart-actions').html(response.product.availability.html);\n $('#size-modal .prices-add-to-cart-actions').html(response.product.availability.html);\n if (response.product.oosProduct) {\n $('button.add-to-cart', response.$productContainer).addClass('hidden');\n $('.availability-msg.oos', response.$productContainer).removeClass('hidden');\n } else {\n $('button.add-to-cart', response.$productContainer).removeClass('hidden');\n $('.availability-msg.oos', response.$productContainer).addClass('hidden');\n }\n $('button.add-to-cart', response.$productContainer).attr('disabled', (!response.product.readyToOrder || !response.product.available)).attr('data-pid', response.product.id);\n\n var enable = $('.product-availability').toArray().every(function (item) { return $(item).data('available') && $(item).data('ready-to-order'); });\n $('button.add-to-cart-global').attr('disabled', !enable);\n });\n }\n\n updateAddToCartMiniSet() {\n $('body').on('product:updateAddToCartMiniSet', function (e, response) {\n $('button.add-to-cart-set', response.$productContainer).attr('disabled', (!response.product.readyToOrder || !response.product.available)).attr('data-pid', response.product.id).removeClass('disabled');\n });\n }\n\n updateAvailability() {\n $('body').on('product:updateAvailability', function (e, response) {\n $('div.availability', response.$productContainer).data('ready-to-order', response.product.readyToOrder).data('available', response.product.available);\n\n $('.availability-msg', response.$productContainer).empty().html(response.message);\n\n if ($('.global-availability').length) {\n var allAvailable = $('.product-availability').toArray().every(function (item) {\n return $(item).data('available');\n });\n\n var allReady = $('.product-availability').toArray().every(function (item) {\n return $(item).data('ready-to-order');\n });\n\n $('.global-availability').data('ready-to-order', allReady).data('available', allAvailable);\n\n $('.global-availability .availability-msg').empty().html(allReady ? response.message : response.resources.info_selectforstock);\n }\n });\n }\n\n updateNotifyMe() {\n const pid = $('.product-detail').attr('data-pid');\n\n $('body').on('product:statusUpdate', function (e, response) {\n const sizeElem = $('.size-unavailable, [data-notify-me]');\n let notifyMe = false;\n let option = [];\n\n for (let item in response.variationAttributes) {\n if (response.variationAttributes[item].id === 'size') {\n let arr = response.variationAttributes[item].values;\n for (let i = 0; i < arr.length; i++) {\n Object.keys(arr[i]).forEach(function (key) {\n if (key === 'selectable') {\n let values = arr[i][key];\n if (!values) {\n option[i] = $('');\n notifyMe = true;\n }\n }\n });\n }\n }\n }\n\n let refreshSelectNotify = function ($elem, $form) {\n $elem.find('option:not([value=\"\"])').remove();\n $elem.append(option).customSelect({\n transition: 300\n });\n $form.parsley().reset();\n };\n\n if (notifyMe) {\n refreshSelectNotify($('#list-size'), $('#notify-modal-' + pid + ' .notify-form'));\n sizeElem.addClass('show').removeClass('hide');\n } else {\n sizeElem.addClass('hide').removeClass('show');\n }\n });\n }\n\n sizeChart() {\n var $sizeChart = $('.size-chart-collapsible');\n\n $('.size-chart a').on('click', function (e) {\n e.preventDefault();\n\n var url = $(this).attr('href');\n\n if ($sizeChart.is(':empty')) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $sizeChart.append(data.content);\n }\n });\n }\n\n $sizeChart.toggleClass('active');\n }.bind(this));\n\n $('body').on('click', function (e) {\n if ($('.size-chart').has(e.target).length <= 0) {\n $sizeChart.removeClass('active');\n }\n });\n }\n\n controlsZoom() {\n const modal = $(document).find('.product-zoom-modal');\n\n $(document).on('click', '.side-grid-images img', function (e) {\n const self = $(e.currentTarget);\n const index = self.attr('data-index');\n\n if (self.hasClass('loading')) {\n return;\n }\n\n $('#zoom-trigger').trigger('click');\n $('.product-zoom-modal').find('.zoom-thumbnail-render[data-index=\"' + index + '\"]').trigger('click');\n $('.product-zoom-modal').find('.current').html(index);\n });\n\n modal.on('click', '.control', function (e) {\n e.preventDefault();\n const self = $(e.currentTarget);\n const current = self.closest(modal).find('.current');\n const length = parseInt(self.closest(modal).find('.length').text());\n\n if (self.hasClass('next')) {\n let next = parseInt(current.text()) + 1;\n let control = self.closest(modal).find('.zoom-thumbnail-render[data-index=\"' + next.toString() + '\"]');\n\n if (next > length) {\n next = '1';\n current.text(next);\n control = self.closest(modal).find('.zoom-thumbnail-render[data-index=\"' + next.toString() + '\"]');\n control.trigger('click');\n } else {\n current.text(next.toString());\n control.trigger('click');\n }\n } else if (self.hasClass('prev')) {\n let prev = parseInt(current.text()) - 1;\n let control = self.closest(modal).find('.zoom-thumbnail-render[data-index=\"' + prev.toString() + '\"]');\n\n if (prev < 1) {\n prev = length.toString();\n current.text(prev);\n control = self.closest(modal).find('.zoom-thumbnail-render[data-index=\"' + prev.toString() + '\"]');\n control.trigger('click');\n } else {\n current.text(prev.toString());\n control.trigger('click');\n }\n }\n });\n\n modal.on('click', '.close-modal', function () {\n const current = parseInt(modal.find('.current').text());\n const carousel = $('.grid-render');\n\n if (carousel.hasClass('owl-carousel')) {\n carousel.trigger('to.owl.carousel', [current - 1, 10, true]);\n }\n });\n }\n\n panningZoom() {\n $(document).on('mousemove', '#zoom-render', function (e) {\n const self = $(e.currentTarget);\n const width = self.innerWidth();\n let height = self.innerHeight();\n\n let x = (e.pageX - self.offset().left) / width * 100;\n let y = (e.pageY - self.offset().top) / height * 100;\n\n if (window.device && (window.device.type === 'mobile' || window.device.type === 'tablet')) {\n return;\n }\n\n if (self.hasClass('loading')) {\n return;\n }\n\n self.css('background-position', '' + x + '% ' + y + '%');\n });\n }\n\n zoom() {\n $(document).on('click', '.zoom-thumbnail-render', function (e) {\n const self = $(e.currentTarget);\n const breakpoint = Foundation.MediaQuery.current;\n let url = null;\n\n if (breakpoint === 'medium') {\n url = self.attr('data-img-medium');\n } else if (breakpoint === 'small') {\n url = self.attr('data-img-small');\n } else {\n url = self.attr('data-img-large');\n }\n\n const modal = $('#zoom-modal');\n const render = $('#zoom-render');\n let index = self.attr('data-index');\n\n self.addClass('active').siblings().removeClass('active');\n\n if (render.find('.img-render-panning').length > 0) {\n render.addClass('img-loading');\n } else {\n render.addClass('loading');\n }\n\n let changeImage = function () {\n const img = new Image();\n img.src = url;\n img.classList.add('img-render-panning');\n img.setAttribute('data-index', index);\n img.referrerPolicy = 'no-referrer';\n\n img.addEventListener('load', function () {\n if (window.device.type === 'mobile' || window.device.type === 'tablet') {\n render.removeClass('loading img-loading');\n img.classList.add('fade-in');\n render.append(img);\n render.find('.img-render-panning[data-index=\"' + index + '\"]').siblings().removeClass('fade-in');\n modal.scrollTop(0);\n modal.scrollLeft(img.width / 4);\n } else {\n render.css('background-image', 'url(' + url + ')');\n render.removeClass('loading');\n }\n });\n };\n\n if (render.find('.img-render-panning[data-index=\"' + index + '\"]').length) {\n render.removeClass('img-loading').find('.img-render-panning[data-index=\"' + index + '\"]').addClass('fade-in').siblings()\n .removeClass('fade-in');\n modal.scrollTop(0);\n modal.scrollLeft($('.img-render-panning[data-index=\"' + index + '\"]').width() / 4);\n } else {\n changeImage();\n }\n });\n }\n\n toggleShare() {\n $('.side-details').on('click', '.share-label', function (e) {\n e.preventDefault();\n const self = $(e.currentTarget);\n self.addClass('expanded').next().toggleClass('expanded');\n\n if (!self.next().hasClass('expanded')) {\n self.next().find('a:last').one('webkitTransitionEnd transitionend', function (event) {\n self.removeClass('expanded');\n });\n }\n });\n }\n\n productSetImage() {\n let generateImages = function (render, indexToFind) {\n render = document.getElementById(render);\n const firstImg = document.getElementById('img-render');\n\n $('.set-items-render').each(function (index, el) {\n const self = $(el);\n const url = self.attr('data-img-large');\n const img = new Image();\n // let counter = self.parent().attr('data-index');\n\n img.classList.add('img-layer');\n img.src = url;\n img.setAttribute('data-index', (index + 1));\n img.addEventListener('load', function () {\n if (document.querySelector('#image')) {\n document.querySelector('#image').appendChild(img);\n document.querySelector('#image').classList.remove('loading');\n } else {\n render.appendChild(img);\n render.classList.remove('loading');\n }\n\n firstImg.classList.add('fade-out');\n $('.img-layer[data-index=\"' + indexToFind + '\"]').addClass('fade-in');\n });\n });\n };\n\n $(document).on({\n mouseenter: function (e) {\n $('.set-items').each(function (index, el) {\n const self = $(el);\n self.attr('data-index', (index + 1));\n });\n const $sideImage = $('#side-set-image');\n const self = $(e.currentTarget);\n let counter = self.attr('data-index');\n\n if (window.device.type === 'mobile' || window.device.type === 'tablet') {\n return;\n }\n\n if ($sideImage.is(':visible')) {\n if ($sideImage.find('.img-layer').length > 0) {\n $sideImage.find('img[data-index=\"' + counter + '\"]').addClass('fade-in');\n $sideImage.find('.img-render').addClass('fade-out');\n } else {\n if ($sideImage.find('#image').length > 0) {\n $sideImage.find('#image').addClass('loading');\n } else {\n $sideImage.addClass('loading');\n }\n\n generateImages('side-set-image', counter);\n }\n }\n },\n mouseleave: function (e) {\n const $sideImage = $('#side-set-image');\n if ($sideImage.is(':visible')) {\n if ($sideImage.find('#image').length > 0) {\n $sideImage.find('#image').removeClass('loading');\n } else {\n $sideImage.removeClass('loading');\n }\n\n $sideImage.find('img').removeClass('fade-out fade-in');\n }\n }\n }, '.set-items');\n }\n\n notifyMe() {\n $('.notify-form #list-size').on('change', function (e) {\n var masterProductId = $('.product-detail').data('pid'); // TODO: find a better way to retrieve this\n var selectedColorId = $('a.swatch-color.selected').data('attr-value');\n var sizeId = $('button.custom-select__option.custom-select__option--value.size-option').text(); // TODO: find a better way to retrieve this\n var productID = '' + masterProductId + '_' + selectedColorId + '_' + sizeId;\n console.log('Yo! Changed size in notify me! Notify me about this: ' + productID);\n $('input#productID').val(productID);\n });\n\n $('.notify-form button.submit').click(function (e) {\n e.preventDefault();\n var $form = $('form.notify-form');\n var action = $form.attr('action');\n\n $.ajax({\n url: action,\n type: 'post',\n data: $form.serialize(),\n success: function (response) {\n $('.notify-modal .modal-content .response-header').html(response.msg.lead);\n $('.notify-modal .modal-content .response-header').removeClass('hide');\n $('.notify-modal .modal-content p').html(response.msg.content);\n $('.notify-modal .modal-content form').hide();\n },\n error: function () { }\n });\n });\n }\n\n sizeGuide() {\n if (!$('#size-guide-modal').length) return;\n\n $(document).on('tabToggle', function (e, tab) {\n const label = $('[data-target=\\'' + tab + '\\']').data('label');\n if (label) $('#tab-title').text(label);\n });\n\n $('#measuring-guide-sizes').change(function (e) {\n const info = $(e.currentTarget).find(':selected').data('info');\n $('#measuring-guide-bodyparts').empty();\n if (info) {\n info.forEach(function (data) {\n $('#measuring-guide-bodyparts').append([\n '
',\n '
' + data.bodyPartRefence + ' ' + data.bodyPart + ' (' + data.value + ')
',\n '
'\n ].join(''));\n });\n }\n });\n }\n\n setItemClick() {\n var prdSetDetail = $('.product-set-detail');\n $('.set-item a.product-link').on('click', function (e) {\n var $self = $(e.currentTarget);\n var setItem = $self.closest('.set-item');\n var setItemPrice = setItem.find('.price-wrapper');\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push({\n event: 'productClick',\n ecommerce: {\n click: {\n actionField: {\n list: 'look|' + prdSetDetail.find('.product-set-title').text().trim()\n },\n products: [{\n name: setItem.data('name'),\n id: setItem.data('masterpid'),\n price: setItemPrice.data('pmin'),\n brand: 'twinset milano',\n category: setItem.data('category'),\n position: setItem.data('position')\n }]\n }\n }\n });\n }\n });\n\n // move in product/indez.js add-to-cart event\n // $('.set-item .cart-and-ipay').on('click', function (e) {\n // var $self = $(e.currentTarget);\n // var setItem = $self.closest('.set-item');\n // var setItemPrice = setItem.find('.price-wrapper');\n // var selectedSize = setItem.find('.list-size').find(\":selected\").text().trim();\n // if (typeof dataLayer !== 'undefined') {\n // dataLayer.push({\n // 'event': 'shop_by_look_add_to_cart',\n // 'ecommerce': {\n // 'add': {\n // 'actionFields' : { 'list' : 'look|' + prdSetDetail.find('.product-set-title').text().trim() },\n // 'products': [{\n // 'name': setItem.data('name'),\n // 'id': setItem.data('masterpid'),\n // 'price': setItemPrice.data('pmin'),\n // 'brand': 'twinset milano',\n // 'category': setItem.data('category'),\n // 'variant': setItem.data('variant'),\n // 'quantity': \"1\",\n // 'dimension14' : setItem.data('dimension14'),\n // 'dimension15' : setItem.data('dimension15'),\n // 'dimension16' : selectedSize\n // }]\n // }\n // }\n // });\n // }\n // });\n\n $(document).ready(function () {\n if (typeof dataLayer !== 'undefined' && $('.product-set-detail').length) {\n dataLayer.push({\n event: 'shop_by_look_detail',\n ecommerce: {\n detail: {\n products: [{\n name: 'look|' + prdSetDetail.find('.product-set-title').text().trim(),\n id: prdSetDetail.data('pid'),\n // 'price': $$$total_price$$$,\n brand: 'twinset milano',\n variant: '',\n category: '',\n }]\n }\n }\n });\n\n var itemList = $('.set-items').find('.set-item');\n var itemsImpression = [];\n $.each(itemList, function (itemIndex) {\n var element = $(itemList[itemIndex]);\n var elementPrice = element.find('.price-wrapper');\n itemsImpression.push({\n name: element.data('name'),\n id: element.data('masterpid'),\n price: elementPrice.data('pmin'),\n brand: 'twinset milano',\n category: element.data('category'),\n list: 'look|' + prdSetDetail.find('.product-set-title').text().trim(),\n position: (itemIndex + 1)\n });\n });\n dataLayer.push({\n event: 'shop_by_look_product_impression',\n ecommerce: {\n impressions: itemsImpression\n }\n });\n }\n });\n }\n\n visibilitySizeGuideModalElements(){\n /*\n This Observer is used to intercept the opening of size Guide Modal and to show\n the advice of scrollable table if it is such.\n */\n const handleIntersection = (entries, observer) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n var table = $('#size-guide-modal .responsive-table')[0];\n if(table.scrollWidth > table.clientWidth){\n $('#tab-scroll-description').show();\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(handleIntersection, {\n root: null,\n rootMargin: '0px',\n threshold: 0.1\n });\n\n const target = document.getElementById('size-guide-modal');\n observer.observe(target);\n }\n}\n\nconst ProductDetail = new detail();\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/pdp.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","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","const previousDevice = window.device;\nconst device = {};\nconst changeOrientationList = [];\n\nwindow.device = device;\n\nconst documentElement = window.document.documentElement;\nconst userAgent = window.navigator.userAgent.toLowerCase();\nconst television = [\n 'googletv',\n 'viera',\n 'smarttv',\n 'internet.tv',\n 'netcast',\n 'nettv',\n 'appletv',\n 'boxee',\n 'kylo',\n 'roku',\n 'dlnadoc',\n 'pov_tv',\n 'hbbtv',\n 'ce-html'\n];\n\ndevice.macos = function () {\n return find('mac');\n};\n\ndevice.ios = function () {\n return device.iphone() || device.ipod() || device.ipad();\n};\n\ndevice.iphone = function () {\n return !device.windows() && find('iphone');\n};\n\ndevice.ipod = function () {\n return find('ipod');\n};\n\ndevice.ipad = function () {\n return find('ipad');\n};\n\ndevice.android = function () {\n return !device.windows() && find('android');\n};\n\ndevice.androidPhone = function () {\n return device.android() && find('mobile');\n};\n\ndevice.androidTablet = function () {\n return device.android() && !find('mobile');\n};\n\ndevice.blackberry = function () {\n return find('blackberry') || find('bb10') || find('rim');\n};\n\ndevice.blackberryPhone = function () {\n return device.blackberry() && !find('tablet');\n};\n\ndevice.blackberryTablet = function () {\n return device.blackberry() && find('tablet');\n};\n\ndevice.windows = function () {\n return find('windows');\n};\n\ndevice.windowsPhone = function () {\n return device.windows() && find('phone');\n};\n\ndevice.windowsTablet = function () {\n return device.windows() && (find('touch') && !device.windowsPhone());\n};\n\ndevice.fxos = function () {\n return (find('(mobile') || find('(tablet')) && find(' rv:');\n};\n\ndevice.fxosPhone = function () {\n return device.fxos() && find('mobile');\n};\n\ndevice.fxosTablet = function () {\n return device.fxos() && find('tablet');\n};\n\ndevice.meego = function () {\n return find('meego');\n};\n\ndevice.cordova = function () {\n return window.cordova && location.protocol === 'file:';\n};\n\ndevice.nodeWebkit = function () {\n return typeof window.process === 'object';\n};\n\ndevice.mobile = function () {\n return (device.androidPhone() || device.iphone() || device.ipod() || device.windowsPhone() || device.blackberryPhone() || device.fxosPhone() || device.meego());\n};\n\ndevice.tablet = function () {\n return (device.ipad() || device.androidTablet() || device.blackberryTablet() || device.windowsTablet() || device.fxosTablet());\n};\n\ndevice.desktop = function () {\n return !device.tablet() && !device.mobile();\n};\n\ndevice.television = function () {\n let i = 0;\n while (i < television.length) {\n if (find(television[i])) {\n return true;\n }\n i++;\n }\n return false;\n};\n\ndevice.portrait = function () {\n if (screen.orientation && Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n return screen.orientation.type.includes('portrait');\n }\n return window.innerHeight / window.innerWidth > 1;\n};\n\ndevice.landscape = function () {\n if (screen.orientation && Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n return screen.orientation.type.includes('landscape');\n }\n return window.innerHeight / window.innerWidth < 1;\n};\n\ndevice.noConflict = function () {\n window.device = previousDevice;\n return this;\n};\n\nfunction find(needle) {\n return userAgent.indexOf(needle) !== -1;\n}\n\nfunction hasClass(className) {\n return documentElement.className.match(new RegExp(className, 'i'));\n}\n\nfunction addClass(className) {\n let currentClassNames = null;\n if (!hasClass(className)) {\n currentClassNames = documentElement.className.replace(/^\\s+|\\s+$/g, '');\n documentElement.className = `${currentClassNames} ${className}`;\n }\n}\n\nfunction removeClass(className) {\n if (hasClass(className)) {\n documentElement.className = documentElement.className.replace(` ${className}`, '');\n }\n}\n\nif (device.ios()) {\n if (device.ipad()) {\n addClass('ios ipad tablet');\n } else if (device.iphone()) {\n addClass('ios iphone mobile');\n } else if (device.ipod()) {\n addClass('ios ipod mobile');\n }\n} else if (device.macos()) {\n addClass('macos desktop');\n} else if (device.android()) {\n if (device.androidTablet()) {\n addClass('android tablet');\n } else {\n addClass('android mobile');\n }\n} else if (device.blackberry()) {\n if (device.blackberryTablet()) {\n addClass('blackberry tablet');\n } else {\n addClass('blackberry mobile');\n }\n} else if (device.windows()) {\n if (device.windowsTablet()) {\n addClass('windows tablet');\n } else if (device.windowsPhone()) {\n addClass('windows mobile');\n } else {\n addClass('windows desktop');\n }\n} else if (device.fxos()) {\n if (device.fxosTablet()) {\n addClass('fxos tablet');\n } else {\n addClass('fxos mobile');\n }\n} else if (device.meego()) {\n addClass('meego mobile');\n} else if (device.nodeWebkit()) {\n addClass('node-webkit');\n} else if (device.television()) {\n addClass('television');\n} else if (device.desktop()) {\n addClass('desktop');\n}\n\nif (device.cordova()) {\n addClass('cordova');\n}\n\nfunction handleOrientation() {\n if (device.landscape()) {\n removeClass('portrait');\n addClass('landscape');\n walkOnChangeOrientationList('landscape');\n } else {\n removeClass('landscape');\n addClass('portrait');\n walkOnChangeOrientationList('portrait');\n }\n setOrientationCache();\n}\n\nfunction walkOnChangeOrientationList(newOrientation) {\n for (const index in changeOrientationList) {\n changeOrientationList[index](newOrientation);\n }\n}\n\ndevice.onChangeOrientation = function (cb) {\n if (typeof cb === 'function') {\n changeOrientationList.push(cb);\n }\n};\n\nlet orientationEvent = 'resize';\nif (Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n orientationEvent = 'orientationchange';\n}\n\nif (window.addEventListener) {\n window.addEventListener(orientationEvent, handleOrientation, false);\n} else if (window.attachEvent) {\n window.attachEvent(orientationEvent, handleOrientation);\n} else {\n window[orientationEvent] = handleOrientation;\n}\n\nhandleOrientation();\n\nfunction findMatch(arr) {\n for (let i = 0; i < arr.length; i++) {\n if (device[arr[i]]()) {\n return arr[i];\n }\n }\n return 'unknown';\n}\n\ndevice.type = findMatch(['mobile', 'tablet', 'desktop']);\ndevice.os = findMatch([\n 'ios',\n 'iphone',\n 'ipad',\n 'ipod',\n 'android',\n 'blackberry',\n 'windows',\n 'fxos',\n 'meego',\n 'television'\n]);\n\nfunction setOrientationCache() {\n device.orientation = findMatch(['portrait', 'landscape']);\n}\n\nsetOrientationCache();\n\nexport default device;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/scripts/services/device.js"],"sourceRoot":""}