a | b | |
---|
| 0 | + | // ==UserScript== |
---|
| 0 | + | // @name Last.fm - Real Names |
---|
| 0 | + | // @namespace none |
---|
| 0 | + | // @include http://www.last.fm* |
---|
| 0 | + | // @include http://www.lastfm.* |
---|
| 0 | + | // @include http://cn.last.fm* |
---|
| 0 | + | // ==/UserScript== |
---|
| 0 | + | |
---|
| 0 | + | function trim(str) { |
---|
| 0 | + | return str.replace(/^\s+/, '').replace(/\s+$/, ''); |
---|
| 0 | + | } |
---|
| 0 | + | |
---|
| 0 | + | function getRealName(nick, elem, sliceBy, addRealName) { |
---|
| 0 | + | GM_xmlhttpRequest({ |
---|
| 0 | + | method: 'GET', |
---|
| 0 | + | url: 'http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user='+nick+'&api_key=b25b959554ed76058ac220b7b2e0a026', |
---|
| 0 | + | headers: { |
---|
| 0 | + | 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3', |
---|
| 0 | + | 'Accept': 'text/xml' |
---|
| 0 | + | }, |
---|
| 0 | + | onload: function(response) { |
---|
| 0 | + | if (!response.responseXML) { |
---|
| 0 | + | var xml = (new DOMParser()).parseFromString(response.responseText, 'text/xml'); |
---|
| 0 | + | } else { |
---|
| 0 | + | var xml = response.responseXML; |
---|
| 0 | + | } |
---|
| 0 | + | var realName = xml.getElementsByTagName('realname')[0].firstChild.nodeValue; |
---|
| 0 | + | if (realName) { |
---|
| 0 | + | if (addRealName == true) { |
---|
| 0 | + | var newText = realName.slice(0,sliceBy)+' ('+nick+')'; |
---|
| 0 | + | } else { |
---|
| 0 | + | var newText = realName.slice(0,sliceBy); |
---|
| 0 | + | } |
---|
| 0 | + | var replacedText = new RegExp(nick, 'gi'); |
---|
| 0 | + | if (!elem.hasAttribute('realNameAdded')) { |
---|
| 0 | + | elem.innerHTML = elem.innerHTML.replace(replacedText, newText); |
---|
| 0 | + | elem.setAttribute('realNameAdded', true); |
---|
| 0 | + | } |
---|
| 0 | + | } |
---|
| 0 | + | } |
---|
| 0 | + | }); |
---|
| 0 | + | } |
---|
| 0 | + | |
---|
| 0 | + | function changeName(topElem, sliceBy, addRealName) { |
---|
| 0 | + | var re = /^http:\/\/(.*\.|)(last\.fm|lastfm\.[^\/]+)\/user\/([^\?#]*)$/i; |
---|
| 0 | + | var elems = topElem.getElementsByTagName('a'); |
---|
| 0 | + | for (var i = 0; i < elems.length; i++) { |
---|
| 0 | + | var elem = elems[i]; |
---|
| 0 | + | if (!elem.hasAttribute('realNameAdded')) { |
---|
| 0 | + | if (m = re.exec(elem.href)) { |
---|
| 0 | + | parts = m[3].split('/'); |
---|
| 0 | + | if (!parts[1]) { |
---|
| 0 | + | getRealName(parts[0], elem, sliceBy, addRealName); |
---|
| 0 | + | } |
---|
| 0 | + | } |
---|
| 0 | + | } |
---|
| 0 | + | } |
---|
| 0 | + | } |
---|
| 0 | + | |
---|
| 0 | + | var profileLinks = document.getElementById('profileLinks'); |
---|
| 0 | + | if (profileLinks) |
---|
| 0 | + | changeName(profileLinks, 26, false); |
---|
| 0 | + | |
---|
| 0 | + | var aboutMe = document.getElementById('aboutMe'); |
---|
| 0 | + | if (aboutMe) |
---|
| 0 | + | changeName(aboutMe, 30, false); |
---|
| 0 | + | |
---|
| 0 | + | var shoutList = document.getElementById('shoutList'); |
---|
| 0 | + | if (shoutList) |
---|
| 0 | + | changeName(shoutList, 40, true); |
---|
| 0 | + | |
---|
| 0 | + | var recentDiscussions = document.getElementById('recentDiscussions'); |
---|
| 0 | + | if (recentDiscussions) |
---|
| 0 | + | changeName(recentDiscussions, 60, true); |
---|
| 0 | + | |
---|
| 0 | + | changeName(document.body, 20, false); |
---|
| 0 | + | document.addEventListener('DOMNodeInserted', function(ev){ changeName(ev.originalTarget, 15, true); }, true); |
---|
... | |
---|