MediaWiki:Common.js

From A KoL Wiki
Revision as of 06:06, 30 December 2013 by imported>Caseyweederman (still testing)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/*<pre>*/
/* tooltips and access keys */
ta = new Object();
ta['pt-userpage'] = new Array('.','My user page');
ta['pt-anonuserpage'] = new Array('.','The user page for the ip you\'re editing as');
ta['pt-mytalk'] = new Array('n','My talk page');
ta['pt-anontalk'] = new Array('n','Discussion about edits from this ip address');
ta['pt-preferences'] = new Array('','My preferences');
ta['pt-watchlist'] = new Array('l','The list of pages you\'re monitoring for changes.');
ta['pt-mycontris'] = new Array('y','List of my contributions');
ta['pt-login'] = new Array('o','You are encouraged to log in, it is not mandatory however.');
ta['pt-anonlogin'] = new Array('o','You are encouraged to log in, it is not mandatory however.');
ta['pt-logout'] = new Array('o','Log out');
ta['ca-talk'] = new Array('t','Discussion about the content page');
ta['ca-edit'] = new Array('e','You can edit this page. Please use the preview button before saving.');
ta['ca-addsection'] = new Array('+','Add a comment to this discussion.');
ta['ca-viewsource'] = new Array('e','This page is protected. You can view its source.');
ta['ca-history'] = new Array('h','Past versions of this page.');
ta['ca-protect'] = new Array('=','Protect this page');
ta['ca-delete'] = new Array('d','Delete this page');
ta['ca-undelete'] = new Array('d','Restore the edits done to this page before it was deleted');
ta['ca-move'] = new Array('m','Move this page');
ta['ca-watch'] = new Array('w','Add this page to your watchlist');
ta['ca-unwatch'] = new Array('w','Remove this page from your watchlist');
ta['search'] = new Array('f','Search this wiki');
ta['p-logo'] = new Array('','Main Page');
ta['n-mainpage'] = new Array('z','Visit the Main Page');
ta['n-portal'] = new Array('','About the project, what you can do, where to find things');
ta['n-currentevents'] = new Array('','Find background information on current events');
ta['n-recentchanges'] = new Array('r','The list of recent changes in the wiki.');
ta['n-randompage'] = new Array('x','Load a random page');
ta['n-help'] = new Array('','The place to find out.');
ta['n-sitesupport'] = new Array('','Support us');
ta['t-whatlinkshere'] = new Array('j','List of all wiki pages that link here');
ta['t-recentchangeslinked'] = new Array('k','Recent changes in pages linked from this page');
ta['feed-rss'] = new Array('','RSS feed for this page');
ta['feed-atom'] = new Array('','Atom feed for this page');
ta['t-contributions'] = new Array('','View the list of contributions of this user');
ta['t-emailuser'] = new Array('','Send a mail to this user');
ta['t-upload'] = new Array('u','Upload images or media files');
ta['t-specialpages'] = new Array('q','List of all special pages');
ta['ca-nstab-main'] = new Array('c','View the content page');
ta['ca-nstab-user'] = new Array('c','View the user page');
ta['ca-nstab-media'] = new Array('c','View the media page');
ta['ca-nstab-special'] = new Array('','This is a special page, you can\'t edit the page itself.');
ta['ca-nstab-wp'] = new Array('a','View the project page');
ta['ca-nstab-image'] = new Array('c','View the image page');
ta['ca-nstab-mediawiki'] = new Array('c','View the system message');
ta['ca-nstab-template'] = new Array('c','View the template');
ta['ca-nstab-help'] = new Array('c','View the help page');
ta['ca-nstab-category'] = new Array('c','View the category page');

