Last.fm - Highlight Same Artists - Fixed

By Joel Armstrong Last update Jul 19, 2006 — Installed 7,103 times.
// ==UserScript==
// @name           Last.fm - Highlight Same Artists - Fixed
// @namespace      
// @description    Highlights artists that you listen to on other users' profiles.
// @include        http://www.last.fm/user/*
// ==/UserScript==

var style = "font-weight: bold;";

function xpath(query) {
    return document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}

var fixXML = /^<\?xml version[^>]+?>/;

(function() {
						    var re1 = /^http\:\/\/www\.last\.fm\/user\/([^\/]+)[\/]*$/i;
    //if (!location.href.match(re1)) {
						    // return;
						    //}
    var usernameLink = xpath("//span");
    if (usernameLink.snapshotLength > 0) {
	    var username = usernameLink.snapshotItem(0).innerHTML;
    } else {
      return;
    }
    var isoverallpage = 0;
    var re3 = new RegExp("&subtype=artist");
    if(re3.exec(window.location.href)) {
	   isoverallpage = 1;
    }
    var re2 = new RegExp(username, "i");
    if (location.href.match(re2)) {
     return;
    }
    GM_xmlhttpRequest({
        method: "GET",
        url: "http://ws.audioscrobbler.com/1.0/user/" + username + "/topartists.xml",
        onload: function(responseDetails) {
            var xml = new XML(responseDetails["responseText"].replace(fixXML, ""));
            var xmlArtists = xml[0].artist;
           
//			var hasrecenttracks = xpath("//div[@id=\"recenttracks\"]").snapshotLength;
			if(isoverallpage == 1) {
				var links = xpath("//table[@class=\"barChart\"][1]//td[@class='subject']/span/a");
			} else {
				var links = xpath("//table[@class=\"barChart\"][1]//td[@class='subject']/span/a");
			}
	     
			for (var i = 0; i < links.snapshotLength; i++) {
              var cur = links.snapshotItem(i);
              var curArtist = cur.innerHTML;
	      if(isoverallpage == 1) {
		      curArtist = cur.getAttribute("title");
	      }
 	      for (var j = 0; j < xmlArtists.length(); j++) {
                if (curArtist == xmlArtists[j].name) {
                  var curStyle = cur.getAttribute("style");
                  if (curStyle != null) {
                    cur.setAttribute("style", style + curStyle);
                  } else {
                    cur.setAttribute("style", style);
                  }
                  break;
                }
              }
	      foo = 1;
	  }
        }
    });
})();