Support for media keys - next and prev track

This commit is contained in:
unknown
2025-11-10 16:14:40 +10:00
parent 9a4d849bb9
commit fc275cca69
2 changed files with 5 additions and 5 deletions

View File

@@ -3683,14 +3683,14 @@
}
}
// Prev video (shift+p)
else if (keyPressed === 'p' && event.shiftKey) {
// Prev video ("shift+p" or "media track previous")
else if ((keyPressed === 'p' && event.shiftKey) || keyPressed === 'mediatrackprevious') {
// Tell the top window to go to the previous video
window.top.postMessage('goodTube_prevVideo', '*');
}
// Next video (shift+n)
else if (keyPressed === 'n' && event.shiftKey) {
// Next video ("shift+n" or "media track next")
else if ((keyPressed === 'n' && event.shiftKey) || keyPressed === 'mediatracknext') {
// Tell the top window to go to the next video
window.top.postMessage('goodTube_nextVideo', '*');
}

2
goodtube.min.js vendored
View File

@@ -823,7 +823,7 @@
}
`),e.textContent=t,document.head.appendChild(e)}function ti(){let e=document.querySelector(".ytp-prev-button");e&&!e.classList.contains("goodTube_visible")&&e.classList.add("goodTube_visible")}function Pa(){let e=document.querySelector(".ytp-prev-button");e&&e.classList.contains("goodTube_visible")&&e.classList.remove("goodTube_visible")}let oi=setTimeout(()=>{},0);function ii(){if(!document.querySelector(".ytp-play-button")){clearTimeout(oi),oi=setTimeout(ii,100);return}let t=document.querySelector(".ytp-prev-button");t&&t.addEventListener("click",function(){window.top.postMessage("goodTube_prevVideo","*")});let i=document.querySelector(".ytp-next-button");i&&i.addEventListener("click",function(){window.top.postMessage("goodTube_nextVideo","*")});let a=document.querySelector(".ytp-size-button");a&&(a.setAttribute("data-tooltip-target-id","ytp-size-button"),a.setAttribute("data-title-no-tooltip","Theater mode (t)"),a.setAttribute("aria-label","Theater mode (t)"),a.setAttribute("title","Theater mode (t)"),a.setAttribute("data-tooltip-title","Theater mode (t)"),We(a,`
<svg height="100%" version="1.1" viewBox="0 0 36 36" width="100%"><use class="ytp-svg-shadow" xlink:href="#ytp-id-30"></use><path d="m 28,11 0,14 -20,0 0,-14 z m -18,2 16,0 0,10 -16,0 0,-10 z" fill="#fff" fill-rule="evenodd" id="ytp-id-30"></path></svg>
`),a.addEventListener("click",function(){window.top.postMessage("goodTube_theater","*")}));let l=document.querySelector(".ytp-subtitles-button");if(l){ca(l,"beforebegin",'<button class="ytp-button ytp-autonav-toggle" id="goodTube_autoplayButton"><div class="ytp-autonav-toggle-button-container"><div class="ytp-autonav-toggle-button" aria-checked="'+v.goodTube_autoplay+'"></div></div></button>');let u=document.querySelector("#goodTube_autoplayButton");u&&u.addEventListener("click",function(){let m=u.querySelector(".ytp-autonav-toggle-button");m.getAttribute("aria-checked")==="true"?(m.setAttribute("aria-checked","false"),window.top.postMessage("goodTube_autoplay_false","*")):(m.setAttribute("aria-checked","true"),window.top.postMessage("goodTube_autoplay_true","*"))})}}let ai=setTimeout(()=>{},0);function ni(){let e=document.querySelector("#movie_player video");if(!e){clearTimeout(ai),ai=setTimeout(ni,100);return}e.addEventListener("ended",function(){bi(!0),window.top.postMessage("goodTube_videoEnded","*")})}function za(){document.addEventListener("keydown",function(e){if(e.ctrlKey||e.altKey||e.metaKey||y)return;let t=e.key.toLowerCase();if(t==="t"&&window.top.postMessage("goodTube_theater","*"),t==="i"){let i=document.querySelector(".ytp-pip-button");i&&q(i)}else t==="p"&&e.shiftKey?window.top.postMessage("goodTube_prevVideo","*"):t==="n"&&e.shiftKey&&window.top.postMessage("goodTube_nextVideo","*")})}let ee=setTimeout(()=>{},0),Z=!1,de=-1,le=!1,se=!1,ue=!1,g=document.querySelector("video"),S=document.querySelector(".goodTube_doubleSpeed");function Yt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(y)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),Z)||le)return;le=!0,de=s.getPlaybackRate(),clearTimeout(ee),ee=setTimeout(()=>{s.setPlaybackRate(2),s.playVideo(),S.style.display="block",Z=!0},1e3)}}function Gt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(y)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;e.preventDefault(),e.stopImmediatePropagation()}}function Qt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(y)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;clearTimeout(ee),Z?(s.setPlaybackRate(de),S.style.display="none",Z=!1):(g=document.querySelector("video"),ue=!0,q(g),ue=!1),le=!1,e.preventDefault(),e.stopImmediatePropagation()}}function _e(e){if(e.button===0&&!ue&&!y){if(le){e.preventDefault(),e.stopImmediatePropagation();return}se=!0,e.preventDefault(),e.stopImmediatePropagation(),de=s.getPlaybackRate(),clearTimeout(ee),ee=setTimeout(()=>{s.setPlaybackRate(2),s.playVideo(),S.style.display="block",Z=!0},1e3)}}function jt(e){ue||y||(e.preventDefault(),e.stopImmediatePropagation())}function he(e){if(e.button===0&&!ue&&!y){if(le){e.preventDefault(),e.stopImmediatePropagation();return}clearTimeout(ee),Z?(s.setPlaybackRate(de),S.style.display="none",Z=!1):(g=document.querySelector("video"),ue=!0,q(g),ue=!1,setTimeout(g.focus())),se=!1,e.preventDefault(),e.stopImmediatePropagation()}}function Te(e){if(!y){if(le){e.preventDefault(),e.stopImmediatePropagation();return}e.preventDefault(),e.stopImmediatePropagation(),clearTimeout(ee),Z&&(s.setPlaybackRate(de),S.style.display="none",Z=!1),se=!1}}let dt=setTimeout(()=>{},0);function xe(){if(clearTimeout(ee),Z=!1,le=!1,se=!1,g=document.querySelector("video"),S=document.querySelector(".goodTube_doubleSpeed"),y){document.removeEventListener("keydown",Yt,!0),document.removeEventListener("keypress",Gt,!0),document.removeEventListener("keyup",Qt,!0),g&&(g.removeEventListener("mousedown",_e,!0),g.removeEventListener("touchstart",_e,!0),g.removeEventListener("click",jt,!0),g.removeEventListener("mouseup",he,!0),g.removeEventListener("touchend",he,!0),g.removeEventListener("mouseout",Te,!0),g.removeEventListener("touchcancel",Te,!0)),S&&(S.style.display="none");return}if(!g){clearTimeout(dt),dt=setTimeout(xe,100);return}if(s=document.getElementById("movie_player"),!s||typeof s.getPlaybackRate!="function"||typeof s.setPlaybackRate!="function"||typeof s.playVideo!="function"){clearTimeout(dt),dt=setTimeout(xe,100);return}if(de=s.getPlaybackRate(),s.setPlaybackRate(de),S)S.style.display="none";else{S=document.createElement("div"),S.classList.add("goodTube_doubleSpeed"),S.style.position="relative",S.style.zIndex="999",S.style.display="none",We(S,`
`),a.addEventListener("click",function(){window.top.postMessage("goodTube_theater","*")}));let l=document.querySelector(".ytp-subtitles-button");if(l){ca(l,"beforebegin",'<button class="ytp-button ytp-autonav-toggle" id="goodTube_autoplayButton"><div class="ytp-autonav-toggle-button-container"><div class="ytp-autonav-toggle-button" aria-checked="'+v.goodTube_autoplay+'"></div></div></button>');let u=document.querySelector("#goodTube_autoplayButton");u&&u.addEventListener("click",function(){let m=u.querySelector(".ytp-autonav-toggle-button");m.getAttribute("aria-checked")==="true"?(m.setAttribute("aria-checked","false"),window.top.postMessage("goodTube_autoplay_false","*")):(m.setAttribute("aria-checked","true"),window.top.postMessage("goodTube_autoplay_true","*"))})}}let ai=setTimeout(()=>{},0);function ni(){let e=document.querySelector("#movie_player video");if(!e){clearTimeout(ai),ai=setTimeout(ni,100);return}e.addEventListener("ended",function(){bi(!0),window.top.postMessage("goodTube_videoEnded","*")})}function za(){document.addEventListener("keydown",function(e){if(e.ctrlKey||e.altKey||e.metaKey||y)return;let t=e.key.toLowerCase();if(t==="t"&&window.top.postMessage("goodTube_theater","*"),t==="i"){let i=document.querySelector(".ytp-pip-button");i&&q(i)}else t==="p"&&e.shiftKey||t==="mediatrackprevious"?window.top.postMessage("goodTube_prevVideo","*"):(t==="n"&&e.shiftKey||t==="mediatracknext")&&window.top.postMessage("goodTube_nextVideo","*")})}let ee=setTimeout(()=>{},0),Z=!1,de=-1,le=!1,se=!1,ue=!1,g=document.querySelector("video"),S=document.querySelector(".goodTube_doubleSpeed");function Yt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(y)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),Z)||le)return;le=!0,de=s.getPlaybackRate(),clearTimeout(ee),ee=setTimeout(()=>{s.setPlaybackRate(2),s.playVideo(),S.style.display="block",Z=!0},1e3)}}function Gt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(y)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;e.preventDefault(),e.stopImmediatePropagation()}}function Qt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(y)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;clearTimeout(ee),Z?(s.setPlaybackRate(de),S.style.display="none",Z=!1):(g=document.querySelector("video"),ue=!0,q(g),ue=!1),le=!1,e.preventDefault(),e.stopImmediatePropagation()}}function _e(e){if(e.button===0&&!ue&&!y){if(le){e.preventDefault(),e.stopImmediatePropagation();return}se=!0,e.preventDefault(),e.stopImmediatePropagation(),de=s.getPlaybackRate(),clearTimeout(ee),ee=setTimeout(()=>{s.setPlaybackRate(2),s.playVideo(),S.style.display="block",Z=!0},1e3)}}function jt(e){ue||y||(e.preventDefault(),e.stopImmediatePropagation())}function he(e){if(e.button===0&&!ue&&!y){if(le){e.preventDefault(),e.stopImmediatePropagation();return}clearTimeout(ee),Z?(s.setPlaybackRate(de),S.style.display="none",Z=!1):(g=document.querySelector("video"),ue=!0,q(g),ue=!1,setTimeout(g.focus())),se=!1,e.preventDefault(),e.stopImmediatePropagation()}}function Te(e){if(!y){if(le){e.preventDefault(),e.stopImmediatePropagation();return}e.preventDefault(),e.stopImmediatePropagation(),clearTimeout(ee),Z&&(s.setPlaybackRate(de),S.style.display="none",Z=!1),se=!1}}let dt=setTimeout(()=>{},0);function xe(){if(clearTimeout(ee),Z=!1,le=!1,se=!1,g=document.querySelector("video"),S=document.querySelector(".goodTube_doubleSpeed"),y){document.removeEventListener("keydown",Yt,!0),document.removeEventListener("keypress",Gt,!0),document.removeEventListener("keyup",Qt,!0),g&&(g.removeEventListener("mousedown",_e,!0),g.removeEventListener("touchstart",_e,!0),g.removeEventListener("click",jt,!0),g.removeEventListener("mouseup",he,!0),g.removeEventListener("touchend",he,!0),g.removeEventListener("mouseout",Te,!0),g.removeEventListener("touchcancel",Te,!0)),S&&(S.style.display="none");return}if(!g){clearTimeout(dt),dt=setTimeout(xe,100);return}if(s=document.getElementById("movie_player"),!s||typeof s.getPlaybackRate!="function"||typeof s.setPlaybackRate!="function"||typeof s.playVideo!="function"){clearTimeout(dt),dt=setTimeout(xe,100);return}if(de=s.getPlaybackRate(),s.setPlaybackRate(de),S)S.style.display="none";else{S=document.createElement("div"),S.classList.add("goodTube_doubleSpeed"),S.style.position="relative",S.style.zIndex="999",S.style.display="none",We(S,`
<div class="ytp-overlay ytp-speedmaster-overlay" data-layer="4">
<div class="ytp-speedmaster-user-edu ytp-speedmaster-has-icon">
<div class="ytp-speedmaster-label">2x</div>