pp for osu score pages

shows pp data from osustats.ppy.sh on osu score pages.

目前為 2014-08-31 提交的版本,檢視 最新版本

// ==UserScript==
// @name        pp for osu score pages
// @namespace   http://osustats.ppy.sh
// @description shows pp data from osustats.ppy.sh on osu score pages.
// @include     http*://osu.ppy.sh/b/*
// @include     http*://osu.ppy.sh/s/*
// @include     http*://osu.ppy.sh/p/beatmap?b=*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// @version     1
// ==/UserScript==

 

var requestingPage=false;
var result=null;
function ShowAlert()
{
	var mapTab = document.getElementsByClassName("beatmapTab active");
	if(mapTab.length==1)
	{
		var split = mapTab[0].href.split("/")[4];
		mapID = split.split("&")[0];
		GetPage(mapID,function(res){
			result = JSON.parse(res);

			var rows,thisImg,username,score,row,pp;

			rows = document.evaluate('//div[@class=\'beatmapListing\']/table/tbody/tr',
			  document,
			  null,
			  XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
			  null);
			rows.snapshotItem(0).children[5].innerHTML="Combo / pp";

			for (var i=1;i<rows.snapshotLength;i++) {
				row = rows.snapshotItem(i);
				username = row.children[4].children[1].innerHTML;
				score = row.children[2].innerHTML.replace(/,/g,'').replace(/<b>/g,'').replace(/<\/b>/g,'');
				pp = GetPpFromUsername(username,score);
				if(pp!=null)
				{	if(pp!="s")
						row.children[5].innerHTML += " / "+(Math.round(pp * 100) / 100)+"pp"; 
					else
						row.children[5].innerHTML += " / N/U"; 
				}
				else
					row.children[5].innerHTML += " / N/D"; 
			}
		});
	}
}
function GetPpFromUsername(username,score)
{
	for (var i=0;i<result.length;i++) {
		if(username == result[i].name)
		{
			if(score == result[i].score)
			{
				return result[i].pp;
			}
			return "s";
		}
	}
	return null;
}
function GetPage(mapID,callback) {
	GM_xmlhttpRequest({
		method: "GET",
		url: "http://osustats.ppy.sh/API/beatmap.php?mode=0&id=" + mapID,
		synchronous: true,
		headers: {
			Referer: location.href
		},
		onload: function(resp) {
			callback(resp.responseText);
		}
	});

}
window.addEventListener('load', function() {
    ShowAlert();
}, false);