Improve tests
[app-musicexpo.git] / player.js
index bccc451f30b9559a63300dd68de7f46007425ca8..09410120adca07b00a440dd7cd5b284da4a6239a 100644 (file)
--- a/player.js
+++ b/player.js
@@ -7,10 +7,11 @@ var TYPES = {
 };
 
 var audio, details, start, data;
+var hash_to_id = {}, inhibit_handle_hash = false;
 
 function load_song (id) {
        audio.style.display = "inline";
-       var song = data.files[id];
+       var song = data[id];
        var old_sources = document.getElementsByTagName("source");
        while(old_sources.length)
                old_sources[0].parentNode.removeChild(old_sources[0]);
@@ -19,31 +20,65 @@ function load_song (id) {
                var source = document.createElement("source");
                var type = TYPES[song.formats[i].format];
                source.setAttribute("type", type);
-               source.setAttribute("src", data.prefix + song.formats[i].file);
+               source.setAttribute("src", song.formats[i].file);
                audio.appendChild(source);
        }
 
        details.innerHTML = "Now playing: " + song.artist + " - " + song.title;
+       inhibit_handle_hash = true;
+       location.hash = song.hash;
+       inhibit_handle_hash = false;
        audio.load();
 }
 
 function play_random () {
        start.innerHTML = "Next";
-       var id = Math.floor(Math.random() * data.files.length);
+       var id = Math.floor(Math.random() * data.length);
        load_song(id);
        audio.play();
 }
 
+function handle_hash(){
+       if(!hash_to_id.hasOwnProperty(location.hash) || inhibit_handle_hash)
+               return;
+       load_song(hash_to_id[location.hash]);
+       start.innerHTML = "Next";
+       audio.play();
+}
+
 window.onload = function () {
        var container = document.getElementById("player");
-       container.innerHTML = '<div id="details"></div> <button id="start_player">Start player</button><br><audio id="audio" controls></audio>';
+       container.innerHTML = '<div id="details"></div> <button id="start_player">Play a random song</button> (or click a song title)<br><audio id="audio" controls></audio>';
        audio = document.getElementById("audio");
        details = document.getElementById("details");
        start = document.getElementById("start_player");
 
-       data = JSON.parse(document.getElementById("json").innerHTML);
+       data = [];
+       var trs = document.querySelectorAll("tbody tr");
+       for (var i = 0 ; i < trs.length ; i++) {
+               var tr = trs[i];
+               var song = {
+                       "artist": tr.getElementsByClassName("artist")[0].textContent,
+                       "title": tr.getElementsByClassName("title")[0].textContent,
+                       "hash": tr.getElementsByTagName("a")[0].dataset.hash,
+                       "formats": []
+               };
+               var formats = tr.getElementsByClassName("formats")[0].getElementsByTagName("a");
+               for (var j = 0 ; j < formats.length ; j++) {
+                       var format = formats[j];
+                       song.formats.push({
+                               "format": format.textContent,
+                               "file": format.getAttribute("href")
+                       });
+               }
+               data.push(song);
+               hash_to_id[song.hash] = i;
+       }
 
        audio.style.display = "none";
        audio.addEventListener('ended', play_random);
+       audio.addEventListener('error', play_random);
        start.addEventListener('click', play_random);
+       window.onhashchange = handle_hash;
+       handle_hash();
 };
This page took 0.011139 seconds and 4 git commands to generate.