{"version":3,"file":"../../javascript/compare.js","names":["$","window","$bar","$selected","getSkus","skus","data","toString","split","updateCheckbox","sku","checked","each","i","el","closest","toggleClass","checkScroll","scrollable","document","querySelector","$scrollable","t","scrollTop","l","scrollLeft","b","scrollHeight","clientHeight","r","scrollWidth","clientWidth","compareWatch","on","e","trigger","preventDefault","target","ajax","type","url","href","classList","remove","Overlay","close","$link","length","skuNdx","indexOf","splice","join","colNdx","index","$trs","find","tr","eq","addClass","setTimeout","html","css","compareParams","querySelectorAll","forEach","script","getAttribute","magnificPopup","open","mainClass","closeMarkup","svg","render","items","src","callbacks","ajaxContentAdded","createElement","setAttribute","head","appendChild","replace","with","URLSearchParams","then","response","$response","payload","removeClass","$form","prop","serializeArray","redirect","location","initial","field","maxReached","setSkus","request","Date","getTime","stopImmediatePropagation","checkbox","$field","value","found","push","$button","load","transition_duration","wait_for_scripts","scrollable_element","overlay","content","modifiers","callback","closed","configurableOptions"],"sources":["compare.js"],"mappings":"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","ignoreList":[],"sourceRoot":"../../../../resources/javascript","sourcesContent":[";(function($, window, undefined) {\n    const $bar = $('.js-bar');\n    const $selected = $('.js-bar-selected');\n\n    function getSkus() {\n        let skus = $selected.data('selected');\n\n        if (skus !== '') {\n            return skus.toString().split(',');\n        } else {\n            return [];\n        }\n    }\n\n    function updateCheckbox(sku, checked) {\n        // uncheck the checkbox if it exists\n        $(`.js-ps-product-checkbox[value=\"${sku}\"]`).each((i, el) => {\n            el.checked = checked;\n            $(el).closest('.field').toggleClass('field--checked', checked);\n        });\n    }\n\n    $selected.on('change', (e, initial) => {\n        let skus = getSkus();\n\n        const field = skus.length == 1 ? 'single' : 'plural';\n        $selected.html(`${skus.length} ${$selected.data(field)}`);\n\n        $bar.toggleClass('select-bar--selected', skus.length > 0);\n\n        const maxReached = skus.length == $selected.data('max');\n\n        $('body').toggleClass('compare-max', maxReached);\n        $('.js-bar-limit').toggleClass('select-bar__limit--warning', maxReached);\n\n        if (!initial) {\n            var $ajax = $.ajax({\n                type : 'get',\n                url  : '/compare/update',\n                data : {'setSkus': skus.join(','), 'request': new Date().getTime()},\n            });\n        }\n    }).trigger('change', [true]);\n\n    $(document).on('change', '.js-ps-product-checkbox', (e) => {\n        e.stopImmediatePropagation();\n        let skus = getSkus();\n\n        const checkbox = e.target;\n        const checked = checkbox.checked;\n        const $field = $(checkbox).closest('.field');\n        const sku = checkbox.value;\n        const skuNdx = skus.indexOf(sku.toString());\n        const found = skuNdx > -1;\n\n        if (checked && !found) {\n            skus.push(sku);\n        }\n\n        if (!checked && found) {\n            skus.splice(skuNdx, 1);\n        }\n\n        $field.toggleClass('field--checked', checked);\n\n        $selected.data('selected', skus.join(','));\n        $selected.trigger('change');\n    });\n\n    $('.js-compare-submit').on('click', (e) => {\n        e.preventDefault();\n\n        if ($selected.data('selected') === '') {\n            return;\n        }\n\n        const $button = $(e.target);\n        $button.addClass('button--disabled');\n\n        Overlay.load('/compare?setSkus=' + $selected.data('selected') + '&request=' + new Date().getTime() + '&compare=1', {\n            transition_duration: 100,\n            wait_for_scripts: false,\n            scrollable_element: (overlay) => {\n                return overlay.content.querySelector('.js-compare');\n            },\n            modifiers: ['takeover'],\n            callback: () => {\n                compareWatch();\n                $button.removeClass('button--disabled');\n            },\n            closed: () => {\n                configurableOptions();\n            },\n        });\n    });\n\n    function checkScroll() {\n        const scrollable = document.querySelector('.js-compare');\n        const $scrollable = $(scrollable);\n        const t = scrollable.scrollTop;\n        const l = scrollable.scrollLeft;\n        const b = scrollable.scrollHeight - scrollable.clientHeight - scrollable.scrollTop;\n        const r = scrollable.scrollWidth - scrollable.clientWidth - scrollable.scrollLeft;\n\n        $scrollable.toggleClass('compare--scroll-top', t > 0);\n        $scrollable.toggleClass('compare--scroll-left', l > 0);\n        $scrollable.toggleClass('compare--scroll-bottom', b > 0);\n        $scrollable.toggleClass('compare--scroll-right', r > 0);\n    }\n\n    function compareWatch() {\n        $('.js-compare').on('scroll', (e) => {\n            checkScroll();\n        }).trigger('scroll');\n\n        $(window).on('resize', (e) => {\n            checkScroll();\n        });\n\n        $(document).on('click', '.js-compare-clear', (e) => {\n            e.preventDefault();\n\n            const $link = $(e.target);\n\n            var $ajax = $.ajax({\n                type : 'get',\n                url  : e.target.href,\n            });\n\n            $('.field--checked .js-ps-product-checkbox').each((i, el) => {\n                el.checked = false;\n                el.closest('.field').classList.remove('field--checked');\n            });\n\n            $selected.data('selected', '');\n            $selected.trigger('change');\n\n            Overlay.close();\n        });\n\n        $(document).on('click', '.js-compare-delete', (e) => {\n            e.preventDefault();\n\n            const $link = $(e.target);\n\n            var $ajax = $.ajax({\n                type : 'get',\n                url  : e.target.href,\n            });\n\n            const sku = $link.data('sku');\n\n            updateCheckbox(sku, false);\n\n            if ($selected.length > 0) {\n                let skus = getSkus();\n                const skuNdx = skus.indexOf(sku.toString());\n\n                // remove from the selected list on the main page\n                if (skuNdx > -1) {\n                    skus.splice(skuNdx, 1);\n\n                    $selected.data('selected', skus.join(','));\n                    $selected.trigger('change');\n                }\n\n                if (skus.length == 0) {\n                    Overlay.close();\n                    return;\n                }\n            }\n\n            const colNdx = $link.closest('td, th').index();\n            const $table = $link.closest('table');\n            const $trs = $table.find('tr');\n\n            // do fancy animation and remove from the table\n            $trs.each((i, tr) => {\n                $(tr).find('td, th').eq(colNdx).addClass('compare__cell--deleting');\n            });\n\n            setTimeout(() => {\n                $trs.each((i, tr) => {\n                    $(tr).find('td, th').eq(colNdx).html('').css('padding', '0');\n                });\n\n            }, 250);\n\n            setTimeout(() => {\n                $trs.each((i, tr) => {\n                    $(tr).find('td, th').eq(colNdx).remove();\n                });\n\n                checkScroll();\n            }, 500);\n        });\n\n        $(document).on('click', '.js-compare-edit', (e) => {\n            e.preventDefault();\n\n            window.compareParams = null;\n\n            // unload the script, it needs to be loaded each time the popup is displayed\n            let scripts = document.querySelectorAll('script');\n            scripts.forEach((script) => {\n                const src = script.getAttribute('src') ?? '';\n                if (src.indexOf('configurable-options.js') > -1) {\n                    script.remove();\n                }\n            });\n\n            $.magnificPopup.open({\n                mainClass: 'mfp-sidebar',\n                closeMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\" aria-label=\"Close\">' + svg.render('close') + '</button>',\n                items: {\n                    src: e.target.href,\n                    type: 'ajax'\n                },\n                callbacks: {\n                    ajaxContentAdded: () => {\n                        let script = document.createElement('script');\n                        script.setAttribute('src', '/javascript/pages/configurable-options.js');\n                        document.head.appendChild(script);\n                    },\n                    close: () => {\n                        if (window.window.compareParams) {\n                            let skus = getSkus();\n                            const skuNdx = skus.indexOf(window.window.compareParams.replace.toString());\n\n                            if (skuNdx > -1) {\n                                skus.splice(skuNdx, 1, window.window.compareParams.with);\n\n                                $selected.data('selected', skus.join(','));\n                                $selected.trigger('change');\n                            }\n\n                            updateCheckbox(window.window.compareParams.replace, false);\n                            updateCheckbox(window.window.compareParams.with, true);\n\n                            $('body').addClass('overlay--loading');\n\n                            let $ajax = $.ajax({\n                                type : 'get',\n                                url  : '/compare?' + new URLSearchParams(window.window.compareParams).toString(),\n                            }).then((response) => {\n                                const $response = $(response.payload.html);\n\n                                $('.js-compare').html($response.find('.js-compare').html());\n                                $('body').removeClass('overlay--loading');\n                            });\n                        }\n                    }\n                },\n            });\n        });\n\n        $(document).on('submit', '.js-compare-project', (e) => {\n            e.preventDefault();\n\n            let $form = $(e.target);\n\n            let $ajax = $.ajax({\n                type : 'post',\n                url  : $form.prop('action'),\n                data: $form.serializeArray(),\n            }).then((response) => {\n                if (response && response.payload && response.payload.redirect) {\n                    window.location = response.payload.redirect;\n                }\n            });\n        });\n    }\n\n    $(document).on('click', '.js-compare-variants', (e) => {\n        e.preventDefault();\n        const $link = $(e.target);\n        if ($link.data('variant-skus') === '') {\n            return;\n        }\n\n        Overlay.load('/compare?skus=' + $link.data('variant-skus') + '&type=variants&request=' + new Date().getTime() + '&compare=1', {\n            transition_duration: 100,\n            wait_for_scripts: false,\n            scrollable_element: (overlay) => {\n                return overlay.content.querySelector('.js-compare');\n            },\n            modifiers: ['takeover'],\n            callback: () => {\n                compareWatch();\n            },\n            closed: () => {\n                configurableOptions();\n            },\n        });\n    });\n})($, window);\n"]}