Keep checking BNN for the breaking news updates, and discuss it on the forums or in the Bulbagarden Discord server.

Want to write an article? Go ahead! Have an opinion to share? An idea for a new column? Contact us!

Difference between revisions of "MediaWiki:Common.js"

From Bulbanews, your community Pokémon newspaper.
Jump to: navigation, search
m
(Always some little error...)
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
/* <pre> */
 
/* <pre> */
 
/* Any JavaScript here will be loaded for all users on every page load. */
 
/* Any JavaScript here will be loaded for all users on every page load. */
  +
  +
if ( wgIsArticle || window.location.href.indexOf( 'action=submit' ) > -1 )
  +
{
  +
var script = document.createElement( 'script' );
  +
script.src = '/w/index.php?title=User:Poke/CollapsibleTables.js&action=raw&ctype=text/javascript';
  +
script.type = 'text/javascript';
  +
document.getElementsByTagName( 'head' )[0].appendChild( script );
  +
  +
hookEvent( 'load', function()
  +
{ new CollapsibleTables(); } );
  +
}
   
 
function formatDate(t)
 
function formatDate(t)
Line 130: Line 141:
 
function startCountdown()
 
function startCountdown()
 
{
 
{
updateClocks();
 
 
document.getElementById('countdown-target').innerHTML = 'to ' + formatDate(new Date(T + tzOffset)) + ' ' + tz;
 
document.getElementById('countdown-target').innerHTML = 'to ' + formatDate(new Date(T + tzOffset)) + ' ' + tz;
 
document.getElementById('countdown').style.display = 'block';
 
document.getElementById('countdown').style.display = 'block';
  +
updateClocks();
 
}
 
}
  +
  +
/*
  +
Table sorting script by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
  +
Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
  +
Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .
  +
  +
Copyright (c) 1997-2007 Stuart Langridge, Joost de Valk.
  +
  +
Version 1.5.7
  +
*/
  +
  +
/* You can change these values */
  +
var image_path = "http://www.joostdevalk.nl/code/sortable-table/";
  +
var image_up = "arrow-up.gif";
  +
var image_down = "arrow-down.gif";
  +
var image_none = "arrow-none.gif";
  +
var europeandate = false;
  +
var alternate_row_colors = true;
  +
  +
/* Don't change anything below this unless you know what you're doing */
  +
addEvent(window, "load", sortables_init);
  +
  +
var SORT_COLUMN_INDEX;
  +
var thead = false;
  +
  +
function sortables_init() {
  +
// Find all tables with class sortable and make them sortable
  +
if (!document.getElementsByTagName) return;
  +
tbls = document.getElementsByTagName("table");
  +
for (ti=0;ti<tbls.length;ti++) {
  +
thisTbl = tbls[ti];
  +
if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
  +
ts_makeSortable(thisTbl);
  +
}
  +
}
  +
}
  +
  +
function ts_makeSortable(t) {
  +
if (t.rows && t.rows.length > 0) {
  +
if (t.tHead && t.tHead.rows.length > 0) {
  +
var firstRow = t.tHead.rows[t.tHead.rows.length-1];
  +
thead = true;
  +
} else {
  +
var firstRow = t.rows[0];
  +
}
  +
}
  +
if (!firstRow) return;
  +
  +
// We have a first row: assume it's the header, and make its contents clickable links
  +
for (var i=0;i<firstRow.cells.length;i++) {
  +
var cell = firstRow.cells[i];
  +
var txt = ts_getInnerText(cell);
  +
if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
  +
cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;">'+txt+'<span class="sortarrow">&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/></span></a>';
  +
}
  +
}
  +
if (alternate_row_colors) {
  +
alternate(t);
  +
}
  +
}
  +
  +
function ts_getInnerText(el) {
  +
if (typeof el == "string") return el;
  +
if (typeof el == "undefined") { return el };
  +
if (el.innerText) return el.innerText; //Not needed but it is faster
  +
var str = "";
  +
  +
var cs = el.childNodes;
  +
var l = cs.length;
  +
for (var i = 0; i < l; i++) {
  +
switch (cs[i].nodeType) {
  +
case 1: //ELEMENT_NODE
  +
str += ts_getInnerText(cs[i]);
  +
break;
  +
case 3: //TEXT_NODE
  +
str += cs[i].nodeValue;
  +
break;
  +
}
  +
}
  +
return str;
  +
}
  +
  +
