MediaWiki:Common.js

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

/* Dynamic Tabs - Adapted from Liquipedia - http://wiki.teamliquid.net/dota2/MediaWiki:Common.js */ /* Tabs by FO-nTTaX */ $(document).ready (function {	$('div.tabs-dynamic ul.tabs li').click( function { var i = $(this).index + 1; $(this).parent.children('li').removeClass('active'); $(this).addClass('active'); $(this).parents.children('div.tabs-content').children('div').removeClass('active'); $(this).parents.children('div.tabs-content').children('div.content' + i).addClass('active'); }	);	$('div.tabs-dynamic').each(function(index) { var h = $(this).children('ul.tabs').children('li.active').index + 1; $(this).children('div.tabs-content').children('div.content' + h).addClass('active'); });	var hash = location.hash.slice(1);	if (hash.substring(0, 4) == 'tab-') {		var hasharr = hash.split('-scrollto-');		var tabno = hasharr[0].replace('tab-', '');   		$('div.tabs-dynamic ul.tabs li').removeClass('active');		$('div.tabs-dynamic ul.tabs li.tab' + tabno).addClass('active');		$('div.tabs-dynamic div.tabs-content div').removeClass('active');		$('div.tabs-dynamic div.tabs-content div.content' + tabno).addClass('active');		if (hasharr.length == 2) {			var scrollto = '#' + hasharr[1];			setTimeout(function{$(window).scrollTop($(scrollto).offset.top)}, 500);		}	} }); /* Dynamic Tabs - END */

/* Bracket Highlighting - Adapted from Liquipedia - http://wiki.teamliquid.net/dota2/MediaWiki:Common.js */ var highlighted; $.fn.justtext = function { return $(this).clone.children.remove('div').end.text.trim; }; var bracketGame; $(document).ready(function {	$('.bracket-game').each( function { if ($(this).find('.bracket-game-details').length > 0) { var margin = $(this).find(':first-child').height - 6; $(this).prepend(' '); }	});	$('.match-row').each( function { if ($(this).find('.bracket-game-details').length > 0) { $(this).find('td:eq(2)').prepend('  '); }	});	$('.match-row').hover(function { $(this).addClass('bracket-hover'); if ($(this).closest('.match-row').find('.bracket-game-details').length) { $(this).css('cursor', 'pointer'); }	},	function { $(this).removeClass('bracket-hover'); });	$('.bracket-team-top, .bracket-team-top-oldschool, .bracket-team-bottom, .bracket-team-bottom-oldschool, .bracket-game .icon').hover(function { var t = $(this), text = t.justtext; if ((text) && (text.toUpperCase != 'BYE')) { highlighted = $('.bracket').find('.bracket-team-top, .bracket-team-bottom, .bracket-team-top-oldschool, .bracket-team-bottom-oldschool').filter(function {				return $(this).justtext == text;			}); highlighted.css('background', '#cecece'); }		if (t.closest('.bracket-game').children('.bracket-game-details').length) { t.css('cursor', 'pointer'); }	},	function { if (highlighted != null) highlighted.css('background', ''); });

$('html').click(function {		if (bracketGame != null) {			bracketGame.find('.bracket-game-details').toggle;			bracketGame = null;		}	});

$('.bracket-team-top, .bracket-team-bottom, .bracket-team-top-oldschool, .bracket-team-bottom-oldschool, .bracket-game .icon').click(	function (event) {		var bracket = $(this).closest('.bracket'),			detailsHeight, detailsWidth, spaceOnTheRight;		if (bracketGame != null) {			bracketGame.children('.bracket-game-details').toggle;			if (bracketGame[0] === $(this).closest('.bracket-game')[0]) {				bracketGame = null;				return;			}		}		bracketGame = $(this).closest('.bracket-game');		detailsHeight= bracketGame.children('.bracket-game-details').height; 		detailsWidth = bracketGame.children('.bracket-game-details').width;		bracketGame.children('.bracket-game-details').css('margin-top', -detailsHeight / 2);		spaceOnTheRight = Math.max($(window).width, bracket.offset.left + bracket.outerWidth) - (bracketGame.offset.left + bracketGame.outerWidth);		if (spaceOnTheRight < detailsWidth && bracketGame.offset.left > detailsWidth) { bracketGame.children('.bracket-game-details').css('margin-left', -detailsWidth - 1); } else { bracketGame.children('.bracket-game-details').css('margin-left', bracketGame.width); }		bracketGame.children('.bracket-game-details').toggle; event.stopPropagation; });	$('.match-row').click(function (event) { if (bracketGame != null) { bracketGame.find('.bracket-game-details').toggle; if (bracketGame[0] === $(this)[0]) { bracketGame = null; return; }		}		bracketGame = $(this); var height = bracketGame.find('.bracket-game-details').height; bracketGame.find('.bracket-game-details').css('margin-top', 3); bracketGame.find('.bracket-game-details').toggle; event.stopPropagation; });

$('.bracket-game-details').click(function (event) {		event.stopPropagation;	}); }); /* End Bracket Highlighting */

