From 3de82e3b9b89feb7e92c6865e0471a40eb84cfd0 Mon Sep 17 00:00:00 2001 From: Mike Teehan Date: Tue, 28 Jul 2026 13:50:22 +0000 Subject: [PATCH] Remove query-string cache-busting from static assets Drop ?v=N version pins from all JS imports and HTML / - + diff --git a/webui/static/pages/backends.js b/webui/static/pages/backends.js index 63e571a..2245646 100644 --- a/webui/static/pages/backends.js +++ b/webui/static/pages/backends.js @@ -1,6 +1,6 @@ -import { h, html, PageHeader, Badge, Empty, Table, renderGuard, renderGuardMulti, ConfirmDelete, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, ActionGroup } from '/static/hoover/index.js?v=10'; -import { openModal, closeModal, isModalProcessing, setModalProcessing, refreshModals } from '/static/hoover/components/modal.js?v=9'; -import { _deleting } from '/static/hoover/components/data.js?v=9'; +import { h, html, PageHeader, Badge, Empty, Table, renderGuard, renderGuardMulti, ConfirmDelete, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, ActionGroup } from '/static/hoover/index.js'; +import { openModal, closeModal, isModalProcessing, setModalProcessing, refreshModals } from '/static/hoover/components/modal.js'; +import { _deleting } from '/static/hoover/components/data.js'; // --------------------------------------------------------------------------- // Build a datalist element from DHCP leases diff --git a/webui/static/pages/certs.js b/webui/static/pages/certs.js index e37d0de..de6e408 100644 --- a/webui/static/pages/certs.js +++ b/webui/static/pages/certs.js @@ -1,5 +1,5 @@ -import { html, PageHeader, Empty, Table, renderGuard, esc, enc, $val, apiFetch, toast, openModal, closeModal, formModal, modalVNodes, refreshModals, definePage, getModel, modelFetch, ActionCell, certStatusBadge, poll, formAction } from '/static/hoover/index.js?v=10'; -import { isModalProcessing, setModalProcessing } from '/static/hoover/components/modal.js?v=9'; +import { html, PageHeader, Empty, Table, renderGuard, esc, enc, $val, apiFetch, toast, openModal, closeModal, formModal, modalVNodes, refreshModals, definePage, getModel, modelFetch, ActionCell, certStatusBadge, poll, formAction } from '/static/hoover/index.js'; +import { isModalProcessing, setModalProcessing } from '/static/hoover/components/modal.js'; function _accountCard(account) { if (!account || !account.registered) { diff --git a/webui/static/pages/dashboard.js b/webui/static/pages/dashboard.js index 2ae9fad..9fd0919 100644 --- a/webui/static/pages/dashboard.js +++ b/webui/static/pages/dashboard.js @@ -1,4 +1,4 @@ -import { html, PageHeader, definePage, getModel, renderGuardMulti, ServiceStatus, StatCard, Table, Badge, ActionButton } from '/static/hoover/index.js?v=11'; +import { html, PageHeader, definePage, getModel, renderGuardMulti, ServiceStatus, StatCard, Table, Badge, ActionButton } from '/static/hoover/index.js'; function fmtBytes(bytes) { if (bytes === 0) return '0 B'; diff --git a/webui/static/pages/dhcp.js b/webui/static/pages/dhcp.js index a6e0c23..0270452 100644 --- a/webui/static/pages/dhcp.js +++ b/webui/static/pages/dhcp.js @@ -1,4 +1,4 @@ -import { html, h, PageHeader, ConfirmDelete, Tabs, Table, ServiceStatus, renderGuardMulti, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, ActionGroup, QuickModal } from '/static/hoover/index.js?v=10'; +import { html, h, PageHeader, ConfirmDelete, Tabs, Table, ServiceStatus, renderGuardMulti, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, ActionGroup, QuickModal } from '/static/hoover/index.js'; function makeAddRange(activeZones, interfaces) { const opts = [ diff --git a/webui/static/pages/interfaces.js b/webui/static/pages/interfaces.js index f5c1519..69eefb5 100644 --- a/webui/static/pages/interfaces.js +++ b/webui/static/pages/interfaces.js @@ -1,4 +1,4 @@ -import { html, PageHeader, Table, renderGuardMulti, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, StatusText, QuickModal, ZoneSelect } from '/static/hoover/index.js?v=10'; +import { html, PageHeader, Table, renderGuardMulti, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, StatusText, QuickModal, ZoneSelect } from '/static/hoover/index.js'; async function changeZone(name, zone, state) { const r = await apiFetch('/api/firewall/zones/' + enc(zone) + '/interfaces', { diff --git a/webui/static/pages/login.js b/webui/static/pages/login.js index 07b2d17..6ca3b9c 100644 --- a/webui/static/pages/login.js +++ b/webui/static/pages/login.js @@ -16,7 +16,7 @@ import { handleLoginSuccess, webauthnSupported, startAuthentication, -} from '/static/hoover/index.js?v=14'; +} from '/static/hoover/index.js'; function LoginPage() { const hasWebAuthn = webauthnSupported(); diff --git a/webui/static/pages/logs.js b/webui/static/pages/logs.js index 96e97d4..a8b4210 100644 --- a/webui/static/pages/logs.js +++ b/webui/static/pages/logs.js @@ -1,4 +1,4 @@ -import { html, PageHeader, Tabs, esc, definePage, renderGuard, modelFetch, getModel } from '/static/hoover/index.js?v=10'; +import { html, PageHeader, Tabs, esc, definePage, renderGuard, modelFetch, getModel } from '/static/hoover/index.js'; const logTabs = [ { key: 'journal', label: 'Journal' }, diff --git a/webui/static/pages/nat.js b/webui/static/pages/nat.js index d4b66f0..709799b 100644 --- a/webui/static/pages/nat.js +++ b/webui/static/pages/nat.js @@ -1,4 +1,4 @@ -import { html, PageHeader, Badge, StatusDot, Card, Table, renderGuard, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, DataTableSection, SectionTitle, ActionGroup, QuickModal, ConfirmDelete } from '/static/hoover/index.js?v=10'; +import { html, PageHeader, Badge, StatusDot, Card, Table, renderGuard, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, DataTableSection, SectionTitle, ActionGroup, QuickModal, ConfirmDelete } from '/static/hoover/index.js'; const addFwd = QuickModal({ title: 'Add Port Forward', diff --git a/webui/static/pages/notfound.js b/webui/static/pages/notfound.js index 3846bb6..1b6504b 100644 --- a/webui/static/pages/notfound.js +++ b/webui/static/pages/notfound.js @@ -1,4 +1,4 @@ -import { html, PageHeader, definePage } from '/static/hoover/index.js?v=10'; +import { html, PageHeader, definePage } from '/static/hoover/index.js'; export default definePage({ init() { diff --git a/webui/static/pages/passkeys.js b/webui/static/pages/passkeys.js index f6d86c0..2d5d1ab 100644 --- a/webui/static/pages/passkeys.js +++ b/webui/static/pages/passkeys.js @@ -25,7 +25,7 @@ import { webauthnSupported, isModalProcessing, setModalProcessing, -} from '/static/hoover/index.js?v=14'; +} from '/static/hoover/index.js'; const state = reactive({ credentials: [], loading: true, refreshing: false, error: null }); diff --git a/webui/static/pages/proxy.js b/webui/static/pages/proxy.js index 942e94e..5bdc374 100644 --- a/webui/static/pages/proxy.js +++ b/webui/static/pages/proxy.js @@ -1,6 +1,6 @@ -import { html, PageHeader, Badge, Empty, Table, renderGuardMulti, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, ActionCell, ConfirmDelete, certStatusBadge, ActionGroup, formAction } from '/static/hoover/index.js?v=10'; -import { openModal, formModal, closeModal } from '/static/hoover/components/modal.js?v=9'; -import { openBackendModal } from '/static/pages/backends.js?v=11'; +import { html, PageHeader, Badge, Empty, Table, renderGuardMulti, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, ActionButton, ActionCell, ConfirmDelete, certStatusBadge, ActionGroup, formAction } from '/static/hoover/index.js'; +import { openModal, formModal, closeModal } from '/static/hoover/components/modal.js'; +import { openBackendModal } from '/static/pages/backends.js'; function certLookup(acmeData) { const m = {}; diff --git a/webui/static/pages/rules.js b/webui/static/pages/rules.js index 8c9c15a..9914de7 100644 --- a/webui/static/pages/rules.js +++ b/webui/static/pages/rules.js @@ -1,4 +1,4 @@ -import { html, PageHeader, Empty, Card, ConfirmDelete, Table, renderGuard, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, MonoText, QuickModal } from '/static/hoover/index.js?v=10'; +import { html, PageHeader, Empty, Card, ConfirmDelete, Table, renderGuard, esc, enc, $val, apiFetch, toast, definePage, getModel, modelFetch, MonoText, QuickModal } from '/static/hoover/index.js'; const addRule = QuickModal({ title: 'Add Rich Rule', diff --git a/webui/static/pages/users.js b/webui/static/pages/users.js index ed8b1fb..665b35b 100644 --- a/webui/static/pages/users.js +++ b/webui/static/pages/users.js @@ -5,8 +5,8 @@ * Requires auth: rw permission. */ -import { h, definePage, reactive } from '/static/hoover/index.js?v=13'; -import { html, PageHeader, Table, Badge, ConfirmDelete, Empty, Card, openModal, closeModal, formModal, apiFetch, toast, esc } from '/static/hoover/index.js?v=13'; +import { h, definePage, reactive } from '/static/hoover/index.js'; +import { html, PageHeader, Table, Badge, ConfirmDelete, Empty, Card, openModal, closeModal, formModal, apiFetch, toast, esc } from '/static/hoover/index.js'; const SUBSYSTEMS = [ { key: 'firewall', label: 'Firewall' }, diff --git a/webui/static/pages/wireguard.js b/webui/static/pages/wireguard.js index 6ab09ff..087b530 100644 --- a/webui/static/pages/wireguard.js +++ b/webui/static/pages/wireguard.js @@ -1,5 +1,5 @@ /** WireGuard page — tunnel & peer management. */ -import { html, PageHeader, Badge, StatusDot, Empty, Table, ServiceStatus, renderGuard, esc, enc, $val, apiFetch, toast, openModal, closeModal, formModal, definePage, getModel, modelFetch, ActionButton, ActionCell, MonoText, ActionGroup, QuickModal, downloadBlob, formAction, ApplyConfirm, qrSVG } from '/static/hoover/index.js?v=10'; +import { html, PageHeader, Badge, StatusDot, Empty, Table, ServiceStatus, renderGuard, esc, enc, $val, apiFetch, toast, openModal, closeModal, formModal, definePage, getModel, modelFetch, ActionButton, ActionCell, MonoText, ActionGroup, QuickModal, downloadBlob, formAction, ApplyConfirm, qrSVG } from '/static/hoover/index.js'; /* ── LAN detection helper ────────────────────────────────────── */ function getLanSubnets() { diff --git a/webui/static/pages/zones.js b/webui/static/pages/zones.js index 5685acf..aeec2f1 100644 --- a/webui/static/pages/zones.js +++ b/webui/static/pages/zones.js @@ -1,4 +1,4 @@ -import { html, PageHeader, Badge, Empty, ConfirmDelete, renderGuard, enc, esc, $val, definePage, getModel, MultiSelectModal, QuickModal } from '/static/hoover/index.js?v=10'; +import { html, PageHeader, Badge, Empty, ConfirmDelete, renderGuard, enc, esc, $val, definePage, getModel, MultiSelectModal, QuickModal } from '/static/hoover/index.js'; const addZone = QuickModal({ title: 'Add Zone',