function ts_resortTable(lnk, clid) {
  +
var span;
  +
for (var ci=0;ci<lnk.childNodes.length;ci++) {
  +
if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
  +
}
  +
var spantext = ts_getInnerText(span);
  +
var td = lnk.parentNode;
  +
var column = clid || td.cellIndex;
  +
var t = getParent(td,'TABLE');
  +
// Work out a type for the column
  +
if (t.rows.length <= 1) return;
  +
var itm = "";
  +
var i = 1;
  +
while (itm == "" && i < t.tBodies[0].rows.length) {
  +
var itm = ts_getInnerText(t.tBodies[0].rows[i].cells[column]);
  +
itm = trim(itm);
  +
if (itm.substr(0,4) == "<!--" || itm.length == 0) {
  +
itm = "";
  +
}
  +
i++;
  +
}
  +
if (itm == "") return;
  +
sortfn = ts_sort_caseinsensitive;
  +
if (itm.match(/^\d\d[\/\.-][a-zA-z][a-zA-Z][a-zA-Z][\/\.-]\d\d\d\d$/)) sortfn = ts_sort_date;
  +
if (itm.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d\d{2}?$/)) sortfn = ts_sort_date;
  +
if (itm.match(/^-?[£$€Û¢´]\d/)) sortfn = ts_sort_numeric;
  +
if (itm.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/)) sortfn = ts_sort_numeric;
  +
SORT_COLUMN_INDEX = column;
  +
var firstRow = new Array();
  +
var newRows = new Array();
  +
for (k=0;k<t.tBodies.length;k++) {
  +
for (i=0;i<t.tBodies[k].rows[0].length;i++) {
  +
firstRow[i] = t.tBodies[k].rows[0][i];
  +
}
  +
}
  +
for (k=0;k<t.tBodies.length;k++) {
  +
if (!thead) {
  +
// Skip the first row
  +
for (j=1;j<t.tBodies[k].rows.length;j++) {
  +
newRows[j-1] = t.tBodies[k].rows[j];
  +
}
  +
} else {
  +
// Do NOT skip the first row
  +
for (j=0;j<t.tBodies[k].rows.length;j++) {
  +
newRows[j] = t.tBodies[k].rows[j];
  +
}
  +
}
  +
}
  +
newRows.sort(sortfn);
  +
if (span.getAttribute("sortdir") == 'down') {
  +
ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_down + '" alt="&darr;"/>';
  +
newRows.reverse();
  +
span.setAttribute('sortdir','up');
  +
} else {
  +
ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_up + '" alt="&uarr;"/>';
  +
span.setAttribute('sortdir','down');
  +
}
  +
// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
  +
// don't do sortbottom rows
  +
for (i=0; i<newRows.length; i++) {
  +
if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
  +
t.tBodies[0].appendChild(newRows[i]);
  +
}
  +
}
  +
// do sortbottom rows only
  +
for (i=0; i<newRows.length; i++) {
  +
if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1))
  +
t.tBodies[0].appendChild(newRows[i]);
  +
}
  +
// Delete any other arrows there may be showing
  +
var allspans = document.getElementsByTagName("span");
  +
for (var ci=0;ci<allspans.length;ci++) {
  +
if (allspans[ci].className == 'sortarrow') {
  +
if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
  +
allspans[ci].innerHTML = '&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/>';
  +
}
  +
}
  +
}
  +
span.innerHTML = ARROW;
  +
alternate(t);
  +
}
  +
  +
function getParent(el, pTagName) {
  +
if (el == null) {
  +
return null;
  +
} else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) {
  +
return el;
  +
} else {
  +
return getParent(el.parentNode, pTagName);
  +
}
  +
}
  +
  +
