// ==UserScript==
// @name Last.fm with Oink
// @namespace http://term.ie/devdev/
// @description Shows a link to browse Oink next to any artist link on last.fm
// @include http://*.last.fm/*
// @include http://last.fm/*
// ==/UserScript==
// Directly this from (with minor modifications)
// http://mll02.free.fr's Last.fm with Allmusic
(function()
{
gUseIcon = true;
gUseText = false;
function isArtistURL(theUrl)
{
if (theUrl == null)
return(false);
// Looking for "/music/". If any more slashes are found, then this is not a URL to the artist itself.
var searchStr = "/music/";
// We don't want links to music recommendation
if (theUrl.indexOf("/recommended/music/") >= 0) return (false) ;
var pos = theUrl.indexOf(searchStr);
// Is the prefix correct?
if (pos >= 0)
{
var temp = theUrl.substring(pos + searchStr.length);
// Are there any more slashes? One more is ok.
var pos = temp.indexOf("/");
// If there are no more slashes, then success.
if (pos == -1)
return(true);
temp = temp.substring(pos+1);
// Is there anything left?
return (temp == null || temp.length == 0);
}
}
function getNodeText(node, goDeep)
{
var nodeText = node.nodeValue;
if (goDeep && nodeText == null && node.childNodes != null && node.childNodes.length > 0)
{
nodeText= "";
for (var i=0; i < node.childNodes.length; ++i)
{
nodeText += getNodeText(node.childNodes.item(i), goDeep);
}
}
return(nodeText == null ? "" : nodeText);
}
function makeLink(artistName)
{
if (artistName != null && artistName.length > 0 && artistName != "Overview" && artistName != "Music")
{
var container = document.createElement("span");
container.appendChild(document.createTextNode(" "));
var newLink = document.createElement("a");
newLink.setAttribute("href", "http://oink.cd/browse.php?search=" + escape(artistName));
if (gUseText) {
newLink.appendChild(document.createTextNode("{oink}"));
}
if (gUseIcon) {
var newImg = document.createElement("img");
newImg.setAttribute("src", "http://term.ie/data/oinkfavicon.gif");
newImg.setAttribute("style", "display: inline; margin-bottom: -6px; position: relative;");
newLink.appendChild(newImg);
}
container.appendChild(newLink);
return(container);
}
return(null);
}
function insertLinks()
{
var hyperlinks = document.getElementsByTagName("a");
for (var i = 0; i < hyperlinks.length; ++i)
{
var node = hyperlinks[i];
var href = node.getAttribute("href");
if (isArtistURL(href))
{
var link = makeLink(getNodeText(node, true));
if (link != null)
{
if (node.nextSibling == null)
node.parentNode.appendChild(link);
else
node.parentNode.insertBefore(link, node.nextSibling);
}
}
}
}
insertLinks();
})();