User:Pathoschild/2010 steward confirmation statistics
Summary table
[edit]Unique participants: 263 (see edits to confirmation pages).
Last update: 2010-03-01 00:00 (UTC)
steward | overall trust[1] | concerns[2] | Relative trust[3] |
Relative concerned[3] |
Relative participation[4] |
result |
---|---|---|---|---|---|---|
Thogo | 1.000, 100% (72/72) | — | 0.274, 27.4% | 0.000, 0% | 0.274, 27.4% | confirmed |
Drini | 1.000, 100% (67/67) | — | 0.255, 25.5% | 0.000, 0% | 0.259, 25.9% | confirmed |
Erwin | 1.000, 100% (55/55) | — | 0.209, 20.9% | 0.000, 0% | 0.209, 20.9% | confirmed |
Leinad | 1.000, 100% (44/44) | — | 0.167, 16.7% | 0.000, 0% | 0.167, 16.7% | confirmed |
M7 | 1.000, 100% (43/43) | — | 0.163, 16.3% | 0.000, 0% | 0.163, 16.3% | confirmed |
Jusjih | 1.000, 100% (33/33) | — | 0.125, 12.5% | 0.000, 0% | 0.125, 12.5% | confirmed |
Mav | 1.000, 100% (30/30) | — | 0.114, 11.4% | 0.000, 0% | 0.114, 11.4% | confirmed |
Rdsmith4 | 1.000, 100% (30/30) | — | 0.114, 11.4% | 0.000, 0% | 0.114, 11.4% | confirmed |
Mike.lifeguard | 0.987, 98.7% (76/77) | — | 0.289, 28.9% | 0.004, 0.4% | 0.293, 29.3% | confirmed |
Bastique | 0.986, 98.6% (73/74) | — | 0.278, 27.8% | 0.004, 0.4% | 0.285, 28.5% | confirmed |
Kylu | 0.984, 98.4% (62/63) | — | 0.236, 23.6% | 0.004, 0.4% | 0.24, 24% | confirmed |
Mardetanha | 0.984, 98.4% (60/61) | — | 0.228, 22.8% | 0.004, 0.4% | 0.232, 23.2% | confirmed |
Laaknor | 0.981, 98.1% (53/54) | — | 0.202, 20.2% | 0.004, 0.4% | 0.205, 20.5% | confirmed |
guillom | 0.981, 98.1% (52/53) | — | 0.198, 19.8% | 0.004, 0.4% | 0.202, 20.2% | confirmed |
DerHexer | 0.978, 97.8% (91/93) | — | 0.346, 34.6% | 0.008, 0.8% | 0.354, 35.4% | confirmed |
Nick1915 | 0.977, 97.7% (43/44) | — | 0.163, 16.3% | 0.004, 0.4% | 0.167, 16.7% | confirmed |
Millosh | 0.972, 97.2% (35/36) | not very active (4). | 0.133, 13.3% | 0.004, 0.4% | 0.141, 14.1% | confirmed |
Dungodung | 0.968, 96.8% (60/62) | — | 0.228, 22.8% | 0.008, 0.8% | 0.236, 23.6% | confirmed |
Shanel | 0.962, 96.2% (50/52) | — | 0.19, 19% | 0.008, 0.8% | 0.198, 19.8% | confirmed |
Pathoschild | 0.951, 95.1% (77/81) | mishandling of public personal information (5). | 0.293, 29.3% | 0.015, 1.5% | 0.312, 31.2% | confirmed |
Darkoneko | 0.942, 94.2% (65/69) | dispute on frwiki (4). | 0.247, 24.7% | 0.015, 1.5% | 0.262, 26.2% | confirmed |
Effeietsanders | 0.915, 91.5% (43/47) | not very active (4). | 0.163, 16.3% | 0.015, 1.5% | 0.179, 17.9% | confirmed |
Sj | 0.889, 88.9% (32/36) | inactive (10). | 0.122, 12.2% | 0.015, 1.5% | 0.141, 14.1% | confirmed |
Oscar | 0.882, 88.2% (45/51) | not very active (13). | 0.171, 17.1% | 0.023, 2.3% | 0.198, 19.8% | confirmed |
Shizhao | 0.794, 79.4% (27/34) | inactive (7), Steward policy violation (6), no statement (4). | 0.103, 10.3% | 0.027, 2.7% | 0.133, 13.3% | confirmed |
Andre Engels | 0.674, 67.4% (29/43) | inactive (17). | 0.11, 11% | 0.053, 5.3% | 0.167, 16.7% | confirmed |
Lar | 0.646, 64.6% (93/144) | incivility & drama (34), ignores policy and consensus & dispute on enwiki & disruption (29), unilateral & threatening (23), militant & divisive & polarized (22), alleged inappropriate behaviour (10), contributes to anti-Wikipedia forum (10), alleged breach of privacy policy (10), few article edits on enwiki (7). | 0.354, 35.4% | 0.194, 19.4% | 0.551, 55.1% | removed |
Cspurrier | 0.622, 62.2% (23/37) | inactive (14). | 0.087, 8.7% | 0.053, 5.3% | 0.144, 14.4% | removed |
Anthere | 0.561, 56.1% (23/41) | inactive (21). | 0.087, 8.7% | 0.068, 6.8% | 0.16, 16% | removed |
Redux | 0.432, 43.2% (16/37) | inactive (25). | 0.061, 6.1% | 0.08, 8% | 0.144, 14.4% | removed |
Alexanderps | 0.263, 26.3% (10/38) | inactive (23), alleged checkuser misuse on home wiki (7), loss of trust (7), steward policy violation (7), mostly does "easy stuff like SRP" (6). | 0.038, 3.8% | 0.106, 10.6% | 0.156, 15.6% | removed |
- ^ The 'overall trust' column is only a rough indicator of how widely trusted a user is. The confirmations are not a vote; arguments will be taken into account, not counts.
- ^ Includes concerns voiced by more than a few users.
- ^ The 'relative trust' and 'relative concerned' columns summarise the percentage of all unique participants in the election who trust this steward (or are concerned about them). This helps put the statistics in context, but it is not an indication of absolute support; for example, many well-trusted stewards will receive fewer comments simply because there is no need to comment when the result is already obvious.
- ^ The 'relative participation' column indicates the percentage of all unique participants who commented on this steward (including ambivalent or neutral comments).
Comparative participation & trust
[edit]The bars below show the overall participation and opinions of all participating users for each steward, where green indicates trust, red indicates non-trust, grey indicates neutral, and bordered white indicates users who did not comment on this steward.
Comparative non-trust
[edit]The bars below show the relative concern about each steward as a percentage of all commenting users, where red indicates non-trust, green indicates trust, grey indicates neutral, and bordered white indicates users who did not comment on this steward.
Lar | |||||
Alexanderps | |||||
Redux | |||||
Anthere | |||||
Cspurrier | |||||
Andre Engels | |||||
Shizhao | |||||
Oscar | |||||
Pathoschild | |||||
Darkoneko | |||||
Effeietsanders | |||||
Sj | |||||
Shanel | |||||
Dungodung | |||||
DerHexer | |||||
Nick1915 | |||||
Mike.lifeguard | |||||
Bastique | |||||
Kylu | |||||
Mardetanha | |||||
Millosh | |||||
guillom | |||||
Laaknor | |||||
Mav | |||||
Rdsmith4 | |||||
Jusjih | |||||
M7 | |||||
Leinad | |||||
Erwin | |||||
Drini | |||||
Thogo | |||||
Script
[edit]Although comments need to be tallied manually, this can be done quickly by using the following quick-and-dirty script to count comments for each listed candidate, note how many comments were added since the last update, and re-sort the table when done tallying.
The script should be run while editing the table section. It uses the regex menu framework.
/*********************
** Functions
*********************/
function ses_report(text) {
$('stewiestats').adopt(document.createTextNode(text));
}
/*********************
** Initialize
*********************/
function ses_update_stats() {
/*********************
** Display status box
*********************/
var box = document.getElementById('stewiestats');
if(!box) {
// load required framework
importScriptURI('http://meta.wikimedia.org/w/index.php?title=User:Pathoschild/Scripts/MooTools.js&action=raw&ctype=text/javascript');
// create box
box = document.createElement('pre');
box.setAttribute('id','stewiestats');
box.setAttribute('style', 'margin:1em; padding:0.5em; border:1px solid #C00;');
box.appendChild(document.createTextNode('Loading required framework...\n'));
editbox.parentNode.insertBefore(box, editbox.parentNode.firstChild);
// jump to box
window.location.hash = "#stewiestats";
}
/*********************
** Wait until WikiMooTools loaded
*********************/
if(!window.$chk) {
setTimeout('init_scan()', 500);
return;
}
// clear old messages
box.empty();
ses_report('Loading required framework...\n');
/*********************
** Extract list of candidates & counts
*********************/
ses_report('Extracting candidate list...\n');
var names = [];
var totals = [];
var text = editbox.value.match(/<!--ses-start-->([\s\S]+?)<!--ses-end-->/)[1].toString();
var temps = text.match(/{{user[\s\S]+?}}/ig);
for(var i=0, len=temps.length; i<len; i++) {
var supps = temps[i].match(/support *= *(.+)/)[1].toString();
var oppos = temps[i].match(/oppose *= *(.+)/)[1].toString();
var neuts = temps[i].match(/neutral *= *(.+)/)[1].toString();
names[i] = temps[i].match(/name *= *(.+)/)[1].toString();
totals[i] = parseInt(supps) + parseInt(oppos) + parseInt(neuts);
}
/*********************
** Extract participant count
*********************/
ses_report('Counting unique participants... ');
box.adopt(
new Element('span', {'id':'ses-box-count'})
);
ses_report('\n');
var request = new Request({
url:'http://meta.wikimedia.org/wiki/Stewards/confirm?action=render',
method: 'GET',
onSuccess:function(text, xml) {
var links = text.match(/<li.+title="User:[^\/"]+/ig);
var names = {};
var count = 0;
for(var i=0, len=links.length; i<len; i++) {
var name = links[i].match(/User:(.+)$/)[1];
if(!names[name]) {
names[name] = 1;
count++;
}
}
$('ses-box-count').adopt(document.createTextNode(count));
editbox.value = editbox.value.replace(/(<span id="ses-count">).*?(<\/span>)/, '$1' + count + '$2');
editbox.value = editbox.value.replace(/(total voters\s*=\s*)\d*/g, '$1' + count);
},
onFailure: function(xhr) {
$('ses-box-count').set({'text':' FAILED: ' + xhr.status + ' (' + xhr.statusText + ')'});
}
}).send();
/*********************
** Extract comment counts per candidate
*********************/
ses_report('Fetching elections pages...\n');
for(var i=0, len=temps.length; i<len; i++) {
var div = new Element('div')
box.adopt(div);
extract_count(div, names[i], totals[i]);
}
/*********************
** Extract a count
*********************/
function extract_count(div, name, prev_count) {
var request = new Request({
url:'http://meta.wikimedia.org/wiki/Stewards/confirm/2010/' + encodeURIComponent(name) + '?action=render',
method: 'GET',
onSuccess:function(text, xml) {
// strip cruft
text = text.replace(/^[\s\S]+?Comments about .+/, ''); // statement, etc
text = text.replace(/^.+class="[^"]*stat-ignore.+$/mg, ''); // ignore non-comment lines
// count comments
var count = text.match(/^<li/mg).length;
// report to user
div.set({
'text':' ' + (count<10 ? ' ' : '') + count + ' '
}).adopt(
new Element('a', {
'href':'http://meta.wikimedia.org/wiki/Stewards/confirm/2010/' + encodeURIComponent(name) + '?action=render',
'text':name + (count != prev_count ? (' (+' + (count - prev_count) + ')') : '')
})
);
// highlight those with non-matching counts
if(count!=prev_count)
div.set({'styles':{'background':'#FEE', 'font-weight':'bold'}});
else
div.set({'styles':{'color':'gray'}});
},
onFailure: function(xhr) {
div.set({'text':' ' + name + ' FAILED: ' + xhr.status + ' (' + xhr.statusText + ')'});
}
}).send();
}
/*********************
** Add 'sort table' link
*********************/
box.adopt(
new Element('div').adopt(
new Element('a', {
'href':'javascript:ses_sort_table();',
'text':'sort table'
})
)
).adopt(
new Element('div').adopt(
new Element('a', {
'href':'javascript:ses_update_stats();',
'text':'recheck'
})
)
);
}
ses_update_stats();
/*********************
** Sort table
*********************/
function ses_sort_table() {
ses_report('\nSorting table and updating date...\n');
/***************
** Extract rows & data
***************/
var raw = editbox.value.match(/<!--ses-start-->([\s\S]+?)<!--ses-end-->/i)[1].toString();
raw = raw.match(/{{user[^}]+?}}/ig);
var names = [];
var sorted = [];
var rows = {};
var ratios = {};
var counts = {};
for(var i=0, len=raw.length; i<len; i++) {
var name = raw[i].match(/name *= *(.+)/)[1].toString();
var supports = raw[i].match(/support *= *(.+)/)[1].toString();
var opposes = raw[i].match(/oppose *= *(.+)/)[1].toString();
var neutrals = raw[i].match(/neutral *= *(.+)/)[1].toString();
names.push(name);
counts[name] = supports+opposes+neutrals;
ratios[name] = supports/(supports+opposes);
rows[name] = raw[i];
}
/***************
** Sort rows
***************/
for(var i=0, len=names.length; i<len; i++) {
var name = names[i];
var ratio = ratios[name];
// insert into sorted position
for(var x=0, slen=sorted.length; x<=slen; x++) {
// end of array, just push it in
if(x==slen) {
sorted.push(name);
break;
}
// equal but more votes (or sorted first), insert
else if(ratios[name]==ratios[sorted[x]]) {
if(counts[name]>counts[sorted[x]] || (counts[name]==counts[sorted[x]] && name<sorted[x])) {
sorted.splice(x, 0, name);
break;
}
}
// higher, insert
else if(ratios[name]>ratios[sorted[x]]) {
sorted.splice(x, 0, name);
break;
}
}
}
/*********************
** Update date
*********************/
function get_date() {
// zero pad
function zero_pad(num) {
if(num<10)
num = '0' + num;
return num;
}
// generate string
var d = new Date();
var str = d.getUTCFullYear() + '-' + zero_pad(d.getUTCMonth()+1) + '-' + zero_pad(d.getUTCDate()) + ' '
+ zero_pad(d.getUTCHours()) + ':' + zero_pad(d.getUTCMinutes()) + ' (UTC)';
return str;
}
editbox.value = editbox.value.replace(/(<span id="ses-date">).*?(<\/span>)/, '$1' + get_date() + '$2');
/***************
** Update edit box
***************/
var str = '';
len = sorted.length;
for(var i=0; i<len; i++)
str += rows[sorted[i]] + '\n';
editbox.value = editbox.value.replace(/(<!--ses-start-->)[\s\S]+?(<!--ses-end-->)/i, '$1\n' + str + '$2');
document.getElementById('wpSummary').value = 'updated';
ses_report('Done.');
}