From WikiTemp, the GBAtemp wiki
(New page: /* Any JavaScript here will be loaded for all users on every page load. */ <source lang="javascript">: //Overrides the function with the same name in http://svn.wikimedia.org/viewvc/me...)
 
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
+
$(document).ready( function() {
  
/*<source lang="javascript">*/
+
var wgPageName = mw.config.get('wgPageName');
//Overrides the function with the same name in http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js
+
//Fixes a bug: for the sorting order, takes the whole number, not the number before the second comma.
+
//Also, removes spaces. See [[Help:Sorting]].
+
function ts_parseFloat(num) {
+
if (!num) return 0;
+
    num = removeSpaces(num);
+
num = parseFloat(num.replace(/,/g, ""));
+
return (isNaN(num) ? 0 : num);
+
}
+
  
//Keep spaces in "currency" mode, to sort a range "70 to 80" at 70, not 7080
+
/** Index.php redirect *************************************
function ts_parseFloat_ks(num) {
+
*  
if (!num) return 0;
+
*  Description: Automatically redirects to new page if the page starts with "Index.php/"
num = parseFloat(num.replace(/,/g, ""));
+
*/
return (isNaN(num) ? 0 : num);
+
    if (wgPageName.toLowerCase().indexOf('index.php/') === 0) {
}
+
    var newPage = wgPageName.substr(wgPageName.indexOf('/')+1);
 
+
    window.location = 'http://wiki.gbatemp.net/wiki/' + newPage;
//Auxiliary function for function ts_resortTable(lnk)
+
function removeSpaces(string) {
+
        var tstring = "";
+
        string = '' + string;
+
        splitstring = string.split(" ");
+
        for(i = 0; i < splitstring.length; i++)
+
        tstring += splitstring[i];
+
        return tstring;
+
}
+
 
+
//Overrides the function with the same name in http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js
+
//Changes the criteria for various sorting modes, see [[Help:Sorting]].
+
//For easy maintenance the difference with wikibits.js is kept limited to a few lines.
+
function 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 itm = "";
+
for (var i = rowStart; i < table.rows.length; i++) {
+
if (table.rows[i].cells.length > column) {
+
itm = ts_getInnerText(table.rows[i].cells[column]);
+
itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
+
if (itm != "") break;
+
}
+
}
+
 
+
sortfn = ts_sort_caseinsensitive;
+
    itmns = removeSpaces(itm);
+
    if (itmns.match(/^[\d\.\,\-\+]+\%?$/)) sortfn = ts_sort_numeric;
+
    if (itmns.match(/^[\d\.\,\-\+]+[eE][\d\-\+]+\%?$/)) sortfn = ts_sort_numeric;
+
    if (itmns.match(/^[\d\.\,\-\+]+e[\d\-\+]+\u00d710[\d\-\+]+\%?$/)) sortfn = ts_sort_numeric;
+
if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))
+
sortfn = ts_sort_date;
+
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))
+
sortfn = ts_sort_date;
+
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))
+
sortfn = ts_sort_date;
+
if (itm.match(/^[\u00a3$\u20ac\u00a5]/)) // pound dollar euro yen
+
sortfn = ts_sort_currency;
+
    if (itm.match(/sm=c$/)) sortfn = ts_sort_currency;
+
    if (itm.match(/sm=d$/)) sortfn = ts_sort_date;
+
    if (itm.match(/sm=n$/)) sortfn = ts_sort_numeric;
+
 
+
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 = 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="'+ ts_image_path + ts_image_down + '" alt="&darr;"/>';
+
newRows.reverse();
+
span.setAttribute('sortdir','up');
+
} else {
+
arrowHTML = '<img src="'+ ts_image_path + 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]);
+
}
+
 
+
// 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="'+ ts_image_path + ts_image_none + '" alt="&darr;"/>';
+
}
+
span.innerHTML = arrowHTML;
+
 
+
ts_alternate(table);
+
}
+
 
+
function 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 > 10) {
+
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) {
+
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;
+
}
+
return yr+date.substr(3,2)+date.substr(0,2);
+
}
+
return "00000000";
+
}
+
 
