Created
September 25, 2016 01:39
-
-
Save ddurst/8b75039816b9c6a5ee4d6f9272cf5a40 to your computer and use it in GitHub Desktop.
JavaScript Player solution
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
<tr> | |
<td>listen</td> | |
<td><a class="externalplayer" data-source="soundcloud" data-track="271495261" href="https://soundcloud.com/ddurst/whatever1">on soundcloud</a><br/> | |
<a class="externalplayer" data-source="soundcloud" data-track="271495259" href="https://soundcloud.com/ddurst/whatever2">on soundcloud</a> | |
</td> | |
</tr> | |
*/ | |
var init = function() { | |
var players = document.getElementsByClassName("externalplayer"); | |
var table = document.querySelector("table"); | |
for (var i=0; i<players.length; i++) { | |
createALink(players[i]); | |
} | |
table.addEventListener("click", function(evt) { | |
if (evt.target.nodeName == "BUTTON") { | |
var el = evt.target; | |
if (el.getAttribute("data-shown") == "true") { | |
destroyAPlayer(el); | |
el.setAttribute("data-shown", "false"); | |
} else { | |
createAPlayer(el); | |
el.setAttribute("data-shown", "true"); | |
} | |
el.innerHTML = (el.innerHTML=="play here")?"close player":"play here"; | |
} | |
}); | |
function createALink(player) { | |
var stub = document.createDocumentFragment(), | |
newEl = document.createElement("button"), | |
joiner = document.createTextNode(" or "); | |
newEl.setAttribute("data-shown", "false"); | |
newEl.setAttribute("id", i); | |
newEl.innerHTML = 'play here'; | |
stub.appendChild(joiner); | |
stub.appendChild(newEl); | |
player.parentNode.insertBefore(stub, player.nextSibling); | |
} | |
function createAPlayer(el) { | |
var track = null, | |
dataEl = el.previousSibling.previousSibling, | |
source = dataEl.getAttribute("data-source"), | |
trackID = dataEl.getAttribute("data-track"), | |
stub = document.createElement('iframe'); | |
stub.setAttribute('width', '100%'); | |
stub.setAttribute('frameborder', 'no'); | |
if (source == 'soundcloud') { | |
track = "https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/" + trackID + "&color=b05d00&auto_play=false&hide_related=true&show_comments=false&show_user=false&show_reposts=false&show_artwork=false" | |
stub.setAttribute('height', '120'); | |
stub.setAttribute('scrolling', 'no'); | |
} else if (source == 'bandcamp') { /* original linkcol: 0687f5 */ | |
var albumID = dataEl.getAttribute("data-album"); | |
track = "https://bandcamp.com/EmbeddedPlayer/album=" + albumID + "/size=small/bgcol=ffffff/linkcol=b05d00/track=" + trackID + "/transparent=true/" | |
stub.setAttribute('height', '42px'); | |
stub.setAttribute('seamless', ''); | |
} | |
stub.setAttribute('src', track); | |
el.parentNode.insertBefore(stub, el.nextSibling); | |
} | |
function destroyAPlayer(el) { | |
el.parentNode.removeChild(el.nextSibling); | |
} | |
} | |
document.addEventListener('DOMContentLoaded', function() { | |
init(); | |
}, false); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment