YouTube Download

By KayKay Last update Jul 29, 2008 — Installed 55,719 times.

There are 1 previous version of this script.

// ==UserScript==
// @name YouTube Download
// @description Adds a small download button to every video on YouTube
// @author KayKay
// @namespace kk.tools
// @version 1.7cm
// @include				http://youtube.com/watch?v=*
// @include				http://*.youtube.com/watch?v=*
// ==/UserScript==
GM_setValue("version","1.7");

GM_registerMenuCommand("Switch download mode",switch_mode);

var pnl_qs = document.getElementById("watch-video-quality-setting");
if(! pnl_qs) {
	pnl_qs = document.createElement("div");
	pnl_qs.setAttribute("id","watch-video-quality-setting");
	var pnl_views = document.getElementById("watch-views-div");
	pnl_views.insertBefore(pnl_qs,pnl_views.lastChild.previousSibling);
}
var pnl_dl = document.createElement("div");
var lnk_dl = document.createElement("a");
pnl_dl.appendChild(lnk_dl);
pnl_qs.insertBefore(pnl_dl,pnl_qs.firstChild);

switch(self.location.host.split(".")[0]) {
case "ru": lnk_txt = "скачать это видео"; break; //Russia
case "jp": lnk_txt = "このビデオをダウンロード"; break; //Japan
case "kr": lnk_txt = "이 동영상을 다운로드"; break; //Korea
case "br": lnk_txt = "baixar o vídeo"; break; //Brasil
case "de": lnk_txt = "dieses video herunterladen"; break; //Germany
case "fr": lnk_txt = "télécharger cette vidéo"; break; //France
case "in": lnk_txt = "इस वीडियो डाउनलोड"; break; //India
case "it": lnk_txt = "scaricare questo video"; break; //Italia
case "nl": lnk_txt = "download deze video"; break; //Dutch
case "pl": lnk_txt = "pobierz ten film wideo"; break; //Poland
case "hk": case "tw": lnk_txt = "下載該視頻"; break; //Taiwan, Hong Kong
case "es": case "mx": lnk_txt = "descargar este vídeo"; break; //Spain, Mexico
default: lnk_txt = "download this video"; break; //Australia, United Kingdom, Canada, Ireland, New Zealand, Global
}

lnk_dl.setAttribute("id","download-link");
lnk_dl.setAttribute("href","#");
lnk_dl.setAttribute("class","hLink");
lnk_dl.addEventListener("click", function() { 
	if(GM_getValue("mode","L") == "L") {
		flashloaderOpen(window.document.location.href);
	} else {
		var link = "http://www.flashload.net/popup.php?url=" + escape(window.document.location.href) + "&direct"; 
		window.open(link,"FlashLoader","fullscreen=no,toolbar=no,status=no,menubar=no,scrollbars=yes,resizable=yes,directories=no,location=no,width=800,height=600,top=100,left=100");
	}
}, false);
lnk_dl.appendChild(document.createTextNode(lnk_txt));

setTimeout(check_version,1000);
function check_version() {
	if(typeof GM_getValue("day") == "undefined") GM_setValue("day",(new Date()).getDay());
	if(GM_getValue("day") != (new Date()).getDay()) {
		var script_url = "http://userscripts.org/scripts/review/28918?format=txt";
		GM_xmlhttpRequest({ method:"GET",url:script_url,
			onload:function(result) {
				if(result.responseText.indexOf("@version "+GM_getValue("version")) == -1 &&
					confirm('A new version of the "YouTube Download" userscript for Greasemonkey is available.\n\nDo you want to update now?')) top.location.href = script_url;
			}
		});
		GM_setValue("day",(new Date()).getDay());
	}
}

function switch_mode() {
	if(GM_getValue("mode","L") == "L") {
		GM_setValue("mode","P");
		alert("Download will now open in a popup.");	
	} else {
		GM_setValue("mode","L");
		alert("Download will now open in a layer.");
	}
}

var embed_display;
function flashloaderOpen(url) {
	embed_display = new Array();
	for(var embed_index=0;embed_index < document.embeds.length; embed_index++) {
		embed_display[embed_index] = document.embeds[embed_index].style.display;
		document.embeds[embed_index].style.display = "none";
	}
	
	var body = document.getElementsByTagName("body").item(0);
	var div_bg = document.createElement("div");
	div_bg.setAttribute("id", "flashloader_bg");
	div_bg.setAttribute("style", "position: absolute;top: 0pt;left: 0pt;margin-top: 0pt;margin-right: 0pt;margin-bottom: 0pt;margin-left: 0pt;padding-top: 0pt;padding-right: 0pt;padding-bottom: 0pt;padding-left: 0pt;background-color: #000000;opacity: 0.5;display: block");
	div_bg.style.zIndex = 100;
	div_bg.addEventListener("click",flashloaderClose,false);
	body.appendChild(div_bg);
	
	var div_window = document.createElement("div");
	div_window.setAttribute("id", "flashloader_window");
	div_window.setAttribute("style", "opacity: 0.95; position: absolute;background-color: #dddddd;margin: 0pt 0pt auto auto;padding: 1px 1px 0px 0px;float: left;width: 700px;display: block");
	div_window.style.zIndex = 200;
	body.appendChild(div_window);

	var div_close = document.createElement("div");
	div_close.setAttribute("style", "float: right");
	div_window.appendChild(div_close);
	
	var p_close = document.createElement("p");
	p_close.setAttribute("style", "font-size: 11px;font-family: tahoma;margin: 0px 2px 0px 0px;line-height: 16px;padding-right: 10px;padding-left: 18px;background-color: transparent;background-image: url(data:image/gif;base64,"+images["close"]+");background-repeat: no-repeat;background-attachment: scroll;background-x-position: left;background-y-position: center;color: #888888;cursor: pointer;margin-top:10px");
	p_close.addEventListener("click",flashloaderClose,false);
	p_close.innerHTML = "Close";
	div_close.appendChild(p_close);
	
	var div_content = document.createElement("div");
	div_content.setAttribute("style", "background-color: #ffffff;margin: 0px 0px 1px 1px;padding: 10px; background-image: url(data:image/gif;base64,"+images["bg"]+");background-repeat: repeat-x;text-align: left");
	div_window.appendChild(div_content);
	
	var iframe_content = document.createElement("iframe");
	iframe_content.setAttribute("height", "500px");
	iframe_content.setAttribute("width", "680px");
	iframe_content.setAttribute("frameborder", "0");
	iframe_content.setAttribute("marginheight", "0");
	iframe_content.setAttribute("marginwidth", "0");
	iframe_content.setAttribute("scrolling", "auto");
	iframe_content.setAttribute("allowtransparency", "true");
	iframe_content.setAttribute("src", "http://www.flashload.net/popup.php?url=" + escape(url) + "&direct");
	div_content.appendChild(iframe_content);
	
	flashloaderMove();
	add_handle("resize", flashloaderMove);
	add_handle("scroll", flashloaderMove);
}