function sort_date(date) {
  +
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
  +
dt = "00000000";
  +
if (date.length == 11) {
  +
mtstr = date.substr(3,3);
  +
mtstr = mtstr.toLowerCase();
  +
switch(mtstr) {
  +
case "jan": var mt = "01"; break;
  +
case "feb": var mt = "02"; break;
  +
case "mar": var mt = "03"; break;
  +
case "apr": var mt = "04"; break;
  +
case "may": var mt = "05"; break;
  +
case "jun": var mt = "06"; break;
  +
case "jul": var mt = "07"; break;
  +
case "aug": var mt = "08"; break;
  +
case "sep": var mt = "09"; break;
  +
case "oct": var mt = "10"; break;
  +
case "nov": var mt = "11"; break;
  +
case "dec": var mt = "12"; break;
  +
// default: var mt = "00";
  +
}
  +
dt = date.substr(7,4)+mt+date.substr(0,2);
  +
return dt;
  +
} else if (date.length == 10) {
  +
if (europeandate == false) {
  +
dt = date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
  +
return dt;
  +
} else {
  +
dt = date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
  +
return dt;
  +
}
  +
} else if (date.length == 8) {
  +
yr = date.substr(6,2);
  +
if (parseInt(yr) < 50) {
  +
yr = '20'+yr;
  +
} else {
  +
yr = '19'+yr;
  +
}
  +
if (europeandate == true) {
  +
dt = yr+date.substr(3,2)+date.substr(0,2);
  +
return dt;
  +
} else {
  +
dt = yr+date.substr(0,2)+date.substr(3,2);
  +
return dt;
  +
}
  +
}
  +
return dt;
  +
}
  +
  +
