{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/components/alertNotification.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/components/alerts/alertHelpers.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/components/userActivity.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/components/newsletterModal.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/components/UUIDGenerator.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/seo/gtm/gtmEvents.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/search/search.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/product/quickView.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/search.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/components/scrollAnimate.js","webpack:///./cartridges/app_monnalisa/cartridge/client/default/js/product/base.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","alert","require","alertNotification","set","alertName","id","alertOptions","alertContainer","document","querySelector","attachToElement","appendTo","prependTo","createAlertContainer","createAlert","UUIDGenerator","message","status","timeout","dismissible","dismissibleAlert","alertUUID","alertHTML","dwPropertyLabels","window","dwResources","properties","close","createAlertHTML","insertAdjacentHTML","setTimeout","parentNode","removeChild","childElementCount","_setAlertTimeout","alertElementDiv","createElement","classList","add","body","append","UserActivity","constructor","callback","this","resetListener","reset","start","events","forEach","event","addEventListener","clearTimeout","timeoutId","stop","removeEventListener","newsletterModal","isClosed","localStorage","getItem","modal","$","length","userActivity","on","setItem","show","UUID","Uint32Array","crypto","getRandomValues","sendPageData","pageLang","pageType","storeView","visitorId","loginState","visitorType","existingCustomer","lifetimeValue","newsletterSubscription","dataLayer","push","sendPromoData","promotions","sendReserchData","queryReserch","reserchResult","sendNewsletterSuccess","sendFormData","formName","sendFormRegistrationData","sendFormLoginData","sendProductDetailsData","currencyCode","products","sendProductClickData","currency","list","sendCartDisplay","addToCart","removeFromCart","sendPurchaseData","orderID","shopName","total","tax","shippingCosts","couponCode","discountedAmount","checkoutStep","step","option","checkoutOption","addToWishlist","productName","filterData","filterType","filterValue","listingOrder","order","sendSearchData","searchResultsCount","obj","configurable","writable","stickySidebar","filterSidebar","getElementById","mobileAccordionState","scrollAnimate","stickySidebarConfigs","topSpacing","resizeSensor","stickySidebarInitialHeight","GtmEvents","closeRefinementsAccordion","e","target","closest","find","each","index","el","openCollapseid","attr","openCollapseButton","collapse","addClass","isMobileCategoryChecked","isChecked","is","pushPermalink","permalink","val","history","pushState","updateDom","$results","selector","$updates","empty","html","handleRefinements","$currentElement","hasClass","removeClass","elementID","eq","Breakpoints","parseResults","response","$pushState","$renderableElements","specialHandlers","parseInt","text","keys","trigger","getContent","$element","$target","showMoreUrl","data","spinner","ajax","url","method","success","error","updateSortOptions","options","updateStickySidebarDimensions","destroy","StickySidebar","search","changeLayout","toggleClass","closeMobileRefinements","preventDefault","stopPropagation","currentTarget","urlHref","veil","desktopFilterSidbarOpen","h","offsetHeight","css","desktopFilterSidbarClose","desktopStickyFilterSidebar","lgUp","refinementContainer","refinementAnchor","footer","getBoundingClientRect","top","bottom","style","gtmSendSearchData","resultsCount","gtmSendProductClick","items","product","price","brand","category","position","parents","sort","sortOrderValue","selectedUrl","sortRuleID","ruleId","removeAttr","updateSelectedSortOption","complete","showMore","loadContentMode","$showMoreRepleaceableElements","filter","replaceWith","handleHistoryStateChange","location","replace","applyFilter","categorySelected","stopVeil","$openTabs","ids","currentFilter","page","refinementType","refinementValue","sendFilterDataGtmEvent","last","applyFilterOnMobileLeave","refinementsAccordion","showContentTab","remove","base","focusHelper","fillModalElement","selectedValueUrl","dataType","$html","parsedHtml","renderedTemplate","parseHTML","children","quickViewFullDetailMsg","productUrl","closeButtonText","enterDialogMessage","quickView","showQuickview","focusQuickview","focus","trapQuickviewFocus","focusParams","containerSelector","firstElementSelector","lastElementSelector","nextToLastElementSelector","setTabNextFocus","showSpinner","hideDialog","beforeUpdateAttribute","updateAttribute","container","selectedProductUrl","updateAddToCart","$productContainer","readyToOrder","available","dialog","updateAvailability","allAvailable","toArray","every","item","allReady","resources","info_selectforstock","nonSelectAttribute","selectAttribute","removeBonusProduct","selectBonusProduct","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","availability","handleColorVariationSwatches","searchInit","init","readyState","keyCode","firstFocusableEl","lastFocusableEl","linkElements","shiftKey","element","timing","offset","animate","scrollTop","getPidValue","$el","getQuantitySelector","getQuantitySelected","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","variationAttributes","attrs","msgs","values","attrValue","$attrValue","$swatchButton","parent","selected","siblings","assistiveSelectedText","selectable","processSwatchValues","$attr","$select","$defaultOption","resetUrl","v","processNonSwatchValues","updateAttrs","productType","lastPriceHtml","promotion","calloutMsg","details","getPromotionsHtml","availabilityValue","availabilityMessages","messages","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","attributeSelect","$optionEl","updateOptions","quantities","optionsHtml","map","quantity","join","updateQuantities","productContainer","prevObject","parseHtml","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","getOptions","$elOption","urlValue","selectedValueId","optionId","JSON","stringify","retrieveGTMcategories","divClass","prodObj","iter","categoriesArray","split","k","methods","editBonusProducts","focusChooseBonusProductModal","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","pid","pidsObj","setPids","qty","childProducts","form","messageType","newBonusDiscountLineItem","handlePostCartAdd","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","$selected","count","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","productId","errorMessage","msgSuccess","reload","off","hideColorVariationSwatches","containerRects","swatches","outElementsCount","swatchRects","left","right","displayValue"],"mappings":"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","file":"search.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 \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n","'use strict';\n\nvar alert = require('./alerts/alertHelpers');\n\n/**\n * ALERT NOTIFICATION API v1.0x\n * A set of methods and helper functions written in Vanilla Javascript which simplify the creation of standard alert messages according to client's specifications\n * \n * ------------\n * Accepted properties\n * ------------ \n * @param {String} alertName - (MANDATORY) A class name for the alert\n * @param {String} id - (OPTIONAL) An optional identifier for the alert\n * \n * // Alert options - alertOptions: {}\n * @param {String} message - (MANDATORY) The message to attach to alert. It can be simple text or a HTML string - e.g., '

Your product has been added to the wishlist

'\n * @param {String} status - (MANDATORY) the alert status. It accepts two values: 'alert-success' for succesful alerts and 'alert-danger' for warning alerts\n * @param {String} appendTo - (OPTIONAL) The element to append the alert to. It defaults to body\n * @param {Boolean} dismissible - (OPTIONAL) If true, set a dismissible alert. Dismissible alerts have no timeout and a button which requires user interaction in order to close it\n * @param {String} prependTo - (OPTIONAL) The element to prepend the alert to. It defaults to body\n * @param {Boolean} timeout - (OPTIONAL) If false, remove the default timeout for alerts. Dismissible alerts have no timeout by default\n * \n */\n\n/**\n * ----------------\n * Example of usage\n * ----------------\n * var alertNotification = require('./alertNotification');\n * alertNotification.set(\n {\n alertName: 'add-to-wishlist',\n alertOptions: {\n message: data.msg,\n status: 'alert-success' \n }\n }\n);\n*/\n\nclass AlertNotification {\n set ({alertName, id, alertOptions}) {\n let alertContainer = document.querySelector('.alert-messages');\n let attachToElement = alertOptions.appendTo || alertOptions.prependTo;\n\n if (!alertContainer && !attachToElement) {\n alert.createAlertContainer (alertName);\n }\n\n alert.createAlert(alertName, id, alertOptions);\n }\n}\n\nconst alertNotification = new AlertNotification ();\nmodule.exports = alertNotification;\n","'use strict';\n\nvar UUIDGenerator = require('../UUIDGenerator');\n\n/**\n * DEFAULT VALUES\n */\nconst _ALERTTIMEOUT = 5000; // 2 seconds\nconst _DISMISSIBLE = true;\n\n/**\n * Construct the HTML for the alert, depending on whether it's a dismissible alert or not\n * @param {String} status - The status of the alert message. It accepts two values: 'alert-success' for succesful alerts and 'alert-danger' for warning alerts\n * @param {String} id - An optional identifier for the alert\n * @param {String} alertName - A class name for the alert\n * @param {Number} alertUUID - The alert identifier number\n * @param {String} message - The message to attach to alert. It can be simple text or a HTML string - e.g., '

Your product has been added to the wishlist

'\n * @param {Boolean} dismissible - If true, set a dismissible alert. Dismissible alerts have no timeout and a button which requires user interaction in order to close it\n * @returns {String} alert - The HTML repesentation of the request alert\n */\n\nconst createAlertHTML = (status, id, alertName, alertUUID, message, dismissible) => {\n let alert;\n let dwPropertyLabels = window.dwResources.properties;\n\n if (dismissible) {\n alert =`
\n ${message}
`;\n } else {\n alert = `
${message}
`;\n }\n return alert;\n};\n\n/**\n * Set a timeout for the alert. Timeout is active by default in non-dismissible alerts. It can be disabled in any moment by setting timeout: false\n * @param {Number} alertUUID - A universally unique identifier for the alert\n * @param {Object} alertContainer - The alert container.\n */\n\nconst _setAlertTimeout = (alertUUID, alertContainer) => {\n\n setTimeout(() => {\n let alert = document.querySelector(`[data-alert-uuid=\"${alertUUID}\"]`);\n alert.parentNode.removeChild(alert);\n\n if (alertContainer.childElementCount == 0) {\n alertContainer.parentNode.removeChild(alertContainer);\n }\n }, _ALERTTIMEOUT);\n};\n\n/**\n * Create alert with the requested options\n * @param {String} alertName - A class name for the alert\n * @param {String} id - An optional identifier for the alert\n * @param {String} message - The message to attach to alert. It can be simple text or a HTML string - e.g., '

Your product has been added to the wishlist

'\n * @param {String} status - The alert status. It accepts two values: 'alert-success' for succesful alerts and 'alert-danger' for warning alerts\n * @param {String} appendTo - The element to append the alert to. It defaults to body.\n * @param {String} prependTo - The element to prepend the alert to. It defaults to body\n * @param {Boolean} timeout - If false, remove the default timeout for alerts. Dismissible alerts have no timeout by default\n * @param {Boolean} dismissible - If true, set a dismissible alert. Dismissible alerts have no timeout and a button which requires user interaction in order to close it\n */\n\nconst createAlert = (alertName, id, {message, status, appendTo, prependTo, timeout, dismissible}) => {\n let attachToElement = appendTo || prependTo;\n var dismissibleAlert = dismissible == false ? dismissible : _DISMISSIBLE;\n\n let alertContainer = document.querySelector(attachToElement) || document.querySelector('.alert-messages');\n let alertUUID = UUIDGenerator.get();\n let alertHTML = createAlertHTML(status, id, alertName, alertUUID, message, dismissibleAlert);\n\n if (attachToElement) {\n alertContainer.insertAdjacentHTML(appendTo ? 'beforeend' : 'afterbegin', alertHTML);\n } else {\n alertContainer.insertAdjacentHTML('afterbegin', alertHTML);\n\n }\n\n if (dismissible != true && timeout != false) {\n _setAlertTimeout(alertUUID, alertContainer);\n }\n};\n\n/**\n * Create an alert container. An alert container is automatically created when no element to attach the alert to has been specified using the appendTo and prependTo options or when no alert container already exists\n * @param {String} alertName - A class name for the alert\n */\nconst createAlertContainer = (alertName) => {\n const alertElementDiv = document.createElement('div');\n alertElementDiv.classList.add(`${alertName}-messages`, 'alert-messages');\n\n document.body.append(alertElementDiv);\n};\n\nmodule.exports = {\n createAlert: createAlert,\n createAlertContainer: createAlertContainer\n};\n\n","const TIMEOUT = 5000;\n\nclass UserActivity {\n\n callback;\n\n events = [\n 'mousemove',\n 'mousedown',\n 'keydown',\n 'touchstart',\n 'touchmove',\n 'scroll',\n 'click',\n 'pointermove',\n 'pointerdown'\n ];\n\n timeoutId;\n\n constructor(callback) {\n this.callback = callback;\n this.resetListener = () => this.reset();\n }\n\n start() {\n this.reset();\n\n this.events.forEach(event => {\n document.addEventListener(event, this.resetListener, true);\n });\n }\n\n reset() {\n clearTimeout(this.timeoutId);\n this.timeoutId = setTimeout(this.callback, TIMEOUT);\n }\n\n stop() {\n clearTimeout(this.timeoutId);\n this.events.forEach(event => {\n document.removeEventListener(event, this.resetListener, true);\n });\n }\n}\n\nexport default UserActivity;\n","import UserActivity from './userActivity';\n\nconst NEWSLETTER_STORAGE_KEY = 'newsletterModalClosed';\n\nfunction newsletterModal () {\n const isClosed = localStorage.getItem(NEWSLETTER_STORAGE_KEY);\n const modal = $('#newsletterModal');\n\n if (isClosed || !modal.length) return;\n\n const idleCallback = () => {\n modal.modal('show');\n };\n\n const userActivity = new UserActivity(idleCallback);\n userActivity.start();\n\n modal.on('hidden.bs.modal', function () {\n localStorage.setItem(NEWSLETTER_STORAGE_KEY, true);\n userActivity.stop();\n });\n\n $('#newsletterModal [name=\"emailId\"]').on('focus', () => {\n $('#newsletterModal .subscribe-email, #newsletterModal .privacy-group').show();\n });\n\n $('body').on('newsletter:subscribeSuccess', () => {\n localStorage.setItem(NEWSLETTER_STORAGE_KEY, true);\n modal.modal('hide');\n });\n}\n\nexport default newsletterModal;\n","'use strict';\n\n/**\n * Construct a Universally Unique IDentifier number\n * @returns {Number} A universally unique identifier\n */\n\nconst getUUID = () => {\n let UUID = new Uint32Array(1);\n window.crypto.getRandomValues(UUID);\n\n return UUID[0];\n};\n\nmodule.exports = {\n get: getUUID\n};","'use strict';\n\nfunction sendPageData (pageLang,pageType,storeView,visitorId,loginState,visitorType,existingCustomer,lifetimeValue,newsletterSubscription){\n window.dataLayer.push({\n 'pageLang': pageLang,\n 'pageType': pageType,\n 'storeView': storeView,\n 'visitorId': visitorId,\n 'visitorLoginState': loginState,\n 'visitorType': visitorType,\n 'visitorExistingCustomer': existingCustomer,\n 'visitorLifetimeValue': lifetimeValue,\n 'visitorNewsletterSubscription':newsletterSubscription\n });\n}\n/** sendSearchData: sends the search event to the dataLayer.\n *@param {int} searchResultsCount: number of search results\n */\nfunction sendSearchData (searchResultsCount) {\n window.dataLayer.push({\n 'event': 'search',\n 'searchResults': searchResultsCount\n });\n}\n\nfunction sendPromoData (promotions){\n window.dataLayer.push({\n 'ecommerce': {\n 'promoView': {\n 'promotions': promotions\n }\n }\n });\n}\n\nfunction sendReserchData (queryReserch,reserchResult){\n window.dataLayer.push({\n 'event': 'inside-reserch',\n 'queryReserch': queryReserch,\n 'reserchResult': reserchResult\n\n });\n}\n\n\nfunction sendNewsletterSuccess (){\n window.dataLayer.push({\n 'event': 'submit-form-newsletter-ok'\n });\n}\n\nfunction sendFormData (formName){\n window.dataLayer.push({\n 'event': 'submit-form-'+ formName +'-ok'\n });\n}\n\nfunction sendFormRegistrationData (){\n window.dataLayer.push({\n 'event': 'submit-form-registration-ok'\n });\n}\n\nfunction sendFormLoginData (){\n window.dataLayer.push({\n 'event': 'submit-form-login-ok'\n });\n}\n\nfunction sendProductDetailsData (currencyCode,products){\n window.dataLayer.push({\n 'event': 'productDetail',\n 'ecommerce': {\n 'detail': {\n 'currencyCode': currencyCode,\n 'actionField': {'list':''},\n 'products': products\n }\n }\n });\n\n}\n\nfunction sendProductClickData (currency,products,list){\n window.dataLayer.push({\n 'event': 'productClick',\n 'ecommerce': {\n 'click': {\n 'currencyCode': currency,\n 'actionField': {'list': list},\n 'products': products\n }\n }\n });\n}\n\nfunction addToCart (currencyCode,products){\n window.dataLayer.push({\n 'event': 'addToCart',\n 'ecommerce':{\n 'currecyCode': currencyCode,\n 'add': {\n 'products': products\n }\n }\n });\n\n}\n\nfunction removeFromCart (currencyCode,products){\n window.dataLayer.push({\n 'event': 'removeFromCart',\n 'ecommerce':{\n 'currencyCode':currencyCode,\n 'remove': {\n 'products': products\n }\n }\n });\n\n}\n\nfunction sendPurchaseData (currencyCode, orderID, shopName, total, tax, shippingCosts, couponCode, discountedAmount, products){\n window.dataLayer.push({\n 'event': 'purchase',\n 'ecommerce': {\n 'currencyCode': currencyCode,\n 'purchase':{\n 'actionField':{\n 'id': orderID,\n 'affilation': shopName,\n 'revenue': total,\n 'tax': tax,\n 'shipping': shippingCosts,\n 'coupon': couponCode,\n 'discountedAmount': -discountedAmount,\n },\n 'products': products\n }\n }\n });\n\n}\nfunction checkoutStep (step,option,products){\n window.dataLayer.push({\n 'event': 'checkout',\n 'ecommerce': {\n 'checkout':{\n 'actionField': {'step': step,'option': option},\n 'products': products\n\n }\n\n }\n\n });\n\n}\n\nfunction checkoutOption (step,checkoutOption){\n window.dataLayer.push({\n 'event': 'checkoutOption',\n 'ecommerce': {\n 'checkout_option': {\n 'actionField': {'step': step, 'option': checkoutOption}\n }\n }\n });\n}\n\nfunction addToWishlist (productName){\n window.dataLayer.push({\n 'event': 'add-to-wishlist',\n 'productName': productName\n });\n}\n\nfunction filterData (filterType,filterValue){\n window.dataLayer.push({\n 'event': 'applicazione-filtro-listing',\n 'filterType': filterType,\n 'filterValue': filterValue\n });\n}\nfunction listingOrder (order){\n window.dataLayer.push({\n 'event': 'application-order-listing',\n 'orderValue': order\n });\n}\n\nfunction sendCartDisplay (currencyCode,products){\n window.dataLayer.push({\n 'event': 'cartDisplay',\n 'ecommerce': {\n 'currencyCode': currencyCode,\n 'cart': {\n 'products': products\n }\n }\n });\n}\n\nmodule.exports = {\n sendPageData: sendPageData,\n sendPromoData: sendPromoData,\n sendReserchData: sendReserchData,\n sendNewsletterSuccess: sendNewsletterSuccess,\n sendFormData: sendFormData,\n sendFormRegistrationData : sendFormRegistrationData,\n sendFormLoginData: sendFormLoginData,\n sendProductDetailsData: sendProductDetailsData,\n sendProductClickData: sendProductClickData,\n sendCartDisplay: sendCartDisplay,\n addToCart: addToCart,\n removeFromCart: removeFromCart,\n sendPurchaseData: sendPurchaseData,\n checkoutStep: checkoutStep,\n checkoutOption: checkoutOption,\n addToWishlist:addToWishlist,\n filterData: filterData,\n listingOrder: listingOrder,\n sendSearchData: sendSearchData\n};\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nvar filterSidebar = document.getElementById('desktopFilterSidebar');\nvar mobileAccordionState = [];\nvar scrollAnimate = require('../components/scrollAnimate');\nvar stickySidebar;\nvar stickySidebarConfigs = {\n topSpacing: 60,\n resizeSensor: true\n};\nvar stickySidebarInitialHeight = 0;\n\nvar GtmEvents = require('../seo/gtm/gtmEvents');\n\n/**\n * Handle desktop and tablet/mobile collapses closing in refinement bar\n * @param {Object} e - The Event interface\n */\n\nfunction closeRefinementsAccordion (e) {\n let openCollapses = $(e.target).closest('.sticky-sidebar-container').find('.collapse.show');\n\n openCollapses.each((index, el) => {\n let openCollapseid = $(el).attr('id');\n let openCollapseButton = $(`button[data-toggle=\"collapse\"][data-target=\"#${openCollapseid}\"]`);\n\n $(el).collapse('hide');\n openCollapseButton.addClass('collapsed');\n openCollapseButton.attr('aria-expanded', 'false');\n\n });\n}\n\n/**\n * On mobile and tablet devices, check whether a category is checked or not.\n * The function is then used to check/uncheck the radio button related to the clicked category or\n * trigger a second ajax call with the checked category as target when\n * an attribute or price refinement is checked and a category was already selected\n */\n\nfunction isMobileCategoryChecked () {\n let isChecked = null;\n\n $('.sticky-sidebar .categoryRefinement').each((i, el) => {\n if ($(el).find('input').is(':checked')) {\n isChecked = $(el).closest('.categoryRefinement').attr('data-refinement-value');\n }\n });\n\n return isChecked;\n}\n\n/**\n * Get proper ajax href for the filter clicked.\n * @param {Object} currentFilter - The filter currently clicked\n * @return {Object} data-top-category-href if the user in on mobile/tablet devices and a category is unchecked\n * @return {Object} data-href in all the other cases\n */\n\nfunction getRefinementHref (currentFilter) {\n\n if (!Breakpoints.is('lgUp') && currentFilter.hasClass('categoryRefinement') && currentFilter.find('input').is(':checked')) {\n return currentFilter.data('top-category-href');\n } else {\n return currentFilter.data('href');\n }\n}\n\n/**\n * Add a URL with filters, sort, and page size preserved to the browser's session history stack.\n */\n\nfunction pushPermalink () {\n let permalink = $('.permalink').val();\n window.history.pushState({}, null, permalink);\n}\n\n/**\n * Update DOM elements with Ajax results\n *\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n * @return {undefined}\n */\nfunction updateDom ($results, selector) {\n var $updates = $results.find(selector);\n $(selector).empty().html($updates.html());\n}\n\n/**\n * On mobile and tablet devices, when an attribute or price refinement is selected and a category was already checked,\n * this utility function triggers a second ajax call with the checked category as target in order to restore\n * the previously checked category\n * @param {Object} $results - jQuery DOM element\n */\nfunction updateMobileRefinementsOnAttributesAndPrices ($results) {\n let checkedMobileCategoryValue;\n\n if (isMobileCategoryChecked() && isMobileCategoryChecked().length > 0) {\n checkedMobileCategoryValue = isMobileCategoryChecked();\n }\n\n $('.sticky-sidebar .categoryRefinement').each((i, el) => {\n if ($(el).find('input').is(':checked')) {\n checkedMobileCategoryValue = $(el).closest('.categoryRefinement').attr('data-refinement-value');\n }\n });\n\n updateDom($results, '.refinements');\n\n if (checkedMobileCategoryValue && checkedMobileCategoryValue.length > 0) {\n $(`div.categoryRefinement[data-refinement-value=\"${checkedMobileCategoryValue}\"]`).first().trigger('search:applyFilters');\n }\n}\n\n/**\n * On mobile and tablet devices, check/uncheck the selected category\n * @param {Object} currentMobileCategory - The current category being clicked\n */\nfunction updateMobileRefinementsOnCategory (currentMobileCategory) {\n let currentMobileCategoryInput = currentMobileCategory.find('input');\n if (currentMobileCategoryInput.is(':checked')) {\n currentMobileCategoryInput.prop('checked', false);\n } else {\n currentMobileCategoryInput.prop('checked', true);\n }\n}\n\n/**\n * Keep refinement panes expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @return {undefined}\n */\nfunction handleRefinements ($results, $currentElement) {\n\n if (!$currentElement.hasClass('categoryRefinement')) {\n // Update open collapses\n $results.find('.sticky-sidebar .collapse').removeClass('show');\n $results.find('.sticky-sidebar [data-toggle=\"collapse\"]').addClass('collapsed');\n\n $('.sticky-sidebar .collapse').each(function (i, el) {\n if ($(el).hasClass('show')) {\n let elementID = $(el).attr('id');\n\n $results.find('.sticky-sidebar .collapse').eq(i).addClass('show');\n $results.find(`.sticky-sidebar [data-toggle=\"collapse\"][data-target=\"#${elementID}\"]`).removeClass('collapsed');\n }\n });\n }\n\n if (!Breakpoints.is('lgUp') && !$currentElement.hasClass('close-mobile-filters') && false) {\n if ($currentElement.hasClass('categoryRefinement')) { // With the restyle these specific handler cause a bug with the radio button filer.\n updateMobileRefinementsOnCategory($currentElement); // I did not have much time so I excluded them.\n } else {\n updateMobileRefinementsOnAttributesAndPrices($results);\n }\n } else {\n updateDom($results, '.refinements');\n }\n}\n\n/**\n * Parse Ajax results and updated select DOM elements\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction parseResults (response, $currentElement) {\n var $pushState = true;\n var $renderableElements = [\n //'#mobile-refinements-container',\n '.mobile-apply-filters-button',\n '#mobile-breadcrumbs',\n '#sort-order', // Desktop sort\n '#mobile-sort-order', // Mobile sort\n '.header-bar',\n '.header.page-title',\n '#search-results-details-header',\n '.product-grid',\n '.show-more',\n '.filter-bar',\n '.breadcrumb-container',\n ];\n var $results = $(response);\n var specialHandlers = {\n '.refinements': handleRefinements\n };\n\n if (Breakpoints.is('lgUp')) {\n //\n // On desktop devices, of if the 'View all filters' button is clicked on mobile and tablet devices,\n // render all the elements\n $('body').removeClass('mobile-filters-selected');\n\n } else if ($currentElement.hasClass('view-all-renderer')) {\n let viewAllRendererCount = parseInt($('.view-all-renderer-count').text(), 10);\n\n if (viewAllRendererCount == 0) {\n var $updates = $results.find('.results-count-ajax');\n $('.search-results').empty().html($updates.html());\n }\n\n } else if($currentElement.hasClass('close-mobile-filters')) {\n $pushState = true;\n } else {\n // On mobile and tablet devices, only specific elements (the one specified in the $renderableElements array below)\n // are updated rendered and immediately. All the other elements are updated and rendered on 'View All Filters'\n // button click only\n\n $('body').addClass('mobile-filters-selected');\n\n $pushState = false;\n\n if (!$currentElement.hasClass('categoryRefinement') && isMobileCategoryChecked() && isMobileCategoryChecked().length > 0) {\n $renderableElements = [];\n } else {\n $renderableElements = [\n '.mobile-apply-filters-button'/*,\n '#mobile-refinements-container' */\n ];\n }\n }\n\n // Update DOM elements that do NOT require special handling\n // Updatable DOM elements differ depending on desktop or mobile/tablet devices\n // See the comments above for more details\n $renderableElements.forEach(function (selector) {\n updateDom($results, selector);\n });\n\n // Update DOM elements which DO require special handling\n Object.keys(specialHandlers).forEach(function (selector) {\n specialHandlers[selector]($results, $currentElement);\n });\n\n // Close mobile refinements panel if the 'View All Filters' button has been pressed\n // on mobile and tablet devices\n if (!Breakpoints.is('lgUp') && $currentElement.hasClass('view-all-renderer')) {\n $('body').trigger('search:closeMobileRefinements');\n }\n\n if ($pushState) {\n pushPermalink();\n }\n}\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {JQuery} $element - the jquery element that has the click event attached\n * @param {JQuery} $target - the jquery element that will receive the response\n * @return {undefined}\n */\nfunction getContent ($element, $target) {\n var showMoreUrl = $element.data('url');\n $.spinner().start();\n $.ajax({\n url: showMoreUrl,\n method: 'GET',\n success: function (response) {\n $target.append(response);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Send Analytics data when applying a filter\n * @param {Object} e - The Event interace\n */\n\nfunction sendFilterDataGtmEvent (e) {\n let refinementType = $(e.currentTarget).data('refinement-type');\n let refinementValue = $(e.currentTarget).data('refinement-value');\n\n if ($(e.currentTarget).is('li') && !$(e.currentTarget).find('input').is(':checked')) {\n // Attributes and prices refinements\n GtmEvents.filterData(refinementType, refinementValue);\n } else if ($(e.currentTarget).hasClass('categoryRefinement')) {\n // Category refinements\n GtmEvents.filterData(refinementType, refinementValue);\n }\n}\n\n/**\n * Update selected sorted option on mobile and tablet devices\n */\n\nfunction updateSelectedSortOption () {\n let sortRuleID = $('.grid-footer').data('sort-options').ruleId;\n\n // Desktop\n $('.sort-order-panel').find('button:not([data-toggle=\"collapse\"])').removeClass('font-weight-bold');\n $('.sort-order-panel').find(`button.${sortRuleID}`).addClass('font-weight-bold');\n\n // Tablet & mobile\n $('#mobile-sort-order').find('input').removeAttr('checked');\n $('#mobile-sort-order').find('.custom-control-label').removeClass('font-weight-bold');\n\n $('#mobile-sort-order').find(`.${sortRuleID} input`).attr('checked', 'checked');\n $('#mobile-sort-order').find(`.${sortRuleID} .custom-control-label`).addClass('font-weight-bold');\n}\n\n/**\n * Update sort option URLs from Ajax response\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction updateSortOptions (response) {\n var $tempDom = $('
').append($(response));\n var sortOptions = $tempDom.find('.grid-footer').data('sort-options').options;\n\n sortOptions.forEach(function (option) {\n $('option.' + option.id).val(option.url);\n });\n}\n\n/**\n * Force recalculation of Sticky Sidebar cached attributes after key events,\n * such as refinement or sorting ajax call or show more content actions\n */\nfunction updateStickySidebarDimensions () {\n // Update Sticky Sidebar. The public method updateSticky() does not work\n if(Breakpoints.is('lgUp')) {\n stickySidebar.destroy();\n stickySidebar = new StickySidebar (filterSidebar, stickySidebarConfigs);\n }\n}\n\nclass Search {\n changeLayout () {\n $('body').on('click', '.change-view', () => {\n $('.product-tiles-grid').toggleClass('grid');\n $('.default-view-button, .change-view-button').toggleClass('d-none');\n });\n }\n\n closeMobileRefinements () {\n // Refinements close button\n $('body').on('search:closeMobileRefinements', () => {\n $('#mobile-refinements, #mobile-sort-order').collapse('hide').removeClass('show');\n $('body').removeClass('mobile-refinements-active');\n mobileAccordionState = [];\n });\n\n $('body').on('click', '.mobile-apply-filters-button .close-mobile-filters', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n let $currentElement = $(e.currentTarget);\n let totalFiltersApplied = parseInt($('.mobile-total-filters-count').text(), 10);\n\n if (totalFiltersApplied > 0) {\n let urlHref = $('.ajaxBaseURL').val();\n\n $.veil().start();\n\n $.ajax({\n url: urlHref,\n method: 'GET',\n success: function (response) {\n parseResults(response, $currentElement);\n scrollAnimate(null, 0);\n $.veil().stop();\n $('body').trigger('search:closeMobileRefinements');\n },\n error: function () {\n $.veil().stop();\n }\n });\n } else {\n $('body').trigger('search:closeMobileRefinements');\n }\n\n });\n }\n\n desktopFilterSidbarOpen () {\n $('#filter-toggle-button').on('click', (e) => {\n let h = document.querySelector('header').offsetHeight;\n $('#desktop-refinement-container').css('top', h); //Set top of the filter container, so it will stick right under the header\n stickySidebarInitialHeight = h;\n //$('#desktop-refinement-container').toggleClass('d-none');\n });\n }\n\n desktopFilterSidbarClose () {\n\n $('body').on('search:closeDesktopRefinements', () => {\n //$('#desktop-refinement-container').toggleClass('d-none');\n $('body').removeClass('mobile-refinements-active');\n mobileAccordionState = [];\n });\n $('.close-refinements-btn').on('click', () => {\n $('body').trigger('search:closeDesktopRefinements')\n });\n }\n\n desktopStickyFilterSidebar () {\n\n let lgUp = Breakpoints.get('lgUp');\n\n // Enable Sticky Sidebar on desktop devices\n lgUp.on('enter', () => {\n stickySidebar = new StickySidebar (filterSidebar, stickySidebarConfigs);\n });\n\n // Destroy Sticky Sidebar on mobile and tablet devices\n lgUp.on('leave', () => {\n stickySidebar.destroy();\n });\n\n $(window).on('scroll', (e) => {\n let refinementContainer = document.getElementById('refinments-container');\n let refinementAnchor = document.getElementById('desktop-refinement-container');\n let footer = document.querySelector('footer');\n if (footer.getBoundingClientRect().top < refinementContainer.getBoundingClientRect().bottom) {\n let h = parseInt(refinementAnchor.style.top, 10) - (refinementContainer.getBoundingClientRect().bottom - footer.getBoundingClientRect().top);\n $('#desktop-refinement-container').css('top', h);\n } else {\n if (parseInt(refinementAnchor.style.top, 10) < parseInt(stickySidebarInitialHeight) - 1) {\n let h = parseInt(refinementAnchor.style.top, 10) - (refinementContainer.getBoundingClientRect().bottom - footer.getBoundingClientRect().top);\n $('#desktop-refinement-container').css('top', h);\n } else {\n $('#desktop-refinement-container').css('top', stickySidebarInitialHeight);\n }\n }\n });\n\n }\n\n gtmSendSearchData () {\n var resultsCount = $('#search-container').data('results-count');\n GtmEvents.sendSearchData(resultsCount);\n }\n\n gtmSendProductClick () {\n // send data to dataLayer when click a product\n $('body').on('click', '.gtm-product-click', function () {\n var items = [];\n var product = {};\n var currency = $(this).attr('data-currency');\n var list = $(this).attr('data-category');\n\n product.name = $(this).attr('data-productname');\n product.id = $(this).attr('data-id');\n product.price = $(this).attr('data-price');\n product.brand = $(this).attr('data-brand');\n product.category = $(this).attr('data-category');\n //product.variant = productContainer.attr('data-variant');\n product.position = $(this).parents('[data-index]').data('index');\n items.push(product);\n GtmEvents.sendProductClickData(currency, items, list);\n });\n }\n\n sort () {\n // Handle sort order menu selection\n $('body').on('click', '#sort-order button, #mobile-sort-order button, .mobile-sort-option', function (e) {\n e.preventDefault();\n\n $('#sort-order, #mobile-sort-order').collapse('hide');\n var sortOrderValue = $(this).data('refinement-value');\n var url = $(this).data('href');\n\n Breakpoints.is('lgUp') ? $.spinner().start() : $.veil().start();\n\n $(this).trigger('search:sort', url);\n $.ajax({\n url: url,\n data: {\n selectedUrl: url\n },\n method: 'GET',\n success: function (response) {\n $('.product-grid').empty().html(response);\n pushPermalink();\n updateSelectedSortOption();\n GtmEvents.listingOrder(sortOrderValue);\n updateStickySidebarDimensions();\n\n Breakpoints.is('lgUp') ? $.spinner().stop() : $.veil().stop();\n },\n error: function () {\n Breakpoints.is('lgUp') ? $.spinner().stop() : $.veil().stop();\n },\n complete: function () {\n $('body').trigger('search:closeMobileRefinements');\n }\n });\n });\n }\n\n showMore () {\n // Show more products\n $('.container-xxl').on('click', 'button.show-content', function (e) {\n e.stopPropagation();\n\n var loadContentMode = $('.search-results').data('load-content-mode');\n var showMoreUrl = $(this).data('url');\n\n e.preventDefault();\n\n $.spinner().start();\n $(this).trigger('search:showMore', e);\n $.ajax({\n url: showMoreUrl,\n data: {\n selectedUrl: showMoreUrl\n },\n method: 'GET',\n success: function (response) {\n switch (loadContentMode) {\n case 'pagination':\n $('.product-grid').empty().html(response);\n scrollAnimate(null, 0);\n break;\n default:\n var $showMoreRepleaceableElements = $(response).filter('.show-more-replace').html();\n\n $('.grid-footer').replaceWith($showMoreRepleaceableElements);\n break;\n }\n pushPermalink();\n updateSortOptions(response);\n updateStickySidebarDimensions();\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n }\n\n handleHistoryStateChange () {\n $(window).on('popstate', function (e) {\n if (!$('.show-more-replace').length) {\n return;\n }\n\n var loadContentMode = $('.search-results').data('load-content-mode');\n var showMoreUrl = $('.show-more-replace').data('url') + location.search.replace('?', '&');\n\n $.spinner().start();\n $(this).trigger('search:showMore', e);\n $.ajax({\n url: showMoreUrl,\n data: {\n selectedUrl: showMoreUrl\n },\n method: 'GET',\n success: function (response) {\n switch (loadContentMode) {\n case 'pagination':\n $('.product-grid').empty().html(response);\n scrollAnimate(null, 0);\n break;\n default:\n var $showMoreRepleaceableElements = $(response).filter('.show-more-replace').html();\n $('.grid-footer').replaceWith($showMoreRepleaceableElements);\n break;\n }\n updateSortOptions(response);\n updateStickySidebarDimensions();\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n }\n\n applyFilter () {\n // Handle refinement value selection and reset click\n $('body').on(\n 'click search:applyFilters',\n '.refinements li button, .refinements li .categoryRefinement, .refinements .remove-microcategory-filters, .mobile-apply-filters-button button.view-all-renderer, .refinements li.filter-value, .refinement-bar button.reset, .filter-value button, .swatch-filter button',\n function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let categorySelected = 0;\n let $currentElement = $(this);\n let stopVeil = true;\n // Get open tabs\n var $openTabs = $('#mobile-refinements .collapse.show');\n var ids = [];\n $openTabs.each((i,el) => {\n ids.push($(el).attr('id'));\n });\n\n\n if (!Breakpoints.is('lgUp') && !$currentElement.hasClass('categoryRefinement') && isMobileCategoryChecked() && isMobileCategoryChecked().length > 0) {\n categorySelected = 1;\n stopVeil = false;\n } else if (!Breakpoints.is('lgUp') && $currentElement.hasClass('categoryRefinement') && !$currentElement.find('input').is(':checked')) {\n categorySelected = 1;\n }\n\n let urlHref = getRefinementHref($currentElement);\n\n Breakpoints.is('lgUp') ? $.spinner().start() : $.veil().start();\n\n $(this).trigger('search:filter', e);\n $.ajax({\n url: urlHref,\n data: {\n page: $('.grid-footer').data('page-number'),\n selectedUrl: urlHref,\n categorySelected: categorySelected\n },\n method: 'GET',\n success: function (response) {\n parseResults(response, $currentElement);\n sendFilterDataGtmEvent(e);\n\n if (Breakpoints.is('lgUp')) {\n scrollAnimate(null, 0);\n updateStickySidebarDimensions();\n\n $.spinner().stop();\n\n $('.sticky-sidebar-container .collapse').on('show.bs.collapse', (el) => {\n // Desktop behavior\n if (Breakpoints.is('lgUp')) {\n closeRefinementsAccordion(el);\n }\n });\n\n } else {\n if (stopVeil || $currentElement.hasClass('view-all-renderer')) {\n scrollAnimate(null, 0);\n $.spinner().stop();\n }\n }\n // Handle open tabs\n if($(e.currentTarget).hasClass('attribute-refinement')) {\n $('#mobile-refinements .microcategoryFilterName').last().closest('.refinement-container').find('.collapse').collapse('hide');\n }\n ids.forEach((id) => {\n $('#mobile-refinements #'+id).collapse('show');\n $('#mobile-refinements #'+id).addClass('show');\n $('#desktop-refinement-container #'+id).collapse('show');\n $('#desktop-refinement-container #'+id).addClass('show');\n });\n },\n error: function () {\n Breakpoints.is('lgUp') ? $.spinner().stop() : $.veil().stop();\n }\n });\n });\n }\n\n applyFilterOnMobileLeave () {\n let lgDown = Breakpoints.get('lgDown');\n\n lgDown.on('leave', () => {\n if ($('body').hasClass('mobile-filters-selected')) {\n $('.mobile-apply-filters-button button.view-all-renderer').trigger('search:applyFilters');\n }\n $('body').trigger('search:closeMobileRefinements');\n });\n\n }\n\n refinementsAccordion () {\n $('.sticky-sidebar-container .collapse').on('show.bs.collapse', (el) => {\n // Desktop behavior\n if (Breakpoints.is('lgUp')) {\n closeRefinementsAccordion(el);\n } else {\n // Mobile behavior\n if ($(el.target).closest('.refinements').length) {\n el.stopPropagation();\n } else {\n // $('body').addClass('mobile-refinements-active');\n closeRefinementsAccordion(el);\n }\n }\n });\n\n $('[data-target=\"#mobile-refinements\"]').on('click', () => {\n if (!Breakpoints.is('lgUp')) {\n if ($('#mobile-refinements').hasClass('collapse')) {\n $('body').addClass('mobile-refinements-active');\n } else {\n $('body').removeClass('mobile-refinements-active');\n }\n }\n });\n\n $('body').on('click', '[data-target=\"#mobile-refinements\"], [data-target=\"#mobile-sort-order\"]', (e) => {\n mobileAccordionState.push($(e.currentTarget).attr('data-target'));\n\n if (mobileAccordionState.length >= 2 && mobileAccordionState[mobileAccordionState.length - 1] == mobileAccordionState[mobileAccordionState.length - 2]) {\n $('body').removeClass('mobile-refinements-active');\n mobileAccordionState = [];\n }\n });\n }\n\n showContentTab () {\n // Display content results from the search\n $('.container').on('click', '.content-search', function () {\n if ($('#content-search-results').html() === '') {\n getContent($(this), $('#content-search-results'));\n }\n });\n\n // Display the next page of content results from the search\n $('.container').on('click', '.show-more-content button', function () {\n getContent($(this), $('#content-search-results'));\n $('.show-more-content').remove();\n });\n }\n\n get init () {\n return {\n applyFilterOnMobileLeave: this.applyFilterOnMobileLeave(),\n closeMobileRefinements: this.closeMobileRefinements(),\n desktopStickyFilterSidebar: this.desktopStickyFilterSidebar(),\n gtmSendSearchData: this.gtmSendSearchData(),\n gtmSendProductClick: this.gtmSendProductClick(),\n showContentTab: this.showContentTab(),\n showMore: this.showMore(),\n sort: this.sort(),\n applyFilter: this.applyFilter(),\n changeLayout: this.changeLayout(),\n refinementsAccordion: this.refinementsAccordion(),\n desktopFilterSidbarOpen: this.desktopFilterSidbarOpen(),\n desktopFilterSidbarClose: this.desktopFilterSidbarClose(),\n handleHistoryStateChange: this.handleHistoryStateChange()\n };\n }\n}\n\nconst search = new Search;\nexport default search;\n","'use strict';\nvar base = require('./base');\nvar focusHelper = require('../components/focus');\n\n\n/**\n * Generates the modal window on the first call.\n *\n */\nfunction getModalHtmlElement () {\n if ($('#quickViewModal').length !== 0) {\n $('#quickViewModal').remove();\n }\n var htmlString = ''\n + '
'\n + ''\n + '
'\n + ''\n + '
'\n + '
'\n + ' '\n + ' '\n + '
'\n + '
'\n + '
'\n + '
'\n + '
'\n + '
';\n $('body').append(htmlString);\n}\n\n/**\n * @typedef {Object} QuickViewHtml\n * @property {string} body - Main Quick View body\n * @property {string} footer - Quick View footer content\n */\n\n/**\n * Parse HTML code in Ajax response\n *\n * @param {string} html - Rendered HTML from quickview template\n * @return {QuickViewHtml} - QuickView content components\n */\nfunction parseHtml (html) {\n var $html = $('
').append($.parseHTML(html));\n\n var body = $html.find('.product-quickview');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * replaces the content in the modal window on for the selected product variation.\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\n */\nfunction fillModalElement (selectedValueUrl) {\n $('.modal-body').spinner().start();\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n dataType: 'json',\n success: function (data) {\n var parsedHtml = parseHtml(data.renderedTemplate);\n\n $('.modal-body').empty();\n $('.modal-body').html(parsedHtml.body);\n $('.modal-footer').html(parsedHtml.footer);\n $('.full-pdp-link').text(data.quickViewFullDetailMsg);\n $('#quickViewModal .full-pdp-link').attr('href', data.productUrl);\n $('#quickViewModal .size-chart').attr('href', data.productUrl);\n $('#quickViewModal .modal-header .close .sr-only').text(data.closeButtonText);\n $('#quickViewModal .enter-message').text(data.enterDialogMessage);\n $('#quickViewModal').modal('show');\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\nclass QuickView {\n\n showQuickview () {\n $('body').on('click', '.quickview', function (e) {\n e.preventDefault();\n var selectedValueUrl = $(this).closest('a.quickview').attr('href');\n $(e.target).trigger('quickview:show');\n getModalHtmlElement();\n fillModalElement(selectedValueUrl);\n });\n }\n\n focusQuickview () {\n $('body').on('shown.bs.modal', '#quickViewModal', function () {\n $('#quickViewModal .close').focus();\n });\n }\n\n trapQuickviewFocus () {\n $('body').on('keydown', '#quickViewModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#quickViewModal',\n firstElementSelector: '.full-pdp-link',\n lastElementSelector: '.add-to-cart-global',\n nextToLastElementSelector: '.modal-footer .quantity-select'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n }\n\n showSpinner () {\n $('body').on('product:beforeAddToCart', function (e, data) {\n $(data).closest('.modal-content').spinner().start();\n });\n }\n\n hideDialog () {\n $('body').on('product:afterAddToCart', function () {\n $('#quickViewModal').modal('hide');\n });\n }\n\n beforeUpdateAttribute () {\n $('body').on('product:beforeAttributeSelect', function () {\n $('.modal.show .modal-content').spinner().start();\n });\n }\n\n updateAttribute () {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.modal.show .product-quickview>.bundle-items').length) {\n $('.modal.show').find(response.container).data('pid', response.data.product.id);\n $('.modal.show').find(response.container)\n .find('.product-id').text(response.data.product.id);\n } else if ($('.set-items').length) {\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n $('.modal.show .product-quickview').data('pid', response.data.product.id);\n $('.modal.show .full-pdp-link')\n .attr('href', response.data.product.selectedProductUrl);\n }\n });\n }\n\n updateAddToCart () {\n $('body').on('product:updateAddToCart', function (e, response) {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n\n // update global add to cart (single products, bundles)\n var dialog = $(response.$productContainer)\n .closest('.quick-view-dialog');\n\n $('.add-to-cart-global', dialog).attr('disabled',\n !$('.global-availability', dialog).data('ready-to-order')\n || !$('.global-availability', dialog).data('available')\n );\n });\n }\n\n updateAvailability () {\n $('body').on('product:updateAvailability', function (e, response) {\n // bundle individual products\n $('.product-availability', response.$productContainer)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available)\n .find('.availability-msg')\n .empty()\n .html(response.message);\n\n\n var dialog = $(response.$productContainer)\n .closest('.quick-view-dialog');\n\n if ($('.product-availability', dialog).length) {\n // bundle all products\n var allAvailable = $('.product-availability', dialog).toArray()\n .every(function (item) { return $(item).data('available'); });\n\n var allReady = $('.product-availability', dialog).toArray()\n .every(function (item) { return $(item).data('ready-to-order'); });\n\n $('.global-availability', dialog)\n .data('ready-to-order', allReady)\n .data('available', allAvailable);\n\n $('.global-availability .availability-msg', dialog).empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n } else {\n // single product\n $('.global-availability', dialog)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available)\n .find('.availability-msg')\n .empty()\n .html(response.message);\n }\n });\n }\n\n get init () {\n return {\n nonSelectAttribute: base.nonSelectAttribute(),\n selectAttribute: base.selectAttribute(),\n removeBonusProduct: base.removeBonusProduct(),\n selectBonusProduct: base.selectBonusProduct(),\n enableBonusProductSelection: base.enableBonusProductSelection(),\n showMoreBonusProducts: base.showMoreBonusProducts(),\n addBonusProductsToCart: base.addBonusProductsToCart(),\n availability: base.availability(),\n addToCart: base.addToCart(),\n showQuickview: this.showQuickview(),\n focusQuickview: this.focusQuickview(),\n trapQuickviewFocus: this.trapQuickviewFocus(),\n showSpinner: this.showSpinner(),\n hideDialog: this.hideDialog(),\n beforeUpdateAttribute: this.beforeUpdateAttribute(),\n updateAttribute: this.updateAttribute(),\n updateAddToCart: this.updateAddToCart(),\n updateAvailability: this.updateAvailability(),\n handleColorVariationSwatches: base.handleColorVariationSwatches()\n };\n }\n}\n\nconst quickView = new QuickView;\nexport default quickView;\n","'use strict';\n\nimport search from './search/search';\nimport quickView from './product/quickView';\nimport newsletterModal from './components/newsletterModal';\n\n/**\n * Initialize search js assets\n */\n\nconst searchInit = () => {\n quickView.init;\n search.init;\n newsletterModal();\n};\n\nif (document.readyState === 'loading') {\n document.addEventListener ('DOMContentLoaded', () => {\n searchInit();\n }, false);\n\n} else {\n searchInit();\n}\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","'use strict';\n\nmodule.exports = function (element, timing = 500) {\n // \"-200\" is here set to fix jQuery offset miscalculation\n let position = element && element.length ? element.offset().top - 200 : 0;\n\n $('html, body').animate({\n scrollTop: position\n }, timing);\n if (!element) {\n $('.logo-home').focus();\n }\n};\n","'use strict';\n\nvar alertNotification = require('../components/alertNotification');\nvar focusHelper = require('../components/focus');\nvar GtmEvents = require('../seo/gtm/gtmEvents');\n\n/**\n * Send data to dataLayer when add a product to cart\n */\nfunction gtmSendAddToCart (){\n var items = [];\n var product = {};\n var currency = $('.product-detail').attr('data-currency');\n product.name = $('.product-detail').attr('data-productname');\n product.id = $('.product-detail').attr('data-id');\n product.price = $('.product-detail').attr('data-price');\n product.brand = $('.product-detail').attr('data-brand');\n retrieveGTMcategories('.product-detail',product);\n //product.variant = productContainer.attr('data-variant');\n product.quantity = $( '#quantity-1 option:selected' ).text();\n\n items.push(product);\n\n GtmEvents.addToCart(currency,items);\n\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 || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').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\n ? $($el).closest('.product-detail').find('.quantity-select')\n : $('.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 * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues (attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.parent().addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.parent().removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable').parent().removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable').parent().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\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 processNonSwatchValues (attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $select = $productContainer.find($attr + ' .select-' + attr.id);\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url)\n .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n });\n if (!attr.values.find(function(v) {\n return v.selected;\n })) {\n $select.val($defaultOption.attr('value'));\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 * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs (attrs, $productContainer, msgs) {\n // Due project requirements, all attriutes (such as size and width) are 'swatch' values,\n // so we need to init also the processNonSwatchValues() because we have a select too\n attrs.forEach(function (attr) {\n processSwatchValues(attr, $productContainer, msgs);\n processNonSwatchValues(attr, $productContainer);\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 }\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 if (promotion.calloutMsg) {\n html += '
    ' + promotion.calloutMsg +\n '
    ';\n }\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 * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} options - Ajax response options from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions (options, $productContainer) {\n options.forEach(function (option) {\n var $optionEl = $productContainer.find('.product-option[data-option-id*=\"' + option.id\n + '\"]');\n option.values.forEach(function (value) {\n var valueEl = $optionEl.find('option[data-value-id*=\"' + value.id + '\"]');\n valueEl.val(value.url);\n });\n });\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 var isChoiceOfBonusProducts =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n if(response.product.price.lastPriceHtml) {\n // Update lowest price\n $('.omnibus-price').empty().append(response.product.price.lastPriceHtml);\n }\n\n // Update promotions\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, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\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,\n * 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 // sonar code smell\n // if (!($productContainer.parent('.bonus-product-item').length > 0)) {\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 product view when a product attribute is selected or deselected or when\n * 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) {\n\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.options, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer })\n .trigger('cart:productVariantUpdate', { productContainer: $productContainer.prevObject });\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\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 { body: body, footer: footer };\n}\n\n/**\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 + '
    '\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: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\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 */\nfunction handlePostCartAdd (response) {\n $('.minicart').trigger('count:update', response);\n var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n alertNotification.set({\n alertName: 'add-to-basket',\n alertOptions: {\n message: response.message,\n status: messageType\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 * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions ($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}\n\nfunction handleColorVariationSwatches () {\n $(document).off('click.swatches');\n $(window).off('resize.swatches');\n\n if ($('.color-attribute.has-background-image').length) {\n $('.color-values-container').addClass('has-background-images');\n } else {\n return;\n }\n\n /*\n Nasconde tutti gli swatches che non stanno in una riga\n Inserisce un indicatore del numero di variation nascoste\n */\n const hideColorVariationSwatches = () => {\n const containerRects = $('.color-values-container')[0].getBoundingClientRect();\n const swatches = $('.color-attribute');\n let outElementsCount = 0;\n\n swatches.each((i, el) => {\n const swatchRects = el.getBoundingClientRect();\n if (swatchRects.left > containerRects.right || swatchRects.right > containerRects.right) {\n $(el).addClass('d-none');\n outElementsCount++;\n } else {\n return;\n }\n });\n\n if (outElementsCount > 0) {\n swatches\n .eq(swatches.length - outElementsCount - 1)\n .append(\n $('').addClass('js-open-swatches-trigger open-swatches-trigger swatch-value').text(`+ ${outElementsCount + 1}`)\n );\n }\n };\n\n $(document).on('click.swatches', '.js-open-swatches-trigger', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n $('.color-values-container').addClass('open');\n $('.color-attribute').removeClass('d-none');\n $('.js-open-swatches-trigger').remove();\n\n return false;\n });\n\n $(window).on('resize.swatches', () => {\n if (!$('.color-values-container').hasClass('open')) {\n $('.color-attribute').removeClass('d-none');\n $('.js-open-swatches-trigger').remove();\n hideColorVariationSwatches();\n }\n });\n\n /*\n Inserisce il valore del colore selezionato accanto alla label \"colore\"\n */\n $('body').on('product:afterAttributeSelect', (e, data) => {\n data.data.product.variationAttributes.forEach(attr => {\n if (attr.id === 'color') {\n attr.values.forEach(value => {\n if (value.selected) {\n $('.js-current-color-value').text(value.displayValue);\n return;\n }\n });\n return;\n }\n });\n });\n\n hideColorVariationSwatches();\n}\n\n/**\n * Retrieve product categories for GTM\n *\n * @param {string} divClass - DOM element for current product\n * @param {object} prodObj - the object to save categories in\n * @param {Number} iter - product array index (if any)\n */\n\nfunction retrieveGTMcategories (divClass, prodObj, iter) {\n var categories = $(divClass).attr('data-categories');\n var categoriesArray = categories.split('|');\n for (let i = 0; i < categoriesArray.length; i++) {\n var k = i + 1;\n if (iter >= 0) {\n prodObj[iter]['category' + k] = categoriesArray[i];\n }\n else {\n prodObj['category' + k] = categoriesArray[i];\n }\n }\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n // Originally named as 'colorAttribute'. As per project requirements, all attriutes (such as size and width) are 'swatch' values, so they need to follow the same logic defined below, instead of the one defined under the 'selectAttribute' method\n nonSelectAttribute: function () {\n $(document).on('click', '.attributeSwatch button', function (e) {\n e.preventDefault();\n\n // As per client request, only NON-selected swatch values should trigger an ajax call\n if ($(this).attr('disabled') || $(this).find('.swatch-value').hasClass('selected')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n attributeSelect($(this).attr('data-url'), $productContainer);\n });\n },\n\n // As per project requirements, there are no select attributes. In case, simply restore the logic defined by the SFRA\n selectAttribute: function () {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this))\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n gtmSendAddToCart();\n $('body').trigger('product:afterAddToCart', data);\n\n // Trigger minicart open if no error is sent back from the server\n if (!data.error) {\n $('.minicart').trigger('minicart:open');\n }\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n selectBonusProduct: function () {\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 ;\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 removeBonusProduct: function () {\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 enableBonusProductSelection: function () {\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 showMoreBonusProducts: function () {\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 addBonusProductsToCart: function () {\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 =\n 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')\n .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 location.reload();\n }\n }, 3000);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n retrieveGTMcategories: retrieveGTMcategories,\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n handleColorVariationSwatches: handleColorVariationSwatches\n};\n"],"sourceRoot":""}