HTMLify
script.js
Views: 191 | Author: cody
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | let currentSong = new Audio(); let currFolder; let songs; function secondsToMinutesSeconds(seconds) { if (isNaN(seconds) || seconds < 0) { return "00:00"; } const minutes = Math.floor(seconds / 60); const remainingSeconds = Math.floor(seconds % 60); const formattedMinutes = String(minutes).padStart(2, '0'); const formattedSeconds = String(remainingSeconds).padStart(2, '0'); return `${formattedMinutes}:${formattedSeconds}`; } async function getSongs(folder) { currFolder = folder; let a = await fetch(`/${folder}/`); let response = await a.text(); let div = document.createElement("div"); div.innerHTML = response; let as = div.getElementsByTagName("a"); // console.log(as); songs = []; for (let index = 0; index < as.length; index++) { const element = as[index]; if (element.href.endsWith(".mp3")) { songs.push(element.href.split(`/${folder}/`)[1]); } } /// show all the songs in the playlist let songUL = document.querySelector(".songList").getElementsByTagName("ul")[0]; songUL.innerHTML = ""; for (const song of songs) { songUL.innerHTML = songUL.innerHTML + `<li> <img class="invert" src="img/music.svg" alt=""> <div class="info"> <div>${song.replaceAll("%20", " ")}</div> </div> <div class="playnow"> <span> Play Now </span> <img class="invert" src="img/play.svg" alt=""> </div> </li>`; } // attach a eventlistner to each song Array.from(document.querySelector(".songList").getElementsByTagName("li")).forEach((e) => { e.addEventListener("click", element => { // console.log(e.querySelector(".info").firstElementChild.innerHTML); playMusic(e.querySelector(".info").firstElementChild.innerHTML.trim()); }); }); return songs; } //playing song.. const playMusic = (track, pause = false) => { currentSong.src = `/${currFolder}/` + track; if (!pause) { currentSong.play(); play.src = "img/pause.svg"; } document.querySelector(".songsInfo").innerHTML = decodeURI(track); document.querySelector(".songTime").innerHTML = "00:00 / 00:00"; } async function displayAlbums() { let a = await fetch(`/songs/`); let response = await a.text(); let div = document.createElement("div"); div.innerHTML = response; let ancors = div.getElementsByTagName("a") let cardContainer = document.querySelector(".cardContainer"); // console.log(ancors); let array = Array.from(ancors); for (let index = 0; index < array.length; index++) { const e = array[index]; // Array.from(ancors).forEach(async e => { if (e.href.includes("/songs/") && !e.href.includes(".htaaccess")) { let folder = e.href.split("/").slice(-2)[1]; //yha pe slice -1 or -2 dono dega.. // Get the meta data of the folder. let a = await fetch(`/songs/${folder}/info.json`); let response = await a.json(); // console.log(response); cardContainer.innerHTML = cardContainer.innerHTML + `<div class="card" data-folder="${folder}"> <div class="svg"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" style="width: 50px; height: 50px;"> <circle cx="12" cy="12" r="11" fill="#00FF00" /> <path d="M10.6219 8.41459C10.5562 8.37078 10.479 8.34741 10.4 8.34741C10.1791 8.34741 10 8.52649 10 8.74741V15.2526C10 15.3316 10.0234 15.4088 10.0672 15.4745C10.1897 15.6583 10.4381 15.708 10.6219 15.5854L15.5008 12.3328C15.5447 12.3035 15.5824 12.2658 15.6117 12.2219C15.7343 12.0381 15.6846 11.7897 15.5008 11.6672L10.6219 8.41459Z" fill="#000000" /> </svg> </div> <img src="/songs/${folder}/cover.jpg" alt=""> <h2>${response.title}</h2> <p>${response.description}</p> </div> ` } } // load the playlist when the card is clicked Array.from(document.getElementsByClassName("card")).forEach(e => { // console.log(e); e.addEventListener("click", async item => { songs = await getSongs(`songs/${item.currentTarget.dataset.folder}`); playMusic(songs[0]); }); }) } async function main() { // let currentSong; await getSongs("songs/ncs"); playMusic(songs[0], true); // dipslay all the albums hwic are being played.. displayAlbums(); const play = document.getElementById('play'); play.addEventListener("click", () => { if (currentSong.paused) { currentSong.play() play.src = "img/pause.svg"; } else { currentSong.pause() play.src = "img/play.svg"; } }); //listen for time update event currentSong.addEventListener("timeupdate", () => { // console.log(currentSong.currentTime, currentSong.duration); document.querySelector(".songTime").innerHTML = `${secondsToMinutesSeconds(currentSong.currentTime)}: ${secondsToMinutesSeconds(currentSong.duration)}` document.querySelector(".circle").style.left = (currentSong.currentTime / currentSong.duration) * 100 + "%"; }); // add Event listener to seekbar document.querySelector(".seekar").addEventListener("click", e => { let percent = (e.offsetX / e.target.getBoundingClientRect().width) * 100; document.querySelector(".circle").style.left = percent + "%"; currentSong.currentTime = ((currentSong.duration) * percent) / 100; }) // addEventListener for hamburger icon const left = document.querySelector(".left"); document.querySelector(".hamburger").addEventListener("click", () => { left.style.left = "0"; }) // addEventListener for close icon const leftt = document.querySelector(".left"); document.querySelector(".close").addEventListener("click", () => { leftt.style.left = "-120%"; }); // Add an event listener to previous previous.addEventListener("click", () => { currentSong.pause(); // console.log("Previous clicked"); let index = songs.indexOf(currentSong.src.split("/").slice(-1)[0]) if ((index - 1) >= 0) { playMusic(songs[index - 1]) } // console.log(index); }) // Add an event listener to next next.addEventListener("click", () => { currentSong.pause() // console.log("Next clicked") let index = songs.indexOf(currentSong.src.split("/").slice(-1)[0]) if ((index + 1) < songs.length) { playMusic(songs[index + 1]) } }) // add an event to volume // let range = document.querySelector(".range"); document.querySelector(".range").getElementsByTagName("input")[0].addEventListener("change", (e) => { // console.log("setting volume to", e.target.value, "/100"); currentSong.volume = parseInt(e.target.value) / 100; if (currentSong.volume == 0) { document.querySelector(".volume>img").src = document.querySelector(".volume>img").src.replace("img/volume.svg", "img/mute.svg"); } else{ document.querySelector(".volume>img").src = document.querySelector(".volume>img").src.replace("img/mute.svg", "img/volume.svg"); } }); // load the playist whenever the card is clicked.. Array.from(document.getElementsByClassName("card")).forEach(e => { // console.log(e); //ye yha pe hame sare cards load karke dega.. e.addEventListener("click", async item => { // console.log(item, item.currentTarget.dataset); songs = await getSongs(`songs/${item.currentTarget.dataset.folder}`) }) }) // setting Event Listner to volume button let volume = document.querySelector(".volume>img"); volume.addEventListener("click", (e) => { // console.log(e.target); if (e.target.src.includes("img/volume.svg")) { e.target.src = e.target.src.replace("img/volume.svg", "img/mute.svg"); currentSong.volume = 0; document.querySelector(".range").getElementsByTagName("input")[0].value = 0; } else { e.target.src = "img/volume.svg"; currentSong.volume = .10; document.querySelector(".range").getElementsByTagName("input")[0].value = 100; } }) // document.addEventListener("contextmenu", function (e) { // e.preventDefault(); // }, false); } main() |