Files
linearvoid/frontend/public/admin/schedule.html
T
zwitschi 5b5cdc4cd8
CI / test (push) Successful in 9m11s
CI / docker (push) Failing after 2m39s
CI / release (push) Skipped
Release / release (push) Canceled after 2m11s
chore: release v1.0.7
Playout: slate fallback, strict ffprobe validation, Prometheus metrics
Chat: history on join, DM offline delivery, env-config rate limits,
  Redis auto-reconnect, heartbeat, ban/mute enforcement, DM metrics
Viewer: presence indicators, schedule overlay, public /api/schedule
Admin: playlist drag-reorder, schedule overrides CRUD, user actions,
  inline mod buttons, CSV export, config editor, restart buttons,
  upload normalization gate, analytics time range
nginx: CORS preflight, JSON health, stub_status
Docs: test-lab vs production distinction across all configs/docs
Infra: Redis maxmemory, CD health IP-agnostic, slate volume mount
2026-08-06 17:41:52 +02:00

53 lines
2.2 KiB
HTML

<div class="panel-header-row">
<div>
<h1>Schedule</h1>
<p>Read-only view of the currently configured playout order.</p>
</div>
<button id="reload-schedule-btn" type="button" class="btn btn-secondary">Reload schedule</button>
</div>
<div class="panel-card">
<p class="small-muted"><span id="schedule-matched-entries">0</span>/<span id="schedule-total-entries">0</span> matched • total runtime <span id="schedule-total-runtime">00:00:00</span></p>
<div class="table-wrap">
<table class="data-table">
<thead>
<tr>
<th>#</th>
<th>Label</th>
<th>Runtime</th>
<th>Status</th>
<th>Path</th>
</tr>
</thead>
<tbody id="schedule-table-body"></tbody>
</table>
</div>
<p id="schedule-status" class="status-line" aria-live="polite">Loading schedule...</p>
</div>
<div class="panel-card">
<h2>Schedule Overrides</h2>
<p>Insert scheduled overrides to play specific videos at specific times.</p>
<form id="override-form" class="form-stack" style="max-width:500px">
<label>Media ID <input id="override-media-id" type="number" class="text-input" required /></label>
<label>Start Time <input id="override-start" type="datetime-local" class="text-input" required /></label>
<label>End Time <input id="override-end" type="datetime-local" class="text-input" required /></label>
<label>Reason <input id="override-reason" type="text" class="text-input" placeholder="e.g. special event" /></label>
<button type="submit" class="btn btn-primary">Add Override</button>
</form>
<p id="override-status" class="status-line" aria-live="polite"></p>
<div class="table-wrap" style="margin-top:1rem">
<table class="data-table">
<thead>
<tr>
<th>Media ID</th>
<th>Start</th>
<th>End</th>
<th>Reason</th>
<th></th>
</tr>
</thead>
<tbody id="override-table-body"></tbody>
</table>
</div>
</div>