-
-
Save ltackett/2270543 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
javascript:(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) |
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) { | |
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