function ts_sort_date(a,b) {
  +
dt1 = sort_date(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
  +
dt2 = sort_date(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
  +
  +
if (dt1==dt2) {
  +
return 0;
  +
}
  +
if (dt1<dt2) {
  +
return -1;
  +
}
  +
return 1;
  +
}
  +
function ts_sort_numeric(a,b) {
  +
var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
  +
aa = clean_num(aa);
  +
var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
  +
bb = clean_num(bb);
  +
return compare_numeric(aa,bb);
  +
}
  +
function compare_numeric(a,b) {
  +
var a = parseFloat(a);
  +
a = (isNaN(a) ? 0 : a);
  +
var b = parseFloat(b);
  +
b = (isNaN(b) ? 0 : b);
  +
return a - b;
  +
}
  +
function ts_sort_caseinsensitive(a,b) {
  +
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
  +
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
  +
if (aa==bb) {
  +
return 0;
  +
}
  +
if (aa<bb) {
  +
return -1;
  +
}
  +
return 1;
  +
}
  +
function ts_sort_default(a,b) {
  +
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
  +
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
  +
if (aa==bb) {
  +
return 0;
  +
}
  +
if (aa<bb) {
  +
return -1;
  +
}
  +
return 1;
  +
}
  +
function addEvent(elm, evType, fn, useCapture)
  +
// addEvent and removeEvent
  +
// cross-browser event handling for IE5+, NS6 and Mozilla
  +
// By Scott Andrew
  +
{
  +
if (elm.addEventListener){
  +
elm.addEventListener(evType, fn, useCapture);
  +
return true;
  +
} else if (elm.attachEvent){
  +
var r = elm.attachEvent("on"+evType, fn);
  +
return r;
  +
} else {
  +
alert("Handler could not be removed");
  +
}
  +
}
  +
function clean_num(str) {
  +
str = str.replace(new RegExp(/[^-?0-9.]/g),"");
  +
return str;
  +
}
  +
function trim(s) {
  +
return s.replace(/^\s+|\s+$/g, "");
  +
}
  +
function alternate(table) {
  +
// Take object table and get all it's tbodies.
  +
var tableBodies = table.getElementsByTagName("tbody");
  +
// Loop through these tbodies
  +
for (var i = 0; i < tableBodies.length; i++) {
  +
// Take the tbody, and get all it's rows
  +
var tableRows = tableBodies[i].getElementsByTagName("tr");
  +
// Loop through these rows
  +
// Start at 1 because we want to leave the heading row untouched
  +
for (var j = 0; j < tableRows.length; j++) {
  +
// Check if j is even, and apply classes for both possible results
  +
if ( (j % 2) == 0 ) {
  +
if ( !(tableRows[j].className.indexOf('odd') == -1) ) {
  +
tableRows[j].className = tableRows[j].className.replace('odd', 'even');
  +
} else {
  +
if ( tableRows[j].className.indexOf('even') == -1 ) {
  +
tableRows[j].className += " even";
  +
}
  +
}
  +
} else {
  +
if ( !(tableRows[j].className.indexOf('even') == -1) ) {
  +
tableRows[j].className = tableRows[j].className.replace('even', 'odd');
  +
} else {
  +
if ( tableRows[j].className.indexOf('odd') == -1 ) {
  +
tableRows[j].className += " odd";
  +
}
  +
}
  +
}
  +
}
  +
}
  +
}
  +
  +
  +
// Webmaster staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-WM" style="float:right; display:none;"><a href="/wiki/Bulbanews:Webmasters" title="This user is a Webmaster of Bulbagarden."><img src="http://cdn.bulbagarden.net/media/upload/2/26/IconBNWebmaster.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Board of Editors staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-BE" style="float:right; display:none;"><a href="/wiki/Bulbanews:Board_of_Editors" title="This user is a member of the Bulbanews Board of Editors."><img src="http://cdn.bulbagarden.net/media/upload/b/b2/IconBNBoardofEditors.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Executive staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-ES" style="float:right; display:none;"><a href="/wiki/Bulbanews:Executive_Staff" title="This user is a Bulbanews Executive Staff member."><img src="http://cdn.bulbagarden.net/media/upload/b/b2/IconBNBoardofEditors.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Bureaucrat staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-BC" style="float:right; display:none;"><a href="/wiki/Bulbanews:Bureaucrats" title="This user is a Bulbanews Bureaucrat."><img src="http://cdn.bulbagarden.net/media/upload/c/c0/IconBNBureaucrat.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Senior Writer staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-SW" style="float:right; display:none;"><a href="/wiki/Bulbanews:Senior_Writers" title="This user is a Bulbanews Senior Writer."><img src="http://cdn.bulbagarden.net/media/upload/0/0c/IconBNSeniorWriter.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Support Staff staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-SS" style="float:right; display:none;"><a href="/wiki/Bulbanews:Support_Staff" title="This user is a Bulbanews Support Staff member."><img src="http://cdn.bulbagarden.net/media/upload/5/52/IconBNSupportStaff.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Columnist staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-CO" style="float:right; display:none;"><a href="/wiki/Bulbanews:Columnists" title="This user is a Bulbanews Columnist."><img src="http://cdn.bulbagarden.net/media/upload/0/0e/IconBNColumnist.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Translator staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-TR" style="float:right; display:none;"><a href="/wiki/Bulbanews:Translators" title="This user is a Bulbanews Translator."><img src="http://cdn.bulbagarden.net/media/upload/3/33/IconBNTranslator.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Writer staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-WR" style="float:right; display:none;"><a href="/wiki/Bulbanews:Writers" title="This user is a Bulbanews Writer."><img src="http://cdn.bulbagarden.net/media/upload/a/a0/IconBNWriter.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
  +
  +
// Inactive staff icons
  +
addOnloadHook(function () {
  +
if(
  +
window.location.href.indexOf("/wiki/User:") == -1
  +
) {
  +
if(
  +
window.location.href.indexOf("/wiki/User_talk:") == -1
  +
) {
  +
return;
  +
}
  +
};
  +
  +
// create div and set innerHTML to link
  +
var divContainer = document.createElement("div");
  +
divContainer.innerHTML = '<div class="stafflink-IN" style="float:right; display:none;"><a href="/wiki/Bulbanews:Inactive_Staff" title="This user is an inactive Bulbanews staff member. Please direct your inquiries to an active staff member."><img src="http://cdn.bulbagarden.net/media/upload/4/4e/IconBNInactive.png"></a></div>';
  +
  +
// insert divContainer into the DOM below the h1
  +
if(window.location.href.indexOf("&action=edit") == -1) {
  +
document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
  +
}
  +
  +
});
   
 
/* </pre> */
 
/* </pre> */

Latest revision as of 10:11, 12 August 2014

/* <pre> */
/* Any JavaScript here will be loaded for all users on every page load. */

if ( wgIsArticle || window.location.href.indexOf( 'action=submit' ) > -1 )
{
  var script  = document.createElement( 'script' );
  script.src  = '/w/index.php?title=User:Poke/CollapsibleTables.js&action=raw&ctype=text/javascript';
  script.type = 'text/javascript';
  document.getElementsByTagName( 'head' )[0].appendChild( script );
  
  hookEvent( 'load', function()
  { new CollapsibleTables(); } );
}

function formatDate(t)
{
	var month = new Array();
	month[0] = 'January';
	month[1] = 'February';
	month[2] = 'March';
	month[3] = 'April';
	month[4] = 'May';
	month[5] = 'June';
	month[6] = 'July';
	month[7] = 'August';
	month[8] = 'September';
	month[9] = 'October';
	month[10] = 'November';
	month[11] = 'December';
	
	y = t.getUTCFullYear();
	M = t.getUTCMonth();
	D = t.getUTCDate();
	h = t.getUTCHours();
	m = t.getUTCMinutes();
	s = t.getUTCSeconds();
	
	if (h > 0 || m > 0 || s > 0)
	{
		hms = '';
		
		if (s > 10)
			hms = ':' + s;
		else if (s > 0)
			hms = ':0' + s;
		
		if (m > 10)
			hms = ':' + m + hms;
		else if (m > 0)
			hms = ':0' + m + hms;
			
		if (h > 12)
			hms = (h - 12) + hms + ' PM';
		else if (h > 0)
			hms = h + hms + ' AM';
		else
			hms = '12' + hms + ' AM';
		
		return hms + ', ' + month[M] + ' ' + D + ', ' + y;
	} else {
		return month[M] + ' ' + D + ', ' + y;
	}
}

function formatTime(h, m, s)
{
	var o = '';
	
	if (h != 1)
	{
		o = h + ' hours ';
	} else {
		o = '1 hour ';
	}
	
	if (m != 1)
	{
		o += m + ' minutes ';
	} else {
		o += '1 minute ';
	}
	
	if (s != 1)
	{
		o += s + ' seconds';
	} else {
		o += '1 second';
	}
	
	return o;
}

function updateClocks()
{
	var t = new Date();

	setTimeout(updateClocks, 1000);
	
	D = t.getUTCDate();
	M = t.getUTCMonth();
	y = t.getUTCFullYear();
	h = t.getUTCHours();
	m = t.getUTCMinutes();
	s = t.getUTCSeconds();

	t = Date.UTC(y, M, D, h, m, s);

	t = (T - t) / 1000;
	
	if (t < 0 && t > -86400 && (h > 0 || m > 0 || s > 0))
	{
		document.getElementById('countdown-big').innerHTML = 'Today';
		document.getElementById('countdown-small').innerHTML = '';
		document.getElementById('countdown-target').innerHTML = 'is ' + formatDate(new Date(T + tzOffset)) + ' ' + tz;
		
		return;
	} else if (t < 0) {
		document.getElementById('countdown-big').innerHTML = 'Past';
		document.getElementById('countdown-target').innerHTML = formatDate(new Date(T + tzOffset)) + ' ' + tz;	
		
		return;
	}
	
	D = Math.floor(t / 86400.0);
	h = Math.floor(t % 86400.0 / 3600.0);
	m = Math.floor(t % 3600.0 / 60.0);
	s = Math.floor(t % 60.0)

	if (D == 1)
	{
		document.getElementById('countdown-big').innerHTML = '1 day';
	} else if (D == 0) {
		document.getElementById('countdown-big').innerHTML = '';
	} else {
		document.getElementById('countdown-big').innerHTML = D + ' days';
	}
	
	document.getElementById('countdown-small').innerHTML = formatTime(h, m, s);
}

function startCountdown()
{
	document.getElementById('countdown-target').innerHTML = 'to ' + formatDate(new Date(T + tzOffset)) + ' ' + tz;
	document.getElementById('countdown').style.display = 'block';
	updateClocks();
}

/*
Table sorting script  by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .

Copyright (c) 1997-2007 Stuart Langridge, Joost de Valk.

Version 1.5.7
*/

/* You can change these values */
var image_path = "http://www.joostdevalk.nl/code/sortable-table/";
var image_up = "arrow-up.gif";
var image_down = "arrow-down.gif";
var image_none = "arrow-none.gif";
var europeandate = false;
var alternate_row_colors = true;

/* Don't change anything below this unless you know what you're doing */
addEvent(window, "load", sortables_init);

var SORT_COLUMN_INDEX;
var thead = false;

function sortables_init() {
	// Find all tables with class sortable and make them sortable
	if (!document.getElementsByTagName) return;
	tbls = document.getElementsByTagName("table");
	for (ti=0;ti<tbls.length;ti++) {
		thisTbl = tbls[ti];
		if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
			ts_makeSortable(thisTbl);
		}
	}
}

function ts_makeSortable(t) {
	if (t.rows && t.rows.length > 0) {
		if (t.tHead && t.tHead.rows.length > 0) {
			var firstRow = t.tHead.rows[t.tHead.rows.length-1];
			thead = true;
		} else {
			var firstRow = t.rows[0];
		}
	}
	if (!firstRow) return;
	
	// We have a first row: assume it's the header, and make its contents clickable links
	for (var i=0;i<firstRow.cells.length;i++) {
		var cell = firstRow.cells[i];
		var txt = ts_getInnerText(cell);
		if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
			cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;">'+txt+'<span class="sortarrow">&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/></span></a>';
		}
	}
	if (alternate_row_colors) {
		alternate(t);
	}
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;	//Not needed but it is faster
	var str = "";
	
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts_resortTable(lnk, clid) {
	var span;
	for (var ci=0;ci<lnk.childNodes.length;ci++) {
		if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
	}
	var spantext = ts_getInnerText(span);
	var td = lnk.parentNode;
	var column = clid || td.cellIndex;
	var t = getParent(td,'TABLE');
	// Work out a type for the column
	if (t.rows.length <= 1) return;
	var itm = "";
	var i = 1;
	while (itm == "" && i < t.tBodies[0].rows.length) {
		var itm = ts_getInnerText(t.tBodies[0].rows[i].cells[column]);
		itm = trim(itm);
		if (itm.substr(0,4) == "<!--" || itm.length == 0) {
			itm = "";
		}
		i++;
	}
	if (itm == "") return; 
	sortfn = ts_sort_caseinsensitive;
	if (itm.match(/^\d\d[\/\.-][a-zA-z][a-zA-Z][a-zA-Z][\/\.-]\d\d\d\d$/)) sortfn = ts_sort_date;
	if (itm.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d\d{2}?$/)) sortfn = ts_sort_date;
	if (itm.match(/^-?[£$€Û¢´]\d/)) sortfn = ts_sort_numeric;
	if (itm.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/)) sortfn = ts_sort_numeric;
	SORT_COLUMN_INDEX = column;
	var firstRow = new Array();
	var newRows = new Array();
	for (k=0;k<t.tBodies.length;k++) {
		for (i=0;i<t.tBodies[k].rows[0].length;i++) { 
			firstRow[i] = t.tBodies[k].rows[0][i]; 
		}
	}
	for (k=0;k<t.tBodies.length;k++) {
		if (!thead) {
			// Skip the first row
			for (j=1;j<t.tBodies[k].rows.length;j++) { 
				newRows[j-1] = t.tBodies[k].rows[j];
			}
		} else {
			// Do NOT skip the first row
			for (j=0;j<t.tBodies[k].rows.length;j++) { 
				newRows[j] = t.tBodies[k].rows[j];
			}
		}
	}
	newRows.sort(sortfn);
	if (span.getAttribute("sortdir") == 'down') {
			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_down + '" alt="&darr;"/>';
			newRows.reverse();
			span.setAttribute('sortdir','up');
	} else {
			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_up + '" alt="&uarr;"/>';
			span.setAttribute('sortdir','down');
	} 
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    // don't do sortbottom rows
    for (i=0; i<newRows.length; i++) { 
		if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
			t.tBodies[0].appendChild(newRows[i]);
		}
	}
    // do sortbottom rows only
    for (i=0; i<newRows.length; i++) {
		if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) 
			t.tBodies[0].appendChild(newRows[i]);
	}
	// Delete any other arrows there may be showing
	var allspans = document.getElementsByTagName("span");
	for (var ci=0;ci<allspans.length;ci++) {
		if (allspans[ci].className == 'sortarrow') {
			if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
				allspans[ci].innerHTML = '&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/>';
			}
		}
	}		
	span.innerHTML = ARROW;
	alternate(t);
}