var skin = "monobook";
var stylepath = "/thekolwiki/skins";
var wgArticlePath = "/thekolwiki/index.php/$1";
var wgScriptPath = "/thekolwiki";
var wgServer = "http://kol.coldfront.net/";
//var wgCanonicalNamespace = "";
//var wgCanonicalSpecialPageName = false;
//var wgNamespaceNumber = 0;
//var wgPageName = "Main_Page";
//var wgTitle = "Main Page";
//var wgArticleId = "13173";
//var wgIsArticle = true;
//var wgUserName = null;
//var wgUserGroups = null;
var wgUserLanguage = "en";
var wgContentLanguage = "en";
var wgBreakFrames = false;
//var wgCurRevisionId = "98546089";

if (!window.onloadFuncts) {
	var onloadFuncts = [];
}

function addOnloadHook(hookFunct) {
	// Allows add-on scripts to add onload functions
	onloadFuncts[onloadFuncts.length] = hookFunct;
}

function MainPage(){
	var mpTitle = "Main Page";
	var isMainPage = (document.title.substr(0, document.title.lastIndexOf(" - ")) == mpTitle);
     	if ((isMainPage || /[\/=:]Main_Page/.test(document.location)) && document.getElementById('p-cactions')) {
          document.getElementById('p-cactions').getElementsByTagName("nobr")[0].innerHTML = "Main Page";
      	}
}

/*
 * 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-2006 Stuart Langridge, Joost de Valk.
 *
 * @todo don't break on colspans/rowspans (bug 8028)
 * @todo language-specific digit grouping/decimals (bug 8063)
 * @todo support all accepted date formats (bug 8226)
 */

var old_ts_image_path = stylepath+"/common/images/";
var old_ts_image_up = "sort_up.gif";
var old_ts_image_down = "sort_down.gif";
var old_ts_image_none = "sort_none.gif";
var old_ts_europeandate = wgContentLanguage != "en"; // The non-American-inclined can change to "true"
var old_ts_alternate_row_colors = true;
var SORT_COLUMN_INDEX;

function old_sortables_init() {
	var idnum = 0;
	// Find all tables with class sortable and make them sortable
	var tables = getElementsByClassName(document, "table", "sorttable");//originally sortable
	for (var ti = 0; ti < tables.length ; ti++) {
		if (!tables[ti].id) {
			tables[ti].setAttribute('id','sortable_table_id_'+idnum);
			++idnum;
		}
		old_ts_makeSortable(tables[ti]);
	}
}

function old_ts_makeSortable(table) {
	var firstRow;
	if (table.rows && table.rows.length > 0) {
		if (table.tHead && table.tHead.rows.length > 0) {
			firstRow = table.tHead.rows[table.tHead.rows.length-1];
		} else {
			firstRow = table.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];
		if ((" "+cell.className+" ").indexOf(" unsortable ") == -1) {
			cell.innerHTML += '&nbsp;&nbsp;<a href="#" class="sortheader" onclick="old_ts_resortTable(this);return false;"><span class="sortarrow"><img src="'+ old_ts_image_path + old_ts_image_none + '" alt="&darr;"/></span></a>';
		}
	}
	if (old_ts_alternate_row_colors && table.className.indexOf('nopajama')<0) {
		old_ts_alternate(table);
	}
}

