v0.3.0-prod

This commit is contained in:
Mateusz Gruszczyński committed 2026-11-04 14:57:48 +01:00
1 parent 387933957e
commit 9d093b691c
21 files changed
+1239 -180

No files matched your search

+77 -40
View File
@@ -4,61 +4,98 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>TeamSpeak — statystyki</title>
<link rel="stylesheet" href="/assets/app.css">
<script src="/assets/app.js" defer></script>
<link rel="stylesheet" href="{{asset "app.css"}}">
<script src="{{asset "app.js"}}" defer></script>
</head>
<body>
<div class="app-shell">
{{template "icons" .}}
<div class="shell">
<header class="topbar">
<a class="brand" href="/stats" aria-label="TeamSpeak — statystyki">
<span><strong>TeamSpeak</strong><small>Panel serwera</small></span>
<a class="brand" href="/stats">
<svg class="icon" width="24" height="24"><use href="#icon-headset"/></svg>
<span>Panel serwera</span>
</a>
<div class="header-right">
<div class="header-online" aria-live="polite">
<span class="online-dot" aria-hidden="true"></span>
<span>Online</span>
<strong id="online-count">{{.Current}}</strong>
</div>
<nav class="top-actions" aria-label="Nawigacja">
<a class="btn btn-ghost" href="{{.VoiceURL}}">Połącz</a>
<a class="btn btn-primary" href="/channel">Utwórz kanał</a>
</nav>
<div class="header-online" aria-live="polite">
<span class="badge ok"><span class="dot"></span>Online</span>
<strong id="online-count">{{.Current}}</strong>
<span class="muted" id="refresh-status">Dane aktualne</span>
</div>
<nav class="top-actions" aria-label="Nawigacja">
<a class="btn ghost" href="{{.VoiceURL}}"><svg class="icon"><use href="#icon-zap"/></svg>Połącz</a>
<a class="btn primary" href="/channel"><svg class="icon"><use href="#icon-plus-circle"/></svg>Utwórz kanał</a>
<button class="theme-toggle" type="button" aria-label="Przełącz jasny/ciemny motyw" title="Jasny / ciemny motyw">
<svg class="icon ic-sun"><use href="#icon-sun"/></svg>
<svg class="icon ic-moon"><use href="#icon-moon"/></svg>
</button>
</nav>
<div class="route-progress" id="route-progress" hidden><span></span></div>
</header>
<main class="container">
<section class="page-intro">
<div>
<p class="eyebrow">Statystyki serwera</p>
<h1>Aktywność TeamSpeak 3</h1>
<p>Historia liczby użytkowników połączonych z serwerem.</p>
<div class="body">
<aside class="sidebar">
<nav class="nav">
<a class="active" href="/stats"><svg class="icon"><use href="#icon-activity"/></svg>Statystyki</a>
<a href="/channel"><svg class="icon"><use href="#icon-plus-circle"/></svg>Utwórz kanał</a>
<a href="{{.VoiceURL}}"><svg class="icon"><use href="#icon-zap"/></svg>Połącz z TS3</a>
</nav>
<p class="nav-section">Serwer</p>
<div class="nav-server" title="{{if .InfoAvailable}}{{.ServerName}}{{end}}">
<svg class="icon"><use href="#icon-server"/></svg><span class="mono">{{if .InfoAvailable}}{{.ServerName}}{{else}}—{{end}}</span>
</div>
<span class="refresh-status" id="refresh-status">Odświeżanie automatyczne</span>
</section>
</aside>
<section class="graphs" aria-label="Wykresy statystyk">
{{range .Ranges}}
<article class="graph-card">
<div class="graph-head">
<div>
<h2>{{.Title}}</h2>
<p>Liczba użytkowników online</p>
</div>
<main class="content">
<section class="page-head">
<div>
<p class="eyebrow">Statystyki serwera</p>
<h1>Aktywność TeamSpeak 3</h1>
<p>Historia liczby użytkowników połączonych z serwerem.</p>
</div>
<button class="graph-image-button js-graph-open" type="button" data-full="/graph/{{.Key}}.png" aria-label="Powiększ wykres {{.Title}}">
<img class="js-live-graph" loading="lazy" src="/graph/{{.Key}}.png" data-src="/graph/{{.Key}}.png" alt="{{.Title}}">
</button>
</article>
{{end}}
</section>
</main>
</section>
<section class="cards" aria-label="Podsumowanie">
<div class="card">
<svg class="icon"><use href="#icon-users"/></svg>
<div><span class="k">Online teraz</span><div class="v">{{.Current}}{{if .InfoAvailable}}{{if gt .MaxClients 0}}<span class="vs muted"> / {{.MaxClients}}</span>{{end}}{{end}}</div></div>
</div>
<div class="card">
<svg class="icon"><use href="#icon-clock"/></svg>
<div><span class="k">Uptime</span><div class="vs">{{if .InfoAvailable}}{{.Uptime}}{{else}}—{{end}}</div></div>
</div>
<div class="card">
<svg class="icon"><use href="#icon-server"/></svg>
<div><span class="k">Wersja serwera</span><div class="vs">{{if .InfoAvailable}}{{.ServerVersion}}{{else}}—{{end}}</div></div>
</div>
<div class="card">
<svg class="icon"><use href="#icon-sliders"/></svg>
<div><span class="k">Platforma</span><div class="vs">{{if .InfoAvailable}}{{.ServerPlatform}}{{else}}—{{end}}</div></div>
</div>
</section>
<p class="section-title">Wykresy obecności</p>
<section class="graphs" aria-label="Wykresy statystyk">
{{range .Ranges}}
<article class="panel">
<div class="panel-head">
<div>
<h2>{{.Title}}</h2>
<p>Liczba użytkowników online</p>
</div>
</div>
<button class="graph-image-button js-graph-open" type="button" data-full="/graph/{{.Key}}.png" data-full-light="/graph/{{.Key}}-light.png" aria-label="Powiększ wykres {{.Title}}">
<img class="js-live-graph" loading="lazy" src="/graph/{{.Key}}.png" data-src="/graph/{{.Key}}.png" data-src-light="/graph/{{.Key}}-light.png" alt="{{.Title}}">
</button>
</article>
{{end}}
</section>
</main>
</div>
</div>
<div class="lightbox" id="graph-lightbox" hidden aria-hidden="true">
<button class="lightbox-backdrop" type="button" data-lightbox-close aria-label="Zamknij podgląd"></button>
<div class="lightbox-dialog" role="dialog" aria-modal="true" aria-label="Powiększony wykres">
<button class="lightbox-close" type="button" data-lightbox-close>Zamknij</button>
<button class="btn ghost lightbox-close" type="button" data-lightbox-close><svg class="icon"><use href="#icon-x"/></svg>Zamknij</button>
<img id="lightbox-image" src="" alt="Powiększony wykres">
</div>
</div>