NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Tumblr mp3 Download
// @namespace ds.js.tumblr
// @author DragShot
// @oujs:author TheDragShot
// @released 2015-06-23
// @updated 2015-06-24
// @lastchanges Now it adds progressively buttons in non-iframe posts found in the dashboard
// @description Adds a download button in audio frames
// @copyright 2015, DragShot
// @license GNU GPL version 3
// @icon https://secure.assets.tumblr.com/images/apple-touch-icon-152x152.png
// @include *www.tumblr.com/dashboard*
// @include *www.tumblr.com/tagged/*
// @include *.tumblr.com/post/*/audio_player_iframe/*?audio_file=*
// @version 1.1
// @grant none
// downloadURL https://openuserjs.org/install/TheDragShot/Tumblr_mp3_Download.user.js
// ==/UserScript==
//Utils
function addCSS(css){
var head = document.head || document.getElementsByTagName('head')[0],
style = document.createElement('style');
style.type = 'text/css';
if (style.styleSheet){
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
head.appendChild(style);
}
function hasClass(element, cls) {
return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
}
//Assitance functions
function addDownloadButton(target){
var audioElem = target.getElementsByTagName("audio")[0];
var link = document.createElement('a');
link.target = '_blank';
link.className = 'dwn-btn dwn-btn-disabled';
link.innerHTML = '.mp3';
target.getElementsByClassName('progress_container')[0].appendChild(link);
audioElem.addEventListener('loadedmetadata', function(){
link.href = audioElem.src;
link.className = 'dwn-btn';
});
}
function addDownloadLink(target){
if(!hasClass(target,'mp3-plugin-checked')){
target.className += ' mp3-plugin-checked';
var node=target.getElementsByClassName('audio_player_container')[0];
var url = node.getAttribute("data-stream-url")+'?play_key='+node.getAttribute("data-post-key");
var div = document.createElement('div');
div.className = 'post_body';
div.innerHTML = "<a class='dwn-btn' target='_blank' href='"+url+"' style='position: relative !important; margin-top: 20px; margin-bottom: -20px;'>.mp3</a>";
target.appendChild(div);
}
}
//Trigger
document.addEventListener("DOMContentLoaded", function(event) {
//Styles
addCSS("\
.dwn-btn {\n\
z-index: 25;\n\
position: absolute;\n\
top: 50%;\n\
right: 10px;\n\
-webkit-transform: translateY(-50%);\n\
-ms-transform: translateY(-50%);\n\
transform: translateY(-50%);\n\
display: inline-block;\n\
box-sizing: border-box;\n\
font-weight: 400;\n\
border: 1px solid transparent;\n\
border-color: #E38D13;\n\
background: #F0AD4E !important;\n\
background-image: linear-gradient(to bottom, #F0AD4E 0px, #EB9316 100%) !important;\n\
background-repeat: repeat-x;\n\
color: black;\n\
text-decoration: none;\n\
padding: 1px 5px;\n\
font-size: 14px !important;\n\
line-height: 1.5;\n\
border-radius: 3px;\n\
box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.15) inset, 0px 1px 1px rgba(0, 0, 0, 0.075);\n\
}\n\
.dwn-btn-disabled{\n\
background: #CCC !important;\n\
border-color: #666;\n\
}");
//Main code block
var url=document.URL;
if(~url.indexOf('/audio_player_iframe/')){
addDownloadButton(document);
}else{
setInterval(function(){
var conts = document.getElementsByClassName('audio_player_container');
for (var i=0, item; item = conts[i]; i++) {
var playbtn = item.getElementsByClassName('play_button')[0];
var post_media = item.parentNode;
addDownloadLink(post_media);
}
},1000);
}
});