From deeec99d6299075ff0f500b72b174af19d75d024 Mon Sep 17 00:00:00 2001
From: ashley <iamashley@duck.com>
Date: Thu, 1 Aug 2024 10:53:34 +0000
Subject: [PATCH] 1a

---
 html/poketube.ejs | 396 ++--------------------------------------------
 1 file changed, 16 insertions(+), 380 deletions(-)

diff --git a/html/poketube.ejs b/html/poketube.ejs
index 5de41aa4..648fce88 100644
--- a/html/poketube.ejs
+++ b/html/poketube.ejs
@@ -380,6 +380,9 @@ a[data-onclick="jump_to_time"] {
   <link href="/css/poketube.css?v=948934774844" rel=stylesheet>
   <!-- css files end -->
 
+  <link href="https://vjs.zencdn.net/8.16.1/video-js.css" rel="stylesheet" />
+  <script src="https://vjs.zencdn.net/8.16.1/video.min.js"></script>
+
 <% if (k.Video.Channel.Name == "7clouds") { %> 
 <style>
  @font-face {
@@ -597,98 +600,7 @@ background-color: #0000;
     top: 0;
   
 }
-  #controls {
-    display: flex;
-    visibility: hidden;
-    position: absolute;
-    bottom: 0;
-    margin-bottom: 70px  !important;
-    margin: 0 20px;
-    width: 100%;
-    align-items:flex-end;
-  }
-  video:hover~#controls, #controls:hover {
-    visibility: visible;
-  }
-  .control-button {
-    width: 40px;
-    border-radius: 5px;
-    margin-bottom: 6px;
-    padding: 3px
-  }
-  .video-player-container {
-    position: relative;
-  }
-  .control-button svg {
-    fill: #c59cd0;
-    width: 40px;
-    margin-bottom: -6px;
-  }
-  #seekbar {
-    display: flex;
-    margin-left: 20px;
-    margin-right: 20px;
-    width: 100%;
-  }
-  input[id*="-slider"] {
-    flex-grow: 1;
-    -webkit-appearance: none;
-    appearance: none;
-    background: #ffffff;
-    border: 1px solid #000000;
-    margin-bottom: 23px;
-    cursor: pointer;
-    width: 0.5rem;
-    height: 5px !important;
-    display: block;
-    border-radius: 50px;
-  }
-  input[type=range]::-webkit-slider-thumb {
-    -webkit-appearance: none;
-    border: 1px solid #000000;
-    height: 21px;
-    width: 21px;
-    border-radius: 20px;
-    background: var(--div-gradient);
-    cursor: pointer;
-    box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
-  }
-  input[type=range]::-moz-range-thumb {
-    border: 1px solid #000000;
-    height: 21px;
-    width: 21px;
-    border-radius: 20px;
-    background: var(--div-gradient);
-    cursor: pointer;
-    box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
-  }
-  #timestamps {
-    margin-right: 40px;
-    text-shadow: 1px 1px 2px black;
-  }
-  html:fullscreen video {
-    display: block !important;
-    position: fixed !important;
-    top: 0 !important;
-    left: 0 !important;
-    width: 100vw !important;
-    height: 100vh !important;
-    z-index: 999999 !important;
-  }
-  html:fullscreen *:not(html, video, body, ptd-app-ejs, .app, .watch-page, .primary, .video-player-container, #popupMenu, #popupMenu *) {
-    visibility: hidden !important;
-  }
-  .error-card {
-    background-color: #823434aa;
-    margin: 30px;
-    padding: 5px 20px;
-    border: 2px solid red;
-    border-radius: 10px;
-  }
-  #buffer-failed-warning {
-    display: none;
-  }
-
+  
   .rainbow-gradient {
     background: linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet);
     -webkit-background-clip: text;
@@ -704,284 +616,7 @@ background-color: #0000;
   </style>
 </noscript>
 <script>
