{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/wishlist.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/plpAddToCart.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/customUtil.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/shopByCategory.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/base.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/seoCopy.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/worldOfAo.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/homePage.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/shopByCategorySlot.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/homepage/video.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/experience/shopTheLook.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","setTabNextFocus","focusParams","event","keyCode","firstFocusableEl","$","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","is","length","nextToLastElementSelector","linkElements","shiftKey","focus","preventDefault","displayMessage","data","button","status","spinner","stop","success","addClass","attr","append","msg","setTimeout","empty","removeAttr","toggleHeartIcon","wishlistItems","each","pid","this","match","indexOf","replace","toggleHeartIconForLoggedIn","toggleHeartIconForGuest","find","hasClass","localStorage","removeItem","getItem","JSON","parse","addToWishlist","document","on","e","$addToWishlistBtn","url","closest","html","optionId","optionVal","$sizeSelectionsEl","isPDP","start","window","Resources","PLEASE_SELECT_SIZE","ajax","type","dataType","trigger","updateHeartIcon","isLoggedIn","redirectUrl","location","error","err","removeClass","saveToBrowserStorage","push","setItem","stringify","moveToWishlist","$targetElement","itemToMove","actionUrl","productID","productName","uuid","displayMessageAndRemoveFromCart","complete","initWishlistItems","response","container","oldPid","product","id","loggedIn","Urls","getWishlistItems","items","unshift","baseHelper","require","chooseBonusProducts","bonusUrl","remove","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","pliUUID","addToCartUrl","pageSize","labels","selectprods","method","$html","parsedHtml","renderedTemplate","body","parseHTML","footer","children","text","enterDialogMessage","closeButtonText","modal","initAddToBag","stopImmediatePropagation","$el","$this","not","form","pidsObj","childProducts","quantity","href","newBonusDiscountLineItem","keys","addedPid","miniCartReportingUrl","reportingURL","css","vgroupid","target","currentTarget","toggleClass","$colorAlert","prepend","prev","off","parent","variationGroup","changeColorSwatch","listprice","salesprice","salesBeforePromo","imgfront","imgfrontalt","imgback","imgbackalt","percentageoff","isNew","isBestSeller","exclusiveBadge","exclusiveBadgeID","salesBadge","defaultVariantId","hasSalePricebook","promotions","quickviewUrl","src","alt","content","formatted","listPriceText","salesPriceText","hide","show","salesBeforePromoContainer","insertAfter","badge","newToSale","NEW_TO_SALE","split","join","SitePreferences","IS_INTERNATIONAL","toLowerCase","$targetEl","updateProductPromotions","onSizeClick","include","forEach","isMobile","mobileAgentHash","idx","userAgent","navigator","isSafari","iosVersion","test","platform","v","appVersion","parseInt","getCookie","cookiename","cookie","startC","endC","decodeURI","substring","setCookie","cookieName","cookieValue","nDays","today","Date","expire","setTime","getTime","escape","toGMTString","isEmpty","val","trim","removeQueryParam","urlparts","String","getUrlQueryParameterValue","queryParamName","currentParameter","urlQueryVariables","undefined","decodedString","decodeURIComponent","slickOptions","mobileFirst","slidesToShow","infinite","arrows","centerMode","centerPadding","outerWidth","dots","responsive","breakpoint","settings","slick","base","focusHelper","handleVariantResponse","$productContainer","attributeType","isVaraint","isChoiceOfBonusProducts","parents","videoObj","pdpVideoID","pdpVideoLink","variationAttributes","attrs","msgs","attrsWithSwatches","values","attrValue","$attrValue","$swatchButton","selected","siblings","assistiveSelectedText","selectable","processSwatchValues","sizesHtml","map","size","updateSizeUrl","$attr","enableBackInStockNotification","processNonSwatchValues","updateAttrs","resources","productType","readyToOrder","productImages","images","primaryImageUrls","large","imgs","hiResImags","indexAdjustment","carousel","carouselId","index","title","appendTo","first","detach","createCarousel","thumbnailCarousel","template","j","$thumbnailCarouselItems","querySelectorAll","imagesLoaded","observer","IntersectionObserver","entries","delayInMS","entry","isIntersecting","Promise","resolve","then","observe","thumbnailUrl","thumbnail_large","createThumbnailCarousel","replaceWith","price","promotionsHtml","availabilityValue","availabilityMessages","availability","messages","availabiityContainer","available","classType","message","info_selectforstock","updateAvailability","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","updateQuantities","quantities","optionsHtml","attributeSelect","selectedValueUrl","redirect","updateOptions","getOptions","options","$elOption","urlValue","selectedValueId","toArray","methods","editBonusProducts","focusChooseBonusProductModal","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","selectAttribute","promotion","calloutMsg","addToCart","setPids","$thisBtnAdd","$messageQtyError","$messageNoStock","prop","qty","getPidValue","getQuantitySelected","$addToCartBtn","handlePostCartAdd","sfmcCartInfo","_etmc","selectBonusProduct","removeBonusProduct","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","backToTop","animate","scrollTop","readMoreListener","parentClass","parentString","$currentParent","ready","_event","$productDetail","atcPid","getQuantitySelector","resetUrl","parseHtml","messageType","$checkIcon","clone","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","$selected","count","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","productId","errorMessage","msgSuccess","reload","processInclude","seoCopy","$overlay","$title","customUtil","getAttribute","handleShopTheLookMobile","intersecting","targetClassList","querySelector","classList","add","threshold","element"],"mappings":"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","file":"default/js/homePage.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 = 96);\n","'use strict';\r\n\r\nmodule.exports = {\r\n setTabNextFocus: function (focusParams) {\r\n var KEYCODE_TAB = 9;\r\n var isTabPressed = focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB;\r\n\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n\r\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\r\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\r\n\r\n if (\r\n $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled') ||\r\n $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).length === 0\r\n ) {\r\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\r\n if ($('.product-quickview.product-set').length > 0) {\r\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\r\n lastFocusableEl = linkElements[linkElements.length - 1];\r\n }\r\n }\r\n\r\n if (focusParams.event.shiftKey) {\r\n /* shift + tab */ if ($(':focus').is(firstFocusableEl)) {\r\n lastFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n } /* tab */ else if ($(':focus').is(lastFocusableEl)) {\r\n // eslint-disable-line\r\n firstFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n }\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} data - data returned from the server's ajax call\r\n * @param {Object} button - button that was clicked to add a product to the wishlist\r\n */\r\nfunction displayMessage(data, button) {\r\n /* OTB Code modification start */\r\n $.spinner().stop();\r\n var status;\r\n if (data.success) {\r\n button.addClass('active');\r\n status = 'alert-success';\r\n button.attr('aria-pressed', 'true');\r\n } else {\r\n // button.removeClass('active');\r\n status = 'error-message';\r\n }\r\n /* OTB Code modification ends */\r\n if ($('.add-to-wishlist-messages').length === 0) {\r\n $('header').append('
');\r\n }\r\n $('.add-to-wishlist-messages').append('
' + data.msg + '
');\r\n\r\n setTimeout(function() {\r\n $('.add-to-wishlist-messages').empty();\r\n button.removeAttr('disabled');\r\n }, 5000);\r\n}\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} data - data returned from the server's ajax call\r\n */\r\nfunction displayMessageAndRemoveFromCart(data) {\r\n var status = data.success ? 'alert-success' : 'alert-danger';\r\n\r\n if ($('.add-to-wishlist-messages').length === 0) {\r\n $('header').append('
');\r\n }\r\n $('.add-to-wishlist-messages').append('
' + data.msg + '
');\r\n\r\n setTimeout(function() {\r\n $('.add-to-wishlist-messages').empty();\r\n }, 1500);\r\n var $targetElement = $('a[data-pid=\"' + data.pid + '\"]')\r\n .closest('.product-info')\r\n .find('.remove-product');\r\n var itemToMove = {\r\n actionUrl: $targetElement.data('action'),\r\n productID: $targetElement.data('pid'),\r\n productName: $targetElement.data('name'),\r\n uuid: $targetElement.data('uuid')\r\n };\r\n $('body').trigger('afterMovedtoWishlist', itemToMove);\r\n}\r\n\r\n/**\r\n * Toggle heart icons\r\n * @param {Object} wishlistItems - wish list items\r\n */\r\nfunction toggleHeartIcon(wishlistItems) {\r\n $('.add-to-wish-list:not(.active)').each(function() {\r\n var pid = $(this).attr('class').match(/\\bpid-\\S*\\b/);\r\n if (pid && pid.length && wishlistItems.indexOf(pid[0].replace('pid-', '')) >= 0) {\r\n $(this).addClass('active');\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Toggle heart icons for logged-in user\r\n * @param {Object} wishlistItems - wish list items\r\n */\r\nfunction toggleHeartIconForLoggedIn(wishlistItems) {\r\n toggleHeartIcon(wishlistItems);\r\n}\r\n\r\n/**\r\n * Toggle heart icons for guest user\r\n */\r\nfunction toggleHeartIconForGuest () {\r\n if ($('.header-container').find('.heart-active-icon').hasClass('d-none')) {\r\n localStorage.removeItem('wishlistItems');\r\n } else {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n if (wishlistItems.length) {\r\n toggleHeartIcon(wishlistItems);\r\n }\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n addToWishlist: function() {\r\n $(document).on('click', '.add-to-wish-list', function(e) {\r\n e.preventDefault();\r\n var $addToWishlistBtn = $(this);\r\n var url = $(this).data('href');\r\n var button = $(this);\r\n var pid = $(this)\r\n .closest('.product-detail')\r\n .find('.product-id')\r\n .html();\r\n var optionId = $(this)\r\n .closest('.product-detail')\r\n .find('.product-option')\r\n .attr('data-option-id');\r\n var optionVal = $(this)\r\n .closest('.product-detail')\r\n .find('.options-select option:selected')\r\n .attr('data-value-id');\r\n optionId = optionId || null;\r\n optionVal = optionVal || null;\r\n var $sizeSelectionsEl = $('.size-selections'),\r\n isPDP = $('.product-detail.product-pdp').length > 0;\r\n\r\n if (!url || !pid) {\r\n return;\r\n }\r\n\r\n $.spinner().start();\r\n $(this).attr('disabled', true);\r\n\r\n //stop the script execution and display an error message if there's no size selected\r\n //only trigger the size validation on PDP\r\n if (isPDP && $sizeSelectionsEl.length && $sizeSelectionsEl.find('.size-attribute[aria-checked=\"true\"]').length === 0) {\r\n const errMsg = {\r\n success: false,\r\n msg: window.Resources.PLEASE_SELECT_SIZE\r\n }\r\n\r\n displayMessage(errMsg, button);\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'post',\r\n dataType: 'json',\r\n data: {\r\n pid: pid,\r\n optionId: optionId,\r\n optionVal: optionVal\r\n },\r\n success: function(data) {\r\n if (data.success) {\r\n $.spinner().stop();\r\n $('body').trigger('gtm:product:afterAddToWishlist', data);\r\n this.updateHeartIcon();\r\n if (!data.isLoggedIn && data.redirectUrl) {\r\n window.location = data.redirectUrl;\r\n } else {\r\n displayMessage(data, button);\r\n }\r\n } else {\r\n this.updateHeartIcon();\r\n displayMessage(data, button);\r\n }\r\n },\r\n error: function(err) {\r\n displayMessage(err, button);\r\n },\r\n updateHeartIcon: function () {\r\n $addToWishlistBtn.closest('.product-detail').find('.add-to-wish-list').addClass('active');\r\n $('.header-container').find('.heart-active-icon').removeClass('d-none');\r\n $('.header-container').find('.heart-inactive-icon').addClass('d-none');\r\n this.saveToBrowserStorage();\r\n },\r\n saveToBrowserStorage: function () {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems && wishlistItems.length) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n } else {\r\n wishlistItems = [];\r\n }\r\n if (wishlistItems.indexOf(pid) === -1) {\r\n wishlistItems.push(pid);\r\n localStorage.setItem('wishlistItems', JSON.stringify(wishlistItems));\r\n }\r\n }\r\n });\r\n });\r\n },\r\n moveToWishlist: function() {\r\n $('body').on('click', '.product-move', function(e) {\r\n e.preventDefault();\r\n var url = $(this).attr('href');\r\n var pid = $(this).data('pid');\r\n var optionId = $(this)\r\n .closest('.product-info')\r\n .find('.lineItem-options-values')\r\n .data('option-id');\r\n var optionVal = $(this)\r\n .closest('.product-info')\r\n .find('.lineItem-options-values')\r\n .data('value-id');\r\n optionId = optionId || null;\r\n optionVal = optionVal || null;\r\n if (!url || !pid) {\r\n return;\r\n }\r\n\r\n $.spinner().start();\r\n $.ajax({\r\n url: url,\r\n type: 'post',\r\n dataType: 'json',\r\n data: {\r\n pid: pid,\r\n optionId: optionId,\r\n optionVal: optionVal\r\n },\r\n success: function(data) {\r\n $('body').trigger('gtm:product:afterAddToWishlist', data);\r\n displayMessageAndRemoveFromCart(data);\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n initWishlistItems: function() {\r\n toggleHeartIconForGuest();\r\n\r\n $('body').on('search:updateProducts', function () {\r\n toggleHeartIconForGuest();\r\n });\r\n\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n try {\r\n var $addToWishlistBtn = response.container.find('.add-to-wish-list');\r\n var oldPid = $addToWishlistBtn.attr('class').match(/\\bpid-\\S*\\b/);\r\n if (oldPid && oldPid.length) {\r\n $addToWishlistBtn\r\n .removeClass('active')\r\n .removeClass(oldPid)\r\n .addClass('pid-' + response.data.product.id);\r\n toggleHeartIconForGuest();\r\n }\r\n // eslint-disable-next-line no-shadow\r\n } catch (e) {\r\n // Error encountered while updating wishlist heart icon\r\n }\r\n });\r\n\r\n // For Logged in user\r\n if (window.Resources.loggedIn) {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n if (wishlistItems.length) {\r\n if (wishlistItems[0] !== 'loggedIn') {\r\n $.ajax({\r\n url: window.Urls.getWishlistItems,\r\n dataType: 'json',\r\n success: function (data) {\r\n wishlistItems = data.items;\r\n if (data.items && data.items.length) {\r\n toggleHeartIconForLoggedIn(wishlistItems);\r\n }\r\n wishlistItems.unshift('loggedIn');\r\n localStorage.setItem('wishlistItems', JSON.stringify(wishlistItems));\r\n }\r\n });\r\n } else {\r\n toggleHeartIconForLoggedIn(wishlistItems);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","var baseHelper = require('../product/base');\r\n\r\n/**\r\n * Retrieves the relevant pid value\r\n * @param {jquery} $el - DOM container for a given add to cart button\r\n * @return {string} - value to be used when adding product to cart\r\n */\r\nfunction getPidValue($el) {\r\n var pid;\r\n pid = $el.data('pid');\r\n return pid;\r\n}\r\n\r\n/**\r\n * Parses the html for a modal window\r\n * @param {string} html - representing the body and footer of the modal window\r\n *\r\n * @return {Object} - Object with properties body and footer.\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
').append($.parseHTML(html));\r\n\r\n var body = $html.find('.product-quickview');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @param {Object} data - data object used to fill in dynamic portions of the html\r\n */\r\nfunction chooseBonusProducts(data) {\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n if ($('#chooseBonusProductModal').length !== 0) {\r\n $('#chooseBonusProductModal').remove();\r\n }\r\n var bonusUrl;\r\n if (data.bonusChoiceRuleBased) {\r\n bonusUrl = data.showProductsUrlRuleBased;\r\n } else {\r\n bonusUrl = data.showProductsUrlListBased;\r\n }\r\n\r\n var htmlString =\r\n '' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n data.labels.selectprods +\r\n '' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
';\r\n $('body').append(htmlString);\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n $.ajax({\r\n url: bonusUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (response) {\r\n var parsedHtml = parseHtml(response.renderedTemplate);\r\n $('#chooseBonusProductModal .modal-body').empty();\r\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\r\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\r\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\r\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\r\n $('#chooseBonusProductModal').modal('show');\r\n },\r\n complete: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\r\n * @param {string} response - ajax response from clicking the add to cart button\r\n */\r\nfunction handlePostCartAdd(response) {\r\n $('.minicart').trigger('count:update', response);\r\n // show add to cart toast\r\n if (response.newBonusDiscountLineItem && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\r\n chooseBonusProducts(response.newBonusDiscountLineItem);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n initAddToBag: function () {\r\n var addtoBag = function (e) {\r\n if ($(this).closest('.plp-atc').length) {\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n var addToCartUrl;\r\n var pid;\r\n var pidsObj;\r\n var $this = $(this);\r\n\r\n $this.addClass('focusable'); // Make this element the only item to accept :focus styling while this size is being added to cart to avoid confusion\r\n\r\n if ($(this).closest('.js-product-tile-pd').length === 0) {\r\n $this.closest('.product-tile').removeClass('active-hover');\r\n }\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .not('.hidden')\r\n .removeClass('hover-active');\r\n\r\n pid = getPidValue($(this));\r\n\r\n addToCartUrl = $(this)\r\n .closest('.add-to-cart')\r\n .data('addtocartUrl');\r\n\r\n var form = {\r\n pid: pid,\r\n pidsObj: pidsObj,\r\n childProducts: [],\r\n quantity: 1\r\n };\r\n\r\n form.options = [];\r\n\r\n if (addToCartUrl) {\r\n $.ajax({\r\n url: addToCartUrl,\r\n method: 'POST',\r\n data: form,\r\n success: function (data) {\r\n // reload cart page if plp is on cart page\r\n if ($('.cart.cart-page').length > 0) {\r\n window.location.href = data.redirectUrl;\r\n } else {\r\n handlePostCartAdd(data);\r\n data.addedPid = pid;\r\n $('body').trigger('product:afterAddToCart', data);\r\n $this\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag.desktop')\r\n .addClass('hidden');\r\n $this.closest('.add-to-cart[data-attr=\"size\"]').addClass('hidden');\r\n $this\r\n .closest('.product-tile')\r\n .find('.add-to-cart-variation-group.plp-atc.collapsible-xs')\r\n .removeClass('active');\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hover-active');\r\n baseHelper.miniCartReportingUrl(data.reportingURL);\r\n }\r\n },\r\n error: function () {\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hover-active');\r\n },\r\n complete: function () {\r\n $this.removeClass('focusable'); // Make other elements focusable after size has been added to cart\r\n $('.js-size-select-show').removeClass('hidden');\r\n }\r\n });\r\n }\r\n };\r\n\r\n $('body')\r\n .on('click', '.plp-atc .size-selections .size-attribute', addtoBag)\r\n .on('mouseleave', '.add-to-cart-variation-group', function () {\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'absolute' &&\r\n $(this).closest('.js-product-tile-pd').length === 0\r\n ) {\r\n $(this)\r\n .find('.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n })\r\n .on('mouseleave', '.plp-search-results .product-tile, .products-container .product-tile, .product-page-bottom-section .product-tile', function () {\r\n $(this).addClass('active-hover');\r\n $(this)\r\n .find('.js-plp-add-to-bag')\r\n .removeClass('hidden');\r\n })\r\n .on('mouseleave', '.js-product-tile-pd .js-product-tile.active-hover', function(e) {\r\n $(this)\r\n .find('.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(this)\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n })\r\n .on(\r\n 'mouseenter',\r\n '.container-fluid.search-results.plp-search-results .active-hover .js-plp-add-to-bag, .products-container .active-hover .js-plp-add-to-bag, .product-page-bottom-section .active-hover .js-plp-add-to-bag',\r\n function (e) {\r\n if ($(this).css('position') === 'absolute') {\r\n var vgroupid = $(e.target)\r\n .closest('.product-tile')\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart.hidden[data-group-pid=\"' + vgroupid + '\"]')\r\n .removeClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .addClass('hovered');\r\n }\r\n }\r\n )\r\n .on(\r\n 'mouseenter',\r\n '.js-product-tile-pd .js-product-tile.active-hover',\r\n function(e) {\r\n var vgroupid = $(e.currentTarget)\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n $(e.currentTarget)\r\n .closest('.product')\r\n .find('.row.add-to-cart.hidden[data-group-pid=\"' + vgroupid + '\"]')\r\n .removeClass('hidden');\r\n }\r\n )\r\n .on(\r\n 'click',\r\n '.container-fluid.search-results.plp-search-results .js-plp-add-to-bag, .products-container .plp-atc .js-plp-add-to-bag, .product-page-bottom-section .plp-atc .js-plp-add-to-bag',\r\n function (e) {\r\n e.preventDefault();\r\n var vgroupid;\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'relative'\r\n ) {\r\n vgroupid = $(e.target)\r\n .closest('.product-tile')\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n if (vgroupid) {\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .not('[data-group-pid=\"' + vgroupid + '\"]')\r\n .addClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"][data-group-pid=\"' + vgroupid + '\"]')\r\n .toggleClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n }\r\n if (!vgroupid) {\r\n var $colorAlert = $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .find('.color.alert');\r\n if ($colorAlert.length) {\r\n $colorAlert.remove();\r\n }\r\n $colorAlert = $('Please select color.');\r\n $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .prepend($colorAlert);\r\n setTimeout(function () {\r\n $colorAlert.remove();\r\n }, 5000);\r\n $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .removeClass('active');\r\n }\r\n }\r\n )\r\n .on(\r\n 'click',\r\n '.container-fluid.search-results.plp-search-results button.color-attribute, .products-container button.color-attribute, .product-recommendation-details button.color-attribute',\r\n function (e) {\r\n e.preventDefault();\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'relative'\r\n ) {\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n $(this)\r\n .closest('.tile-body')\r\n .prev('.add-to-cart-variation-group')\r\n .removeClass('active');\r\n }\r\n )\r\n .off('click', '.js-product-tile-pd, js-product-tile-container')\r\n .on('click', '.js-size-select-show', function() {\r\n $('.js-size-select-show').removeClass('hidden');\r\n $(this).addClass('hidden');\r\n $(this).closest('.js-product-tile-container').find('.add-to-cart').removeClass('hidden');\r\n })\r\n .on('click', '.js-size-select-close', function() {\r\n $(this).closest('.js-product-tile-container').find('.js-size-select-show').removeClass('hidden');\r\n $(this).closest('.js-product-tile-container').find('.add-to-cart').addClass('hidden');\r\n })\r\n .on('click', function (e) {\r\n if (!$(e.target).hasClass('accordion-icon') && (!($(e.target).hasClass('js-size-select-show') ||\r\n $(e.target).parent().hasClass('js-size-select-show') ||\r\n $(e.target).hasClass('js-plp-add-to-bag')))\r\n ) {\r\n var variationGroup = $('.add-to-cart-variation-group');\r\n if (variationGroup && variationGroup.hasClass('active')) {\r\n variationGroup.removeClass('active');\r\n variationGroup.find('.js-plp-add-to-bag').attr('aria-expanded', 'false');\r\n variationGroup.find('.add-to-cart').addClass('hidden');\r\n }\r\n\r\n $('.js-size-select-show').removeClass('hidden');\r\n $('.add-to-cart').addClass('hidden');\r\n }\r\n });\r\n },\r\n changeColorSwatch: $(document).on('click', '.product-tile .color-swatches button', function () {\r\n var $this = $(this);\r\n var container = $this.closest('.product-tile');\r\n\r\n container.find('button').removeClass('active');\r\n container.find('button.color-attribute').each(function () {\r\n $(this).attr('aria-checked', false);\r\n });\r\n $this.addClass('active').attr('aria-checked', true);\r\n var listprice = $this.data('listprice');\r\n var salesprice = $this.data('salesprice');\r\n var salesBeforePromo = $this.data('salespricebeforepromo');\r\n var imgfront = $this.data('imgfront');\r\n var imgfrontalt = $this.data('imgfrontalt');\r\n var imgback = $this.data('imgback');\r\n var imgbackalt = $this.data('imgbackalt');\r\n var percentageoff = $this.data('percentageoff');\r\n var isNew = $this.data('isnew');\r\n var isBestSeller = $this.data('isbestseller');\r\n var exclusiveBadge = $this.data('exclusivebadge');\r\n var exclusiveBadgeID = $this.data('exclusivebadgeid');\r\n var salesBadge = $this.data('salesbadge');\r\n var id = $this.data('id');\r\n var defaultVariantId = $this.data('defaultvariantid');\r\n var hasSalePricebook = $this.data('hassalepricebook');\r\n var promotions = $this.data('promotions');\r\n var url = $this.data('url');\r\n var quickviewUrl = '/on/demandware.store/Sites-aando-Site/default/Product-ShowQuickView?pid=' + id;\r\n var name = $this.data('varname');\r\n container.find('.link').text(name);\r\n container.find('.front-card').attr({ src: imgfront, alt: imgfrontalt });\r\n container.find('.back-card').attr({ src: imgback, alt: imgbackalt });\r\n container.find('a').attr({ href: url });\r\n container.find('a.quickview').attr({ href: quickviewUrl });\r\n\r\n container.find('.bfx-sku').text(defaultVariantId);\r\n if (!listprice) {\r\n container.find('.strike-through').hide();\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n container.find('.percent-value').text('');\r\n } else {\r\n var isHidden = container.find('.strike-through').css('display');\r\n if (isHidden === 'none') {\r\n container.find('.strike-through').css('display', '');\r\n }\r\n\r\n if (container.find('.bfx-sale-price').length) {\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: listprice.value })\r\n .text(listprice.formatted);\r\n container.find('.percent-value').text(percentageoff);\r\n } else {\r\n var listPriceText =\r\n '' +\r\n '' +\r\n '' +\r\n listprice.formatted +\r\n '' +\r\n '' +\r\n '';\r\n var salesPriceText =\r\n '' + salesprice.formatted + '';\r\n var percentText = '' + percentageoff + '';\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.price-section').html(salesPriceText);\r\n } else {\r\n container.find('.price-section').html(listPriceText + salesPriceText);\r\n }\r\n }\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n }\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.strike-through').hide();\r\n container.find('.percent-value').text('');\r\n }\r\n // eslint-disable-next-line no-unused-expressions\r\n salesprice &&\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n // eslint-disable-next-line no-unused-expressions\r\n isNew &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('New Arrivals');\r\n // eslint-disable-next-line no-unused-expressions\r\n isBestSeller &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('Best Seller');\r\n\r\n if (!isNew && !isBestSeller) {\r\n container.find('.badge-product').hide();\r\n\r\n if (salesBadge) {\r\n container.find('.badge-product').show();\r\n }\r\n }\r\n\r\n var salesBeforePromoContainer = container.find('.sales-before-promo');\r\n if (salesBeforePromo) {\r\n if (salesBeforePromoContainer.length) {\r\n salesBeforePromoContainer.show().text(salesBeforePromo.formatted);\r\n } else {\r\n $(`${salesBeforePromo.formatted}`).insertAfter(container.find('.list'));\r\n }\r\n } else if (salesBeforePromoContainer.length) {\r\n salesBeforePromoContainer.hide();\r\n }\r\n\r\n // display exclusive badge when not empty and if sales badge is empty\r\n container.find('.badge-product').removeClass('badge-exclusive');\r\n\r\n if (exclusiveBadge && !salesBadge) {\r\n container.find('.badge-product').show();\r\n container.find('.badge-product').addClass('badge-exclusive');\r\n var badge;\r\n\r\n if (!container.find('.badge-product').length) {\r\n badge = '
' + exclusiveBadge + '
';\r\n container.find('.product-detail').append(badge);\r\n } else {\r\n badge = '' + exclusiveBadge + '';\r\n container.find('.badge-product').html(badge);\r\n }\r\n\r\n // hide the 'New to Sale' badge for international users\r\n var newToSale = window.Resources.NEW_TO_SALE.split(' ').join('');\r\n if (window.SitePreferences.IS_INTERNATIONAL && exclusiveBadgeID === newToSale.toLowerCase()) {\r\n container.find('.badge-product').hide();\r\n }\r\n }\r\n\r\n /* re-renders the applicable promotions if the product has active product-level promotions */\r\n var $targetEl = container.find('.applicable-promotions');\r\n if (promotions && promotions.length > 0) {\r\n baseHelper.updateProductPromotions($targetEl, promotions);\r\n } else {\r\n $targetEl.empty();\r\n }\r\n }),\r\n onSizeClick: $('body').on('click', '.product-page-bottom-section .size-value, .products-container .size-value', function () {\r\n if ($(this).hasClass('selected') === true) {\r\n $(this).removeClass('selected');\r\n } else {\r\n $(this).addClass('selected');\r\n }\r\n })\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function (include) {\r\n if (typeof include === 'function') {\r\n include();\r\n } else if (typeof include === 'object') {\r\n Object.keys(include).forEach(function (key) {\r\n if (typeof include[key] === 'function') {\r\n include[key]();\r\n }\r\n });\r\n }\r\n};\r\n","exports.isMobile = function () {\r\n var mobileAgentHash = ['mobile', 'tablet', 'phone', 'ipad', 'ipod', 'android', 'blackberry', 'windows ce', 'opera mini', 'palm'];\r\n var idx = 0;\r\n var isMobile = false;\r\n var userAgent = navigator.userAgent.toLowerCase();\r\n\r\n while (mobileAgentHash[idx] && !isMobile) {\r\n isMobile = userAgent.indexOf(mobileAgentHash[idx]) >= 0;\r\n idx++;\r\n }\r\n return isMobile;\r\n};\r\n\r\nexports.isSafari = function () {\r\n return navigator.userAgent.match(/Version\\/[\\d\\.]+.*Safari/);\r\n};\r\n\r\nexports.iosVersion = function () {\r\n if (/iP(hone|od|ad)/.test(navigator.platform)) {\r\n var v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];\r\n }\r\n return null;\r\n};\r\n\r\nexports.getCookie = function (cookiename) {\r\n if (document.cookie.length > 0) {\r\n startC = document.cookie.indexOf(cookiename + '=');\r\n if (startC != -1) {\r\n startC += cookiename.length + 1;\r\n endC = document.cookie.indexOf(';', startC);\r\n if (endC == -1) endC = document.cookie.length;\r\n return decodeURI(document.cookie.substring(startC, endC));\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexports.setCookie = function (cookieName, cookieValue, nDays) {\r\n var today = new Date();\r\n var expire = new Date();\r\n if (nDays == null || nDays == 0) nDays = 1;\r\n expire.setTime(today.getTime() + 3600000 * 24 * nDays);\r\n document.cookie = cookieName + '=' + escape(cookieValue) + '; expires=' + expire.toGMTString() + '; path=/';\r\n};\r\n\r\nexports.isEmpty = function (val) {\r\n // remove whitespaces\r\n if (typeof val === 'string') {\r\n val = $.trim(val);\r\n }\r\n\r\n return !val || val.length === 0;\r\n};\r\n\r\nexports.removeQueryParam = function (url) {\r\n var urlparts = String(url).split('?');\r\n if (urlparts.length >= 2) {\r\n return urlparts[0];\r\n }\r\n return url;\r\n};\r\n\r\nexports.getUrlQueryParameterValue = function (queryParamName, url) {\r\n var urlQueryVariables = url.split('&');\r\n var currentParameter;\r\n\r\n for (var i = 0; i < urlQueryVariables.length; i++) {\r\n currentParameter = urlQueryVariables[i].split('=');\r\n\r\n if (currentParameter[0] === queryParamName) {\r\n if (currentParameter[1] === undefined) {\r\n return true;\r\n }\r\n var decodedString = decodeURIComponent(currentParameter[1]);\r\n if (decodedString.split('|').length > 0) {\r\n return decodedString.split('|').join('+').replace(/\\s/g, '-').toLowerCase();\r\n }\r\n return decodedString.replace(/\\s/g, '-').toLowerCase();\r\n }\r\n }\r\n return false;\r\n};\r\n","function initComponent() {\r\n var slickOptions = {\r\n mobileFirst: true,\r\n slidesToShow: 1,\r\n infinite: false,\r\n arrows: false,\r\n centerMode: true,\r\n centerPadding:\r\n $('.category-carousel')\r\n .find('.category')\r\n .outerWidth() / 2,\r\n dots: true,\r\n responsive: [\r\n {\r\n breakpoint: 1024,\r\n settings: {\r\n arrows: false,\r\n centerMode: false,\r\n slidesToShow: 4\r\n }\r\n }\r\n ]\r\n };\r\n if ($('.category-carousel').length > 0) {\r\n $('.category-carousel').slick(slickOptions);\r\n }\r\n}\r\n\r\nmodule.exports = initComponent;\r\n","/* eslint-env es6*/\r\n/* eslint-disable no-use-before-define */\r\n/* global _etmc */\r\n'use strict';\r\nvar base = require('base/product/base');\r\nvar focusHelper = require('../components/focus');\r\n\r\n/**\r\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\r\n * @param {Object} response - response from Ajax call\r\n * @param {Object} response.product - Product object\r\n * @param {string} response.product.id - Product ID\r\n * @param {jQuery} $productContainer - DOM element for a given product.\r\n * @param {string} attributeType - the attribute clicked (e.g size, color, quantity)\r\n * @param {Object[]} response.product.variationAttributes - Product attributes\r\n * @param {Object[]} response.product.images - Product images\r\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\r\n * attributes have been selected. Used partially to\r\n * determine whether the Add to Cart button can be enabled\r\n */\r\nfunction handleVariantResponse(response, $productContainer, attributeType) {\r\n var isChoiceOfBonusProducts = $productContainer.parents('.choose-bonus-product-dialog').length > 0;\r\n var isVaraint;\r\n var videoObj = null;\r\n\r\n if (response.product.pdpVideoID) {\r\n videoObj = {\r\n pdpVideoID: response.product.pdpVideoID,\r\n pdpVideoLink: response.product.pdpVideoLink\r\n };\r\n }\r\n if (response.product.variationAttributes) {\r\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\r\n isVaraint = response.product.productType === 'variant';\r\n if (isChoiceOfBonusProducts && isVaraint) {\r\n $productContainer.parent('.bonus-product-item').data('pid', response.product.id);\r\n\r\n $productContainer.parent('.bonus-product-item').data('ready-to-order', response.product.readyToOrder);\r\n }\r\n }\r\n\r\n if (attributeType === 'color') {\r\n // Update primary images\r\n var productImages = response.product.images;\r\n var primaryImageUrls = productImages.large;\r\n var hiResPrimaryImageUrls = productImages['hi-res'] !== 'undefined' ? productImages['hi-res'] : primaryImageUrls;\r\n createCarousel(primaryImageUrls, $productContainer, hiResPrimaryImageUrls, videoObj);\r\n createThumbnailCarousel(primaryImageUrls, $productContainer, videoObj);\r\n }\r\n\r\n // Update pricing\r\n if (!isChoiceOfBonusProducts) {\r\n var $priceSelector = $('.prices .price', $productContainer).length ? $('.prices .price', $productContainer) : $('.prices .price');\r\n $priceSelector.replaceWith(response.product.price.html);\r\n }\r\n\r\n // Update promotions\r\n $productContainer\r\n .find('.promotions')\r\n .empty()\r\n .html(response.product.promotionsHtml);\r\n\r\n updateAvailability(response, $productContainer);\r\n\r\n if (isChoiceOfBonusProducts) {\r\n var $selectButton = $productContainer.find('.select-bonus-product');\r\n $selectButton.trigger('bonusproduct:updateSelectButton', {\r\n product: response.product,\r\n $productContainer: $productContainer\r\n });\r\n } else {\r\n // Enable \"Add to Cart\" button if all required attributes have been selected\r\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global')\r\n .trigger('product:updateAddToCart', {\r\n product: response.product,\r\n $productContainer: $productContainer\r\n })\r\n .trigger('product:statusUpdate', response.product);\r\n }\r\n\r\n // Update attributes\r\n $productContainer\r\n .find('.main-attributes')\r\n .empty()\r\n .html(getAttributesHtml(response.product.attributes));\r\n}\r\n\r\n/**\r\n * Retrieve contextual quantity selector\r\n * @param {jquery} $el - DOM container for the relevant quantity\r\n * @return {jquery} - quantity selector DOM container\r\n */\r\nfunction getQuantitySelector($el) {\r\n return $el && $('.set-items').length\r\n ? $($el)\r\n .closest('.product-detail')\r\n .find('.quantity-select')\r\n : $('.quantity-select');\r\n}\r\n\r\n/**\r\n * Retrieve contextual size selector\r\n * @param {jquery} $el - DOM container for the relevant sizes\r\n * @return {jquery} - sizes selector DOM container\r\n */\r\nfunction getSizesSelector($el) {\r\n return $($el)\r\n .closest('.product-detail')\r\n .find('.size-selections');\r\n}\r\n\r\n/**\r\n * Process the attribute values for an attribute that has image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction processSwatchValues(attr, $productContainer, msgs) {\r\n attr.values.forEach(function(attrValue) {\r\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' + attrValue.value + '\"]');\r\n var $swatchButton = $attrValue.parent();\r\n\r\n if (attrValue.selected) {\r\n $attrValue.addClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\r\n } else {\r\n $attrValue.removeClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').empty();\r\n }\r\n\r\n if (attrValue.url) {\r\n $swatchButton.attr('data-url', attrValue.url);\r\n } else {\r\n $swatchButton.removeAttr('data-url');\r\n }\r\n\r\n // Disable if not selectable\r\n $attrValue.removeClass('selectable unselectable');\r\n\r\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\r\n });\r\n}\r\n\r\n/**\r\n * Process attribute values associated with an attribute that does not have image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction processNonSwatchValues(attr, $productContainer) {\r\n var $attr = '[data-attr=\"' + attr.id + '\"]';\r\n\r\n attr.values.forEach(function(attrValue) {\r\n var $attrValue = $productContainer.find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\r\n $attrValue.data('url', attrValue.url).removeAttr('disabled');\r\n\r\n if (!attrValue.selectable && !attrValue.enableBackInStockNotification) {\r\n $attrValue.attr('disabled', true);\r\n }\r\n if (!attrValue.selectable && attrValue.enableBackInStockNotification) {\r\n if ($attrValue.hasClass('size-attribute')) {\r\n $attrValue.addClass('show-backinstock-module');\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Dynamically creates Bootstrap carousel from response containing images\r\n * @param {Object[]} imgs - Array of large product images,along with related information\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Array} hiResImags - array of images\r\n * @param {Object} videoObj - object containing product video\r\n */\r\nfunction createCarousel(imgs, $productContainer, hiResImags, videoObj) {\r\n var indexAdjustment = !!videoObj ? 0 : 1;\r\n var carousel = $productContainer.find('.carousel');\r\n $(carousel).carousel('dispose');\r\n var carouselId = $(carousel).attr('id');\r\n $(carousel)\r\n .empty()\r\n .append(\r\n '
    ' +\r\n $(carousel).data('prev') +\r\n '' +\r\n $(carousel).data('next') +\r\n ''\r\n );\r\n for (var i = 0; i < imgs.length; i++) {\r\n var index = i ? i + indexAdjustment : i;\r\n $(\r\n '
    \"'
    '\r\n ).appendTo($(carousel).find('.carousel-inner'));\r\n $('
  1. ').appendTo($(carousel).find('.carousel-indicators'));\r\n if (!i && videoObj) {\r\n $(`
    \r\n \r\n
    \r\n
    \r\n
    `).appendTo($(carousel).find('.carousel-inner'));\r\n $('
  2. ').appendTo($(carousel).find('.carousel-indicators'));\r\n }\r\n }\r\n $($(carousel).find('.carousel-item'))\r\n .first()\r\n .addClass('active');\r\n $($(carousel).find('.carousel-indicators > li'))\r\n .first()\r\n .addClass('active');\r\n if (imgs.length === 1) {\r\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\r\n }\r\n $(carousel).carousel();\r\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\r\n}\r\n\r\n/**\r\n * Dynamically creates thumbnail carousel from response containing images\r\n * @param {Object[]} imgs - Array of large product images,along with related information\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} videoObj - object containing product video\r\n */\r\nfunction createThumbnailCarousel(imgs, $productContainer, videoObj) {\r\n var indexAdjustment = !!videoObj ? 0 : 1;\r\n var thumbnailCarousel = $productContainer.find('.thumbnail-carousel');\r\n\r\n // clear the active styling for the current selected thumbnail\r\n thumbnailCarousel.find('.thumbnail-carousel__item').removeClass('thumbnail-carousel__item--active');\r\n\r\n var template = '';\r\n\r\n $(thumbnailCarousel)\r\n .empty()\r\n .append(template);\r\n\r\n var setActiveThumbnail = function(delayInMS) {\r\n return new Promise(function(resolve) {\r\n setTimeout(resolve, delayInMS);\r\n });\r\n };\r\n\r\n var $thumbnailCarouselItems = document.querySelectorAll('.thumbnail-carousel__item');\r\n\r\n var imagesLoaded = 0;\r\n var observer = new IntersectionObserver(function(entries) {\r\n entries.forEach(function(entry) {\r\n if (entry.isIntersecting) {\r\n imagesLoaded++;\r\n }\r\n });\r\n\r\n if (\r\n imagesLoaded > 2 &&\r\n $(entries[0].target)\r\n .find('img')\r\n .is(':visible')\r\n ) {\r\n setActiveThumbnail(2000).then(function() {\r\n if (!$(entries[0].target).hasClass('thumbnail-carousel__item--active')) {\r\n $(entries[0].target).addClass('thumbnail-carousel__item--active');\r\n }\r\n });\r\n }\r\n }, {});\r\n\r\n $thumbnailCarouselItems.forEach(function(carousel) {\r\n observer.observe(carousel);\r\n });\r\n\r\n if (!!videoObj) {\r\n $.ajax({\r\n type: 'GET',\r\n url: 'https://vimeo.com/api/v2/video/' + videoObj.pdpVideoID + '.json',\r\n dataType: 'json',\r\n success: function (data) {\r\n var thumbnailUrl = data[0].thumbnail_large;\r\n $('.video-thumbnail').attr('src', thumbnailUrl);\r\n $('.pdp-main-video').attr('poster', thumbnailUrl);\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Routes the handling of attribute processing depending on whether the attribute has image\r\n * swatches or not\r\n *\r\n * @param {Object} attrs - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction updateAttrs(attrs, $productContainer, msgs) {\r\n // Currently, the only attribute type that has image swatches is Color.\r\n var attrsWithSwatches = ['color'];\r\n\r\n attrs.forEach(function(attr) {\r\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\r\n processSwatchValues(attr, $productContainer, msgs);\r\n updateSizeUrl(attrs[1], $productContainer);\r\n } else {\r\n processNonSwatchValues(attr, $productContainer);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Routes the handling of size attribute processing depending on whether the attribute has image\r\n * swatches or not\r\n *\r\n * @param {Object} attr - Size attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction updateSizeUrl(attr, $productContainer) {\r\n var sizesHtml = attr.values\r\n .map(function(size) {\r\n var selectable = size.selectable ? 'selectable' : 'unselectable';\r\n var selected = size.selected ? 'selected' : '';\r\n\r\n return (\r\n ''\r\n );\r\n })\r\n .join('');\r\n getSizesSelector($productContainer)\r\n .empty()\r\n .html(sizesHtml);\r\n}\r\n\r\n/**\r\n * Updates the availability status in the Product Detail Page\r\n *\r\n * @param {Object} response - Ajax response object after an\r\n * attribute value has been [de]selected\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n */\r\nfunction updateAvailability(response, $productContainer) {\r\n var availabilityValue = '';\r\n var availabilityMessages = response.product.availability.messages;\r\n var availabiityContainer = $productContainer.find('.product-description .availability');\r\n if (!response.product.available) {\r\n if (availabiityContainer.hasClass('hide-incart')) {\r\n availabiityContainer.removeClass('hide-incart');\r\n }\r\n } else if (!availabiityContainer.hasClass('hide-incart')) {\r\n availabiityContainer.addClass('hide-incart');\r\n }\r\n availabiityContainer.data('available', response.product.available);\r\n if (!response.product.readyToOrder) {\r\n availabilityValue = '
  3. ' + response.resources.info_selectforstock + '
  4. ';\r\n } else if (response.product.availability.classType === 'qty-err') {\r\n availabilityValue = '
  5. Please select a lesser quantity to update
  6. ';\r\n } else {\r\n availabilityMessages.forEach(function(message) {\r\n availabilityValue += '
  7. ' + message + '
  8. ';\r\n });\r\n }\r\n\r\n $($productContainer).trigger('product:updateAvailability', {\r\n product: response.product,\r\n $productContainer: $productContainer,\r\n message: availabilityValue,\r\n resources: response.resources\r\n });\r\n}\r\n\r\n/**\r\n * Generates html for product attributes section\r\n *\r\n * @param {array} attributes - list of attributes\r\n * @return {string} - Compiled HTML\r\n */\r\nfunction getAttributesHtml(attributes) {\r\n if (!attributes) {\r\n return '';\r\n }\r\n\r\n var html = '';\r\n\r\n attributes.forEach(function(attributeGroup) {\r\n if (attributeGroup.ID === 'mainAttributes') {\r\n attributeGroup.attributes.forEach(function(attribute) {\r\n html += '
    ' + attribute.label + ': ' + attribute.value + '
    ';\r\n });\r\n }\r\n });\r\n\r\n return html;\r\n}\r\n\r\n/**\r\n * @typedef UpdatedOptionValue\r\n * @type Object\r\n * @property {string} id - Option value ID for look up\r\n * @property {string} url - Updated option value selection URL\r\n */\r\n\r\n/**\r\n * @typedef OptionSelectionResponse\r\n * @type Object\r\n * @property {string} priceHtml - Updated price HTML code\r\n * @property {Object} options - Updated Options\r\n * @property {string} options.id - Option ID\r\n * @property {UpdatedOptionValue[]} options.values - Option values\r\n */\r\n\r\n/**\r\n * Updates DOM using post-option selection Ajax response\r\n *\r\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n */\r\nfunction updateOptions(optionsHtml, $productContainer) {\r\n // Update options\r\n $productContainer\r\n .find('.product-options')\r\n .empty()\r\n .html(optionsHtml);\r\n}\r\n\r\n/**\r\n * @typespec UpdatedQuantity\r\n * @type Object\r\n * @property {boolean} selected - Whether the quantity has been selected\r\n * @property {string} value - The number of products to purchase\r\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\r\n * etc.\r\n */\r\n\r\n/**\r\n * Updates the quantity DOM elements post Ajax call\r\n * @param {UpdatedQuantity[]} quantities -\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction updateQuantities(quantities, $productContainer) {\r\n if (!($productContainer.parent('.bonus-product-item').length > 0)) {\r\n var optionsHtml = quantities\r\n .map(function(quantity) {\r\n var selected = quantity.selected ? ' selected ' : '';\r\n return '';\r\n })\r\n .join('');\r\n getQuantitySelector($productContainer)\r\n .empty()\r\n .html(optionsHtml);\r\n }\r\n}\r\n\r\n/**\r\n * updates the product view when a product attribute is selected or deselected or when\r\n * changing quantity\r\n * @param {string} selectedValueUrl - the Url for the selected variation value\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n * @param {string} attributeType - the attribute clicked (e.g size, color, quantity)\r\n */\r\nfunction attributeSelect(selectedValueUrl, $productContainer, attributeType) {\r\n if (selectedValueUrl) {\r\n $('body').trigger('product:beforeAttributeSelect', { url: selectedValueUrl, container: $productContainer });\r\n\r\n $.ajax({\r\n url: `${selectedValueUrl}&variationType=${attributeType}`,\r\n method: 'GET',\r\n success: function(data) {\r\n if (data.redirect) {\r\n window.location.href = data.redirect;\r\n return;\r\n }\r\n handleVariantResponse(data, $productContainer, attributeType);\r\n updateOptions(data.product.optionsHtml, $productContainer);\r\n updateQuantities(data.product.quantities, $productContainer);\r\n $('body').trigger('product:afterAttributeSelect', { data: data, container: $productContainer, attributeType });\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @return {string} - The provided URL to use when adding a product to the cart\r\n */\r\nfunction getAddToCartUrl() {\r\n return $('.add-to-cart-url').val();\r\n}\r\n\r\n/**\r\n * Parses the html for a modal window\r\n * @param {string} html - representing the body and footer of the modal window\r\n *\r\n * @return {Object} - Object with properties body and footer.\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
    ').append($.parseHTML(html));\r\n\r\n var body = $html.find('.choice-of-bonus-product');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @param {Object} data - data object used to fill in dynamic portions of the html\r\n */\r\nfunction chooseBonusProducts(data) {\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n if ($('#chooseBonusProductModal').length !== 0) {\r\n $('#chooseBonusProductModal').remove();\r\n }\r\n var bonusUrl;\r\n if (data.bonusChoiceRuleBased) {\r\n bonusUrl = data.showProductsUrlRuleBased;\r\n } else {\r\n bonusUrl = data.showProductsUrlListBased;\r\n }\r\n\r\n var htmlString =\r\n '' +\r\n '
    ' +\r\n '' +\r\n '
    ' +\r\n '' +\r\n '
    ' +\r\n '
    ' +\r\n ' ' +\r\n data.labels.selectprods +\r\n '' +\r\n ' ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ';\r\n $('body').append(htmlString);\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n $.ajax({\r\n url: bonusUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(response) {\r\n var parsedHtml = parseHtml(response.renderedTemplate);\r\n $('#chooseBonusProductModal .modal-body').empty();\r\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\r\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\r\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\r\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\r\n $('#chooseBonusProductModal').modal('show');\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\r\n * @param {string} response - ajax response from clicking the add to cart button\r\n * @param {jQuery} $addToCartBtn = add to cart button clicked\r\n */\r\nfunction handlePostCartAdd(response, $addToCartBtn) {\r\n $('.minicart').trigger('count:update', response);\r\n\r\n var $messageQtyError = $addToCartBtn.closest('.product-detail').find('.message.qty-err');\r\n var $messageNoStock = $addToCartBtn.closest('.product-detail').find('.message.no-stock');\r\n if ($messageQtyError.length || $messageNoStock.length) {\r\n $addToCartBtn.prop('disabled', true);\r\n return;\r\n }\r\n // show add to cart toast\r\n if (response.newBonusDiscountLineItem && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\r\n chooseBonusProducts(response.newBonusDiscountLineItem);\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\r\n * items with their selected variants\r\n *\r\n * @return {string[]} - List of selected bundle product item ID's\r\n */\r\nfunction getChildProducts() {\r\n var childProducts = [];\r\n $('.bundle-item').each(function() {\r\n childProducts.push({\r\n pid: $(this)\r\n .find('.product-id')\r\n .text(),\r\n quantity: parseInt(\r\n $(this)\r\n .find('label.quantity')\r\n .data('quantity'),\r\n 10\r\n )\r\n });\r\n });\r\n\r\n return childProducts.length ? JSON.stringify(childProducts) : [];\r\n}\r\n\r\n/**\r\n * Retrieve product options\r\n *\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n * @return {string} - Product options and their selected values\r\n */\r\nfunction getOptions($productContainer) {\r\n var options = $productContainer\r\n .find('.product-option')\r\n .map(function() {\r\n var $elOption = $(this).find('.options-select');\r\n var urlValue = $elOption.val();\r\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]').data('value-id');\r\n return {\r\n optionId: $(this).data('option-id'),\r\n selectedValueId: selectedValueId\r\n };\r\n })\r\n .toArray();\r\n\r\n return JSON.stringify(options);\r\n}\r\n\r\nmodule.exports = {\r\n attributeSelect: attributeSelect,\r\n methods: {\r\n editBonusProducts: function(data) {\r\n chooseBonusProducts(data);\r\n }\r\n },\r\n\r\n focusChooseBonusProductModal: function() {\r\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function() {\r\n $('#chooseBonusProductModal')\r\n .siblings()\r\n .attr('aria-hidden', 'true');\r\n $('#chooseBonusProductModal .close').focus();\r\n });\r\n },\r\n\r\n onClosingChooseBonusProductModal: function() {\r\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function() {\r\n $('#chooseBonusProductModal')\r\n .siblings()\r\n .attr('aria-hidden', 'false');\r\n });\r\n },\r\n\r\n trapChooseBonusProductModalFocus: function() {\r\n $('body').on('keydown', '#chooseBonusProductModal', function(e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#chooseBonusProductModal',\r\n firstElementSelector: '.close',\r\n lastElementSelector: '.add-bonus-products'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n\r\n colorAttribute: function() {\r\n $(document).on('click', '[data-attr=\"color\"] button', function(e) {\r\n e.preventDefault();\r\n\r\n if (\r\n $(this).attr('disabled') ||\r\n $(this)\r\n .find('.swatch-value')\r\n .hasClass('selected')\r\n ) {\r\n return;\r\n }\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n\r\n attributeSelect($(this).attr('data-url'), $productContainer, 'color');\r\n });\r\n },\r\n\r\n selectAttribute: function() {\r\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function(e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n attributeSelect(e.currentTarget.value, $productContainer, 'quantity');\r\n });\r\n },\r\n\r\n availability: function() {\r\n $(document).on('change', '.quantity-select', function(e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this)\r\n .closest('.modal-content')\r\n .find('.product-quickview');\r\n }\r\n\r\n if ($('.bundle-items', $productContainer).length === 0) {\r\n attributeSelect(\r\n $(e.currentTarget)\r\n .find('option:selected')\r\n .data('url'),\r\n $productContainer,\r\n 'quantity'\r\n );\r\n }\r\n });\r\n },\r\n updateProductPromotions: function($el, promotions) {\r\n if ($el.length && promotions.length) {\r\n $el.empty();\r\n\r\n var template = '';\r\n\r\n promotions.forEach(promotion => {\r\n template += `
    ${promotion.calloutMsg}
    `;\r\n });\r\n $el.html(template);\r\n }\r\n },\r\n addToCart: function() {\r\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function() {\r\n var addToCartUrl;\r\n var pid;\r\n var pidsObj;\r\n var setPids;\r\n var $thisBtnAdd = $(this);\r\n\r\n $('body').trigger('product:beforeAddToCart', this);\r\n\r\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\r\n var $messageQtyError = $(this)\r\n .closest('.product-detail')\r\n .find('.message.qty-err');\r\n var $messageNoStock = $(this)\r\n .closest('.product-detail')\r\n .find('.message.no-stock');\r\n if ($messageQtyError.length || $messageNoStock.length) {\r\n $.spinner().stop();\r\n $(this).prop('disabled', true);\r\n return;\r\n }\r\n\r\n setPids = [];\r\n\r\n $('.product-detail').each(function() {\r\n if (\r\n !$(this).hasClass('product-set-detail') &&\r\n $(this).find('.size-selections .size-attribute .size-value.selected') &&\r\n $(this).find('.quantity-select').length\r\n ) {\r\n setPids.push({\r\n pid: $(this)\r\n .find('.product-id')\r\n .text(),\r\n qty: $(this)\r\n .find('.quantity-select')\r\n .val(),\r\n options: getOptions($(this))\r\n });\r\n }\r\n });\r\n pidsObj = JSON.stringify(setPids);\r\n }\r\n\r\n pid = base.getPidValue($(this));\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this)\r\n .closest('.quick-view-dialog')\r\n .find('.product-detail');\r\n }\r\n\r\n addToCartUrl = getAddToCartUrl();\r\n\r\n var form = {\r\n pid: pid,\r\n pidsObj: pidsObj,\r\n childProducts: getChildProducts(),\r\n quantity: base.getQuantitySelected($(this))\r\n };\r\n\r\n if (!$('.bundle-item').length) {\r\n form.options = getOptions($productContainer);\r\n }\r\n\r\n $(this).trigger('updateAddToCartFormData', form);\r\n if (addToCartUrl) {\r\n $.ajax({\r\n url: addToCartUrl,\r\n method: 'POST',\r\n data: form,\r\n success: function(data) {\r\n handlePostCartAdd(data, $thisBtnAdd);\r\n data.addedPid = pid;\r\n if (!data.error) {\r\n $('body').trigger('product:afterAddToCart', data);\r\n }\r\n base.miniCartReportingUrl(data.reportingURL);\r\n if (data.sfmcCartInfo && typeof _etmc !== 'undefined') {\r\n _etmc.push(data.sfmcCartInfo);\r\n }\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n selectBonusProduct: base.selectBonusProduct,\r\n removeBonusProduct: base.removeBonusProduct,\r\n enableBonusProductSelection: base.enableBonusProductSelection,\r\n showMoreBonusProducts: base.showMoreBonusProducts,\r\n addBonusProductsToCart: base.addBonusProductsToCart,\r\n getPidValue: base.getPidValue,\r\n getQuantitySelected: base.getQuantitySelected,\r\n miniCartReportingUrl: base.miniCartReportingUrl,\r\n backToTop: function() {\r\n const $el = $('.back-to-top');\r\n\r\n if ($el.length > 0) {\r\n $el.on('click', () => {\r\n $('html, body').animate({ scrollTop: 0 }, 500);\r\n });\r\n }\r\n }\r\n};\r\n","module.exports = {\r\n readMoreListener: function (parentClass) {\r\n var parentString = '.' + parentClass;\r\n\r\n if ($(parentString + ' p').length > 0) {\r\n $(parentString + ' .text-show.d-none').removeClass('d-none');\r\n $(parentString + ' p:not(p:first-child)').addClass('d-none');\r\n }\r\n $(parentString).removeClass('d-none');\r\n\r\n $(parentString + ' .text-show').on('click', function () {\r\n var $currentParent = $(this).closest(parentString);\r\n $currentParent.find('p').removeClass('d-none');\r\n $currentParent.find('.text-show').addClass('d-none');\r\n $currentParent.find('.text-hide').removeClass('d-none');\r\n });\r\n\r\n $(parentString + ' .text-hide').on('click', function () {\r\n var $currentParent = $(this).closest(parentString);\r\n $currentParent.find('p:not(p:first-child)').addClass('d-none');\r\n $currentParent.find('.text-hide').addClass('d-none');\r\n $currentParent.find('.text-show').removeClass('d-none');\r\n });\r\n }\r\n};\r\n","'use strict';\r\n\r\n\r\n$(document).ready(function () {\r\n var $dropdown = $('.world-of-ao-content').find('.accordion-dropdown');\r\n $dropdown.on('dropdownValueSelected', function (_event, data) {\r\n window.location.href = data.value;\r\n });\r\n\r\n});\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n setTabNextFocus: function (focusParams) {\r\n var KEYCODE_TAB = 9;\r\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\r\n\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n\r\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\r\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\r\n\r\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\r\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\r\n if ($('.product-quickview.product-set').length > 0) {\r\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\r\n lastFocusableEl = linkElements[linkElements.length - 1];\r\n }\r\n }\r\n\r\n if (focusParams.event.shiftKey) /* shift + tab */ {\r\n if ($(':focus').is(firstFocusableEl)) {\r\n lastFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n } else /* tab */ {\r\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\r\n firstFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n }\r\n }\r\n};\r\n","'use strict';\r\nvar focusHelper = require('../components/focus');\r\n\r\n/**\r\n * Retrieves the relevant pid value\r\n * @param {jquery} $el - DOM container for a given add to cart button\r\n * @return {string} - value to be used when adding product to cart\r\n */\r\nfunction getPidValue($el) {\r\n var pid;\r\n\r\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\r\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\r\n } else if ($('.product-set-detail').length || $('.product-set').length) {\r\n pid = $($el).closest('.product-detail').find('.product-id').text();\r\n } else {\r\n // BF might be using element text or data attribute which is also used by add to cart in PDP. Use different attribute for ATC.\r\n var $productDetail = $('.product-detail:not(\".bundle-item\")');\r\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\r\n if ($productDetail.hasClass('bfx-price-product')) {\r\n var atcPid = $('.product-detail:not(\".bundle-item\")').data('addtocartPid');\r\n if (atcPid) {\r\n pid = atcPid;\r\n }\r\n }\r\n }\r\n\r\n return pid;\r\n}\r\n\r\n/**\r\n * Retrieve contextual quantity selector\r\n * @param {jquery} $el - DOM container for the relevant quantity\r\n * @return {jquery} - quantity selector DOM container\r\n */\r\nfunction getQuantitySelector($el) {\r\n return $el && $('.set-items').length\r\n ? $($el).closest('.product-detail').find('.quantity-select')\r\n : $('.quantity-select');\r\n}\r\n\r\n/**\r\n * Retrieves the value associated with the Quantity pull-down menu\r\n * @param {jquery} $el - DOM container for the relevant quantity\r\n * @return {string} - value found in the quantity input\r\n */\r\nfunction getQuantitySelected($el) {\r\n return getQuantitySelector($el).val();\r\n}\r\n\r\n/**\r\n * Process the attribute values for an attribute that has image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction processSwatchValues(attr, $productContainer, msgs) {\r\n attr.values.forEach(function (attrValue) {\r\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\r\n attrValue.value + '\"]');\r\n var $swatchButton = $attrValue.parent();\r\n\r\n if (attrValue.selected) {\r\n $attrValue.addClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\r\n } else {\r\n $attrValue.removeClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').empty();\r\n }\r\n\r\n if (attrValue.url) {\r\n $swatchButton.attr('data-url', attrValue.url);\r\n } else {\r\n $swatchButton.removeAttr('data-url');\r\n }\r\n\r\n // Disable if not selectable\r\n $attrValue.removeClass('selectable unselectable');\r\n\r\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\r\n });\r\n}\r\n\r\n/**\r\n * Process attribute values associated with an attribute that does not have image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction processNonSwatchValues(attr, $productContainer) {\r\n var $attr = '[data-attr=\"' + attr.id + '\"]';\r\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\r\n $defaultOption.attr('value', attr.resetUrl);\r\n\r\n attr.values.forEach(function (attrValue) {\r\n var $attrValue = $productContainer\r\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\r\n $attrValue.attr('value', attrValue.url)\r\n .removeAttr('disabled');\r\n\r\n if (!attrValue.selectable) {\r\n $attrValue.attr('disabled', true);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Routes the handling of attribute processing depending on whether the attribute has image\r\n * swatches or not\r\n *\r\n * @param {Object} attrs - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction updateAttrs(attrs, $productContainer, msgs) {\r\n // Currently, the only attribute type that has image swatches is Color.\r\n var attrsWithSwatches = ['color'];\r\n\r\n attrs.forEach(function (attr) {\r\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\r\n processSwatchValues(attr, $productContainer, msgs);\r\n } else {\r\n processNonSwatchValues(attr, $productContainer);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the availability status in the Product Detail Page\r\n *\r\n * @param {Object} response - Ajax response object after an\r\n * attribute value has been [de]selected\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n */\r\nfunction updateAvailability(response, $productContainer) {\r\n var availabilityValue = '';\r\n var availabilityMessages = response.product.availability.messages;\r\n if (!response.product.readyToOrder) {\r\n availabilityValue = '
  9. ' + response.resources.info_selectforstock + '
  10. ';\r\n } else {\r\n availabilityMessages.forEach(function (message) {\r\n availabilityValue += '
  11. ' + message + '
  12. ';\r\n });\r\n }\r\n\r\n $($productContainer).trigger('product:updateAvailability', {\r\n product: response.product,\r\n $productContainer: $productContainer,\r\n message: availabilityValue,\r\n resources: response.resources\r\n });\r\n}\r\n\r\n/**\r\n * Generates html for product attributes section\r\n *\r\n * @param {array} attributes - list of attributes\r\n * @return {string} - Compiled HTML\r\n */\r\nfunction getAttributesHtml(attributes) {\r\n if (!attributes) {\r\n return '';\r\n }\r\n\r\n var html = '';\r\n\r\n attributes.forEach(function (attributeGroup) {\r\n if (attributeGroup.ID === 'mainAttributes') {\r\n attributeGroup.attributes.forEach(function (attribute) {\r\n html += '
    ' + attribute.label + ': '\r\n + attribute.value + '
    ';\r\n });\r\n }\r\n });\r\n\r\n return html;\r\n}\r\n\r\n/**\r\n * @typedef UpdatedOptionValue\r\n * @type Object\r\n * @property {string} id - Option value ID for look up\r\n * @property {string} url - Updated option value selection URL\r\n */\r\n\r\n/**\r\n * @typedef OptionSelectionResponse\r\n * @type Object\r\n * @property {string} priceHtml - Updated price HTML code\r\n * @property {Object} options - Updated Options\r\n * @property {string} options.id - Option ID\r\n * @property {UpdatedOptionValue[]} options.values - Option values\r\n */\r\n\r\n/**\r\n * Updates DOM using post-option selection Ajax response\r\n *\r\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n */\r\nfunction updateOptions(optionsHtml, $productContainer) {\r\n\t// Update options\r\n $productContainer.find('.product-options').empty().html(optionsHtml);\r\n}\r\n\r\n/**\r\n * Dynamically creates Bootstrap carousel from response containing images\r\n * @param {Object[]} imgs - Array of large product images,along with related information\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n */\r\nfunction createCarousel(imgs, $productContainer) {\r\n var carousel = $productContainer.find('.carousel');\r\n $(carousel).carousel('dispose');\r\n var carouselId = $(carousel).attr('id');\r\n $(carousel).empty().append('
      ' + $(carousel).data('prev') + '' + $(carousel).data('next') + '');\r\n for (var i = 0; i < imgs.length; i++) {\r\n $('
      \"'
      ').appendTo($(carousel).find('.carousel-inner'));\r\n $('
    1. ').appendTo($(carousel).find('.carousel-indicators'));\r\n }\r\n $($(carousel).find('.carousel-item')).first().addClass('active');\r\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\r\n if (imgs.length === 1) {\r\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\r\n }\r\n $(carousel).carousel();\r\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\r\n}\r\n\r\n/**\r\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\r\n * @param {Object} response - response from Ajax call\r\n * @param {Object} response.product - Product object\r\n * @param {string} response.product.id - Product ID\r\n * @param {Object[]} response.product.variationAttributes - Product attributes\r\n * @param {Object[]} response.product.images - Product images\r\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\r\n * attributes have been selected. Used partially to\r\n * determine whether the Add to Cart button can be enabled\r\n * @param {jQuery} $productContainer - DOM element for a given product.\r\n */\r\nfunction handleVariantResponse(response, $productContainer) {\r\n var isChoiceOfBonusProducts =\r\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\r\n var isVaraint;\r\n if (response.product.variationAttributes) {\r\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\r\n isVaraint = response.product.productType === 'variant';\r\n if (isChoiceOfBonusProducts && isVaraint) {\r\n $productContainer.parent('.bonus-product-item')\r\n .data('pid', response.product.id);\r\n\r\n $productContainer.parent('.bonus-product-item')\r\n .data('ready-to-order', response.product.readyToOrder);\r\n }\r\n }\r\n\r\n // Update primary images\r\n var primaryImageUrls = response.product.images.large;\r\n createCarousel(primaryImageUrls, $productContainer);\r\n\r\n // Update pricing\r\n if (!isChoiceOfBonusProducts) {\r\n var $priceSelector = $('.prices .price', $productContainer).length\r\n ? $('.prices .price', $productContainer)\r\n : $('.prices .price');\r\n $priceSelector.replaceWith(response.product.price.html);\r\n }\r\n\r\n // Update promotions\r\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\r\n\r\n updateAvailability(response, $productContainer);\r\n\r\n if (isChoiceOfBonusProducts) {\r\n var $selectButton = $productContainer.find('.select-bonus-product');\r\n $selectButton.trigger('bonusproduct:updateSelectButton', {\r\n product: response.product, $productContainer: $productContainer\r\n });\r\n } else {\r\n // Enable \"Add to Cart\" button if all required attributes have been selected\r\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\r\n product: response.product, $productContainer: $productContainer\r\n }).trigger('product:statusUpdate', response.product);\r\n }\r\n\r\n // Update attributes\r\n $productContainer.find('.main-attributes').empty()\r\n .html(getAttributesHtml(response.product.attributes));\r\n}\r\n\r\n/**\r\n * @typespec UpdatedQuantity\r\n * @type Object\r\n * @property {boolean} selected - Whether the quantity has been selected\r\n * @property {string} value - The number of products to purchase\r\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\r\n * etc.\r\n */\r\n\r\n/**\r\n * Updates the quantity DOM elements post Ajax call\r\n * @param {UpdatedQuantity[]} quantities -\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction updateQuantities(quantities, $productContainer) {\r\n if (!($productContainer.parent('.bonus-product-item').length > 0)) {\r\n var optionsHtml = quantities.map(function (quantity) {\r\n var selected = quantity.selected ? ' selected ' : '';\r\n return '';\r\n }).join('');\r\n getQuantitySelector($productContainer).empty().html(optionsHtml);\r\n }\r\n}\r\n\r\n/**\r\n * updates the product view when a product attribute is selected or deselected or when\r\n * changing quantity\r\n * @param {string} selectedValueUrl - the Url for the selected variation value\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n */\r\nfunction attributeSelect(selectedValueUrl, $productContainer) {\r\n if (selectedValueUrl) {\r\n $('body').trigger('product:beforeAttributeSelect',\r\n { url: selectedValueUrl, container: $productContainer });\r\n\r\n $.ajax({\r\n url: selectedValueUrl,\r\n method: 'GET',\r\n success: function (data) {\r\n handleVariantResponse(data, $productContainer);\r\n updateOptions(data.product.optionsHtml, $productContainer);\r\n updateQuantities(data.product.quantities, $productContainer);\r\n $('body').trigger('product:afterAttributeSelect',\r\n { data: data, container: $productContainer });\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @return {string} - The provided URL to use when adding a product to the cart\r\n */\r\nfunction getAddToCartUrl() {\r\n return $('.add-to-cart-url').val();\r\n}\r\n\r\n/**\r\n * Parses the html for a modal window\r\n * @param {string} html - representing the body and footer of the modal window\r\n *\r\n * @return {Object} - Object with properties body and footer.\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
      ').append($.parseHTML(html));\r\n\r\n var body = $html.find('.choice-of-bonus-product');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @param {Object} data - data object used to fill in dynamic portions of the html\r\n */\r\nfunction chooseBonusProducts(data) {\r\n $('.modal-body').spinner().start();\r\n\r\n if ($('#chooseBonusProductModal').length !== 0) {\r\n $('#chooseBonusProductModal').remove();\r\n }\r\n var bonusUrl;\r\n if (data.bonusChoiceRuleBased) {\r\n bonusUrl = data.showProductsUrlRuleBased;\r\n } else {\r\n bonusUrl = data.showProductsUrlListBased;\r\n }\r\n\r\n var htmlString = ''\r\n + '
      '\r\n + ''\r\n + '
      '\r\n + ''\r\n + '
      '\r\n + '
      '\r\n + ' ' + data.labels.selectprods + ''\r\n + ' '\r\n + '
      '\r\n + '
      '\r\n + '
      '\r\n + '
      '\r\n + '
      '\r\n + '
      ';\r\n $('body').append(htmlString);\r\n $('.modal-body').spinner().start();\r\n\r\n $.ajax({\r\n url: bonusUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (response) {\r\n var parsedHtml = parseHtml(response.renderedTemplate);\r\n $('#chooseBonusProductModal .modal-body').empty();\r\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\r\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\r\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\r\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\r\n $('#chooseBonusProductModal').modal('show');\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\r\n * @param {string} response - ajax response from clicking the add to cart button\r\n */\r\nfunction handlePostCartAdd(response) {\r\n $('.minicart').trigger('count:update', response);\r\n var messageType = response.error ? 'alert-danger' : 'alert-success';\r\n // show add to cart toast\r\n if (response.newBonusDiscountLineItem\r\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\r\n chooseBonusProducts(response.newBonusDiscountLineItem);\r\n } else {\r\n if ($('.add-to-cart-messages').length === 0) {\r\n $('body').append(\r\n '
      '\r\n );\r\n }\r\n\r\n $('.add-to-cart-messages').append(\r\n '
      '\r\n + ''\r\n + response.message\r\n + '
      '\r\n )\r\n\r\n var $checkIcon = $('.check-icon-reference').clone();\r\n $('.add-to-cart-messages .icon-check').append($checkIcon);\r\n\r\n setTimeout(function () {\r\n $('.add-to-basket-alert').remove();\r\n }, 5000);\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\r\n * items with their selected variants\r\n *\r\n * @return {string[]} - List of selected bundle product item ID's\r\n */\r\nfunction getChildProducts() {\r\n var childProducts = [];\r\n $('.bundle-item').each(function () {\r\n childProducts.push({\r\n pid: $(this).find('.product-id').text(),\r\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\r\n });\r\n });\r\n\r\n return childProducts.length ? JSON.stringify(childProducts) : [];\r\n}\r\n\r\n/**\r\n * Retrieve product options\r\n *\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n * @return {string} - Product options and their selected values\r\n */\r\nfunction getOptions($productContainer) {\r\n var options = $productContainer\r\n .find('.product-option')\r\n .map(function () {\r\n var $elOption = $(this).find('.options-select');\r\n var urlValue = $elOption.val();\r\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\r\n .data('value-id');\r\n return {\r\n optionId: $(this).data('option-id'),\r\n selectedValueId: selectedValueId\r\n };\r\n }).toArray();\r\n\r\n return JSON.stringify(options);\r\n}\r\n\r\n/**\r\n * Makes a call to the server to report the event of adding an item to the cart\r\n *\r\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\r\n */\r\nfunction miniCartReportingUrl(url) {\r\n if (url) {\r\n $.ajax({\r\n url: url,\r\n method: 'GET',\r\n success: function () {\r\n // reporting urls hit on the server\r\n },\r\n error: function () {\r\n // no reporting urls hit on the server\r\n }\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n attributeSelect: attributeSelect,\r\n methods: {\r\n editBonusProducts: function (data) {\r\n chooseBonusProducts(data);\r\n }\r\n },\r\n\r\n focusChooseBonusProductModal: function () {\r\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\r\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\r\n $('#chooseBonusProductModal .close').focus();\r\n });\r\n },\r\n\r\n onClosingChooseBonusProductModal: function () {\r\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\r\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\r\n });\r\n },\r\n\r\n trapChooseBonusProductModalFocus: function () {\r\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#chooseBonusProductModal',\r\n firstElementSelector: '.close',\r\n lastElementSelector: '.add-bonus-products'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n\r\n colorAttribute: function () {\r\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\r\n e.preventDefault();\r\n\r\n if ($(this).attr('disabled')) {\r\n return;\r\n }\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n\r\n attributeSelect($(this).attr('data-url'), $productContainer);\r\n });\r\n },\r\n\r\n selectAttribute: function () {\r\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n attributeSelect(e.currentTarget.value, $productContainer);\r\n });\r\n },\r\n\r\n availability: function () {\r\n $(document).on('change', '.quantity-select', function (e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\r\n }\r\n\r\n if ($('.bundle-items', $productContainer).length === 0) {\r\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\r\n $productContainer);\r\n }\r\n });\r\n },\r\n\r\n addToCart: function () {\r\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\r\n var addToCartUrl;\r\n var pid;\r\n var pidsObj;\r\n var setPids;\r\n\r\n $('body').trigger('product:beforeAddToCart', this);\r\n\r\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\r\n setPids = [];\r\n\r\n $('.product-detail').each(function () {\r\n if (!$(this).hasClass('product-set-detail') && $(this).find('size-selections .size-attribute .size-value.selected') && $(this).find('.quantity-select').length) {\r\n setPids.push({\r\n pid: $(this).find('.product-id').text(),\r\n qty: $(this).find('.quantity-select').val(),\r\n options: getOptions($(this))\r\n });\r\n }\r\n });\r\n pidsObj = JSON.stringify(setPids);\r\n }\r\n\r\n pid = getPidValue($(this));\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\r\n }\r\n\r\n addToCartUrl = getAddToCartUrl();\r\n\r\n var form = {\r\n pid: pid,\r\n pidsObj: pidsObj,\r\n childProducts: getChildProducts(),\r\n quantity: getQuantitySelected($(this))\r\n };\r\n\r\n if (!$('.bundle-item').length) {\r\n form.options = getOptions($productContainer);\r\n }\r\n\r\n $(this).trigger('updateAddToCartFormData', form);\r\n if (addToCartUrl) {\r\n $.ajax({\r\n url: addToCartUrl,\r\n method: 'POST',\r\n data: form,\r\n success: function (data) {\r\n handlePostCartAdd(data);\r\n $('body').trigger('product:afterAddToCart', data);\r\n $.spinner().stop();\r\n miniCartReportingUrl(data.reportingURL);\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n selectBonusProduct: function () {\r\n $(document).on('click', '.select-bonus-product', function () {\r\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\r\n var pid = $(this).data('pid');\r\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\r\n var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\r\n var totalQty = 0;\r\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\r\n totalQty += $(this).data('qty');\r\n });\r\n totalQty += submittedQty;\r\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\r\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\r\n if (totalQty <= maxPids) {\r\n var selectedBonusProductHtml = ''\r\n + '
      '\r\n + '
      '\r\n + $choiceOfBonusProduct.find('.product-name').html()\r\n + '
      '\r\n + '
      '\r\n + '
      '\r\n ;\r\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\r\n $('.pre-cart-products').html(totalQty);\r\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\r\n } else {\r\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\r\n }\r\n });\r\n },\r\n removeBonusProduct: function () {\r\n $(document).on('click', '.selected-pid', function () {\r\n $(this).remove();\r\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\r\n var count = 0;\r\n if ($selected.length) {\r\n $selected.each(function () {\r\n count += parseInt($(this).data('qty'), 10);\r\n });\r\n }\r\n\r\n $('.pre-cart-products').html(count);\r\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\r\n });\r\n },\r\n enableBonusProductSelection: function () {\r\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\r\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\r\n (!response.product.readyToOrder || !response.product.available));\r\n var pid = response.product.id;\r\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\r\n });\r\n },\r\n showMoreBonusProducts: function () {\r\n $(document).on('click', '.show-more-bonus-products', function () {\r\n var url = $(this).data('url');\r\n $('.modal-content').spinner().start();\r\n $.ajax({\r\n url: url,\r\n method: 'GET',\r\n success: function (html) {\r\n var parsedHtml = parseHtml(html);\r\n $('.modal-body').append(parsedHtml.body);\r\n $('.show-more-bonus-products:first').remove();\r\n $('.modal-content').spinner().stop();\r\n },\r\n error: function () {\r\n $('.modal-content').spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n addBonusProductsToCart: function () {\r\n $(document).on('click', '.add-bonus-products', function () {\r\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\r\n var queryString = '?pids=';\r\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\r\n var pidsObject = {\r\n bonusProducts: []\r\n };\r\n\r\n $.each($readyToOrderBonusProducts, function () {\r\n var qtyOption =\r\n parseInt($(this)\r\n .data('qty'), 10);\r\n\r\n var option = null;\r\n if (qtyOption > 0) {\r\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\r\n option = {};\r\n option.optionId = $(this).data('optionid');\r\n option.productId = $(this).data('pid');\r\n option.selectedValueId = $(this).data('option-selected-value');\r\n }\r\n pidsObject.bonusProducts.push({\r\n pid: $(this).data('pid'),\r\n qty: qtyOption,\r\n options: [option]\r\n });\r\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\r\n }\r\n });\r\n queryString += JSON.stringify(pidsObject);\r\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\r\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\r\n $.spinner().start();\r\n $.ajax({\r\n url: url + queryString,\r\n method: 'POST',\r\n success: function (data) {\r\n $.spinner().stop();\r\n if (data.error) {\r\n $('#chooseBonusProductModal').modal('hide');\r\n if ($('.add-to-cart-messages').length === 0) {\r\n $('body').append('
      ');\r\n }\r\n $('.add-to-cart-messages').append(\r\n '
      '\r\n + data.errorMessage + '
      '\r\n );\r\n setTimeout(function () {\r\n $('.add-to-basket-alert').remove();\r\n }, 3000);\r\n } else {\r\n $('.configure-bonus-product-attributes').html(data);\r\n $('.bonus-products-step2').removeClass('hidden-xl-down');\r\n $('#chooseBonusProductModal').modal('hide');\r\n\r\n if ($('.add-to-cart-messages').length === 0) {\r\n $('body').append('
      ');\r\n }\r\n $('.minicart-quantity').html(data.totalQty);\r\n $('.add-to-cart-messages').append(\r\n '
      '\r\n + data.msgSuccess + '
      '\r\n );\r\n\r\n var $checkIcon = $('.check-icon-reference').clone();\r\n $('.add-to-cart-messages .icon-check').append($checkIcon);\r\n\r\n setTimeout(function () {\r\n $('.add-to-basket-alert').remove();\r\n if ($('.cart-page').length) {\r\n location.reload();\r\n }\r\n }, 1500);\r\n }\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n\r\n getPidValue: getPidValue,\r\n getQuantitySelected: getQuantitySelected,\r\n miniCartReportingUrl: miniCartReportingUrl\r\n};\r\n","'use strict';\r\n\r\nvar processInclude = require('base/util');\r\nvar seoCopy = require('./components/seoCopy');\r\n\r\n$(document).ready(function() {\r\n processInclude(require('./components/shopByCategory'));\r\n processInclude(require('./components/shopByCategorySlot'));\r\n processInclude(require('./components/plpAddToCart'));\r\n processInclude(require('./homepage/video'));\r\n processInclude(require('./product/wishlist'));\r\n processInclude(require('./worldOfAo'));\r\n\r\n seoCopy.readMoreListener('homepage-copy');\r\n processInclude(require('./experience/shopTheLook'));\r\n\r\n if ($('.homepage-promo-banner').length) {\r\n var $target = $('.homepage-promo-banner');\r\n var $overlay = $target.find('.banner-overlay');\r\n var $title = $overlay.find('.title');\r\n\r\n if ($overlay.length && $title.length) {\r\n $title.replaceWith(`

      ${$title.text().trim()}

      `);\r\n }\r\n }\r\n});\r\n","var customUtil = require('../customUtil');\r\n\r\nfunction initComponent() {\r\n var slickOptions = {\r\n mobileFirst: true,\r\n slidesToShow: 1,\r\n infinite: false,\r\n arrows: false,\r\n centerMode: true,\r\n centerPadding:\r\n $('.home-category-carousel')\r\n .find('.category')\r\n .outerWidth() / 2,\r\n dots: true,\r\n responsive: [\r\n {\r\n breakpoint: 1024,\r\n settings: \"unslick\"\r\n }\r\n ]\r\n };\r\n if ($('.home-shop-by-category .home-category-carousel').length > 0 && !customUtil.isMobile()) {\r\n $('.home-shop-by-category .home-category-carousel').slick(slickOptions);\r\n }\r\n}\r\n\r\nmodule.exports = initComponent;\r\n","$(document).ready(function () {\r\n $('.play-video').on('click', function () {\r\n $('#homepage-video')[0].src = $('#homepage-video')[0].getAttribute('data-src') + '?rel=0&autoplay=1';\r\n $('#homepage-video').removeClass('d-none');\r\n $('.custom-img').addClass('d-none');\r\n });\r\n});\r\n","module.exports = {\r\n handleShopTheLookMobile: function() {\r\n var options = {\r\n threshold: [0.5, 1]\r\n };\r\n \r\n var observer = new IntersectionObserver(function(entries) {\r\n entries.forEach(entry => {\r\n var intersecting = entry.isIntersecting;\r\n var targetClassList = document.querySelector('.stl .js-product-tile-pd').classList;\r\n\r\n if (intersecting) {\r\n targetClassList.add('shown');\r\n } else {\r\n targetClassList.remove('shown');\r\n }\r\n });\r\n }, options);\r\n \r\n var element = document.querySelector('.stl .js-stl-content');\r\n observer.observe(element);\r\n }\r\n};\r\n"],"sourceRoot":""}