This repository has been archived on 2022-11-21. You can view files and clone it, but cannot push or open issues or pull requests.
vidarousel/js/main.js

109 lines
3.4 KiB
JavaScript
Raw Normal View History

2022-11-21 09:50:37 +01:00
window.addEventListener("load", () => main());
const main = () => {
2022-11-21 10:44:10 +01:00
// Video folder
const videoFolder = "./videos";
2022-11-21 21:26:28 +01:00
// TODO: Use JSON instead of hardcoded objects
2022-11-21 10:44:10 +01:00
// Video list, as a list of ["filename", "extension"]
const videos = {
1: ["nameOfFirstVideo", "mp4"],
2: ["nameOfSecondVideo", "mp4"],
3: ["nameOfThirdVideo", "mp4"],
4: ["nameOfFourthVideo", "mp4"],
};
/* Add option for each videos
* For example:
* {
* 1: [2],
* 2: [3, 4]
* };
*
* The video 1 offer the option to redirect to the video 2
* The video 2 offer the option to redirect to the video 3 and 4 */
const tree = {
1: [2],
2: [3, 4],
2022-11-21 09:50:37 +01:00
};
2022-11-21 10:44:10 +01:00
// Main Element who will receive the videos
2022-11-21 09:50:37 +01:00
const mainElement = document.getElementsByTagName("main").item(0);
2022-11-21 10:44:10 +01:00
// Current video showed to the user
let currentVideo;
// Add property to the player
currentVideo = document.createElement("video");
currentVideo.controls = true;
currentVideo.width = window.innerWidth - window.innerWidth / 4;
currentVideo.style = "\
display: block; \
margin: auto;";
// Init the page with the first video
2022-11-21 21:26:28 +01:00
const firstVideo = 1;
2022-11-21 10:44:10 +01:00
const source = document.createElement("source");
2022-11-21 21:26:28 +01:00
source.type = `video/${videos[firstVideo][1]}`;
2022-11-21 10:44:10 +01:00
currentVideo.appendChild(source);
mainElement.appendChild(currentVideo);
2022-11-21 21:26:28 +01:00
updateVideo(videoFolder, videos, tree, source, firstVideo);
2022-11-21 10:44:10 +01:00
// TODO: Remove the current video and the buttons
// TODO: Add function who go to the next video (used by the button's listener)
2022-11-21 21:26:28 +01:00
};
2022-11-21 10:44:10 +01:00
2022-11-21 21:26:28 +01:00
/**
* Remove all buttons from an HTMLElement
* @param {HTMLElement } parentButtons Parent element of the buttons
*/
const removeButtons = (parentButtons) => {
const buttons = parentButtons.getElementsByTagName("button");
for (let index = 0; index < buttons.length; index++) {
parentButtons.removeChild(buttons[index]);
}
};
/**
* Update the video and the buttons
* @param {string} videoFolder Directory's name who contains videos
* @param {{number: string[]}} videosList List of videos filenames
* @param {{int: int[]}} tree List of all the videos from videosList with the next possibles choices from the video
* @param {HTMLSourceElement} source Current video
* @param {number} newVideoId Video ID to add to the main element
*/
const updateVideo = (videoFolder, videosList, tree, source, newVideoId) => {
const mainElement = source.parentElement.parentElement;
source.src = `${videoFolder}/${videosList[newVideoId][0]}.${videosList[newVideoId][1]}`;
if (tree[newVideoId]) {
tree[newVideoId].forEach((nextVideoId, counter) => {
const button = document.createElement("button");
// TODO: Add custom label for the button redirection
const textButton = "Choix n°";
button.textContent = textButton + counter;
button.addEventListener("click", () => {
// Remove older buttons
removeButtons(mainElement);
// Update with the new video
updateVideo(videoFolder, videosList, tree, source, nextVideoId);
});
mainElement.appendChild(button);
});
} else {
removeButtons(mainElement);
const endText = document.createElement("h2");
endText.innerText = "Merci d'avoir regardé !";
mainElement.appendChild(endText);
}
2022-11-21 10:45:29 +01:00
};