function old_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 += old_ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function old_ts_resortTable(lnk) {
	// get the span
	var span = lnk.getElementsByTagName('span')[0];

	var td = lnk.parentNode;
	var tr = td.parentNode;
	var column = td.cellIndex;

	var table = tr.parentNode;
	while (table && !(table.tagName && table.tagName.toLowerCase() == 'table'))
		table = table.parentNode;
	if (!table) return;

	// Work out a type for the column
	if (table.rows.length <= 1) return;

	// Skip the first row if that's where the headings are
	var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);

	var doopt=(table.className.indexOf('complextable')>=0) ? true : false;
	if (doopt) {
		var rows=table.rows;
		// first, unoptimize the table
		for (var i = rowStart; i < rows.length-1; i++) {
			var cells1 = rows[i].cells;
			var cells2 = rows[i+1].cells;
			for (var j=0;j<cells1.length;j++) {
				var rspan = cells1[j].getAttribute('rowspan');
				if (rspan && rspan>1) {
					var cn = cells1[j].cloneNode(true);
					if (cells2.length<=j) 
						table.rows[i+1].appendChild(cn);
					else
						rows[i+1].insertBefore(cn,cells2[j]);
					cells1[j].removeAttribute('rowspan');
					cn.setAttribute('rowspan',rspan-1);
				}
			}
		}
	}

	var itm = "";
	for (var i = rowStart; i < table.rows.length; i++) {
		if (table.rows[i].cells.length > column) {
			itm = old_ts_getInnerText(table.rows[i].cells[column]);
			itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
			if (itm != "") break;
		}
	}

	sortfn = old_ts_sort_caseinsensitive;
	if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))
		sortfn = old_ts_sort_date;
	if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))
		sortfn = old_ts_sort_date;
	if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))
		sortfn = old_ts_sort_date;
	if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro
		sortfn = old_ts_sort_currency;
	if (itm.match(/^[\d.,-]+\%?$/))
		sortfn = old_ts_sort_numeric;
	if ((!doopt || sortfn!=old_ts_sort_numeric) && itm.match(/^(?:\d+ [Mm](?:uscle|ysticality|oxie)|-|[Nn]one)$/))
		sortfn = old_ts_sort_req;

	var reverse = (span.getAttribute("sortdir") == 'down');

	var newRows = new Array();
	for (var j = rowStart; j < table.rows.length; j++) {
		var row = table.rows[j];
		var keyText = old_ts_getInnerText(row.cells[column]);
		var oldIndex = (reverse ? -j : j);

		newRows[newRows.length] = new Array(row, keyText, oldIndex);
	}

	newRows.sort(sortfn);

	var arrowHTML;
	if (reverse) {
			arrowHTML = '<img src="'+ old_ts_image_path + old_ts_image_down + '" alt="&darr;"/>';
			newRows.reverse();
			span.setAttribute('sortdir','up');
	} else {
			arrowHTML = '<img src="'+ old_ts_image_path + old_ts_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 (var i = 0; i < newRows.length; i++) {
		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1)
			table.tBodies[0].appendChild(newRows[i][0]);
	}
	// do sortbottom rows only
	for (var i = 0; i < newRows.length; i++) {
		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1)
			table.tBodies[0].appendChild(newRows[i][0]);
	}

	if (doopt) { 
        var rows=table.rows;
        // now, reoptimize the table
        for (var i = rows.length-1;i>rowStart;i--) {
            var cells1 = rows[i-1].cells;
            var cells2 = rows[i].cells;
            for (var j=cells2.length-1;j>=0;j--) {
                if (cells1[j].innerHTML==cells2[j].innerHTML && rows[i-1].getAttribute('bgcolor')==rows[i].getAttribute('bgcolor')) {
                    var rspan = cells2[j].getAttribute('rowspan');
                    if (rspan) {
                        cells2[j].removeAttribute('rowspan');
                        rspan=parseInt(rspan)+1;
                    } else {
                        rspan=2;
                    }
                    rows[i].removeChild(cells2[j]);
                    cells1[j].setAttribute('rowspan',rspan);
                }
            }
        }
    }

	// Delete any other arrows there may be showing
	var spans = getElementsByClassName(tr, "span", "sortarrow");
	for (var i = 0; i < spans.length; i++) {
		spans[i].innerHTML = '<img src="'+ old_ts_image_path + old_ts_image_none + '" alt="&darr;"/>';
	}
	span.innerHTML = arrowHTML;

	if (table.className.indexOf('nopajama')<0) old_ts_alternate(table);		
}

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

function old_ts_parseFloat(num) {
	if (!num) return 0;
	num = parseFloat(num.replace(/,/, ""));
	return (isNaN(num) ? 0 : num);
}

function old_ts_sort_date(a,b) {
	var aa = old_ts_dateToSortKey(a[1]);
	var bb = old_ts_dateToSortKey(b[1]);
	return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
}

function old_ts_sort_currency(a,b) {
	var aa = old_ts_parseFloat(a[1].replace(/[^0-9.]/g,''));
	var bb = old_ts_parseFloat(b[1].replace(/[^0-9.]/g,''));
	return (aa != bb ? aa - bb : a[2] - b[2]);
}