+
function ts_sort_currency(a,b) {
+
var aa = ts_parseFloat_ks(a[1].replace(/[\u00a3$\u20ac\u00a5a-zA-Z]/g,''));
+
var bb = ts_parseFloat_ks(b[1].replace(/[\u00a3$\u20ac\u00a5a-zA-Z]/g,''));
+
return (aa != bb ? aa - bb : a[2] - b[2]);
+
}
+
 
+
/** Collapsible tables *********************************************************
+
  *
+
  *  Description: Allows tables to be collapsed, showing only the header. See
+
  *               [[Wikipedia:NavFrame]].
+
  *  Maintainer on Wikipedia: [[User:R. Koot]]
+
  */
+
+
var autoCollapse = 2;
+
var collapseCaption = "hide";
+
var expandCaption = "show";
+
+
function hasClass( element, className ) {
+
  var Classes = element.className.split( " " );
+
  for ( var i = 0; i < Classes.length; i++ ) {
+
    if ( Classes[i] == className ) {
+
      return ( true );
+
 
     }
 
     }
  }
 
  return ( false );
 
}
 
  
function collapseTable( tableIndex )
+
/** Preload Homebrew Template *********************************
{
+
*
    var Button = document.getElementById( "collapseButton" + tableIndex );
+
* Adds preload to links on relevant pages
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
+
*/
+
if( $("#preloadnewpages").length ) {
    if ( !Table || !Button ) {
+
var preload = $("#preloadnewpages").text();
        return false;
+
$('a.new').each( function() {
    }
+
var oldHref = $(this).attr('href');
+
if( oldHref.indexOf("/wiki/User:") !== 0 && oldHref.indexOf("/wiki/Category:") !== 0 ) {
    var Rows = Table.getElementsByTagName( "tr" );
+
$(this).attr('href', oldHref + '&preload=' + preload );
+
}
    if ( Button.firstChild.data == collapseCaption ) {
+
});
        for ( var i = 1; i < Rows.length; i++ ) {
+
            Rows[i].style.display = "none";
+
        }
+
        Button.firstChild.data = expandCaption;
+
    } else {
+
        for ( var i = 1; i < Rows.length; i++ ) {
+
            Rows[i].style.display = Rows[0].style.display;
+
        }
+
        Button.firstChild.data = collapseCaption;
+
    }
+
}
+
+
function createCollapseButtons()
+
{
+
    var tableIndex = 0;
+
    var NavigationBoxes = new Object();
+
    var Tables = document.getElementsByTagName( "table" );
+
+
    for ( var i = 0; i < Tables.length; i++ ) {
+
        if ( hasClass( Tables[i], "collapsible" ) ) {
+
            NavigationBoxes[ tableIndex ] = Tables[i];
+
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
+
+
            var Button    = document.createElement( "span" );
+
            var ButtonLink = document.createElement( "a" );
+
            var ButtonText = document.createTextNode( collapseCaption );
+
+
            Button.style.styleFloat = "right";
+
            Button.style.cssFloat = "right";
+
            Button.style.fontWeight = "normal";
+
            Button.style.textAlign = "right";
+
            Button.style.width = "6em";
+
+
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
+
            ButtonLink.appendChild( ButtonText );
+
+
            Button.appendChild( document.createTextNode( "[" ) );
+
            Button.appendChild( ButtonLink );
+
            Button.appendChild( document.createTextNode( "]" ) );
+
+
            var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
+
            /* only add button and increment count if there is a header row to work with */
+
            if (Header) {
+
                Header.insertBefore( Button, Header.childNodes[0] );
+
                tableIndex++;
+
            }
+
        }
+
    }
+
+
    for ( var i = 0;  i < tableIndex; i++ ) {
+
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
+
            collapseTable( i );
+
        }
+
    }
+
}
+
+
addOnloadHook( createCollapseButtons );
+
 