/**        Toggles the display of elements on a page Author/contact: Austin Che http://openwetware.org/wiki/User:Austin_J._Che See http://openwetware.org/wiki/OpenWetWare:Toggle for examples and documentation */

// indexed array of toggler ids to array of associated toggle operations // each operation is a two element array, the first being the type, the second a class name or array of elements // operation types are strings like "_reset" or "" for the default toggle operation var togglers = new Array; var allClasses = new Object; // associative map of class names to page elements

function toggler(id) {   var toBeToggled = togglers[id]; if (!toBeToggled) return;

// if some element is in list more than once, it will be toggled multiple times for (var i = 0; i < toBeToggled.length; i++) {       // get array of elements to operate on        var toggles = toBeToggled[i][1]; if (typeof(toggles) == "string") {           if (toggles.charAt(0) == '-') {               // treat as an element ID, not as class toggles = document.getElementById(toggles.substring(1)); if (toggles) toggles = new Array(toggles); }           else toggles = allClasses[toggles]; }       if (!toggles || !toggles.length) continue;

var op = toBeToggled[i][0]; // what the operation will be

switch (op) {           case "_reset": for (var j = 0; j < toggles.length; j++) toggles[j].style.display = toggles[j]._toggle_original_display; break; case "_show": for (var j = 0; j < toggles.length; j++) toggles[j].style.display = ''; break; case "_hide": for (var j = 0; j < toggles.length; j++) toggles[j].style.display = 'none'; break; case "_slidehide": for (var j = 0; j < toggles.length; j++){ if (toggles[j].style.display != 'none'){ $(toggles[j]).animate({width: 'toggle'}); }                   }                break; case "_slideshow": for (var j = 0; j < toggles.length; j++){ if (toggles[j].style.display == 'none'){ $(toggles[j]).animate({width: 'toggle'}); }                   }                break; case "_expand": for (var j = 0; j < toggles.length; j++){ var bracketCr2 = $(toggles[j]).find('*.oldr2'); var bracketCr3 = $(toggles[j]).find('*.oldr3'); var bracketCr4 = $(toggles[j]).find('*.oldr4'); var bracketCr5 = $(toggles[j]).find('*.oldr5'); var bracketCr6 = $(toggles[j]).find('*.oldr6'); function distinguishCell(cell, oRound){ var strNClass = "test"; if($(cell).is('*[class*="bracket-cell"]')){ strNClass = "bracket-cell-r" + oRound.toString; }                       else if($(cell).is('*[class*="bracket-line-left-top"]')){ strNClass = "bracket-line-left-top-r" + oRound.toString; }                       else if($(cell).is('*[class*="bracket-line-left-mid"]')){ strNClass = "bracket-line-left-mid-r" + oRound.toString; }                       else if($(cell).is('*[class*="bracket-line-left-bot"]')){ strNClass = "bracket-line-left-bot-r" + oRound.toString; }                       else if($(cell).is('*[class*="bracket-line-right-top"]')){ strNClass = "bracket-line-right-top-r" + oRound.toString; }                       else if($(cell).is('*[class*="bracket-line-right-bot"]')){ strNClass = "bracket-line-right-bot-r" + oRound.toString; }                       cell.className = strNClass; }                   for (var k = 0; k < bracketCr2.length; k++){ distinguishCell(bracketCr2[k],2); }                   for (var k = 0; k < bracketCr3.length; k++){ distinguishCell(bracketCr3[k],3); }                   for (var k = 0; k < bracketCr4.length; k++){ distinguishCell(bracketCr4[k],4); }                   for (var k = 0; k < bracketCr5.length; k++){ distinguishCell(bracketCr5[k],5); }                   for (var k = 0; k < bracketCr6.length; k++){ distinguishCell(bracketCr6[k],6); }                   }                break; case "_shrink": setTimeout(function{togglerShrink(toggler)},200); function togglerShrink(toggler) { var smallest = 7; var smallestL = 7; for (var j = 0; j < toggles.length; j++){ var bracketCr2 = $(toggles[j]).find('*.bracket-cell-r2'); var bracketCr3 = $(toggles[j]).find('*.bracket-cell-r3'); var bracketCr4 = $(toggles[j]).find('*.bracket-cell-r4'); var bracketCr5 = $(toggles[j]).find('*.bracket-cell-r5'); var bracketCr6 = $(toggles[j]).find('*.bracket-cell-r6'); if(bracketCr2.length > 0 && smallest > 2){ smallest = 2; }                   else if(bracketCr3.length > 0 && smallest > 3){ smallest = 3; }                   else if(bracketCr4.length > 0 && smallest > 4){ smallest = 4; }                   else if(bracketCr5.length > 0 && smallest > 5){ smallest = 5; }                   else if(bracketCr6.length > 0 && smallest > 6){ smallest = 6; }

var bllt2 = $(toggles[j]).find('*.bracket-line-left-top-r2'); var bllt3 = $(toggles[j]).find('*.bracket-line-left-top-r3'); var bllt4 = $(toggles[j]).find('*.bracket-line-left-top-r4'); var bllt5 = $(toggles[j]).find('*.bracket-line-left-top-r5'); var bllt6 = $(toggles[j]).find('*.bracket-line-left-top-r6');

if(bllt2.length > 0 && smallestL > 2){ smallestL = 2; }                   else if(bllt3.length > 0 && smallestL > 3){ smallestL = 3; }                   else if(bllt4.length > 0 && smallestL > 4){ smallestL = 4; }                    else if(bllt5.length > 0 && smallestL > 5){ smallestL = 5; }                   else if(bllt6.length > 0 && smallestL > 6){ smallestL = 6; }               }                for (var j = 0; j < toggles.length; j++){ var bracketCr2 = $(toggles[j]).find('*.bracket-cell-r2'); var bracketCr3 = $(toggles[j]).find('*.bracket-cell-r3'); var bracketCr4 = $(toggles[j]).find('*.bracket-cell-r4'); var bracketCr5 = $(toggles[j]).find('*.bracket-cell-r5'); var bracketCr6 = $(toggles[j]).find('*.bracket-cell-r6');

var bllt2 = $(toggles[j]).find('*.bracket-line-left-top-r2'); var bllm2 = $(toggles[j]).find('*.bracket-line-left-mid-r2'); var bllb2 = $(toggles[j]).find('*.bracket-line-left-bot-r2'); var blrt2 = $(toggles[j]).find('*.bracket-line-right-top-r2'); var blrb2 = $(toggles[j]).find('*.bracket-line-right-bot-r2');

var bllt3 = $(toggles[j]).find('*.bracket-line-left-top-r3'); var bllm3 = $(toggles[j]).find('*.bracket-line-left-mid-r3'); var bllb3 = $(toggles[j]).find('*.bracket-line-left-bot-r3'); var blrt3 = $(toggles[j]).find('*.bracket-line-right-top-r3'); var blrb3 = $(toggles[j]).find('*.bracket-line-right-bot-r3');

var bllt4 = $(toggles[j]).find('*.bracket-line-left-top-r4'); var bllm4 = $(toggles[j]).find('*.bracket-line-left-mid-r4'); var bllb4 = $(toggles[j]).find('*.bracket-line-left-bot-r4'); var blrt4 = $(toggles[j]).find('*.bracket-line-right-top-r4'); var blrb4 = $(toggles[j]).find('*.bracket-line-right-bot-r4');

var bllt5 = $(toggles[j]).find('*.bracket-line-left-top-r5'); var bllm5 = $(toggles[j]).find('*.bracket-line-left-mid-r5'); var bllb5 = $(toggles[j]).find('*.bracket-line-left-bot-r5'); var blrt5 = $(toggles[j]).find('*.bracket-line-right-top-r5'); var blrb5 = $(toggles[j]).find('*.bracket-line-right-bot-r5'); for (var k = 0; k < bracketCr2.length; k++){ var n = 3-smallest; var nClass = " bracket-cell-r" + n.toString; bracketCr2[k].className += nClass; $(bracketCr2[k]).removeClass("bracket-cell-r2"); if($(bracketCr2[k]).is('*[class*="old"]')){ }						else{ bracketCr2[k].className += " oldr2"; }					}						for (var k = 0; k < bracketCr3.length; k++){ var n = 4-smallest; var nClass = " bracket-cell-r" + n.toString; bracketCr3[k].className += nClass; $(bracketCr3[k]).removeClass("bracket-cell-r3"); if($(bracketCr3[k]).is('*[class*="old"]')){ }							else{ bracketCr3[k].className += " oldr3"; }						}						for (var k = 0; k < bracketCr4.length; k++){ var n = 5-smallest; var nClass = " bracket-cell-r" + n.toString; bracketCr4[k].className += nClass; $(bracketCr4[k]).removeClass("bracket-cell-r4"); if($(bracketCr4[k]).is('*[class*="old"]')){ }							else{ bracketCr4[k].className += " oldr4"; }						}						for (var k = 0; k < bracketCr5.length; k++){ var n = 6-smallest; var nClass = " bracket-cell-r" + n.toString; bracketCr5[k].className += nClass; $(bracketCr5[k]).removeClass("bracket-cell-r5"); if($(bracketCr5[k]).is('*[class*="old"]')){ }							else{ bracketCr5[k].className += " oldr5"; }						}						for (var k = 0; k < bracketCr6.length; k++){ var n = 7-smallest; var nClass = " bracket-cell-r" + n.toString; bracketCr6[k].className += nClass; $(bracketCr6[k]).removeClass("bracket-cell-r6"); if($(bracketCr6[k]).is('*[class*="old"]')){ }							else{ bracketCr6[k].className += " oldr6"; }						}					for (var k = 0; k < bllt2.length; k++){ var n = 3 - smallestL; var m1 = 2 * k;						var m2 = 2 * k + 1; var nSt = " bracket-line-left-top-r" + n.toString; var nSm = " bracket-line-left-mid-r" + n.toString; var nSb = " bracket-line-left-bot-r" + n.toString; var nStr = " bracket-line-right-top-r" + n.toString; var nSbr = " bracket-line-right-bot-r" + n.toString; bllt2[k].className += nSt; bllm2[m1].className += nSm; bllm2[m2].className += nSm; bllb2[k].className += nSb; blrt2[k].className += nStr; blrb2[k].className += nSbr; $(bllt2[k]).removeClass("bracket-line-left-top-r2"); $(bllm2[m1]).removeClass("bracket-line-left-mid-r2"); $(bllm2[m2]).removeClass("bracket-line-left-mid-r2"); $(bllb2[k]).removeClass("bracket-line-left-bot-r2"); $(blrt2[k]).removeClass("bracket-line-right-top-r2"); $(blrb2[k]).removeClass("bracket-line-right-bot-r2"); if($(bllt2[k]).is('*[class*="old"]')){ }						else{ bllt2[k].className += " oldr2"; bllb2[k].className += " oldr2"; bllm2[m1].className += " oldr2"; bllm2[m2].className += " oldr2"; blrt2[k].className += " oldr2"; blrb2[k].className += " oldr2"; }					}					for (var k = 0; k < bllt3.length; k++){ var n = 4 - smallestL; var m1 = 2 * k;						var m2 = 2 * k + 1; var nSt = " bracket-line-left-top-r" + n.toString; var nSm = " bracket-line-left-mid-r" + n.toString; var nSb = " bracket-line-left-bot-r" + n.toString; var nStr = " bracket-line-right-top-r" + n.toString; var nSbr = " bracket-line-right-bot-r" + n.toString; bllt3[k].className += nSt; bllm3[m1].className += nSm; bllm3[m2].className += nSm; bllb3[k].className += nSb; blrt3[k].className += nStr; blrb3[k].className += nSbr; $(bllt3[k]).removeClass("bracket-line-left-top-r3"); $(bllm3[m1]).removeClass("bracket-line-left-mid-r3"); $(bllm3[m2]).removeClass("bracket-line-left-mid-r3"); $(bllb3[k]).removeClass("bracket-line-left-bot-r3"); $(blrt3[k]).removeClass("bracket-line-right-top-r3"); $(blrb3[k]).removeClass("bracket-line-right-bot-r3"); if($(bllt3[k]).is('*[class*="old"]')){ }						else{ bllt3[k].className += " oldr3"; bllb3[k].className += " oldr3"; bllm3[m1].className += " oldr3"; bllm3[m2].className += " oldr3"; blrt3[k].className += " oldr3"; blrb3[k].className += " oldr3"; }					}					for (var k = 0; k < bllt4.length; k++){ var n = 5 - smallestL; var m1 = 2 * k;						var m2 = 2 * k + 1; var nSt = " bracket-line-left-top-r" + n.toString; var nSm = " bracket-line-left-mid-r" + n.toString; var nSb = " bracket-line-left-bot-r" + n.toString; var nStr = " bracket-line-right-top-r" + n.toString; var nSbr = " bracket-line-right-bot-r" + n.toString; bllt4[k].className += nSt; bllm4[m1].className += nSm; bllm4[m2].className += nSm; bllb4[k].className += nSb; blrt4[k].className += nStr; blrb4[k].className += nSbr; $(bllt4[k]).removeClass("bracket-line-left-top-r4"); $(bllm4[m1]).removeClass("bracket-line-left-mid-r4"); $(bllm4[m2]).removeClass("bracket-line-left-mid-r4"); $(bllb4[k]).removeClass("bracket-line-left-bot-r4"); $(blrt4[k]).removeClass("bracket-line-right-top-r4"); $(blrb4[k]).removeClass("bracket-line-right-bot-r4"); if($(bllt4[k]).is('*[class*="old"]')){ }						else{ bllt4[k].className += " oldr4"; bllb4[k].className += " oldr4"; bllm4[m1].className += " oldr4"; bllm4[m2].className += " oldr4"; blrt4[k].className += " oldr4"; blrb4[k].className += " oldr4"; }					}					for (var k = 0; k < bllt5.length; k++){ var n = 6 - smallestL; var m1 = 2 * k;						var m2 = 2 * k + 1; var nSt = " bracket-line-left-top-r" + n.toString; var nSm = " bracket-line-left-mid-r" + n.toString; var nSb = " bracket-line-left-bot-r" + n.toString; var nStr = " bracket-line-right-top-r" + n.toString; var nSbr = " bracket-line-right-bot-r" + n.toString; bllt5[k].className += nSt; bllm5[m1].className += nSm; bllm5[m2].className += nSm; bllb5[k].className += nSb; blrt5[k].className += nStr; blrb5[k].className += nSbr; $(bllt5[k]).removeClass("bracket-line-left-top-r5"); $(bllm5[m1]).removeClass("bracket-line-left-mid-r5"); $(bllm5[m2]).removeClass("bracket-line-left-mid-r5"); $(bllb5[k]).removeClass("bracket-line-left-bot-r5"); $(blrt5[k]).removeClass("bracket-line-right-top-r5"); $(blrb5[k]).removeClass("bracket-line-right-bot-r5"); if($(bllt5[k]).is('*[class*="old"]')){ }						else{ bllt5[k].className += " oldr5"; bllb5[k].className += " oldr5"; bllm5[m1].className += " oldr5"; bllm5[m2].className += " oldr5"; blrt5[k].className += " oldr5"; blrb5[k].className += " oldr5"; }					}                }                }                break; case "": default: // Toggle for (var j = 0; j < toggles.length; j++) toggles[j].style.display = ((toggles[j].style.display == 'none') ? '' : 'none'); break; }   } }

function createTogglerLink(toggler, id) {   var toggle = document.createElement("a"); toggle.className = 'toggler-link'; toggle.setAttribute('id', 'toggler' + id); toggle.setAttribute('href', 'javascript:toggler("' + id + '");'); var child = toggler.firstChild; toggler.removeChild(child); toggle.appendChild(child); toggler.insertBefore(toggle, toggler.firstChild); }

function toggleInit {   var togglerElems = new Array; var toggleGroup = new Array;

// initialize/clear any old information togglers = new Array; allClasses = new Object; // make list of all document classes var elems = document.getElementsByTagName("*"); var numelems = elems.length; for (var i = 0; i < elems.length; i++) {       var elem = elems[i]; if (!elem.className) continue;

elem._toggle_original_display = elem.style.display; var togglerID = -1; var elemClasses = elem.className.split(' '); // get list of classes for (var j = 0; j < elemClasses.length; j++) {           var elemClass = elemClasses[j]; if (! allClasses[elemClass]) allClasses[elemClass] = new Array; allClasses[elemClass].push(elem);

// all the special classes begin with _toggle if (elemClass.substring(0, 7) != "_toggle") continue;

if (elemClass == "_togglegroup") toggleGroup = new Array; else if (elemClass == "_toggle") toggleGroup.push(elem); else if (elemClass.substring(0, 12) == "_toggle_init") {               // set initial value for display (ignore the original CSS set value) // understands _toggle_initshow and _toggle_inithide var disp = elemClass.substring(12); if (disp == "show") elem.style.display = ''; else if (disp == "hide") elem.style.display = 'none'; elem._toggle_original_display = disp; }           else if (elemClass.substring(0, 8) == "_toggler") {               if (togglerID == -1) {                   togglerID = togglers.length; togglers[togglerID] = new Array; togglerElems[togglerID] = elem; }

// all classes are of form _toggler_op-CLASS // figure out what class we're toggling // if none is specified, then we use the current toggle group var toBeToggled; var hyphen = elemClass.indexOf('-'); if (hyphen != -1) toBeToggled = elemClass.substring(hyphen+1); else {                   toBeToggled = toggleGroup; hyphen = elemClass.length; }

var op = elemClass.substring(8, hyphen); togglers[togglerID].push(new Array(op, toBeToggled)); }       }    }

// add javascript links to all toggler elements for (var i = 0; i < togglerElems.length; i++) createTogglerLink(togglerElems[i], i); }

function owwsitesearch(f){ f.q.value='site:http://openwetware.org/wiki/'+ f.base.value+'++'+f.qfront.value }

$(toggleInit);

/* Converter the scheduled next game time into local timezone */ $(function {    var point = document.getElementsByClassName("getLocalTimeZoneOfThis");    var i;    for (i = 0; i < point.length; i++){       var date = new Date(point[i].innerHTML);    var month = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];    var timeMonth = month[date.getMonth];    var weekday = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];    var timeWeekday = weekday[date.getDay];    var minutes = date.getMinutes;    var timeMinutes = "00";    if (minutes < 10) timeMinutes = "0" + minutes.toString;    else timeMinutes = minutes.toString;    var hours = date.getHours;    var timeHours = "00";    if (hours < 10) timeHours = "0" + hours.toString;    else timeHours = hours.toString;    point[i].textContent = timeWeekday+" "+timeMonth+" "+date.getDate+" "+timeHours+":"+timeMinutes;    } });

