multi script beta
This commit is contained in:
@@ -28,12 +28,15 @@
|
||||
match_seen_at: string | null;
|
||||
updated_at: string;
|
||||
}
|
||||
interface Script { id: number; name: string; target_rel_path: string }
|
||||
interface Version { id: number; version: number; sha256: string; size: number }
|
||||
interface BetaScript {
|
||||
id: number;
|
||||
name: string;
|
||||
target_rel_path: string;
|
||||
version: { id: number; version: number; sha256: string } | null;
|
||||
}
|
||||
|
||||
let beta = $state<BetaRow | null>(null);
|
||||
let script = $state<Script | null>(null);
|
||||
let version = $state<Version | null>(null);
|
||||
let scripts = $state<BetaScript[]>([]);
|
||||
let servers = $state<BetaServerRow[]>([]);
|
||||
let loading = $state(true);
|
||||
let flash = $state<string | null>(null);
|
||||
@@ -46,13 +49,11 @@
|
||||
if (!res.ok) { loading = false; return; }
|
||||
const body = (await res.json()) as {
|
||||
beta: BetaRow;
|
||||
script: Script;
|
||||
version: Version;
|
||||
scripts: BetaScript[];
|
||||
servers: BetaServerRow[];
|
||||
};
|
||||
beta = body.beta;
|
||||
script = body.script;
|
||||
version = body.version;
|
||||
scripts = body.scripts;
|
||||
servers = body.servers;
|
||||
loading = false;
|
||||
}
|
||||
@@ -107,7 +108,7 @@
|
||||
|
||||
{#if loading}
|
||||
<p class="empty">loading…</p>
|
||||
{:else if !beta || !script || !version}
|
||||
{:else if !beta}
|
||||
<p class="empty">beta not found</p>
|
||||
{:else}
|
||||
<a class="back" href="/betas">← all betas</a>
|
||||
@@ -115,11 +116,24 @@
|
||||
<h1>Beta #{beta.id}</h1>
|
||||
<span class="tag state-{beta.state}">{beta.state}</span>
|
||||
</div>
|
||||
<div class="sub">
|
||||
<a href="/scripts/{script.id}">{script.name}</a>
|
||||
<span class="mono">· {script.target_rel_path}</span>
|
||||
<span class="mono">· v{version.version}</span>
|
||||
</div>
|
||||
|
||||
<section class="panel">
|
||||
<h2>Scripts · {scripts.length}</h2>
|
||||
{#if scripts.length === 0}
|
||||
<p class="empty">no scripts bundled in this beta</p>
|
||||
{:else}
|
||||
<div class="script-list">
|
||||
{#each scripts as s (s.id)}
|
||||
<div class="script-row">
|
||||
<a class="s-name" href="/scripts/{s.id}">{s.name}</a>
|
||||
<span class="s-target mono">{s.target_rel_path}</span>
|
||||
<span class="s-ver mono">v{s.version?.version ?? '?'}</span>
|
||||
<span class="s-sha mono">{s.version?.sha256.slice(0, 8) ?? ''}</span>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
</section>
|
||||
|
||||
<section class="panel">
|
||||
<h2>Options</h2>
|
||||
@@ -193,10 +207,25 @@
|
||||
.back:hover { color: var(--ink-100); }
|
||||
.head-row { display: flex; align-items: center; gap: 12px; margin: 12px 0 4px; }
|
||||
h1 { color: var(--cream); font-family: var(--font-display); font-size: var(--text-2xl); letter-spacing: 1.5px; margin: 0; }
|
||||
.sub { color: var(--ink-500); font-size: var(--text-mono); margin-bottom: 24px; display: flex; gap: 8px; align-items: baseline; }
|
||||
.sub a { color: var(--spark-500); text-decoration: none; }
|
||||
.empty { color: var(--ink-500); font-family: var(--font-mono); font-size: var(--text-mono); }
|
||||
|
||||
.script-list { display: flex; flex-direction: column; gap: 6px; }
|
||||
.script-row {
|
||||
display: grid;
|
||||
grid-template-columns: 220px 1fr 80px 100px;
|
||||
gap: 14px;
|
||||
padding: 10px 14px;
|
||||
background: var(--bg-card);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--r-sm);
|
||||
align-items: center;
|
||||
font-size: var(--text-mono);
|
||||
}
|
||||
.s-name { color: var(--spark-500); text-decoration: none; font-weight: 600; font-family: var(--font-body); }
|
||||
.s-name:hover { text-decoration: underline; }
|
||||
.s-target { color: var(--ink-300); word-break: break-all; }
|
||||
.s-ver, .s-sha { color: var(--ink-500); }
|
||||
|
||||
.panel { background: var(--bg-nav); border: 1px solid var(--border); border-radius: var(--r-md); padding: var(--pad-panel); margin-bottom: 20px; }
|
||||
h2 { margin: 0 0 14px; font-family: var(--font-body); font-size: var(--text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: 1.5px; color: var(--ink-300); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user