2024-12-19 18:49:09 -06:00

125 lines
4.8 KiB
JavaScript
Executable File

export default (modules, q, qa) => {
let self = {
vidContainer: q(".video-container-inner")
}
// Load thumb stream when ready
if (modules.globals.awaitingThumb) {
const hoverTimeVideo = q(".videoControls .timeline .hoverTimeContainer .hoverTimeVideo")
modules.cacheInfo.pingCache(`${modules.globals.data.videoId}-thumb`, () => hoverTimeVideo.setAttribute("src", `/getVideo?v=${data.videoId}&q=thumb&dl=1`), 1000 * 2)
}
// Doing it this way allows sponsorblock popup to display in fullscreen.
function onFS() {
if (!document.fullscreen) {
modules.globals.video.parentNode.parentNode.classList.remove("fullscreen")
modules.controls.fullscreenBtn.classList.remove("active")
} else {
modules.globals.video.parentNode.parentNode.classList.add("fullscreen")
modules.controls.fullscreenBtn.classList.add("active")
}
}
modules.globals.video.parentNode.parentNode.addEventListener("fullscreenchange", onFS)
modules.globals.video.parentNode.parentNode.addEventListener("webkitfullscreenchange", onFS)
modules.globals.video.parentNode.parentNode.addEventListener("mozfullscreenchange", onFS)
modules.globals.video.parentNode.parentNode.addEventListener("msfullscreenchange", onFS)
self.vidContainer.addEventListener("click", event => {
event.preventDefault()
self.togglePlaying()
})
self.vidContainer.addEventListener("dblclick", event => {
event.preventDefault()
self.toggleFullScreen()
})
modules.globals.video.addEventListener("contextmenu", event => event.preventDefault())
self.vidContainer.addEventListener("contextmenu", event => event.preventDefault())
self = {
...self,
startingTime: modules.globals.videoPath.split("#t=npt:")[1] ?? 0,
videoLength: modules.globals.data.lengthSeconds,
lastPlaying: modules.globals.video.hasAttribute("autoplay"),
lastTrack: modules.globals.video.textTracks[0],
relativeSeek: seconds => {
// Also show video controls and volume bar
modules.controls.hideControls(true)
modules.globals.video.currentTime += seconds
},
togglePlaying: () => {
// Also show video controls and volume bar
modules.controls.hideControls(true)
if (modules.globals.video.paused) modules.globals.video.play()
else modules.globals.video.pause()
self.lastPlaying = !modules.globals.video.paused
},
toggleFullScreen: () => {
if (document.fullscreen) document.exitFullscreen()
else modules.globals.video.parentNode.parentNode.requestFullscreen()
},
keydown: event => {
if (["INPUT", "SELECT", "BUTTON"].includes(event.target.tagName)) return
if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) return
let caught = true
if (event.key === "j" || event.key === "n") {
self.relativeSeek(-10)
} else if (["k", "p", " ", "e"].includes(event.key)) {
self.togglePlaying()
} else if (event.key === "l" || event.key === "o") {
self.relativeSeek(10)
} else if (event.key === "ArrowLeft") {
self.relativeSeek(-5)
} else if (event.key === "ArrowRight") {
self.relativeSeek(5)
} else if (modules.globals.video.paused && event.key == ",") {
self.relativeSeek(-1 / 30)
} else if (modules.globals.video.paused && event.key == ".") {
self.relativeSeek(1 / 30)
} else if (event.key >= "0" && event.key <= "9") {
// Also show video controls and volume bar
modules.controls.hideControls(true)
modules.globals.video.currentTime = modules.globals.video.duration * (+event.key) / 10
} else if (event.key === "f") {
self.toggleFullScreen()
} else if (event.key === "c") {
if (self.lastTrack.mode == "showing")
modules.controls.clickCaptionBtn(q(`.videoControls .settingsPopout .settingsPage[data-name='cc'] .setting.caption[data-label="Off"]`))
else
modules.controls.clickCaptionBtn(q(`.videoControls .settingsPopout .settingsPage[data-name='cc'] .setting.caption[data-label="${self.lastTrack.label}"]`))
} else if (event.key === "m") {
modules.globals.video.muted = !modules.globals.video.muted
} else if (event.key == "Home") {
// Also show video controls and volume bar
modules.controls.hideControls(true)
modules.globals.video.currentTime = 0
} else if (event.key == "End") {
// Also show video controls and volume bar
modules.controls.hideControls(true)
modules.globals.video.currentTime = self.videoLength
} else if (event.key == "ArrowDown") {
modules.volume.setVolume(modules.volume.currentVolume - 0.05)
modules.controls.hideControls(true)
modules.controls.hideVolume(true)
} else if (event.key == "ArrowUp") {
modules.volume.setVolume(modules.volume.currentVolume + 0.05)
modules.controls.hideControls(true)
modules.controls.hideVolume(true)
} else {
caught = false
}
if (caught) event.preventDefault()
}
}
modules.globals.video.currentTime = self.startingTime
document.addEventListener("keydown", self.keydown)
return self
}