/** * Countdown * * @version 2.1 * * @author Pecoes  * @author Asaba  * * Version 1 authors: * - Splarka  * - Eladkse  * * documentation and examples at: *  */ /*jshint jquery:true, browser:true, devel:true, camelcase:true, curly:false, undef:true, bitwise:true, eqeqeq:true, forin:true, immed:true, latedef:true, newcap:true, noarg:true, unused:true, regexp:true, strict:true, trailing:false */ /*global mediaWiki:true*/ var countdowns = []; var NO_LEADING_ZEROS = 1; function output (i, diff) { /*jshint bitwise:false*/ var delta, result, parts = []; diff = Math.floor(diff / 60); delta = diff % 60; if (delta<10) {           parts.unshift('0'+delta+'m'); }       else {           parts.unshift(delta+'m'); }       diff = Math.floor(diff / 60); delta = diff % 24; if (delta<10) {           parts.unshift('0'+delta+'h '); }       else {           parts.unshift(delta+'h '); }       diff = Math.floor(diff / 24); parts.unshift(diff+'d '); result = parts.pop; if (countdowns[i].opts & NO_LEADING_ZEROS) { while (parts.length && parts[0][0] === '0' && (parts[0][1] === '0' || parts[0][1] ==='d')) { parts.shift; }       }        if (parts.length) { result = parts.join('') + result; }       countdowns[i].node.text(result); }   function end(i) { var c = countdowns[i].node.parent; switch (c.attr('data-end')) { case 'remove': c.remove; return true; case 'stop': output(i, 0); return true; case 'toggle': var toggle = c.attr('data-toggle'); if (toggle && $(toggle).length) { $(toggle).css('display', 'inline'); c.css('display', 'none'); return true; }               break; case 'callback': var callback = c.attr('data-callback'); if (callback && $.isFunction(module[callback])) { output(i, 0); module[callback].call(c); return true; }               break; }        countdowns[i].countup = true; output(i, 0); return false; }   function update  { var now = Date.now; var countdownsToRemove = []; $.each(countdowns.slice(0), function (i, countdown) {           var diff = Math.floor((countdown.date - now) / 1000);            if (diff <= 0 && !countdown.countup) {                if (end(i)) countdownsToRemove.push(i);            } else {                output(i, Math.abs(diff));            }        }); var x;       while((x = countdownsToRemove.pop) !== undefined) { countdowns.splice(x, 1); }       if (countdowns.length) { window.setTimeout(function {                update;            }, 1000); }   }    function getOptions (node) { /*jshint bitwise:false*/ var text = node.parent.attr('data-options'), opts = 0; if (text) { if (/no-leading-zeros/.test(text)) { opts |= NO_LEADING_ZEROS; }       }        return opts; }   $(function  {        var countdown = $('.countdown');        if (!countdown.length) return;        $('.nocountdown').css('display', 'none');        countdown        .css('display', 'inline')        .find('.countdowndate')        .each(function  { var $this = $(this), date = (new Date($this.text)).valueOf; if (isNaN(date)) { $this.text('BAD DATE'); return; }           if (date < Date.now) { $this.text(' '); return; }           countdowns.push({                node: $this,                opts: getOptions($this),                date: date,            }); });       if (countdowns.length) {            update;        }    }); }(window.countdownTimer = window.countdownTimer || {}, mediaWiki, jQuery));
 * (function (module, mw, $, undefined) {

var toggleMapListSetup = function { var btn = $('a[id^="collapseButton"]');

btn.each(function {		var table = $(this).closest('table');		var m = $('.maprow', table);

if (m.length) { m.hide; // Collapse maps by default

var span = $(' ', {				class: 'mapsCollapseButton',				css: {					'font-weight': 'normal',					'float': 'right',					'margin-right': '7px',					'cursor': 'pointer'				}			});

table.data('maps-collapsed', true);

var toggleMaps = function { table.find('.maprow').toggle; table.data('maps-collapsed', !table.data('maps-collapsed'));

$(this).text(function(i, txt) {					return txt.replace(/\+|−/, function(a) { return a === '+' ? '−' : '+';					});				});			}

var a = $('+maps').click(toggleMaps);

span.append('[', a, ']'); $(this).parent.after(span);

if (table.hasClass('uncollapsed-maps')) { a.trigger('click'); }		}	}); };

/** * Collapsible tables * * Allows tables to be collapsed, showing only the header. See Help:Collapsing. * * @version 2.0.3 (2014-03-14) * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js * @author User:R. Koot * @author User:Krinkle * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which * is supported in MediaWiki core. */

var autoCollapse = 2; var collapseCaption = 'hide'; var expandCaption = 'show'; var tableIndex = 0;

function collapseTable( tableIndex ) { var Button = document.getElementById( 'collapseButton' + tableIndex ); var Table = document.getElementById( 'collapsibleTable' + tableIndex );

if ( !Table || !Button ) { return false; }

var Rows = Table.rows; var i;   var $row0 = $(Rows[0]);

if ( Button.firstChild.data === collapseCaption ) { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = 'none'; }       Button.firstChild.data = expandCaption; } else { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = $row0.css( 'display' ); }       Button.firstChild.data = collapseCaption; } }

