mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-13 20:56:19 -08:00
feat(playback): show media title overlay in fullscreen shared controls (#1228)
* feat(playback): show media title overlay in fullscreen shared controls In fullscreen with the shared player-controls layer, a pointer-transparent overlay at the top of the player now names the content while controls are revealed: one line for movies and live channels, two lines for series (series name + S01E03 label). The overlay follows the bar's auto-hide transition and stays hidden outside fullscreen, where page chrome already names the content. Data flows top-down: the Xtream/Stalker series detail views pass the series name via a new PortalInlinePlayerComponent.seriesTitle input (Xtream episode playback titles carry the episode name, not the series), the inline player builds the two-line form from the episode metadata label, and WebPlayerViewComponent falls back to playback.title for movies/channels while skipping raw stream-URL fallbacks. All four shared-controls hosts (HTML5, Video.js, ArtPlayer, Embedded MPV frame-copy) forward the value. To stay under the max-lines limit, scrub/timeline state is extracted into ControlsTimeline and the playback-diagnostics display helpers into web-player-view-diagnostics.utils.ts, with behavior unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs: mirror fullscreen media-title contract into AGENTS.md Addresses Codex review: the Shared Player Controls section in AGENTS.md must stay in sync with the CLAUDE.md description of the new mediaTitle input, fullscreen overlay behavior, and series-title wiring. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
188f5c4b56
commit
6dc8a10d52
30 files changed
+705
-170
No files matched your search
@@ -225,9 +225,29 @@ It owns only transient presentation behavior:
|
||||
- `ControlsVolume` — persisted/optimistic volume state reconciled from
|
||||
controller state;
|
||||
- `ControlsShortcuts` — document keyboard routing;
|
||||
- `ControlsSurface` — pointer/click/double-click surface interactions; and
|
||||
- `ControlsSurface` — pointer/click/double-click surface interactions;
|
||||
- `ControlsTimeline` — scrub state and timeline projections; and
|
||||
- `controls-view-model.ts` — derived display state.
|
||||
|
||||
### Fullscreen media title
|
||||
|
||||
The component accepts an optional `mediaTitle` input
|
||||
(`PlayerMediaTitle { primary, secondary? }`) with display-ready strings — the
|
||||
movie title, channel name, or series name, plus an optional second line such
|
||||
as the `S01E03` episode label. The overlay renders at the top of the player
|
||||
only in fullscreen while the controls are revealed, follows the same
|
||||
auto-hide transition as the bottom bar, and is pointer-transparent. Outside
|
||||
fullscreen the surrounding page chrome already names the content, so the
|
||||
overlay stays hidden.
|
||||
|
||||
Hosts supply the value: `WebPlayerViewComponent` derives a single-line title
|
||||
from the resolved playback (skipping raw stream-URL fallbacks) unless its own
|
||||
`mediaTitle` input was set, and `PortalInlinePlayerComponent` builds the
|
||||
two-line series form from its `seriesTitle` input plus the episode metadata
|
||||
label. The Xtream and Stalker series detail views pass the series name via
|
||||
`seriesTitle`; movie and live hosts need no extra wiring because
|
||||
`playback.title` already names the content.
|
||||
|
||||
### Keyboard ownership
|
||||
|
||||
Unmodified Space/K, F, arrow keys, and M are playback shortcuts. Playback keys
|
||||
|
||||
Reference in new issue
Block a user