// ==UserScript== // @name Last.fm - Real Names // @namespace none // @include http://www.last.fm* // @include http://www.lastfm.* // @include http://cn.last.fm* // ==/UserScript== function trim(str) { return str.replace(/^\s+/, '').replace(/\s+$/, ''); } function getRealName(nick, elem, sliceBy, addRealName) { GM_xmlhttpRequest({ method: 'GET', url: 'http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user='+nick+'&api_key=b25b959554ed76058ac220b7b2e0a026', headers: { 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3', 'Accept': 'text/xml' }, onload: function(response) { if (!response.responseXML) { var xml = (new DOMParser()).parseFromString(response.responseText, 'text/xml'); } else { var xml = response.responseXML; } var realName = xml.getElementsByTagName('realname')[0].firstChild.nodeValue; if (realName) { if (addRealName == true) { var newText = realName.slice(0,sliceBy)+' ('+nick+')'; } else { var newText = realName.slice(0,sliceBy); } var replacedText = new RegExp(nick, 'gi'); if (!elem.hasAttribute('realNameAdded')) { elem.innerHTML = elem.innerHTML.replace(replacedText, newText); elem.setAttribute('realNameAdded', true); } } } }); } function changeName(topElem, sliceBy, addRealName) { var re = /^http:\/\/(.*\.|)(last\.fm|lastfm\.[^\/]+)\/user\/([^\?#]*)$/i; var elems = topElem.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; if (!elem.hasAttribute('realNameAdded')) { if (m = re.exec(elem.href)) { parts = m[3].split('/'); if (!parts[1]) { getRealName(parts[0], elem, sliceBy, addRealName); } } } } } var users = document.getElementById('users'); if (users) { var elems = users.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; elem.setAttribute('realNameAdded', true); } } var memberList = document.getElementById('memberList'); if (memberList) { var elems = memberList.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; elem.setAttribute('realNameAdded', true); } } var profileLinks = document.getElementById('profileLinks'); if (profileLinks) changeName(profileLinks, 26, false); var aboutMe = document.getElementById('aboutMe'); if (aboutMe) changeName(aboutMe, 30, false); var shoutList = document.getElementById('shoutList'); if (shoutList) changeName(shoutList, 40, true); var recentDiscussions = document.getElementById('recentDiscussions'); if (recentDiscussions) changeName(recentDiscussions, 60, true); changeName(document.body, 20, false); document.addEventListener('DOMNodeInserted', function(ev){ changeName(ev.originalTarget, 15, true); }, true); (function() { var css = "#LastAd_TopRight, #LastAd_Top, #LastAd_Mid, #footer_ads, #cbsi_f_pop, #cbsi_f, .LastAd, .advert { display: none !important; } #footer_content, #footerLinks { margin: 0 !important; } .skylineRight { padding-right: 0 !important; margin-left: 0 !important; } .skyWrap { padding: 0 0 0 3px !important; } .forumComments .wrapper, .forumComments .date { width: 100% !important; }"; if (typeof GM_addStyle != "undefined") { GM_addStyle(css); } else if (typeof PRO_addStyle != "undefined") { PRO_addStyle(css); } else if (typeof addStyle != "undefined") { addStyle(css); } else { var heads = document.getElementsByTagName("head"); if (heads.length > 0) { var node = document.createElement("style"); node.type = "text/css"; node.appendChild(document.createTextNode(css)); heads[0].appendChild(node); } } })();