+
//Shuffle for election candidates
+
function dshuf(){
+
                var shufsets=new Object()
+
                var rx=new RegExp('dshuf'+'\\s+(dshufset\\d+)', 'i')
+
                var divs=document.getElementsByTagName("div")
+
                for (var i=0; i<divs.length; i++){
+
                        if (rx.test(divs[i].className)){
+
                                if (typeof shufsets[RegExp.$1]=="undefined"){
+
                                        shufsets[RegExp.$1]=new Object()  
+
                                        shufsets[RegExp.$1].inner=[]
+
                                        shufsets[RegExp.$1].member=[]
+
                                }
+
                                        shufsets[RegExp.$1].inner.push(divs[i].innerHTML)
+
                                        shufsets[RegExp.$1].member.push(divs[i])
+
                        }
+
                }
+
                for (shufset in shufsets){
+
                        shufsets[shufset].inner.sort(function() {return 0.5 - Math.random()})
+
                        for (var i=0; i<shufsets[shufset].member.length; i++){
+
                                shufsets[shufset].member[i].innerHTML=shufsets[shufset].inner[i]
+
                                shufsets[shufset].member[i].style.display="block"
+
                        }
+
                }
+
 
+
}
+
 
+
addOnloadHook(dshuf);
+
 
+
/*************
+
*** AJAX transclusion table <http://meta.wikimedia.org/wiki/User:Pathoschild/Scripts/AJAX_transclusion_table>
+
*** by [[m:user:Pathoschild]]
+
*************/
+
function attLoader() {
+
if(getElementsByClassName(document.getElementsByTagName('body')[0],'table','attable').length) {
+
        document.write('<script type="text/javascript" src="'
+
          + 'http://meta.wikimedia.org/w/index.php?title=User:Pathoschild/Scripts/AJAX_transclusion_table.js'
+
          + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
+
 
}
 
}
}
+
});
addOnloadHook(attLoader);
+
 
