{"version":3,"file":"posts/filters.js","mappings":"AAAA,MACE,MAAMA,EAAeC,SAASC,eAAe,iBACvCC,EAAcF,SAASC,eAAe,gBACtCE,EAAeH,SAASC,eAAe,iBACvCG,EAAcJ,SAASC,eAAe,gBACtCI,EAAcL,SAASC,eAAe,gBACtCK,EAAuBN,SAASC,eAAe,gBAC/CM,EAAqBP,SAASC,eAAe,cAC7CO,EAAcR,SAASC,eAAe,gBAE5C,IAAKF,IAAiBG,IAAgBI,EAAsB,OAE5D,IAAIG,EAAiB,KACjBC,EAAe,KACfC,EAAwB,GACxBC,EAAiB,GAErB,MAAMC,EAAmBC,IAClBT,IACLA,EAAYU,UAAYD,EAAO,EAG3BE,EAAeC,IACnBA,EAAUC,iBAAiB,cAAcC,SAASC,IAChDA,EAAGC,UAAUC,OAAO,aACpB,MAAMC,EAAOH,EAAGI,QAAQC,WACpBF,GAAMH,EAAGC,UAAUC,OAAOC,EAAK,GACnC,EAGEG,EAAcN,IAClBA,EAAGC,UAAUM,IAAI,aACjB,MAAMJ,EAAOH,EAAGI,QAAQC,WACpBF,GAAMH,EAAGC,UAAUM,IAAIJ,EAAK,EAgClCjB,EAAqBsB,iBAAiB,SAAUC,IAC9C,MAAMC,EAAOD,EAAEE,OAAOC,QAAQ,uBACzBF,IACLd,EAAYV,GACZU,EAAYT,GACZmB,EAAWI,GACXrB,EAAiBqB,EAAKN,QAAQS,OAC9BvB,EAAe,KACfC,EAAwBmB,EAAKN,QAAQU,iBAAmB,GACxDtB,EAAiBkB,EAAKN,QAAQC,YAAc,GAC5CZ,GAAgB,GArBEsB,OAAOC,IACzB,IACE,MAAMC,QAAiBC,MAAM,YAAYC,mBAAmBH,aApBvCI,QAqBAH,EAASI,OApBhClC,EAAmBmC,UAAY,GAC1BF,EAAOG,QAIZH,EAAOrB,SAASyB,IACd,MAAMC,EAAM7C,SAAS8C,cAAc,UACnCD,EAAIE,KAAO,SACXF,EAAIG,UAAY,sBAAsBrC,IAAwBsC,OAC9DJ,EAAIrB,QAAQoB,KAAOA,EAAKM,KACxBL,EAAIrB,QAAQC,WAAab,EACzBiC,EAAIM,YAAcP,EAAKM,KACvB3C,EAAmB6C,YAAYP,EAAI,IAErCrC,EAAYa,UAAUC,OAAO,WAZ3Bd,EAAYa,UAAUM,IAAI,SAoB5B,CAAE,MAAO0B,GACPC,QAAQD,MAAM,yBAA0BA,GACxC7C,EAAYa,UAAUM,IAAI,SAC5B,CA1BsB,IAACa,CA0BvB,EAcAe,CAAY9C,GAAe,IAG7BF,EAAmBqB,iBAAiB,SAAUC,IAC5C,MAAMC,EAAOD,EAAEE,OAAOC,QAAQ,qBACzBF,IACLd,EAAYT,GACZmB,EAAWI,GACXpB,EAAeoB,EAAKN,QAAQoB,KAC5B/B,GAAgB,GAAK,IAGvBR,EAAYuB,iBAAiB,SAAS,KAChClB,EACF8C,OAAOC,SAASC,KAAO,WAAWhD,EAAaiD,gBACtClD,IACT+C,OAAOC,SAASC,KAAO,YAAYjD,EAAekD,gBACpD,IAGF,MACMC,EAAY,IAAM1D,EAAYmB,UAAUM,IAAI,UAElD5B,EAAa6B,iBAAiB,SAHZ,IAAM1B,EAAYmB,UAAUC,OAAO,YAIrDpB,EAAY0B,iBAAiB,SAAUC,IACjCA,EAAEE,SAAW7B,GAAa0D,GAAW,IAE3CzD,EAAayB,iBAAiB,QAASgC,GACnCxD,GAAaA,EAAYwB,iBAAiB,QAASgC,GAEvD5D,SAAS4B,iBAAiB,WAAYC,IACtB,WAAVA,EAAEgC,KAAqB3D,EAAYmB,UAAUyC,SAAS,WAAWF,GAAW,GAEnF,EA7GD","sources":["webpack://trace_taiwan/./app/javascript/packs/posts/filters.js"],"sourcesContent":["(() => {\n const filterButton = document.getElementById('filter-button');\n const filterModal = document.getElementById('filter-modal');\n const cancelButton = document.getElementById('cancel-filter');\n const closeButton = document.getElementById('close-filter');\n const applyButton = document.getElementById('apply-filter');\n const regionPillsContainer = document.getElementById('region-pills');\n const cityPillsContainer = document.getElementById('city-pills');\n const citySection = document.getElementById('city-section');\n\n if (!filterButton || !filterModal || !regionPillsContainer) return;\n\n let selectedRegion = null;\n let selectedCity = null;\n let activeCityPillClasses = '';\n let activeCityRing = '';\n\n const setApplyEnabled = (enabled) => {\n if (!applyButton) return;\n applyButton.disabled = !enabled;\n };\n\n const clearActive = (container) => {\n container.querySelectorAll('.is-active').forEach((el) => {\n el.classList.remove('is-active');\n const ring = el.dataset.activeRing;\n if (ring) el.classList.remove(ring);\n });\n };\n\n const markActive = (el) => {\n el.classList.add('is-active');\n const ring = el.dataset.activeRing;\n if (ring) el.classList.add(ring);\n };\n\n const renderCityPills = (cities) => {\n cityPillsContainer.innerHTML = '';\n if (!cities.length) {\n citySection.classList.add('hidden');\n return;\n }\n cities.forEach((city) => {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = `filter-region-pill ${activeCityPillClasses}`.trim();\n btn.dataset.city = city.name;\n btn.dataset.activeRing = activeCityRing;\n btn.textContent = city.name;\n cityPillsContainer.appendChild(btn);\n });\n citySection.classList.remove('hidden');\n };\n\n const fetchCities = async (regionName) => {\n try {\n const response = await fetch(`/regions/${encodeURIComponent(regionName)}/cities`);\n const cities = await response.json();\n renderCityPills(cities);\n } catch (error) {\n console.error('Error fetching cities:', error);\n citySection.classList.add('hidden');\n }\n };\n\n regionPillsContainer.addEventListener('click', (e) => {\n const pill = e.target.closest('button[data-region]');\n if (!pill) return;\n clearActive(regionPillsContainer);\n clearActive(cityPillsContainer);\n markActive(pill);\n selectedRegion = pill.dataset.region;\n selectedCity = null;\n activeCityPillClasses = pill.dataset.cityPillClasses || '';\n activeCityRing = pill.dataset.activeRing || '';\n setApplyEnabled(true);\n fetchCities(selectedRegion);\n });\n\n cityPillsContainer.addEventListener('click', (e) => {\n const pill = e.target.closest('button[data-city]');\n if (!pill) return;\n clearActive(cityPillsContainer);\n markActive(pill);\n selectedCity = pill.dataset.city;\n setApplyEnabled(true);\n });\n\n applyButton.addEventListener('click', () => {\n if (selectedCity) {\n window.location.href = `/cities/${selectedCity.toLowerCase()}`;\n } else if (selectedRegion) {\n window.location.href = `/regions/${selectedRegion.toLowerCase()}`;\n }\n });\n\n const showModal = () => filterModal.classList.remove('hidden');\n const hideModal = () => filterModal.classList.add('hidden');\n\n filterButton.addEventListener('click', showModal);\n filterModal.addEventListener('click', (e) => {\n if (e.target === filterModal) hideModal();\n });\n cancelButton.addEventListener('click', hideModal);\n if (closeButton) closeButton.addEventListener('click', hideModal);\n\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && !filterModal.classList.contains('hidden')) hideModal();\n });\n})();\n"],"names":["filterButton","document","getElementById","filterModal","cancelButton","closeButton","applyButton","regionPillsContainer","cityPillsContainer","citySection","selectedRegion","selectedCity","activeCityPillClasses","activeCityRing","setApplyEnabled","enabled","disabled","clearActive","container","querySelectorAll","forEach","el","classList","remove","ring","dataset","activeRing","markActive","add","addEventListener","e","pill","target","closest","region","cityPillClasses","async","regionName","response","fetch","encodeURIComponent","cities","json","innerHTML","length","city","btn","createElement","type","className","trim","name","textContent","appendChild","error","console","fetchCities","window","location","href","toLowerCase","hideModal","key","contains"],"ignoreList":[],"sourceRoot":""}