Last.fm Mutual Groups

By lunrfarsde Last update Nov 7, 2008 — Installed 1,953 times.

There are 1 previous version of this script.

// ==UserScript==
// @name           		Last.fm Mutual Groups
// @namespace      		http://lunrfarsde.blogspot.com
// @description         	Lists all the groups of the user instead of first five and highlights the ones which you are both in
// @include        		http://www.lastfm.com.*/user/*
// @include			http://www.last.fm/user/*
// ==/UserScript==

(function() {
var user = document.location.pathname.split("/")[2];

var localUser = "";
if (t = document.getElementById("idBadgerUser")) {
	href = t.getAttribute("href");
	localUser = href.substring(href.indexOf("/", 1) + 1);
}

function isFirstLocalGroupPage() {
	if (user != localUser) return false;

	if (document.location.pathname.split("/")[3] == "groups") {
		searchArray = document.location.search.substr(1).split("&");
		for (i=0; i < searchArray.length; i++)
			if (searchArray[i].split("=")[0] == "groupspage" &&  searchArray[i].split("=")[1] != "1")
				return false; 
		return true;
	}
	return false;
}

var counter = 0;

function purgeRegister() {
	i = counter;
	while (GM_getValue(localUser + "." + i, "") != "") {
		GM_setValue(localUser + "." + i, "");
		i++;
	}	 
}

function getGroups(user, pageNumber, totalPages, f, purge, modifyPage) {
	GM_xmlhttpRequest({
		method: 'GET',
		url: 'http://' + document.location.host + '/user/' + user + '/groups?groupspage=' + pageNumber,
		onload: function(responseDetails) {	
			while (matchHref = /<strong><a href="\/group\/(.*?)">/gm.exec(responseDetails.responseText)) {
				matchMemberCount = /<p class="members">(.+?)<\/p>/gm.exec(responseDetails.responseText);
				matchName = /<img class="groupImage .* src="(\S+?)" \/> (.+?)<\/a>/gm.exec(responseDetails.responseText);
				f(matchHref[1], matchName[2], matchName[1], matchMemberCount[1]);
			}
			if (modifyPage) groupsBox.innerHTML = pageNumber == 1 ? strHTML : groupsBox.innerHTML + strHTML;
			strHTML = '';
	
			if (pageNumber < totalPages) getGroups(user, pageNumber + 1, totalPages, f, purge, modifyPage)
			else if (purge) purgeRegister()
			else if (modifyPage) groupsBox.parentNode.childNodes[1].removeChild(throbber);
		}
	});
}

if (isFirstLocalGroupPage()) {
	f = function (href) {
		GM_setValue(localUser + "." + counter, href);
		counter++;
	}
			
	groups = document.evaluate("//div[@class='groupContainer']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for (i=0; i<groups.snapshotLength; i++) {
		href = groups.snapshotItem(i).childNodes[1].firstChild.getAttribute("href");
		
		f(href.substring(href.lastIndexOf("/") + 1));
	}

	heading = document.evaluate("//span[@class='h2Wrapper']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
	noPages = Math.ceil(/\b(\d+)\b/.exec(heading.innerHTML)[1] / 20);
	
	if (noPages > 1) getGroups(localUser, 2, noPages, f, true, false)
	else purgeRegister();
		
	GM_setValue(localUser, 1);
	return;
}

if (localUser == user) return;

var strHTML = '';
var groupsBox = document.evaluate("//ul[@class='groupsSmall']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
if (!groupsBox) return;
noGroups = /\((\d+)\)/.exec(groupsBox.parentNode.childNodes[1].firstChild.firstChild.innerHTML)[1];
noPages = Math.ceil(noGroups / 20);

var throbber = document.createElement("img");
throbber.setAttribute("id", "MG.throbber");
throbber.src = "data:image/gif,GIF89a%10%00%10%00%E3%08%00%00%00%00%1A%1A%1A333LLLfff%80%80%80%99%99%99%B2%B2%B2%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF!%FF%0BNETSCAPE2.0%03%01%00%00%00!%F9%04%01%0A%00%08%00%2C%00%00%00%00%10%00%10%00%00%04H%10%C9%89%00%A0%98Z%9Bg%08%D5%86%1C%07%F6%7D%E1H%96%DEI%ADl%9B%91%94%20t%93a%20%B6%8D%EB%BA%DE%AD%03%DC%F9p%08%1De0%C8%14%0A%18%26%93%F2%7C.%A5%08%02%01Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00!%F9%04%01%0A%00%0F%00%2C%00%00%00%00%10%00%10%00%00%04H%F0%C9%F9B%A0%98Z%9B%A7%10%D5%F6%00%00%F6%7D%E1H%96%DEI%ADl%9B%91%D40t%D3q%3C%B6%8D%EB%BA%DE%AD%03%DC%F9p%0F%1D%85%40%C8%18%0C%18%26%93%F2%7C.%A5%8FB%E1Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00!%F9%04%01%0A%00%0F%00%2C%00%00%00%00%10%00%10%00%00%04H%F0%C9%F9%84%A0%98Z%9B%E7%18%D5%F6%04%01%F6%7D%E1H%96%DEI%ADl%9B%91%14At%13%00%3C%B6%8D%EB%BA%DE%AD%03%DC%F9p%0F%1D%A5P%C8%1C%0E%18%26%93%F2%7C.%A5%0F%83%E1Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00!%F9%04%01%0A%00%0F%00%2C%00%00%00%00%10%00%10%00%00%04H%F0%C9%F9%C6%A0%98Z%9B'!%D5%F6%08%02%F6%7D%E1H%96%DEI%ADl%9B%91TQtS%10%3C%B6%8D%EB%BA%DE%AD%03%DC%F9p%0F%1D%C5%60%C8%00%00%18%26%93%F2%7C.%A5%8F%C3%E1Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00!%F9%04%01%0A%00%0F%00%2C%00%00%00%00%10%00%10%00%00%04H%F0%C9%F9%08%A1%98Z%9Bg)%D5%F6%0C%03%F6%7D%E1H%96%DEI%ADl%9B%91%94at%93%20%3C%B6%8D%EB%BA%DE%AD%03%DC%F9p%0F%1D%E5p%C8%04%02%18%26%93%F2%7C.%A5%0F%00%E0Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00!%F9%04%01%0A%00%0F%00%2C%00%00%00%00%10%00%10%00%00%04H%F0%C9%F9J%A1%98Z%9B%A71%D5%F6%10%04%F6%7D%E1H%96%DEI%ADl%9B%91%D4qt%D30%3C%B6%8D%EB%BA%DE%AD%03%DC%F9p%0F%1D%05%00%C8%08%04%18%26%93%F2%7C.%A5%8F%40%E0Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00!%F9%04%01%0A%00%0F%00%2C%00%00%00%00%10%00%10%00%00%04H%F0%C9%F9%8C%A1%98Z%9B%E79%D5%F6%14%05%F6%7D%E1H%96%DEI%ADl%9B%91%14%00t%13A%3C%B6%8D%EB%BA%DE%AD%03%DC%F9p%0F%1D%25%10%C8%0C%06%18%26%93%F2%7C.%A5%0F%81%E0Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00!%F9%04%01%0A%00%0F%00%2C%00%00%00%00%10%00%10%00%00%04H%F0%C9%F9%CE%A1%98Z%9B'%00%D5%F6%18%06%F6%7D%E1H%96%DEI%ADl%9B%91T%10tSQ%3C%B6%8D%EB%BA%DE%AD%03%DC%F9p%0F%1DE%20%C8%10%08%18%26%93%F2%7C.%A5%8F%C1%E0Q%85%5E%B3%DA%AD%15%17%DE%22'%DAN%04%00%3B"
groupsBox.parentNode.childNodes[1].insertBefore(throbber, groupsBox.parentNode.childNodes[1].firstChild);

if (localUser) {
	if (GM_getValue(localUser, 0) == 0) {
		f = function (groupName) {
			GM_setValue(localUser + "." + counter, groupName);
			counter++;
		}			
		getGroups(localUser, 1, noPages, f, false, false);
		GM_setValue(localUser, 1);
	}
	
	f = function (href, name, src, info) {
		i = 0;
		while (g = GM_getValue(localUser + "." + i)) {
			if (g == href) {
				name = '<span style="color:red">' + name + '</span>';
				break;
			}
			i++;
		}
		
		strHTML += '<li class="clearit"><a href="/group/' + href
			+ '"><strong><span class="groupImg"><img class="groupImage imagesmallsquare" height="34" width="34" src="' 
			+ src + '"></span>' + name + '</strong><span class="info">' + info + '</span></a></li>';
	}
			
	getGroups(user, 1, noPages, f, false, true);
}
else {
	f = function (href, name, src, info) {
		strHTML += '<li class="clearit"><a href="/group/' + href
			+ '"><strong><span class="groupImg"><img class="groupImage imagesmallsquare" height="34" width="34" src="' 
			+ src + '"></span>' + name + '</strong><span class="info">' + info + '</span></a></li>';
	}
	
	getGroups(user, 1, noPages, f, false, true);
}
})();