function getParent(el, pTagName) {
	if (el == null) {
		return null;
	} else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) {
		return el;
	} else {
		return getParent(el.parentNode, pTagName);
	}
}

function sort_date(date) {	
	// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
	dt = "00000000";
	if (date.length == 11) {
		mtstr = date.substr(3,3);
		mtstr = mtstr.toLowerCase();
		switch(mtstr) {
			case "jan": var mt = "01"; break;
			case "feb": var mt = "02"; break;
			case "mar": var mt = "03"; break;
			case "apr": var mt = "04"; break;
			case "may": var mt = "05"; break;
			case "jun": var mt = "06"; break;
			case "jul": var mt = "07"; break;
			case "aug": var mt = "08"; break;
			case "sep": var mt = "09"; break;
			case "oct": var mt = "10"; break;
			case "nov": var mt = "11"; break;
			case "dec": var mt = "12"; break;
			// default: var mt = "00";
		}
		dt = date.substr(7,4)+mt+date.substr(0,2);
		return dt;
	} else if (date.length == 10) {
		if (europeandate == false) {
			dt = date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
			return dt;
		} else {
			dt = date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
			return dt;
		}
	} else if (date.length == 8) {
		yr = date.substr(6,2);
		if (parseInt(yr) < 50) { 
			yr = '20'+yr; 
		} else { 
			yr = '19'+yr; 
		}
		if (europeandate == true) {
			dt = yr+date.substr(3,2)+date.substr(0,2);
			return dt;
		} else {
			dt = yr+date.substr(0,2)+date.substr(3,2);
			return dt;
		}
	}
	return dt;
}

