{"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/csrf.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/utils/slick.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/utils/viewport.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/wishlist.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/wishlist/wishlist.js","webpack:///../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/wishlist.js","webpack:///../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/wishlist/wishlist.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/detail.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/pdpProductDetails.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/quickView.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/quickView.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/customUtil.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/base.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/domUtil.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/formValidation.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","updateTokens","data","csrf","$elem","tokenName","each","this","val","token","customUtil","require","setCarousel","$el","slickConfigs","isEmpty","keys","not","slick","destroyCarousel","hasClass","unslick","reinitCarousel","isInViewport","$element","elementTop","offset","top","elementBottom","outerHeight","viewportTop","window","scrollTop","viewportBottom","height","wishlist","processInclude","document","ready","on","remove","e","addClass","removeAttr","swatchVal","text","toLowerCase","base","focusHelper","getModalHtmlElement","append","fillModalElement","editProductUrl","spinner","start","ajax","url","method","dataType","success","html","$html","parsedHtml","renderedTemplate","body","parseHTML","find","footer","children","empty","closeButtonText","enterDialogMessage","modal","stop","error","showResponseMsg","res","status","msg","setTimeout","updatePublicStatus","listID","itemID","callback","type","err","displayErrorMessage","$elementAppendTo","renderNewPageOfItems","pageNumber","focusElementSelector","publicView","listUUID","scrollPosition","documentElement","newPageNumber","id","done","fail","removeFromWishlist","$elToAppend","listIsEmpty","removeClass","removeWishlistMsg","$elToAppendWL","viewProductViaEdit","attr","viewProductViaSelectAttribute","focusEditWishlistProductModal","siblings","onClosingEditWishlistProductModal","trapEditWishlistProductModalFocus","updateWishlistUpdateButton","response","$productContainer","product","readyToOrder","available","updateWishListItem","updateButtonBlock","closest","updateProductUrl","form","uuid","pid","getPidValue","context","toggleWishlistStatus","toggleWishlistItemStatus","el","prop","addToCartFromWishlist","addToCartUrl","pidsQty","stopImmediatePropagation","trigger","parseInt","quantity","options","JSON","stringify","addedPid","miniCartReportingUrl","reportingURL","moreWLItems","copyWishlistLink","$temp","select","execCommand","submitWishlistSearch","firstName","lastName","email","errorText","moreWLSearchResults","uuids","push","results","changedList","totalString","hits","forEach","hit","divString","urlTitle","urlText","showMore","initWishlist","$wishlistItems","pids","Resources","loggedIn","unshift","localStorage","setItem","baseDetails","availability","addToCart","updateAttributesAndDetails","showSpinner","updateAttribute","container","pdpVideoID","eq","productId","productType","defaultVariantId","updateAvailability","selectAttribute","attributeSelect","sizeChart","$prodSizeChart","$productDescContainer","isMobile","css","content","modalOptions","keyboard","backdrop","toggleClass","$sizeChart","has","target","copyProductLink","focusChooseBonusProductModal","pdpApplePay","isPdpSet","selectedVal","applePayButton","timeInt","$eddText","$eddPidDiv","limit","unHideEdd","trim","clearTimeout","videoId","thumbnailUrl","thumbnail_large","$videoButton","videoElement","paused","play","pause","include","attributesHtml","shortDescription","longDescription","updateAddToCart","enable","toArray","every","item","message","allAvailable","allReady","resources","info_selectforstock","domUtil","viewportUtil","baseHelper","formValidation","handleSetUnavailabilityMessage","unavailableItems","setUnavailableMessageOne","setUnavailableMessageMany","attributeType","recommendationsHtml","einsteinProductRecommendationsHtml","price","percentOffMark","standardPrice","list","formatted","sales","percentageOff","hasSalePricebook","salesPriceBeforePromo","salesBeforePromo","productContainer","priceTemplate","cloneNode","priceSection","queryFirst","priceContainer","strikeThroughContainer","priceElement","salesContainer","salesPriceElement","salesBeforPromoElement","percentOffContainer","percentOffElement","textContent","innerHTML","updateProductPrice","PdpVideoID","carousel","selectedProductID","carouselId","imageLength","appendTo","toFixed","selectedEddProductID","eddPreOrderDate","inStockDate","eddObj","zipcode","carrierCode","serviceCode","eddObject","narvar","earliestEDD","getPdpEDD","$targetEl","hasPromotions","promotions","updateProductPromotions","setProductDetailsDescTop","parentEl","$btnContainer","woh","topOffset","position","className","classType","errMessage","messages","ele","isSetItem","variationAttributes","output","variationAttribute","values","key1","$colorSelector","variationGroupID","selectable","enableBackInStockNotification","showBackInStockModule","displayValue","selected","displayvalue","join","parent","colorName","preOrderLabel","addToCartLabel","indexOf","hide","show","descriptionAndDetailsHtml","saleBadgingHtml","exclusiveBadgingHtml","productName","noSelectionCount","$setProducts","$setProduct","errorMessage","$productDetail","$container","undefined","animate","innerHeight","expandSizeGuide","collapseSizeGuide","historyPushCount","$this","groudId","isPdp","pageTitle","title","color","exclusiveBadge","salesBadge","$jsProductTile","currentLocale","newPageUrl","history","pushState","location","href","split","newPageTitle","map","index","word","charAt","toUpperCase","slice","badgeClass","badgeValue","$newEl","class","go","imgThumbnailIndex","scroll","scrollIntoView","node","parentElement","parentCHeight","clientHeight","scrollHeight","nodeHeight","scrollOffset","offsetTop","scrollToBISModule","querySelector","$form","newUrl","appendToUrl","attentiveURL","isPDP","serialize","prepend","scrollTo","behavior","baseQuickView","selectedValueUrl","uniqueSellingPropsCopy","clone","quickViewFullDetailMsg","productUrl","showQuickview","focusQuickview","trapQuickviewFocus","hideDialog","beforeUpdateAttribute","tElement","ellipsisText","size","substring","EllipsisChar","innerText","selectedProductUrl","dialog","mobileAgentHash","idx","userAgent","navigator","isSafari","match","iosVersion","test","platform","v","appVersion","getCookie","cookiename","cookie","startC","endC","decodeURI","setCookie","cookieName","cookieValue","nDays","today","Date","expire","setTime","getTime","escape","toGMTString","removeQueryParam","urlparts","String","getUrlQueryParameterValue","queryParamName","currentParameter","urlQueryVariables","decodedString","decodeURIComponent","replace","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","parents","videoObj","pdpVideoLink","attrs","msgs","attrsWithSwatches","attrValue","$attrValue","$swatchButton","assistiveSelectedText","processSwatchValues","sizesHtml","updateSizeUrl","$attr","processNonSwatchValues","updateAttrs","productImages","images","primaryImageUrls","large","imgs","hiResImags","indexAdjustment","alt","first","detach","createCarousel","thumbnailCarousel","template","j","$thumbnailCarouselItems","querySelectorAll","imagesLoaded","observer","IntersectionObserver","entries","delayInMS","entry","isIntersecting","Promise","resolve","then","observe","createThumbnailCarousel","replaceWith","promotionsHtml","availabilityValue","availabilityMessages","availabiityContainer","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","updateQuantities","quantities","optionsHtml","redirect","updateOptions","complete","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","pliUUID","pageSize","labels","selectprods","getOptions","$elOption","urlValue","selectedValueId","optionId","methods","editBonusProducts","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","currentTarget","promotion","calloutMsg","pidsObj","setPids","$thisBtnAdd","$messageQtyError","$messageNoStock","qty","childProducts","getQuantitySelected","$addToCartBtn","newBonusDiscountLineItem","handlePostCartAdd","sfmcCartInfo","_etmc","selectBonusProduct","removeBonusProduct","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","backToTop","atcPid","getQuantitySelector","resetUrl","parseHtml","messageType","$checkIcon","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","$selected","count","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","msgSuccess","reload","queryAll","selector","getStyles","element","styles","getComputedStyle","rules","rule","Array","isArray","NodeList","removeChild","setAttribute","removeAttribute","classList","add","toggle","contains","throttle","isThrottling","args","apply","debounce","timer","minimumDelay","makeArray","newTarget","array","reduce","arg","concat","offsetHeight","marginTop","marginBottom","scrollY","pageYOffset","boundsTop","getBoundingClientRect","numberOfViewportToCheck","dataset","nextViewportLazyLoad","viewport","bounds","emptyCart","cartElement","y","duration","getLastElementInRow","nextElementSibling","sibling","bottom","previousElementSibling","updateUrlQueryParam","$queryParamsElement","path","getCharacterCount","waitForElement","scope","timeout","reject","elements","MutationObserver","mutations","self","disconnect","childList","subtree","params","encodeURIComponent","formElement","payload","clearFormErrors","fields","feedbackElement","before"],"mappings":"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","file":"default/js/wishlist.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 = 164);\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\nmodule.exports = {\r\n updateTokens: function (data) {\r\n if (data && 'csrf' in data) {\r\n var csrf = data.csrf;\r\n if ('tokenName' in csrf && 'token' in csrf) {\r\n var $elem = $('input[name=\"' + csrf.tokenName + '\"]');\r\n if ($elem.length > 0) {\r\n $elem.each(function () {\r\n $(this).val(csrf.token);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","'use strict';\r\nlet customUtil = require('../customUtil');\r\n\r\nmodule.exports = {\r\n setCarousel: function($el, slickConfigs) {\r\n if (customUtil.isEmpty($el) && Object.keys(slickConfigs).length === 0) return;\r\n $el.not('.slick-initialized').slick(slickConfigs);\r\n },\r\n destroyCarousel: function($el) {\r\n if($el.hasClass('slick-initialized')) {\r\n $el[0].slick.unslick();\r\n }\r\n },\r\n reinitCarousel: function($el, slickConfigs) {\r\n this.destroyCarousel($el);\r\n this.setCarousel($el, slickConfigs);\r\n }\r\n}\r\n\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Function to update image attributes\r\n * @param {JQuery} $element - Jquery element to check\r\n * @returns {boolean} - Returns true if element is in viewport, else returns false\r\n */\r\nfunction isInViewport($element) {\r\n let elementTop = $element.offset().top;\r\n let elementBottom = elementTop + $element.outerHeight();\r\n\r\n let viewportTop = $(window).scrollTop();\r\n let viewportBottom = viewportTop + $(window).height();\r\n\r\n return elementBottom > viewportTop && elementTop < viewportBottom;\r\n}\r\n\r\nmodule.exports = {\r\n isInViewport: isInViewport\r\n};","'use strict';\r\nvar wishlist = require('./wishlist/wishlist');\r\nvar processInclude = require('base/util');\r\n\r\n$(document).ready(function() {\r\n processInclude(wishlist);\r\n});\r\n","'use strict';\r\nvar processInclude = require('base/util');\r\n\r\n$(document).ready(function() {\r\n processInclude(require('../product/quickView'));\r\n processInclude(require('wishlists/wishlist'));\r\n});\r\n\r\n$(document).on('click', '.pdp-sizeGuide-modal .close', function() {\r\n $('#pdp-sizeGuide').remove();\r\n});\r\n$(document).on('click', '.edit-add-to-wishlist .edit', function(e) {\r\n e.preventDefault();\r\n $('#editWishlistProductModal .modal-header:first-child').addClass('d-lg-none');\r\n $('#editWishlistProductModal .modal-dialog').addClass('modal-dialog-centered');\r\n /* re-bind the click event listener when opening the wishlist edit overlay */\r\n $('button.add-to-cart-global').on('click');\r\n});\r\n$(document).on('click', '.select-attributes-btn', function(e) {\r\n e.preventDefault();\r\n $('#editWishlistProductModal .modal-header:first-child').addClass('d-lg-none');\r\n $('#editWishlistProductModal .modal-dialog').addClass('modal-dialog-centered');\r\n});\r\n$(document).on('show.bs.modal', '#editWishlistProductModal', function() {\r\n $('.pdp-sizeGuide-modal .close').removeAttr('data-dismiss');\r\n $('.modal-body .swatch-circle').each(function(i, d) {\r\n if ($(d).hasClass('selected')) {\r\n var swatchVal = $(d).data('attr-value');\r\n $('.selected-color').text(swatchVal.toLowerCase());\r\n }\r\n });\r\n});\r\n","'use strict';\r\n\r\nvar processInclude = require('base/util');\r\n\r\n$(document).ready(function () {\r\n processInclude(require('./wishlist/wishlist'));\r\n});\r\n","\"use strict\";\r\n\r\nvar base = require(\"base/product/base\");\r\nvar focusHelper = require(\"base/components/focus\");\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}\r\n\r\n/**\r\n * Generates the modal window on the first call.\r\n *\r\n */\r\nfunction getModalHtmlElement() {\r\n if ($(\"#editProductModal\").length !== 0) {\r\n $(\"#editProductModal\").remove();\r\n }\r\n var htmlString =\r\n \"\" +\r\n '
' +\r\n '' +\r\n '
' +\r\n \"\" +\r\n '
' +\r\n '
' +\r\n ' \" +\r\n \"
\" +\r\n '
' +\r\n '
' +\r\n \"
\" +\r\n \"
\" +\r\n \"
\";\r\n $(\"body\").append(htmlString);\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 * replaces the content in the modal window for product variation to be edited.\r\n * @param {string} editProductUrl - url to be used to retrieve a new product model\r\n */\r\nfunction fillModalElement(editProductUrl) {\r\n $(\"#editWishlistProductModal\")\r\n .spinner()\r\n .start();\r\n\r\n $.ajax({\r\n url: editProductUrl,\r\n method: \"GET\",\r\n dataType: \"json\",\r\n success: function(data) {\r\n var parsedHtml = parseHtml(data.renderedTemplate);\r\n\r\n $(\"#editWishlistProductModal .modal-body\").empty();\r\n $(\"#editWishlistProductModal .modal-body\").html(parsedHtml.body);\r\n $(\"#editWishlistProductModal .modal-footer\").html(\r\n parsedHtml.footer\r\n );\r\n $(\"#editWishlistProductModal .modal-header .close .sr-only\").text(\r\n data.closeButtonText\r\n );\r\n $(\"#editWishlistProductModal .enter-message\").text(\r\n data.enterDialogMessage\r\n );\r\n $(\"#editWishlistProductModal\").modal(\"show\");\r\n $.spinner().stop();\r\n },\r\n error: function() {\r\n $(\"#editWishlistProductModal\")\r\n .spinner()\r\n .stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * show toast response\r\n * @param {Object} res - from the call to set the public status of a list or item in a list\r\n */\r\nfunction showResponseMsg(res) {\r\n $.spinner().stop();\r\n var status;\r\n\r\n if (res.success) {\r\n status = \"alert-success\";\r\n } else {\r\n status = \"alert-danger\";\r\n }\r\n\r\n if ($(\".add-to-wishlist-messages\").length === 0) {\r\n $(\"body\").append('
');\r\n }\r\n\r\n $(\".add-to-wishlist-messages\").append(\r\n '
' +\r\n res.msg +\r\n \"
\"\r\n );\r\n\r\n setTimeout(function() {\r\n $(\".add-to-wishlist-messages\").remove();\r\n }, 3000);\r\n}\r\n\r\n/**\r\n * toggles the public / private status of the item or wishlist item\r\n * @param {string} listID - the order model\r\n * @param {string} itemID - the customer model\r\n * @param {Object} callback - function to run if the ajax call returns with an\r\n * error so that the checkbox can be reset to it's original state\r\n */\r\nfunction updatePublicStatus(listID, itemID, callback) {\r\n var url = $(\"#isPublicList\").data(\"url\");\r\n $.spinner().start();\r\n $.ajax({\r\n url: url,\r\n type: \"post\",\r\n dataType: \"json\",\r\n data: {\r\n listID: listID,\r\n itemID: itemID\r\n },\r\n success: function(data) {\r\n if (callback && !data.success) {\r\n callback();\r\n }\r\n showResponseMsg(data, null);\r\n },\r\n error: function(err) {\r\n if (callback) {\r\n callback();\r\n }\r\n showResponseMsg(err);\r\n }\r\n });\r\n}\r\n/**\r\n * @param {Object} $elementAppendTo - The element to append error html to\r\n * @param {string} msg - The error message\r\n * display error message if remove item from wishlist failed\r\n */\r\nfunction displayErrorMessage($elementAppendTo, msg) {\r\n if ($(\".remove-from-wishlist-messages\").length === 0) {\r\n $elementAppendTo.append(\r\n '
'\r\n );\r\n }\r\n $(\".remove-from-wishlist-messages\").append(\r\n '
' +\r\n msg +\r\n \"
\"\r\n );\r\n\r\n setTimeout(function() {\r\n $(\".remove-from-wishlist-messages\").remove();\r\n }, 3000);\r\n}\r\n\r\n/**\r\n * renders the list up to a given page number\r\n * @param {number} pageNumber - current page number\r\n * @param {boolean} spinner - if the spinner has already started\r\n * @param {string} focusElementSelector - selector of the element to focus on\r\n */\r\nfunction renderNewPageOfItems(pageNumber, spinner, focusElementSelector) {\r\n var publicView = $(\".wishlistItemCardsData\").data(\"public-view\");\r\n var listUUID = $(\".wishlistItemCardsData\").data(\"uuid\");\r\n var url = $(\".wishlistItemCardsData\").data(\"href\");\r\n if (spinner) {\r\n $.spinner().start();\r\n }\r\n var scrollPosition = document.documentElement.scrollTop;\r\n var newPageNumber = pageNumber;\r\n $.ajax({\r\n url: url,\r\n method: \"get\",\r\n data: {\r\n pageNumber: ++newPageNumber,\r\n publicView: publicView,\r\n id: listUUID\r\n }\r\n })\r\n .done(function(data) {\r\n $(\".wishlistItemCards\").empty();\r\n $(\"body .wishlistItemCards\").append(data);\r\n\r\n if (focusElementSelector) {\r\n $(focusElementSelector).focus();\r\n } else {\r\n document.documentElement.scrollTop = scrollPosition;\r\n }\r\n })\r\n .fail(function() {\r\n $(\".more-wl-items\").remove();\r\n });\r\n $.spinner().stop();\r\n}\r\n\r\nmodule.exports = {\r\n removeFromWishlist: function() {\r\n $(\"body\").on(\"click\", \".remove-from-wishlist\", function(e) {\r\n e.preventDefault();\r\n var url = $(this).data(\"url\");\r\n var elMyAccount = $(\".account-wishlist-item\").length;\r\n\r\n // If user is in my account page, call removeWishlistAccount() end point, re-render wishlist cards\r\n if (elMyAccount > 0) {\r\n $(\".wishlist-account-card\")\r\n .spinner()\r\n .start();\r\n $.ajax({\r\n url: url,\r\n type: \"get\",\r\n dataType: \"html\",\r\n data: {},\r\n success: function(html) {\r\n $(\".wishlist-account-card>.card\").remove();\r\n $(\".wishlist-account-card\").append(html);\r\n $(\".wishlist-account-card\")\r\n .spinner()\r\n .stop();\r\n },\r\n error: function() {\r\n var $elToAppend = $(\".wishlist-account-card\");\r\n $elToAppend.spinner().stop();\r\n var msg = $elToAppend.data(\"error-msg\");\r\n displayErrorMessage($elToAppend, msg);\r\n }\r\n });\r\n // else user is in wishlist landing page, call removeProduct() end point, then remove this card\r\n } else {\r\n $.spinner().start();\r\n $.ajax({\r\n url: url,\r\n type: \"get\",\r\n dataType: \"json\",\r\n data: {},\r\n success: function(data) {\r\n if (data.listIsEmpty) {\r\n $(\".header-container\")\r\n .find(\".heart-active-icon\")\r\n .addClass(\"d-none\");\r\n $(\".header-container\")\r\n .find(\".heart-inactive-icon\")\r\n .removeClass(\"d-none\");\r\n $(\".wl-social-sharing\").remove();\r\n }\r\n var pageNumber =\r\n $(\".wishlistItemCardsData\").data(\"page-number\") - 1;\r\n\r\n if ($(\".global-messages\").length > 0) {\r\n $(\".global-messages\").append(\r\n `
${data.removeWishlistMsg}
`\r\n );\r\n\r\n setTimeout(() => {\r\n $(\".global-messages\").empty();\r\n }, 3000);\r\n }\r\n\r\n renderNewPageOfItems(pageNumber, false);\r\n },\r\n error: function() {\r\n $.spinner().stop();\r\n var $elToAppendWL = $(\".wishlistItemCards\");\r\n var msg = $elToAppendWL.data(\"error-msg\");\r\n displayErrorMessage($elToAppendWL, msg);\r\n }\r\n });\r\n }\r\n });\r\n },\r\n\r\n viewProductViaEdit: function() {\r\n $(\"body\").on(\"click\", \".edit-add-to-wishlist .edit\", function(e) {\r\n e.preventDefault();\r\n\r\n var editProductUrl = $(this).attr(\"href\");\r\n getModalHtmlElement();\r\n fillModalElement(editProductUrl);\r\n });\r\n },\r\n\r\n viewProductViaSelectAttribute: function() {\r\n $(\"body\").on(\"click\", \".select-attributes-btn\", function(e) {\r\n e.preventDefault();\r\n\r\n var editProductUrl = $(this).data(\"get-product-url\");\r\n getModalHtmlElement();\r\n fillModalElement(editProductUrl);\r\n });\r\n },\r\n\r\n focusEditWishlistProductModal: function() {\r\n $(\"body\").on(\"shown.bs.modal\", \"#editWishlistProductModal\", function() {\r\n $(\"#editWishlistProductModal\")\r\n .siblings()\r\n .attr(\"aria-hidden\", \"true\");\r\n $(\"#editWishlistProductModal .close\").focus();\r\n });\r\n },\r\n\r\n onClosingEditWishlistProductModal: function() {\r\n $(\"body\").on(\r\n \"hidden.bs.modal\",\r\n \"#editWishlistProductModal\",\r\n function() {\r\n $(\"#editWishlistProductModal\").remove();\r\n $(\".modal-backdrop\").remove();\r\n $(\"body\").removeClass(\"modal-open\");\r\n\r\n $(\"#editWishlistProductModal\")\r\n .siblings()\r\n .attr(\"aria-hidden\", \"false\");\r\n }\r\n );\r\n },\r\n\r\n trapEditWishlistProductModalFocus: function() {\r\n $(\"body\").on(\"keydown\", \"#editWishlistProductModal\", function(e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: \"#editWishlistProductModal\",\r\n firstElementSelector: \".close\",\r\n lastElementSelector: \".btn-update-wishlist-product\",\r\n nextToLastElementSelector: \".select-size\"\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n\r\n updateWishlistUpdateButton: function() {\r\n $(\"body\").on(\"product:updateAddToCart\", function(e, response) {\r\n response.$productContainer\r\n .find(\".btn-update-wishlist-product\")\r\n .attr(\r\n \"disabled\",\r\n !response.product.readyToOrder ||\r\n !response.product.available\r\n );\r\n });\r\n },\r\n\r\n updateWishListItem: function() {\r\n $(\"body\").on(\"click\", \".btn-update-wishlist-product\", function(e) {\r\n e.preventDefault();\r\n\r\n var updateButtonBlock = $(this)\r\n .closest(\".wishlist-item-update-button-block\")\r\n .find(\".update-wishlist-url\");\r\n var updateProductUrl = updateButtonBlock.val();\r\n var uuid = updateButtonBlock.data(\"uuid\");\r\n\r\n var form = {\r\n uuid: uuid,\r\n pid: base.getPidValue($(this))\r\n };\r\n\r\n $(\"#editWishlistProductModal\")\r\n .spinner()\r\n .start();\r\n\r\n $.ajax({\r\n url: updateProductUrl,\r\n type: \"post\",\r\n context: this,\r\n data: form,\r\n dataType: \"json\",\r\n success: function() {\r\n $.spinner().start();\r\n $(\"#editWishlistProductModal\")\r\n .spinner()\r\n .stop();\r\n $(\"#editWishlistProductModal\").remove();\r\n $(\".modal-backdrop\").remove();\r\n $(\"body\").removeClass(\"modal-open\");\r\n var pageNumber =\r\n $(\".wishlistItemCardsData\").data(\"page-number\") - 1;\r\n renderNewPageOfItems(\r\n pageNumber,\r\n false,\r\n \".product-info .edit-add-to-wishlist .edit:first\"\r\n );\r\n },\r\n error: function() {\r\n var msg = $(\".btn-update-wishlist-product\").data(\r\n \"error-msg\"\r\n );\r\n\r\n $(\"#editWishlistProductModal\")\r\n .spinner()\r\n .stop();\r\n $(\"#editWishlistProductModal\").remove();\r\n $(\".modal-backdrop\").remove();\r\n $(\"body\").removeClass(\"modal-open\");\r\n\r\n if ($(\".update-wishlist-messages\").length === 0) {\r\n $(\"body\").append(\r\n '
'\r\n );\r\n }\r\n\r\n $(\".update-wishlist-messages\").append(\r\n '
' +\r\n msg +\r\n \"
\"\r\n );\r\n\r\n setTimeout(function() {\r\n $(\".update-wishlist-messages\").remove();\r\n }, 5000);\r\n }\r\n });\r\n });\r\n },\r\n\r\n toggleWishlistStatus: function() {\r\n $(\"#isPublicList\").on(\"click\", function() {\r\n var listID = $(\"#isPublicList\").data(\"id\");\r\n updatePublicStatus(listID, null, null);\r\n });\r\n },\r\n\r\n toggleWishlistItemStatus: function() {\r\n $(\"body\").on(\"click\", \".wishlist-item-checkbox\", function() {\r\n var itemID = $(this)\r\n .closest(\".wishlist-hide\")\r\n .find(\".custom-control-input\")\r\n .data(\"id\");\r\n var el = $(this).siblings(\"input\");\r\n var resetCheckBox = function() {\r\n return el.prop(\"checked\")\r\n ? el.prop(\"checked\", false)\r\n : el.prop(\"checked\", true);\r\n };\r\n\r\n updatePublicStatus(null, itemID, resetCheckBox);\r\n });\r\n },\r\n\r\n addToCartFromWishlist: function() {\r\n $(\"body\").on(\"click\", \".wishlistItemCards .add-to-cart\", function(e) {\r\n e.stopImmediatePropagation();\r\n var pid;\r\n var addToCartUrl;\r\n var pidsQty;\r\n\r\n $(\"body\").trigger(\"product:beforeAddToCart\", this);\r\n\r\n pid = $(this).data(\"pid\");\r\n addToCartUrl = $(this).data(\"url\");\r\n pidsQty = parseInt(\r\n $(this)\r\n .closest(\".product-info\")\r\n .find(\".quantity\")\r\n .val(),\r\n 10\r\n );\r\n\r\n var form = {\r\n pid: pid,\r\n quantity: pidsQty\r\n };\r\n\r\n if ($(this).data(\"option\")) {\r\n form.options = JSON.stringify($(this).data(\"option\"));\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 data.addedPid = pid;\r\n $(\"body\").trigger(\"product:afterAddToCart\", data);\r\n $.spinner().stop();\r\n base.miniCartReportingUrl(\r\n data.reportingURL,\r\n data.error\r\n );\r\n },\r\n error: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n moreWLItems: function() {\r\n $(\"body\").on(\"click\", \".more-wl-items\", function() {\r\n var pageNumber = $(\".wishlistItemCardsData\").data(\"page-number\");\r\n renderNewPageOfItems(pageNumber, true);\r\n });\r\n },\r\n copyWishlistLink: function() {\r\n $(\"body\").on(\"click\", \".fa-link\", function() {\r\n var $temp = $(\"\");\r\n $(\"body\").append($temp);\r\n $temp.val($(\"#shareUrl\").val()).select();\r\n document.execCommand(\"copy\");\r\n $temp.remove();\r\n $(\".copy-link-message\").removeClass(\"d-none\");\r\n setTimeout(function() {\r\n $(\".copy-link-message\").addClass(\"d-none\");\r\n }, 3000);\r\n });\r\n },\r\n submitWishlistSearch: function() {\r\n $(\"body\").on(\"click\", \"#wishlist-search button\", function(e) {\r\n var firstName = $(\"#wishlist-search-first-name\").val();\r\n var lastName = $(\"#wishlist-search-last-name\").val();\r\n var email = $(\"#wishlist-search-email\").val();\r\n\r\n if (\r\n (!firstName && !lastName && !email) ||\r\n (firstName && !lastName && !email) ||\r\n (!firstName && lastName && !email)\r\n ) {\r\n e.preventDefault();\r\n $(\".wishlist-error-search div\").addClass(\"alert alert-danger\");\r\n var errorText = $(\".wishlist-error-search\").data(\"error-msg\");\r\n $(\".wishlist-error-search div\").html(errorText);\r\n }\r\n });\r\n },\r\n moreWLSearchResults: function() {\r\n $(\"body\").on(\"click\", \".more-wl-results\", function() {\r\n var firstName = $(this).data(\"search-fname\");\r\n var lastName = $(this).data(\"search-lname\");\r\n var pageNumber = $(this).data(\"page-number\");\r\n var uuids = [];\r\n $(\".wl-hit\").each(function() {\r\n uuids.push(\r\n $(this)\r\n .find(\"a\")\r\n .data(\"id\")\r\n );\r\n });\r\n var url = $(this).data(\"url\");\r\n $.spinner().start();\r\n $.ajax({\r\n url: url,\r\n method: \"get\",\r\n data: {\r\n firstName: firstName,\r\n lastName: lastName,\r\n uuids: JSON.stringify(uuids),\r\n pageNumber: ++pageNumber\r\n },\r\n success: function(data) {\r\n if (data.results.changedList) {\r\n $(\".wl-hits .wl-hit\").remove();\r\n }\r\n $(\"#result-count\").html(data.results.totalString);\r\n data.results.hits.forEach(function(hit) {\r\n var divString =\r\n '
' +\r\n '
' +\r\n hit.firstName +\r\n \" \" +\r\n hit.lastName +\r\n \"
\" +\r\n '
' +\r\n '' +\r\n hit.urlText +\r\n \"\" +\r\n \"
\" +\r\n '
' +\r\n hit.email +\r\n \"
\" +\r\n \"
\";\r\n $(\".wl-hits\").append(divString);\r\n });\r\n if (data.results.showMore) {\r\n $(\".find-another-wl .more-wl-results\").data(\r\n \"page-number\",\r\n data.results.pageNumber\r\n );\r\n } else {\r\n $(\".find-another-wl .more-wl-results\").remove();\r\n }\r\n $.spinner().stop();\r\n },\r\n error: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n initWishlist: function() {\r\n /** Save all wishlist items **/\r\n var $wishlistItems = $(\".wishlistItemCards\").find(\".product-info\");\r\n if ($wishlistItems.length) {\r\n var pids = [];\r\n $wishlistItems.each(function() {\r\n pids.push($(this).data(\"pid\") + \"\");\r\n });\r\n if (window.Resources.loggedIn) {\r\n pids.unshift(\"loggedIn\");\r\n }\r\n localStorage.setItem(\"wishlistItems\", JSON.stringify(pids));\r\n }\r\n }\r\n};\r\n","'use strict';\r\nvar base = require('../product/base');\r\nvar baseDetails = require('base/product/detail');\r\nvar customUtil = require('../customUtil');\r\n\r\nmodule.exports = {\r\n availability: base.availability,\r\n addToCart: base.addToCart,\r\n // removed updateAddToCart for SI-38 requirment\r\n updateAttributesAndDetails: baseDetails.updateAttributesAndDetails,\r\n showSpinner: baseDetails.showSpinner,\r\n updateAttribute: function () {\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n response.container.data('video', response.data.product.pdpVideoID);\r\n if ($('.product-detail>.bundle-items').length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else if ($('.product-set-detail').eq(0).length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else {\r\n var productId = response.data.product.id;\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 if ($('.product-detail.container:not(\".bundle-item\")').hasClass('bfx-price-product')) {\r\n $('.product-detail:not(\".bundle-item\")').data('addtocart-pid', productId);\r\n if (response.data.product.productType === 'variationGroup') {\r\n productId = response.data.product.defaultVariantId;\r\n }\r\n $('.product-id').text(productId);\r\n $('.product-detail:not(\".bundle-item\")').data('pid', productId);\r\n } else {\r\n $('.product-id').text(productId);\r\n $('.product-detail:not(\".bundle-item\")').data('pid', productId);\r\n }\r\n }\r\n });\r\n },\r\n updateAvailability: baseDetails.updateAvailability,\r\n selectAttribute: function() {\r\n $('body').on('click', '.product-description-container [data-attr=\"size\"] button', function(e) {\r\n e.preventDefault();\r\n\r\n\r\n // if ($('.plp-atc').length && $('[data-page=\"Search-ShowResult\"]').length == 0) {\r\n // return;\r\n // }\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 // Back in Stock Notification\r\n $('.notify-sign-up').addClass('hide');\r\n $('#waitListJoin').removeClass('is-invalid');\r\n $(this).closest('.product-detail').find('.btn-container').removeClass('hide');\r\n\r\n if ($(this).hasClass('show-backinstock-module')) {\r\n // Show Back In Stock Module\r\n var $currentSelectedSize = $(this).siblings('[aria-checked=\"true\"]');\r\n $(this).siblings('.size-attribute').attr('aria-checked', 'false');\r\n base.attributeSelect($(this).attr('data-url'), $productContainer, 'size');\r\n\r\n $(this).closest('.product-detail').find('.add-to-cart').addClass('hide');\r\n $(this).closest('.product-detail').find('.apple-pay-pdp').addClass('hide');\r\n $(this).closest('.product-detail').find('.backinstock-notify').removeClass('hide');\r\n } else {\r\n base.attributeSelect($(this).attr('data-url'), $productContainer, 'size');\r\n\r\n $(this).closest('.product-detail').find('.btn-container').removeClass('hide');\r\n $(this).closest('.product-detail').find('.add-to-cart').removeClass('hide');\r\n $(this).closest('.product-detail').find('.apple-pay-pdp').removeClass('hide');\r\n $(this).closest('.product-detail').find('.backinstock-notify').addClass('hide');\r\n }\r\n });\r\n\r\n $('button.add-to-cart-global').on('product:updateAddToCart', function (e, response) {\r\n if (response.product.readyToOrder) {\r\n $(this).attr('disabled', false);\r\n }\r\n });\r\n },\r\n sizeChart: function() {\r\n $(document).on('click', '.size-chart .sizeGuide-link', function(e) {\r\n e.preventDefault();\r\n var url = $(this).attr('href');\r\n var $prodSizeChart = $(this)\r\n .closest('.size-chart')\r\n .find('.size-chart-collapsible');\r\n var $productDescContainer = $(this)\r\n .closest('.product-description-container');\r\n if (!customUtil.isMobile()) {\r\n $productDescContainer.css({ top: '0rem' });\r\n }\r\n if ($prodSizeChart.is(':empty')) {\r\n $.ajax({\r\n url: url,\r\n type: 'get',\r\n dataType: 'json',\r\n success: function(data) {\r\n $prodSizeChart.append(data.content);\r\n\r\n var modalOptions = {\r\n keyboard: false,\r\n backdrop: false\r\n };\r\n\r\n if ($('.modal-backdrop').length === 0) {\r\n modalOptions.backdrop = 'static';\r\n }\r\n\r\n $('#pdp-sizeGuide').modal(modalOptions);\r\n\r\n }\r\n });\r\n }\r\n $prodSizeChart.toggleClass('active');\r\n });\r\n\r\n var $sizeChart = $('.size-chart-collapsible');\r\n $('body').on('click touchstart', function(e) {\r\n if ($('.size-chart').has(e.target).length <= 0) {\r\n $sizeChart.removeClass('active');\r\n }\r\n });\r\n },\r\n copyProductLink: baseDetails.copyProductLink,\r\n focusChooseBonusProductModal: base.focusChooseBonusProductModal(),\r\n pdpApplePay: function() {\r\n $('body').on('click', '.dw-apple-pay-button', function(e) {\r\n // Based on the product:beforeAddToCart event in pdpProductDetails.js\r\n var isPdpSet = $(this).closest('.product-set-detail').length;\r\n var selectedVal = $(this)\r\n .closest('.product-detail')\r\n .find('.select-size option:selected')\r\n .data('attr-value');\r\n if (!selectedVal && selectedVal !== 0 && !isPdpSet) {\r\n e.preventDefault();\r\n $('body').trigger('product:beforeAddToCart', this);\r\n $.spinner().stop();\r\n return false;\r\n }\r\n });\r\n\r\n $('body').on('product:updateAddToCart', function(e, response) {\r\n if (response.product.readyToOrder) {\r\n var applePayButton = $('.apple-pay-pdp', response.$productContainer);\r\n if (applePayButton.length !== 0) {\r\n applePayButton.attr('sku', response.product.id);\r\n }\r\n }\r\n });\r\n },\r\n showSpinner: function () {\r\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\r\n if (!$('.container.search-results').length) {\r\n $.spinner().start();\r\n }\r\n });\r\n },\r\n showPDPEDD: function () {\r\n var $eddText = $('.eddtext.productDetails');\r\n var $eddPidDiv = $eddText.find('.eddpid');\r\n var limit = 0;\r\n var timeInt;\r\n var unHideEdd = function () {\r\n if ($eddPidDiv.text().trim().length > 0 || limit > 100) {\r\n if ($eddText.hasClass('hide') && $eddPidDiv.text().trim().length > 0) {\r\n $eddText.removeClass('hide');\r\n }\r\n clearTimeout(timeInt);\r\n } else {\r\n limit++;\r\n timeInt = setTimeout(unHideEdd, 100);\r\n }\r\n };\r\n unHideEdd();\r\n },\r\n videoThumbnail: function () {\r\n var videoId = $('.product-detail').data('video');\r\n if (videoId) {\r\n $.ajax({\r\n type: 'GET',\r\n url: 'https://vimeo.com/api/v2/video/' + videoId + '.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 videoButton: function () {\r\n if ($('.pdp-main-video').length) {\r\n $(document).on('click', '.pdp-video-button', function () {\r\n var $videoButton = $('.pdp-video-button');\r\n var videoElement = $('.pdp-main-video')[0];\r\n if (videoElement.paused) {\r\n videoElement.play();\r\n $videoButton.addClass('pause-button');\r\n $videoButton.removeClass('play-button');\r\n } else {\r\n $videoButton.removeClass('pause-button');\r\n $videoButton.addClass('play-button');\r\n videoElement.pause();\r\n }\r\n });\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","'use strict';\r\nvar base = require('./base');\r\n\r\nmodule.exports = {\r\n availability: base.availability,\r\n\r\n addToCart: base.addToCart,\r\n\r\n updateAttributesAndDetails: function () {\r\n $('body').on('product:statusUpdate', function (e, data) {\r\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\r\n\r\n $productContainer.find('.description-and-detail .product-attributes')\r\n .empty()\r\n .html(data.attributesHtml);\r\n\r\n if (data.shortDescription) {\r\n $productContainer.find('.description-and-detail .description')\r\n .removeClass('hidden-xl-down');\r\n $productContainer.find('.description-and-detail .description .content')\r\n .empty()\r\n .html(data.shortDescription);\r\n } else {\r\n $productContainer.find('.description-and-detail .description')\r\n .addClass('hidden-xl-down');\r\n }\r\n\r\n if (data.longDescription) {\r\n $productContainer.find('.description-and-detail .details')\r\n .removeClass('hidden-xl-down');\r\n $productContainer.find('.description-and-detail .details .content')\r\n .empty()\r\n .html(data.longDescription);\r\n } else {\r\n $productContainer.find('.description-and-detail .details')\r\n .addClass('hidden-xl-down');\r\n }\r\n });\r\n },\r\n\r\n showSpinner: function () {\r\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\r\n $.spinner().start();\r\n });\r\n },\r\n updateAttribute: function () {\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n if ($('.product-detail>.bundle-items').length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else if ($('.product-set-detail').eq(0).length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else {\r\n var productId = response.data.product.id;\r\n if (response.data.product.productType === 'variationGroup') {\r\n productId = response.data.product.defaultVariantId;\r\n }\r\n $('.product-id').text(productId);\r\n $('.product-detail:not(\".bundle-item\")').data('pid', productId);\r\n }\r\n });\r\n },\r\n updateAddToCart: function () {\r\n $('body').on('product:updateAddToCart', function (e, response) {\r\n // update local add to cart (for sets)\r\n $('button.add-to-cart', response.$productContainer).attr('disabled',\r\n (!response.product.readyToOrder || !response.product.available));\r\n\r\n var enable = $('.product-availability').toArray().every(function (item) {\r\n return $(item).data('available') && $(item).data('ready-to-order');\r\n });\r\n $('button.add-to-cart-global').attr('disabled', !enable);\r\n });\r\n },\r\n updateAvailability: function () {\r\n $('body').on('product:updateAvailability', function (e, response) {\r\n $('div.availability', response.$productContainer)\r\n .data('ready-to-order', response.product.readyToOrder)\r\n .data('available', response.product.available);\r\n\r\n $('.availability-msg', response.$productContainer)\r\n .empty().html(response.message);\r\n\r\n if ($('.global-availability').length) {\r\n var allAvailable = $('.product-availability').toArray()\r\n .every(function (item) { return $(item).data('available'); });\r\n\r\n var allReady = $('.product-availability').toArray()\r\n .every(function (item) { return $(item).data('ready-to-order'); });\r\n\r\n $('.global-availability')\r\n .data('ready-to-order', allReady)\r\n .data('available', allAvailable);\r\n\r\n $('.global-availability .availability-msg').empty()\r\n .html(allReady ? response.message : response.resources.info_selectforstock);\r\n }\r\n });\r\n },\r\n sizeChart: function () {\r\n $('.size-chart a').on('click', function (e) {\r\n e.preventDefault();\r\n var url = $(this).attr('href');\r\n var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\r\n if ($prodSizeChart.is(':empty')) {\r\n $.ajax({\r\n url: url,\r\n type: 'get',\r\n dataType: 'json',\r\n success: function (data) {\r\n $prodSizeChart.append(data.content);\r\n }\r\n });\r\n }\r\n $prodSizeChart.toggleClass('active');\r\n });\r\n\r\n var $sizeChart = $('.size-chart-collapsible');\r\n $('body').on('click touchstart', function (e) {\r\n if ($('.size-chart').has(e.target).length <= 0) {\r\n $sizeChart.removeClass('active');\r\n }\r\n });\r\n },\r\n copyProductLink: function () {\r\n $('body').on('click', '#fa-link', function () {\r\n event.preventDefault();\r\n var $temp = $('');\r\n $('body').append($temp);\r\n $temp.val($('#shareUrl').val()).select();\r\n document.execCommand('copy');\r\n $temp.remove();\r\n $('.copy-link-message').attr('role', 'alert');\r\n $('.copy-link-message').removeClass('d-none');\r\n setTimeout(function () {\r\n $('.copy-link-message').addClass('d-none');\r\n }, 3000);\r\n });\r\n },\r\n\r\n focusChooseBonusProductModal: base.focusChooseBonusProductModal()\r\n};\r\n","'use strict';\r\n\r\nvar domUtil = require('../domUtil');\r\nvar customUtil = require('../customUtil');\r\nvar slickHelper = require('../utils/slick');\r\nvar viewportUtil = require('../utils/viewport');\r\nvar baseHelper = require('./base');\r\nvar formValidation = require('../components/formValidation');\r\nvar csrf = require('../csrf');\r\nvar hiddenClass = 'd-none';\r\n\r\n/**\r\n * Process attribute values associated with an attribute that does not have image swatches\r\n *\r\n * @param {int} price - product sale price\r\n * @param {int} standardPrice - product standard price\r\n * @param {string} percentOffMark - string value\r\n * @param {Object} productContainer - DOM container for a given product\r\n * @param {boolean} hasSalePricebook - has sale pricebook\r\n */\r\nfunction updateProductPrice(price, standardPrice, percentOffMark, productContainer, hasSalePricebook, salesPriceBeforePromo) {\r\n var priceTemplate = $('.price-template')[0].cloneNode(true);\r\n var priceSection = domUtil.queryFirst('.prices .price', productContainer);\r\n var priceContainer = domUtil.queryFirst('.price-section', priceTemplate);\r\n var strikeThroughContainer = domUtil.queryFirst('.strike-through-section', priceContainer);\r\n var priceElement = domUtil.queryFirst('.strike-through-price', strikeThroughContainer);\r\n var salesContainer = domUtil.queryFirst('.sales', priceContainer);\r\n var salesPriceElement = domUtil.queryFirst('.price-value', salesContainer);\r\n var salesBeforPromoElement = domUtil.queryFirst('.sales-before-promo', priceContainer);\r\n var percentOffContainer = domUtil.queryFirst('.sales-percentage', priceContainer);\r\n var percentOffElement = domUtil.queryFirst('.percent-value', priceContainer);\r\n domUtil.removeClass(strikeThroughContainer, hiddenClass);\r\n\r\n if (!hasSalePricebook) {\r\n domUtil.addClass(strikeThroughContainer, hiddenClass);\r\n domUtil.addClass(percentOffContainer, hiddenClass);\r\n }\r\n\r\n if (salesBeforPromoElement && salesPriceBeforePromo) {\r\n salesBeforPromoElement.textContent = salesPriceBeforePromo;\r\n }\r\n\r\n if (priceElement) {\r\n priceElement.textContent = standardPrice;\r\n }\r\n if (salesPriceElement) {\r\n salesPriceElement.textContent = price;\r\n }\r\n if (price === standardPrice) {\r\n domUtil.addClass(strikeThroughContainer, hiddenClass);\r\n }\r\n if (price < standardPrice && percentOffElement && percentOffMark) {\r\n percentOffElement.textContent = percentOffMark;\r\n }\r\n priceSection.innerHTML = priceTemplate.innerHTML;\r\n}\r\n\r\n/**\r\n * This method used to get the pdp estimated delivery date via ajax call\r\n * @param {string} inStockDate - In Stoke date\r\n */\r\nfunction getPdpEDD(inStockDate) {\r\n var $eddText = $('.eddtext.productDetails');\r\n var $eddPidDiv = $eddText.find('.eddpid');\r\n\r\n if ($eddPidDiv.length) {\r\n var url = $eddPidDiv.data('url');\r\n\r\n if (url) {\r\n var eddObj = {\r\n zipcode: $eddPidDiv.data('narvar-dest-zip'),\r\n carrierCode: $eddPidDiv.data('narvar-carrier-code'),\r\n serviceCode: $eddPidDiv.data('narvar-service-code'),\r\n inStockDate: inStockDate\r\n };\r\n\r\n $eddText.addClass('d-none');\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'get',\r\n dataType: 'json',\r\n data: { eddObj: JSON.stringify(eddObj) },\r\n success: function(data) {\r\n if (data.success) {\r\n $eddPidDiv.closest('.eddtext').attr('data-object', JSON.stringify(data.eddObject));\r\n if (eddObj.serviceCode && eddObj.serviceCode.length > 0 && eddObj.carrierCode && eddObj.carrierCode.length > 0) {\r\n $eddPidDiv.text('');\r\n if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n } else if (data.earliestEDD) {\r\n $eddPidDiv.text(data.earliestEDD);\r\n if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n } else if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n } else if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n var limit = 0;\r\n var timeInt;\r\n var unHideEdd = function() {\r\n if ($eddPidDiv.text().trim().length > 0 || limit > 100) {\r\n if ($eddPidDiv.text().trim().length > 0) {\r\n $eddText.removeClass('d-none');\r\n }\r\n clearTimeout(timeInt);\r\n } else {\r\n limit++;\r\n timeInt = setTimeout(unHideEdd, 100);\r\n }\r\n };\r\n unHideEdd();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * This method handles the unavailability message in product set\r\n */\r\nfunction handleSetUnavailabilityMessage() {\r\n var unavailableItems = $('.availability-container .no-stock').length;\r\n var setUnavailableMessageOne = $('.set-unavailable-message-one');\r\n var setUnavailableMessageMany = $('.set-unavailable-message-many');\r\n if (unavailableItems > 1) {\r\n setUnavailableMessageOne.addClass('d-none');\r\n setUnavailableMessageMany.find('.no-of-items').text(unavailableItems);\r\n setUnavailableMessageMany.removeClass('d-none');\r\n } else if (unavailableItems === 1) {\r\n setUnavailableMessageMany.addClass('d-none');\r\n setUnavailableMessageOne.removeClass('d-none');\r\n } else {\r\n setUnavailableMessageOne.addClass('d-none');\r\n setUnavailableMessageMany.addClass('d-none');\r\n }\r\n}\r\n\r\n$('body').on('product:afterAttributeSelect', function(e, data) {\r\n if (data.attributeType && data.attributeType === 'color') {\r\n if (data.data.product.recommendationsHtml) {\r\n $('.recommendations-products').empty();\r\n $('.product-recommendation-details')\r\n .empty()\r\n .html(data.data.product.recommendationsHtml);\r\n $('body').trigger('search:updateProducts');\r\n }\r\n if (data.data.product.einsteinProductRecommendationsHtml) {\r\n $('.custom-recommender')\r\n .empty()\r\n .html(data.data.product.einsteinProductRecommendationsHtml);\r\n $('body').trigger('search:updateProducts');\r\n } else {\r\n $('.custom-recommender').empty();\r\n }\r\n }\r\n if ($('.product-detail.product-pdp .custom-select-wrapper .size-value.selected').length) {\r\n $('.qty-err').remove();\r\n }\r\n if (!data.data.product.price.type) {\r\n var standardPrice = data.data.product.price.list ? data.data.product.price.list.formatted : data.data.product.price.sales.formatted;\r\n var price = standardPrice;\r\n var percentOffMark;\r\n if (data.data.product.price.sales) {\r\n price = data.data.product.price.sales.formatted;\r\n }\r\n if (data.data.product.price.list) {\r\n percentOffMark = data.data.product.price.percentageOff;\r\n }\r\n\r\n var hasSalePricebook = data.data.hasSalePricebook;\r\n var salesPriceBeforePromo =\r\n 'salesBeforePromo' in data.data.product.price && data.data.product.price.salesBeforePromo ? data.data.product.price.salesBeforePromo.formatted : '';\r\n updateProductPrice(price, standardPrice, percentOffMark, data.container[0], hasSalePricebook, salesPriceBeforePromo);\r\n }\r\n var isPdpSet = $('.product-set-detail').length;\r\n if (isPdpSet) {\r\n handleSetUnavailabilityMessage();\r\n }\r\n\r\n var PdpVideoID = data.data.product.pdpVideoID;\r\n if (PdpVideoID !== null && PdpVideoID !== undefined) {\r\n var carousel = $('.product-detail .primary-images .carousel');\r\n if (isPdpSet) {\r\n var selectedProductID = data.data.product.id;\r\n if (selectedProductID !== null && selectedProductID !== undefined) {\r\n $('.product-detail').each(function() {\r\n var setItemID = $(this)\r\n .find('.product-id.bfx-sku')\r\n .text();\r\n if (setItemID === selectedProductID) {\r\n carousel = $(this).find('.carousel');\r\n }\r\n });\r\n }\r\n }\r\n\r\n if ($(carousel).length > 0) {\r\n var carouselId = $(carousel).attr('id');\r\n var imageLength = $(carousel).find('.carousel-inner .carousel-item ').length;\r\n $(\r\n '
'\r\n ).appendTo($(carousel).find('.carousel-inner'));\r\n $('
  • ').appendTo(\r\n $(carousel).find('.carousel-indicators')\r\n );\r\n }\r\n }\r\n // update Narvar estimated date on PDP\r\n var $eddPidDiv = $('.eddpid');\r\n if (isPdpSet) {\r\n var selectedEddProductID = data.data.product.id;\r\n if (selectedEddProductID !== null && selectedEddProductID !== undefined) {\r\n $('.product-detail').each(function() {\r\n var setItemID = $(this)\r\n .find('.product-id.bfx-sku')\r\n .text();\r\n if (setItemID === selectedEddProductID) {\r\n $eddPidDiv = $(this).find('.eddpid');\r\n }\r\n });\r\n }\r\n }\r\n if ($eddPidDiv.length > 0) {\r\n if (data.data.product.availability.eddPreOrderDate) {\r\n $eddPidDiv.attr('data-narvar-instock-date', data.data.product.availability.eddPreOrderDate);\r\n $eddPidDiv.addClass('preorder-date');\r\n if ($('.pdp-edd.hide').length > 0) {\r\n $('.pdp-edd.hide').removeClass('hide');\r\n }\r\n } else {\r\n if ($eddPidDiv.hasClass('preorder-date')) {\r\n $eddPidDiv.removeClass('preorder-date');\r\n }\r\n if ($('.pdp-edd.hide').length > 0) {\r\n $('.pdp-edd.hide').removeClass('hide');\r\n }\r\n }\r\n\r\n getPdpEDD(data.data.product.availability.eddPreOrderDate);\r\n }\r\n\r\n /* re-renders the applicable promotions if the product has active product-level promotions */\r\n var $targetEl = $('.applicable-promotions');\r\n if (data.data.product.hasPromotions) {\r\n var promotions = data.data.product.promotions;\r\n baseHelper.updateProductPromotions($targetEl, promotions);\r\n } else {\r\n $targetEl.empty();\r\n }\r\n});\r\n\r\n// calculate the top offset of product details description container and lock it at the top once the 'Add to bag' button is in the viewport\r\nvar setProductDetailsDescTop = function(parentEl) {\r\n if (!parentEl) {\r\n return;\r\n }\r\n\r\n var $productDescContainer = parentEl.find('.product-description-container');\r\n var $btnContainer = parentEl.find('.prices-add-to-cart-actions');\r\n var woh = $(window).outerHeight(true);\r\n var bPadding = 50;\r\n var topOffset = 150;\r\n\r\n if ($btnContainer.length > 0 && !viewportUtil.isInViewport($btnContainer)) {\r\n topOffset = woh - ($btnContainer.position().top + $btnContainer.outerHeight(true) + bPadding);\r\n }\r\n\r\n $productDescContainer.css({ top: topOffset / 16 + 'rem' });\r\n};\r\n\r\n$('body').on('product:updateAvailability', function(e, data) {\r\n var className = data.product.availability.classType;\r\n var errMessage = data.product.availability.messages[0];\r\n var ele = $(e.target).find('.product-description');\r\n var isSetItem = data.$productContainer.hasClass('product-detail set-item');\r\n if (className === 'qty-err') {\r\n ele.find('.add-to-cart').prop('disabled', true);\r\n } else {\r\n ele.find('.add-to-cart').prop('disabled', false);\r\n }\r\n if (data.product.variationAttributes) {\r\n var output = [];\r\n $.each(data.product.variationAttributes, function(key, variationAttribute) {\r\n if (variationAttribute.id === 'color') {\r\n $.each(variationAttribute.values, function(key1, value) {\r\n var $colorSelector = $(\r\n '.product-detail [data-attr=\"' +\r\n variationAttribute.id +\r\n '\"] button.' +\r\n variationAttribute.id +\r\n '-attribute[data-variationgroupid=\"' +\r\n value.variationGroupID +\r\n '\"]'\r\n );\r\n if (!value.selectable && (!value.enableBackInStockNotification || isSetItem)) {\r\n $colorSelector.attr('disabled', 'disabled');\r\n } else {\r\n $colorSelector.removeAttr('disabled');\r\n }\r\n if (!value.enableBackInStockNotification || isSetItem) {\r\n $colorSelector.removeClass('back-in-stock-notification');\r\n } else {\r\n $colorSelector.addClass('back-in-stock-notification');\r\n }\r\n });\r\n }\r\n if (variationAttribute.id === 'size') {\r\n $.each(variationAttribute.values, function(key1, value) {\r\n var showBackInStockModule = value.enableBackInStockNotification;\r\n output.push(\r\n ''\r\n );\r\n\r\n if (value.selected && !value.selectable) {\r\n ele.find('button.add-to-cart').prop('disabled', true);\r\n }\r\n });\r\n ele.find('[data-attr=\"' + variationAttribute.id + '\"] .size-selections').html(output.join(''));\r\n }\r\n });\r\n }\r\n\r\n // Back in Stock Notification\r\n $('.notify-sign-up').addClass('hide');\r\n $('#waitListJoin').removeClass('is-invalid');\r\n $(this)\r\n .closest('.product-detail')\r\n .find('.btn-container')\r\n .removeClass('hide');\r\n\r\n if (\r\n ele\r\n .closest('.product-detail')\r\n .find('[data-attr=\"size\"] .size-attribute[aria-checked=\"true\"]')\r\n .hasClass('show-backinstock-module')\r\n ) {\r\n ele.closest('.product-detail')\r\n .find('.add-to-cart')\r\n .addClass('hide');\r\n ele.closest('.product-detail')\r\n .find('.backinstock-notify')\r\n .removeClass('hide');\r\n } else {\r\n ele.closest('.product-detail')\r\n .find('.btn-container')\r\n .removeClass('hide');\r\n ele.closest('.product-detail')\r\n .find('.add-to-cart')\r\n .removeClass('hide');\r\n ele.closest('.product-detail')\r\n .find('.backinstock-notify')\r\n .addClass('hide');\r\n }\r\n\r\n $(ele)\r\n .find('.color-value')\r\n .each(function(d, el) {\r\n if ($(el).hasClass('unselectable')) {\r\n if (\r\n !$(el)\r\n .parent()\r\n .hasClass('back-in-stock-notification')\r\n ) {\r\n $(el)\r\n .parent()\r\n .attr('disabled', true);\r\n } else {\r\n $(el)\r\n .parent()\r\n .attr('disabled', false);\r\n }\r\n } else {\r\n $(el)\r\n .parent()\r\n .attr('disabled', false);\r\n }\r\n });\r\n $(ele)\r\n .find('.color-value')\r\n .parent('.color-attribute')\r\n .attr('aria-checked', 'false');\r\n $(ele)\r\n .find('.color-value.selected')\r\n .parent('.color-attribute')\r\n .attr('aria-checked', 'true');\r\n var colorName = $(ele)\r\n .find('.color-value.selected')\r\n .data('attr-displayvalue');\r\n if (typeof colorName !== 'undefined') {\r\n $(ele)\r\n .find('.selected-color')\r\n .text(colorName.toLowerCase());\r\n }\r\n\r\n if (className !== 'no-stock') {\r\n $(ele)\r\n .find('.product-availability')\r\n .html('
    ' + errMessage + '
    ');\r\n $(ele)\r\n .find('.cart-and-ipay')\r\n .removeClass('hide');\r\n } else {\r\n $(ele)\r\n .find('.product-availability')\r\n .empty();\r\n $(ele)\r\n .find('.notify-sign-up .form-group, .notify-sign-up .btn.stock-notify-signup-email, .notify-sign-up.title')\r\n .removeClass('hide');\r\n $(ele)\r\n .find('.notify-sign-up .btn.stock-notify-signup-success')\r\n .addClass('hide');\r\n }\r\n\r\n if (className !== 'no-err') {\r\n $('#footercontent').addClass('message');\r\n } else {\r\n $('#footercontent').removeClass('message');\r\n }\r\n\r\n var preOrderLabel = $('.add-to-cart-btn-labels').attr('data-value-preorder-text');\r\n var addToCartLabel = $('.add-to-cart-btn-labels').attr('data-value-cart-text');\r\n var hasPreorder = data.product.availability.messages[0].indexOf('pre-order-ship-msg') >= 0;\r\n\r\n if (hasPreorder) {\r\n $(ele)\r\n .find('.add-to-cart span')\r\n .text(preOrderLabel);\r\n $(ele)\r\n .find('.availability')\r\n .hide();\r\n $(ele)\r\n .find('.availability-container .availability-msg')\r\n .show();\r\n } else {\r\n $(ele)\r\n .find('.add-to-cart span')\r\n .text(addToCartLabel);\r\n $(ele)\r\n .find('.availability')\r\n .show();\r\n $(ele)\r\n .find('.availability-container .availability-msg')\r\n .hide();\r\n }\r\n $(ele)\r\n .find('.product-desc .content')\r\n .html(data.product.shortDescription);\r\n $(ele)\r\n .find('.description-and-detail')\r\n .empty()\r\n .html(data.product.descriptionAndDetailsHtml);\r\n $(ele)\r\n .find('.sales-bdg')\r\n .empty()\r\n .html(data.product.saleBadgingHtml);\r\n $(ele)\r\n .find('.ex-promotion')\r\n .empty()\r\n .html(data.product.exclusiveBadgingHtml);\r\n $(ele)\r\n .find('.product-name')\r\n .empty()\r\n .html(data.product.productName);\r\n\r\n // reset and re-calculate the top offset when color/size is changed\r\n var $productDescContainer = $('.product-detail .product-description-container');\r\n $productDescContainer.removeAttr('style');\r\n\r\n if (!customUtil.isMobile() && $('.product-detail').length > 0) {\r\n setProductDetailsDescTop($('.product-detail'));\r\n }\r\n});\r\n\r\n// adding error message when size not selected\r\n// eslint-disable-next-line consistent-return\r\n$('body').on('product:beforeAddToCart', function(data, ele) {\r\n var isPdpSet = $(ele).closest('.product-set-detail').length;\r\n if (isPdpSet) {\r\n var noSelectionCount = 0;\r\n var $setProducts = $(ele)\r\n .closest('.product-detail')\r\n .find('.set-item');\r\n if (!$setProducts.length) {\r\n $setProducts = $(ele).closest('.product-detail.set-item');\r\n }\r\n $setProducts.each(function() {\r\n var $setProduct = $(this);\r\n var labelText = $setProduct.find('.size-selections').attr('data-value-select-size-label');\r\n var errorMessage = '

    ' + labelText + '

    ';\r\n var $sizeSelected = $setProduct.find('.custom-select-wrapper .size-selections .size-value.selected');\r\n if ($sizeSelected.length === 0) {\r\n noSelectionCount++;\r\n $setProduct\r\n .find('.product-description')\r\n .find('.availability')\r\n .empty()\r\n .html(errorMessage);\r\n\r\n $setProduct.find('.select-size').focus();\r\n $setProduct.find('.add-to-cart').prop('disabled', true);\r\n }\r\n });\r\n if (noSelectionCount > 0) {\r\n $(ele)\r\n .closest('.product-set-detail')\r\n .find('.add-to-cart-global')\r\n .prop('disabled', true);\r\n return false;\r\n }\r\n } else {\r\n var $productDetail = $(ele).closest('.product-detail');\r\n if (!$productDetail.length) {\r\n return false;\r\n }\r\n var selectedVal = $productDetail.find('.custom-select-wrapper .size-value.selected').data('attr-value');\r\n var $container = $(ele).closest('.product-detail');\r\n var labelText = $('.size-selections').attr('data-value-select-size-label');\r\n var errorMessage = '

    ' + labelText + '

    ';\r\n if ((selectedVal === undefined || selectedVal === 'undefined') && !isPdpSet) {\r\n data.preventDefault();\r\n if (customUtil.isMobile() || $('.availability').css('display') === 'none') {\r\n $container.find('.availability').show();\r\n $('#footercontent').addClass('message');\r\n }\r\n $container\r\n .find('.availability')\r\n .empty()\r\n .html(errorMessage);\r\n\r\n if ($('.desktop-menu').hasClass('d-none')) {\r\n $('body, html').animate({\r\n scrollTop:\r\n $('.size-container').offset().top -\r\n ($(window).innerHeight() + $('.prices-add-to-cart-actions').innerHeight()) / 2 +\r\n $('.size-container').innerHeight()\r\n });\r\n }\r\n\r\n $container.find('.select-size').focus();\r\n $container.find('.add-to-cart').prop('disabled', true);\r\n return false;\r\n }\r\n }\r\n handleSetUnavailabilityMessage();\r\n return false;\r\n});\r\n\r\nvar expandSizeGuide = function() {\r\n var sizeGuideAccordion = '.sizeGuide-expand-all';\r\n $(sizeGuideAccordion).toggleClass('expand');\r\n if ($(sizeGuideAccordion).hasClass('expand')) {\r\n $('.pdp-sizeGuide-modal-body > div').addClass('active');\r\n } else {\r\n $('.pdp-sizeGuide-modal-body > div').removeClass('active');\r\n }\r\n $(sizeGuideAccordion).text($(sizeGuideAccordion).text() === 'Collapse all' ? 'Expand all' : 'Collapse all');\r\n};\r\n\r\n$(document).on('click', '.sizeGuide-expand-all', function(e) {\r\n e.preventDefault();\r\n expandSizeGuide();\r\n});\r\n\r\nvar collapseSizeGuide = function() {\r\n $('.pdp-sizeGuide-modal-body > div').removeClass('active');\r\n $('.sizeGuide-expand-all')\r\n .removeClass('expand')\r\n .text(' Expand all');\r\n};\r\n\r\n$(document).on('click', '.sizeGuide-link', function() {\r\n $('.product-detail').addClass('sizeGuideShow');\r\n});\r\n\r\n$(document).on('hidden.bs.modal', '#pdp-sizeGuide', function() {\r\n $('.product-detail').removeClass('sizeGuideShow');\r\n setProductDetailsDescTop();\r\n collapseSizeGuide();\r\n});\r\n\r\nvar historyPushCount = 0;\r\nvar toTitleCase = function(phrase) {\r\n return phrase\r\n .toLowerCase()\r\n .split(' ')\r\n .map(function(word) {\r\n return word.charAt(0).toUpperCase() + word.slice(1);\r\n })\r\n .join(' ');\r\n};\r\n\r\n$(document).on('click', '.color-attribute', function() {\r\n var $this = $(this);\r\n var groudId = $(this).data('variationgroupid');\r\n var isPdp = $(this)\r\n .closest('.product-detail')\r\n .hasClass('product-wrapper');\r\n var pageTitle = document.title;\r\n var color = $(this)\r\n .find('.color-value')\r\n .data('attr-value');\r\n var productName = $(this)\r\n .closest('.product-detail')\r\n .find('.product-name')\r\n .text();\r\n var exclusiveBadge = $this.data('exclusivebadge');\r\n var salesBadge = $this.data('salesbadge');\r\n var $jsProductTile = $this.closest('.js-product-tile');\r\n var currentLocale = $(this).data('currentlocale');\r\n\r\n if (isPdp) {\r\n var newPageUrl = groudId + '.html';\r\n if (currentLocale && currentLocale !== 'default') {\r\n newPageUrl = newPageUrl + '?lang=' + currentLocale;\r\n }\r\n window.history.pushState('data', 'Title', newPageUrl);\r\n // update the canonical tag\r\n $('[rel=\"canonical\"]').attr('href', window.location.href);\r\n\r\n if (pageTitle.split('|').length > 0) {\r\n // update the page title\r\n var newPageTitle = pageTitle\r\n .trim()\r\n .split('|')\r\n .map(function(item, index) {\r\n // only update the product name in the title\r\n if (index === 0) {\r\n // concatinate the product color\r\n item = toTitleCase(productName + ' In ' + color);\r\n }\r\n return item;\r\n })\r\n .join(' | ');\r\n\r\n document.title = newPageTitle;\r\n }\r\n historyPushCount++;\r\n }\r\n\r\n // check if exclusive/sales badge has data value\r\n if (exclusiveBadge || salesBadge) {\r\n var badgeClass = 'badge-product';\r\n var badgeValue = salesBadge;\r\n var $targetEl = $jsProductTile.find('.product-detail');\r\n\r\n if (!salesBadge && exclusiveBadge) {\r\n badgeClass = 'badge-product badge-exclusive';\r\n badgeValue = exclusiveBadge;\r\n }\r\n\r\n // check if badge element not exist\r\n if ($jsProductTile.find('.badge-product').length === 0) {\r\n // create badge element and append to the target element\r\n var $newEl = $('
    ', {\r\n class: badgeClass\r\n }).html('' + badgeValue + '');\r\n $targetEl.append($newEl);\r\n } else {\r\n // update the badge element value\r\n $targetEl.find('.badge-product span').text(badgeValue);\r\n }\r\n }\r\n});\r\n\r\nif ($('.product-pdp').length > 0) {\r\n $(window).on('popstate', function() {\r\n if (historyPushCount > 0) {\r\n window.history.go(-historyPushCount);\r\n }\r\n });\r\n}\r\n\r\nvar pdpSizeGuideTitleClick = function() {\r\n if ($('.pdp-sizeGuide-modal-body .collapsible-xs.active').length === $('.pdp-sizeGuide-modal-body .collapsible-xs').length) {\r\n expandSizeGuide();\r\n } else if ($('.pdp-sizeGuide-modal-body .collapsible-xs.active').length === 0) {\r\n collapseSizeGuide();\r\n }\r\n};\r\n\r\n$(document).on('click', '#pdp-sizeGuide .collapsible-xs .title', pdpSizeGuideTitleClick);\r\n\r\nif ($('.thumbnail-carousel').length > 0) {\r\n $('body').on('click', '.thumbnail-carousel__item', function() {\r\n var $this = $(this);\r\n // todo remove a as wrapper here in base.js and in thumnailCarousel\r\n var imgThumbnailIndex = $this.find('img').data('index');\r\n var activeClass = 'thumbnail-carousel__item--active';\r\n $('.thumbnail-carousel__item').removeClass(activeClass);\r\n $('.carousel-item.active').removeClass('active');\r\n\r\n /* display the selected thumbnail image into the large image */\r\n $('.pdp-carousel .primary-images .carousel').carousel(imgThumbnailIndex);\r\n $('#carousel-item-' + imgThumbnailIndex)\r\n .addClass('active')\r\n .scroll();\r\n $this.addClass(activeClass);\r\n });\r\n}\r\n\r\n$('body').on('click', '.backinstock-notify', function() {\r\n var scrollToBISModule = function scrollIntoView(node) {\r\n var parent = node.parentElement;\r\n var parentCHeight = parent.clientHeight;\r\n var parentSHeight = parent.scrollHeight;\r\n // Doesn't scroll if parent element is body\r\n if (parentSHeight > parentCHeight && parent.parentElement) {\r\n var nodeHeight = node.clientHeight;\r\n var nodeOffset = node.offsetTop;\r\n var scrollOffset = nodeOffset + nodeHeight / 2 - parentCHeight / 2;\r\n parent.scrollTop = scrollOffset;\r\n }\r\n if (parent.parentElement) {\r\n scrollIntoView(parent);\r\n }\r\n };\r\n\r\n scrollToBISModule(document.querySelector('.product-description-container .attributes'));\r\n $('.notify-sign-up').removeClass('hide');\r\n $(this)\r\n .closest('.cart-and-ipay')\r\n .addClass('hide');\r\n});\r\n\r\n$('form.stock-notify-sign-up').on('stock-notify-sign-up:error', function(e, data) {\r\n csrf.updateTokens(data);\r\n});\r\n\r\n$('form[name=\"dwfrm_stockNotify\"]').on('submit', function(event) {\r\n event.preventDefault();\r\n\r\n var $form = $(this);\r\n var url = $form.attr('action');\r\n var pid = $('.product-id')\r\n .text()\r\n .trim();\r\n\r\n if (!pid) {\r\n return;\r\n }\r\n\r\n var newUrl = domUtil.appendToUrl(url, { pid: pid });\r\n var attentiveURL = domUtil.appendToUrl($form.data('attentive-action'), { pid: pid, isPDP: true });\r\n\r\n $form.spinner().start();\r\n $.ajax({\r\n url: newUrl,\r\n type: 'post',\r\n dataType: 'json',\r\n data: $form.serialize(),\r\n success: function(data) {\r\n if (!data.success) {\r\n $form.spinner().stop();\r\n formValidation($form, data);\r\n $('.error-msg').remove();\r\n if ('message' in data) {\r\n $form.find('#waitListJoin').addClass('is-invalid');\r\n $('#stock-notify-signup-form-email-error').empty();\r\n $('#stock-notify-signup-form-email-error').prepend(\"');\r\n }\r\n $('form.stock-notify-sign-up').trigger('stock-notify-sign-up:error', data);\r\n } else if (!$form.find('#attentive-pdp').is(':checked')) {\r\n $form.spinner().stop();\r\n $('.notify-sign-up .form-group, .notify-sign-up .btn.stock-notify-signup-email, .notify-sign-up.title').addClass('hide');\r\n $('.notify-sign-up .btn.stock-notify-signup-success').removeClass('hide');\r\n }\r\n },\r\n error: function() {\r\n $form.spinner().stop();\r\n }\r\n });\r\n\r\n if ($form.find('#attentive-pdp').is(':checked')) {\r\n $.ajax({\r\n url: attentiveURL,\r\n type: 'get',\r\n dataType: 'json',\r\n data: $form.serialize(),\r\n success: function (data) {\r\n $form.spinner().stop();\r\n if (!data.success) {\r\n formValidation($form, data);\r\n $('.error-msg').remove();\r\n if ('message' in data) {\r\n $form.find('#smsJoin').addClass('is-invalid');\r\n $('#sms-signup-form-error').empty();\r\n $('#sms-signup-form-error').prepend(\"');\r\n }\r\n $('form.stock-notify-sign-up').trigger('stock-notify-sign-up:error', data);\r\n } else {\r\n $('.notify-sign-up .form-group, .notify-sign-up .btn.stock-notify-signup-email, .notify-sign-up.title').addClass('hide');\r\n $('.notify-sign-up .btn.stock-notify-signup-success').removeClass('hide');\r\n }\r\n },\r\n error: function () {\r\n $form.spinner().stop();\r\n }\r\n });\r\n }\r\n});\r\n\r\n// remove isapplepay element on pdp for browsers that do not support it\r\nif ('ApplePaySession' in window === false) {\r\n $('isapplepay').remove();\r\n}\r\n\r\n// page load initialization on desktop only\r\nif (!customUtil.isMobile()) {\r\n setProductDetailsDescTop($('.product-detail'));\r\n\r\n $('body').on('click', '.product-pdp .size-attribute, .product-pdp .color-attribute', function() {\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n });\r\n}\r\n\r\n","'use strict';\r\nvar processInclude = require('base/util');\r\nvar base = require('./base');\r\nvar focusHelper = require('base/components/focus');\r\nvar baseQuickView = require('base/product/quickView');\r\n\r\n$(document).ready(function() {\r\n processInclude(require('./detail'));\r\n processInclude(require('./pdpProductDetails'));\r\n});\r\n\r\n/**\r\n * Generates the modal window on the first call.\r\n *\r\n */\r\nfunction getModalHtmlElement() {\r\n if ($('#quickViewModal').length !== 0) {\r\n $('#quickViewModal').remove();\r\n }\r\n var htmlString =\r\n '' +\r\n '
    ' +\r\n '' +\r\n '
    ' +\r\n '' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ';\r\n $('body').append(htmlString);\r\n}\r\n\r\n/**\r\n * @typedef {Object} QuickViewHtml\r\n * @property {string} body - Main Quick View body\r\n * @property {string} footer - Quick View footer content\r\n */\r\n\r\n/**\r\n * Parse HTML code in Ajax response\r\n *\r\n * @param {string} html - Rendered HTML from quickview template\r\n * @return {QuickViewHtml} - QuickView content components\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 * replaces the content in the modal window on for the selected product variation.\r\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\r\n */\r\nfunction fillModalElement(selectedValueUrl, el) {\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n $.ajax({\r\n url: selectedValueUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(data) {\r\n var parsedHtml = parseHtml(data.renderedTemplate),\r\n uniqueSellingPropsCopy = el.parent('.product-detail').find('.unique-selling-props-copy').clone();\r\n\r\n $('.quick-view-dialog .modal-body').empty();\r\n $('.quick-view-dialog .modal-body').html(parsedHtml.body);\r\n $('.quick-view-dialog .modal-footer').html(parsedHtml.footer);\r\n $('.full-pdp-link').text(data.quickViewFullDetailMsg);\r\n $('#quickViewModal .full-pdp-link').attr('href', data.productUrl);\r\n $('#quickViewModal .size-chart').attr('href', data.productUrl);\r\n $('#quickViewModal .modal-header .close .sr-only').text(data.closeButtonText);\r\n $('#quickViewModal .enter-message').text(data.enterDialogMessage);\r\n $('#quickViewModal .unique-selling-props-container').append(uniqueSellingPropsCopy);\r\n $('#quickViewModal').modal('show');\r\n\r\n $.spinner().stop();\r\n },\r\n error: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n showQuickview: function() {\r\n $('body').on('click', '.quickview', function(e) {\r\n e.preventDefault();\r\n var $this = $(this),\r\n selectedValueUrl = $this\r\n .closest('a.quickview')\r\n .attr('href');\r\n $(e.target).trigger('quickview:show');\r\n getModalHtmlElement();\r\n fillModalElement(selectedValueUrl, $this);\r\n });\r\n },\r\n focusQuickview: function() {\r\n $('body').on('shown.bs.modal', '#quickViewModal', function() {\r\n $('#quickViewModal .close').focus();\r\n });\r\n },\r\n trapQuickviewFocus: function() {\r\n $('body').on('keydown', '#quickViewModal', function(e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#quickViewModal',\r\n firstElementSelector: '.full-pdp-link',\r\n lastElementSelector: '.add-to-cart-global',\r\n nextToLastElementSelector: '.modal-footer .quantity-select'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n\r\n availability: base.availability,\r\n showSpinner: baseQuickView.showSpinner,\r\n hideDialog: baseQuickView.hideDialog,\r\n beforeUpdateAttribute: baseQuickView.beforeUpdateAttribute,\r\n updateAttribute: baseQuickView.updateAttribute,\r\n updateAddToCart: baseQuickView.updateAddToCart,\r\n updateAvailability: baseQuickView.updateAvailability\r\n};\r\n\r\n$(document).on('click', '.pdp-sizeGuide-modal .close', function() {\r\n $('#pdp-sizeGuide').remove();\r\n});\r\n\r\n$(document).on('show.bs.modal', '#quickViewModal', function() {\r\n $('.pdp-sizeGuide-modal .close').removeAttr('data-dismiss');\r\n $('.modal-body .swatch-circle').each(function(i, d) {\r\n if ($(d).hasClass('selected')) {\r\n var swatchVal = $(d).data('attr-value');\r\n $('.selected-color').text(swatchVal.toLowerCase());\r\n }\r\n });\r\n\r\n var tElement = document.querySelector('.product-desc .value');\r\n if (tElement != null) {\r\n var tElementText = tElement.innerText;\r\n var ellipsisText = EllipsisChar(tElementText, 168);\r\n tElement.innerText = ellipsisText;\r\n }\r\n});\r\n\r\nfunction EllipsisChar(text, size) {\r\n var len = text.length;\r\n\r\n if (len >= size) {\r\n text = text.substring(0, 168) + '...';\r\n }\r\n\r\n return text;\r\n}\r\n$(document).on('hidden.bs.modal', '#quickViewModal', function() {\r\n $('.modal-backdrop').remove();\r\n});\r\n","'use strict';\r\nvar base = require('./base');\r\nvar focusHelper = require('../components/focus');\r\n\r\n/**\r\n * Generates the modal window on the first call.\r\n *\r\n */\r\nfunction getModalHtmlElement() {\r\n if ($('#quickViewModal').length !== 0) {\r\n $('#quickViewModal').remove();\r\n }\r\n var htmlString = ''\r\n + '
    '\r\n + ''\r\n + '
    '\r\n + ''\r\n + '
    '\r\n + '
    '\r\n + ' '\r\n + ' '\r\n + '
    '\r\n + '
    '\r\n + '
    '\r\n + '
    '\r\n + '
    '\r\n + '
    ';\r\n $('body').append(htmlString);\r\n}\r\n\r\n/**\r\n * @typedef {Object} QuickViewHtml\r\n * @property {string} body - Main Quick View body\r\n * @property {string} footer - Quick View footer content\r\n */\r\n\r\n/**\r\n * Parse HTML code in Ajax response\r\n *\r\n * @param {string} html - Rendered HTML from quickview template\r\n * @return {QuickViewHtml} - QuickView content components\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 * replaces the content in the modal window on for the selected product variation.\r\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\r\n */\r\nfunction fillModalElement(selectedValueUrl) {\r\n $('.modal-body').spinner().start();\r\n $.ajax({\r\n url: selectedValueUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (data) {\r\n var parsedHtml = parseHtml(data.renderedTemplate);\r\n\r\n $('.modal-body').empty();\r\n $('.modal-body').html(parsedHtml.body);\r\n $('.modal-footer').html(parsedHtml.footer);\r\n $('.full-pdp-link').text(data.quickViewFullDetailMsg);\r\n $('#quickViewModal .full-pdp-link').attr('href', data.productUrl);\r\n $('#quickViewModal .size-chart').attr('href', data.productUrl);\r\n $('#quickViewModal .modal-header .close .sr-only').text(data.closeButtonText);\r\n $('#quickViewModal .enter-message').text(data.enterDialogMessage);\r\n $('#quickViewModal').modal('show');\r\n $('body').trigger('quickview:ready');\r\n\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n showQuickview: function () {\r\n $('body').on('click', '.quickview', function (e) {\r\n e.preventDefault();\r\n var selectedValueUrl = $(this).closest('a.quickview').attr('href');\r\n $(e.target).trigger('quickview:show');\r\n getModalHtmlElement();\r\n fillModalElement(selectedValueUrl);\r\n });\r\n },\r\n focusQuickview: function () {\r\n $('body').on('shown.bs.modal', '#quickViewModal', function () {\r\n $('#quickViewModal .close').focus();\r\n });\r\n },\r\n trapQuickviewFocus: function () {\r\n $('body').on('keydown', '#quickViewModal', function (e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#quickViewModal',\r\n firstElementSelector: '.full-pdp-link',\r\n lastElementSelector: '.add-to-cart-global',\r\n nextToLastElementSelector: '.modal-footer .quantity-select'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n availability: base.availability,\r\n addToCart: base.addToCart,\r\n showSpinner: function () {\r\n $('body').on('product:beforeAddToCart', function (e, data) {\r\n $(data).closest('.modal-content').spinner().start();\r\n });\r\n },\r\n hideDialog: function () {\r\n $('body').on('product:afterAddToCart', function () {\r\n $('#quickViewModal').modal('hide');\r\n });\r\n },\r\n beforeUpdateAttribute: function () {\r\n $('body').on('product:beforeAttributeSelect', function () {\r\n $('.modal.show .modal-content').spinner().start();\r\n });\r\n },\r\n updateAttribute: function () {\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n if ($('.modal.show .product-quickview>.bundle-items').length) {\r\n $('.modal.show').find(response.container).data('pid', response.data.product.id);\r\n $('.modal.show').find(response.container)\r\n .find('.product-id').text(response.data.product.id);\r\n } else if ($('.set-items').length) {\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else {\r\n $('.modal.show .product-quickview').data('pid', response.data.product.id);\r\n $('.modal.show .full-pdp-link')\r\n .attr('href', response.data.product.selectedProductUrl);\r\n }\r\n });\r\n },\r\n updateAddToCart: function () {\r\n $('body').on('product:updateAddToCart', function (e, response) {\r\n // update local add to cart (for sets)\r\n $('button.add-to-cart', response.$productContainer).attr('disabled',\r\n (!response.product.readyToOrder || !response.product.available));\r\n\r\n // update global add to cart (single products, bundles)\r\n var dialog = $(response.$productContainer)\r\n .closest('.quick-view-dialog');\r\n\r\n $('.add-to-cart-global', dialog).attr('disabled',\r\n !$('.global-availability', dialog).data('ready-to-order')\r\n || !$('.global-availability', dialog).data('available')\r\n );\r\n });\r\n },\r\n updateAvailability: function () {\r\n $('body').on('product:updateAvailability', function (e, response) {\r\n // bundle individual products\r\n $('.product-availability', response.$productContainer)\r\n .data('ready-to-order', response.product.readyToOrder)\r\n .data('available', response.product.available)\r\n .find('.availability-msg')\r\n .empty()\r\n .html(response.message);\r\n\r\n\r\n var dialog = $(response.$productContainer)\r\n .closest('.quick-view-dialog');\r\n\r\n if ($('.product-availability', dialog).length) {\r\n // bundle all products\r\n var allAvailable = $('.product-availability', dialog).toArray()\r\n .every(function (item) { return $(item).data('available'); });\r\n\r\n var allReady = $('.product-availability', dialog).toArray()\r\n .every(function (item) { return $(item).data('ready-to-order'); });\r\n\r\n $('.global-availability', dialog)\r\n .data('ready-to-order', allReady)\r\n .data('available', allAvailable);\r\n\r\n $('.global-availability .availability-msg', dialog).empty()\r\n .html(allReady ? response.message : response.resources.info_selectforstock);\r\n } else {\r\n // single product\r\n $('.global-availability', dialog)\r\n .data('ready-to-order', response.product.readyToOrder)\r\n .data('available', response.product.available)\r\n .find('.availability-msg')\r\n .empty()\r\n .html(response.message);\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","/* 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","'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","/**\r\n * DOM utilities to use native browser capabilities and avoid dependencies.\r\n *\r\n * @module dom.dom-util\r\n * @version 1.0.0\r\n * @since Sept 26 2019\r\n */\r\n\r\n'use strict';\r\n\r\n/**\r\n * Native querySelector to find first element in the dom with given selector\r\n *\r\n * @param {string | Object} selector Target selector element.\r\n * @param {string | Object} parent Parent element, if it not provided\r\n * fallback to document.\r\n * @return {Object} returns the target as a DOM node\r\n */\r\nconst queryFirst = (exports.queryFirst = (selector, parent = document) => {\r\n if (!parent) return null;\r\n return parent.querySelector(selector);\r\n});\r\n\r\n/**\r\n * Native querySelectorAll to find all the dom element with given selector.\r\n *\r\n * @param {string | Object} selector Target selector element.\r\n * @param {string | Object} parent Parent element, if it not provided\r\n * fallback to document.\r\n * @return {nodeList | Array} Returns the target as a DOM node.\r\n */\r\nconst queryAll = (exports.queryAll = (selector, parent = document) => {\r\n if (!parent) return null;\r\n return [].slice.call(parent.querySelectorAll(selector), 0);\r\n});\r\n\r\n/**\r\n * Returns the value(s) for the specified CSS rule(s), or all computed styles if no rule is specified\r\n *\r\n * @param {Element} element Target element\r\n * @param {string} rule CSS rule name (E.g. padding-top)\r\n * @return {string | Array | Object} Returns a string value, array of values, or styles object\r\n */\r\nconst getStyles = (exports.getStyles = (element, ...rules) => {\r\n const styles = getComputedStyle(element);\r\n\r\n if (!rules.length) {\r\n return styles;\r\n } else if (rules.length === 1) {\r\n return styles[rules[0]];\r\n }\r\n return rules.map(rule => styles[rule]);\r\n});\r\n\r\n/**\r\n * Remove DOM element\r\n *\r\n * @param {string | Object} el Target element.\r\n */\r\nexports.remove = el => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.parentElement.removeChild(node);\r\n }\r\n } else {\r\n el.parentElement.removeChild(el);\r\n }\r\n};\r\n\r\n/**\r\n * Set attribute to single or multiple elements\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string} attr attribute that need to be added.\r\n * @param {string | boolean} val value that need to be set for an attribute.\r\n */\r\nexports.setAttribute = (el, attr, val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.setAttribute(attr, val);\r\n }\r\n } else {\r\n el.setAttribute(attr, val);\r\n }\r\n};\r\n\r\n/**\r\n * Remove attribute to single or multiple elements\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string} attr attribute that need to be removed.\r\n */\r\nexports.removeAttribute = (el, attr) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.removeAttribute(attr);\r\n }\r\n } else {\r\n el.removeAttribute(attr);\r\n }\r\n};\r\n\r\n/**\r\n * Adds class or classes to the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n */\r\nexports.addClass = (el, ...val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.classList.add(...val);\r\n }\r\n } else {\r\n el.classList.add(...val);\r\n }\r\n};\r\n\r\n/**\r\n * Removes class or classes from the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n */\r\nexports.removeClass = (el, ...val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.classList.remove(...val);\r\n }\r\n } else {\r\n el.classList.remove(...val);\r\n }\r\n};\r\n\r\n/**\r\n * Toggles class or classes to the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n */\r\nexports.toggleClass = (el, ...val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.classList.toggle(...val);\r\n }\r\n } else {\r\n el.classList.toggle(...val);\r\n }\r\n};\r\n\r\n/**\r\n * Looks for availability of class or classes in the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n * @return {boolean} Returns availability of class in the target element.\r\n */\r\nexports.hasClass = (el, ...classes) => {\r\n const { classList } = el;\r\n for (let c = 0, n = classes.length; c < n; c++) {\r\n if (!classList.contains(classes[c])) return false;\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * Throttle util to prevent repeatative callbacks\r\n *\r\n * @param {function} callback Callback function.\r\n * @param {number} limit Timeout upon which throttle callback need to be called.\r\n * fallback to document.\r\n * @return {function} Throttle closure function.\r\n */\r\nexports.throttle = (callback, limit = 250) => {\r\n let isThrottling = false;\r\n\r\n return (...args) => {\r\n if (isThrottling) return;\r\n\r\n callback.apply(this, args);\r\n isThrottling = true;\r\n\r\n setTimeout(() => {\r\n isThrottling = false;\r\n }, limit);\r\n };\r\n};\r\n\r\n/**\r\n * Throttle util to prevent repeatative callbacks\r\n *\r\n * @param {function} callback Callback function.\r\n * @param {number} minimumDelay Delay upon which debounce callback need to be called.\r\n * fallback to document.\r\n * @return {function} Debounce closure function.\r\n */\r\nexports.debounce = (callback, minimumDelay = 250) => {\r\n let timer;\r\n\r\n return (...args) => {\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(() => {\r\n callback(...args);\r\n }, minimumDelay);\r\n };\r\n};\r\n\r\nexports.toArray = (...args) => {\r\n const makeArray = target => {\r\n let newTarget;\r\n if (!Array.isArray(target)) {\r\n const array = [].slice.call(target);\r\n newTarget = array.length ? array : [target];\r\n }\r\n return newTarget;\r\n };\r\n return args.reduce((results, arg) => {\r\n return results.concat(makeArray(arg));\r\n }, []);\r\n};\r\n\r\n/**\r\n * Height util to get outer height of element including margins\r\n *\r\n * @param {string | Object} el target element\r\n * @return {string} height of element\r\n */\r\nexports.outerHeight = el => {\r\n const styles = getStyles(el);\r\n\r\n return el.offsetHeight + parseInt(styles.marginTop, 0) + parseInt(styles.marginBottom, 0);\r\n};\r\n\r\n/**\r\n * Determine if an element is in the viewport\r\n * (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com\r\n * @param {Node} el The element\r\n * @return {boolean} Returns true if element is in the viewport\r\n */\r\nexports.isInViewport = el => {\r\n const scroll = window.scrollY || window.pageYOffset;\r\n const boundsTop = el.getBoundingClientRect().top + scroll;\r\n\r\n const numberOfViewportToCheck = el.dataset.nextViewportLazyLoad ? 2 : 1;\r\n\r\n const viewport = {\r\n top: scroll,\r\n bottom: scroll + window.innerHeight * numberOfViewportToCheck\r\n };\r\n\r\n const bounds = {\r\n top: boundsTop,\r\n bottom: boundsTop + el.clientHeight\r\n };\r\n\r\n return (bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom) || (bounds.top <= viewport.bottom && bounds.top >= viewport.top);\r\n};\r\n\r\n/**\r\n * Displays empty cart message\r\n * @param {string} message - Error message to display\r\n */\r\nexports.emptyCart = message => {\r\n const cartElements = queryAll('.cart');\r\n cartElements.forEach(cartElement => {\r\n cartElement.innerHTML = `

        ${message}

        `;\r\n });\r\n};\r\n\r\n/**\r\n * Animates scrolling the page to the specified Y coordinate\r\n * @param {number} y - The Y coordinate to scroll to\r\n * @param {number} duration - The duration of the animation in milliseconds\r\n * @param {function} callback - The callback to run when the animation is complete\r\n * @returns {JQuery}\r\n */\r\nexports.scrollTo = (y, duration = 600, callback = function() {}) => $('html, body').scrollTo(y, duration, callback);\r\n\r\n/**\r\n * Finds the last element sibling on the same line as the specified element\r\n * @param {Element} element - The element to reference when looking for siblings\r\n * @returns {Element} - returns last element in the row\r\n */\r\nexports.getLastElementInRow = element => {\r\n if (!element.nextElementSibling) return element;\r\n\r\n const bottom = element.offsetTop + element.scrollHeight;\r\n let sibling;\r\n\r\n while ((sibling = element.nextElementSibling)) {\r\n if (sibling.offsetTop >= bottom) return sibling.previousElementSibling;\r\n element = sibling;\r\n }\r\n\r\n return element;\r\n};\r\n\r\n/**\r\n * Update url with query parameter to handle remember placement\r\n *\r\n * @param {string} response - Ajax response HTML code\r\n * @return {undefined}\r\n */\r\nexports.updateUrlQueryParam = response => {\r\n const $queryParamsElement = $('
        ')\r\n .append($(response))\r\n .find('.append-params');\r\n if ($queryParamsElement.length) {\r\n const newUrl = window.location.href.split('?')[0] + '?' + $queryParamsElement.val();\r\n window.history.pushState(\r\n {\r\n path: newUrl\r\n },\r\n '',\r\n newUrl\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * This method returns character count\r\n * @param {HTMLElement} element - current element for which count has to be calculated\r\n * @return {number} character count\r\n */\r\nexports.getCharacterCount = function(element) {\r\n if (!element) {\r\n return 0;\r\n }\r\n return element.value.length;\r\n};\r\n\r\n/**\r\n * Waits for a specified element to exist.\r\n * @param {string} selector - The selector to match\r\n * @param {element} scope - The containing element to search within (default: document)\r\n * @param {number} timeout - How long (in milliseconds) to wait before rejecting the promise\r\n * @returns a Promise containing all matched elements\r\n */\r\nexports.waitForElement = (selector, scope = document, timeout = 0) =>\r\n new Promise((resolve, reject) => {\r\n const elements = queryAll(selector);\r\n\r\n if (elements.length) return resolve(elements);\r\n\r\n const observer = new MutationObserver((mutations, self) => {\r\n const elements = queryAll(selector);\r\n\r\n if (elements.length) {\r\n self.disconnect();\r\n resolve(elements);\r\n }\r\n });\r\n\r\n observer.observe(scope, { childList: true, subtree: true });\r\n\r\n if (timeout) {\r\n setTimeout(() => {\r\n observer.disconnect();\r\n reject('Timed out');\r\n }, timeout);\r\n }\r\n });\r\n\r\nexports.getStyles = getStyles;\r\nexports.queryAll = queryAll;\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} url - Original url\r\n * @param {Object} params - Parameters to append\r\n * @returns {string} result url with appended parameters\r\n */\r\nexports.appendToUrl = (url, params) => {\r\n var newUrl = url;\r\n newUrl +=\r\n (newUrl.indexOf('?') !== -1 ? '&' : '?') +\r\n Object.keys(params)\r\n .map(function(key) {\r\n return key + '=' + encodeURIComponent(params[key]);\r\n })\r\n .join('&');\r\n\r\n return newUrl;\r\n}\r\n","'use strict';\r\n\r\n/**\r\n * Remove all validation. Should be called every time before revalidating form\r\n * @param {element} form - Form to be cleared\r\n * @returns {void}\r\n */\r\nfunction clearFormErrors(form) {\r\n $(form)\r\n .find('.form-control.is-invalid')\r\n .removeClass('is-invalid');\r\n $(form)\r\n .find('.form-control.is-invalid')\r\n .removeAttr('aria-invalid');\r\n}\r\n\r\nmodule.exports = function(formElement, payload) {\r\n // clear form validation first\r\n clearFormErrors(formElement);\r\n $('.alert', formElement).remove();\r\n if (typeof payload === 'object' && payload.fields) {\r\n Object.keys(payload.fields).forEach(function(key) {\r\n if (payload.fields[key]) {\r\n var feedbackElement = $(formElement)\r\n .find('[name=\"' + key + '\"]')\r\n .parent()\r\n .children('.invalid-feedback');\r\n\r\n if (feedbackElement.length > 0) {\r\n if (Array.isArray(payload[key])) {\r\n feedbackElement.html(payload.fields[key].join('
        '));\r\n } else {\r\n feedbackElement.html(payload.fields[key]);\r\n }\r\n feedbackElement.siblings('.form-control').addClass('is-invalid');\r\n feedbackElement.siblings('.form-control').attr('aria-invalid', 'true');\r\n formElement.find('.is-invalid')[0].focus();\r\n }\r\n }\r\n });\r\n }\r\n if (payload && payload.error) {\r\n var form = $(formElement).prop('tagName') === 'FORM' ? $(formElement) : $(formElement).parents('form');\r\n\r\n form.find('button').before('
        ' + payload.error.join('
        ') + '
        ');\r\n }\r\n};\r\n"],"sourceRoot":""}