Files
guyg1474andClaude Opus 5.5 819219fb2d Rollen (Admin/Mitglied), Seite Kooperationen, Textanpassungen
- Gemeinsame Zugänge mit Rollen: Admin darf alles, Mitglied nutzt Kalender,
  Fahrtplaner, Treffpunkte und bearbeitet Mitglieder (kein Hinzufügen,
  Löschen, Import, keine Patches, keine Statistik-Korrektur)
- Server prüft die Rechte (403), Konten ohne Rolle gelten als Admin
- npm run user: add <name> [admin|mitglied], role <name> <rolle>
- Neue öffentliche Seite Kooperationen mit Titelbild, Anführer,
  Social-Media-Links und Beschreibung, Pflege durch Admin
- Kopfzeile bleibt bei mittlerer Breite einzeilig
- Texte auf Wunsch gekürzt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:47:03 +02:00

102 lines
3.6 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Gruppe – HCRB</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<main>
<header class="page-head">
<div>
<span class="eyebrow">Mitglieder &amp; Treffpunkte</span>
<h1>Gruppe</h1>
<p>Wer gehört dazu, wer hat ein Auto und wo trifft man sich.</p>
</div>
</header>
<div class="split wide-right">
<div class="col">
<div class="card" id="member-form-card">
<h2 id="member-form-title">Mitglied hinzufügen</h2>
<form id="member-form">
<input type="hidden" id="member-id">
<label>Vorname
<input type="text" id="member-name" required autocomplete="off" maxlength="50">
</label>
<label class="inline">
<input type="checkbox" id="member-external"> Extern (gehört nicht zur Gruppe, fährt aber manchmal mit)
</label>
<label class="inline">
<input type="checkbox" id="member-hascar"> Hat Auto
</label>
<label>Fährt am liebsten mit bei
<select id="member-rideswith"></select>
</label>
<div id="member-seats-wrap" hidden>
<label>Freie Plätze (ohne Fahrer)
<input type="number" id="member-seats" min="1" max="8" value="4">
</label>
<label class="inline">
<input type="checkbox" id="member-always"> Kommt immer mit eigenem Auto
</label>
<p class="muted">Fährt dann bei jeder Fahrt selbst, auch wenn weniger Autos reichen würden.</p>
<label>Standard-Treffpunkt, wenn er/sie fährt
<select id="member-point"></select>
</label>
</div>
<div class="row">
<button type="submit" class="primary">Speichern</button>
<button type="button" id="member-cancel" hidden>Abbrechen</button>
</div>
</form>
</div>
<div class="card">
<h2 id="point-form-title">Treffpunkt hinzufügen</h2>
<form id="point-form">
<input type="hidden" id="point-id">
<label>Name
<input type="text" id="point-name" required autocomplete="off" maxlength="60" placeholder="z. B. Parkplatz Bahnhof">
</label>
<label>Adresse
<input type="text" id="point-address" required autocomplete="off" maxlength="200" placeholder="Straße Nr., PLZ Ort">
</label>
<div class="row">
<button type="submit" class="primary">Speichern</button>
<button type="button" id="point-cancel" hidden>Abbrechen</button>
</div>
</form>
<p id="points-empty" class="muted" hidden>Noch keine Treffpunkte gespeichert.</p>
<ul id="points-list" class="list"></ul>
</div>
</div>
<div class="col">
<div class="card">
<h2>Gruppe</h2>
<p id="members-role-hint" class="muted" hidden>Du kannst Mitglieder bearbeiten.</p>
<p id="members-empty" class="muted" hidden>Noch keine Mitglieder gespeichert.</p>
<ul id="members-list" class="list"></ul>
</div>
<div class="card">
<h2>Daten sichern</h2>
<p class="muted" id="backup-text">Gruppe als JSON-Datei sichern oder eine gesicherte Datei wieder einspielen (ersetzt die aktuelle Gruppe).</p>
<div class="row">
<button id="export-btn">Exportieren (JSON)</button>
<label class="button" id="import-btn">Importieren
<input type="file" id="import-file" accept="application/json" hidden>
</label>
</div>
</div>
</div>
</div>
</main>
<script type="module" src="/js/gruppe.js"></script>
</body>
</html>