99 lines
4.3 KiB
Markdown
99 lines
4.3 KiB
Markdown
# Code Request — Version UI in Server Matrix Body
|
|
|
|
**Filed by:** Chronicler #88
|
|
**Date:** 2026-04-14
|
|
**Priority:** Medium
|
|
**Context:** Pre-launch, defer until stable
|
|
|
|
---
|
|
|
|
## Background
|
|
|
|
Chronicler #88 added modpack version tracking infrastructure today:
|
|
- `current_version` column on `server_config`
|
|
- `server_version_history` table (version, who, when)
|
|
- `POST /admin/servers/:id/set-version` route
|
|
- `GET /admin/servers/:id/version-history` route
|
|
- Helper JS functions `saveVersion()`, `toggleVersionForm()`, `hideVersionForm()` in `servers/index.ejs`
|
|
|
|
The UI addition to `_matrix_body.ejs` kept breaking EJS due to single quotes
|
|
inside ternary expressions inside HTML attributes. The file was reverted to
|
|
clean state. This task is to add the version UI properly.
|
|
|
|
---
|
|
|
|
## What To Add
|
|
|
|
At the bottom of each server card in `_matrix_body.ejs` (there are TWO loops —
|
|
TX1 and NC1), add a version display section BEFORE the closing `</div>`.
|
|
|
|
The tricky part: avoid single quotes inside `<%= %>` tags that are inside
|
|
HTML attributes. Use a local variable assignment instead:
|
|
|
|
```ejs
|
|
<% var currentVersion = config && config.current_version ? config.current_version : null; %>
|
|
<div class="px-4 pb-4" style="border-top:1px solid #333;padding-top:10px;margin-top:4px;">
|
|
<div style="font-size:10px;color:#666;text-transform:uppercase;letter-spacing:0.1em;margin-bottom:6px;">📦 Installed Version</div>
|
|
<div style="display:flex;gap:6px;align-items:center;" id="version-display-<%= server.identifier %>">
|
|
<span style="font-size:13px;font-weight:600;color:<%= currentVersion ? '#4ade80' : '#555' %>;" id="version-text-<%= server.identifier %>">
|
|
<%= currentVersion || 'Not set' %>
|
|
</span>
|
|
<button id="version-edit-btn-<%= server.identifier %>"
|
|
onclick="toggleVersionForm('<%= server.identifier %>')"
|
|
style="font-size:10px;background:#333;border:1px solid #555;color:#aaa;padding:2px 8px;border-radius:4px;cursor:pointer;">
|
|
✏️ Edit
|
|
</button>
|
|
</div>
|
|
<div id="version-form-<%= server.identifier %>" style="display:none;margin-top:6px;">
|
|
<div style="display:flex;gap:6px;align-items:center;">
|
|
<input type="text" id="version-input-<%= server.identifier %>"
|
|
placeholder="e.g. 1.4.2"
|
|
style="font-size:12px;background:#1a1a1a;border:1px solid #555;color:#e0e0e0;padding:4px 8px;border-radius:4px;width:140px;" />
|
|
<button onclick="saveVersion('<%= server.identifier %>')"
|
|
style="font-size:11px;background:#2563eb;color:#fff;border:none;padding:4px 10px;border-radius:4px;cursor:pointer;">Save</button>
|
|
<button onclick="hideVersionForm('<%= server.identifier %>')"
|
|
style="font-size:11px;background:#333;border:1px solid #555;color:#aaa;padding:4px 8px;border-radius:4px;cursor:pointer;">Cancel</button>
|
|
</div>
|
|
<div id="version-result-<%= server.identifier %>" style="margin-top:4px;font-size:11px;"></div>
|
|
<div style="margin-top:6px;">
|
|
<button hx-get="/admin/servers/<%= server.identifier %>/version-history"
|
|
hx-target="#version-history-<%= server.identifier %>"
|
|
hx-swap="innerHTML"
|
|
style="font-size:10px;background:transparent;border:none;color:#555;cursor:pointer;padding:0;text-decoration:underline;">View history</button>
|
|
</div>
|
|
<div id="version-history-<%= server.identifier %>" style="margin-top:4px;background:#1a1a1a;border-radius:4px;padding:4px;"></div>
|
|
</div>
|
|
</div>
|
|
```
|
|
|
|
---
|
|
|
|
## Key Rule
|
|
|
|
**Never put single quotes inside `<%= %>` tags that are inside HTML attribute values.**
|
|
Use `<% var x = ...; %>` to assign first, then `<%= x %>` in the attribute.
|
|
|
|
---
|
|
|
|
## Validation
|
|
|
|
After adding, run this on the Dev Panel to verify EJS compiles:
|
|
```bash
|
|
cd /opt/mod-builds/firefrost-services/services/arbiter-3.0
|
|
node -e "const ejs = require('ejs'); const fs = require('fs'); try { ejs.compile(fs.readFileSync('src/views/admin/servers/_matrix_body.ejs', 'utf8')); console.log('EJS OK'); } catch(e) { console.log('ERROR:', e.message); }"
|
|
```
|
|
|
|
Must print `EJS OK` before committing.
|
|
|
|
---
|
|
|
|
## Files To Edit
|
|
|
|
- `services/arbiter-3.0/src/views/admin/servers/_matrix_body.ejs`
|
|
|
|
Do NOT touch `_server_card.ejs` or `index.ejs` — those are fine.
|
|
|
|
---
|
|
|
|
**Fire + Frost + Foundation** 💙🔥❄️
|