From 09e0b6e49b5a723e997ef18db811428524a24127 Mon Sep 17 00:00:00 2001 From: Ally Founder Date: Sat, 15 Aug 2026 13:52:13 -0400 Subject: [PATCH] next-site: fix admin panel crashing on load (ReferenceError: INPUT_STYLE) channelRows() referenced INPUT_STYLE expecting server-side substitution like fieldRow() does, but never actually got it - it shipped as a literal \${INPUT_STYLE} in the browser script, and nothing declared that name client-side. Since channelRows() always renders at least one row, this threw immediately on every plugin card, which crashed renderPlugins() (plugins list never appeared) and crashed the post-save init() refresh too (edits looked like they weren't taking effect). Now declares INPUT_STYLE once as a real client-side const instead of the fragile double-escape trick, and init() surfaces failures visibly instead of leaving the panel silently blank. --- worker/src/pages/admin.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/worker/src/pages/admin.ts b/worker/src/pages/admin.ts index 01aa496..6d7eef9 100644 --- a/worker/src/pages/admin.ts +++ b/worker/src/pages/admin.ts @@ -18,6 +18,7 @@ export function renderAdminPage(): string { const gate = document.getElementById('gate') const panel = document.getElementById('panel') let token = '' + const INPUT_STYLE = ${JSON.stringify(INPUT_STYLE)} const TEXT_FIELDS = [ ['name', 'Name'], ['description', 'Description'], ['tagline', 'Tagline'], @@ -33,7 +34,7 @@ export function renderAdminPage(): string { return \`
\${label}
- <\${tag} data-id="\${id}" data-field="\${key}" style="\${'${INPUT_STYLE}'}"\${valueAttr}>\${inner} + <\${tag} data-id="\${id}" data-field="\${key}" style="\${INPUT_STYLE}"\${valueAttr}>\${inner}
\` } @@ -163,10 +164,15 @@ export function renderAdminPage(): string { } async function init() { - const state = await loadState() - panel.innerHTML = '
' - renderSite(state) - renderPlugins(state) + try { + const state = await loadState() + if (state.error) throw new Error(state.error) + panel.innerHTML = '
' + renderSite(state) + renderPlugins(state) + } catch (e) { + panel.innerHTML = \`
Failed to load: \${e.message ?? e}
\` + } } document.getElementById('unlock').addEventListener('click', () => {