From 25ce3d0143768935e3cfe631f3521fccc37243ae Mon Sep 17 00:00:00 2001
From: WardPearce
Date: Mon, 22 Dec 2025 07:33:17 +1300
Subject: [PATCH] Added fullscreen support
---
materialious/src/lib/components/Player.svelte | 62 +++++++++++++++++--
materialious/src/lib/css/global.css | 2 +-
2 files changed, 57 insertions(+), 7 deletions(-)
diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte
index a264ba05..d36a813d 100644
--- a/materialious/src/lib/components/Player.svelte
+++ b/materialious/src/lib/components/Player.svelte
@@ -77,6 +77,7 @@
let playerCurrentPlaybackState = $state(false);
let playerCurrentTime = $state(0);
+ let playerMaxKnownTime = $state(0);
let playerIsSeeking = $state(false);
let playerIsBuffering = $state(false);
let playerVolume = $state(0);
@@ -739,6 +740,18 @@
playerElement.currentTime += frameTime;
});
+ const volumeContainer = document.getElementById('volume-slider');
+ volumeContainer?.addEventListener('mousewheel', (event) => {
+ event.preventDefault();
+ const delta = Math.sign((event as any).deltaY);
+ const newVolume = Math.max(
+ 0,
+ Math.min(1, (playerElement as HTMLMediaElement).volume - delta * 0.05)
+ );
+ (playerElement as HTMLMediaElement).volume = newVolume;
+ playerVolume = newVolume;
+ });
+
playerElement?.addEventListener('pause', async () => {
playerCurrentPlaybackState = false;
playerIsBuffering = false;
@@ -764,6 +777,10 @@
playerElement?.addEventListener('timeupdate', () => {
if (playerIsSeeking) return;
playerCurrentTime = playerElement?.currentTime ?? 0;
+
+ if (playerMaxKnownTime === 0 || playerCurrentTime > playerMaxKnownTime) {
+ playerMaxKnownTime = Number(playerElement?.currentTime);
+ }
});
try {
@@ -935,7 +952,7 @@
type="range"
min="0"
bind:value={playerCurrentTime}
- max={data.video.lengthSeconds}
+ max={data.video.liveNow ? playerMaxKnownTime : data.video.lengthSeconds}
/>
@@ -983,18 +1000,27 @@
class="chip"
style="background-color: var(--secondary-container) !important;color: var(--on-secondary-container) !important"
>
- {videoLength(playerCurrentTime)} / {videoLength(data.video.lengthSeconds)}
+ {#if data.video.liveNow}
+ {$_('thumbnail.live')}
+ {:else}
+ {videoLength(playerCurrentTime)} / {videoLength(data.video.lengthSeconds)}
+ {/if}
- {#if playerTextTracks && playerTextTracks.length > 0}
+ {#if playerTextTracks && playerTextTracks.length > 0 && !data.video.liveNow}