From 476b004edac89cf77a856362790bd6c407e631d7 Mon Sep 17 00:00:00 2001 From: ashley Date: Mon, 6 Oct 2025 19:20:52 +0200 Subject: [PATCH] Update css/player-base.js --- css/player-base.js | 86 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 14 deletions(-) diff --git a/css/player-base.js b/css/player-base.js index 12e75b46..98ba5159 100644 --- a/css/player-base.js +++ b/css/player-base.js @@ -2,8 +2,9 @@ var _yt_player = videojs; var versionclient = "youtube.player.web_20250917_22_RC00" - + document.addEventListener("DOMContentLoaded", () => { + // video.js 8 init - source can be seen in https://poketube.fun/static/vjs.min.js or the vjs.min.js file const video = videojs('video', { controls: true, autoplay: false, @@ -11,42 +12,56 @@ var versionclient = "youtube.player.web_20250917_22_RC00" errorDisplay: false, }); + // todo : remove this code lol const qs = new URLSearchParams(window.location.search); const qua = qs.get("quality") || ""; const vidKey = qs.get('v'); try { localStorage.setItem(`progress-${vidKey}`, 0); } catch {} + // raw media elements const videoEl = document.getElementById('video'); const audio = document.getElementById('aud'); const audioEl = document.getElementById('aud'); let volGuard = false; + // FIX: ensure inline playback hint for iOS/Safari try { videoEl.setAttribute('playsinline', ''); videoEl.setAttribute('webkit-playsinline', ''); } catch {} - let syncing = false; - let restarting = false; + // global anti-ping-pong guard + let syncing = false; // prevents normal ping-pong + let restarting = false; // prevents loop-end ping-pong + // FIX: explicit loop-state variables let desiredLoop = !!videoEl.loop || qs.get("loop") === "1" || qs.get("loop") === "true" || window.forceLoop === true; + // FIX: tracks the short window *during* a loop restart let suppressEndedUntil = 0; + + // FIX: co-play tracking flags (true only when each element fires 'playing') let vIsPlaying = false; let aIsPlaying = false; + + // remember mute states for temporary autoplay retries let prevVideoMuted = false; let prevAudioMuted = false; let pendingUnmute = false; + // turn OFF native loop so 'ended' fires and we control both tracks together try { videoEl.loop = false; videoEl.removeAttribute?.('loop'); } catch {} try { audio.loop = false; audio.removeAttribute?.('loop'); } catch {} + // If someone toggles the