+
/** JSconfig ************
+
* Global configuration options to enable/disable and configure
+
* specific script features from [[MediaWiki:Common.js]] and
+
* [[MediaWiki:Monobook.js]]
+
* This framework adds config options (saved as cookies) to [[Special:Preferences]]
+
* For a more permanent change you can override the default settings in your
+
* [[Special:Mypage/monobook.js]]
+
* for Example: JSconfig.keys[loadAutoInformationTemplate] = false;
+
*
+
*  Maintainer: [[User:Dschwen]]
+
*/
+
+
var JSconfig =
+
{
+
prefix : 'jsconfig_',
+
keys : {},
+
meta : {},
+
+
//
+
// Register a new configuration item
+
//  * name          : String, internal name
+
//  * default_value : String or Boolean (type determines configuration widget)
+
//  * description  : String, text appearing next to the widget in the preferences
+
//  * prefpage      : Integer (optional), section in the preferences to insert the widget:
+
//                    0 : User profile
+
//                    1 : Skin
+
//                    2 : Math
+
//                    3 : Files
+
//                    4 : Date and time
+
//                    5 : Editing
+
//                    6 : Recent changes
+
//                    7 : Watchlist
+
//                    8 : Search
+
//                    9 : Misc
+
//
+
// Access keys through JSconfig.keys[name]
+
//
+
registerKey : function( name, default_value, description, prefpage )
+
{
+
  if( typeof(JSconfig.keys[name]) == 'undefined' )
+
  JSconfig.keys[name] = default_value;
+
  else {
+
+
  // all cookies are read as strings,
+
  // convert to the type of the default value
+
  switch( typeof(default_value) )
+
  {
+
    case 'boolean' : JSconfig.keys[name] = ( JSconfig.keys[name] == 'true' ); break;
+
    case 'number'  : JSconfig.keys[name] = JSconfig.keys[name]/1; break;
+
  }
+
+
  }
+
+
  JSconfig.meta[name] = { 'description' : description, 'page' : prefpage || 0, 'default_value' : default_value };
+
},
+
+
readCookies : function()
+
{
+
  var cookies = document.cookie.split("; ");
+
  var p =JSconfig.prefix.length;
+
  var i;
+
+
  for( var key in cookies )
+
  {
+
  if( cookies[key].substring(0,p) == JSconfig.prefix )
+
  {
+
    i = cookies[key].indexOf('=');
+
    //alert( cookies[key] + ',' + key + ',' + cookies[key].substring(p,i) );
+
    JSconfig.keys[cookies[key].substring(p,i)] = cookies[key].substring(i+1);
+
  }
+
  }
+
},
+
+
writeCookies : function()
+
{
+
  for( var key in JSconfig.keys )
+
  document.cookie = JSconfig.prefix + key + '=' + JSconfig.keys[key] + '; path=/; expires=Thu, 2 Aug 2009 10:10:10 UTC';
+
},
+
+
evaluateForm : function()
+
{
+
  var w_ctrl,wt;
+
  //alert('about to save JSconfig');
+
  for( var key in JSconfig.meta ) {
+
  w_ctrl = document.getElementById( JSconfig.prefix + key )
+
  if( w_ctrl )
+
  {
+
    wt = typeof( JSconfig.meta[key].default_value );
+
    switch( wt ) {
+
    case 'boolean' : JSconfig.keys[key] = w_ctrl.checked; break;
+
    case 'string' : JSconfig.keys[key] = w_ctrl.value; break;
+
    }
+
  }
+
  }
+
+
  JSconfig.writeCookies();
+
  return true;
+
},
+
+
setUpForm : function()
+
{
+
  var prefChild = document.getElementById('preferences');
+
  if( !prefChild ) return;
+
  prefChild = prefChild.childNodes;
+
+
  //
+
  // make a list of all preferences sections
+
  //
+
  var tabs = new Array;
+
  var len = prefChild.length;
+
  for( var key = 0; key < len; key++ ) {
+
  if( prefChild[key].tagName &&
+
      prefChild[key].tagName.toLowerCase() == 'fieldset' )
+
    tabs.push(prefChild[key]);
+
  }
+
+
  //
+
  // Create Widgets for all registered config keys
+
  //
+
  var w_div, w_label, w_ctrl, wt;
+
  for( var key in JSconfig.meta ) {
+
  w_div = document.createElement( 'DIV' );
+
+
  w_label = document.createElement( 'LABEL' );
+
  w_label.appendChild( document.createTextNode( JSconfig.meta[key].description ) )
+
  w_label.htmlFor = JSconfig.prefix + key;
+
+
  wt = typeof( JSconfig.meta[key].default_value );
+
+
  w_ctrl = document.createElement( 'INPUT' );
+
  w_ctrl.id = JSconfig.prefix + key;
+
+
  // before insertion into the DOM tree
+
  switch( wt ) {
+
    case 'boolean' : w_ctrl.type = 'checkbox'; break;
+
    case 'string'  : w_ctrl.type = 'text'; break;
+
  }
+
+
  w_div.appendChild( w_label );
+
  w_div.appendChild( w_ctrl );
+
  tabs[JSconfig.meta[key].page].appendChild( w_div );
+
+
  // after insertion into the DOM tree
+
  switch( wt ) {
+
    case 'boolean' : w_ctrl.defaultChecked = w_ctrl.checked = JSconfig.keys[key]; break;
+
    case 'string' : w_ctrl.defaultValue = w_ctrl.value = JSconfig.keys[key]; break;
+
  }
+
+
  }
+
  addHandler(document.getElementById('preferences').parentNode, 'submit', JSconfig.evaluateForm );
+
}
+
}
+
+
JSconfig.readCookies();
+
addOnloadHook(JSconfig.setUpForm);
+
 
+
/*</source>*/
+

Latest revision as of 10:50, 8 February 2015

$(document).ready( function() {
 
	var wgPageName = mw.config.get('wgPageName');
 
	/** Index.php redirect *************************************
	 * 
	 *  Description: Automatically redirects to new page if the page starts with "Index.php/"
	 */
    if (wgPageName.toLowerCase().indexOf('index.php/') === 0) {
    	var newPage = wgPageName.substr(wgPageName.indexOf('/')+1);
    	window.location = 'http://wiki.gbatemp.net/wiki/' + newPage;
    }
 
	/** Preload Homebrew Template *********************************
	 * 
	 * Adds preload to links on relevant pages
	 */
	if( $("#preloadnewpages").length ) {
		var preload = $("#preloadnewpages").text();
		$('a.new').each( function() {
			var oldHref = $(this).attr('href');
			if( oldHref.indexOf("/wiki/User:") !== 0 && oldHref.indexOf("/wiki/Category:") !== 0 ) {
				$(this).attr('href', oldHref + '&preload=' + preload );
			}
		});
	}
});