function createClickHandler( tableIndex ) { return function ( e ) { e.preventDefault; collapseTable( tableIndex ); }; }

function createCollapseButtons( $content ) { var NavigationBoxes = {}; var $Tables = $content.find( 'table' ); var i;

$Tables.each( function( i, table ) {       if ( $(table).hasClass( 'collapsible' ) ) {

/* only add button and increment count if there is a header row to work with */ var HeaderRow = table.getElementsByTagName( 'tr' )[0]; if ( !HeaderRow ) { return; }           var Header = table.getElementsByTagName( 'th' )[0]; if ( !Header ) { return; }

NavigationBoxes[ tableIndex ] = table; table.setAttribute( 'id', 'collapsibleTable' + tableIndex );

var Button    = document.createElement( 'span' ); var ButtonLink = document.createElement( 'a' ); var ButtonText = document.createTextNode( collapseCaption ); // Styles are declared in MediaWiki:Common.css Button.className = 'collapseButton';

ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); ButtonLink.setAttribute( 'href', '#' ); $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) ); ButtonLink.appendChild( ButtonText );

Button.appendChild( document.createTextNode( '[' ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( ']' ) );

Header.insertBefore( Button, Header.firstChild ); tableIndex++; }   } );

for ( i = 0; i < tableIndex; i++ ) { if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||           ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )        ) { collapseTable( i ); }       else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) { var element = NavigationBoxes[i]; while ((element = element.parentNode)) { if ( $( element ).hasClass( 'outercollapse' ) ) { collapseTable ( i ); break; }           }        }    } }

