From ac02fb9b71daad28dbc783adfd69dbddad2eaa63 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Sat, 6 Jun 2026 16:54:19 +0200 Subject: [PATCH] refactor: simplify dedupe module --- static/dedupe.ts | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/static/dedupe.ts b/static/dedupe.ts index 9f0f230..0f76112 100644 --- a/static/dedupe.ts +++ b/static/dedupe.ts @@ -1,3 +1,5 @@ +import { onHtmxLoad, onReady } from "./utils"; + const dedupeWithin = (root: ParentNode): void => { const seen = new Set(); const elements = root.querySelectorAll(":scope > [data-id]"); @@ -17,9 +19,9 @@ const dedupeWithin = (root: ParentNode): void => { }); }; -const dedupe = (): void => { +const dedupe = (root: ParentNode = document): void => { const containers = new Set(); - const elements = document.querySelectorAll("[data-id]"); + const elements = root.querySelectorAll("[data-id]"); elements.forEach((item) => { if (item.parentElement) { @@ -58,15 +60,6 @@ const dedupeSwapTarget = (target: EventTarget | null): void => { }); }; -if (document.readyState === "loading") { - document.addEventListener("DOMContentLoaded", dedupe); -} else { - dedupe(); -} - -window.addEventListener("load", dedupe); - -document.addEventListener("htmx:afterSwap", (event: Event): void => { - const customEvent = event as CustomEvent<{ target?: EventTarget | null }>; - dedupeSwapTarget(customEvent.detail?.target ?? event.target); -}); +onReady(() => dedupe()); +window.addEventListener("load", () => dedupe()); +onHtmxLoad((root) => dedupeSwapTarget(root));