User:Voice of All/History/monobook.js

//{{PAGENAME}}

//Helper tools

//admin list

importScript('User:VoABot/adminlist.js');

//bot list

importScript('User:VoABot/botlist.js');

importScript('User:Voice of All/Dates.js');

//date parsing

importScript('User:Voice of All/monobook/parse.js');

function addTab(href, text, id, tooltip)

{

mw.util.addPortletLink("p-cactions", href, text, id, tooltip);

}

//History stats tabs

$(addhiststats)

function addhiststats()

{

if(location.href.indexOf('&action=history') !=-1 && location.href.indexOf('&jsaction=validate') ==-1)

{

addTab("javascript:histstats()", "%", "ca-stats", "History statistics", "");

} else if(location.href.search(/=(Special:Log|Special%3ALog).*&user=[^&]+/) !=-1 && location.href.search(/=Special:Log\/|&type=\w/) ==-1)

{

addTab("javascript:logstats()", "%", "ca-stats", "User's log statistics", "");

addTab("javascript:masterview(5000)", "5k", "ca-v5k", "view last 5000 actions", "");

}

else if( document.title.indexOf('User contributions') == 0 ) {

addTab("javascript:sumperentcuse()", "%", "ca-sumuse", "User's edit statistics", "");

}

else if(document.title.search(/User:|User talk:/) == 0 && document.title.indexOf('/') == -1 && location.href.search(/Special:/) ==-1)

{addTab("javascript:get_userlist_xml()", "$", "ca-stats6", "Shows user groups", "");}

}

//END

function logstats()

