From f478de537ea2c17990540f271670d25a2d55569e Mon Sep 17 00:00:00 2001 From: mkelvers Date: Tue, 16 Jun 2026 17:25:13 +0200 Subject: [PATCH] fix: sync sfw parameter on htmx config requests --- static/htmx.ts | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/static/htmx.ts b/static/htmx.ts index 9214a30..4fe7b18 100644 --- a/static/htmx.ts +++ b/static/htmx.ts @@ -2,7 +2,18 @@ export {}; import { onReady } from "./utils"; -type ToastFn = (opts: { message: string; duration?: number }) => void; +type ToastFn = (opts: { + message: string; + duration?: number; + variant?: "default" | "destructive"; +}) => void; + +type HtmxParameters = Record; + +type HtmxConfigRequestDetail = { + elt?: Element; + parameters?: HtmxParameters; +}; const getToast = (): ToastFn | null => { const anyWindow = window as unknown as { showToast?: ToastFn }; @@ -35,7 +46,22 @@ const getTriggerFromHtmxEvent = (event: Event): Element | null => { return detail.detail?.elt ?? null; }; +const syncSFWRequestParameter = (event: Event): void => { + const detail = (event as CustomEvent).detail; + if (!detail.parameters) return; + + const form = detail.elt instanceof HTMLFormElement ? detail.elt : detail.elt?.closest("form"); + if (!(form instanceof HTMLFormElement)) return; + + const checkbox = form.querySelector("[data-sfw-checkbox]"); + if (!checkbox) return; + + detail.parameters.sfw = String(checkbox.checked); +}; + onReady(() => { + document.addEventListener("htmx:configRequest", syncSFWRequestParameter); + document.addEventListener("htmx:beforeRequest", (event) => { setBusy(getTriggerFromHtmxEvent(event), true); });