function ts_sort_date(a,b) {
	dt1 = sort_date(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
	dt2 = sort_date(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
	
	if (dt1==dt2) {
		return 0;
	}
	if (dt1<dt2) { 
		return -1;
	}
	return 1;
}
function ts_sort_numeric(a,b) {
	var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	aa = clean_num(aa);
	var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	bb = clean_num(bb);
	return compare_numeric(aa,bb);
}
function compare_numeric(a,b) {
	var a = parseFloat(a);
	a = (isNaN(a) ? 0 : a);
	var b = parseFloat(b);
	b = (isNaN(b) ? 0 : b);
	return a - b;
}
function ts_sort_caseinsensitive(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function ts_sort_default(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,	NS6 and Mozilla
// By Scott Andrew
{
	if (elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent){
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else {
		alert("Handler could not be removed");
	}
}
function clean_num(str) {
	str = str.replace(new RegExp(/[^-?0-9.]/g),"");
	return str;
}
function trim(s) {
	return s.replace(/^\s+|\s+$/g, "");
}
function alternate(table) {
	// Take object table and get all it's tbodies.
	var tableBodies = table.getElementsByTagName("tbody");
	// Loop through these tbodies
	for (var i = 0; i < tableBodies.length; i++) {
		// Take the tbody, and get all it's rows
		var tableRows = tableBodies[i].getElementsByTagName("tr");
		// Loop through these rows
		// Start at 1 because we want to leave the heading row untouched
		for (var j = 0; j < tableRows.length; j++) {
			// Check if j is even, and apply classes for both possible results
			if ( (j % 2) == 0  ) {
				if ( !(tableRows[j].className.indexOf('odd') == -1) ) {
					tableRows[j].className = tableRows[j].className.replace('odd', 'even');
				} else {
					if ( tableRows[j].className.indexOf('even') == -1 ) {
						tableRows[j].className += " even";
					}
				}
			} else {
				if ( !(tableRows[j].className.indexOf('even') == -1) ) {
					tableRows[j].className = tableRows[j].className.replace('even', 'odd');
				} else {
					if ( tableRows[j].className.indexOf('odd') == -1 ) {
						tableRows[j].className += " odd";
					}
				}
			} 
		}
	}
}


// Webmaster staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-WM" style="float:right; display:none;"><a href="/wiki/Bulbanews:Webmasters" title="This user is a Webmaster of Bulbagarden."><img src="http://cdn.bulbagarden.net/media/upload/2/26/IconBNWebmaster.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Board of Editors staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-BE" style="float:right; display:none;"><a href="/wiki/Bulbanews:Board_of_Editors" title="This user is a member of the Bulbanews Board of Editors."><img src="http://cdn.bulbagarden.net/media/upload/b/b2/IconBNBoardofEditors.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Executive staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-ES" style="float:right; display:none;"><a href="/wiki/Bulbanews:Executive_Staff" title="This user is a Bulbanews Executive Staff member."><img src="http://cdn.bulbagarden.net/media/upload/b/b2/IconBNBoardofEditors.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Bureaucrat staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-BC" style="float:right; display:none;"><a href="/wiki/Bulbanews:Bureaucrats" title="This user is a Bulbanews Bureaucrat."><img src="http://cdn.bulbagarden.net/media/upload/c/c0/IconBNBureaucrat.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Senior Writer staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-SW" style="float:right; display:none;"><a href="/wiki/Bulbanews:Senior_Writers" title="This user is a Bulbanews Senior Writer."><img src="http://cdn.bulbagarden.net/media/upload/0/0c/IconBNSeniorWriter.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Support Staff staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-SS" style="float:right; display:none;"><a href="/wiki/Bulbanews:Support_Staff" title="This user is a Bulbanews Support Staff member."><img src="http://cdn.bulbagarden.net/media/upload/5/52/IconBNSupportStaff.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Columnist staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-CO" style="float:right; display:none;"><a href="/wiki/Bulbanews:Columnists" title="This user is a Bulbanews Columnist."><img src="http://cdn.bulbagarden.net/media/upload/0/0e/IconBNColumnist.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Translator staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-TR" style="float:right; display:none;"><a href="/wiki/Bulbanews:Translators" title="This user is a Bulbanews Translator."><img src="http://cdn.bulbagarden.net/media/upload/3/33/IconBNTranslator.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Writer staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-WR" style="float:right; display:none;"><a href="/wiki/Bulbanews:Writers" title="This user is a Bulbanews Writer."><img src="http://cdn.bulbagarden.net/media/upload/a/a0/IconBNWriter.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

// Inactive staff icons
addOnloadHook(function () {
 if(
 window.location.href.indexOf("/wiki/User:") == -1
 ) {
 if(
  window.location.href.indexOf("/wiki/User_talk:") == -1
  ) {
 return;
  }
 };

 // create div and set innerHTML to link
 var divContainer = document.createElement("div");
 divContainer.innerHTML = '<div class="stafflink-IN" style="float:right; display:none;"><a href="/wiki/Bulbanews:Inactive_Staff" title="This user is an inactive Bulbanews staff member. Please direct your inquiries to an active staff member."><img src="http://cdn.bulbagarden.net/media/upload/4/4e/IconBNInactive.png"></a></div>';

 // insert divContainer into the DOM below the h1
 if(window.location.href.indexOf("&action=edit") == -1) {
 document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
 }

});

/* </pre> */