function flashloaderClose() {
	for(var embed_index=0;embed_index < document.embeds.length; embed_index++) {	document.embeds[embed_index].style.display = embed_display[embed_index]; }
	if(document.getElementById("flashloader_bg"))		 document.getElementsByTagName("body").item(0).removeChild(document.getElementById("flashloader_bg"));
	if(document.getElementById("flashloader_window")) document.getElementsByTagName("body").item(0).removeChild(document.getElementById("flashloader_window"));
	remove_handle("resize", flashloaderMove);
	remove_handle("scroll", flashloaderMove);
}

function flashloaderMove() {
	var div_bg = document.getElementById("flashloader_bg");
	div_bg.style.width = get_di(0)[0] + "px";
	div_bg.style.height = get_di(0)[1] + "px";
	
	var div_window = document.getElementById("flashloader_window");
	var top = Math.round((get_di(2)[1] - parseInt(div_window.clientHeight)) / 2);
	if(top < 0) { top = 0; }
	top += get_di(1)[1];
	var left = Math.round((get_di(2)[0] - parseInt(div_window.clientWidth)) / 2);
	if(left < 0) { left = 0; }
	left += get_di(1)[0];
	div_window.style.top = top + "px";
	div_window.style.left = left + "px";
}

function get_di(type) { var dimensions = new Array(2); switch(type) { case 0: if(window.innerHeight && window.scrollMaxY) {	dimensions[0] = document.body.scrollWidth; dimensions[1] = window.innerHeight + window.scrollMaxY; } else if(document.body.scrollHeight > document.body.offsetHeight) { dimensions[0] = document.body.scrollWidth; dimensions[1] = document.body.scrollHeight;	} else { dimensions[0] = document.body.offsetWidth; dimensions[1] = document.body.offsetHeight;	}	break; case 1: if(self.pageYOffset) { dimensions[0] = self.pageXOffset; dimensions[1] = self.pageYOffset; } else if((document.documentElement) && (document.documentElement.scrollTop))	{	dimensions[0] = document.documentElement.scrollLeft; dimensions[1] = document.documentElement.scrollTop; } else if(document.body) { dimensions[0] = document.body.scrollLeft;	dimensions[1] = document.body.scrollTop; }	break; case 2: if(document.documentElement && document.documentElement.clientWidth) { dimensions[0] = document.documentElement.clientWidth; dimensions[1] = document.documentElement.clientHeight; } else if(self.innerWidth) { dimensions[0] = self.innerWidth; dimensions[1] = self.innerHeight; } else if(document.body) { dimensions[0] = document.body.clientWidth; dimensions[1] = document.body.clientHeight;	}	break; }	return(dimensions); }
function add_handle(eventname, handler) { if(window.addEventListener) { window.addEventListener(eventname, handler, false); } else if(window.attachEvent) { window.attachEvent("on" + eventname, handler); } }
function remove_handle(eventname, handler) { if(window.removeEventListener) { window.removeEventListener(eventname, handler, false); } else if(window.detachEvent)		{ window.detachEvent("on" + eventname, handler); } }
	
var images = new Array();
images["bg"] = "R0lGODlhDwAwAPcAANDQ0dfX2d3d3uTk5ebm5unp6+7u7u7u8PPz9PT09Pf3+Pr6+/39/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAPADAAAAh7AAkAICCQ4MCCBQMYMKCQ4cKGDRMkECCR4sSKFRcMWKCR48aOHQs0aCCS5MiSJUceUMmywUqXDRCMlBlzpk0FI3E20Mlz5MgFP4M2ADq0AYORR40iXeqzqdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqrRoQADs=";
images["close"] = "R0lGODlhDgAOAPcAAJajrp2ptKOvuaq1wLG8xbfBybzG0MHL1MjQ2MzU3M/Y39DY39bd49rg5tzh59zi5+Dl6ujq7O7x9Pb3+Pv8/Pz8/Pz8/f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAOAA4AAAh7ACNMuECwoMEJEShAUMCwoUMIFC4kcPCgosWKDhIQTNCgo8ePGi8gYMCAIEmTDBAQPLBgAcGWLxccIGgAgU2DNhEYIFigZwGDPn9eIECUYNGhRwcoJbj0gtIBBAVInUpVKsEAWLNqxXqhQgEAYMOKLVBBggWDaC9YkBAQADs=";