window.addEventListener("load", () => main()); const main = () => { // Video folder const videoFolder = "./videos"; // TODO: Use JSON instead of hardcoded objects // 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], }; // Main Element who will receive the videos const mainElement = document.getElementsByTagName("main").item(0); // 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 const firstVideo = 1; const source = document.createElement("source"); source.type = `video/${videos[firstVideo][1]}`; currentVideo.appendChild(source); mainElement.appendChild(currentVideo); updateVideo(videoFolder, videos, tree, source, firstVideo); // TODO: Remove the current video and the buttons // TODO: Add function who go to the next video (used by the button's listener) }; /** * 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); } };