function old_ts_sort_numeric(a,b) {
	var aa = old_ts_parseFloat(a[1]);
	var bb = old_ts_parseFloat(b[1]);
	return (aa != bb ? aa - bb : a[2] - b[2]);
}

function old_ts_sort_caseinsensitive(a,b) {
	var aa = a[1].toLowerCase();
	var bb = b[1].toLowerCase();
	return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
}

function old_ts_sort_req(a,b) {
 var aa = old_ts_parsereq(a[1]);
 var bb = old_ts_parsereq(b[1]);
 return (aa != bb ? aa - bb : a[2] - b[2]);
}

function old_ts_parsereq(req){
 var a = req.match(/(\S+) *(\S*)/);
 if(a==null) return 0;
 a[1]=parseInt(a[1]);
 switch(a[2].toLowerCase()){
  case "muscle": return a[1]+3000;
  case "mysticality": return a[1]+2000;
  case "moxie": return a[1]+1000;
  default: return 0;
 }
}

function old_ts_sort_default(a,b) {
	return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]);
}

function old_ts_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
			var oldClasses = tableRows[j].className.split(" ");
			var newClassName = "";
			for (var k = 0; k < oldClasses.length; k++) {
				if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd")
					newClassName += oldClasses[k] + " ";
			}
			tableRows[j].className = newClassName + (j % 2 == 0 ? "even" : "odd");
		}
	}
}

/*
 * End of table sorting code
 */

/* "throbbing" code */
var throbs = document.querySelectorAll(".throbtext");
if (throbs.length>0) {
  throb_out();
}

function throb_out() {
  var throbs = document.querySelectorAll(".throbtext");
  for (var i=0;i<throbs.length;i++) {
    fadeDown(throbs.item(i),Math.random()*400,0.5);
  }
  setTimeout(throb_in,400+Math.random()*200);
}

function throb_in() {
  var throbs = document.querySelectorAll(".throbtext");
  for (var i=0;i<throbs.length;i++) {
    fadeUp(throbs.item(i),Math.random()*400,Math.min(.95,Math.random()+.5));
  }
  setTimeout(throb_out,400+Math.random()*200);
}

function fadeDown( elem, time, dest ) {
	var startOpacity = elem.style.opacity || 1;
        var opacityStep = Math.abs(dest-startOpacity)/(time/5);

	(function goDn() {
		elem.style.opacity = Number(elem.style.opacity) - Number(opacityStep);
                if (elem.style.opacity>dest)
  		   setTimeout( goDn, 5 );
	})();
}

function fadeUp( elem, time, dest ) {
	var startOpacity = elem.style.opacity || 1;
        var opacityStep = Math.abs(dest-startOpacity)/(time/5);

	(function goUp() {
		elem.style.opacity = Number(elem.style.opacity) + Number(opacityStep);
                if (elem.style.opacity<dest)
  		   setTimeout( goUp, 5 );
	})();
}
/* end "throbbing" code */

/* Show/hide metadata */
$("#metaData").bind("mouseenter mouseleave", function() {
 $("#metaDataInfo").toggle(); 
});

if(typeof(Storage)!=="undefined"){
 if(localStorage.autoShowMetaData == 1){
  //Don't autohide
  $("#metaDataInfo").css("display","block");

 }
 else{
  //Continue to autohide
  $("#metaDataInfo").css("display","none");
  $("#metaDataInfo").append("<br /><a onclick='localStorage.autoShowMetaData=1;'>Click to show metadata by default.</a>");
 }
}
else{
 //Browser doesn't support local storage, alternate solution?
 $("#metaDataInfo").append("<br /><a href='http://www.html5rocks.com/en/features/storage'>Sorry, your browser doesn't support local storage.</a>");
}
/* end show/hide metadata */

addOnloadHook(MainPage);
addOnloadHook(old_sortables_init);

/*</pre>*/