/** * Web Deck Player v1.0 - script file * * Welcome to the script file! * * CONTENTS: * 1. Playlists Array * 2. Initial Playlist * 3. Themes * 4. Current Theme */ /** * [1. PLAYLISTS ] * Here are the Youtube Playlists that will be available to play. To add a new one, * first make sure that your playlist is set to 'Hidden' or 'Public' in Youtube. * * Then, look for the URL (for example: https://www.youtube.com/playlist?list=PLZyqOyXxaVETqpHhT_c5GPmAPzhJpJ5K7) * and copy only the part after 'list=' (for example: PLZyqOyXxaVETqpHhT_c5GPmAPzhJpJ5K7). * Finally, write a name for your playlist and paste the code you copied in the list below. * * You can also delete the lists that you don't want. */ var myPlaylists = { "90s HITS": 'PLZyqOyXxaVETqpHhT_c5GPmAPzhJpJ5K7', "00s HITS": 'PL69714D95619E327E', "VAPORWAVE": 'PLSChV4T8EDb9TZsLO23Tsj6-UUyAXtGg5', //"ANOTHER PLAYLIST": 'PLZyqOyXxaVETqpHhT_c5GPmAPzhJpJ5K7', }; /** * [2. INITIAL PLAYLIST ] * The first playlist that the player will load on startup. You may change it by * writing the name of the new playlist below. */ var currentPlaylist = "90s HITS"; /** * [3. THEMES] * Themes are a great way to customize the look of your player! Refer to the website * instructions to get new themes or to know how can you create yours. Then, you may * add them to the list below using the format ( "THEME NAME": 'theme-folder-name' ). * * You can also delete the themes that you don't want. */ var myThemes = { "DEFAULT": 'default', "SILVER": 'silver', "VIOLET": "violet", "MINIMAL": "minimal", "RED GRUNGE": "red-grunge", //"ANOTHER THEME": 'another-theme', }; /** * [4. CURRENT THEME] * Set the theme of your player writing its name below. */ var currentTheme = "DEFAULT"; // ===== END OF CONFIGURATION ===== document.getElementById("player-theme").setAttribute("href", "./themes/"+ myThemes[currentTheme] + "/webdeck-player.css"); var tag = document.createElement('script'); tag.src = "https://www.youtube.com/iframe_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; var songLabel = document.getElementById("songLabel"); var statusLabel = document.getElementById("statusLabel"); var statusLabelInterval; var savedVolume = 50; var volumeButton = document.getElementById("volumeButton"); volumeButton.innerHTML = ""; var volumeBar = document.getElementById("volumeBar"); var isSlidingVolumeBar = false; var videoButton = document.getElementById("videoButton"); var isVideoShowing = true; var logo = document.getElementById("playerLogo"); logo.innerHTML = ""; var seekBar = document.getElementById("seekBar"); var isSlidingSeekBar = false; var prevButton = document.getElementById("prevButton"); var playButton = document.getElementById("playButton"); var stopButton = document.getElementById("stopButton"); var nextButton = document.getElementById("nextButton"); var shuffleButton = document.getElementById("shuffleButton"); var shufflePlaylist = false; var infoButton = document.getElementById("infoButton"); prevButton.innerHTML = ""; playButton.innerHTML = ""; stopButton.innerHTML = ""; nextButton.innerHTML = ""; infoButton.innerHTML = ""; var playlistSelector = document.getElementById("playlistSelector"); for(var key in myPlaylists){ var option = document.createElement('option'); option.value = key; option.innerHTML = key; playlistSelector.appendChild(option); } var themeSelector = document.getElementById("themeSelector"); for(var key in myThemes){ var option = document.createElement('option'); option.value = key; option.innerHTML = key; themeSelector.appendChild(option); } themeSelector.value = currentTheme; function onYouTubeIframeAPIReady() { player = new YT.Player('youtube-player', { height: '100%', width: '100%', playerVars: { 'controls': 0, 'autoplay': 0, 'playsinline': 1, 'loop': 1 }, events: { 'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange } }); } function updateSongLabel() { if(player.getVideoData() && player.getVideoData().title != undefined){ if(player.getVideoData().title == ""){ songLabel.innerHTML = "READY"; } else{ songLabel.innerHTML = "" + player.getVideoData().title + " - " + player.getVideoData().author + ""; } }else{ songLabel.innerHTML = "Loading..."; } } function updateStatusLabel() { let statusLabelText = ""; let listText = " " + (player.getPlaylistIndex() + 1) + "/" + player.getPlaylist().length; let timeText = "0:00/0:00"; seekBar.setAttribute("max", player.getDuration()); if(!isSlidingSeekBar){ seekBar.value = player.getCurrentTime(); } if(!isSlidingVolumeBar){ volumeBar.value = player.getVolume(); } switch (player.getPlayerState()) { case -1: statusLabelText = "Stopped"; break; case 0: statusLabelText = "Ended"; break; case 1: statusLabelText = "Playing"; break; case 2: statusLabelText = "Paused"; break; case 3: statusLabelText = "Loading... "; break; case 5: statusLabelText = "Video Cued"; break; } timeText = formatTime(player.getCurrentTime()) + "/" + formatTime(player.getDuration()); statusLabel.innerHTML = statusLabelText + listText + " " + timeText; if(player.getPlayerState() == 2 /* Paused */){ statusLabel.setAttribute('class', 'blink'); } else{ statusLabel.removeAttribute('class'); } } function formatTime(input) { var minutes = Math.trunc(input / 60); var seconds = Math.trunc(input - minutes * 60); if(seconds < 10) { return minutes + ":0" + seconds; } else { return minutes + ":" + seconds; } } volumeButton.addEventListener("click", function(){ if(volumeBar.value != 0){ savedVolume = volumeBar.value; player.setVolume(0); volumeBar.value = 0; volumeButton.innerHTML = ""; } else{ player.setVolume(savedVolume); volumeBar.value = savedVolume; volumeButton.innerHTML = ""; } }); volumeBar.addEventListener("input", function(){ isSlidingVolumeBar = true; player.setVolume(this.value); if(volumeBar.value == 0){ volumeButton.innerHTML = ""; } else{ volumeButton.innerHTML = ""; } }); volumeBar.addEventListener("mouseup", function(){ isSlidingVolumeBar = false; }); videoButton.addEventListener("click", function(){ if(isVideoShowing){ document.getElementById("youtube-player").hidden = true; isVideoShowing = false; videoButton.setAttribute('state', 'off'); } else{ document.getElementById("youtube-player").hidden = false; isVideoShowing = true; videoButton.setAttribute('state', 'on'); } }); seekBar.addEventListener("input", function(){ isSlidingSeekBar = true; player.seekTo(this.value); }); seekBar.addEventListener("mouseup", function(){ isSlidingSeekBar = false; }); playButton.addEventListener("click", function() { if(player.getPlayerState() == 1) { player.pauseVideo(); } else { player.playVideo(); } }); stopButton.addEventListener("click", function() { if(player.getPlayerState() == 1 || player.getPlayerState() == 2) { player.stopVideo(); } }); nextButton.addEventListener("click", function() { player.nextVideo(); }); prevButton.addEventListener("click", function() { player.previousVideo(); }); shuffleButton.addEventListener("click", function() { if(shufflePlaylist == false){ shufflePlaylist = true; shuffleButton.setAttribute('state', 'on'); } else{ shufflePlaylist = false; shuffleButton.setAttribute('state', 'off'); } player.setShuffle(shufflePlaylist); }); infoButton.addEventListener("click", function() { alert("Webdeck Player - created by Genos\ngit.xgenos.me/webdeck-player\n(c) MIT License"); }); playlistSelector.addEventListener("change", function() { currentPlaylist = playlistSelector.value; player.stopVideo(); player.loadPlaylist({ list: myPlaylists[currentPlaylist] }); }); themeSelector.addEventListener("change", function() { currentTheme = themeSelector.value; document.getElementById("player-theme").setAttribute("href", "./themes/"+ myThemes[currentTheme] + "/webdeck-player.css"); volumeButton.innerHTML = ""; prevButton.innerHTML = ""; playButton.innerHTML = ""; stopButton.innerHTML = ""; nextButton.innerHTML = ""; infoButton.innerHTML = ""; }); function onPlayerReady(event) { player.loadPlaylist({ list: myPlaylists[currentPlaylist] }); player.setVolume(50); player.setLoop(true); } function onPlayerStateChange(event) { //Change play/pause button icons if(player.getPlayerState() == 1 /* Playing */) { playButton.innerHTML = ""; } else { playButton.innerHTML = ""; } //Load next video if (event.data == YT.PlayerState.ENDED) { player.nextVideo(); } updateSongLabel(); clearInterval(statusLabelInterval); statusLabelInterval = setInterval(updateStatusLabel, 100); }