mw.hook( 'wikipage.content' ).add( createCollapseButtons );

/** * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse * * Maintainers: TheDJ */ function mwCollapsibleSetup( $collapsibleContent ) { var $element, $toggle, autoCollapseThreshold = 2; $.each( $collapsibleContent, function (index, element) {		$element = $( element );		if ( $collapsibleContent.length > autoCollapseThreshold && $element.hasClass( 'autocollapse' ) ) {			$element.data( 'mw-collapsible' ).collapse;		} else if ( $element.hasClass( 'innercollapse' ) ) {			if ( $element.parents( '.outercollapse' ).length > 0 ) {				$element.data( 'mw-collapsible' ).collapse;			}		}		$toggle = $element.find( '.mw-collapsible-toggle' );		if ( $toggle.length ) {			// Make the toggle inherit text color			if( $toggle.parent[0].style.color ) {				$toggle.find( 'a' ).css( 'color', 'inherit' );			}		}	} ); }

mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );

/** * Dynamic Navigation Bars (experimental) * * Description: See NavFrame. * Maintainers: UNMAINTAINED */

/* set up the words in your language */ var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']'; var indexNavigationBar = 0;

/** * Shows and hides content and picture (if available) of navigation bars * Parameters: *    indexNavigationBar: the index of navigation bar to be toggled **/ window.toggleNavigationBar = function ( indexNavigationBar, event ) { var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar ); var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar ); var NavChild;

if ( !NavFrame || !NavToggle ) { return false; }

/* if shown now */ if ( NavToggle.firstChild.data === NavigationBarHide ) { for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) { NavChild.style.display = 'none'; }       }    NavToggle.firstChild.data = NavigationBarShow;

/* if hidden now */ } else if ( NavToggle.firstChild.data === NavigationBarShow ) { for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) { NavChild.style.display = 'block'; }       }        NavToggle.firstChild.data = NavigationBarHide; }

