84 lines
3.9 KiB
HTML
84 lines
3.9 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Frame Stream Player</title>
|
|
<link rel="stylesheet" href="/styles.css">
|
|
</head>
|
|
<body>
|
|
<main class="app">
|
|
<section id="entry-screen" class="entry-screen" aria-label="Stream URL">
|
|
<div class="entry-stack">
|
|
<form id="stream-form" class="url-form">
|
|
<label class="sr-only" for="stream-url">Video stream URL</label>
|
|
<input
|
|
id="stream-url"
|
|
name="url"
|
|
type="url"
|
|
placeholder="Video stream URL"
|
|
autocomplete="off"
|
|
required
|
|
>
|
|
<button id="next" type="submit">Next</button>
|
|
</form>
|
|
<div id="library-panel" class="library-panel" aria-label="Saved streams">
|
|
<section id="recent-panel" class="url-column" aria-labelledby="recent-heading">
|
|
<div class="column-heading">
|
|
<h2 id="recent-heading">Recents</h2>
|
|
</div>
|
|
<div id="recent-list" class="url-list"></div>
|
|
</section>
|
|
<section id="favorites-panel" class="url-column" aria-labelledby="favorites-heading">
|
|
<div class="column-heading">
|
|
<h2 id="favorites-heading">Favorites</h2>
|
|
<button id="edit-favorites" type="button" class="small-button">Edit</button>
|
|
</div>
|
|
<div id="favorites-list" class="url-list"></div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
<div id="entry-message" class="message" role="status" aria-live="polite"></div>
|
|
</section>
|
|
|
|
<section id="player-screen" class="player-screen" aria-label="Player" hidden>
|
|
<div id="video-stage" class="video-stage">
|
|
<canvas id="screen" width="960" height="540" aria-label="Video frame"></canvas>
|
|
<div id="loader" class="loader" aria-hidden="true"></div>
|
|
<div id="player-message" class="player-message" role="status" aria-live="polite"></div>
|
|
|
|
<div id="controls" class="controls">
|
|
<div id="playhead" class="playhead">
|
|
<output id="current-time" class="time-badge current-time" for="seek">0:00</output>
|
|
<input id="seek" class="seek-slider" type="range" min="0" max="1" step="0.1" value="0" aria-label="Playback position" disabled>
|
|
<output id="total-time" class="time-badge total-time" for="seek">--:--</output>
|
|
</div>
|
|
<button id="back" type="button" class="control-button">Back</button>
|
|
<button id="play-pause" type="button" class="control-button primary">Pause</button>
|
|
<button id="mute" type="button" class="control-button">Mute</button>
|
|
</div>
|
|
</div>
|
|
<audio id="audio" preload="none"></audio>
|
|
</section>
|
|
|
|
<div id="favorites-modal" class="modal" role="dialog" aria-modal="true" aria-labelledby="favorites-modal-title" hidden>
|
|
<form id="favorites-form" class="modal-panel">
|
|
<div class="modal-heading">
|
|
<h2 id="favorites-modal-title">Edit Favorites</h2>
|
|
<button id="close-favorites" type="button" class="icon-button" aria-label="Close favorites editor">×</button>
|
|
</div>
|
|
<div id="favorites-editor-list" class="favorites-editor-list"></div>
|
|
<button id="add-favorite" type="button" class="secondary-button">Add Favorite</button>
|
|
<div id="favorites-message" class="modal-message" role="status" aria-live="polite"></div>
|
|
<div class="modal-actions">
|
|
<button id="cancel-favorites" type="button" class="secondary-button">Cancel</button>
|
|
<button id="save-favorites" type="submit" class="primary-button">Save</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</main>
|
|
|
|
<script src="/app.js" type="module"></script>
|
|
</body>
|
|
</html>
|