By Smiths
Has 6 other scripts.
// ==UserScript==
// @name YouTube Title Adder
// @namespace Smiths
// @description Preloads any YouTube links and appends the title of the video to the link in the referring page
// @include *
// @exclude http://*.youtube.com/*
// @exclude http://youtube.com/*
// @exclude http://*.google.*/search?*
// ==/UserScript==
var v = "2.0r4";
var homepageURL = "http://userscripts.org/scripts/show/12113";
var ytcollapseimg = "data:image/gif,GIF89a%0B%00%0B%00%A2%00%00%00%00%00%FF%FF%FF%5C%AD%E0%B6%E3%FF%FF%A5%A5%CE%CE%CE%FF%FF%FF%00%00%00!%F9%04%01%00%00%06%00%2C%00%00%00%00%0B%00%0B%00%00%03%24h%B0%CC%3A0%8E%10%96%94%15%5Ci%1B%1B%1DA%05%04Pt%9E%B9%08C%E1%BE'%20%B0%DB%3A%D7J%BA%18%09%00%3B";
var ytexpandimg = "data:image/gif,GIF89a%0B%00%0B%00%A2%00%00%00%00%00%FF%FF%FF%5C%AD%E0%B6%E3%FF%FF%A5%A5%CE%CE%CE%FF%FF%FF%00%00%00!%F9%04%01%00%00%06%00%2C%00%00%00%00%0B%00%0B%00%00%03*h%B0%CC%3A0%8E%10Vd%B0%82K%40%81%16%A3m!A%05%5D%11.%A3%0A%08%60Z%B8%02%CC%7C%C3R%C33%0E(%8D%86!%01%00%3B";
var ytdisabled = "data:image/gif,GIF89a%0B%00%0B%00%A2%00%00%00%00%00%FF%FF%FF%5C%AD%E0%B6%E3%FF%FF%A5%A5%CE%CE%CE%FF%FF%FF%00%00%00!%F9%04%01%00%00%06%00%2C%00%00%00%00%0B%00%0B%00%00%03-h%B0%CC%3A0%8E%10%16%04%11W%0C%08(%DDg%0D%40U%15%20v%9D%05%A9%96p%BB%08!%E8%A5%02%8D%92%E8%9C%B7%10%99%A2%D10%24%00%00%3B";
var ytlinks = 1;
var ytimage = 0;
var ytembedimage = 1;
if (!GM_xmlhttpRequest) {
alert('Please upgrade to the latest version of Greasemonkey to use the full features of this script.');
return;
} else {
ytlinks = Number(GM_getValue('ytlinks', ytlinks));
ytimage = Number(GM_getValue('ytimage', ytimage));
ytembedimage = Number(GM_getValue('ytembedimage', ytembedimage));
GM_registerMenuCommand('YouTube Title Adder Options', showOptions);
}
function checkNew(version)
{
GM_xmlhttpRequest({
method:"GET",
url:homepageURL,
headers:{"User-Agent":"monkeyagent"},
onload:function(content){
var upgrade = 0;
var USversion = content.responseText.match(/ver:([^<]+)<p>/);
vmain = version.split("."); //vmain[0].vsub[0]rvsub[1]
vsub = vmain[1].split("r");
USvmain = USversion[1].split("."); //USvmain[0].USvsub[0]rUSvsub[1]
USvsub = USvmain[1].split("r");
verstring = "Latest Version on Userscripts: <b>" + USvmain[0] + "." + USvsub[0] + "r" + USvsub[1] + "</b><br>Your Installed Version: <b>" + vmain[0] + "." + vsub[0] + "r" + vsub[1] + "</b>";
if (USvmain[0] > vmain[0]) upgrade = 1;
if ( (USvsub[0] > vsub[0]) && (USvmain[0] >= vmain[0]) ) upgrade = 1;
if ( (USvsub[1] > vsub[1]) && (USvmain[0] >= vmain[0]) ) upgrade = 1;
document.getElementById('versioncheck').innerHTML = "<br>" + verstring + "<br><b>" + (upgrade ? "<a href=\"" + homepageURL + "\" target=\"_blank\">UPGRADE AVAILABLE</a>" : "You have the latest release");
}
})
}
function setOptions()
{
if (ytlinks) document.getElementById('linkon').checked = true;
else document.getElementById('linkoff').checked = true;
if (ytimage) document.getElementById('imageon').checked = true;
else document.getElementById('imageoff').checked = true;
if (ytembedimage) document.getElementById('embedon').checked = true;
else document.getElementById('embedoff').checked = true;
}
function saveOptions()
{
if (document.getElementById('linkon').checked) GM_setValue('ytlinks', 1 );
else GM_setValue('ytlinks', 0 );
if (document.getElementById('imageon').checked) GM_setValue('ytimage', 1 );
else GM_setValue('ytimage', 0 );
if (document.getElementById('embedon').checked) GM_setValue('ytembedimage', 1 );
else GM_setValue('ytembedimage', 0 );
}
function hideOptions()
{
document.getElementById("optionsDiv").className="hidden";
document.getElementById("modalDiv").className="hidden";
}
//full thanks to "Google Anonymizer" code for visual options - http://userscripts.org/scripts/review/10448
function showOptions()
{
ytlinks = Number(GM_getValue('ytlinks', ytlinks));
ytimage = Number(GM_getValue('ytimage', ytimage));
ytembedimage = Number(GM_getValue('ytembedimage', ytembedimage));
var div1=document.getElementById("modalDiv");
if (div1==null)
{
GM_addStyle("#modalDiv{position:fixed; top:0px; left:0px; z-index:10; width:100%; height:100%; background-color:black; opacity:0.75;}");
GM_addStyle(".hidden{display:none; visibility:hidden;}");
div1=document.createElement("DIV");
div1.id="modalDiv";
div1.className="hidden";
div1.title="Click to cancel and close";
document.body.appendChild(div1);
div1.addEventListener("click",hideOptions,false);
}
var div2=document.getElementById("optionsDiv");
if (div2==null)
{
GM_addStyle("#optionsDiv{position:fixed; top:10%; left:20%; z-index:20; width:40%; height:50%; background-color:white; border:solid 3px #0033CC; overflow:auto;}");
div2=document.createElement("DIV");
div2.id="optionsDiv";
div2.className="hidden";
div2.setAttribute("style","text-align:justify;padding:10px");
var text1="";
text1+="<center><font size=\"+1\"><a href=\""+ homepageURL + "\" target=\"_blank\">YouTube Title Adder</a> Options</font><span id=\"versioncheck\" style=\"font-size:10px;\"><br><br>ver. " + v + " (Checking for updates...)</span></center>";
text1+="<form id=\"YTTA\" name=\"titleform\"><ul>"
text1+="<li>Names on YouTube Text Links:<br><input type=\"radio\" id=\"linkon\" name=\"textlinks\" value=\"1\"/> Enabled<br><input type=\"radio\" id=\"linkoff\" name=\"textlinks\" value=\"0\"/> Disabled<br>"
text1+="<li>Names on YouTube Image Links:<br><input type=\"radio\" id=\"imageon\" name=\"imglinks\" value=\"1\"/> Enabled<br><input id=\"imageoff\" type=\"radio\" name=\"imglinks\" value=\"0\"/> Disabled<br>"
text1+="<li>Embed Buttons for YouTube Links:<br><input type=\"radio\" id=\"embedon\" name=\"embed\" value=\"1\"/> Enabled<br><input type=\"radio\" id=\"embedoff\" name=\"embed\" value=\"0\"/> Disabled<br>"
text1+="</ul><center><input type=\"button\" value=\"Ok\" id=\"okButton\" /><input type=\"button\" value=\"Cancel\" id=\"cancelButton\" /></center></form>";
div2.innerHTML=text1;
document.body.appendChild(div2);
document.getElementById("okButton").addEventListener("click",function(){saveOptions();hideOptions();location.reload(true);},false);
document.getElementById("cancelButton").addEventListener("click",function(){hideOptions();},false);
}
document.getElementById("optionsDiv").className="";
document.getElementById("modalDiv").className="";
setOptions();
checkNew(v);
div1.className="";
div2.className="";
}
var allLinks, thisLink, thetitle, tubelink;
allLinks = document.evaluate('//a[@href]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < allLinks.snapshotLength; i++) {
if (allLinks.snapshotItem(i).href.search('youtube.com/watch') > -1) {
theURL = unescape(allLinks.snapshotItem(i).href);
youtubelink = "http://www.youtube.com/watch?v=" + theURL.match(/youtube\.com\/watch\?v=([-_A-Za-z0-9]{11})/)[1];
allLinks.snapshotItem(i).href = youtubelink;
addtitle(allLinks.snapshotItem(i), i);
}
}
function addtitle(link, number) {
GM_xmlhttpRequest({
method:"GET",
url:link.href,
headers:{"User-Agent":"monkeyagent"},
onload:function(content){
var videoembedcode = content.responseText.match(
/<input id=\"embed_code\"([^<]+)value='([^<]+)' onClick=\"javascript/m
);
if (videoembedcode) var videoembed = unescapeHTML(videoembedcode[2]);
var videoname = content.responseText.match(/<h1 id=\"video_title\">([^<]+)<\/h1>/);
embeddedtag = document.createElement('div');
btn = document.createElement('a');
if (!videoname) {
videoname = content.responseText.match(/<div id=\"vidTitle\">([^<]+)<\/div>/);
}
if (!videoname) {
videoname = content.responseText.match(/<meta name=\"title\" content=\"([^<]+)\">/);
}
if (!videoname) {
videoname = content.title.substr(10);
}
if (videoembed.substr(0,1) == "<")
{
alink = videoname[1] + number;
btn.id = alink; embedid = alink + "embedded";
embeddedtag.id = embedid;
embeddedtag.style.display = 'none';
embeddedtag.setAttribute("align", "center");
embeddedtag.innerHTML = videoembed;
btn.innerHTML = '<img src="' + ytexpandimg + '" align="top" border="0" title="Click to Show Video">';
btn.addEventListener('click', function(){toggleembed(this.id,1);}, true);
}
if ((link.innerHTML.indexOf('<img') < 0) && (ytlinks == 1))
{
link.innerHTML = '<i>' + link.innerHTML + " (<b>YT: " + videoname[1] + "</b>)</i>";
if (ytembedimage == 1)
{
link.parentNode.insertBefore(embeddedtag, link.nextSibling);
link.parentNode.insertBefore(btn, link.nextSibling);
}
}
if ((link.innerHTML.indexOf('<img') > -1) && (ytimage == 1))
{
link.innerHTML = '<i>' + link.innerHTML + " (<b>YT: " + videoname[1] + "</b>)</i>";
if (ytembedimage == 1)
{
link.parentNode.insertBefore(embeddedtag, link.nextSibling);
link.parentNode.insertBefore(btn, link.nextSibling);
}
}
else
{
if (link.innerHTML.indexOf('<img') > -1)
{
theimg = link.getElementsByTagName('img');
theimg[0].setAttribute('title', 'YouTube link: Video name = "' + videoname[1] + '"');
}
if ((videoembed.substr(0,1) == "<") && (ytembedimage == 1))
{
link.parentNode.insertBefore(embeddedtag, link.nextSibling);
link.parentNode.insertBefore(btn, link.nextSibling);
}
else
{
if (ytembedimage == 1)
{
link2 = content.responseText.match(/\"video_id\": \"([^<]+)\", \"l\"/);
videoembed = '<object width="425" height="373"><param name="movie" value="http://www.youtube.com/v/' +
link2[1] + '&hl=en&rel=0&color1=0xFF0000&color2=0xFF0000&border=0"></param><param name="wmode"' +
'value="transparent"></param><embed src="http://www.youtube.com/v/' + link2[1] + '&hl=en&rel=0&color1=0xFF0000&color2=0xFF0000&border=0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="373"></embed></object>'
alink = videoname[1] + number;
btn.id = alink; embedid = alink + "embedded";
embeddedtag.id = embedid;
embeddedtag.style.display = 'none';
embeddedtag.setAttribute("align", "center");
embeddedtag.innerHTML = videoembed;
btn.innerHTML = '<img src="' + ytdisabled + '" align="top" border="0" title="Embedding disabled for this video, click to see preview thumb">';
btn.addEventListener('click', function(){toggleembed(this.id,0);}, true);
link.parentNode.insertBefore(embeddedtag, link.nextSibling);
link.parentNode.insertBefore(btn, link.nextSibling);
}
}
}
link.setAttribute('title', 'YouTube link: Video name = "' + videoname[1] + '"');
}
})
}
function toggleembed(id,embedable)
{
embeddedid = id + "embedded";
isembedded = document.getElementById(embeddedid);
if (isembedded.style.display != 'none')
{
if (embedable == 1) document.getElementById(id).innerHTML = '<img src="' + ytexpandimg + '" align="top" border="0" title="Click to Show Video">';
if (embedable == 0) document.getElementById(id).innerHTML = '<img src="' + ytdisabled + '" align="top" border="0" title="Embedding disabled for this video, click to see preview thumb">';
isembedded.style.display = 'none';
}
else
{
document.getElementById(id).innerHTML = '<img src="' + ytcollapseimg + '" align="top" border="0" title="Click to Hide Video">';
isembedded.style.display = '';
}
//alert(id + "\n" + embeddedid +"\n"+ isembedded.style.display);
}
function unescapeHTML(s)
{
return s.replace(
/&(amp|[lg]t|quot);/g,
function(m, p1)
{
var map = {
amp: "&",
lt: "<",
gt: ">",
quot: '"'
};
return map[p1];
});
}