LabCodeHub öffentliche Ansicht
Anmelden
Küpper / ehc-tvwall öffentlich
Branch: main
ehc-tvwall / internal / web / assets / index.html
Verlauf Rohdaten
R Rüdiger Küpper fix: v1.0.0
14518d05 vor 11 Tagen
internal/web/assets/index.html 90 Zeilen · 3.3 KB · HTML
1
<!doctype html>
2
<html lang="de">
3
<head>
4
<meta charset="utf-8">
5
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
6
<meta name="theme-color" content="#11161f">
7
<title>TV-Wall</title>
8
<link rel="stylesheet" href="/static/style.css">
9
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect width='16' height='16' rx='3' fill='%23111820'/><rect x='2.5' y='4' width='11' height='7' rx='1' fill='%2352b6ff'/><rect x='6' y='12' width='4' height='1.2' rx='.6' fill='%2352b6ff'/></svg>">
10
</head>
11
<body>
12
13
<header class="top">
14
  <div class="brand">
15
    <span class="logo" aria-hidden="true"></span>
16
    <div>
17
      <h1>TV-Wall</h1>
18
      <p class="sub" id="deviceLine">wird geladen …</p>
19
    </div>
20
  </div>
21
  <div class="now" id="nowPlaying">
22
    <span class="dot" id="statusDot"></span>
23
    <span id="nowText"></span>
24
  </div>
25
</header>
26
27
<main>
28
29
  <section class="card" id="uploadCard">
30
    <h2>Hochladen</h2>
31
    <!-- Das Feld steht bewusst AUSSERHALB des Labels und ist nicht per
32
         hidden-Attribut versteckt: iOS Safari oeffnet die Fotoauswahl sonst
33
         zweimal (einmal ueber das Label, einmal per JavaScript) und verwirft
34
         das Ergebnis. -->
35
    <input type="file" id="fileInput" class="visually-hidden" multiple accept="image/*,video/*">
36
    <label class="drop" id="drop" for="fileInput">
37
      <span class="drop-icon" aria-hidden="true"></span>
38
      <span class="drop-text">Dateien hierher ziehen<br><b>oder tippen zum Auswählen</b></span>
39
      <span class="drop-hint" id="dropHint">Bilder und Videos</span>
40
    </label>
41
    <div class="progress" id="progressWrap" hidden>
42
      <div class="bar"><div class="fill" id="progressFill"></div></div>
43
      <span class="progress-label" id="progressLabel">0 %</span>
44
    </div>
45
  </section>
46
47
  <section class="card">
48
    <h2>Wiedergabe</h2>
49
    <div class="controls">
50
      <button class="btn" data-action="prev" title="Vorheriger Eintrag">⏮ Zurück</button>
51
      <button class="btn" data-action="pause" id="pauseBtn">⏸ Pause</button>
52
      <button class="btn" data-action="next" title="Nächster Eintrag">⏭ Weiter</button>
53
      <button class="btn ghost" data-action="reload" title="Playliste sofort neu laden">↻ Neu laden</button>
54
    </div>
55
    <div class="settings">
56
      <label class="field">
57
        <span>Anzeigedauer Bilder</span>
58
        <span class="input-unit">
59
          <input type="number" id="durationInput" min="0.5" max="3600" step="0.5" inputmode="decimal">
60
          <span>Sek.</span>
61
        </span>
62
      </label>
63
      <label class="switch">
64
        <input type="checkbox" id="muteInput">
65
        <span>Ton der Videos stummschalten</span>
66
      </label>
67
      <button class="btn small" id="saveSettings">Speichern</button>
68
    </div>
69
  </section>
70
71
  <section class="card">
72
    <div class="card-head">
73
      <h2>Playliste</h2>
74
      <span class="counter" id="counter"></span>
75
    </div>
76
    <p class="hint">Reihenfolge per Ziehen ändern – oder mit den Pfeiltasten. Änderungen wirken sofort.</p>
77
    <ul class="list" id="list"></ul>
78
    <p class="empty" id="empty" hidden>Noch nichts da. Lade oben Bilder oder Videos hoch.</p>
79
  </section>
80
81
  <footer class="foot">
82
    <span id="diskLine"></span>
83
  </footer>
84
</main>
85
86
<div class="toasts" id="toasts" aria-live="polite"></div>
87
88
<script src="/static/app.js"></script>
89
</body>
90
</html>