{

var body = document.getElementById('bodyContent');

if(document.getElementById('contentSub').innerHTML.indexOf('Viewing log statistics ') !=-1)

{alert("Results already shown."); return;}

var protects = 0;

var unprotects = 0;

var deletes = 0;

var patrols = 0;

var reviews = 0;

var undeletes = 0;

var blocks = 0;

var range_blocks = 0;

var unblocks = 0;

var moves = 0;

var rights = 0;

var botsf = 0;

var botsd = 0;

var renames = 0;

var uploads = 0;

var other = 0;

if(!body.getElementsByTagName('ul')[0])

{alert('No log events found!'); return;}

var l = body.getElementsByTagName('ul')[0].getElementsByTagName('li');

for (var i=0; i

{

var html = l[i].innerHTML;

if(html.indexOf(') moved ) uploaded ") blocked "

{range_blocks += 1;}

else if(l[i].getElementsByTagName('a')[4].innerHTML.search(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d\d/) !=-1)

{range_blocks += 1;}

}

else if(html.indexOf(') unblocked ) protected ) unprotected ) deleted ") restored ") marked ) reviewed "

{rights += 1;}

else if(html.indexOf('\(Renamed the user') !=-1)

{renames += 1;}

else if(html.indexOf('/a>) granted bot status to ) removed bot status from events shown on this page'

//

var TimeDATE = 'Time range: ' + Daylength + ' approximate day(s) of log items on this page
' + 'Current time: ' + current_date + ' || Oldest action on: ' + last_date + ' (UTC)
';

//

document.getElementById('bodyContent').innerHTML = '

' + document.getElementById('contentSub').innerHTML + '
' + TimeDATE + 'Average actions per day: ' + Math.round((100)*average)/100 + ' (for last ' + E + ' actions(s))
' + 'User actions:
' + 'Page moves: ' + Math.round((100)*(100*(moves)/E))/100 + '% (' + moves + ' actions(s))
' + 'Uploads: ' + Math.round((100)*(100*(uploads)/E))/100 + '% (' + uploads + ' actions(s))
' + 'Sysop actions:
' + 'Page protects: ' + Math.round((100)*(100*(protects)/E))/100 + '% (' + protects + ' actions(s))
' + 'Page unprotects: ' + Math.round((100)*(100*(unprotects)/E))/100 + '% (' + unprotects + ' actions(s))
' + 'Patrols: ' + Math.round((100)*(100*(patrols)/E))/100 + '% (' + patrols + ' actions(s))
' + 'Deletes: ' + Math.round((100)*(100*(deletes)/E))/100 + '% (' + deletes + ' actions(s))
' + 'Undeletes: ' + Math.round((100)*(100*(undeletes)/E))/100 + '% (' + undeletes + ' actions(s))
' + 'Blocks: ' + Math.round((100)*(100*(blocks)/E))/100 + '% (' + blocks + ' actions(s)) (' + range_blocks + ' range block(s))
' + 'Unblocks: ' + Math.round((100)*(100*(unblocks)/E))/100 + '% (' + unblocks + ' actions(s))
' + 'Bureaucrat actions:
' + 'Promotions: ' + Math.round((100)*(100*(rights)/E))/100 + '% (' + rights + ' actions(s))
' + 'Bot flaggings: ' + Math.round((100)*(100*(botsf)/E))/100 + '% (' + botsf + ' actions(s))
' + 'Bot de-flaggings: ' + Math.round((100)*(100*(botsd)/E))/100 + '% (' + botsd + ' actions(s))
' + 'Renames: ' + Math.round((100)*(100*(renames)/E))/100 + '% (' + renames + ' actions(s))
' + body.innerHTML.split('')[1];

}

function masterview(number)

{

if(location.href.search(/&limit=\d+/) !=-1)

{

var limit = location.href.match(/&limit=\d+/g)[0];

var url = location.href.replace(limit,'&limit=' + number);

}

else if(location.href.indexOf('Special:Contributions/') !=-1)

{

var name = location.href.split('Special:Contributions/')[1];

var url = mw.config.get('wgScript') + '?title=Special:Contributions&limit=' + number + '&target=' + name;

}

else

{var url = location.href + '&limit=' + number;}

location.href = url;

}

function get_userlist_xml()

{

document.getElementById('contentSub').innerHTML += '
Searching for current usergroup information.' + '\n' + 'Please wait...';

gml_xmlhttp = HTTPClient();

if(!gml_xmlhttp) return;

if( mw.config.get('wgNamespaceNumber') == 2 || mw.config.get('wgNamespaceNumber') == 3 )

{user_name = mw.config.get('wgTitle');}

else // invalid?

{return;}

var pageurl = mw.config.get('wgScriptPath') + '/api.php?action=query&list=users&usprop=groups|registration|editcount|blockinfo&format=xml&ususers=' + encodeURIComponent(user_name);

gml_xmlhttp.open("GET", pageurl, true);

gml_xmlhttp.onreadystatechange = alertget;

gml_xmlhttp.send(null);

}

function getusergroup()

{

gml_xmlhttp = HTTPClient();

if(!gml_xmlhttp)

return;

var pageurl = mw.config.get('wgScript') + '?title=Special:Listusers&group=sysop&limit=5000';

gml_xmlhttp.open("GET", pageurl, true);

gml_xmlhttp.onreadystatechange = userget;

gml_xmlhttp.send(null);

}

function alertget()

{

if(gml_xmlhttp.readyState != 4)

return;

xml = gml_xmlhttp.responseText;

doc = gml_XMLParse(xml);

var user = doc.getElementsByTagName('user');

var info;

var blocked = null;

if (user[0].attributes.getNamedItem("missing") == null && user[0].attributes.getNamedItem("invalid") == null)

{

gset = doc.getElementsByTagName('groups');

if( gset[0] )

{

var groups = gset[0].getElementsByTagName("g");

info = groups[0].textContent;

for( var i=1; i < groups.length; i++ )

{

info += ", " + groups[i].textContent;

}

}

else

{

info = "(None)"

}

info +="; ";

info += user[0].attributes.getNamedItem("editcount").value+" edits; ";

info += "Registered "+user[0].attributes.getNamedItem("registration").value;

if (user[0].attributes.getNamedItem("blockedby")!=null)

blocked = "Blocked by "+user[0].attributes.getNamedItem("blockedby").value+": "+user[0].attributes.getNamedItem("blockreason").value;

}

else info = '(username invalid)';

document.getElementById('contentSub').innerHTML += '
' + info + ''+(blocked==null?'':'
'+blocked+'')+'
';

}

function userget()

{

if(gml_xmlhttp.readyState != 4)

return;

alert("Usergroup list obtained. Seaching for " + user_name + ".");

xml = gml_xmlhttp.responseText.replace(//, '');

doc = gml_XMLParse(xml);

var l = doc.getElementsByTagName('li');

var user_name = document.getElementById('bodyContent').getElementsByTagName('a')[0].innerHTML;

var user_sysop = 'no';

for (i = 0; i < l.length; i++)

{

var name = l[i].getElementsByTagName('a')[0].innerHTML;

if(user_name == name){user_sysop = 'yes'; break;}

}

return user_sysop;

}

// ********************************

// User edit statistics

// ********************************

contribs_first = true;

STATS_ALL_JS_RAN = false;

function sumperentcuse()

{

if(document.getElementById('contentSub').innerHTML.indexOf('Viewing contribution data for') !=-1)

{alert("Results already shown."); return;}

//check name

rights_status = '';

Username = 'this user';

if(location.href.indexOf('username=') !=-1)

{Username = location.href.split('username=')[1].split('&')[0].replace(/\+/g,' ');}

else

{Username = document.getElementById('bodyContent').getElementsByTagName('a')[0].innerHTML;}

theusername = 'user ' + Username + '';

document.getElementById('contentSub').innerHTML += "
Analyzing contributions...please wait";

gml_xmlhttp = HTTPClient();

var pageurl = mw.config.get('wgScript') + '?title=Special:Log&type=upload&user=' + Username + '&page=&limit=5000&useskin=standard';

gml_xmlhttp.open("GET", pageurl, true);

gml_xmlhttp.onreadystatechange = sumperentcuse2;

gml_xmlhttp.send(null);

}

// Get number of non-revert uploads

edits_page_compared_js = 0;

function sumperentcuse2()

{

if(gml_xmlhttp.readyState != 4) return;

xml = gml_xmlhttp.responseText;

document.getElementById('contentSub').innerHTML += "
Analyzing uploads...";

Uploads = 0;

Uploads_length = 0;

var up_list_unique = '|';

if(xml.indexOf('