{"version":3,"sources":["webpack:///./cartridges/org_newbalance/cartridge/client/default/js/components/carousel-config.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/contentComponents/catNavGuidedBuying.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/contentComponents/contentComponentBase.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/product/afterpayWidget.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/video.js"],"names":["module","exports","toggleCarouselControls","$carousel","length","$carouselInner","find","totalSlides","children","activeIndex","index","removeClass","addClass","initCatNavGuidedBuying","$","each","element","stackTileContainer","firstStackTile","mobileStackedLayout","this","$selectSizeModal","carouselConfig","require","afterpayWidget","afterpayMobileContent","fillSelectSizeProductModal","selectedProductUrl","method","indexOf","spinner","start","ajax","url","dataType","success","data","html","$html","productPrice","parsedHtml","renderedTemplate","body","append","parseHTML","footer","empty","text","closeButtonText","enterDialogMessage","modal","product","price","type","min","sales","value","getWidget","id","init","$displayColorName","$mobileProductColorName","selectedColor","fillProductName","stop","error","openSelectSizeModal","e","preventDefault","document","trigger","attr","handleCarouselControls","onShowSelectSizeModal","removeAttr","ready","on","response","container","$productContainer","enable","toArray","every","item","then","productBase","selectAttribute","colorAttribute","addToCart","updatedProductID","updatedProductPrice","className","getUpdatedWidgetUrl","val","queryString","updatedWidget","undefined","show","measures","switchPlayPauseBtn","video","paused","$nbPdContainer","$playPauseControl","siblings","instantiateProductVideos","videoWrappers","Array","from","querySelectorAll","isMobileViewport","isMobile","forEach","setAttribute","getElementsByTagName","isProductVideo","getAttribute","playable","handleAutoPlay","visible","r","b","parent","x","y","w","offsetWidth","h","offsetHeight","offsetLeft","offsetTop","offsetParent","Math","max","window","pageXOffset","innerWidth","pageYOffset","innerHeight","isVideoVisible","autoPaused","play","pause","load","muted","addEventListener","$currentBtn","nbPdVideo","closest","videoNode"],"mappings":";;;;2DAyBAA,EAAOC,QAAU,CACbC,uBApBJ,SAAgCC,GAC5B,GAAIA,EAAUC,OAAQ,CAClB,IAAIC,EAAiBF,EAAUG,KAAK,mBAChCC,EAAcF,EAAeD,OAASC,EAAeG,SAAS,kBAAkBJ,OAAS,EACzFK,EAAcJ,EAAeC,KAAK,yBAAyBI,QACrB,IAAhBD,GAEtBN,EAAUG,KAAK,0BAA0BK,YAAY,UACrDR,EAAUG,KAAK,0BAA0BM,SAAS,WAC3CH,IAAiBF,EAAc,GACtCJ,EAAUG,KAAK,0BAA0BK,YAAY,UACrDR,EAAUG,KAAK,0BAA0BM,SAAS,YAElDT,EAAUG,KAAK,0BAA0BK,YAAY,UACrDR,EAAUG,KAAK,0BAA0BK,YAAY,e;;;;2DCFjEX,EAAOC,QAAU,CACbY,uBAAwB,WACpBC,EAlBmB,0BAkBGC,MAAK,YAZnC,SAA6BC,GACzB,IAAIC,EAAqBD,EAAQV,KAAK,QAGtC,GAFqBW,EAAmBT,WAAWJ,OAE9B,GAAM,EAAG,CAC1B,IAAIc,EAAiBD,EAAmBT,SAAS,UACjDM,EAAEI,GAAgBN,SAAS,mBAQvBO,CADkBL,EAAEM,MAAMd,KAAK,4B;;;;2DCnB3C,IAAIe,EAAmBP,EAAE,2BACrBQ,EAAiBC,sCAAQ,yFACzBC,EAAiBD,kCAAQ,qFACzBE,EAAwBF,mCAAQ,sFAiCpC,SAASG,EAA2BC,GAChC,IACMC,EADcD,GAAsBA,EAAmBE,QAAQ,0BAA4B,EACpE,OAAS,MAEtCf,EAAEgB,UAAUC,QACZjB,EAAEkB,KAAK,CACHC,IAAKN,EACLC,OAAQA,EACRM,SAAU,OACVC,QAAS,SAAUC,GACf,IAvBkBC,EACtBC,EA8BQC,EARAC,GAvBcH,EAuBoBD,EAAKK,iBAjB5C,CAAEC,MALLJ,EAAQxB,EAAE,SAAS6B,OAAO7B,EAAE8B,UAAUP,KAEzB/B,KAAK,sBAGDuC,OAFRP,EAAMhC,KAAK,iBAAiBE,aAqBjCa,EAAiBf,KAAK,eAAewC,QACrCzB,EAAiBf,KAAK,eAAe+B,KAAKG,EAAWE,MACrDrB,EAAiBf,KAAK,iBAAiB+B,KAAKG,EAAWK,QACvDxB,EAAiBf,KAAK,iCAAiCyC,KAAKX,EAAKY,iBACjE3B,EAAiBf,KAAK,kBAAkByC,KAAKX,EAAKa,oBAClD5B,EAAiB6B,MAAM,QAES,UAA5Bd,EAAKe,QAAQC,MAAMC,OACnBd,EAAeH,EAAKe,QAAQC,MAAME,IAAIC,MAAMC,OAE5CpB,EAAKe,QAAQC,MAAMG,QACnBhB,EAAeH,EAAKe,QAAQC,MAAMG,MAAMC,OAE5ChC,EAAeiC,UAAUrB,EAAKe,QAAQO,GAAInB,EAAc,wBACpDd,GAAyBA,EAAsBkC,MAA8C,mBAA/BlC,EAAsBkC,MACpFlC,EAAsBkC,OAvDtC,WACI,IAAIC,EAAoBvC,EAAiBf,KAAK,uBAC1CuD,EAA0BxC,EAAiBf,KAAK,sBACpD,GAAIsD,EAAkBxD,QAAUyD,EAAwBzD,OAAQ,CAC5D,IAAI0D,EAAgBF,EAAkBb,OACtCc,EAAwBxB,KAAKyB,IAoDzBC,GACAjD,EAAEgB,UAAUkC,QAEhBC,MAAO,WACHnD,EAAEgB,UAAUkC,UASxB,SAASE,EAAoBC,GACzBA,EAAEC,iBACFtD,EAAEuD,UAAUC,QAAQ,2BAA4BxD,EAAEM,MAAMmD,KAAK,aAE7D7C,EADyBZ,EAAEM,MAAMgB,KAAK,qBAO1C,SAASoC,IACLlD,EAAepB,uBAAuBmB,GAO1C,SAASoD,IACLD,IACAnD,EAAiBf,KAAK,6BAA6BoE,WAAW,YAsDlE5D,EAAEuD,UAAUM,OAAM,WA/CVtD,EAAiBjB,SAEjBU,EAAEuD,UAAUO,GAAG,QAAS,mBAAoBV,GAE5CpD,EAAE,QAAQ8D,GAAG,mBAAoB,0BAA2BJ,GAE5D1D,EAAEuD,UAAUO,GAAG,iBAAkB,0BAA2BH,GAE5D3D,EAAE,QAAQ8D,GAAG,gCAAgC,SAAUT,EAAGU,GAClD/D,EAAE,gDAAgDV,QAClDU,EAAE,eAAeR,KAAKuE,EAASC,WAAW1C,KAAK,MAAOyC,EAASzC,KAAKe,QAAQO,IAC5E5C,EAAE,eAAeR,KAAKuE,EAASC,WAAWxE,KAAK,eAAeyC,KAAK8B,EAASzC,KAAKe,QAAQO,KAEzF5C,EAAE,kCAAkCsB,KAAK,MAAOyC,EAASzC,KAAKe,QAAQO,OAI9E5C,EAAE,QAAQ8D,GAAG,2BAA2B,SAAUT,EAAGU,GAEjD/D,EAAE,qBAAsB+D,EAASE,mBAAmBR,KAAK,YAAY,GAErE,IAAIS,EAASlE,EAAE,wBAAyB+D,EAASE,mBAAmBE,UAAUC,OAAM,SAAUC,GAC1F,OAAOrE,EAAEqE,GAAM/C,KAAK,cAAgBtB,EAAEqE,GAAM/C,KAAK,qBAErDtB,EAAE,4BAA6B+D,EAASE,mBAAmBR,KAAK,YAAaS,MAGjFlE,EAAE,QAAQ8D,GAAG,iCAAiC,WAC1CvD,EAAiBf,KAAK,eAAewB,UAAUC,WAGnDjB,EAAE,QAAQ8D,GAAG,2BAA2B,WACpCvD,EAAiBf,KAAK,kBAAkBwB,UAAUC,WAGtDjB,EAAE,QAAQ8D,GAAG,0BAA0B,WACnCvD,EAAiBf,KAAK,kBAAkBwB,UAAUkC,OAClD3C,EAAiB6B,MAAM,WAE3B,gOAAoEkC,MAAK,SAAUC,GAC/EA,EAAYC,kBACZD,EAAYE,iBACZF,EAAYG,oB;;;;2DCrHxBxF,EAAOC,QAAU,CACbwD,UAxBJ,SAAmBgC,EAAkBC,EAAqBC,EAAWZ,GACjE,GAAIjE,EAAE,mBAAmBV,OAAS,EAAG,CACjC,IAAIwF,EAAsB9E,EAAE,mBAAmB+E,MAC3CC,EAAc,cAAgBL,EAAmB,wBAA0BC,EAAsB,cAAgBC,EAErH7E,EAAEkB,KAAK,CACHC,IAAK2D,EAAsBE,EAC3BlE,OAAQ,MACRO,QAAS,SAAUC,GACXA,EAAK2D,qBACqBC,IAAtBjB,GACAA,EAAkBzE,KAAK,oBAAoB+B,KAAKD,EAAK2D,eACrDhB,EAAkBzE,KAAK,oBAAoB2F,aACdD,IAAtBjB,IACPjE,EAAE,oBAAoBuB,KAAKD,EAAK2D,eAChCjF,EAAE,oBAAoBmF,gB;;;;2DCpB9C,IAAMC,EAAW3E,wBAAQ,4EAEzB,SAAS4E,EAAmBC,EAAOC,GAC/B,IAAIC,EAAiBxF,EAAE,gBACvB,GAAIwF,GAAkBA,EAAelG,OAAQ,CACzC,IAAImG,EAAoBzF,EAAEA,EAAEsF,GAAOI,SAAS,mBAAmBlG,KAAK,gBAChE+F,EACAE,EAAkB3F,SAAS,UAE3B2F,EAAkB5F,YAAY,WA+E1C,SAAS8F,IACL,IAAIC,EAAgBC,MAAMC,KAAKvC,SAASwC,iBAAiB,+CACrDC,EAAmBZ,EAASa,WAEhCL,EAAcM,SAAQ,SAAUhG,GAC5BA,EAAQiG,aAAa,gBAAiB,QACtC,IACIb,EAAQpF,EAAQkG,qBAAqB,SAAS,GAC9CC,EAA+D,SAA9Cf,EAAMgB,aAAa,uBACpCC,EAAW,EAQf,SAASC,IACL,IAAIC,EA7ChB,SAAwBnB,GACpB,IAIIoB,EACAC,EAKAC,EAVAC,EAAI,EACJC,EAAI,EACJC,EAAIzB,EAAM0B,YACVC,EAAI3B,EAAM4B,aASd,IADAN,EAAStB,EACFsB,GAAUA,IAAWrD,SAAS3B,MACjCiF,GAAKD,EAAOO,WACZL,GAAKF,EAAOQ,UACZR,EAASA,EAAOS,aAQpB,OANAX,EAAIG,EAAIE,EACRJ,EAAIG,EAAIG,EACGK,KAAKC,IAAI,EAAGD,KAAK9E,IAAIuE,EAAGS,OAAOC,YAAcD,OAAOE,WAAab,EAAGH,EAAIc,OAAOC,cAC/EH,KAAKC,IAAI,EAAGD,KAAK9E,IAAIyE,EAAGO,OAAOG,YAAcH,OAAOI,YAAcd,EAAGH,EAAIa,OAAOG,eAExDZ,EAAIE,GAsBjBY,CAAevC,GAC7BA,EAAMa,aAAa,SAAS,GAE5B,IAAI2B,EAAmD,SAAtCxC,EAAMgB,aAfP,mBAiBhB,GAAIG,EAAUF,EAAU,CACpB,IAAIuB,EAIA,OAHAxC,EAAMa,aAnBE,mBAmB0B,GAKtCb,EAAMyC,OACN1C,EAAmBC,GAAO,QAErBA,EAAMC,QACPD,EAAMa,aA5BE,mBA4B0B,GAEtCb,EAAMa,aAAa,SAAS,GAC5Bb,EAAM0C,QACN3C,EAAmBC,GAAO,GA1B7Be,IAEDE,EAAW,IA4BXF,IAAmBL,IACnBV,EAAM2C,OACNzB,IAEAlB,EAAMyC,OACNzC,EAAM4C,OAAQ,GAGb7B,IACDf,EAAMa,aA7CU,mBA6CkB,GAClCqB,OAAOW,iBAAiB,SAAU3B,GAAgB,GAClDgB,OAAOW,iBAAiB,SAAU3B,GAAgB,GAClDgB,OAAOW,iBAAiB,OAAQ3B,GAAgB,OAK5DgB,OAAO7B,yBAA2BA,EAElC3F,EAAEuD,UAAUM,OAAM,WACd8B,IACApC,SAAS4E,iBAAiB,kBAAmBxC,GAxI7C3F,EAAE,eAAe8D,GAAG,SAAS,SAAUT,GACnCA,EAAEC,iBACF,IAAI8E,EAAcpI,EAAEM,MAChB+H,EAAYD,EAAYE,QAAQ,gBACpC,GAAID,GAAaA,EAAU/I,OAAQ,CAC/B,IAAIgG,EAAQtF,EAAEqI,GAAW7I,KAAK,SAC9B,GAAI8F,GAASA,EAAMhG,OAAQ,CACvB,IAAIiJ,EAAYjD,EAAM,GAClBiD,EAAUhD,QACV6C,EAAYtI,SAAS,UACrByI,EAAUR,SAEVK,EAAYvI,YAAY,UACxB0I,EAAUP,cAM1BhI,EAAE,WAAW8D,GAAG,SAAS,SAAUT,GAC/BA,EAAEC,iBACF,IAAI8E,EAAcpI,EAAEM,MAChB+H,EAAYD,EAAYE,QAAQ,gBACpC,GAAID,GAAaA,EAAU/I,OAAQ,CAC/B,IAAIgG,EAAQtF,EAAEqI,GAAW7I,KAAK,SAC1B8F,GAASA,EAAMhG,UACfgG,EAAQA,EAAM,IACJ4C,MACNE,EAAYvI,YAAY,SAExBuI,EAAYtI,SAAS,SAEzBwF,EAAM4C,OAAU5C,EAAM4C,WAKlClI,EAAE,sBAAsB8D,GAAG,QAAQ,WAC/BuB,EAAmB/E,MAAM,MAG7BN,EAAE,sBAAsB8D,GAAG,SAAS,WAChCuB,EAAmB/E,MAAM","file":"conponents-chunk.js","sourcesContent":["'use strict';\n\n/**\n * Toogle Carousel Controls(Prev and Next buutons) display\n * @param {Object} $carousel carousel element - jquery object\n */\nfunction toggleCarouselControls($carousel) {\n if ($carousel.length) {\n var $carouselInner = $carousel.find('.carousel-inner');\n var totalSlides = $carouselInner.length ? $carouselInner.children('.carousel-item').length : 0;\n var activeIndex = $carouselInner.find('.carousel-item.active').index();\n var isFirstCarouselItem = activeIndex === 0;\n if (isFirstCarouselItem) {\n $carousel.find('.carousel-control-next').removeClass('d-none');\n $carousel.find('.carousel-control-prev').addClass('d-none');\n } else if (activeIndex === (totalSlides - 1)) {\n $carousel.find('.carousel-control-prev').removeClass('d-none');\n $carousel.find('.carousel-control-next').addClass('d-none');\n } else {\n $carousel.find('.carousel-control-prev').removeClass('d-none');\n $carousel.find('.carousel-control-next').removeClass('d-none');\n }\n }\n}\n\nmodule.exports = {\n toggleCarouselControls: toggleCarouselControls\n};\n","'use strict';\n\nconst catNavGuidedBuying = '.cat-nav-guided-buying';\n\n/**\n * Mobile stacked layout if tiles odd number change layout of first div.\n * @param {*} element - category nav guided buying component\n */\nfunction mobileStackedLayout(element) {\n var stackTileContainer = element.find('.row');\n var StackTileCount = stackTileContainer.children().length;\n\n if (StackTileCount % 2 !== 0) {\n var firstStackTile = stackTileContainer.children(':first');\n $(firstStackTile).addClass('stacked-layout');\n }\n}\n\nmodule.exports = {\n initCatNavGuidedBuying: function () {\n $(catNavGuidedBuying).each(function () {\n var mobileStack = $(this).find('.only-mobile.pb-2');\n mobileStackedLayout(mobileStack);\n });\n }\n};\n","'use strict';\n\nvar $selectSizeModal = $('#selectProductSizeModal');\nvar carouselConfig = require('../components/carousel-config');\nvar afterpayWidget = require('../product/afterpayWidget');\nvar afterpayMobileContent = require('../product/afterpayContent');\n\n/**\n * Fill Product Name\n */\nfunction fillProductName() {\n var $displayColorName = $selectSizeModal.find('.color-name-desktop');\n var $mobileProductColorName = $selectSizeModal.find('.color-name-mobile');\n if ($displayColorName.length && $mobileProductColorName.length) {\n var selectedColor = $displayColorName.text();\n $mobileProductColorName.html(selectedColor);\n }\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseProductEditHtml(html) {\n var $html = $('
').append($.parseHTML(html));\n\n var body = $html.find('.product-quickview');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * replaces the content in the modal window for product variation to be edited.\n * @param {string} selectedProductUrl - url to be used to retrieve a new product model\n */\nfunction fillSelectSizeProductModal(selectedProductUrl) {\n const isQuickView = selectedProductUrl && selectedProductUrl.indexOf('Product-ShowQuickView') > -1;\n const method = isQuickView ? 'POST' : 'GET';\n\n $.spinner().start();\n $.ajax({\n url: selectedProductUrl,\n method: method,\n dataType: 'json',\n success: function (data) {\n var parsedHtml = parseProductEditHtml(data.renderedTemplate);\n\n $selectSizeModal.find('.modal-body').empty();\n $selectSizeModal.find('.modal-body').html(parsedHtml.body);\n $selectSizeModal.find('.modal-footer').html(parsedHtml.footer);\n $selectSizeModal.find('.modal-header .close .sr-only').text(data.closeButtonText);\n $selectSizeModal.find('.enter-message').text(data.enterDialogMessage);\n $selectSizeModal.modal('show');\n var productPrice;\n if (data.product.price.type === 'range') {\n productPrice = data.product.price.min.sales.value;\n }\n if (data.product.price.sales) {\n productPrice = data.product.price.sales.value;\n }\n afterpayWidget.getWidget(data.product.id, productPrice, 'pdp-afterpay-message');\n if (afterpayMobileContent && afterpayMobileContent.init && typeof afterpayMobileContent.init === 'function') {\n afterpayMobileContent.init();\n }\n fillProductName();\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Open Select Size modal\n * @param {Object} e event object\n */\nfunction openSelectSizeModal(e) {\n e.preventDefault();\n $(document).trigger('shop-the-look:selectSize', $(this).attr('data-pid'));\n var selectedProductUrl = $(this).data('productQuickView');\n fillSelectSizeProductModal(selectedProductUrl);\n}\n\n/**\n * Handle events on carousel slide changes\n */\nfunction handleCarouselControls() {\n carouselConfig.toggleCarouselControls($selectSizeModal);\n}\n\n/**\n * Fires when modal opens\n * @param {Object} e event object\n */\nfunction onShowSelectSizeModal() {\n handleCarouselControls();\n $selectSizeModal.find('button.add-to-cart-global').removeAttr('disabled');\n}\n\n/**\n * Initialize event listeners for select size modal\n */\nfunction initializeSelctSizeModalListeners() {\n if ($selectSizeModal.length) {\n // Listener needs to be global to be compatible with content that is added via AJAX.\n $(document).on('click', '.select-size-btn', openSelectSizeModal);\n\n $('body').on('slid.bs.carousel', '#selectProductSizeModal', handleCarouselControls);\n\n $(document).on('shown.bs.modal', '#selectProductSizeModal', onShowSelectSizeModal);\n\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.modal.show .product-quickview .bundle-items').length) {\n $('.modal.show').find(response.container).data('pid', response.data.product.id);\n $('.modal.show').find(response.container).find('.product-id').text(response.data.product.id);\n } else {\n $('.modal.show .product-quickview').data('pid', response.data.product.id);\n }\n });\n\n $('body').on('product:updateAddToCart', function (e, response) {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer).attr('disabled', false);\n\n var enable = $('.product-availability', response.$productContainer).toArray().every(function (item) {\n return $(item).data('available') && $(item).data('ready-to-order');\n });\n $('button.add-to-cart-global', response.$productContainer).attr('disabled', !enable);\n });\n\n $('body').on('product:beforeAttributeSelect', function () {\n $selectSizeModal.find('.modal-body').spinner().start();\n });\n\n $('body').on('product:beforeAddToCart', function () {\n $selectSizeModal.find('.modal-content').spinner().start();\n });\n\n $('body').on('product:afterAddToCart', function () {\n $selectSizeModal.find('.modal-content').spinner().stop();\n $selectSizeModal.modal('hide');\n });\n import(/* webpackChunkName: \"prod-base-chunk\" */ '../product/base').then(function (productBase) {\n productBase.selectAttribute();\n productBase.colorAttribute();\n productBase.addToCart();\n });\n }\n}\n\n$(document).ready(function () {\n initializeSelctSizeModalListeners();\n});\n","'use strict';\n\n/**\n * Load widget\n * @param {string} updatedProductID - updatedProductID\n * @param {string} updatedProductPrice - updatedProductPrice\n * @param {string} className - className\n * @param {Object} $productContainer - $productContainer\n */\nfunction getWidget(updatedProductID, updatedProductPrice, className, $productContainer) {\n if ($('.updated-widget').length > 0) {\n var getUpdatedWidgetUrl = $('.updated-widget').val();\n var queryString = '?productID=' + updatedProductID + '&updatedProductPrice=' + updatedProductPrice + '&className=' + className;\n\n $.ajax({\n url: getUpdatedWidgetUrl + queryString,\n method: 'GET',\n success: function (data) {\n if (data.updatedWidget) {\n if ($productContainer !== undefined) {\n $productContainer.find('.afterpay-widget').html(data.updatedWidget);\n $productContainer.find('.afterpay-widget').show();\n } else if ($productContainer === undefined) {\n $('.afterpay-widget').html(data.updatedWidget);\n $('.afterpay-widget').show();\n }\n }\n }\n });\n }\n}\n\nmodule.exports = {\n getWidget: getWidget\n};\n","/* eslint require-jsdoc: \"off\", curly: \"error\" */\n\n'use strict';\n\nconst measures = require('./util/measures');\n\nfunction switchPlayPauseBtn(video, paused) {\n var $nbPdContainer = $('.nb-pd-video');\n if ($nbPdContainer && $nbPdContainer.length) {\n var $playPauseControl = $($(video).siblings('.video-controls').find('.play-pause'));\n if (paused) {\n $playPauseControl.addClass('paused');\n } else {\n $playPauseControl.removeClass('paused');\n }\n }\n}\n\nfunction initVideoControlEvents() {\n $('.play-pause').on('click', function (e) {\n e.preventDefault();\n var $currentBtn = $(this);\n var nbPdVideo = $currentBtn.closest('.nb-pd-video');\n if (nbPdVideo && nbPdVideo.length) {\n var video = $(nbPdVideo).find('video');\n if (video && video.length) {\n var videoNode = video[0];\n if (videoNode.paused) {\n $currentBtn.addClass('paused');\n videoNode.play();\n } else {\n $currentBtn.removeClass('paused');\n videoNode.pause();\n }\n }\n }\n });\n\n $('.volume').on('click', function (e) {\n e.preventDefault();\n var $currentBtn = $(this);\n var nbPdVideo = $currentBtn.closest('.nb-pd-video');\n if (nbPdVideo && nbPdVideo.length) {\n var video = $(nbPdVideo).find('video');\n if (video && video.length) {\n video = video[0];\n if (video.muted) {\n $currentBtn.removeClass('muted');\n } else {\n $currentBtn.addClass('muted');\n }\n video.muted = !(video.muted);\n }\n }\n });\n\n $('.nb-pd-video video').on('play', function () {\n switchPlayPauseBtn(this, true);\n });\n\n $('.nb-pd-video video').on('pause', function () {\n switchPlayPauseBtn(this, false);\n });\n}\n\nfunction isVideoVisible(video) {\n var x = 0;\n var y = 0;\n var w = video.offsetWidth;\n var h = video.offsetHeight;\n var r;\n var b;\n var visibleX;\n var visibleY;\n var visibleMultiplication;\n var visible;\n var parent;\n parent = video;\n while (parent && parent !== document.body) {\n x += parent.offsetLeft;\n y += parent.offsetTop;\n parent = parent.offsetParent;\n }\n r = x + w;\n b = y + h;\n visibleX = Math.max(0, Math.min(w, window.pageXOffset + window.innerWidth - x, r - window.pageXOffset));\n visibleY = Math.max(0, Math.min(h, window.pageYOffset + window.innerHeight - y, b - window.pageYOffset));\n visibleMultiplication = visibleX * visibleY;\n visible = visibleMultiplication / (w * h);\n return visible;\n}\n\nfunction instantiateProductVideos() {\n var videoWrappers = Array.from(document.querySelectorAll('.nb-video__product-js:not([data-scripted])'));\n var isMobileViewport = measures.isMobile();\n\n videoWrappers.forEach(function (element) {\n element.setAttribute('data-scripted', 'true');\n var autoPauseData = 'data-auto-pause';\n var video = element.getElementsByTagName('video')[0];\n var isProductVideo = video.getAttribute('data-isproductvideo') === 'true';\n var playable = 0;\n\n // determines whether the video will play with video load or play with scroll video into view\n if (!isProductVideo) {\n // at least 80% of the video element is visible in the viewport\n playable = 0.80;\n }\n\n function handleAutoPlay() {\n var visible = isVideoVisible(video);\n video.setAttribute('muted', true);\n\n var autoPaused = video.getAttribute(autoPauseData) === 'true';\n\n if (visible > playable) {\n if (autoPaused) {\n video.setAttribute(autoPauseData, false);\n } else {\n // don't resume playing the video if the user manually paused it\n return;\n }\n video.play();\n switchPlayPauseBtn(video, true);\n } else {\n if (!video.paused) {\n video.setAttribute(autoPauseData, true);\n }\n video.setAttribute('muted', true);\n video.pause();\n switchPlayPauseBtn(video, false);\n }\n }\n\n if (isProductVideo && !isMobileViewport) {\n video.load();\n handleAutoPlay();\n // extra pause/play necessary for video to play on product image/video load\n video.play();\n video.muted = true;\n }\n\n if (!isProductVideo) {\n video.setAttribute(autoPauseData, true);\n window.addEventListener('scroll', handleAutoPlay, false);\n window.addEventListener('resize', handleAutoPlay, false);\n window.addEventListener('load', handleAutoPlay, false);\n }\n });\n}\n\nwindow.instantiateProductVideos = instantiateProductVideos;\n\n$(document).ready(function () {\n instantiateProductVideos();\n document.addEventListener('content:updated', instantiateProductVideos);\n initVideoControlEvents();\n});\n"],"sourceRoot":""}