From b5db4ecf80d4858c2222d2157e3281d509bd4637 Mon Sep 17 00:00:00 2001 From: ashley Date: Sun, 5 Oct 2025 20:25:05 +0200 Subject: [PATCH] fix stuff + add stuff --- css/player-base.js | 73 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 16 deletions(-) diff --git a/css/player-base.js b/css/player-base.js index 9bc76d48..7c56fb1c 100644 --- a/css/player-base.js +++ b/css/player-base.js @@ -2,7 +2,8 @@ var _yt_player = videojs; var versionclient = "youtube.player.web_20250917_22_RC00" -document.addEventListener("DOMContentLoaded", () => { + +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, @@ -23,16 +24,37 @@ document.addEventListener("DOMContentLoaded", () => { const audioEl = document.getElementById('aud'); let volGuard = false; - 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 - // determine if looping is forced - const shouldLoop = - videoEl.loop || + // FIX: dynamic loop intent + disable native loop to avoid double-looping & missing 'ended' + let desiredLoop = + !!videoEl.loop || qs.get("loop") === "1" || qs.get("loop") === "true" || window.forceLoop === true; + // 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