event.preventDefault; };

/* adds show/hide-button to navigation bars */ function createNavigationBarToggleButton( $content ) { var NavChild; /* iterate over all -elements */ var $divs = $content.find( 'div' ); $divs.each( function ( i, NavFrame ) {       /* if found a navigation bar */        if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {

indexNavigationBar++; var NavToggle = document.createElement( 'a' ); NavToggle.className = 'NavToggle'; NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar ); NavToggle.setAttribute( 'href', '#' ); $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );

var isCollapsed = $( NavFrame ).hasClass( 'collapsed' ); /**            * Check if any children are already hidden. This loop is here for backwards compatibility: * the old way of making NavFrames start out collapsed was to manually add style="display:none" * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make            * the content visible without JavaScript support), the new recommended way is to add the class * "collapsed" to the NavFrame itself, just like with collapsible tables. */           for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) { if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) { if ( NavChild.style.display === 'none' ) { isCollapsed = true; }               }            }            if ( isCollapsed ) { for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) { NavChild.style.display = 'none'; }               }            }            var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide ); NavToggle.appendChild( NavToggleText );

/* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */ for( var j = 0; j < NavFrame.childNodes.length; j++ ) { if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) { NavToggle.style.color = NavFrame.childNodes[j].style.color; NavFrame.childNodes[j].appendChild( NavToggle ); }           }            NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar ); }   } ); }

mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );