Last.fm: Highlight Common Artists

By Joe S Last update Dec 25, 2006 — Installed 374 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0
// ==UserScript==
// @name           Last.fm: Highlight Common Artists
// @description    Highlights artists common to both your and <user>'s profile.
// @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;
      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;
            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;
                  }
               }
            }
           }
      });
   })();