{ "version": 3, "sources": ["../../src/scripts/grid-filters.js"], "sourcesContent": ["/* eslint-disable indent */\n// selectors\nconst bodyEl = document.querySelector(\"body\");\nconst gridFiltersParentContainer = document.querySelector(\".grid-filters-container\");\nconst mobileTrigger = document.querySelector(\".grid-filters-button-trigger\");\nconst mobileFiltersClose = document.querySelector(\".grid-filters-button-close\");\nconst panel = document.querySelector(\".grid-filters-panel-container\");\nconst nestedMenuListTrigger = document.querySelectorAll(\".button-toggle-content-display\");\nconst filterLabelTemplate = document.querySelector('[data-model=\"filter-label-template\"');\nconst filterLabelList = document.querySelector(\".grid-filters-labels-list\");\nconst clearFiltersButton = document.querySelector('[name=\"clear-filters\"]');\nconst applyFiltersButton = document.querySelector('[name=\"apply-filters\"]');\nconst gridFiltersCountContainer = document.querySelectorAll(\".grid-filters-count-container\");\nconst gridFilterGroups = panel ? panel.querySelectorAll('[role=\"group\"]') : null;\nconst gridFiltersCount = document.querySelectorAll(\".grid-filters-count\");\nconst navTopBar = document.getElementById(\"top-bar\");\n\n// flags\nlet mobileContainerOpened = false;\n\n// the function below:\n// 1. creates the active filter pill,\n// 2. uses the label text for its text\n// 3. generates a data-name attribute\n// 4. places this new pill in the list with the others\nfunction cloneFilterLabel(template, list, label, name) {\n\tlet clonedLabel = template.cloneNode(true);\n\tclonedLabel.dataset.name = name;\n\tlet span = clonedLabel.querySelector(\"span\");\n\tspan.textContent = label;\n\tlist.append(clonedLabel);\n\treturn template;\n}\n\nfunction updateActiveFiltersCount() {\n\tlet count = 0;\n\tlet activeFilters = document.querySelectorAll(\".grid-filters-labels-list-item\");\n\tcount = activeFilters.length;\n\tgridFiltersCount.forEach((item) => {\n\t\titem.textContent = count;\n\t\tif (count === 0) {\n\t\t\tclearFiltersButton.disabled = true;\n\t\t\tgridFiltersCountContainer.forEach((item) => {\n\t\t\t\titem.classList.add(\"hidden\");\n\t\t\t});\n\t\t} else if (count > 0) {\n\t\t\tclearFiltersButton.disabled = false;\n\t\t\tgridFiltersCountContainer.forEach((item) => {\n\t\t\t\titem.classList.remove(\"hidden\");\n\t\t\t});\n\t\t}\n\t});\n\treturn count;\n}\n\nfunction updateActiveFiltersCountWithinSection() {\n\tif (!gridFilterGroups) {\n\t\treturn;\n\t}\n\n\tgridFilterGroups.forEach((item) => {\n\t\tlet filterCount = 0;\n\t\tlet parent = item.parentNode;\n\t\tlet counter = parent.querySelector(\".grid-filters-section-count\");\n\t\tlet counterContainer = parent.querySelector(\".grid-filters-section-count-container\");\n\t\tlet checkboxList = item.querySelectorAll(\".facetwp-checkbox:not(.facetwp-checkbox-exclusive)\");\n\t\tcheckboxList.forEach((el) => {\n\t\t\tif (el.classList.contains(\"checked\")) {\n\t\t\t\tfilterCount++;\n\t\t\t}\n\t\t});\n\t\tcounter.textContent = filterCount;\n\t\tfilterCount > 0 ? counterContainer.classList.remove(\"hidden\") : counterContainer.classList.add(\"hidden\");\n\t});\n\treturn;\n}\n\nfunction openMobileFiltersPanel() {\n\tpanel.classList.add(\"opened\");\n\tgridFiltersParentContainer.classList.add(\"mobile-expanded\");\n\tbodyEl.classList.add(\"scroll-lock\");\n\tnavTopBar.classList.add(\"hide-top-bar\");\n\treturn (mobileContainerOpened = true);\n}\n\nfunction closeMobileFiltersPanel() {\n\tpanel.classList.remove(\"opened\");\n\tgridFiltersParentContainer.classList.remove(\"mobile-expanded\");\n\tbodyEl.classList.remove(\"scroll-lock\");\n\tnavTopBar.classList.remove(\"hide-top-bar\");\n\treturn (mobileContainerOpened = false);\n}\n\n// need to activate the remove filter pill button so that the user can click to\n// 1. remove the pill from the active filters pill list\nfunction setListenerToRemoveActiveFilterAndUncheckMatch() {\n\tlet removeFilterButtons = document.querySelectorAll(\".button-remove-filter\");\n\tif (removeFilterButtons) {\n\t\tremoveFilterButtons.forEach((item) => {\n\t\t\titem.addEventListener(\"click\", () => {\n\t\t\t\tlet parent = item.parentNode;\n\t\t\t\tlet name = parent.getAttribute(\"data-name\");\n\n\t\t\t\tdocument.querySelector('.facetwp-checkbox[data-value=\"' + name + '\"]').click();\n\t\t\t\tparent.remove();\n\t\t\t});\n\t\t});\n\t}\n}\n\n// mobile and desktop basic functionality here\nconst mql = window.matchMedia(\"(min-width: 64em)\");\n// need to open all filters as a group in desktop\nif (mql.matches) {\n\t// the width of browser is more than 62em\n\tnestedMenuListTrigger.forEach((item) => {\n\t\titem.addEventListener(\"click\", () => {\n\t\t\tpanel.classList.toggle(\"expand-all\");\n\t\t});\n\t});\n\t// but in mobile each filter group should open individually\n} else {\n\t// the width of browser is less than 62em\n\tnestedMenuListTrigger.forEach((item) => {\n\t\titem.addEventListener(\"click\", () => {\n\t\t\titem.classList.toggle(\"expanded\");\n\t\t});\n\t});\n}\n\n// filter fun starts here\n// don't need to display the active filter template on load,\n// it exists in memory so we can use it as a template to populate list of active filters\n//filterLabelTemplate.remove();\n\nif (mobileTrigger) {\n\tmobileTrigger.addEventListener(\n\t\t\"click\",\n\t\t() => {\n\t\t\tmobileContainerOpened ? closeMobileFiltersPanel() : openMobileFiltersPanel();\n\t\t},\n\t\tfalse,\n\t);\n}\n\nif (mobileFiltersClose) {\n\tmobileFiltersClose.addEventListener(\n\t\t\"click\",\n\t\t() => {\n\t\t\tif (mobileContainerOpened) {\n\t\t\t\tcloseMobileFiltersPanel();\n\t\t\t}\n\t\t},\n\t\tfalse,\n\t);\n}\n\nif (applyFiltersButton) {\n\tapplyFiltersButton.addEventListener(\n\t\t\"click\",\n\t\t() => {\n\t\t\tif (mobileContainerOpened) {\n\t\t\t\tcloseMobileFiltersPanel();\n\t\t\t}\n\t\t},\n\t\tfalse,\n\t);\n}\n\nif (clearFiltersButton) {\n\tclearFiltersButton.addEventListener(\"click\", () => {\n\t\tlet FWP = window.FWP;\n\t\tFWP.reset();\n\t\tlet labelsList = document.querySelectorAll(\".grid-filters-labels-list-item\");\n\t\tlabelsList.forEach((el) => {\n\t\t\tel.remove();\n\t\t});\n\t\tupdateActiveFiltersCountWithinSection();\n\t\tupdateActiveFiltersCount();\n\t\treturn;\n\t});\n}\n\ndocument.addEventListener(\"click\", function (event) {\n\tif (!document.getElementsByClassName(\"search-results\").length > 0) {\n\t\tlet isClickInside = gridFiltersParentContainer.contains(event.target);\n\n\t\tif (isClickInside) {\n\t\t\t// clicked inside - do nothing\n\t\t} else {\n\t\t\tif (panel.classList.contains(\"expand-all\")) {\n\t\t\t\tdocument.querySelector(\".button-toggle-content-display\").click();\n\t\t\t}\n\t\t}\n\t}\n});\n\n//let jQuery\n\n(function ($) {\n\t// remove all labels\n\tif (document.querySelector(\".grid-filters-labels-list-item\")) {\n\t\tdocument.querySelectorAll(\".grid-filters-labels-list-item\").forEach((label) => {\n\t\t\tlabel.remove();\n\t\t});\n\t}\n\n\t$(document).on(\"facetwp-loaded\", function () {\n\t\tconst allCheckboxes = document.querySelectorAll(\".facetwp-checkbox:not(.facetwp-checkbox-exclusive)\");\n\n\t\t// remove all labels\n\t\tdocument.querySelectorAll(\".grid-filters-labels-list-item\").forEach((label) => {\n\t\t\tlabel.remove();\n\t\t});\n\n\t\t// set active labels\n\t\tallCheckboxes.forEach((item) => {\n\t\t\tlet filterText = item.querySelector(\".facetwp-display-value\").textContent;\n\t\t\tlet name = item.getAttribute(\"data-value\");\n\n\t\t\tif (item.classList.contains(\"checked\")) {\n\t\t\t\tif (!document.querySelector('.grid-filters-labels-list-item[data-name=\"' + name + '\"]')) {\n\t\t\t\t\tcloneFilterLabel(filterLabelTemplate, filterLabelList, filterText, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tsetListenerToRemoveActiveFilterAndUncheckMatch();\n\t\tupdateActiveFiltersCountWithinSection();\n\t\tupdateActiveFiltersCount();\n\t});\n})(jQuery);\n"], "mappings": "MAEA,IAAMA,EAAS,SAAS,cAAc,MAAM,EACtCC,EAA6B,SAAS,cAAc,yBAAyB,EAC7EC,EAAgB,SAAS,cAAc,8BAA8B,EACrEC,EAAqB,SAAS,cAAc,4BAA4B,EACxEC,EAAQ,SAAS,cAAc,+BAA+B,EAC9DC,EAAwB,SAAS,iBAAiB,gCAAgC,EAClFC,EAAsB,SAAS,cAAc,qCAAqC,EAClFC,EAAkB,SAAS,cAAc,2BAA2B,EACpEC,EAAqB,SAAS,cAAc,wBAAwB,EACpEC,EAAqB,SAAS,cAAc,wBAAwB,EACpEC,EAA4B,SAAS,iBAAiB,+BAA+B,EACrFC,EAAmBP,EAAQA,EAAM,iBAAiB,gBAAgB,EAAI,KACtEQ,EAAmB,SAAS,iBAAiB,qBAAqB,EAClEC,EAAY,SAAS,eAAe,SAAS,EAG/CC,EAAwB,GAO5B,SAASC,EAAiBC,EAAUC,EAAMC,EAAOC,EAAM,CACtD,IAAIC,EAAcJ,EAAS,UAAU,EAAI,EACzCI,EAAY,QAAQ,KAAOD,EAC3B,IAAIE,EAAOD,EAAY,cAAc,MAAM,EAC3C,OAAAC,EAAK,YAAcH,EACnBD,EAAK,OAAOG,CAAW,EAChBJ,CACR,CAEA,SAASM,GAA2B,CACnC,IAAIC,EAAQ,EAEZ,OAAAA,EADoB,SAAS,iBAAiB,gCAAgC,EACxD,OACtBX,EAAiB,QAASY,GAAS,CAClCA,EAAK,YAAcD,EACfA,IAAU,GACbf,EAAmB,SAAW,GAC9BE,EAA0B,QAASc,GAAS,CAC3CA,EAAK,UAAU,IAAI,QAAQ,CAC5B,CAAC,GACSD,EAAQ,IAClBf,EAAmB,SAAW,GAC9BE,EAA0B,QAASc,GAAS,CAC3CA,EAAK,UAAU,OAAO,QAAQ,CAC/B,CAAC,EAEH,CAAC,EACMD,CACR,CAEA,SAASE,GAAwC,CAC3Cd,GAILA,EAAiB,QAASa,GAAS,CAClC,IAAIE,EAAc,EACdC,EAASH,EAAK,WACdI,EAAUD,EAAO,cAAc,6BAA6B,EAC5DE,EAAmBF,EAAO,cAAc,uCAAuC,EAChEH,EAAK,iBAAiB,oDAAoD,EAChF,QAASM,GAAO,CACxBA,EAAG,UAAU,SAAS,SAAS,GAClCJ,GAEF,CAAC,EACDE,EAAQ,YAAcF,EACtBA,EAAc,EAAIG,EAAiB,UAAU,OAAO,QAAQ,EAAIA,EAAiB,UAAU,IAAI,QAAQ,CACxG,CAAC,CAEF,CAEA,SAASE,GAAyB,CACjC,OAAA3B,EAAM,UAAU,IAAI,QAAQ,EAC5BH,EAA2B,UAAU,IAAI,iBAAiB,EAC1DD,EAAO,UAAU,IAAI,aAAa,EAClCa,EAAU,UAAU,IAAI,cAAc,EAC9BC,EAAwB,EACjC,CAEA,SAASkB,GAA0B,CAClC,OAAA5B,EAAM,UAAU,OAAO,QAAQ,EAC/BH,EAA2B,UAAU,OAAO,iBAAiB,EAC7DD,EAAO,UAAU,OAAO,aAAa,EACrCa,EAAU,UAAU,OAAO,cAAc,EACjCC,EAAwB,EACjC,CAIA,SAASmB,GAAiD,CACzD,IAAIC,EAAsB,SAAS,iBAAiB,uBAAuB,EACvEA,GACHA,EAAoB,QAASV,GAAS,CACrCA,EAAK,iBAAiB,QAAS,IAAM,CACpC,IAAIG,EAASH,EAAK,WACdL,EAAOQ,EAAO,aAAa,WAAW,EAE1C,SAAS,cAAc,iCAAmCR,EAAO,IAAI,EAAE,MAAM,EAC7EQ,EAAO,OAAO,CACf,CAAC,CACF,CAAC,CAEH,CAGA,IAAMQ,EAAM,OAAO,WAAW,mBAAmB,EAE7CA,EAAI,QAEP9B,EAAsB,QAASmB,GAAS,CACvCA,EAAK,iBAAiB,QAAS,IAAM,CACpCpB,EAAM,UAAU,OAAO,YAAY,CACpC,CAAC,CACF,CAAC,EAIDC,EAAsB,QAASmB,GAAS,CACvCA,EAAK,iBAAiB,QAAS,IAAM,CACpCA,EAAK,UAAU,OAAO,UAAU,CACjC,CAAC,CACF,CAAC,EAQEtB,GACHA,EAAc,iBACb,QACA,IAAM,CACLY,EAAwBkB,EAAwB,EAAID,EAAuB,CAC5E,EACA,EACD,EAGG5B,GACHA,EAAmB,iBAClB,QACA,IAAM,CACDW,GACHkB,EAAwB,CAE1B,EACA,EACD,EAGGvB,GACHA,EAAmB,iBAClB,QACA,IAAM,CACDK,GACHkB,EAAwB,CAE1B,EACA,EACD,EAGGxB,GACHA,EAAmB,iBAAiB,QAAS,IAAM,CACxC,OAAO,IACb,MAAM,EACO,SAAS,iBAAiB,gCAAgC,EAChE,QAASsB,GAAO,CAC1BA,EAAG,OAAO,CACX,CAAC,EACDL,EAAsC,EACtCH,EAAyB,CAE1B,CAAC,EAGF,SAAS,iBAAiB,QAAS,SAAUc,EAAO,CAC/C,CAAC,SAAS,uBAAuB,gBAAgB,EAAE,OAAS,IAC3CnC,EAA2B,SAASmC,EAAM,MAAM,GAK/DhC,EAAM,UAAU,SAAS,YAAY,GACxC,SAAS,cAAc,gCAAgC,EAAE,MAAM,EAInE,CAAC,GAIA,SAAUiC,EAAG,CAET,SAAS,cAAc,gCAAgC,GAC1D,SAAS,iBAAiB,gCAAgC,EAAE,QAASnB,GAAU,CAC9EA,EAAM,OAAO,CACd,CAAC,EAGFmB,EAAE,QAAQ,EAAE,GAAG,iBAAkB,UAAY,CAC5C,IAAMC,EAAgB,SAAS,iBAAiB,oDAAoD,EAGpG,SAAS,iBAAiB,gCAAgC,EAAE,QAASpB,GAAU,CAC9EA,EAAM,OAAO,CACd,CAAC,EAGDoB,EAAc,QAASd,GAAS,CAC/B,IAAIe,EAAaf,EAAK,cAAc,wBAAwB,EAAE,YAC1DL,EAAOK,EAAK,aAAa,YAAY,EAErCA,EAAK,UAAU,SAAS,SAAS,IAC/B,SAAS,cAAc,6CAA+CL,EAAO,IAAI,GACrFJ,EAAiBT,EAAqBC,EAAiBgC,EAAYpB,CAAI,EAG1E,CAAC,EAEDc,EAA+C,EAC/CR,EAAsC,EACtCH,EAAyB,CAC1B,CAAC,CACF,GAAG,MAAM", "names": ["bodyEl", "gridFiltersParentContainer", "mobileTrigger", "mobileFiltersClose", "panel", "nestedMenuListTrigger", "filterLabelTemplate", "filterLabelList", "clearFiltersButton", "applyFiltersButton", "gridFiltersCountContainer", "gridFilterGroups", "gridFiltersCount", "navTopBar", "mobileContainerOpened", "cloneFilterLabel", "template", "list", "label", "name", "clonedLabel", "span", "updateActiveFiltersCount", "count", "item", "updateActiveFiltersCountWithinSection", "filterCount", "parent", "counter", "counterContainer", "el", "openMobileFiltersPanel", "closeMobileFiltersPanel", "setListenerToRemoveActiveFilterAndUncheckMatch", "removeFilterButtons", "mql", "event", "$", "allCheckboxes", "filterText"] }