// in the beginning.... god made mrrprpmnaynayaynaynayanyuwuuuwmauwnwanwaumawp :p var _yt_player = videojs; 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, preload: 'auto', errorDisplay: false }); // --- query + minimal state --- const qs = new URLSearchParams(window.location.search); const qua = qs.get("quality") || ""; const vidKey = qs.get('v') || ''; const PROG_KEY = vidKey ? `progress-${vidKey}` : null; // persist last position (quietly) let lastSaved = 0; const SAVE_INTERVAL = 1500; function saveProgress(t) { if (!PROG_KEY) return; if (t - lastSaved >= 1.0) { lastSaved = t; try { localStorage.setItem(PROG_KEY, String(t)); } catch {} } } // initialize progress if empty try { if (PROG_KEY && localStorage.getItem(PROG_KEY) == null) localStorage.setItem(PROG_KEY, "0"); } catch {} }); function clearFalseErrorUI() { try { if (typeof player.error === 'function') player.error(null); player.removeClass('vjs-error'); const ed = player.getChild && player.getChild('errorDisplay'); if (ed && typeof ed.hide === 'function') ed.hide(); } catch {} } ['loadstart','loadedmetadata','canplay','playing','timeupdate','seeked'].forEach(ev => { player.on(ev, clearFalseErrorUI); }); // raw media elements const videoEl = document.getElementById('video'); const audio = document.getElementById('aud'); // resolve initial sources robustly (works whether