Frontend, README und Konfigurationsvorlage
React-Oberfläche mit Übersicht, Match-Erstellung, Beitritt über Team- und Zuschauercodes, Teamkarten, visuellem Map-Veto, Serie und Serverpanel. README beschreibt Einrichtung, Umgebungsvariablen, Rollen, Veto-Abläufe, Serveradapter und CSTV-Zuschauerzugang.
This commit is contained in:
1 parent
f08297dd0d
commit
f7520a6ca7
24 files changed
+1938
-1
No files matched your search
@@ -0,0 +1,51 @@
|
||||
export const FORMAT_LABEL = { bo1: 'Best of 1', bo3: 'Best of 3', bo5: 'Best of 5' };
|
||||
|
||||
export const ROLE_LABEL = {
|
||||
organizer: 'Organisator',
|
||||
captain: 'Captain',
|
||||
player: 'Spieler',
|
||||
spectator: 'Zuschauer',
|
||||
public: 'Gast',
|
||||
};
|
||||
|
||||
/** Serverstatus in Worte fassen. Simulierte Server werden nie als laufend bezeichnet. */
|
||||
export function serverLabel(server) {
|
||||
if (!server) return { text: 'Kein Server', tone: 'muted' };
|
||||
const sim = server.simulated;
|
||||
switch (server.status) {
|
||||
case 'starting':
|
||||
return { text: sim ? 'Demo: Start wird simuliert' : 'Server startet', tone: 'pending' };
|
||||
case 'ready':
|
||||
return { text: sim ? 'Demo: simuliert bereit' : 'Server bereit', tone: sim ? 'demo' : 'ok' };
|
||||
case 'configuring':
|
||||
return { text: sim ? 'Demo: Konfiguration simuliert' : 'Server wird konfiguriert', tone: 'pending' };
|
||||
case 'configured':
|
||||
return { text: sim ? 'Demo: simuliert konfiguriert' : 'Server läuft', tone: sim ? 'demo' : 'ok' };
|
||||
case 'start_failed':
|
||||
return { text: 'Serverstart fehlgeschlagen', tone: 'error' };
|
||||
case 'config_failed':
|
||||
return { text: 'Konfiguration fehlgeschlagen', tone: 'error' };
|
||||
case 'failed':
|
||||
return { text: 'Server ausgefallen', tone: 'error' };
|
||||
case 'stopped':
|
||||
return { text: 'Server gestoppt', tone: 'muted' };
|
||||
default:
|
||||
return { text: server.status, tone: 'muted' };
|
||||
}
|
||||
}
|
||||
|
||||
export const STEP_VERB = { ban: 'bannt eine Map', pick: 'wählt eine Map', side: 'wählt die Startseite', decider: 'Entscheidungsmap' };
|
||||
|
||||
export function timeAgo(ts) {
|
||||
const s = Math.round((Date.now() - ts) / 1000);
|
||||
if (s < 60) return 'gerade eben';
|
||||
const m = Math.round(s / 60);
|
||||
if (m < 60) return `vor ${m} Min.`;
|
||||
const h = Math.round(m / 60);
|
||||
if (h < 24) return `vor ${h} Std.`;
|
||||
return new Date(ts).toLocaleDateString('de-DE');
|
||||
}
|
||||
|
||||
export function clock(ts) {
|
||||
return new Date(ts).toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' });
|
||||
}
|
||||
Reference in new issue
Block a user