var audio = (function(){ var audio = {} var el, music = [], current_index = -1 var links, comment, parent var playing = false audio.init = function () { links = document.querySelectorAll("a") comment = document.querySelector("#comment") parent = document.querySelector("#audio") Array.prototype.slice.apply(links).forEach(function(url){ if (! url.href.match(/(mp3|wav|ogg)/)) return url.dataset.index = music.length music.push(url) }) audio.build() } audio.build = function () { el = document.createElement("audio") el.setAttribute("controls", true) el.addEventListener("loadeddata", () => { if (playing) el.play() }) el.addEventListener("ended", audio.next) el.src = music[0] parent.appendChild(el) document.body.addEventListener("keydown", audio.keydown) } audio.destroy = function () { el.pause() el = null parent.removeChild(el) document.body.removeEventListener("keydown", audio.keydown) } audio.play = function (index) { current_index = (parseInt(index) + music.length) % music.length el.src = music[current_index].href playing = document.querySelector(".playing") if (playing) playing.classList.remove("playing") music[current_index].classList.add("playing") } audio.prev = function (){ audio.play(current_index - 1) } audio.next = function (){ audio.play(current_index + 1) } audio.toggle = function (){ if (el.paused) el.play() else el.pause() } audio.keydown = function(e){ if (app.typing || e.ctrlKey || e.altKey || e.metaKey || e.shiftKey) return switch (e.keyCode) { case 37: // left audio.prev() break; case 39: // right audio.next() break; case 32: // spacebar e.preventDefault() audio.toggle() break; } } return audio })()