mirror of
				https://codeberg.org/ashley/poke
				synced 2025-07-17 16:52:11 +00:00 
			
		
		
		
	1a
This commit is contained in:
		
							parent
							
								
									63af6b4abf
								
							
						
					
					
						commit
						deeec99d62
					
				| @ -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="avc1.64001F, mp4a.40.2"" label="hd720" selected="true" onerror="showErrorCard(event)"> | ||||
| <source src="<%=u%>/latest_version?id=<%=inv_vid.videoId%>&itag=<%=itag%>&local=true" type="video/mp4; codecs="avc1.64001F, mp4a.40.2"" 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="avc1.64001F, mp4a.40.2"" label="sd360" selected="true" onerror="showErrorCard(event)"> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 ashley
						ashley