-  const qua = new URLSearchParams(new URL(window.location.href).search).get("quality") || "";
-  const playSVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>play-circle-outline</title><path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M10,16.5L16,12L10,7.5V16.5Z" /></svg>'
-  const pauseSVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>pause-circle-outline</title><path d="M13,16V8H15V16H13M9,16V8H11V16H9M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z" /></svg>'
-  function csts(seconds) {
-    var hours = Math.floor(seconds / 3600);
-    var minutes = Math.floor((seconds - (hours * 3600)) / 60);
-    var secs = Math.floor(seconds - (hours * 3600) - (minutes * 60));
-    if (hours === 0) {
-        var timeString = minutes.toString().padStart(2, '0') + ':' +
-          secs.toString().padStart(2, '0');
-    } else {
-        var timeString = hours.toString().padStart(2, '0') + ':' +
-          minutes.toString().padStart(2, '0') + ':' +
-          secs.toString().padStart(2, '0');
-    }
-    return timeString;
-}
-function cstsRemaining(totalTimeInSeconds, elapsedTimeInSeconds) {
-    var remainingSeconds = totalTimeInSeconds - elapsedTimeInSeconds;
-    var hours = Math.floor(remainingSeconds / 3600);
-    var minutes = Math.floor((remainingSeconds % 3600) / 60);
-    var secs = Math.floor(remainingSeconds % 60);
-
-    var timeString;
-    if (hours === 0) {
-        timeString = minutes.toString().padStart(2, '0') + ':' + secs.toString().padStart(2, '0');
-    } else {
-        timeString = hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0') + ':' + secs.toString().padStart(2, '0');
-    }
-
-    return '-' + timeString;
-}
-  function showErrorCard(e) {
-    try {
-      switch (e.target.error.code) {
-      case e.target.error.MEDIA_ERR_ABORTED:
-        return;
-        break;
-      case e.target.error.MEDIA_ERR_NETWORK:
-        document.querySelector("div p span").innerText = "(Network error)"
-        break;
-      case e.target.error.MEDIA_ERR_DECODE:
-        document.querySelector("div p span").innerText = "(Decode error/lack of browser support)"
-        break;
-      case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
-        document.querySelector("div p span").innerText = "(Network error or format not supported)"
-        break;
-      default:
-        document.querySelector("div p span").innerText = "(Unknown error)"
-        break;
-      } 
-    }
-    catch {
-      document.querySelector("div p span").innerText = "(Network error)"
-    }
-    document.getElementById("buffer-failed-warning").style.display = "block";
-  }
-  let canPlayPause = true;
-  let didFirstTimePlay = false;
-  document.addEventListener("DOMContentLoaded", () => {
-    setInterval(()=>{
-    if(!document.getElementById("video").paused) {
-      document.getElementById("play-pause").innerHTML = pauseSVG;
-      
-    }
-    else {
-      aud.pause()
-      document.getElementById("play-pause").innerHTML = playSVG;
-    }
-    }, 100);
-    //FIXME: saved playback intentionally overwritten
-    localStorage.setItem(`progress-${new URLSearchParams(window.location.search).get('v')}`, 0);
-    // Controls and high-res playback
-    //TODO - a
-    let setTime = false
-    const seekbar = document.getElementById("duration-slider")
-    const video = document.getElementById("video");
-    let shouldUseRemaining = false;
-    const timestamps = document.getElementById("timestamps");
-    video.addEventListener("timeupdate", (event) => {      
-      seekbar.value = event.target.currentTime;
-      timestamps.innerText = shouldUseRemaining ? `${cstsRemaining(video.duration, video.currentTime)}/${csts(video.duration)}` : `${csts(video.currentTime)}/${csts(video.duration)}`;
-    });
-    timestamps.addEventListener("mouseover", () => {
-      shouldUseRemaining = true;
-      timestamps.innerText = `${cstsRemaining(video.duration, video.currentTime)}/${csts(video.duration)}`;
-    });
-    timestamps.addEventListener("mouseout", () => {
-      shouldUseRemaining = false;
-      timestamps.innerText = `${csts(video.currentTime)}/${csts(video.duration)}`;
-    });
-    // test
-    
-      seekbar.addEventListener("input", (event) => {
-          video.pause()
-          canPlayPause = false;
-          if(qua != "medium") {
-            aud.pause()
-            aud.currentTime = event.target.value
-          }
-          video.currentTime = event.target.value
-          canPlayPause = true;
-          setTimeout(()=>{
-            video.play();
-            aud.play();
-          }, 200)
-      });
-      
-      // Play/Pause
-      
-      const playPauseButton = document.getElementById("play-pause");
-      playPauseButton.innerHTML = pauseSVG;
-      function toggleVideo() {    
-        if(!canPlayPause) return;
-          if(document.getElementById("popupMenu").style.display == "none") {
-            if(!document.fullscreen) {
-              if(!video.paused) {
-              video.pause(); if(qua != "medium") { aud.pause(); } playPauseButton.innerHTML = playSVG;
-            }
-            else {
-              video.play(); if(qua != "medium") { aud.play(); } playPauseButton.innerHTML = pauseSVG;
-            }
-            }
-          }
-          else {
-            document.getElementById("popupMenu").style.display = "none"
-          } 
-      }
-      playPauseButton.addEventListener("click", () => {
-        toggleVideo()
-      });
-      video.addEventListener("pause", ()=>{if(qua != "medium") {aud.pause()}});
-      video.addEventListener("play", ()=>{if(qua != "medium") {aud.play()}})
-      video.addEventListener("click", toggleVideo);
-      video.addEventListener("dblclick", () => { 
-        document.documentElement.requestFullscreen();
-      });
-      function handleVolumeChange(element) {
-        switch (element.volume) {
-          case 1:
-            element.volume = 0;
-            document.querySelector("#muteOption #new").innerText = "25%"
-            document.querySelector("#muteOption #current").innerText = "0%"
-            break;
-          case 0:
-            element.volume = 0.25;
-            document.querySelector("#muteOption #new").innerText = "50%"
-            document.querySelector("#muteOption #current").innerText = "25%"
-            break;
-          case 0.25:
-            element.volume = 0.5;
-            document.querySelector("#muteOption #new").innerText = "75%"
-            document.querySelector("#muteOption #current").innerText = "50%"
-            break;
-          case 0.5:
-            element.volume = 0.75;
-            document.querySelector("#muteOption #new").innerText = "100%"
-            document.querySelector("#muteOption #current").innerText = "75%"
-            break;
-          case 0.75:
-            element.volume = 1;
-            document.querySelector("#muteOption #new").innerText = "0%"
-            document.querySelector("#muteOption #current").innerText = "100%"
-            break;
-          default:
-            element.volume = 1;
-            document.querySelector("#muteOption #new").innerText = "0%"
-            document.querySelector("#muteOption #current").innerText = "100%"
-            break;
-        }
-      }
-      document.getElementById("muteOption").addEventListener("click", () => {
-        if(qua != "medium") { 
-          handleVolumeChange(aud)
-        }
-        else {
-          handleVolumeChange(video)
-        }
-      });
-      document.getElementById("syncOption").addEventListener("click", () => {
-        aud.pause(); video.pause();  playPauseButton.innerHTML = playSVG;
-        video.currentTime > aud.currentTime ? aud.currentTime = video.currentTime : video.currentTime = aud.currentTime;
-        playPauseButton.innerHTML = pauseSVG;
-      });
-      setTimeout(()=>{
-           if(!didFirstTimePlay) {
-            video.addEventListener("seeked", (event) => {
-          setTimeout(()=>{
-              canPlayPause = true;
-              if(video.currentTime==0||aud.currentTime==0) return;
-              video.pause(); aud.pause(); playPauseButton.innerHTML = playSVG;
-              },1)
-           });
-          aud.addEventListener("seeked", (event) => {
-            setTimeout(()=>{
-              if(video.currentTime==0||aud.currentTime==0) return;
-              video.pause(); aud.pause(); playPauseButton.innerHTML = playSVG;
-            },1)
-          });
-          didFirstTimePlay = true;
-           }
-          },100)
-      document.addEventListener("fullscreenchange", function() {
-        if(document.fullscreen) {
-          video.controlsList = "noplaybackrate nodownload"
-          window.onscroll = function () { window.scrollTo(0, 0); };
-          document.documentElement.style.overflow = "hidden"
-          video.controls = true;
-        }
-        if(!document.fullscreen) {
-          video.controlsList = ""
-          window.onscroll = null;
-          document.documentElement.style.overflow = null
-          video.controls = false;
-        }
-      });
-      video.addEventListener("fullscreenchange", () => {
-        video.fullscreen = false;
-        document.exitFullscreen();
-      });
-      video.addEventListener("contextmenu", (event) => {
-        if(document.fullscreen) {
-          event.preventDefault()
-          const popupMenu = document.getElementById('popupMenu');
-          if (popupMenu) {
-            const xPosition = event.clientX + window.pageXOffset;
-            const yPosition = event.clientY + window.pageYOffset;
-            popupMenu.style.left = `${xPosition}px`;
-            popupMenu.style.top = `${yPosition}px`;
-          }
-          popupMenu.style.display = "block"
-        }
-      });
-    function startPlayback() {
-        // Final prepare
-        seekbar.max = video.duration
-        const timestamps = document.getElementById("timestamps");
-        timestamps.innerText = `${csts(video.currentTime)}/${csts(video.duration)}`;
-        
-        // Show controls
-        try {
-          playPauseButton.innerHTML = pauseSVG;
-          vid.play();
-          aud.play();
-          didFirstTimePlay = true;
-          
-        }
-        catch {}
-        
-        if(!setTime) {
-          //FIXME: saved playback intentionally overwritten
-          aud.currentTime = 0
-          vid.currentTime = 0
-          seekbar.value = 0
-          setTime = true
-        }
-        setTimeout(()=>{
-      video.addEventListener("seeking", (event) => {     
-      if(!didFirstTimePlay) return; 
-      if(qua != "medium") {
-        video.pause()
-        canPlayPause = false;
-        aud.pause()
-        aud.currentTime = event.target.currentTime
-      }
-    });
-    }, 500)
-    }
-    const aud = document.getElementById("aud");
-    const vid = document.getElementById("video");
-    function shouldPlay() {
-      if(vid.readyState === HTMLMediaElement.HAVE_ENOUGH_DATA) {
-        startPlayback();
-      }
-    }
-    aud.addEventListener("canplaythrough", shouldPlay);
-    vid.addEventListener("canplaythrough", shouldPlay);
-  })
+  
 </script>
          <% if(shortsui) { %>
                                                        <script>
@@ -1262,7 +897,7 @@ if your domain matches this code you are probably in poketube.fun owo:3
 <div class="video-title" style="color:var(--text-color);font-family:var(--text-font-primary);;font-weight:var(--text-header-weight);font-stretch: extra-expanded;margin-top: 0px;margin-bottom: -3px;font-size: larger;line-height: 20.7px;text-align: center;">Options</div>
         				<a href="/customize" style="text-decoration: none;" class="dropdown__item">
                             <i  class="fa-light fa-brush"></i>
-                      Customize PokeTube
+                      Customize Poke
         </a>
     
 		<a href="/account-create" style="text-decoration: none;" class="dropdown__item">
@@ -1413,13 +1048,7 @@ Offical Discord Server! :3
     
 		<div id="<%=sha384(inv_vid.videoId)%>" class="video-player-container">
       
-      <% if (!qua) { //TODO - a %>
-        <audio id="aud" preload>
-          <source src="<%=u%>/latest_version?id=<%=inv_vid.videoId%>&itag=140&local=true" type="video/mp4" onerror="showErrorCard(event)"/>
-        </audio>
-      <% } else { %>
-        <audio id="aud"></audio>
-      <% } %>
+   
       <noscript>
         <% if (!qua) { %>
           <div id="nojs-high-res-warning" class="error-card">
@@ -1436,7 +1065,7 @@ Offical Discord Server! :3
           <span></span>
         </p>
       </div>
-      <video class="player video-ambient-container" id="video" style="border-radius: 16px; box-sizing: border-box; min-width: 100%; display: block;" autoplay preload onerror="showErrorCard(event)">
+      <video class="video-js player video-ambient-container" id="video" style="border-radius: 16px; box-sizing: border-box; min-width: 100%; display: block;" autoplay preload">
       <% if (isvidious) { %>
         <% if (!qua) { %>
 <% 
@@ -1447,7 +1076,14 @@ Offical Discord Server! :3
     }
   });
 %>
-<source src="<%=u%>/latest_version?id=<%=inv_vid.videoId%>&itag=<%=itag%>&local=true" type="video/mp4; codecs=&quot;avc1.64001F, mp4a.40.2&quot;" label="hd720" selected="true" onerror="showErrorCard(event)">
+<source src="<%=u%>/latest_version?id=<%=inv_vid.videoId%>&itag=<%=itag%>&local=true" type="video/mp4; codecs=&quot;avc1.64001F, mp4a.40.2&quot;" label="hd720" selected="true"">
+   <% if (!qua) { //TODO - a %>
+          <source src="<%=u%>/latest_version?id=<%=inv_vid.videoId%>&itag=140&local=true" type="video/mp4" />
+      <% } else { %>
+      <% } %>   
+   
+   
+   
         <% } %>
         <% if (qua === "medium") { %>
           <source src="<%=u%>/latest_version?id=<%=inv_vid.videoId%>&itag=18&local=true" type="video/mp4; codecs=&quot;avc1.64001F, mp4a.40.2&quot;" label="sd360" selected="true" onerror="showErrorCard(event)">