f263d84a8d
One source of truth for the branded player on desktop (archive) and
mobile. The ArchivePlayer class moves out of app.js into player.js
(name kept; app.js still does `new ArchivePlayer`); the .pjs styles
move out of style.css into player.css. Both archive.html and mobile.html
load the shared module before their own script.
The shared player gains two additive, backward-compatible options:
- live: timeline hidden, only pause/play + fullscreen (mobile Live).
- autohide:false: control bar always visible (touch); desktop keeps
autohide (default true), so desktop archive behaves exactly as before.
Fullscreen is now self-contained (no global toggleFullscreen dep) so it
works on mobile too, with an iOS <video> fallback.
mobile.js drops its duplicated Player class and uses ArchivePlayer.
Verified on .79: /archive 200 loads player.{js,css}; app.js has no
class def; mobile (Host :8443) loads the shared module.
VERSION 0.0.154 -> 0.0.155
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
48 lines
2.0 KiB
HTML
48 lines
2.0 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover">
|
|
<meta name="theme-color" content="#161a22">
|
|
<title>CoRE.Vizion+ — Mobile</title>
|
|
<link rel="stylesheet" href="/static/player.css">
|
|
<link rel="stylesheet" href="/static/mobile.css">
|
|
</head>
|
|
<body>
|
|
<div class="m-app">
|
|
<header class="m-head">
|
|
<button class="m-burger" id="m-burger" aria-label="Меню">☰</button>
|
|
<span class="m-title" id="m-title">Live</span>
|
|
</header>
|
|
|
|
<!-- бутерброд-меню: выбор режима (Live / Архив) -->
|
|
<div class="m-scrim" id="m-scrim" hidden></div>
|
|
<aside class="m-drawer" id="m-drawer">
|
|
<div class="m-drawer-head"><span class="m-brand">CoRE<span>.Vizion+</span></span></div>
|
|
<button class="m-nav active" data-view="live"><span class="i">▦</span>Live</button>
|
|
<button class="m-nav" data-view="arch"><span class="i">🗄</span>Архив</button>
|
|
</aside>
|
|
|
|
<!-- LIVE: одна камера + выбор камеры (плеер только пауза/плей) -->
|
|
<section class="m-view" id="view-live">
|
|
<div class="m-bar">
|
|
<select id="m-live-cam" class="m-sel" title="Камера"></select>
|
|
</div>
|
|
<div class="m-stage"><div class="player-wrap" id="m-live-box"></div></div>
|
|
</section>
|
|
|
|
<!-- АРХИВ: камера + дата + список записей (плеер с перемоткой) -->
|
|
<section class="m-view" id="view-arch" hidden>
|
|
<div class="m-bar">
|
|
<select id="m-arch-cam" class="m-sel" title="Камера"></select>
|
|
<input type="date" id="m-arch-date" class="m-date" title="Дата">
|
|
</div>
|
|
<div class="m-stage"><div class="player-wrap" id="m-arch-box"></div></div>
|
|
<div class="m-seglist" id="m-seglist"></div>
|
|
</section>
|
|
</div>
|
|
<script src="/static/player.js"></script>
|
|
<script src="/static/mobile.js"></script>
|
|
</body>
|
|
</html>
|