-
-
Save demelziraptor/2768199 to your computer and use it in GitHub Desktop.
Bookmarklet that generates download link for a Soundcloud upload
This file contains hidden or 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
(function(a){function b(a){var b=$.helpers,f=b.getPlayerTrack(b.getPlayerNode(a)),g=a.find(".actionbar");if(!f){return}if(a.hasClass("player")){if(g.length){c(f,g)}else{d(f,a)}}else{e(f,a)}}function c(a,b){var c=b.find(".download, .mock-download");if(!c.length||c.hasClass("disabled")){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 d(a,b){var d=null;if(b.hasClass("nano")){d=f(b.closest(".track-title").find(".track")).css({marginLeft:"18px"})}else if(b.hasClass("small")){d=f(b.find(".container"))}if(d){c(a,d)}}function e(a,b){var c=b.find(".actions"),d=c.find(".download");if(!d.length){c.prepend('<a href="'+a.streamUrl+'" class="download pl-button" download="'+a.title+'" title="'+a.title+'">Download track</a>')}}function f(a){var b=a.find(".actionbar");if(b.length){return b}else{return a.prepend('<div class="actionbar"><div class="actions"><div class="primary"></div></div></div>')}}var g,h,i=a.querySelectorAll("[data-sc-track]");for(g=0,h=i.length;g<h;g++){b($(i[g]))}})(document) |
This file contains hidden or 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
(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) || (downloadButton.hasClass("disabled"))) { | |
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
Fixed for tracks that have a download button but have reached the download limit (eg http://soundcloud.com/polarisatnoon/ko-ko-float-polaris-at-noon)