User:Gary/wikicup viewer.js

/*

Wikicup Viewer

TODO Highlight cells based on who has the most for each type.

  • /

function wikicupSorter()

{

if (mw.config.get('wgPageName') != 'Wikipedia:WikiCup') return false;

mw.util.addCSS('.wikicup-failing td { background-color: #fee; }\

.wikicup-passing td { background-color: #efe; }\

.wikicup-self td { background-color: #ffe; }\

.key-table { float: left; }\

.viewer-information { float: left; margin-left: 2.5em; background-color: #eee; padding: 10px; }\

.viewer-information-header { font-weight: bold; font-size: 1.25em; }\

');

// Script might be broken during the transition periods between rounds

var today = new Date();

var thisYear = today.getFullYear();

// Round 1

var topContestants = 64;

var topWildcards = 0;

function setCutoff(date, contestants, wildcards)

{

if (today >= new Date(thisYear + '-' + date)) topContestants = contestants, topWildcards = wildcards;

}

setCutoff('03-01', 2, 16); // Round 2

setCutoff('05-01', 2, 8); // Round 3

setCutoff('07-01', 2, 4); // Round 4

setCutoff('09-01', 1, 0); // Round 5

var score = $('.headerSort[abbr=Score]').click().click();

var username = mw.config.get('wgUserName');

// Self: #ffe, passing: #efe, failing: #fee

score.each(function()

{

var contestantCount = 0;

$(this).parent().parent().next().children().each(function()

{

var contestant = $(this);

contestant.addClass('wikicup-contestant');

if (contestant.text().match(username)) contestant.addClass('wikicup-self');

if (contestantCount < topContestants) contestant.addClass('wikicup-passing'); // Passing

else contestant.addClass('wikicup-failing'); // Failing

contestantCount++;

});

});

// Now do the wildcards

var failingScores = [];

$('.wikicup-failing').each(function()

{

failingScores.push([$(this), $(this).children(':last').text()]);

});

// Sort failing scores by score

failingScores.sort(function (a, b)

{

if (parseInt(a[1]) < parseInt(b[1])) return 1;

else if (parseInt(a[1]) == parseInt(b[1])) return 0;

else return -1;

});

var wildcards = failingScores.slice(0, topWildcards);

var minWildcardScore;

if (wildcards.length >= 1) minWildcardScore = parseInt(wildcards[wildcards.length - 1][1]);

else minWildcardScore = 'Unknown';

for (var i = 0; i < wildcards.length; i++)

{

wildcards[i][0].addClass('wikicup-passing');

}

/*

Extra data to add next to the Key for the page

*/

var keyTable = $('#Key').parent().next();

keyTable.addClass('key-table');

keyTable.after('

WikiCup Viewer information
  • Minimum score required as a wildcard: ' + minWildcardScore + ' points
');

}

addOnloadHook(wikicupSorter); // addOnloadHook necessary to allow table to be sortable first