Skip to content

Instantly share code, notes, and snippets.

@darrylhebbes
Forked from duncanbeevers/sc-dl-min.js
Created November 15, 2012 16:11
Show Gist options
  • Save darrylhebbes/4079433 to your computer and use it in GitHub Desktop.
Save darrylhebbes/4079433 to your computer and use it in GitHub Desktop.
Bookmarklet that generates download link for a Soundcloud upload
(function(a){function f(a){var b=a.find(".actionbar");return b.length?b:a.prepend('<div class="actionbar"><div class="actions"><div class="primary"></div></div></div>')}function e(a,b){var c=b.find(".actions"),d=c.find(".download");d.length||c.prepend('<a href="'+a.streamUrl+'" class="download pl-button" download="'+a.title+'" title="'+a.title+'">Download track</a>')}function d(a,b){var d=null;b.hasClass("nano")?d=f(b.closest(".track-title").find(".track")).css({marginLeft:"18px"}):b.hasClass("small")&&(d=f(b.find(".container"))),d&&c(a,d)}function c(a,b){var c=b.find(".download, .mock-download");if(!c.length){var d=$('<a class="pl-button mock-download"><span>Download</span></a>').css({backgroundImage:"url(http://soundcloud.com/images/icons_mini.png?unicorn26)",backgroundRepeat:"no-repeat",backgroundPosition:"-77px -236px",paddingLeft:"18px"}).attr("download",a.title+".mp3");b.find(".primary").append(d),d.attr("href",a.streamUrl)}}function b(a){var b=$.helpers,f=b.getPlayerTrack(b.getPlayerNode(a)),g=a.find(".actionbar");!f||(a.hasClass("player")?g.length?c(f,g):d(f,a):e(f,a))}var g,h,i=a.querySelectorAll("[data-sc-track]");for(g=0,h=i.length;g<h;g++)b($(i[g]))})(document)
(function(document) {
function extend(node) {
var helpers = $.helpers,
trackData = helpers.getPlayerTrack(helpers.getPlayerNode(node)),
actionbar = node.find(".actionbar");
if (!trackData) { return; }
if (node.hasClass("player")) {
if (actionbar.length) {
extendPlayerWithActionbar(trackData, actionbar);
} else {
extendPlayerWithoutActionbar(trackData, node);
}
} else {
// Not a player, so must be a playlist entry
extendPlaylistEntry(trackData, node);
}
}
function extendPlayerWithActionbar(trackData, actionbar) {
var downloadButton = actionbar.find(".download, .mock-download");
// No need to add a button for players that already have one
if (!downloadButton.length) {
var link = $("<a class=\"pl-button mock-download\"><span>Download</span></a>").css({
backgroundImage: "url(http://soundcloud.com/images/icons_mini.png?unicorn26)",
backgroundRepeat: "no-repeat",
backgroundPosition: "-77px -236px",
paddingLeft: "18px"
}).attr("download", trackData.title + ".mp3");
actionbar.find(".primary").append(link);
link.attr("href", trackData.streamUrl);
}
}
function extendPlayerWithoutActionbar(trackData, player) {
var actionbar = null;
if (player.hasClass("nano")) {
actionbar = addActionbar(player.closest(".track-title").find(".track")).css({ marginLeft: "18px" });
} else if (player.hasClass("small")) {
actionbar = addActionbar(player.find(".container"));
}
if (actionbar) {
extendPlayerWithActionbar(trackData, actionbar);
}
}
function extendPlaylistEntry(trackData, node) {
var actions = node.find(".actions"),
downloadLink = actions.find(".download");
if (!downloadLink.length) {
actions.prepend("<a href=\"" + trackData.streamUrl + "\" class=\"download pl-button\" download=\"" + trackData.title + "\" title=\"" + trackData.title + "\">Download track</a>");
}
}
function addActionbar(node) {
var actionbar = node.find(".actionbar");
if (actionbar.length) {
return actionbar;
} else {
return node.prepend("<div class=\"actionbar\"><div class=\"actions\"><div class=\"primary\"></div></div></div>");
}
}
var i, l, tracks = document.querySelectorAll("[data-sc-track]");
for (i = 0, l = tracks.length; i < l; i++) {
extend($(tracks[i]));
}
})(document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment