{"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","manuallyClicked","$playPauseControl","siblings","toggleClass","btnClass","btn","focus","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","manualControlsOnly","play","pause","load","muted","addEventListener","target","matches","nbPdVideo","closest","querySelector","$currentBtn"],"mappings":"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","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 = $('<div>').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\n// Class Selectors\nconst pdVideoClass = '.nb-pd-video';\n\n/**\n * Toggles the play/pause button state for a given video element.\n *\n * @param {HTMLVideoElement} video - The video element to control.\n * @param {boolean} paused - Indicates whether the video is paused.\n * @param {boolean} manuallyClicked - Indicates whether the button was clicked by the user\n */\nfunction switchPlayPauseBtn(video, paused, manuallyClicked) {\n    if (!video) {\n        return;\n    }\n\n    const $playPauseControl = $($(video).siblings('.video-controls').find('.play-pause'));\n    $playPauseControl.toggleClass('paused', paused);\n\n    if (manuallyClicked) {\n        const btnClass = paused ? '.btn-play' : '.btn-pause';\n        const btn = $playPauseControl.find(btnClass)[0];\n        if (btn) {\n            btn.focus();\n        }\n    }\n}\n\nfunction initVideoControlEvents() {\n    document.addEventListener('click', function (e) {\n        if (e.target.matches('.play-pause') || e.target.matches('.btn-pause') || e.target.matches('.btn-play')) {\n            e.preventDefault();\n            const currentBtn = e.target;\n            const nbPdVideo = currentBtn.closest(pdVideoClass);\n            if (nbPdVideo) {\n                const video = nbPdVideo.querySelector('video');\n                if (video) {\n                    if (video.paused) {\n                        video.play();\n                        switchPlayPauseBtn(video, false, true);\n                    } else {\n                        video.pause();\n                        switchPlayPauseBtn(video, true, true);\n                    }\n                }\n            }\n        }\n    });\n\n    $('.volume').on('click', function (e) {\n        e.preventDefault();\n        var $currentBtn = $(this);\n        var nbPdVideo = $currentBtn.closest(pdVideoClass);\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\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            var manualControlsOnly = video.getAttribute('data-manual-controls') === 'true';\n\n            if (visible > playable) {\n                if (autoPaused && !manualControlsOnly) {\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, false);\n            } else {\n                if (!video.paused) {\n                    video.setAttribute(autoPauseData, true);\n                }\n                video.setAttribute('muted', true);\n                video.pause();\n                switchPlayPauseBtn(video, true);\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            switchPlayPauseBtn(video, false);\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":""}