Grotti 3.6.0: Lauf-Identität nach Filament-Pause, robustere Queue, Projekte/Aufträge list-first und API-Polish.

This commit is contained in:
Dominic Gundel committed 2026-10-25 08:24:24 +01:00
1 parent d1eb87ba25
commit 2b1e36634a
53 files changed
+4254 -636

No files matched your search

+20 -1
View File
@@ -257,6 +257,10 @@
</form>
<p id="token-note"></p>
<p class="ok" id="token-once" hidden></p>
<div id="token-qr-wrap" hidden style="margin-top:0.75rem">
<p class="tiny">App-Kopplung — QR mit Server-URL und Token (nur jetzt):</p>
<canvas id="token-qr" width="180" height="180" aria-label="QR-Code"></canvas>
</div>
<p class="hint" id="legacy-token-hint" hidden>In der Config steht noch ein Shared-<code>token</code> — der wird seit 3.1 nicht mehr akzeptiert. Bitte leeren und API-Tokens (<code>grt_…</code>) nutzen.</p>
</section>
@@ -293,6 +297,7 @@
</dialog>
{% endblock %}
{% block script %}
<script src="{{ url_for('static', filename='qrcode.min.js') }}?v=1"></script>
<script>
const families = { kobra_3: "Kobra 3", kobra_s1: "Kobra S1", "": "—" };
const isAdmin = document.querySelector('meta[name="user-role"]')?.content === "admin";
@@ -543,7 +548,9 @@ document.getElementById("user-add")?.addEventListener("submit", async (event) =>
document.getElementById("token-add").addEventListener("submit", async (event) => {
event.preventDefault();
const once = document.getElementById("token-once");
const qrWrap = document.getElementById("token-qr-wrap");
once.hidden = true;
if (qrWrap) qrWrap.hidden = true;
try {
const out = await api("/tokens", {
method: "POST",
@@ -555,8 +562,20 @@ document.getElementById("token-add").addEventListener("submit", async (event) =>
document.getElementById("token-add").reset();
once.hidden = false;
once.textContent = "Token (nur jetzt sichtbar): " + out.token;
showNote("token-note", null, "Token erzeugt — jetzt kopieren.");
showNote("token-note", null, "Token erzeugt — jetzt kopieren oder QR scannen.");
loadTokens();
if (out.token && window.QRCode && qrWrap) {
const canvas = document.getElementById("token-qr");
const payload = JSON.stringify({
url: location.origin,
token: out.token,
name: "Grotti",
});
try {
QRCode.toCanvas(canvas, payload, { width: 180, margin: 1, errorCorrectionLevel: "M" });
qrWrap.hidden = false;
} catch (error) { /* QR optional */ }
}
} catch (error) {
showNote("token-note", error);
}