{"version":3,"file":"categorycomparison.92724e7835ec9cd9f355.js","mappings":"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","sources":["webpack://front-end-build-system/./src/comparisonchart/category.js","webpack://front-end-build-system/./src/comparisonchart/productfilters.js","webpack://front-end-build-system/./src/comparisonchart/productfiltermodal.js","webpack://front-end-build-system/./src/comparisonchart/comparisonscrollcontroller.js","webpack://front-end-build-system/./src/comparisonchart/comparisontable.js","webpack://front-end-build-system/./src/comparisonchart/comparisontools.js","webpack://front-end-build-system/./src/smartpak/modal.js"],"sourcesContent":["\nimport comparisonScrollController from './comparisonscrollcontroller';\nimport comparisonTable from './comparisontable';\nimport comparisonTools from './comparisontools';\nimport productFilterModal from './productfiltermodal';\nimport productFilters from './productfilters';\n\nconst $container = document.getElementById('comparison-chart-container');\nconst $filterContainer = document.getElementById('comparison-filter');\nconst $table = $container.querySelector('table');\n\nconst scrollController = comparisonScrollController({\n $scrollarea: $container.querySelector('.compare-scroll-container'),\n $columns: [...$table.querySelector('tr').querySelectorAll('td, th')],\n $next: $container.querySelector('.control-scroll-next'),\n $previous: $container.querySelector('.control-scroll-previous')\n});\n\nconst productTable = comparisonTable($table);\nconst tools = comparisonTools($container);\nconst filters = productFilters($filterContainer);\nconst productIDs = productTable.getProductIds();\nconst params = new URLSearchParams(location.search);\n\nconst updateIds = ids => {\n productTable.showIds(ids);\n tools.setFiltersInURL(ids.length && ids.length !== productIDs.length ? ids : undefined);\n scrollController.forceUpdate();\n};\n\nif (params.has('filters')) {\n const ids = decodeURIComponent(params.get('filters')).split(',');\n filters.setSelectedValues(ids);\n updateIds(ids);\n}\n\n$container.querySelector('.filter-button')?.addEventListener('click', () => {\n const initialFilterValues = filters.getSelectedValues();\n\n productFilterModal($filterContainer, {\n onApply: () => {\n const selectedProductIds = filters.getSelectedValues();\n const hasSelectedFilters = selectedProductIds.length > 0;\n\n if (hasSelectedFilters) {\n updateIds(selectedProductIds);\n }\n\n return hasSelectedFilters;\n },\n onCancel: () => filters.setSelectedValues(initialFilterValues)\n });\n});\n","export default function productFilters($container) {\n const $selectAll = $container.querySelector('#filtered-select');\n const $checkboxes = [...$container.querySelectorAll('input[name=\"filtered-ids\"]')];\n\n const getSelected = () => $checkboxes.filter(checkbox => checkbox.checked);\n const getSelectedValues = () => getSelected().map(checkbox => checkbox.value);\n const setSelectedValues = values => $checkboxes.forEach(checkbox => checkbox.checked = values.includes(checkbox.value));\n\n $selectAll.addEventListener('change', event => $checkboxes.forEach(element => element.checked = event.target.checked));\n\n return {\n getSelectedValues,\n setSelectedValues\n };\n}","import modal from '../smartpak/modal';\n\nexport default function productFilterModal($content, { onOpen, onApply, onCancel }) {\n if (typeof onApply !== 'function') {\n throw new Error('productFilterModal requires an \"onApply\" function option.');\n }\n\n const actions = {\n APPLY: 'Apply',\n CANCEL: 'Cancel'\n };\n\n let lastAction;\n\n modal($content, {\n title: 'Filter Products',\n open: () => {\n if (typeof onOpen === 'function') {\n onOpen();\n }\n },\n close: () => {\n if (lastAction !== actions.APPLY && typeof onCancel === 'function') {\n onCancel();\n }\n },\n buttons: [\n {\n text: actions.APPLY,\n click: (modalInstance) => {\n lastAction = actions.APPLY;\n\n if (onApply()) {\n modalInstance.close();\n }\n }\n },\n {\n text: actions.CANCEL,\n click: (modalInstance) => {\n modalInstance.close();\n\n lastAction = actions.CANCEL;\n }\n }\n ]\n });\n}","\nfunction scrollButton($button) {\n let clickHandler;\n\n return {\n reset: () => {\n if (clickHandler) {\n $button.removeEventListener('click', clickHandler);\n }\n\n $button.removeAttribute('disabled');\n $button.style.removeProperty('display');\n },\n onClick: (clickHandler) => {\n $button.addEventListener('click', clickHandler);\n },\n enable: () => {\n $button.disabled = false;\n },\n disable: () => {\n $button.disabled = true;\n },\n show: () => {\n $button.style.display = 'initial';\n },\n hide: () => {\n $button.style.display = 'none';\n }\n };\n}\n\nexport default function comparisonScrollController({ $scrollarea, $columns, $next, $previous }) {\n if (!$scrollarea || !$columns || !$next || !$previous) {\n throw new Error('comparisonScrollController requires more properties');\n }\n\n const next = scrollButton($next);\n const previous = scrollButton($previous);\n\n const setButtonDisabledState = () => {\n previous[$scrollarea.scrollLeft === 0 ? 'disable' : 'enable']();\n next[$scrollarea.scrollLeft === $scrollarea.scrollWidth - $scrollarea.clientWidth ? 'disable' : 'enable']();\n };\n\n const requiresHorizontalScroll = () => $scrollarea.scrollWidth > $scrollarea.clientWidth;\n\n const setButtonVisibility = (hasOverflow) => {\n next[hasOverflow ? 'show' : 'hide']();\n previous[hasOverflow ? 'show' : 'hide']();\n };\n\n const scrollTo = ($element) => {\n if (!$element) {\n return;\n }\n\n $scrollarea.scrollTo({\n left: $element.offsetLeft,\n behavior: 'smooth'\n });\n };\n\n previous.onClick(() => scrollTo($columns.find($column => $column.offsetLeft > ($scrollarea.scrollLeft - $scrollarea.clientWidth))));\n\n next.onClick(() => scrollTo($columns.find($column => $column.offsetLeft + $column.clientWidth > ($scrollarea.scrollLeft + $scrollarea.clientWidth))));\n\n setButtonVisibility(requiresHorizontalScroll());\n setButtonDisabledState();\n\n const handleScroll = () => {\n if ($scrollarea.scrollWidth <= $scrollarea.clientWidth) {\n return;\n }\n\n setButtonDisabledState();\n }; \n\n const handleResize = () => {\n setButtonVisibility(requiresHorizontalScroll());\n setButtonDisabledState();\n };\n\n $scrollarea.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', handleResize);\n\n return {\n forceUpdate: () => handleResize()\n };\n}","export default function comparisonTable($table) {\n if (!$table || $table.nodeName.toLowerCase() !== 'table') {\n throw new Error('comparisonTable requires a table element as a parameter.');\n }\n\n const HIDE_CLASS = 'jsHide';\n\n const getProductIds = () => [...$table.querySelectorAll(`thead > tr > th[data-column]:not(.${HIDE_CLASS})`)].map($column => $column.dataset.column);\n\n const columnCount = () => getProductIds().length;\n\n const updateColSpan = count => {\n $table.dataset.columns = count;\n\n [...$table.querySelectorAll('[colspan]')].forEach($element => $element.setAttribute('colspan', count));\n };\n\n const hideById = id => {\n [...$table.querySelectorAll(`[data-column=\"${id}\"]`)]\n .forEach($element => $element.classList.add(HIDE_CLASS));\n };\n\n const showAll = () => {\n [...$table.querySelectorAll(`th.${HIDE_CLASS}, td.${HIDE_CLASS}`)]\n .forEach($element => $element.classList.remove(HIDE_CLASS));\n };\n\n const initialIds = getProductIds();\n\n return {\n getProductIds,\n removeById: id => {\n [...$table.querySelectorAll(`[data-column=\"${id}\"]`)]\n .forEach($cell => $cell.remove());\n\n updateColSpan(columnCount());\n },\n showIds: ids => {\n showAll();\n\n initialIds\n .filter(id => !ids.includes(id))\n .forEach(id => hideById(id));\n\n updateColSpan(columnCount());\n }\n };\n}","function print($container) {\n if (!$container) {\n return;\n }\n\n import('../../jsscripts/jquery/printThis.js').then(() => {\n $($container).printThis();\n });\n}\n\nfunction copyToClipboard($shareButton) {\n if (!$shareButton) {\n return;\n }\n\n import('clipboard').then(({ default: Clipboard }) => {\n new Clipboard($shareButton);\n $shareButton.click();\n });\n}\n\nexport default function comparisonTools($container) {\n if (!$container) {\n throw new Error(`comparisonTools functions could not located the DOM element`);\n }\n\n const $toolbar = $container.querySelector('#comparison-tools');\n\n if (!$toolbar) {\n throw new Error(`comparisonTools functions could not located the DOM element`);\n }\n\n let $inputURL;\n let originalURL;\n\n const setFiltersInURL = filters => {\n if (!$inputURL) {\n $inputURL = $toolbar.querySelector('#share-url');\n }\n\n if (!originalURL) {\n originalURL = $inputURL.value;\n }\n\n if (!Array.isArray(filters) || !filters.length) {\n $inputURL.value = originalURL;\n return;\n }\n\n $inputURL.value = `${originalURL.split('?')[0]}?filters=${encodeURIComponent(filters.toString())}`;\n };\n\n $toolbar.querySelector('.printFrame')?.addEventListener('click', event => {\n event.preventDefault();\n print($container.parentElement.querySelector('#printThis'));\n });\n\n $toolbar.querySelector('#share-copy-button')?.addEventListener('click', function loadClipBoard(event) {\n event.preventDefault();\n event.target.removeEventListener('click', loadClipBoard);\n copyToClipboard(event.target);\n });\n\n return {\n setFiltersInURL\n };\n}"," \r\n// Add modal HTML here\r\n\r\n/* prevents unit tests from blowing up */\r\nconst Dialog = window.ds && window.ds.Dialog ? window.ds.Dialog : class Noop{};\r\nclass Modal extends Dialog{\r\n constructor(content, opts){\r\n super(content, opts);\r\n }\r\n}\r\nexport default function modal(content, options) {\r\n return new Modal(content, options);\r\n}"],"names":["$container","document","getElementById","$filterContainer","$table","querySelector","scrollController","comparisonScrollController","$scrollarea","$columns","querySelectorAll","$next","$previous","productTable","comparisonTable","tools","comparisonTools","filters","$selectAll","$checkboxes","_toConsumableArray","addEventListener","event","forEach","element","checked","target","getSelectedValues","filter","checkbox","map","value","setSelectedValues","values","includes","productFilters","productIDs","getProductIds","params","URLSearchParams","location","search","updateIds","ids","showIds","setFiltersInURL","length","undefined","forceUpdate","has","decodeURIComponent","get","split","_$container$querySele","initialFilterValues","$content","_ref","onOpen","onApply","onCancel","Error","lastAction","actions","modal","title","open","close","buttons","text","click","modalInstance","productFilterModal","selectedProductIds","hasSelectedFilters","scrollButton","$button","reset","removeAttribute","style","removeProperty","onClick","clickHandler","enable","disabled","disable","show","display","hide","next","previous","setButtonDisabledState","scrollLeft","scrollWidth","clientWidth","requiresHorizontalScroll","setButtonVisibility","hasOverflow","scrollTo","$element","left","offsetLeft","behavior","find","$column","handleResize","window","nodeName","toLowerCase","HIDE_CLASS","concat","dataset","column","columnCount","updateColSpan","count","columns","setAttribute","initialIds","removeById","id","$cell","remove","classList","add","hideById","_$toolbar$querySelect","_$toolbar$querySelect2","$inputURL","originalURL","$toolbar","preventDefault","then","$","printThis","print","parentElement","loadClipBoard","$shareButton","removeEventListener","Clipboard","Array","isArray","encodeURIComponent","toString","Modal","_Dialog","content","opts","_classCallCheck","_callSuper","_inherits","_createClass","ds","Dialog","Noop","options"],"sourceRoot":""}