Wowhead - User Rating

By Zuo Last update Aug 26, 2008 — Installed 34 times. Daily Installs: 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

There are 1 previous version of this script.

// ==UserScript==
// @name           Wowhead - User Rating
// @namespace      Wowhead - User Rating (alpha)
// @description    The alpha is really primitive, script is really clumsy but works (with some errors sometimes). Still experimenting around with javascript and greasemonkey. Try this if you wanna check out how it works and looks. Adds a reputation like bar to user profiles, if the user has contributed a lot then his reputation will be high.
// @include        *wowhead.com/?user=*
// ==/UserScript==

// Get page HTML in a string
var html = document.getElementsByTagName('html')[0].innerHTML;

// Data uploaded
var _dat = (html.match(/Data uploads\: \d+/) || 0).toString();
var _dat = parseInt(_dat.substring(14,_dat.length));
var _dat2 = 0;
if(_dat) {
	var _dat2 = (html.match(/\d+\.\d+ (MB|KB)/g) || 0).toString();
	var _dat2 = parseInt(_dat2.substring(0,_dat2.length-2));
	if((html.match(/(MB|KB)/g)[0] || 0).toString()=="MB" || (html.match(/(MB|KB)/g)[0] || 0).toString()=="M") {
		var _datis = 1;
	} else {
		var _datis = 0;
	}
}

// Comments
var _com = (html.match(/Comments\: \d+/) || 0).toString();
var _com = parseInt(_com.substring(10,_com.length));
var _com2 = 0;
if(_com) {
	var _com2 = (html.match(/onmousemove\=\"Tooltip\.cursorUpdate\(event\)\" onmouseout\=\"Tooltip\.hide\(\)\"\>\d+\<\/span\>\)\<\/small\>/) || 0).toString();
	var _com2 = _com2.substring(70,_com2.length);
	var _com2 = parseInt(_com2.replace(/(\<|\/|s|p|a|n|\>|\)|m|l)/g,''));
}

// Screenshots
var _scr = (html.match(/Screenshots\: \d+/) || 0).toString();
var _scr = parseInt(_scr.substring(13,_scr.length));

// Forum posts
var _for = (html.match(/Forum posts\: \d+/) || 0).toString();
var _for = parseInt(_for.substring(13,_for.length));

// getElementsByClassName function
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
}

// Parse as int just in case and make sure no errors occur further down!
if(_dat.toString()=="NaN") {
	_dat = 0;
}
if(_dat2.toString()=="NaN") {
	_dat2 = 0;
}
if(_com.toString()=="NaN") {
	_com = 0;
}
if(_com2.toString()=="NaN") {
	_com2 = 0;
}
if(_scr.toString()=="NaN") {
	_scr = 0;
}
if(_for.toString()=="NaN") {
	_for = 0;
}
_dat = parseInt(_dat);
_dat2 = parseInt(_dat2);
_com = parseInt(_com);
_com2 = parseInt(_com2);
_scr = parseInt(_scr);
_for = parseInt(_for);

// Kill if not able to process the rest of the code
if(!(_dat || _dat2 || _com || _com2 || _scr || _for) || (_dat2.length<=0 || _com2.length<=0 || _scr.length<=0 || _for.length<=0) || (_dat2<=0 && _com2<=0 && _scr<=0 && _for<=0)) {
	var rep_text = "Not enough data";
	var box = getElementsByClassName("infobox")[0];
	box.innerHTML = box.innerHTML + 
	"<tbody><tr><th>" + 
	"Reputation" + 
	"</th></tr><tr><td>" + 
	'<table style="border-collapse:collapse;cursor:default" width="150" height="36">'+
	'	<tr>'+
	'		<td style="height:28px;background:url(\'http://i38.tinypic.com/2ekp1qa.jpg\')"></td>'+
	'		<td style="height:28px;background:url(\'http://i36.tinypic.com/2h8376b.jpg\')"></td>'+
	'	</tr>'+
	'	<tr>'+
	'		<td width="100%" colspan="2" style="height:2px"><div style="position:relative;z-index:10;top:-25px;width:150px;text-align:center;font-size:9pt;font-weight:bold;color:#FFFFFF">' + rep_text + '</div></td>'+
	'	</tr>'+
	'</table>' + 
	"</td></tr></tbody>";
	return;
}

// Generate reputation level and text
if(_datis==1) {
	var f_dat = _dat2 * 10.05;
} else {
	var f_dat = _dat2 * 0.010065;
}
var f_com = (_com2 * 5.25) + (_com * 1.85);
var f_scr = _scr * 13.37;
var f_for = _for * 1.55;
var rep_got = Math.ceil( 0 + ( f_dat + f_com + f_scr + f_for ) );
var rep_text = "#R{"+rep_got+"}";

if(rep_got<0) {
	var rep_text = "Unfriendly";
	var rep_text = rep_text + " (" + (rep_got) + ")";
} else if(rep_got>=0 && rep_got<=2999) {
	var rep_text = "Neutral";
	var rep_stage = rep_got;
	var rep_full = 3000;
	var rep_text = rep_text + " ("+rep_stage+" / "+rep_full+")";
} else if(rep_got>=3000 && rep_got<=5999) {
	var rep_text = "Friendly";
	var rep_stage = (rep_got-3000);
	var rep_full = 6000;
	var rep_text = rep_text + " ("+rep_stage+" / "+rep_full+")";
} else if(rep_got>=6000 && rep_got<=11999) {
	var rep_text = "Honored";
	var rep_stage = (rep_got-9000);
	var rep_full = 12000;
	var rep_text = rep_text + " ("+rep_stage+" / "+rep_full+")";
} else if(rep_got>=12000 && rep_got<=20999) {
	var rep_text = "Revered";
	var rep_stage = (rep_got-21000);
	var rep_full = 21000;
	var rep_text = rep_text + " ("+rep_stage+" / "+rep_full+")";
} else if(rep_got>=21000) {
	var rep_text = "Exalted";
	if((rep_got-42000)>999) {
		var rep_got = 999;
	} else {
		var rep_got = (rep_got-42000);
	}
	var rep_stage = rep_got;
	var rep_full = 999;
	var rep_text = rep_text + " ("+rep_stage+" / "+rep_full+")";
}
var _l = Math.floor((150/rep_full)*rep_stage);
var _r = Math.floor(150-_l);
var rep_prec = Math.round(((100/rep_full)*rep_stage)*100)/100;

// Create reputation bar in profile
var box = getElementsByClassName("infobox")[0];
box.innerHTML = box.innerHTML + 
"<tbody><tr><th>" + 
"Reputation" + 
"</th></tr><tr><td>" + 
'<table style="border-collapse:collapse;cursor:default" width="150" height="36">'+
'	<tr>'+
'		<td style="width:'+_l+'px;height:28px;background:url(\'http://i38.tinypic.com/2ekp1qa.jpg\')"></td>'+
'		<td style="width:'+_r+'px;height:28px;background:url(\'http://i36.tinypic.com/2h8376b.jpg\')"></td>'+
'	</tr>'+
'	<tr>'+
'		<td width="100%" colspan="2" style="height:2px"><div style="position:relative;z-index:10;top:-25px;width:150px;text-align:center;font-size:9pt;font-weight:bold;color:#FFFFFF" onmouseover="this.innerHTML=\'' + (Math.round((100-rep_prec)*100)/100) + '% to level up\';" onmouseout="this.innerHTML=\'' + rep_text + '\';">' + rep_text + '</div></td>'+
'	</tr>'+
'</table>' + 
"</td></tr></tbody>";