diff options
| author | salmonik <salmonik@tuta.io> | 2026-07-29 01:03:24 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-07-29 01:03:24 +0200 |
| commit | 74d2ada067bd2fd9436710ab7ac260e0eddf1314 (patch) | |
| tree | 1f791bb895a611d8e729a735ba098a647808a157 /templates/base.html | |
| parent | create example config on startup (diff) | |
| download | minecraft-ui-74d2ada067bd2fd9436710ab7ac260e0eddf1314.tar.gz minecraft-ui-74d2ada067bd2fd9436710ab7ac260e0eddf1314.zip | |
Add per-instance mod management with client-side detection
- New mod validation engine (src/mods.rs) with constant-pool class-file
scanning: detects server-side content (block, tileentity, command,
worldgen) vs client-only API (gui, renderer, forge/client)
- 7 client-only mods correctly detected (AppleSkin, CraftingTweaks,
Durability101, EnchantmentDescriptions, InventoryHUD, MouseTweaks,
TrashSlot); 51 server-capable; 1 unknown
- Routes + templating for mod upload (jar/zip), listing, delete, rescan
- Multipart upload with 500MB limit (bypasses axum's default 2MB)
- Per-instance mod summary card on edit page
- Whitelist toggle checkbox on edit page (persisted, drives ENABLE_WHITELIST)
- Dynamic Java image tag (java8/java17/java21) based on MC version
- Class scan is informational-only; rejection based on metadata side=CLIENT
- has_modpack flag cleanup on mod delete
- Remove hx-boost from <body> (was corrupting multipart uploads)
Diffstat (limited to '')
| -rw-r--r-- | templates/base.html | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/templates/base.html b/templates/base.html index 3a92cd0..0af5d57 100644 --- a/templates/base.html +++ b/templates/base.html | |||
| @@ -1,37 +1,35 @@ | |||
| 1 | <!DOCTYPE html> | 1 | <!doctype html> |
| 2 | <html lang="en"> | 2 | <html lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <meta charset="UTF-8"> | 4 | <meta charset="UTF-8" /> |
| 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| 6 | <title>Minecraft UI</title> | 6 | <title>Minecraft UI</title> |
| 7 | <script src="/static/htmx.min.js"></script> | 7 | <script src="/static/htmx.min.js"></script> |
| 8 | <link rel="stylesheet" href="/static/style.css"> | 8 | <link rel="stylesheet" href="/static/style.css" /> |
| 9 | </head> | 9 | </head> |
| 10 | <body hx-boost="true"> | 10 | <body> |
| 11 | <nav> | 11 | <nav hx-boost="true"> |
| 12 | <span class="brand">Minecraft UI</span> | 12 | <span class="brand">Minecraft UI</span> |
| 13 | <div class="nav-links"> | 13 | <div class="nav-links"> |
| 14 | <a href="/">Dashboard</a> | 14 | <a href="/">Dashboard</a> |
| 15 | <a href="/instances">Instances</a> | 15 | <a href="/instances">Instances</a> |
| 16 | <a href="/players">Players</a> | 16 | <a href="/players">Players</a> |
| 17 | {% if is_superuser %} | 17 | {% if is_superuser %} |
| 18 | <a href="/accounts">Accounts</a> | 18 | <a href="/accounts">Accounts</a> |
| 19 | {% endif %} | 19 | {% endif %} |
| 20 | <span class="nav-user">{{ username }}</span> | 20 | <span class="nav-user">{{ username }}</span> |
| 21 | <form action="/logout" method="post" style="display:inline"> | 21 | <form action="/logout" method="post" style="display: inline"> |
| 22 | <button type="submit" class="btn-link">Logout</button> | 22 | <button type="submit" class="btn-link">Logout</button> |
| 23 | </form> | 23 | </form> |
| 24 | </div> | 24 | </div> |
| 25 | </nav> | 25 | </nav> |
| 26 | 26 | ||
| 27 | {% if password_change_required %} | 27 | {% if password_change_required %} |
| 28 | <div class="flash flash-warn"> | 28 | <div class="flash flash-warn"> |
| 29 | You must change your password before continuing. | 29 | You must change your password before continuing. |
| 30 | </div> | 30 | </div> |
| 31 | {% endif %} | 31 | {% endif %} |
| 32 | 32 | ||
| 33 | <main> | 33 | <main>{% block content %}{% endblock %}</main> |
| 34 | {% block content %}{% endblock %} | 34 | </body> |
| 35 | </main> | ||
| 36 | </body> | ||
| 37 | </html> | 35 | </html> |
