Skip to content

Instantly share code, notes, and snippets.

@ddurst
Created September 25, 2016 01:39
Show Gist options
  • Save ddurst/8b75039816b9c6a5ee4d6f9272cf5a40 to your computer and use it in GitHub Desktop.
Save ddurst/8b75039816b9c6a5ee4d6f9272cf5a40 to your computer and use it in GitHub Desktop.
JavaScript Player solution
/*
<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