MediaWiki:Common.js
From A KoL Wiki
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 += ' <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="↓"/></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="↓"/>'; newRows.reverse(); span.setAttribute('sortdir','up'); } else { arrowHTML = '<img src="'+ old_ts_image_path + old_ts_image_up + '" alt="↑"/>'; 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="↓"/>'; } 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 */ if(typeof(Storage)!=="undefined"){ if(localStorage.autoShowMetaData == 1){ //Don't autohide $("#metaDataInfo").css("display","block"); } else{ $("#metaData").bind("mouseenter mouseleave", function() { $("#metaDataInfo").toggle(); }); //Continue to autohide $("#metaDataInfo").css("display","none"); $("#metaDataInfo").append("<br /><a onclick='localStorage.autoShowMetaData=1; $(this).hide(); $(this).parent.append(\"<br />No longer autohiding metadata as of the next pageload.\");'>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>*/