{"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/productDetail.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/wishlist.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/plpAddToCart.js","webpack:///./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/swiper.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/zoomer.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:///./cartridges/app_custom_aando/cartridge/client/default/js/swiperInit.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/zoomInit.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","processInclude","document","ready","carousel","interval","SitePreferences","SWIPERJS_ENABLED","displayMessage","button","status","spinner","stop","success","addClass","attr","append","msg","setTimeout","empty","removeAttr","toggleHeartIcon","wishlistItems","pid","match","indexOf","replace","toggleHeartIconForLoggedIn","toggleHeartIconForGuest","find","localStorage","removeItem","getItem","JSON","parse","addToWishlist","on","e","$addToWishlistBtn","url","closest","html","optionId","optionVal","$sizeSelectionsEl","isPDP","start","Resources","PLEASE_SELECT_SIZE","ajax","type","dataType","trigger","updateHeartIcon","isLoggedIn","redirectUrl","location","error","err","removeClass","saveToBrowserStorage","push","setItem","stringify","moveToWishlist","$targetElement","itemToMove","actionUrl","productID","productName","uuid","displayMessageAndRemoveFromCart","complete","initWishlistItems","response","container","oldPid","product","id","loggedIn","Urls","getWishlistItems","items","unshift","baseHelper","chooseBonusProducts","bonusUrl","remove","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","pliUUID","addToCartUrl","pageSize","labels","selectprods","method","$html","parsedHtml","renderedTemplate","body","parseHTML","footer","children","text","enterDialogMessage","closeButtonText","modal","initAddToBag","stopImmediatePropagation","$this","form","pidsObj","childProducts","quantity","href","newBonusDiscountLineItem","addedPid","miniCartReportingUrl","reportingURL","css","vgroupid","target","currentTarget","toggleClass","$colorAlert","prepend","prev","off","parent","variationGroup","changeColorSwatch","listprice","salesprice","salesBeforePromo","imgfront","imgfrontalt","imgback","imgbackalt","percentageoff","isNew","isBestSeller","exclusiveBadge","exclusiveBadgeID","salesBadge","defaultVariantId","hasSalePricebook","promotions","quickviewUrl","src","alt","content","formatted","listPriceText","salesPriceText","hide","show","salesBeforePromoContainer","insertAfter","badge","newToSale","NEW_TO_SALE","split","join","IS_INTERNATIONAL","toLowerCase","$targetEl","updateProductPromotions","onSizeClick","base","baseDetails","availability","addToCart","updateAttributesAndDetails","showSpinner","updateAttribute","pdpVideoID","eq","productId","productType","updateAvailability","selectAttribute","$productContainer","siblings","attributeSelect","readyToOrder","sizeChart","$prodSizeChart","$productDescContainer","isMobile","modalOptions","keyboard","backdrop","$sizeChart","has","copyProductLink","focusChooseBonusProductModal","pdpApplePay","isPdpSet","selectedVal","applePayButton","timeInt","$eddText","$eddPidDiv","limit","unHideEdd","trim","clearTimeout","videoId","thumbnailUrl","thumbnail_large","$videoButton","videoElement","paused","play","pause","include","forEach","attributesHtml","shortDescription","longDescription","updateAddToCart","available","enable","toArray","every","item","message","allAvailable","allReady","resources","info_selectforstock","$temp","select","execCommand","domUtil","viewportUtil","formValidation","handleSetUnavailabilityMessage","unavailableItems","setUnavailableMessageOne","setUnavailableMessageMany","attributeType","recommendationsHtml","einsteinProductRecommendationsHtml","price","percentOffMark","standardPrice","list","sales","percentageOff","salesPriceBeforePromo","productContainer","priceTemplate","cloneNode","priceSection","queryFirst","priceContainer","strikeThroughContainer","priceElement","salesContainer","salesPriceElement","salesBeforPromoElement","percentOffContainer","percentOffElement","textContent","innerHTML","updateProductPrice","PdpVideoID","selectedProductID","carouselId","imageLength","appendTo","toFixed","selectedEddProductID","eddPreOrderDate","inStockDate","eddObj","zipcode","carrierCode","serviceCode","eddObject","narvar","earliestEDD","getPdpEDD","hasPromotions","setProductDetailsDescTop","parentEl","$btnContainer","woh","topOffset","position","className","classType","errMessage","messages","ele","isSetItem","prop","variationAttributes","output","variationAttribute","values","key1","$colorSelector","variationGroupID","selectable","enableBackInStockNotification","showBackInStockModule","displayValue","selected","displayvalue","el","colorName","preOrderLabel","addToCartLabel","descriptionAndDetailsHtml","saleBadgingHtml","exclusiveBadgingHtml","noSelectionCount","$setProducts","$setProduct","errorMessage","$productDetail","$container","undefined","animate","innerHeight","expandSizeGuide","collapseSizeGuide","historyPushCount","groudId","isPdp","pageTitle","title","color","$jsProductTile","currentLocale","newPageUrl","history","pushState","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","serialize","scrollTo","behavior","$instances","animating","transformSupported","options","callback","noop","controls","zoomIn","zoomOut","next","previous","customClass","enertia","increment","marginMin","marginMax","retina","source","imageList","altList","properties","images","aspect","action","lastAction","keyDownTime","marginReal","originalDOM","gallery","$tiles","tiled","tilesTotal","tilesLoaded","tiledColumns","tiledRows","tiledHeight","tiledWidth","tiledThumbnail","centerLeft","centerTop","frameHeight","frameWidth","naturalHeight","naturalWidth","imageRatioWide","imageRatioTall","minHeight","minWidth","maxHeight","maxWidth","boundsTop","boundsBottom","boundsLeft","boundsRight","imageWidth","imageHeight","imageLeft","imageTop","targetImageWidth","targetImageHeight","targetImageLeft","targetImageTop","oldImageWidth","oldImageHeight","positionerLeft","positionerTop","targetPositionerLeft","targetPositionerTop","zoomPositionLeft","zoomPositionTop","touches","zoomPercentage","pinchStartX0","pinchStartX1","pinchStartY0","pinchStartY1","pinchEndX0","pinchEndX1","pinchEndY0","pinchEndY1","lastPinchEndX0","lastPinchEndY0","lastPinchEndX1","lastPinchEndY1","pinchDeltaStart","pinchDeltaEnd","pub","defaults","opts","extend","destroy","$targets","$target","slide","load","_load","_normalizeSource","resize","mobileAgentHash","idx","userAgent","navigator","outerWidth","Math","round","_setMinimums","scaleX","scaleY","$zoomer","_prefix","left","width","unload","$image","_init","$items","count","_build","_onAnimate","$targetParent","$zoomIn","$zoomOut","$next","$previous","$positioner","$holder","apply","opacity","_loadImage","loading","one","_onImageLoad","_tryAgain","$imageSlider","onImageLoad","_scaleImage","swiper","prependImageCallback","appendImageCallback","_preloadGallery","$slider","_reloadImg","thumbnail","tiles","requestAnimationFrame","toggleAnimation","_render","fn","Array","arguments","jQuery","$window","pan","has3d","createElement","transforms","webkitTransform","OTransform","msTransform","MozTransform","transform","insertBefore","style","getComputedStyle","getPropertyValue","removeChild","_getTransform3DSupport","$default","_zoomIn","_clearZoom","_zoomOut","_nextImage","_previousImage","_dragStart","_onTouch","j","img","$img","_onTileLoad","background","backgroundSize","tileHeightPercentage","tileWidthPercentage","tile","$tile","parseInt","_updateValues","delta","zoomNextPrevCallback","stopPropagation","_setZoomPosition","zoomInCallback","zoomOutCallback","_clearZoomPosition","mouseX","pageX","mouseY","pageY","_onDrag","_dragStop","preventManipulation","oe","originalEvent","pinchStartX","pinchEndX","pinchStartY","pointerId","identifier","splice","touchEventsBound","_onTouchEnd","activeTouch","clientX","clientY","imageWidthStart","imageHeightStart","sqrt","pow","_onTouchStart","pinchEndY","_onTouchMove","zoomer","isSafari","iosVersion","test","platform","v","appVersion","getCookie","cookiename","cookie","startC","endC","decodeURI","substring","setCookie","cookieName","cookieValue","nDays","today","Date","expire","setTime","getTime","escape","toGMTString","removeQueryParam","urlparts","String","getUrlQueryParameterValue","queryParamName","currentParameter","urlQueryVariables","decodedString","decodeURIComponent","focusHelper","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","parents","videoObj","pdpVideoLink","attrs","msgs","attrsWithSwatches","attrValue","$attrValue","$swatchButton","assistiveSelectedText","processSwatchValues","sizesHtml","size","updateSizeUrl","$attr","processNonSwatchValues","updateAttrs","productImages","primaryImageUrls","large","imgs","hiResImags","indexAdjustment","first","detach","createCarousel","thumbnailCarousel","template","$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","selectedValueUrl","redirect","updateOptions","getOptions","$elOption","urlValue","selectedValueId","methods","editBonusProducts","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","promotion","calloutMsg","setPids","$thisBtnAdd","$messageQtyError","$messageNoStock","qty","getPidValue","getQuantitySelected","$addToCartBtn","handlePostCartAdd","sfmcCartInfo","_etmc","selectBonusProduct","removeBonusProduct","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","backToTop","zoomInFrameID","zoomOutFrameID","previousTimeStamp","maxRatioOriginal","initZoom","imageToOpen","carouselImages","zoomerOpt","imageRatio","Swiper","direction","loop","grabCursor","speed","threshold","followFinger","preventInteractionOnTransition","centeredSlides","effect","zoom","maxRatio","pagination","clickable","navigation","nextEl","prevEl","afterInit","_swiper","params","initZoomControls","slideChange","tap","doubleTap","touchStart","touchEnd","touchMove","zoomChange","scale","imageEl","slideEl","minRatio","allowSlidePrev","allowSlideNext","stopAnimationInit","zoomOutEnable","zoomInEnable","$slide","$clone","cloneInt","setInterval","clearInterval","$slideActive","$slidePrev","clone","prevData","prevCenterLeft","prevCenterTop","$slideNext","nextData","nextCenterLeft","nextCenterTop","prependSlide","appendSlide","cancelAnimationFrame","timestamp","$zoomContainer","in","out","retryFunc","zhptop","atcPid","getQuantitySelector","resetUrl","parseHtml","messageType","$checkIcon","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","$selected","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","msgSuccess","reload","queryAll","selector","getStyles","element","styles","rules","rule","isArray","NodeList","setAttribute","removeAttribute","classList","add","toggle","contains","throttle","isThrottling","args","debounce","timer","minimumDelay","makeArray","newTarget","array","reduce","results","arg","concat","offsetHeight","marginTop","marginBottom","scrollY","pageYOffset","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","encodeURIComponent","formElement","payload","clearFormErrors","fields","feedbackElement","before"],"mappings":"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","file":"default/js/productDetail.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 = 152);\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\n\r\nvar processInclude = require('base/util');\r\n\r\n$(document).ready(function () {\r\n processInclude(require('./product/detail'));\r\n processInclude(require('./product/wishlist'));\r\n processInclude(require('./product/pdpProductDetails'));\r\n processInclude(require('./components/plpAddToCart'));\r\n\r\n $('.carousel').carousel({\r\n interval: false\r\n });\r\n\r\n if (window.SitePreferences.SWIPERJS_ENABLED) {\r\n processInclude(require('./swiperInit'));\r\n } else {\r\n processInclude(require('./zoomInit'));\r\n }\r\n});\r\n","'use strict';\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} data - data returned from the server's ajax call\r\n * @param {Object} button - button that was clicked to add a product to the wishlist\r\n */\r\nfunction displayMessage(data, button) {\r\n /* OTB Code modification start */\r\n $.spinner().stop();\r\n var status;\r\n if (data.success) {\r\n button.addClass('active');\r\n status = 'alert-success';\r\n button.attr('aria-pressed', 'true');\r\n } else {\r\n // button.removeClass('active');\r\n status = 'error-message';\r\n }\r\n /* OTB Code modification ends */\r\n if ($('.add-to-wishlist-messages').length === 0) {\r\n $('header').append('
');\r\n }\r\n $('.add-to-wishlist-messages').append('
' + data.msg + '
');\r\n\r\n setTimeout(function() {\r\n $('.add-to-wishlist-messages').empty();\r\n button.removeAttr('disabled');\r\n }, 5000);\r\n}\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} data - data returned from the server's ajax call\r\n */\r\nfunction displayMessageAndRemoveFromCart(data) {\r\n var status = data.success ? 'alert-success' : 'alert-danger';\r\n\r\n if ($('.add-to-wishlist-messages').length === 0) {\r\n $('header').append('
');\r\n }\r\n $('.add-to-wishlist-messages').append('
' + data.msg + '
');\r\n\r\n setTimeout(function() {\r\n $('.add-to-wishlist-messages').empty();\r\n }, 1500);\r\n var $targetElement = $('a[data-pid=\"' + data.pid + '\"]')\r\n .closest('.product-info')\r\n .find('.remove-product');\r\n var itemToMove = {\r\n actionUrl: $targetElement.data('action'),\r\n productID: $targetElement.data('pid'),\r\n productName: $targetElement.data('name'),\r\n uuid: $targetElement.data('uuid')\r\n };\r\n $('body').trigger('afterMovedtoWishlist', itemToMove);\r\n}\r\n\r\n/**\r\n * Toggle heart icons\r\n * @param {Object} wishlistItems - wish list items\r\n */\r\nfunction toggleHeartIcon(wishlistItems) {\r\n $('.add-to-wish-list:not(.active)').each(function() {\r\n var pid = $(this).attr('class').match(/\\bpid-\\S*\\b/);\r\n if (pid && pid.length && wishlistItems.indexOf(pid[0].replace('pid-', '')) >= 0) {\r\n $(this).addClass('active');\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Toggle heart icons for logged-in user\r\n * @param {Object} wishlistItems - wish list items\r\n */\r\nfunction toggleHeartIconForLoggedIn(wishlistItems) {\r\n toggleHeartIcon(wishlistItems);\r\n}\r\n\r\n/**\r\n * Toggle heart icons for guest user\r\n */\r\nfunction toggleHeartIconForGuest () {\r\n if ($('.header-container').find('.heart-active-icon').hasClass('d-none')) {\r\n localStorage.removeItem('wishlistItems');\r\n } else {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n if (wishlistItems.length) {\r\n toggleHeartIcon(wishlistItems);\r\n }\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n addToWishlist: function() {\r\n $(document).on('click', '.add-to-wish-list', function(e) {\r\n e.preventDefault();\r\n var $addToWishlistBtn = $(this);\r\n var url = $(this).data('href');\r\n var button = $(this);\r\n var pid = $(this)\r\n .closest('.product-detail')\r\n .find('.product-id')\r\n .html();\r\n var optionId = $(this)\r\n .closest('.product-detail')\r\n .find('.product-option')\r\n .attr('data-option-id');\r\n var optionVal = $(this)\r\n .closest('.product-detail')\r\n .find('.options-select option:selected')\r\n .attr('data-value-id');\r\n optionId = optionId || null;\r\n optionVal = optionVal || null;\r\n var $sizeSelectionsEl = $('.size-selections'),\r\n isPDP = $('.product-detail.product-pdp').length > 0;\r\n\r\n if (!url || !pid) {\r\n return;\r\n }\r\n\r\n $.spinner().start();\r\n $(this).attr('disabled', true);\r\n\r\n //stop the script execution and display an error message if there's no size selected\r\n //only trigger the size validation on PDP\r\n if (isPDP && $sizeSelectionsEl.length && $sizeSelectionsEl.find('.size-attribute[aria-checked=\"true\"]').length === 0) {\r\n const errMsg = {\r\n success: false,\r\n msg: window.Resources.PLEASE_SELECT_SIZE\r\n }\r\n\r\n displayMessage(errMsg, button);\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'post',\r\n dataType: 'json',\r\n data: {\r\n pid: pid,\r\n optionId: optionId,\r\n optionVal: optionVal\r\n },\r\n success: function(data) {\r\n if (data.success) {\r\n $.spinner().stop();\r\n $('body').trigger('gtm:product:afterAddToWishlist', data);\r\n this.updateHeartIcon();\r\n if (!data.isLoggedIn && data.redirectUrl) {\r\n window.location = data.redirectUrl;\r\n } else {\r\n displayMessage(data, button);\r\n }\r\n } else {\r\n this.updateHeartIcon();\r\n displayMessage(data, button);\r\n }\r\n },\r\n error: function(err) {\r\n displayMessage(err, button);\r\n },\r\n updateHeartIcon: function () {\r\n $addToWishlistBtn.closest('.product-detail').find('.add-to-wish-list').addClass('active');\r\n $('.header-container').find('.heart-active-icon').removeClass('d-none');\r\n $('.header-container').find('.heart-inactive-icon').addClass('d-none');\r\n this.saveToBrowserStorage();\r\n },\r\n saveToBrowserStorage: function () {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems && wishlistItems.length) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n } else {\r\n wishlistItems = [];\r\n }\r\n if (wishlistItems.indexOf(pid) === -1) {\r\n wishlistItems.push(pid);\r\n localStorage.setItem('wishlistItems', JSON.stringify(wishlistItems));\r\n }\r\n }\r\n });\r\n });\r\n },\r\n moveToWishlist: function() {\r\n $('body').on('click', '.product-move', function(e) {\r\n e.preventDefault();\r\n var url = $(this).attr('href');\r\n var pid = $(this).data('pid');\r\n var optionId = $(this)\r\n .closest('.product-info')\r\n .find('.lineItem-options-values')\r\n .data('option-id');\r\n var optionVal = $(this)\r\n .closest('.product-info')\r\n .find('.lineItem-options-values')\r\n .data('value-id');\r\n optionId = optionId || null;\r\n optionVal = optionVal || null;\r\n if (!url || !pid) {\r\n return;\r\n }\r\n\r\n $.spinner().start();\r\n $.ajax({\r\n url: url,\r\n type: 'post',\r\n dataType: 'json',\r\n data: {\r\n pid: pid,\r\n optionId: optionId,\r\n optionVal: optionVal\r\n },\r\n success: function(data) {\r\n $('body').trigger('gtm:product:afterAddToWishlist', data);\r\n displayMessageAndRemoveFromCart(data);\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n initWishlistItems: function() {\r\n toggleHeartIconForGuest();\r\n\r\n $('body').on('search:updateProducts', function () {\r\n toggleHeartIconForGuest();\r\n });\r\n\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n try {\r\n var $addToWishlistBtn = response.container.find('.add-to-wish-list');\r\n var oldPid = $addToWishlistBtn.attr('class').match(/\\bpid-\\S*\\b/);\r\n if (oldPid && oldPid.length) {\r\n $addToWishlistBtn\r\n .removeClass('active')\r\n .removeClass(oldPid)\r\n .addClass('pid-' + response.data.product.id);\r\n toggleHeartIconForGuest();\r\n }\r\n // eslint-disable-next-line no-shadow\r\n } catch (e) {\r\n // Error encountered while updating wishlist heart icon\r\n }\r\n });\r\n\r\n // For Logged in user\r\n if (window.Resources.loggedIn) {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n if (wishlistItems.length) {\r\n if (wishlistItems[0] !== 'loggedIn') {\r\n $.ajax({\r\n url: window.Urls.getWishlistItems,\r\n dataType: 'json',\r\n success: function (data) {\r\n wishlistItems = data.items;\r\n if (data.items && data.items.length) {\r\n toggleHeartIconForLoggedIn(wishlistItems);\r\n }\r\n wishlistItems.unshift('loggedIn');\r\n localStorage.setItem('wishlistItems', JSON.stringify(wishlistItems));\r\n }\r\n });\r\n } else {\r\n toggleHeartIconForLoggedIn(wishlistItems);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","var baseHelper = require('../product/base');\r\n\r\n/**\r\n * Retrieves the relevant pid value\r\n * @param {jquery} $el - DOM container for a given add to cart button\r\n * @return {string} - value to be used when adding product to cart\r\n */\r\nfunction getPidValue($el) {\r\n var pid;\r\n pid = $el.data('pid');\r\n return pid;\r\n}\r\n\r\n/**\r\n * Parses the html for a modal window\r\n * @param {string} html - representing the body and footer of the modal window\r\n *\r\n * @return {Object} - Object with properties body and footer.\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
').append($.parseHTML(html));\r\n\r\n var body = $html.find('.product-quickview');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @param {Object} data - data object used to fill in dynamic portions of the html\r\n */\r\nfunction chooseBonusProducts(data) {\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n if ($('#chooseBonusProductModal').length !== 0) {\r\n $('#chooseBonusProductModal').remove();\r\n }\r\n var bonusUrl;\r\n if (data.bonusChoiceRuleBased) {\r\n bonusUrl = data.showProductsUrlRuleBased;\r\n } else {\r\n bonusUrl = data.showProductsUrlListBased;\r\n }\r\n\r\n var htmlString =\r\n '' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n data.labels.selectprods +\r\n '' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
';\r\n $('body').append(htmlString);\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n $.ajax({\r\n url: bonusUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (response) {\r\n var parsedHtml = parseHtml(response.renderedTemplate);\r\n $('#chooseBonusProductModal .modal-body').empty();\r\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\r\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\r\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\r\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\r\n $('#chooseBonusProductModal').modal('show');\r\n },\r\n complete: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\r\n * @param {string} response - ajax response from clicking the add to cart button\r\n */\r\nfunction handlePostCartAdd(response) {\r\n $('.minicart').trigger('count:update', response);\r\n // show add to cart toast\r\n if (response.newBonusDiscountLineItem && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\r\n chooseBonusProducts(response.newBonusDiscountLineItem);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n initAddToBag: function () {\r\n var addtoBag = function (e) {\r\n if ($(this).closest('.plp-atc').length) {\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n var addToCartUrl;\r\n var pid;\r\n var pidsObj;\r\n var $this = $(this);\r\n\r\n $this.addClass('focusable'); // Make this element the only item to accept :focus styling while this size is being added to cart to avoid confusion\r\n\r\n if ($(this).closest('.js-product-tile-pd').length === 0) {\r\n $this.closest('.product-tile').removeClass('active-hover');\r\n }\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .not('.hidden')\r\n .removeClass('hover-active');\r\n\r\n pid = getPidValue($(this));\r\n\r\n addToCartUrl = $(this)\r\n .closest('.add-to-cart')\r\n .data('addtocartUrl');\r\n\r\n var form = {\r\n pid: pid,\r\n pidsObj: pidsObj,\r\n childProducts: [],\r\n quantity: 1\r\n };\r\n\r\n form.options = [];\r\n\r\n if (addToCartUrl) {\r\n $.ajax({\r\n url: addToCartUrl,\r\n method: 'POST',\r\n data: form,\r\n success: function (data) {\r\n // reload cart page if plp is on cart page\r\n if ($('.cart.cart-page').length > 0) {\r\n window.location.href = data.redirectUrl;\r\n } else {\r\n handlePostCartAdd(data);\r\n data.addedPid = pid;\r\n $('body').trigger('product:afterAddToCart', data);\r\n $this\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag.desktop')\r\n .addClass('hidden');\r\n $this.closest('.add-to-cart[data-attr=\"size\"]').addClass('hidden');\r\n $this\r\n .closest('.product-tile')\r\n .find('.add-to-cart-variation-group.plp-atc.collapsible-xs')\r\n .removeClass('active');\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hover-active');\r\n baseHelper.miniCartReportingUrl(data.reportingURL);\r\n }\r\n },\r\n error: function () {\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hover-active');\r\n },\r\n complete: function () {\r\n $this.removeClass('focusable'); // Make other elements focusable after size has been added to cart\r\n $('.js-size-select-show').removeClass('hidden');\r\n }\r\n });\r\n }\r\n };\r\n\r\n $('body')\r\n .on('click', '.plp-atc .size-selections .size-attribute', addtoBag)\r\n .on('mouseleave', '.add-to-cart-variation-group', function () {\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'absolute' &&\r\n $(this).closest('.js-product-tile-pd').length === 0\r\n ) {\r\n $(this)\r\n .find('.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n })\r\n .on('mouseleave', '.plp-search-results .product-tile, .products-container .product-tile, .product-page-bottom-section .product-tile', function () {\r\n $(this).addClass('active-hover');\r\n $(this)\r\n .find('.js-plp-add-to-bag')\r\n .removeClass('hidden');\r\n })\r\n .on('mouseleave', '.js-product-tile-pd .js-product-tile.active-hover', function(e) {\r\n $(this)\r\n .find('.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(this)\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n })\r\n .on(\r\n 'mouseenter',\r\n '.container-fluid.search-results.plp-search-results .active-hover .js-plp-add-to-bag, .products-container .active-hover .js-plp-add-to-bag, .product-page-bottom-section .active-hover .js-plp-add-to-bag',\r\n function (e) {\r\n if ($(this).css('position') === 'absolute') {\r\n var vgroupid = $(e.target)\r\n .closest('.product-tile')\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart.hidden[data-group-pid=\"' + vgroupid + '\"]')\r\n .removeClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .addClass('hovered');\r\n }\r\n }\r\n )\r\n .on(\r\n 'mouseenter',\r\n '.js-product-tile-pd .js-product-tile.active-hover',\r\n function(e) {\r\n var vgroupid = $(e.currentTarget)\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n $(e.currentTarget)\r\n .closest('.product')\r\n .find('.row.add-to-cart.hidden[data-group-pid=\"' + vgroupid + '\"]')\r\n .removeClass('hidden');\r\n }\r\n )\r\n .on(\r\n 'click',\r\n '.container-fluid.search-results.plp-search-results .js-plp-add-to-bag, .products-container .plp-atc .js-plp-add-to-bag, .product-page-bottom-section .plp-atc .js-plp-add-to-bag',\r\n function (e) {\r\n e.preventDefault();\r\n var vgroupid;\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'relative'\r\n ) {\r\n vgroupid = $(e.target)\r\n .closest('.product-tile')\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n if (vgroupid) {\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .not('[data-group-pid=\"' + vgroupid + '\"]')\r\n .addClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"][data-group-pid=\"' + vgroupid + '\"]')\r\n .toggleClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n }\r\n if (!vgroupid) {\r\n var $colorAlert = $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .find('.color.alert');\r\n if ($colorAlert.length) {\r\n $colorAlert.remove();\r\n }\r\n $colorAlert = $('Please select color.');\r\n $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .prepend($colorAlert);\r\n setTimeout(function () {\r\n $colorAlert.remove();\r\n }, 5000);\r\n $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .removeClass('active');\r\n }\r\n }\r\n )\r\n .on(\r\n 'click',\r\n '.container-fluid.search-results.plp-search-results button.color-attribute, .products-container button.color-attribute, .product-recommendation-details button.color-attribute',\r\n function (e) {\r\n e.preventDefault();\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'relative'\r\n ) {\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n $(this)\r\n .closest('.tile-body')\r\n .prev('.add-to-cart-variation-group')\r\n .removeClass('active');\r\n }\r\n )\r\n .off('click', '.js-product-tile-pd, js-product-tile-container')\r\n .on('click', '.js-size-select-show', function() {\r\n $('.js-size-select-show').removeClass('hidden');\r\n $(this).addClass('hidden');\r\n $(this).closest('.js-product-tile-container').find('.add-to-cart').removeClass('hidden');\r\n })\r\n .on('click', '.js-size-select-close', function() {\r\n $(this).closest('.js-product-tile-container').find('.js-size-select-show').removeClass('hidden');\r\n $(this).closest('.js-product-tile-container').find('.add-to-cart').addClass('hidden');\r\n })\r\n .on('click', function (e) {\r\n if (!$(e.target).hasClass('accordion-icon') && (!($(e.target).hasClass('js-size-select-show') ||\r\n $(e.target).parent().hasClass('js-size-select-show') ||\r\n $(e.target).hasClass('js-plp-add-to-bag')))\r\n ) {\r\n var variationGroup = $('.add-to-cart-variation-group');\r\n if (variationGroup && variationGroup.hasClass('active')) {\r\n variationGroup.removeClass('active');\r\n variationGroup.find('.js-plp-add-to-bag').attr('aria-expanded', 'false');\r\n variationGroup.find('.add-to-cart').addClass('hidden');\r\n }\r\n\r\n $('.js-size-select-show').removeClass('hidden');\r\n $('.add-to-cart').addClass('hidden');\r\n }\r\n });\r\n },\r\n changeColorSwatch: $(document).on('click', '.product-tile .color-swatches button', function () {\r\n var $this = $(this);\r\n var container = $this.closest('.product-tile');\r\n\r\n container.find('button').removeClass('active');\r\n container.find('button.color-attribute').each(function () {\r\n $(this).attr('aria-checked', false);\r\n });\r\n $this.addClass('active').attr('aria-checked', true);\r\n var listprice = $this.data('listprice');\r\n var salesprice = $this.data('salesprice');\r\n var salesBeforePromo = $this.data('salespricebeforepromo');\r\n var imgfront = $this.data('imgfront');\r\n var imgfrontalt = $this.data('imgfrontalt');\r\n var imgback = $this.data('imgback');\r\n var imgbackalt = $this.data('imgbackalt');\r\n var percentageoff = $this.data('percentageoff');\r\n var isNew = $this.data('isnew');\r\n var isBestSeller = $this.data('isbestseller');\r\n var exclusiveBadge = $this.data('exclusivebadge');\r\n var exclusiveBadgeID = $this.data('exclusivebadgeid');\r\n var salesBadge = $this.data('salesbadge');\r\n var id = $this.data('id');\r\n var defaultVariantId = $this.data('defaultvariantid');\r\n var hasSalePricebook = $this.data('hassalepricebook');\r\n var promotions = $this.data('promotions');\r\n var url = $this.data('url');\r\n var quickviewUrl = '/on/demandware.store/Sites-aando-Site/default/Product-ShowQuickView?pid=' + id;\r\n var name = $this.data('varname');\r\n container.find('.link').text(name);\r\n container.find('.front-card').attr({ src: imgfront, alt: imgfrontalt });\r\n container.find('.back-card').attr({ src: imgback, alt: imgbackalt });\r\n container.find('a').attr({ href: url });\r\n container.find('a.quickview').attr({ href: quickviewUrl });\r\n\r\n container.find('.bfx-sku').text(defaultVariantId);\r\n if (!listprice) {\r\n container.find('.strike-through').hide();\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n container.find('.percent-value').text('');\r\n } else {\r\n var isHidden = container.find('.strike-through').css('display');\r\n if (isHidden === 'none') {\r\n container.find('.strike-through').css('display', '');\r\n }\r\n\r\n if (container.find('.bfx-sale-price').length) {\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: listprice.value })\r\n .text(listprice.formatted);\r\n container.find('.percent-value').text(percentageoff);\r\n } else {\r\n var listPriceText =\r\n '' +\r\n '' +\r\n '' +\r\n listprice.formatted +\r\n '' +\r\n '' +\r\n '';\r\n var salesPriceText =\r\n '' + salesprice.formatted + '';\r\n var percentText = '' + percentageoff + '';\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.price-section').html(salesPriceText);\r\n } else {\r\n container.find('.price-section').html(listPriceText + salesPriceText);\r\n }\r\n }\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n }\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.strike-through').hide();\r\n container.find('.percent-value').text('');\r\n }\r\n // eslint-disable-next-line no-unused-expressions\r\n salesprice &&\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n // eslint-disable-next-line no-unused-expressions\r\n isNew &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('New Arrivals');\r\n // eslint-disable-next-line no-unused-expressions\r\n isBestSeller &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('Best Seller');\r\n\r\n if (!isNew && !isBestSeller) {\r\n container.find('.badge-product').hide();\r\n\r\n if (salesBadge) {\r\n container.find('.badge-product').show();\r\n }\r\n }\r\n\r\n var salesBeforePromoContainer = container.find('.sales-before-promo');\r\n if (salesBeforePromo) {\r\n if (salesBeforePromoContainer.length) {\r\n salesBeforePromoContainer.show().text(salesBeforePromo.formatted);\r\n } else {\r\n $(`${salesBeforePromo.formatted}`).insertAfter(container.find('.list'));\r\n }\r\n } else if (salesBeforePromoContainer.length) {\r\n salesBeforePromoContainer.hide();\r\n }\r\n\r\n // display exclusive badge when not empty and if sales badge is empty\r\n container.find('.badge-product').removeClass('badge-exclusive');\r\n\r\n if (exclusiveBadge && !salesBadge) {\r\n container.find('.badge-product').show();\r\n container.find('.badge-product').addClass('badge-exclusive');\r\n var badge;\r\n\r\n if (!container.find('.badge-product').length) {\r\n badge = '
' + exclusiveBadge + '
';\r\n container.find('.product-detail').append(badge);\r\n } else {\r\n badge = '' + exclusiveBadge + '';\r\n container.find('.badge-product').html(badge);\r\n }\r\n\r\n // hide the 'New to Sale' badge for international users\r\n var newToSale = window.Resources.NEW_TO_SALE.split(' ').join('');\r\n if (window.SitePreferences.IS_INTERNATIONAL && exclusiveBadgeID === newToSale.toLowerCase()) {\r\n container.find('.badge-product').hide();\r\n }\r\n }\r\n\r\n /* re-renders the applicable promotions if the product has active product-level promotions */\r\n var $targetEl = container.find('.applicable-promotions');\r\n if (promotions && promotions.length > 0) {\r\n baseHelper.updateProductPromotions($targetEl, promotions);\r\n } else {\r\n $targetEl.empty();\r\n }\r\n }),\r\n onSizeClick: $('body').on('click', '.product-page-bottom-section .size-value, .products-container .size-value', function () {\r\n if ($(this).hasClass('selected') === true) {\r\n $(this).removeClass('selected');\r\n } else {\r\n $(this).addClass('selected');\r\n }\r\n })\r\n};\r\n","'use strict';\r\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","/* eslint-disable */\r\n\r\n/*\r\n * Zoomer v3.1.0 - 2015-12-39\r\n * A jQuery plugin for smooth image exploration. Part of the formstone library.\r\n * http://classic.formstone.it/components/zoomer/\r\n *\r\n * Copyright 2015 Ben Plum; MIT Licensed\r\n * Marc Brooks; MIT Licensed\r\n */\r\n\r\n(function($, window) {\r\n 'use strict';\r\n\r\n var $window = $(window),\r\n $instances,\r\n animating = false,\r\n animationFrameID,\r\n transformSupported = false;\r\n\r\n /**\r\n * @options\r\n * @param callback [function] <$.noop> \"\"\r\n * @param controls.postion [string] <\"bottom\"> \"Position of default controls\"\r\n * @param controls.zoomIn [string] <> \"Custom zoom control selector\"\r\n * @param controls.zoomOut [string] <> \"Custom zoom control selector\"\r\n * @param controls.next [string] <> \"Custom pagination control selector\"\r\n * @param controls.previous [string] <> \"Custom pagination control selector\"\r\n * @param customClass [string] <''> \"Class applied to instance\"\r\n * @param enertia [number] <0.2> \"Zoom smoothing (0.1 = butter, 0.9 = sandpaper)\"\r\n * @param increment [number] <0.01> \"Zoom speed (0.01 = tortoise, 0.1 = hare)\"\r\n * @param marginMin [] <> \"\"\r\n * @param marginMax [] <> \"\"\r\n * @param retina [boolean] \"Flag for retina image support\"\r\n * @param source [string | object] \"Source image (string) or tiles (object)\"\r\n * @param imageList [array] \"Overriding image list through JSON\"\r\n */\r\n var options = {\r\n callback: $.noop,\r\n controls: {\r\n position: 'bottom',\r\n zoomIn: null,\r\n zoomOut: null,\r\n next: null,\r\n previous: null\r\n },\r\n customClass: '',\r\n enertia: 0.2,\r\n increment: 0.01,\r\n marginMin: 30, // Min bounds\r\n marginMax: 100, // Max bounds\r\n retina: false,\r\n source: null,\r\n imageList: [],\r\n altList: [],\r\n isMobile: false\r\n };\r\n\r\n // Internal data\r\n var properties = {\r\n images: [],\r\n aspect: '',\r\n action: '',\r\n lastAction: '',\r\n keyDownTime: 0,\r\n marginReal: 0,\r\n originalDOM: '',\r\n\r\n // Gallery\r\n gallery: false,\r\n index: 0,\r\n\r\n // Tiles\r\n $tiles: null,\r\n tiled: false,\r\n tilesTotal: 0,\r\n tilesLoaded: 0,\r\n tiledColumns: 0,\r\n tiledRows: 0,\r\n tiledHeight: 0,\r\n tiledWidth: 0,\r\n tiledThumbnail: null,\r\n\r\n // Frame\r\n centerLeft: 0,\r\n centerTop: 0,\r\n frameHeight: 0,\r\n frameWidth: 0,\r\n\r\n // Original image\r\n naturalHeight: 0,\r\n naturalWidth: 0,\r\n imageRatioWide: 0,\r\n imageRatioTall: 0,\r\n\r\n // Dimensions\r\n minHeight: null,\r\n minWidth: null,\r\n maxHeight: 0,\r\n maxWidth: 0,\r\n\r\n // Bounds\r\n boundsTop: 0,\r\n boundsBottom: 0,\r\n boundsLeft: 0,\r\n boundsRight: 0,\r\n\r\n // Image\r\n imageWidth: 0,\r\n imageHeight: 0,\r\n imageLeft: 0,\r\n imageTop: 0,\r\n targetImageWidth: 0,\r\n targetImageHeight: 0,\r\n targetImageLeft: 0,\r\n targetImageTop: 0,\r\n oldImageWidth: 0,\r\n oldImageHeight: 0,\r\n\r\n // Positioner\r\n positionerLeft: 0,\r\n positionerTop: 0,\r\n targetPositionerLeft: 0,\r\n targetPositionerTop: 0,\r\n\r\n // Zoom\r\n zoomPositionLeft: 0,\r\n zoomPositionTop: 0,\r\n\r\n // Touch Support\r\n offset: null,\r\n touches: [],\r\n zoomPercentage: 1,\r\n\r\n pinchStartX0: 0,\r\n pinchStartX1: 0,\r\n pinchStartY0: 0,\r\n pinchStartY1: 0,\r\n\r\n pinchEndX0: 0,\r\n pinchEndX1: 0,\r\n pinchEndY0: 0,\r\n pinchEndY1: 0,\r\n\r\n lastPinchEndX0: 0,\r\n lastPinchEndY0: 0,\r\n lastPinchEndX1: 0,\r\n lastPinchEndY1: 0,\r\n\r\n pinchDeltaStart: 0,\r\n pinchDeltaEnd: 0\r\n };\r\n\r\n /**\r\n * @events\r\n * @event zoomer.loaded \"Source media loaded\"\r\n */\r\n\r\n var pub = {\r\n /**\r\n * @method\r\n * @name defaults\r\n * @description Sets default plugin options\r\n * @param opts [object] <{}> \"Options object\"\r\n * @example $.zoomer(\"defaults\", opts);\r\n */\r\n defaults: function(opts) {\r\n options = $.extend(options, opts || {});\r\n return typeof this === 'object' ? $(this) : true;\r\n },\r\n\r\n /**\r\n * @method\r\n * @name destroy\r\n * @description Removes instance of plugin\r\n * @example $(\".target\").zoomer(\"destroy\");\r\n */\r\n destroy: function() {\r\n var $targets = $(this).each(function(i, target) {\r\n var data = $(target).data('zoomer');\r\n\r\n if (data) {\r\n data.$target\r\n .removeClass('zoomer-element')\r\n .data('zoomer', null)\r\n .empty()\r\n .append(data.originalDOM);\r\n }\r\n $(target).find('.swiper-slide').each(function(i, slide){\r\n $(slide).data('slider-zoomer-data', null);\r\n });\r\n\r\n });\r\n\r\n $instances = $('.zoomer-element');\r\n if ($instances.length < 1) {\r\n _clearAnimation();\r\n }\r\n\r\n return $targets;\r\n },\r\n\r\n /**\r\n * @method\r\n * @name load\r\n * @description Loads source media\r\n * @param source [string | object] \"Source image (string) or tiles (object)\"\r\n * @example $(\".target\").zoomer(\"load\", \"path/to/image.jpg\");\r\n */\r\n load: function(source) {\r\n return $(this).each(function(i, target) {\r\n var data = $(target).data('zoomer');\r\n\r\n if (data) {\r\n data.source = source;\r\n data.index = 0;\r\n data = _normalizeSource(data);\r\n\r\n _load(data);\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * @method\r\n * @name resize\r\n * @description Resizes plugin instange\r\n * @example $(\".target\").zoomer(\"resize\");\r\n */\r\n resize: function resize() {\r\n var $targets = $(this).each(function(i, target) {\r\n var data = $(target).data('zoomer');\r\n var data = $(target).find('.swiper-slide-active').data('slider-zoomer-data') || data;\r\n\r\n if (data) {\r\n data.isMobile = isMobile();\r\n data.frameWidth = data.$target.outerWidth();\r\n data.frameHeight = data.$target.outerHeight();\r\n data.centerLeft = Math.round(data.frameWidth * 0.5);\r\n data.centerTop = Math.round(data.frameHeight * 0.5);\r\n\r\n // Set minHeight and minWidth to naturals sizes\r\n data.minHeight = data.naturalHeight;\r\n data.minWidth = data.naturalWidth;\r\n\r\n // Recalculate minimum sizes only when the natural size of the image is bigger than the frame size - marginalReal\r\n if (data.naturalHeight > data.frameHeight - data.marginReal || data.naturalWidth > data.frameWidth - data.marginReal) {\r\n data = _setMinimums(data);\r\n }\r\n\r\n if (data.frameHeight > 0 && data.frameWidth > 0) {\r\n var scaleX = data.minWidth / data.naturalWidth,\r\n scaleY = data.minHeight / data.naturalHeight,\r\n centerLeft = data.frameWidth / 2,\r\n centerTop = data.frameHeight / 2;\r\n\r\n if (data.isMobile) {\r\n data.$zoomer.find('.swiper-slide').not('.swiper-slide-active').find('.holder')\r\n .css(_prefix('transform', 'translate3d(-50%, -50%, 0) scale(1, 1)'))\r\n .css({left: centerLeft+ 'px', top: centerTop + 'px', height: data.minHeight, width: data.minWidth});\r\n\r\n data.$zoomer.find('.swiper-slide-active .holder')\r\n .css(_prefix('transform', `translate3d(-50%, -50%, 0) scale(${scaleX}, ${scaleY})`))\r\n .css({left: centerLeft+ 'px', top: centerTop + 'px', height: data.naturalHeight, width: data.naturalWidth });\r\n } else {\r\n data.$zoomer.find('.swiper-slide').find('.holder')\r\n .css(_prefix('transform', `translate3d(-50%, -50%, 0) scale(${scaleX}, ${scaleY})`))\r\n .css({left: centerLeft+ 'px', top: centerTop + 'px', height: data.naturalHeight, width: data.naturalWidth });\r\n }\r\n }\r\n }\r\n });\r\n\r\n return $targets;\r\n },\r\n\r\n /**\r\n * @method\r\n * @name unload\r\n * @description Unload image from plugins instances\r\n * @example $(\".target\").zoomer(\"unload\");\r\n */\r\n unload: function() {\r\n return $(this).each(function() {\r\n var data = $(this).data('zoomer');\r\n\r\n if (data && typeof data.$image !== 'undefined') {\r\n data.$image.remove();\r\n }\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * @method private\r\n * @name _init\r\n * @description Initializes plugin\r\n * @param opts [object] \"Initialization options\"\r\n */\r\n function _init(opts) {\r\n // Settings\r\n opts = $.extend({}, options, properties, opts);\r\n\r\n transformSupported = false;\r\n\r\n // Apply to each element\r\n var $items = $(this);\r\n for (var i = 0, count = $items.length; i < count; i++) {\r\n _build($items.eq(i), opts);\r\n }\r\n\r\n // Start main animation loop\r\n $instances = $('.zoomer-element');\r\n _startAnimation();\r\n\r\n return $items;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _build\r\n * @description Builds each instance\r\n * @param $target [jQuery object] \"Target jQuery object\"\r\n * @param data [object] <{}> \"Options object\"\r\n */\r\n function _build($target, data) {\r\n if (!$target.data('zoomer')) {\r\n data = $.extend({}, data, $target.data('zoomer-options'));\r\n\r\n var $targetParent = $target.parent(); // have to get the parent before we empty the target below\r\n data.$target = $target;\r\n\r\n data.marginReal = data.marginMin * 2;\r\n data.originalDOM = data.$target.html();\r\n if (data.imageList.length > 1) {\r\n data.source = [];\r\n $.each(data.imageList, function(index, val) {\r\n data.source.push(val);\r\n });\r\n data.$target.empty();\r\n } else if (data.$target.find('img').length > 0) {\r\n data.source = [];\r\n data.$target.find('img').each(function() {\r\n data.source.push($(this).attr('src'));\r\n });\r\n data.$target.empty();\r\n }\r\n\r\n data = _normalizeSource(data);\r\n\r\n // Assemble HTML\r\n var html = '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n\r\n data.$zoomer = $(html);\r\n data.$target.addClass('zoomer-element').html(data.$zoomer);\r\n\r\n if (data.controls.zoomIn || data.controls.zoomOut || data.controls.next || data.controls.previous) {\r\n data.controls.$zoomIn = $(data.controls.zoomIn, $targetParent);\r\n data.controls.$zoomOut = $(data.controls.zoomOut, $targetParent);\r\n data.controls.$next = $(data.controls.next, $targetParent);\r\n data.controls.$previous = $(data.controls.previous, $targetParent);\r\n }\r\n\r\n // Cache jquery objects\r\n data.$positioner = data.$zoomer.find('.zoomer-positioner');\r\n data.$holder = data.$zoomer.find('.zoomer-holder');\r\n\r\n // Kick it off\r\n data.$target.data('zoomer', data);\r\n pub.resize.apply(data.$target);\r\n\r\n if (data.images.length > 0) {\r\n _load.apply(data.$target, [data]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _load\r\n * @description Delegates loading action\r\n * @param data [object] \"Instance data\"\r\n */\r\n function _load(data) {\r\n $('#modalZoomLoading').removeClass('d-none');\r\n\r\n //display the initial image after 1000ms\r\n setTimeout(function() {\r\n $('.zoomer-positioners').removeClass('d-none');\r\n }, 1000);\r\n\r\n // If gallery\r\n if (data.gallery) {\r\n data.$zoomer.addClass('zoomer-gallery');\r\n } else {\r\n data.$zoomer.removeClass('zoomer-gallery');\r\n }\r\n\r\n if (typeof data.$image !== 'undefined') {\r\n data.$holder.animate({ opacity: 0 }, 300, function() {\r\n pub.unload.apply(data.$target);\r\n _loadImage.apply(data.$target, [data, data.images[data.index]]);\r\n });\r\n } else {\r\n _loadImage.apply(data.$target, [data, data.images[data.index]]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _loadImage\r\n * @description Handles loading an image or set of tiles\r\n * @param data [object] \"Instance data\"\r\n * @param source [string | object] \"Source URL or object\"\r\n */\r\n function _loadImage(data, source) {\r\n data.loading = true;\r\n\r\n // Cache current image\r\n data.$image = $('');\r\n data.$image\r\n .one('load.zoomer', data, _onImageLoad)\r\n .on('error', data, _tryAgain)\r\n .attr('src', source)\r\n .attr('alt', data.altList[0]);\r\n\r\n // If image has already loaded into cache, trigger load event\r\n if (data.$image[0].complete) {\r\n data.$image.trigger('load');\r\n }\r\n\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onImageLoad\r\n * @description Handles image load\r\n * @param e [object] \"Event data\"\r\n */\r\n function _onImageLoad(e) {\r\n var data = e.data;\r\n\r\n data.naturalHeight = data.$image[0].naturalHeight;\r\n data.naturalWidth = data.$image[0].naturalWidth;\r\n\r\n data.$holder.css({\r\n height: data.naturalHeight,\r\n width: data.naturalWidth\r\n });\r\n\r\n // Set target, min, max to naturals sizes\r\n data.targetImageHeight = data.minHeight = data.maxHeight = data.naturalHeight;\r\n data.targetImageWidth = data.minWidth = data.maxWidth = data.naturalWidth;\r\n\r\n data.imageRatioWide = data.naturalWidth / data.naturalHeight;\r\n data.imageRatioTall = data.naturalHeight / data.naturalWidth;\r\n\r\n // Initial sizing to fit screen\r\n if (data.naturalHeight > data.frameHeight - data.marginReal || data.naturalWidth > data.frameWidth - data.marginReal) {\r\n data = _setMinimums(data);\r\n data.targetImageHeight = data.minHeight;\r\n data.targetImageWidth = data.minWidth;\r\n }\r\n\r\n // SET INITIAL POSITIONS\r\n data.positionerLeft = data.targetPositionerLeft = data.centerLeft;\r\n data.positionerTop = data.targetPositionerTop = data.centerTop;\r\n\r\n data.imageLeft = data.targetImageLeft = Math.round(-data.targetImageWidth / 2);\r\n data.imageTop = data.targetImageTop = Math.round(-data.targetImageHeight / 2);\r\n data.imageHeight = data.targetImageHeight;\r\n data.imageWidth = data.targetImageWidth;\r\n\r\n if (transformSupported) {\r\n var scaleX = data.imageWidth / data.naturalWidth,\r\n scaleY = data.imageHeight / data.naturalHeight;\r\n\r\n data.$positioner.css(_prefix('transform', 'translate3d(' + data.positionerLeft + 'px, ' + data.positionerTop + 'px, 0)'));\r\n data.$holder.css(_prefix('transform', 'translate3d(-50%, -50%, 0) scale(' + scaleX + ',' + scaleY + ')'));\r\n } else {\r\n data.$positioner.css({\r\n left: data.positionerLeft,\r\n top: data.positionerTop\r\n });\r\n data.$holder.css({\r\n left: data.imageLeft,\r\n top: data.imageTop,\r\n height: data.naturalHeight,\r\n width: data.naturalWidth\r\n });\r\n }\r\n\r\n var scaleX = data.imageWidth / data.naturalWidth,\r\n scaleY = data.imageHeight / data.naturalHeight,\r\n centerLeft = data.frameWidth / 2,\r\n centerTop = data.frameHeight / 2;\r\n\r\n var $imageSlider = $(`
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    `);\r\n\r\n $imageSlider.find('.holder').append(data.$image);\r\n\r\n data.$holder.append($imageSlider);\r\n\r\n data.$holder.animate({ opacity: 1 }, 1200);\r\n data.loading = false;\r\n\r\n // Run callback function\r\n if (data.onImageLoad) {\r\n data.onImageLoad.apply(data.$zoomer, [(data.imageWidth - data.minWidth) / (data.maxWidth - data.minWidth), data]);\r\n }\r\n\r\n // Start preloading\r\n if (data.gallery) {\r\n _preloadGallery(data);\r\n }\r\n\r\n $('#modalZoomLoading').addClass('d-none');\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _preloadGallery\r\n * @description Preloads previous and next images in gallery for faster rendering\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _preloadGallery(data) {\r\n\r\n let _loadImage = function(data, i, callback) {\r\n let $image = $(``);\r\n $image\r\n .one('load.zoomer', data, _scaleImage.bind($image[0]))\r\n .on('error', data, _tryAgain)\r\n .attr('src', data.images[i])\r\n .attr('alt', data.altList[i]);\r\n\r\n if ($image[0].complete) {\r\n $image.trigger('load');\r\n }\r\n\r\n let scaleX = data.imageWidth / data.naturalWidth,\r\n scaleY = data.imageHeight / data.naturalHeight,\r\n centerLeft = data.frameWidth / 2,\r\n centerTop = data.frameHeight / 2;\r\n\r\n let $imageSlider = $(`
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    `);\r\n\r\n $imageSlider.data('slider-zoomer-data', null);\r\n $imageSlider.data('slider-zoomer-data', data);\r\n\r\n if (callback) {\r\n callback.apply(data.swiper, [$imageSlider]);\r\n }\r\n }\r\n\r\n if (data.index > 0) {\r\n for (let i = data.index - 1; i >= 0; i--) {\r\n // Cache current image\r\n _loadImage(data, i, data.prependImageCallback);\r\n }\r\n }\r\n if (data.index < data.images.length - 1) {\r\n for (let i = data.index + 1; i < data.images.length; i++) {\r\n // Cache current image\r\n _loadImage(data, i, data.appendImageCallback);\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * @method private\r\n * @name _scaleImage\r\n * @description Sets image holder dimensions once image has completely loaded\r\n * @param e [jQuery event] \"event Data\"\r\n */\r\n let _scaleImage = function (e) {\r\n let data = e.data;\r\n let image = this;\r\n\r\n data.naturalWidth = image.naturalWidth;\r\n data.naturalHeight = image.naturalHeight;\r\n\r\n data = _setMinimums(data);\r\n let scaleX = data.imageWidth / image.naturalWidth,\r\n scaleY = data.imageHeight / image.naturalHeight,\r\n centerLeft = data.frameWidth / 2,\r\n centerTop = data.frameHeight / 2;\r\n\r\n\r\n let $slider = data.$holder.find(`[data-swiper-slide-index=\"${$(image).data('img-index')}\"]`);\r\n\r\n $slider.data('slider-zoomer-data', data);\r\n\r\n $slider.find('.holder').append(image);\r\n\r\n if (data.isMobile) {\r\n $(image).closest('.holder').css(_prefix('transform', `translate3d(-50%, -50%, 0) scale(${scaleX}, ${scaleY})`));\r\n $(image).closest('.holder').css({\r\n height: data.naturalHeight,\r\n width: data.naturalWidth,\r\n left: centerLeft,\r\n top: centerTop\r\n });\r\n } else {\r\n $(image).closest('.holder').css(_prefix('transform', `translate3d(-50%, -50%, 0) scale(${scaleX}, ${scaleY})`));\r\n $(image).closest('.holder').css({\r\n height: image.naturalHeight,\r\n width: image.naturalWidth,\r\n left: centerLeft,\r\n top: centerTop\r\n });\r\n }\r\n\r\n $slider.find('.loadingDiv').remove();\r\n\r\n }\r\n\r\n let _tryAgain = function (e)\r\n {\r\n let data = e.data;\r\n setTimeout(_reloadImg, 1000, this, data);\r\n }\r\n\r\n let _reloadImg = function(e, data)\r\n {\r\n let source = $(e).attr('src');\r\n $(e).attr('src', source);\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _setMinimums\r\n * @description Sets minimum dimensions\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _setMinimums(data) {\r\n if (data.naturalHeight > data.naturalWidth) {\r\n // Tall\r\n data.aspect = 'tall';\r\n\r\n data.minHeight = Math.round(data.frameHeight - data.marginReal);\r\n data.minWidth = Math.round(data.minHeight / data.imageRatioTall);\r\n\r\n if (data.minWidth > data.frameWidth - data.marginReal) {\r\n data.minWidth = Math.round(data.frameWidth - data.marginReal);\r\n data.minHeight = Math.round(data.minWidth / data.imageRatioWide);\r\n }\r\n } else {\r\n // Wide\r\n data.aspect = 'wide';\r\n\r\n data.minWidth = Math.round(data.frameWidth - data.marginReal);\r\n data.minHeight = Math.round(data.minWidth / data.imageRatioWide);\r\n\r\n if (data.minHeight > data.frameHeight - data.marginReal) {\r\n data.minHeight = Math.round(data.frameHeight - data.marginReal);\r\n data.minWidth = Math.round(data.minHeight / data.imageRatioTall);\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _render\r\n * @description Main animation loop\r\n */\r\n function _render() {\r\n for (var i = 0, count = $instances.length; i < count; i++) {\r\n var $slider = $instances.eq(i).find('.swiper-slide-active');\r\n var data = $slider.data('slider-zoomer-data') || $instances.eq(i).data('zoomer');\r\n\r\n if (typeof data === 'object') {\r\n // Update image and position values\r\n data = _setMinimums(data);\r\n //data = _updateValues(data);\r\n data.lastAction = data.action;\r\n\r\n // Update DOM\r\n var scaleX = data.imageWidth / data.naturalWidth,\r\n scaleY = data.imageHeight / data.naturalHeight,\r\n centerLeft = data.frameWidth / 2,\r\n centerTop = data.frameHeight / 2;\r\n\r\n //data.$positioner.css(_prefix('transform', 'translate3d(' + data.positionerLeft + 'px, ' + data.positionerTop + 'px, 0)'));\r\n data.$positioner.css({\r\n left: 0,\r\n top: 0,\r\n });\r\n data.$holder.css({\r\n left: 0,\r\n top: 0,\r\n width: '100%',\r\n height: '80vh'\r\n });\r\n $slider.find('.holder')\r\n .css({\r\n height: data.naturalHeight,\r\n width: data.naturalWidth,\r\n left: centerLeft,\r\n top: centerTop\r\n })\r\n .css(_prefix('transform', `translate3d(-50%, -50%, 0) scale(${scaleX}, ${scaleY})`));\r\n\r\n\r\n\r\n // Run callback function\r\n if (data.callback) {\r\n data.callback.apply(data.$zoomer, [(data.imageWidth - data.minWidth) / (data.maxWidth - data.minWidth)]);\r\n }\r\n\r\n if (data.toggleAnimation != undefined) {\r\n animating = data.toggleAnimation;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _updateValues\r\n * @description Updates current image values\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _updateValues(data) {\r\n // Update values based on current action\r\n if (data.action === 'zoom_in' || data.action === 'zoom_out') {\r\n // Calculate change\r\n data.keyDownTime += data.increment;\r\n var delta = (data.action === 'zoom_out' ? -1 : 1) * Math.round(data.imageWidth * data.keyDownTime - data.imageWidth);\r\n\r\n if (data.aspect === 'tall') {\r\n data.targetImageHeight += delta;\r\n data.targetImageWidth = Math.round(data.targetImageHeight / data.imageRatioTall);\r\n } else {\r\n data.targetImageWidth += delta;\r\n data.targetImageHeight = Math.round(data.targetImageWidth / data.imageRatioWide);\r\n }\r\n }\r\n\r\n // Check Max and Min image values; recenter if too small\r\n if (data.aspect === 'tall') {\r\n if (data.targetImageHeight < data.minHeight) {\r\n data.targetImageHeight = data.minHeight;\r\n data.targetImageWidth = Math.round(data.targetImageHeight / data.imageRatioTall);\r\n } else if (data.targetImageHeight > data.maxHeight) {\r\n data.targetImageHeight = data.maxHeight;\r\n data.targetImageWidth = Math.round(data.targetImageHeight / data.imageRatioTall);\r\n }\r\n } else {\r\n if (data.targetImageWidth < data.minWidth) {\r\n data.targetImageWidth = data.minWidth;\r\n data.targetImageHeight = Math.round(data.targetImageWidth / data.imageRatioWide);\r\n } else if (data.targetImageWidth > data.maxWidth) {\r\n data.targetImageWidth = data.maxWidth;\r\n data.targetImageHeight = Math.round(data.targetImageWidth / data.imageRatioWide);\r\n }\r\n }\r\n\r\n // Calculate new dimensions\r\n data.targetImageLeft = Math.round(-data.targetImageWidth * 0.5);\r\n data.targetImageTop = Math.round(-data.targetImageHeight * 0.5);\r\n\r\n if (data.action === 'drag' || data.action === 'pinch') {\r\n data.imageWidth = data.targetImageWidth;\r\n data.imageHeight = data.targetImageHeight;\r\n data.imageLeft = data.targetImageLeft;\r\n data.imageTop = data.targetImageTop;\r\n } else {\r\n data.imageWidth += Math.round((data.targetImageWidth - data.imageWidth) * data.enertia);\r\n data.imageHeight += Math.round((data.targetImageHeight - data.imageHeight) * data.enertia);\r\n data.imageLeft += Math.round((data.targetImageLeft - data.imageLeft) * data.enertia);\r\n data.imageTop += Math.round((data.targetImageTop - data.imageTop) * data.enertia);\r\n }\r\n\r\n // Check bounds of current position and if big enough to drag\r\n // Set bounds\r\n data.boundsLeft = Math.round(data.frameWidth - data.targetImageWidth * 0.5 - data.marginMax);\r\n data.boundsRight = Math.round(data.targetImageWidth * 0.5 + data.marginMax);\r\n data.boundsTop = Math.round(data.frameHeight - data.targetImageHeight * 0.5 - data.marginMax);\r\n data.boundsBottom = Math.round(data.targetImageHeight * 0.5 + data.marginMax);\r\n\r\n // Check dragging bounds\r\n if (data.targetPositionerLeft < data.boundsLeft) {\r\n data.targetPositionerLeft = data.boundsLeft;\r\n }\r\n if (data.targetPositionerLeft > data.boundsRight) {\r\n data.targetPositionerLeft = data.boundsRight;\r\n }\r\n if (data.targetPositionerTop < data.boundsTop) {\r\n data.targetPositionerTop = data.boundsTop;\r\n }\r\n if (data.targetPositionerTop > data.boundsBottom) {\r\n data.targetPositionerTop = data.boundsBottom;\r\n }\r\n\r\n // Zoom to visible area of image\r\n if (data.zoomPositionTop > 0 && data.zoomPositionLeft > 0) {\r\n data.targetPositionerLeft = data.centerLeft - data.targetImageLeft - data.targetImageWidth * data.zoomPositionLeft;\r\n data.targetPositionerTop = data.centerTop - data.targetImageTop - data.targetImageHeight * data.zoomPositionTop;\r\n }\r\n\r\n if (data.action !== 'pinch') {\r\n // Recenter when small enough\r\n if (data.targetImageWidth < data.frameWidth) {\r\n data.targetPositionerLeft = data.centerLeft;\r\n }\r\n if (data.targetImageHeight < data.frameHeight) {\r\n data.targetPositionerTop = data.centerTop;\r\n }\r\n }\r\n\r\n // Calculate new positions\r\n if (data.action === 'drag' || data.action === 'pinch') {\r\n data.positionerLeft = data.targetPositionerLeft;\r\n data.positionerTop = data.targetPositionerTop;\r\n } else {\r\n data.positionerLeft += Math.round((data.targetPositionerLeft - data.positionerLeft) * data.enertia);\r\n data.positionerTop += Math.round((data.targetPositionerTop - data.positionerTop) * data.enertia);\r\n }\r\n\r\n data.oldImageWidth = data.imageWidth;\r\n data.oldImageHeight = data.imageHeight;\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _nextImage\r\n * @description Handles next button click\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _nextImage(e) {\r\n return;\r\n var data = e.data;\r\n\r\n if (!data.loading && data.index + 1 < data.images.length) {\r\n data.index++;\r\n _load.apply(data.$target, [data]);\r\n } else {\r\n data.index = 0;\r\n _load.apply(data.$target, [data]);\r\n }\r\n\r\n // Run callback function\r\n if (data.zoomNextPrevCallback) {\r\n data.zoomNextPrevCallback.apply(data.$zoomer, [data]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _previousImage\r\n * @description Handles previous button click\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _previousImage(e) {\r\n return;\r\n var data = e.data;\r\n\r\n if (!data.loading && data.index - 1 >= 0) {\r\n data.index--;\r\n _load.apply(data.$target, [data]);\r\n } else {\r\n data.index = data.images.length - 1;\r\n _load.apply(data.$target, [data]);\r\n }\r\n\r\n // Run callback function\r\n if (data.zoomNextPrevCallback) {\r\n data.zoomNextPrevCallback.apply(data.$zoomer, [data]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _normalizeSource\r\n * @description Normalizes source string or object\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _normalizeSource(data) {\r\n data.tiled = false;\r\n data.gallery = false;\r\n\r\n if (typeof data.source === 'string') {\r\n data.images = [data.source];\r\n } else {\r\n if (typeof data.source[0] === 'string') {\r\n data.images = data.source;\r\n if (data.images.length > 1) {\r\n data.gallery = true;\r\n }\r\n } else {\r\n data.tiledThumbnail = data.source.thumbnail;\r\n data.images = [data.source.tiles];\r\n data.tiled = true;\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _startAnimation\r\n * @description Starts main animation loop\r\n */\r\n function _startAnimation() {\r\n if (!animating) {\r\n animating = true;\r\n _onAnimate();\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _clearAnimation\r\n * @description End main animation loop\r\n */\r\n function _clearAnimation() {\r\n animating = false;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onAnimate\r\n * @description Handles RAF\r\n */\r\n function _onAnimate() {\r\n if (animating) {\r\n animationFrameID = window.requestAnimationFrame(_onAnimate);\r\n _render();\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _prefix\r\n * @description Builds vendor-prefixed styles\r\n * @param property [string] \"Property to prefix\"\r\n * @param value [string] \"Property value\"\r\n * @return [string] \"Vendor-prefixed style\"\r\n */\r\n function _prefix(property, value) {\r\n var r = {};\r\n\r\n r['-webkit-' + property] = value;\r\n r['-moz-' + property] = value;\r\n r['-ms-' + property] = value;\r\n r['-o-' + property] = value;\r\n r[property] = value;\r\n\r\n return r;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _getTransform3DSupport\r\n * @description Determines if transforms are support\r\n * @return [boolean] \"True if transforms supported\"\r\n */\r\n function _getTransform3DSupport() {\r\n /* http://stackoverflow.com/questions/11628390/how-to-detect-css-translate3d-without-the-webkit-context */\r\n /*\r\n\t\tvar prop = \"transform\",\r\n\t\t\tval = \"translate3d(0px, 0px, 0px)\",\r\n\t\t\ttest = /translate3d\\(0px, 0px, 0px\\)/g,\r\n\t\t\t$div = $(\"
    \");\r\n\r\n\t\t$div.css(_prefix(prop, val));\r\n\t\tvar check = $div[0].style.cssText.match(test);\r\n\r\n\t\treturn (check !== null && check.length > 0);\r\n\t\t*/\r\n\r\n /* http://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support/12621264#12621264 */\r\n var el = document.createElement('p'),\r\n has3d,\r\n transforms = {\r\n webkitTransform: '-webkit-transform',\r\n OTransform: '-o-transform',\r\n msTransform: '-ms-transform',\r\n MozTransform: '-moz-transform',\r\n transform: 'transform'\r\n };\r\n\r\n document.body.insertBefore(el, null);\r\n for (var t in transforms) {\r\n if (el.style[t] !== undefined) {\r\n el.style[t] = 'translate3d(1px,1px,1px)';\r\n has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);\r\n }\r\n }\r\n document.body.removeChild(el);\r\n\r\n return has3d !== undefined && has3d.length > 0 && has3d !== 'none';\r\n }\r\n\r\n function isMobile () {\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\n $.fn.swiper = function(method) {\r\n if (pub[method]) {\r\n return pub[method].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (typeof method === 'object' || !method) {\r\n return _init.apply(this, arguments);\r\n }\r\n return this;\r\n };\r\n\r\n $.swiper = function(method) {\r\n if (method === 'defaults') {\r\n pub.defaults.apply(this, Array.prototype.slice.call(arguments, 1));\r\n }\r\n };\r\n})(jQuery, window);\r\n","/* eslint-disable */\r\n\r\n/*\r\n * Zoomer v3.1.0 - 2015-12-39\r\n * A jQuery plugin for smooth image exploration. Part of the formstone library.\r\n * http://classic.formstone.it/components/zoomer/\r\n *\r\n * Copyright 2015 Ben Plum; MIT Licensed\r\n * Marc Brooks; MIT Licensed\r\n */\r\n\r\n(function($, window) {\r\n 'use strict';\r\n\r\n var $window = $(window),\r\n $instances,\r\n animating = false,\r\n transformSupported = false;\r\n\r\n /**\r\n * @options\r\n * @param callback [function] <$.noop> \"\"\r\n * @param controls.postion [string] <\"bottom\"> \"Position of default controls\"\r\n * @param controls.zoomIn [string] <> \"Custom zoom control selector\"\r\n * @param controls.zoomOut [string] <> \"Custom zoom control selector\"\r\n * @param controls.next [string] <> \"Custom pagination control selector\"\r\n * @param controls.previous [string] <> \"Custom pagination control selector\"\r\n * @param customClass [string] <''> \"Class applied to instance\"\r\n * @param enertia [number] <0.2> \"Zoom smoothing (0.1 = butter, 0.9 = sandpaper)\"\r\n * @param increment [number] <0.01> \"Zoom speed (0.01 = tortoise, 0.1 = hare)\"\r\n * @param marginMin [] <> \"\"\r\n * @param marginMax [] <> \"\"\r\n * @param retina [boolean] \"Flag for retina image support\"\r\n * @param source [string | object] \"Source image (string) or tiles (object)\"\r\n * @param imageList [array] \"Overriding image list through JSON\"\r\n */\r\n var options = {\r\n callback: $.noop,\r\n controls: {\r\n position: 'bottom',\r\n zoomIn: null,\r\n zoomOut: null,\r\n next: null,\r\n previous: null\r\n },\r\n customClass: '',\r\n enertia: 0.2,\r\n increment: 0.01,\r\n marginMin: 30, // Min bounds\r\n marginMax: 100, // Max bounds\r\n retina: false,\r\n source: null,\r\n imageList: [],\r\n altList: []\r\n };\r\n\r\n // Internal data\r\n var properties = {\r\n images: [],\r\n aspect: '',\r\n action: '',\r\n lastAction: '',\r\n keyDownTime: 0,\r\n marginReal: 0,\r\n originalDOM: '',\r\n\r\n // Gallery\r\n gallery: false,\r\n index: 0,\r\n\r\n // Tiles\r\n $tiles: null,\r\n tiled: false,\r\n tilesTotal: 0,\r\n tilesLoaded: 0,\r\n tiledColumns: 0,\r\n tiledRows: 0,\r\n tiledHeight: 0,\r\n tiledWidth: 0,\r\n tiledThumbnail: null,\r\n\r\n // Frame\r\n centerLeft: 0,\r\n centerTop: 0,\r\n frameHeight: 0,\r\n frameWidth: 0,\r\n\r\n // Original image\r\n naturalHeight: 0,\r\n naturalWidth: 0,\r\n imageRatioWide: 0,\r\n imageRatioTall: 0,\r\n\r\n // Dimensions\r\n minHeight: null,\r\n minWidth: null,\r\n maxHeight: 0,\r\n maxWidth: 0,\r\n\r\n // Bounds\r\n boundsTop: 0,\r\n boundsBottom: 0,\r\n boundsLeft: 0,\r\n boundsRight: 0,\r\n\r\n // Image\r\n imageWidth: 0,\r\n imageHeight: 0,\r\n imageLeft: 0,\r\n imageTop: 0,\r\n targetImageWidth: 0,\r\n targetImageHeight: 0,\r\n targetImageLeft: 0,\r\n targetImageTop: 0,\r\n oldImageWidth: 0,\r\n oldImageHeight: 0,\r\n\r\n // Positioner\r\n positionerLeft: 0,\r\n positionerTop: 0,\r\n targetPositionerLeft: 0,\r\n targetPositionerTop: 0,\r\n\r\n // Zoom\r\n zoomPositionLeft: 0,\r\n zoomPositionTop: 0,\r\n\r\n // Touch Support\r\n offset: null,\r\n touches: [],\r\n zoomPercentage: 1,\r\n\r\n pinchStartX0: 0,\r\n pinchStartX1: 0,\r\n pinchStartY0: 0,\r\n pinchStartY1: 0,\r\n\r\n pinchEndX0: 0,\r\n pinchEndX1: 0,\r\n pinchEndY0: 0,\r\n pinchEndY1: 0,\r\n\r\n lastPinchEndX0: 0,\r\n lastPinchEndY0: 0,\r\n lastPinchEndX1: 0,\r\n lastPinchEndY1: 0,\r\n\r\n pinchDeltaStart: 0,\r\n pinchDeltaEnd: 0\r\n };\r\n\r\n /**\r\n * @events\r\n * @event zoomer.loaded \"Source media loaded\"\r\n */\r\n\r\n var pub = {\r\n /**\r\n * @method\r\n * @name defaults\r\n * @description Sets default plugin options\r\n * @param opts [object] <{}> \"Options object\"\r\n * @example $.zoomer(\"defaults\", opts);\r\n */\r\n defaults: function(opts) {\r\n options = $.extend(options, opts || {});\r\n return typeof this === 'object' ? $(this) : true;\r\n },\r\n\r\n /**\r\n * @method\r\n * @name destroy\r\n * @description Removes instance of plugin\r\n * @example $(\".target\").zoomer(\"destroy\");\r\n */\r\n destroy: function() {\r\n var $targets = $(this).each(function(i, target) {\r\n var data = $(target).data('zoomer');\r\n\r\n if (data) {\r\n $window.off('.zoomer');\r\n data.$holder.off('.zoomer');\r\n data.$zoomer.off('.zoomer');\r\n data.controls.$zoomIn.off('.zoomer');\r\n data.controls.$zoomOut.off('.zoomer');\r\n data.controls.$next.off('.zoomer');\r\n data.controls.$previous.off('.zoomer');\r\n\r\n data.$target\r\n .removeClass('zoomer-element')\r\n .data('zoomer', null)\r\n .empty()\r\n .append(data.originalDOM);\r\n }\r\n });\r\n\r\n $instances = $('.zoomer-element');\r\n if ($instances.length < 1) {\r\n _clearAnimation();\r\n }\r\n\r\n return $targets;\r\n },\r\n\r\n /**\r\n * @method\r\n * @name load\r\n * @description Loads source media\r\n * @param source [string | object] \"Source image (string) or tiles (object)\"\r\n * @example $(\".target\").zoomer(\"load\", \"path/to/image.jpg\");\r\n */\r\n load: function(source) {\r\n return $(this).each(function(i, target) {\r\n var data = $(target).data('zoomer');\r\n\r\n if (data) {\r\n data.source = source;\r\n data.index = 0;\r\n data = _normalizeSource(data);\r\n\r\n _load(data);\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * @method\r\n * @name pan\r\n * @description Pans plugin instances\r\n * @param left [int] \"Percentage to pan to (50 = half)\"\r\n * @param top [int] \"Percentage to pan to (50 = half)\"\r\n * @example $(\".target\").zoomer(\"pan\", 50, 50);\r\n */\r\n pan: function(left, top) {\r\n return $(this).each(function(i, target) {\r\n var data = $(target).data('zoomer');\r\n\r\n if (data) {\r\n left /= 100;\r\n top /= 100;\r\n\r\n data.targetPositionerLeft = Math.round(data.centerLeft - data.targetImageLeft - data.targetImageWidth * left);\r\n data.targetPositionerTop = Math.round(data.centerTop - data.targetImageTop - data.targetImageHeight * top);\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * @method\r\n * @name resize\r\n * @description Resizes plugin instange\r\n * @example $(\".target\").zoomer(\"resize\");\r\n */\r\n resize: function() {\r\n return $(this).each(function(i, target) {\r\n var data = $(target).data('zoomer');\r\n\r\n if (data) {\r\n data.frameWidth = data.$target.outerWidth();\r\n data.frameHeight = data.$target.outerHeight();\r\n data.centerLeft = Math.round(data.frameWidth * 0.5);\r\n data.centerTop = Math.round(data.frameHeight * 0.5);\r\n\r\n // Set minHeight and minWidth to naturals sizes\r\n data.minHeight = data.naturalHeight;\r\n data.minWidth = data.naturalWidth;\r\n\r\n // Recalculate minimum sizes only when the natural size of the image is bigger than the frame size - marginalReal\r\n if (data.naturalHeight > data.frameHeight - data.marginReal || data.naturalWidth > data.frameWidth - data.marginReal) {\r\n data = _setMinimums(data);\r\n }\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * @method\r\n * @name unload\r\n * @description Unload image from plugins instances\r\n * @example $(\".target\").zoomer(\"unload\");\r\n */\r\n unload: function() {\r\n return $(this).each(function() {\r\n var data = $(this).data('zoomer');\r\n\r\n if (data && typeof data.$image !== 'undefined') {\r\n data.$image.remove();\r\n }\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * @method private\r\n * @name _init\r\n * @description Initializes plugin\r\n * @param opts [object] \"Initialization options\"\r\n */\r\n function _init(opts) {\r\n // Settings\r\n opts = $.extend({}, options, properties, opts);\r\n\r\n transformSupported = _getTransform3DSupport();\r\n\r\n // Apply to each element\r\n var $items = $(this);\r\n for (var i = 0, count = $items.length; i < count; i++) {\r\n _build($items.eq(i), opts);\r\n }\r\n\r\n // Start main animation loop\r\n $instances = $('.zoomer-element');\r\n _startAnimation();\r\n\r\n return $items;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _build\r\n * @description Builds each instance\r\n * @param $target [jQuery object] \"Target jQuery object\"\r\n * @param data [object] <{}> \"Options object\"\r\n */\r\n function _build($target, data) {\r\n if (!$target.data('zoomer')) {\r\n data = $.extend({}, data, $target.data('zoomer-options'));\r\n\r\n var $targetParent = $target.parent(); // have to get the parent before we empty the target below\r\n data.$target = $target;\r\n\r\n data.marginReal = data.marginMin * 2;\r\n data.originalDOM = data.$target.html();\r\n if (data.imageList.length > 1) {\r\n data.source = [];\r\n $.each(data.imageList, function(index, val) {\r\n data.source.push(val);\r\n });\r\n data.$target.empty();\r\n } else if (data.$target.find('img').length > 0) {\r\n data.source = [];\r\n data.$target.find('img').each(function() {\r\n data.source.push($(this).attr('src'));\r\n });\r\n data.$target.empty();\r\n }\r\n\r\n data = _normalizeSource(data);\r\n\r\n // Assemble HTML\r\n var html = '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n html += '
    ';\r\n\r\n data.$zoomer = $(html);\r\n data.$target.addClass('zoomer-element').html(data.$zoomer);\r\n\r\n if (data.controls.zoomIn || data.controls.zoomOut || data.controls.next || data.controls.previous) {\r\n data.controls.$zoomIn = $(data.controls.zoomIn, $targetParent);\r\n data.controls.$zoomOut = $(data.controls.zoomOut, $targetParent);\r\n data.controls.$next = $(data.controls.next, $targetParent);\r\n data.controls.$previous = $(data.controls.previous, $targetParent);\r\n } else {\r\n html = '
    ';\r\n html += '';\r\n html += '-';\r\n html += '+';\r\n html += '';\r\n html += '
    ';\r\n\r\n data.$zoomer.append(html);\r\n\r\n data.controls.$default = data.$zoomer.find('.zoomer-controls');\r\n data.controls.$zoomIn = data.$zoomer.find('.zoomer-zoom-in');\r\n data.controls.$zoomOut = data.$zoomer.find('.zoomer-zoom-out');\r\n data.controls.$next = data.$zoomer.find('.zoomer-next');\r\n data.controls.$previous = data.$zoomer.find('.zoomer-previous');\r\n }\r\n\r\n // Cache jquery objects\r\n data.$positioner = data.$zoomer.find('.zoomer-positioner');\r\n data.$holder = data.$zoomer.find('.zoomer-holder');\r\n\r\n // Bind events\r\n data.controls.$zoomIn.on('touchstart.zoomer mousedown.zoomer', data, _zoomIn).on('touchend.zoomer mouseup.zoomer', data, _clearZoom);\r\n data.controls.$zoomOut.on('touchstart.zoomer mousedown.zoomer', data, _zoomOut).on('touchend.zoomer mouseup.zoomer', data, _clearZoom);\r\n data.controls.$next.on('click.zoomer', data, _nextImage);\r\n data.controls.$previous.on('click.zoomer', data, _previousImage);\r\n data.$zoomer.on('mousedown.zoomer', data, _dragStart).on('touchstart.zoomer MSPointerDown.zoomer', ':not(.zoomer-controls)', data, _onTouch);\r\n\r\n // Kick it off\r\n data.$target.data('zoomer', data);\r\n pub.resize.apply(data.$target);\r\n\r\n if (data.images.length > 0) {\r\n _load.apply(data.$target, [data]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _load\r\n * @description Delegates loading action\r\n * @param data [object] \"Instance data\"\r\n */\r\n function _load(data) {\r\n $('#modalZoomLoading').removeClass('d-none');\r\n\r\n //display the initial image after 1000ms\r\n setTimeout(function() {\r\n $('.zoomer-positioner').removeClass('d-none');\r\n }, 1000);\r\n\r\n // If gallery\r\n if (data.gallery) {\r\n data.$zoomer.addClass('zoomer-gallery');\r\n } else {\r\n data.$zoomer.removeClass('zoomer-gallery');\r\n }\r\n\r\n if (typeof data.$image !== 'undefined') {\r\n data.$holder.animate({ opacity: 0 }, 300, function() {\r\n pub.unload.apply(data.$target);\r\n _loadImage.apply(data.$target, [data, data.images[data.index]]);\r\n });\r\n } else {\r\n _loadImage.apply(data.$target, [data, data.images[data.index]]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _loadImage\r\n * @description Handles loading an image or set of tiles\r\n * @param data [object] \"Instance data\"\r\n * @param source [string | object] \"Source URL or object\"\r\n */\r\n function _loadImage(data, source) {\r\n data.loading = true;\r\n\r\n if (data.tiled) {\r\n data.tilesTotal = 0;\r\n data.tilesLoaded = 0;\r\n var html = '
    ';\r\n for (var i in data.images[0]) {\r\n if (data.images[0].hasOwnProperty(i)) {\r\n for (var j in data.images[0][i]) {\r\n if (data.images[0][i].hasOwnProperty(j)) {\r\n html +=\r\n '\"'';\r\n data.tilesTotal++;\r\n }\r\n }\r\n }\r\n }\r\n html += '
    ';\r\n\r\n data.$image = $(html);\r\n data.$tiles = data.$image.find('img');\r\n\r\n data.$tiles.each(function(i, img) {\r\n var $img = $(img);\r\n $img.one('load', data, _onTileLoad);\r\n\r\n if ($img[0].complete) {\r\n $img.trigger('load');\r\n }\r\n });\r\n } else {\r\n // Cache current image\r\n data.$image = $('');\r\n data.$image\r\n .one('load.zoomer', data, _onImageLoad)\r\n .attr('src', source)\r\n .attr('alt', data.altList[0]);\r\n\r\n // If image has already loaded into cache, trigger load event\r\n if (data.$image[0].complete) {\r\n data.$image.trigger('load');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onTileLoad\r\n * @description Handles tile load\r\n * @param e [object] \"Event data\"\r\n */\r\n function _onTileLoad(e) {\r\n var data = e.data;\r\n\r\n data.tilesLoaded++;\r\n if (data.tilesLoaded === data.tilesTotal) {\r\n data.tiledRows = data.images[0].length;\r\n data.tiledColumns = data.images[0][0].length;\r\n\r\n data.tiledHeight = data.$tiles.eq(0)[0].naturalHeight * data.tiledRows;\r\n data.tiledWidth = data.$tiles.eq(0)[0].naturalWidth * data.tiledColumns;\r\n\r\n _onImageLoad({ data: data });\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onImageLoad\r\n * @description Handles image load\r\n * @param e [object] \"Event data\"\r\n */\r\n function _onImageLoad(e) {\r\n var data = e.data;\r\n\r\n if (data.tiled) {\r\n data.naturalHeight = data.tiledHeight;\r\n data.naturalWidth = data.tiledWidth;\r\n } else {\r\n data.naturalHeight = data.$image[0].naturalHeight;\r\n data.naturalWidth = data.$image[0].naturalWidth;\r\n }\r\n\r\n if (data.retina) {\r\n data.naturalHeight /= 2;\r\n data.naturalWidth /= 2;\r\n }\r\n\r\n data.$holder.css({\r\n height: data.naturalHeight,\r\n width: data.naturalWidth\r\n });\r\n\r\n // Set target, min, max to naturals sizes\r\n data.targetImageHeight = data.minHeight = data.maxHeight = data.naturalHeight;\r\n data.targetImageWidth = data.minWidth = data.maxWidth = data.naturalWidth;\r\n\r\n data.imageRatioWide = data.naturalWidth / data.naturalHeight;\r\n data.imageRatioTall = data.naturalHeight / data.naturalWidth;\r\n\r\n // Initial sizing to fit screen\r\n if (data.naturalHeight > data.frameHeight - data.marginReal || data.naturalWidth > data.frameWidth - data.marginReal) {\r\n data = _setMinimums(data);\r\n data.targetImageHeight = data.minHeight;\r\n data.targetImageWidth = data.minWidth;\r\n }\r\n\r\n // SET INITIAL POSITIONS\r\n data.positionerLeft = data.targetPositionerLeft = data.centerLeft;\r\n data.positionerTop = data.targetPositionerTop = data.centerTop;\r\n\r\n data.imageLeft = data.targetImageLeft = Math.round(-data.targetImageWidth / 2);\r\n data.imageTop = data.targetImageTop = Math.round(-data.targetImageHeight / 2);\r\n data.imageHeight = data.targetImageHeight;\r\n data.imageWidth = data.targetImageWidth;\r\n\r\n if (transformSupported) {\r\n var scaleX = data.imageWidth / data.naturalWidth,\r\n scaleY = data.imageHeight / data.naturalHeight;\r\n\r\n data.$positioner.css(_prefix('transform', 'translate3d(' + data.positionerLeft + 'px, ' + data.positionerTop + 'px, 0)'));\r\n data.$holder.css(_prefix('transform', 'translate3d(-50%, -50%, 0) scale(' + scaleX + ',' + scaleY + ')'));\r\n } else {\r\n data.$positioner.css({\r\n left: data.positionerLeft,\r\n top: data.positionerTop\r\n });\r\n data.$holder.css({\r\n left: data.imageLeft,\r\n top: data.imageTop,\r\n height: data.imageHeight,\r\n width: data.imageWidth\r\n });\r\n }\r\n\r\n data.$holder.append(data.$image);\r\n\r\n if (data.tiled) {\r\n data.$holder.css({\r\n background: 'url(' + data.tiledThumbnail + ') no-repeat left top',\r\n backgroundSize: '100% 100%'\r\n });\r\n\r\n data.tileHeightPercentage = 100 / data.tiledRows;\r\n data.tileWidthPercentage = 100 / data.tiledColumns;\r\n\r\n data.$tiles.css({\r\n height: data.tileHeightPercentage + '%',\r\n width: data.tileWidthPercentage + '%'\r\n });\r\n\r\n data.$tiles.each(function(i, tile) {\r\n var $tile = $(tile),\r\n position = $tile.data('zoomer-tile').split('-');\r\n\r\n $tile.css({\r\n left: data.tileWidthPercentage * parseInt(position[1], 10) + '%',\r\n top: data.tileHeightPercentage * parseInt(position[0], 10) + '%'\r\n });\r\n });\r\n }\r\n\r\n data.$holder.animate({ opacity: 1 }, 300);\r\n data.loading = false;\r\n\r\n // Start preloading\r\n if (data.gallery) {\r\n _preloadGallery(data);\r\n }\r\n\r\n $('#modalZoomLoading').addClass('d-none');\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _preloadGallery\r\n * @description Preloads previous and next images in gallery for faster rendering\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _preloadGallery(data) {\r\n if (data.index > 0) {\r\n $('\"'');\r\n }\r\n if (data.index < data.images.length - 1) {\r\n $('\"'');\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _setMinimums\r\n * @description Sets minimum dimensions\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _setMinimums(data) {\r\n if (data.naturalHeight > data.naturalWidth) {\r\n // Tall\r\n data.aspect = 'tall';\r\n\r\n data.minHeight = Math.round(data.frameHeight - data.marginReal);\r\n data.minWidth = Math.round(data.minHeight / data.imageRatioTall);\r\n\r\n if (data.minWidth > data.frameWidth - data.marginReal) {\r\n data.minWidth = Math.round(data.frameWidth - data.marginReal);\r\n data.minHeight = Math.round(data.minWidth / data.imageRatioWide);\r\n }\r\n } else {\r\n // Wide\r\n data.aspect = 'wide';\r\n\r\n data.minWidth = Math.round(data.frameWidth - data.marginReal);\r\n data.minHeight = Math.round(data.minWidth / data.imageRatioWide);\r\n\r\n if (data.minHeight > data.frameHeight - data.marginReal) {\r\n data.minHeight = Math.round(data.frameHeight - data.marginReal);\r\n data.minWidth = Math.round(data.minHeight / data.imageRatioTall);\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _render\r\n * @description Main animation loop\r\n */\r\n function _render() {\r\n for (var i = 0, count = $instances.length; i < count; i++) {\r\n var data = $instances.eq(i).data('zoomer');\r\n\r\n if (typeof data === 'object') {\r\n // Update image and position values\r\n data = _updateValues(data);\r\n data.lastAction = data.action;\r\n\r\n // Update DOM\r\n if (transformSupported) {\r\n var scaleX = data.imageWidth / data.naturalWidth,\r\n scaleY = data.imageHeight / data.naturalHeight;\r\n\r\n data.$positioner.css(_prefix('transform', 'translate3d(' + data.positionerLeft + 'px, ' + data.positionerTop + 'px, 0)'));\r\n data.$holder.css(_prefix('transform', 'translate3d(-50%, -50%, 0) scale(' + scaleX + ',' + scaleY + ')'));\r\n } else {\r\n data.$positioner.css({\r\n left: data.positionerLeft,\r\n top: data.positionerTop\r\n });\r\n data.$holder.css({\r\n left: data.imageLeft,\r\n top: data.imageTop,\r\n width: data.imageWidth,\r\n height: data.imageHeight\r\n });\r\n }\r\n\r\n // Run callback function\r\n if (data.callback) {\r\n data.callback.apply(data.$zoomer, [(data.imageWidth - data.minWidth) / (data.maxWidth - data.minWidth)]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _updateValues\r\n * @description Updates current image values\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _updateValues(data) {\r\n // Update values based on current action\r\n if (data.action === 'zoom_in' || data.action === 'zoom_out') {\r\n // Calculate change\r\n data.keyDownTime += data.increment;\r\n var delta = (data.action === 'zoom_out' ? -1 : 1) * Math.round(data.imageWidth * data.keyDownTime - data.imageWidth);\r\n\r\n if (data.aspect === 'tall') {\r\n data.targetImageHeight += delta;\r\n data.targetImageWidth = Math.round(data.targetImageHeight / data.imageRatioTall);\r\n } else {\r\n data.targetImageWidth += delta;\r\n data.targetImageHeight = Math.round(data.targetImageWidth / data.imageRatioWide);\r\n }\r\n }\r\n\r\n // Check Max and Min image values; recenter if too small\r\n if (data.aspect === 'tall') {\r\n if (data.targetImageHeight < data.minHeight) {\r\n data.targetImageHeight = data.minHeight;\r\n data.targetImageWidth = Math.round(data.targetImageHeight / data.imageRatioTall);\r\n } else if (data.targetImageHeight > data.maxHeight) {\r\n data.targetImageHeight = data.maxHeight;\r\n data.targetImageWidth = Math.round(data.targetImageHeight / data.imageRatioTall);\r\n }\r\n } else {\r\n if (data.targetImageWidth < data.minWidth) {\r\n data.targetImageWidth = data.minWidth;\r\n data.targetImageHeight = Math.round(data.targetImageWidth / data.imageRatioWide);\r\n } else if (data.targetImageWidth > data.maxWidth) {\r\n data.targetImageWidth = data.maxWidth;\r\n data.targetImageHeight = Math.round(data.targetImageWidth / data.imageRatioWide);\r\n }\r\n }\r\n\r\n // Calculate new dimensions\r\n data.targetImageLeft = Math.round(-data.targetImageWidth * 0.5);\r\n data.targetImageTop = Math.round(-data.targetImageHeight * 0.5);\r\n\r\n if (data.action === 'drag' || data.action === 'pinch') {\r\n data.imageWidth = data.targetImageWidth;\r\n data.imageHeight = data.targetImageHeight;\r\n data.imageLeft = data.targetImageLeft;\r\n data.imageTop = data.targetImageTop;\r\n } else {\r\n data.imageWidth += Math.round((data.targetImageWidth - data.imageWidth) * data.enertia);\r\n data.imageHeight += Math.round((data.targetImageHeight - data.imageHeight) * data.enertia);\r\n data.imageLeft += Math.round((data.targetImageLeft - data.imageLeft) * data.enertia);\r\n data.imageTop += Math.round((data.targetImageTop - data.imageTop) * data.enertia);\r\n }\r\n\r\n // Check bounds of current position and if big enough to drag\r\n // Set bounds\r\n data.boundsLeft = Math.round(data.frameWidth - data.targetImageWidth * 0.5 - data.marginMax);\r\n data.boundsRight = Math.round(data.targetImageWidth * 0.5 + data.marginMax);\r\n data.boundsTop = Math.round(data.frameHeight - data.targetImageHeight * 0.5 - data.marginMax);\r\n data.boundsBottom = Math.round(data.targetImageHeight * 0.5 + data.marginMax);\r\n\r\n // Check dragging bounds\r\n if (data.targetPositionerLeft < data.boundsLeft) {\r\n data.targetPositionerLeft = data.boundsLeft;\r\n }\r\n if (data.targetPositionerLeft > data.boundsRight) {\r\n data.targetPositionerLeft = data.boundsRight;\r\n }\r\n if (data.targetPositionerTop < data.boundsTop) {\r\n data.targetPositionerTop = data.boundsTop;\r\n }\r\n if (data.targetPositionerTop > data.boundsBottom) {\r\n data.targetPositionerTop = data.boundsBottom;\r\n }\r\n\r\n // Zoom to visible area of image\r\n if (data.zoomPositionTop > 0 && data.zoomPositionLeft > 0) {\r\n data.targetPositionerLeft = data.centerLeft - data.targetImageLeft - data.targetImageWidth * data.zoomPositionLeft;\r\n data.targetPositionerTop = data.centerTop - data.targetImageTop - data.targetImageHeight * data.zoomPositionTop;\r\n }\r\n\r\n if (data.action !== 'pinch') {\r\n // Recenter when small enough\r\n if (data.targetImageWidth < data.frameWidth) {\r\n data.targetPositionerLeft = data.centerLeft;\r\n }\r\n if (data.targetImageHeight < data.frameHeight) {\r\n data.targetPositionerTop = data.centerTop;\r\n }\r\n }\r\n\r\n // Calculate new positions\r\n if (data.action === 'drag' || data.action === 'pinch') {\r\n data.positionerLeft = data.targetPositionerLeft;\r\n data.positionerTop = data.targetPositionerTop;\r\n } else {\r\n data.positionerLeft += Math.round((data.targetPositionerLeft - data.positionerLeft) * data.enertia);\r\n data.positionerTop += Math.round((data.targetPositionerTop - data.positionerTop) * data.enertia);\r\n }\r\n\r\n data.oldImageWidth = data.imageWidth;\r\n data.oldImageHeight = data.imageHeight;\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _nextImage\r\n * @description Handles next button click\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _nextImage(e) {\r\n var data = e.data;\r\n\r\n if (!data.loading && data.index + 1 < data.images.length) {\r\n data.index++;\r\n _load.apply(data.$target, [data]);\r\n } else {\r\n data.index = 0;\r\n _load.apply(data.$target, [data]);\r\n }\r\n\r\n // Run callback function\r\n if (data.zoomNextPrevCallback) {\r\n data.zoomNextPrevCallback.apply(data.$zoomer, [data]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _previousImage\r\n * @description Handles previous button click\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _previousImage(e) {\r\n var data = e.data;\r\n\r\n if (!data.loading && data.index - 1 >= 0) {\r\n data.index--;\r\n _load.apply(data.$target, [data]);\r\n } else {\r\n data.index = data.images.length - 1;\r\n _load.apply(data.$target, [data]);\r\n }\r\n\r\n // Run callback function\r\n if (data.zoomNextPrevCallback) {\r\n data.zoomNextPrevCallback.apply(data.$zoomer, [data]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _zoomIn\r\n * @description Handles zoom in button click\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _zoomIn(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n var data = e.data;\r\n\r\n data = _setZoomPosition(data);\r\n data.keyDownTime = 1;\r\n data.action = 'zoom_in';\r\n // Run callback function\r\n if (data.zoomInCallback) {\r\n data.zoomInCallback.apply(data.$zoomer, [data]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _zoomOut\r\n * @description Handles zoom out button click\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _zoomOut(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n var data = e.data;\r\n\r\n data = _setZoomPosition(data);\r\n data.keyDownTime = 1;\r\n data.action = 'zoom_out';\r\n // Run callback function\r\n if (data.zoomOutCallback) {\r\n data.zoomOutCallback.apply(data.$zoomer, [data]);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _clearZoom\r\n * @description Clears current zoom action\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _clearZoom(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n var data = e.data;\r\n data = _clearZoomPosition(data);\r\n\r\n data.keyDownTime = 0;\r\n data.action = '';\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _setZoomPosition\r\n * @description Sets zoom position\r\n * @param data [object] \"Instance Data\"\r\n * @param left [number] \"Left position\"\r\n * @param top [number] \"Top position\"\r\n */\r\n function _setZoomPosition(data, left, top) {\r\n left = left || data.imageWidth * 0.5;\r\n top = top || data.imageHeight * 0.5;\r\n\r\n data.zoomPositionLeft = (left - (data.positionerLeft - data.centerLeft)) / data.imageWidth;\r\n data.zoomPositionTop = (top - (data.positionerTop - data.centerTop)) / data.imageHeight;\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _clearZoomPosition\r\n * @description Clears zoom position\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _clearZoomPosition(data) {\r\n data.zoomPositionTop = 0;\r\n data.zoomPositionLeft = 0;\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _dragStart\r\n * @description Handles drag start\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _dragStart(e) {\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n var data = e.data;\r\n data.action = 'drag';\r\n\r\n data.mouseX = e.pageX;\r\n data.mouseY = e.pageY;\r\n\r\n data.targetPositionerLeft = data.positionerLeft;\r\n data.targetPositionerTop = data.positionerTop;\r\n\r\n $window.on('mousemove.zoomer', data, _onDrag).on('mouseup.zoomer', data, _dragStop);\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onDrag\r\n * @description Handles dragging\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _onDrag(e) {\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n var data = e.data;\r\n\r\n if (e.pageX && e.pageY) {\r\n data.targetPositionerLeft -= Math.round(data.mouseX - e.pageX);\r\n data.targetPositionerTop -= Math.round(data.mouseY - e.pageY);\r\n\r\n data.mouseX = e.pageX;\r\n data.mouseY = e.pageY;\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _dragStop\r\n * @description Handles drag end\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _dragStop(e) {\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n var data = e.data;\r\n data.action = '';\r\n\r\n $window.off('mousemove.zoomer mouseup.zoomer');\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onTouch\r\n * @description Delegates touch event\r\n * @param e [object] \"Event Data\"\r\n */\r\n function _onTouch(e) {\r\n if ($(e.target).parent('.zoomer-controls').length > 0) {\r\n return;\r\n }\r\n\r\n // Stop ms panning and zooming\r\n if (e.preventManipulation) {\r\n e.preventManipulation();\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n var data = e.data,\r\n oe = e.originalEvent;\r\n\r\n if (oe.type.match(/(up|end)$/i)) {\r\n _onTouchEnd(data, oe);\r\n return;\r\n }\r\n\r\n if (oe.pointerId) {\r\n // Normalize MS pointer events back to standard touches\r\n var activeTouch = false;\r\n for (var i in data.touches) {\r\n if (data.touches[i].identifier === oe.pointerId) {\r\n activeTouch = true;\r\n data.touches[i].pageX = oe.clientX;\r\n data.touches[i].pageY = oe.clientY;\r\n }\r\n }\r\n if (!activeTouch) {\r\n data.touches.push({\r\n identifier: oe.pointerId,\r\n pageX: oe.clientX,\r\n pageY: oe.clientY\r\n });\r\n }\r\n } else {\r\n // Alias normal touches\r\n data.touches = oe.touches;\r\n }\r\n\r\n // Delegate touch actions\r\n if (oe.type.match(/(down|start)$/i)) {\r\n _onTouchStart(data);\r\n } else if (oe.type.match(/move$/i)) {\r\n _onTouchMove(data);\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onTouchStart\r\n * @description Handles touch start\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _onTouchStart(data) {\r\n // Touch events\r\n if (!data.touchEventsBound) {\r\n data.touchEventsBound = true;\r\n $window.on('touchmove.zoomer MSPointerMove.zoomer', data, _onTouch).on('touchend.zoomer MSPointerUp.zoomer', data, _onTouch);\r\n }\r\n\r\n data.zoomPercentage = 1;\r\n\r\n if (data.touches.length >= 2) {\r\n data.offset = data.$zoomer.offset();\r\n\r\n // Double touch - zoom\r\n data.pinchStartX0 = data.touches[0].pageX - data.offset.left;\r\n data.pinchStartY0 = data.touches[0].pageY - data.offset.top;\r\n data.pinchStartX1 = data.touches[1].pageX - data.offset.left;\r\n data.pinchStartY1 = data.touches[1].pageY - data.offset.top;\r\n\r\n data.pinchStartX = (data.pinchStartX0 + data.pinchStartX1) / 2.0;\r\n data.pinchStartY = (data.pinchStartY0 + data.pinchStartY1) / 2.0;\r\n\r\n data.imageWidthStart = data.imageWidth;\r\n data.imageHeightStart = data.imageHeight;\r\n\r\n _setZoomPosition(data);\r\n\r\n data.pinchDeltaStart = Math.sqrt(Math.pow(data.pinchStartX1 - data.pinchStartX0, 2) + Math.pow(data.pinchStartY1 - data.pinchStartY0, 2));\r\n }\r\n\r\n data.mouseX = data.touches[0].pageX;\r\n data.mouseY = data.touches[0].pageY;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onTouchMove\r\n * @description Handles touch move\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _onTouchMove(data) {\r\n if (data.touches.length === 1) {\r\n data.action = 'drag';\r\n\r\n data.targetPositionerLeft -= data.mouseX - data.touches[0].pageX;\r\n data.targetPositionerTop -= data.mouseY - data.touches[0].pageY;\r\n } else if (data.touches.length >= 2) {\r\n data.action = 'pinch';\r\n\r\n data.pinchEndX0 = data.touches[0].pageX - data.offset.left;\r\n data.pinchEndY0 = data.touches[0].pageY - data.offset.top;\r\n data.pinchEndX1 = data.touches[1].pageX - data.offset.left;\r\n data.pinchEndY1 = data.touches[1].pageY - data.offset.top;\r\n\r\n // Double touch - zoom\r\n // Only if we've actually move our touches\r\n if (\r\n data.pinchEndX0 !== data.lastPinchEndX0 ||\r\n data.pinchEndY0 !== data.lastPinchEndY0 ||\r\n data.pinchEndX1 !== data.lastPinchEndX1 ||\r\n data.pinchEndY1 !== data.lastPinchEndY1\r\n ) {\r\n data.pinchDeltaEnd = Math.sqrt(Math.pow(data.pinchEndX1 - data.pinchEndX0, 2) + Math.pow(data.pinchEndY1 - data.pinchEndY0, 2));\r\n data.zoomPercentage = data.pinchDeltaEnd / data.pinchDeltaStart;\r\n\r\n data.targetImageWidth = Math.round(data.imageWidthStart * data.zoomPercentage);\r\n data.targetImageHeight = Math.round(data.imageHeightStart * data.zoomPercentage);\r\n\r\n data.pinchEndX = (data.pinchEndX0 + data.pinchEndX1) / 2.0;\r\n data.pinchEndY = (data.pinchEndY0 + data.pinchEndY1) / 2.0;\r\n\r\n data.lastPinchEndX0 = data.pinchEndX0;\r\n data.lastPinchEndY0 = data.pinchEndY0;\r\n data.lastPinchEndX1 = data.pinchEndX1;\r\n data.lastPinchEndY1 = data.pinchEndY1;\r\n }\r\n }\r\n\r\n data.mouseX = data.touches[0].pageX;\r\n data.mouseY = data.touches[0].pageY;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onTouchEnd\r\n * @description Handles touch end\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _onTouchEnd(data, oe) {\r\n data.action = '';\r\n\r\n data.lastPinchEndX0 = data.pinchEndX0 = data.pinchStartX0 = 0;\r\n data.lastPinchEndY0 = data.pinchEndY0 = data.pinchStartY0 = 0;\r\n data.lastPinchEndX1 = data.pinchEndX1 = data.pinchStartX1 = 0;\r\n data.lastPinchEndY1 = data.pinchEndY1 = data.pinchStartY1 = 0;\r\n\r\n data.pinchStartX = data.pinchEndX = 0;\r\n data.pinchStartY = data.pinchEndX = 0;\r\n\r\n _clearZoomPosition(data);\r\n\r\n if (oe.pointerId) {\r\n for (var i in data.touches) {\r\n if (data.touches[i].identifier === oe.pointerId) {\r\n data.touches.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // Clear touch events\r\n /* if (data.touches.length <= 1) { */\r\n $window.off('.zoomer');\r\n data.touchEventsBound = false;\r\n /*\r\n\t\t} else {\r\n\t\t\tdata.mouseX = data.touches[0].pageX;\r\n\t\t\tdata.mouseY = data.touches[0].pageY;\r\n\t\t}\r\n\t\t*/\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _normalizeSource\r\n * @description Normalizes source string or object\r\n * @param data [object] \"Instance Data\"\r\n */\r\n function _normalizeSource(data) {\r\n data.tiled = false;\r\n data.gallery = false;\r\n\r\n if (typeof data.source === 'string') {\r\n data.images = [data.source];\r\n } else {\r\n if (typeof data.source[0] === 'string') {\r\n data.images = data.source;\r\n if (data.images.length > 1) {\r\n data.gallery = true;\r\n }\r\n } else {\r\n data.tiledThumbnail = data.source.thumbnail;\r\n data.images = [data.source.tiles];\r\n data.tiled = true;\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _startAnimation\r\n * @description Starts main animation loop\r\n */\r\n function _startAnimation() {\r\n if (!animating) {\r\n animating = true;\r\n _onAnimate();\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _clearAnimation\r\n * @description End main animation loop\r\n */\r\n function _clearAnimation() {\r\n animating = false;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _onAnimate\r\n * @description Handles RAF\r\n */\r\n function _onAnimate() {\r\n if (animating) {\r\n window.requestAnimationFrame(_onAnimate);\r\n _render();\r\n }\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _prefix\r\n * @description Builds vendor-prefixed styles\r\n * @param property [string] \"Property to prefix\"\r\n * @param value [string] \"Property value\"\r\n * @return [string] \"Vendor-prefixed style\"\r\n */\r\n function _prefix(property, value) {\r\n var r = {};\r\n\r\n r['-webkit-' + property] = value;\r\n r['-moz-' + property] = value;\r\n r['-ms-' + property] = value;\r\n r['-o-' + property] = value;\r\n r[property] = value;\r\n\r\n return r;\r\n }\r\n\r\n /**\r\n * @method private\r\n * @name _getTransform3DSupport\r\n * @description Determines if transforms are support\r\n * @return [boolean] \"True if transforms supported\"\r\n */\r\n function _getTransform3DSupport() {\r\n /* http://stackoverflow.com/questions/11628390/how-to-detect-css-translate3d-without-the-webkit-context */\r\n /*\r\n\t\tvar prop = \"transform\",\r\n\t\t\tval = \"translate3d(0px, 0px, 0px)\",\r\n\t\t\ttest = /translate3d\\(0px, 0px, 0px\\)/g,\r\n\t\t\t$div = $(\"
    \");\r\n\r\n\t\t$div.css(_prefix(prop, val));\r\n\t\tvar check = $div[0].style.cssText.match(test);\r\n\r\n\t\treturn (check !== null && check.length > 0);\r\n\t\t*/\r\n\r\n /* http://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support/12621264#12621264 */\r\n var el = document.createElement('p'),\r\n has3d,\r\n transforms = {\r\n webkitTransform: '-webkit-transform',\r\n OTransform: '-o-transform',\r\n msTransform: '-ms-transform',\r\n MozTransform: '-moz-transform',\r\n transform: 'transform'\r\n };\r\n\r\n document.body.insertBefore(el, null);\r\n for (var t in transforms) {\r\n if (el.style[t] !== undefined) {\r\n el.style[t] = 'translate3d(1px,1px,1px)';\r\n has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);\r\n }\r\n }\r\n document.body.removeChild(el);\r\n\r\n return has3d !== undefined && has3d.length > 0 && has3d !== 'none';\r\n }\r\n\r\n $.fn.zoomer = function(method) {\r\n if (pub[method]) {\r\n return pub[method].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (typeof method === 'object' || !method) {\r\n return _init.apply(this, arguments);\r\n }\r\n return this;\r\n };\r\n\r\n $.zoomer = function(method) {\r\n if (method === 'defaults') {\r\n pub.defaults.apply(this, Array.prototype.slice.call(arguments, 1));\r\n }\r\n };\r\n})(jQuery, window);\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\nvar processInclude = require('base/util');\r\nvar customUtil = require('./customUtil');\r\n\r\nvar swiper,\r\n maxRatioOriginal = 0,\r\n zoomInFrameID,\r\n zoomOutFrameID,\r\n previousTimeStamp,\r\n timeoutID, timeoutID2,\r\n transform, origZoomTransform, origImgTransform,\r\n touchMove = false,\r\n isMobile = false;\r\n\r\n/**\r\n * Init the zoom functionality\r\n */\r\nfunction initZoom() {\r\n var imageToOpen = 0;\r\n var imageList = [];\r\n var altList = [];\r\n\r\n $('#modalZoomLoading').removeClass('d-none');\r\n $('#zoomModal .modal-body').addClass('hide');\r\n\r\n $('body').on('click', '.primary-images .carousel-item:not(.pdp-video-container) img', function() {\r\n imageToOpen = $(event.target).data('image') ? $(event.target).data('image') : 0;\r\n var carouselImages = $(this)\r\n .parents('.primary-images')\r\n .find('img');\r\n\r\n $('.zoomer_basic').swiper('destroy');\r\n\r\n $('.zoomer_basic')\r\n .empty()\r\n .removeClass('zoomer-element')\r\n .addClass('swiper-element');\r\n\r\n imageList = [];\r\n altList = [];\r\n $.each(carouselImages, function(index, val) {\r\n imageList.push($(val).attr('data-zoom'));\r\n altList.push($(val).attr('alt'));\r\n });\r\n\r\n var html = `
      \r\n -\r\n +\r\n
      `\r\n\r\n $('#zoomModal').find('.modal-content').prepend(html);\r\n\r\n var zoomerOpt = {\r\n index: imageToOpen,\r\n // increment: 0.01,\r\n // interval: 0.1,\r\n // marginMax: 100, //Left commented for any future changes\r\n imageList: imageList,\r\n altList: altList,\r\n onImageLoad: function(imageRatio, data) {\r\n data.swiper = new Swiper('.swiper', {\r\n // Optional parameters\r\n direction: 'horizontal',\r\n loop: true,\r\n grabCursor: true,\r\n speed: 900,\r\n threshold: 5,\r\n followFinger: false,\r\n preventInteractionOnTransition: true,\r\n centeredSlides: true,\r\n effect: 'slide',\r\n zoom: {\r\n maxRatio: 5,\r\n },\r\n // If we need pagination\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true\r\n },\r\n // Navigation arrows\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n },\r\n on: {\r\n afterInit: function (_swiper) {\r\n swiper = _swiper\r\n maxRatioOriginal = swiper.params.zoom.maxRatio;\r\n initZoomControls.apply(_swiper);\r\n isMobile = customUtil.isMobile();\r\n },\r\n slideChange: function (swiper) {\r\n },\r\n tap: function () {\r\n swiper.params.zoom.maxRatio = maxRatioOriginal;\r\n },\r\n doubleTap: function (swiper) {\r\n swiper.params.zoom.maxRatio = maxRatioOriginal;\r\n touchMove = false;\r\n },\r\n touchStart: function (swiper, event) {\r\n if(event.touches && event.touches.length > 1){\r\n event.preventDefault();\r\n event.stopPropagation();\r\n touchMove = false;\r\n }\r\n },\r\n touchEnd: function (swiper, event) {\r\n\r\n if(event.touches && event.touches.length > 1){\r\n return;\r\n }\r\n\r\n touchMove = false;\r\n },\r\n touchMove: function (swiper) {\r\n touchMove = true;\r\n },\r\n zoomChange: function (swiper, scale, imageEl, slideEl) {\r\n\r\n var $zoomContainer = $(slideEl).find('.swiper-zoom-container');\r\n\r\n // enable/disable zoom controls\r\n if (scale > swiper.params.zoom.minRatio) {\r\n swiper.allowSlidePrev = swiper.allowSlideNext = false;\r\n $(swiper.navigation.nextEl).css({opacity: 0});\r\n $(swiper.navigation.prevEl).css({opacity: 0});\r\n $(swiper.pagination.el).css({opacity: 0});\r\n } else {\r\n swiper.allowSlidePrev = swiper.allowSlideNext = true;\r\n $(swiper.navigation.nextEl).css({opacity: 1});\r\n $(swiper.navigation.prevEl).css({opacity: 1});\r\n $(swiper.pagination.el).css({opacity: 1});\r\n }\r\n\r\n $('.zoomer-zoom-in').css({opacity: 1});\r\n $('.zoomer-zoom-out').css({opacity: 1});\r\n\r\n if (scale >= maxRatioOriginal) {\r\n stopAnimationInit();\r\n $('.zoomer-zoom-in').css({opacity: 0.5});\r\n $('.zoomer-zoom-out').css({opacity: 1});\r\n zoomOutEnable.apply(swiper);\r\n } else if (scale <= swiper.params.zoom.minRatio) {\r\n stopAnimationInit();\r\n $('.zoomer-zoom-in').css({opacity: 1});\r\n $('.zoomer-zoom-out').css({opacity: 0.5});\r\n zoomInEnable.apply(swiper);\r\n }\r\n\r\n },\r\n slideChange: function (swiper) {\r\n $('#modalZoomLoading').addClass('d-none');\r\n }, slideChangeTransitionEnd: function (swiper) {\r\n if (isMobile) {\r\n window.requestAnimationFrame(function () {\r\n var $slide = $('.swiper-slide-active');\r\n var data = $slide.data('slider-zoomer-data') || $slide.closest('.swiper-element').data('zoomer');\r\n if (data) {\r\n var $clone = $slide.find('.clone');\r\n var cloneInt = setInterval(function () {\r\n if (!$clone.length) {\r\n clearInterval(cloneInt)\r\n } else {\r\n $clone.remove();\r\n }\r\n }, 100);\r\n }\r\n });\r\n }\r\n }, slideChangeTransitionStart: function (swiper) {\r\n if (isMobile) {\r\n data.toggleAnimation = false;\r\n }\r\n\r\n },\r\n slideNextTransitionStart: function (swiper) {\r\n if (isMobile) {\r\n window.requestAnimationFrame(function () {\r\n var $slideActive = $('.swiper-slide-active');\r\n var $slidePrev = $('.swiper-slide-prev, .swiper-slide-duplicate-prev');\r\n\r\n var $holder = $slideActive.find('.holder');\r\n\r\n if (!$holder.siblings('.clone').length) {\r\n var $clone = $holder.clone();\r\n $clone.addClass('clone').removeClass('holder');\r\n $holder.parent().append($clone);\r\n }\r\n\r\n var data = $slideActive.data('slider-zoomer-data') || $slideActive.closest('.swiper-element').data('zoomer');\r\n if (data) {\r\n var scaleX = data.minWidth / data.naturalWidth,\r\n scaleY = data.minHeight / data.naturalHeight,\r\n centerLeft = data.frameWidth / 2,\r\n centerTop = data.frameHeight / 2;\r\n\r\n var $holder = $slideActive.find('.holder');\r\n\r\n $holder.css(_prefix('transform', `translate3d(-50%, -50%, 0) scale(${scaleX}, ${scaleY})`))\r\n $holder.css({\r\n left: centerLeft + 'px',\r\n top: centerTop + 'px',\r\n height: data.naturalHeight,\r\n width: data.naturalWidth\r\n });\r\n\r\n }\r\n\r\n var prevData = $slidePrev.data('slider-zoomer-data') || $slidePrev.closest('.swiper-element').data('zoomer');\r\n if (prevData) {\r\n var prevCenterLeft = prevData.frameWidth / 2,\r\n prevCenterTop = prevData.frameHeight / 2;\r\n\r\n $slidePrev.find('.holder')\r\n .css(_prefix('transform', 'translate3d(-50%, -50%, 0) scale(1, 1)'))\r\n .css({left: prevCenterLeft+ 'px', top: prevCenterTop + 'px' , height: prevData.minHeight, width: prevData.minWidth});\r\n }\r\n });\r\n }\r\n },\r\n slidePrevTransitionStart: function (swiper) {\r\n if (isMobile) {\r\n window.requestAnimationFrame(function () {\r\n var $slideActive = $('.swiper-slide-active');\r\n var $slideNext = $('.swiper-slide-next, .swiper-slide-duplicate-next');\r\n\r\n var $holder = $slideActive.find('.holder');\r\n if (!$holder.siblings('.clone').length) {\r\n var $clone = $holder.clone();\r\n $clone.addClass('clone').removeClass('holder');\r\n $holder.parent().append($clone);\r\n }\r\n\r\n var data = $slideActive.data('slider-zoomer-data') || $slideActive.closest('.swiper-element').data('zoomer');\r\n if (data) {\r\n var scaleX = data.minWidth / data.naturalWidth,\r\n scaleY = data.minHeight / data.naturalHeight,\r\n centerLeft = data.frameWidth / 2,\r\n centerTop = data.frameHeight / 2;\r\n\r\n var $holder = $slideActive.find('.holder');\r\n\r\n $holder.css(_prefix('transform', `translate3d(-50%, -50%, 0) scale(${scaleX}, ${scaleY})`))\r\n $holder.css({\r\n left: centerLeft + 'px',\r\n top: centerTop + 'px',\r\n height: data.naturalHeight,\r\n width: data.naturalWidth\r\n });\r\n }\r\n\r\n var nextData = $slideNext.data('slider-zoomer-data') || $slideNext.closest('.swiper-element').data('zoomer');\r\n if (nextData) {\r\n var nextCenterLeft = nextData.frameWidth / 2,\r\n nextCenterTop = nextData.frameHeight / 2;\r\n\r\n $slideNext.find('.holder')\r\n .css(_prefix('transform', 'translate3d(-50%, -50%, 0) scale(1, 1)'))\r\n .css({\r\n left: nextCenterLeft + 'px',\r\n top: nextCenterTop + 'px',\r\n height: nextData.minHeight,\r\n width: nextData.minWidth\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n },\r\n prependImageCallback: function ($image) {\r\n var _swiper = this;\r\n window.requestAnimationFrame(function () {\r\n _swiper.prependSlide($image);\r\n });\r\n\r\n },\r\n appendImageCallback: function ($image) {\r\n var _swiper = this;\r\n window.requestAnimationFrame(function () {\r\n _swiper.appendSlide($image);\r\n });\r\n }\r\n };\r\n\r\n $('.zoomer_basic').swiper(zoomerOpt);\r\n\r\n $('#zoomModal').modal();\r\n });\r\n\r\n // $('body').on('click', '.pdp-video-container', function() {\r\n // $('.zoomer_basic').swiper('destroy');\r\n // $('.zoomer_basic')\r\n // .empty()\r\n // .removeClass('zoomer-element');\r\n\r\n // var iframeSrc = $(this)\r\n // .find('iframe')\r\n // .attr('src');\r\n // if (iframeSrc != null) {\r\n // var iframediv = '