const video = document.getElementById("video");
const videoParent = document.getElementById("video-parent");
const videoSection = document.getElementById("video-section");
const videoControlsProgress = document.getElementById("video-controls-progress");
const videoControlsPlay = document.getElementById("video-controls-play");
const videoControlsVolume = document.getElementById("video-controls-mutetoggle");
const videoControlsMaximise = document.getElementById("video-controls-maximise");
const videoControlsTimeCurrent = document.getElementById("video-controls-currenttime");
const videoControlsTimeTotal = document.getElementById("video-controls-totaltime");
let videoPlaying = false;
let audioEnabled = true;
let videoMaximised = false;
function toggleVideo() {
if (videoPlaying) {
videoPlaying = false;
videoControlsPlay.innerHTML = ``;
video.pause();
} else {
videoPlaying = true;
videoControlsPlay.innerHTML = ``;
video.play();
}
}
function videoUpdate() {
videoControlsProgress.value = video.currentTime / video.duration;
videoControlsTimeCurrent.innerHTML = secondsToFormatted(video.currentTime);
updateSlider();
}
function updateSlider() {
const value = (videoControlsProgress.value - videoControlsProgress.min) / (videoControlsProgress.max - videoControlsProgress.min) * 100;
videoControlsProgress.style.background = `linear-gradient(to right, var(--accent1) 0%, var(--accent2) ${value}%, #ddd ${value}%, #ddd 100%)`;
}
function seekVideo() {
updateSlider();
const time = videoControlsProgress.value * video.duration;
video.currentTime = time;
}
function toggleAudio() {
if (audioEnabled) {
audioEnabled = false;
videoControlsVolume.innerHTML = ``;
video.muted = true;
} else {
audioEnabled = true;
videoControlsVolume.innerHTML = ``;
video.muted = false;
}
}
function toggleMaximisation() {
if (videoMaximised) {
videoMaximised = false;
videoControlsMaximise.innerHTML = ``;
videoParent.classList.remove("video-fullscreen");
videoSection.appendChild(videoParent);
document.exitFullscreen();
} else {
videoMaximised = true;
videoControlsMaximise.innerHTML = ``;
videoParent.classList.add("video-fullscreen");
document.body.appendChild(videoParent);
document.documentElement.requestFullscreen();
}
}
function secondsToFormatted(seconds) {
seconds = Math.round(seconds);
let hours = seconds / 3600;
let hoursMod = seconds % 3600; // in seconds
let minutes = hoursMod / 60;
let secs = hoursMod % 60;
if (hours >= 1) {
return `${Math.floor(hours)}:${Math.floor(minutes).toString().padStart(2, "0")}:${Math.floor(secs).toString().padStart(2, "0")}`;
} else {
return `${Math.floor(minutes).toString().padStart(2, "0")}:${Math.floor(secs).toString().padStart(2, "0")}`
}
}
videoControlsProgress.value = 0;
updateSlider();
video.addEventListener("loadeddata", function () {
videoControlsTimeTotal.innerHTML = `/${secondsToFormatted(video.duration)}`
});
videoControlsProgress.addEventListener("input", seekVideo);
videoControlsPlay.addEventListener("click", toggleVideo);
videoControlsVolume.addEventListener("click", toggleAudio);
videoControlsMaximise.addEventListener("click", toggleMaximisation);
video.addEventListener("timeupdate", videoUpdate);