document.addEventListener('click', (event) => {
if (!event.target.closest('[data-theme-toggle]')) return
const dark = document.documentElement.classList.toggle('dark')
localStorage.setItem('defter-dark', String(dark))
})
function syncFacetsToggle() {
const toggle = document.querySelector('[data-facets-toggle]')
if (!toggle) return
const open = [...document.querySelectorAll('details[data-facet]')].every((f) => f.open)
toggle.textContent = open ? toggle.dataset.closeLabel : toggle.dataset.openLabel
}
document.addEventListener('click', (event) => {
if (!event.target.closest('[data-facets-toggle]')) return
const facets = [...document.querySelectorAll('details[data-facet]')]
const open = !facets.every((f) => f.open)
facets.forEach((f) => { f.open = open })
})
document.addEventListener('toggle', syncFacetsToggle, true)
let openFacets = new Map()
document.addEventListener('htmx:beforeSwap', () => {
openFacets = new Map(
[...document.querySelectorAll('details[data-facet]')].map((f) => [f.dataset.facet, f.open])
)
})
document.addEventListener('htmx:afterSwap', () => {
document.querySelectorAll('details[data-facet]').forEach((f) => {
f.open = openFacets.get(f.dataset.facet) ?? f.open
})
syncFacetsToggle()
})
document.addEventListener('click', async (event) => {
const button = event.target.closest('[data-copy]')
if (!button) return
await navigator.clipboard.writeText(button.dataset.copy)
const [copy, copied] = button.querySelectorAll('svg')
copy.classList.add('hidden')
copied.classList.remove('hidden')
setTimeout(() => {
copy.classList.remove('hidden')
copied.classList.add('hidden')
}, 2000)
})
document.addEventListener('change', (event) => {
if (!event.target.matches('[data-language]')) return
const url = new URL(window.location.href)
url.searchParams.set('lang', event.target.value)
window.location.href = url.href
})