Clean up server detail page: remove debug scaffolding, tighten hero
Now that the pipeline works end-to-end, the "RCON reply" panel with its parsed-value grid and hex dump was pure debug scaffolding that ran on every page load — it duplicated every field the hero already surfaces and shoved a 13-line hex block into the fold. Deleted the whole section; the on-demand raw dump lives inside the RCON diagnostic panel (which still only renders when health isn't online, so it stays out of the way on healthy servers). Hero metadata compressed: status and last-seen pairs only render when health isn't online, since the pulsing dot conveys "healthy + fresh" better than a redundant text label. Mode pair hides when the gametype isn't reported (Plutonium T5 doesn't include it in the status header). Config panel hides the "held by beta" row when nothing is held — matches how the deployment history section already only renders when there's history. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -223,9 +223,13 @@
|
||||
</div>
|
||||
<div class="hero-meta">
|
||||
<span class="pair"><span class="k">map</span> <span class="v">{effectiveMap ?? '—'}</span></span>
|
||||
<span class="pair"><span class="k">mode</span> <span class="v">{gametypeLabel(effectiveGametype) || '—'}</span></span>
|
||||
{#if gametypeLabel(effectiveGametype)}
|
||||
<span class="pair"><span class="k">mode</span> <span class="v">{gametypeLabel(effectiveGametype)}</span></span>
|
||||
{/if}
|
||||
{#if effectiveHealth !== 'online'}
|
||||
<span class="pair"><span class="k">status</span> <span class="v health-{effectiveHealth}">{effectiveHealth}</span></span>
|
||||
<span class="pair"><span class="k">last seen</span> <span class="v">{ago(effectiveSeen)}</span></span>
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -385,53 +389,6 @@
|
||||
</section>
|
||||
{/if}
|
||||
|
||||
{#if effectiveSnippet || effectiveEndpoint}
|
||||
<section class="panel">
|
||||
<div class="rcon-hdr">
|
||||
<h2>RCON reply</h2>
|
||||
{#if effectiveEndpoint}
|
||||
<button class="probe-btn" onclick={probeRcon} disabled={probingRcon}>
|
||||
{probingRcon ? 'probing rcon…' : 'probe rcon'}
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="parsed-grid">
|
||||
<div class="stat">
|
||||
<div class="k">endpoint</div>
|
||||
<div class="v mono">{effectiveEndpoint ? `${effectiveEndpoint.host}:${effectiveEndpoint.port}` : '—'}</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="k">players</div>
|
||||
<div class="v mono">{effectivePlayers ?? '—'}</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="k">map</div>
|
||||
<div class="v mono">{effectiveMap ?? '—'}</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="k">gametype</div>
|
||||
<div class="v mono">{effectiveGametype ?? '—'}</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="k">roster parsed</div>
|
||||
<div class="v mono">{effectiveRoster?.length ?? 0} row{(effectiveRoster?.length ?? 0) === 1 ? '' : 's'}</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="k">last seen</div>
|
||||
<div class="v mono">{ago(effectiveSeen)}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{#if effectiveSnippet}
|
||||
<div class="raw-hdr">raw reply ({effectiveSnippet.split('\n').length} lines)</div>
|
||||
<pre class="snippet">{effectiveSnippet}</pre>
|
||||
{:else}
|
||||
<div class="raw-hdr dim">no reply captured yet — click <strong>probe rcon</strong> above</div>
|
||||
{/if}
|
||||
</section>
|
||||
{/if}
|
||||
|
||||
<section class="panel">
|
||||
<h2>Roster</h2>
|
||||
<PlayerRoster roster={effectiveRoster} health={effectiveHealth} />
|
||||
@@ -463,10 +420,12 @@
|
||||
<div class="k">game_port</div>
|
||||
<div class="v mono">{server.game_port ?? '(unresolved)'}</div>
|
||||
</div>
|
||||
{#if server.held.length > 0}
|
||||
<div class="stat">
|
||||
<div class="k">held by beta</div>
|
||||
<div class="v mono">{server.held.length === 0 ? '—' : server.held.map((h) => h.target).join(', ')}</div>
|
||||
<div class="v mono">{server.held.map((h) => h.target).join(', ')}</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -827,38 +786,6 @@
|
||||
border-radius: var(--r-sm);
|
||||
}
|
||||
|
||||
.rcon-hdr {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.rcon-hdr h2 { margin: 0; }
|
||||
.parsed-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
|
||||
gap: 8px;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
.raw-hdr {
|
||||
font-family: var(--font-body);
|
||||
font-size: 10px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1.2px;
|
||||
color: var(--ink-500);
|
||||
margin: 0 0 6px;
|
||||
}
|
||||
.raw-hdr.dim {
|
||||
padding: 12px 14px;
|
||||
text-transform: none;
|
||||
letter-spacing: 0;
|
||||
font-size: 12px;
|
||||
background: var(--cherry-875);
|
||||
border: 1px dashed var(--cherry-700);
|
||||
border-radius: var(--r-sm);
|
||||
}
|
||||
.raw-hdr strong { color: var(--cream); }
|
||||
|
||||
.snippet-details {
|
||||
margin-top: 10px;
|
||||
font-family: var(--font-mono);
|
||||
|
||||
Reference in New Issue
Block a user