MediaWiki:Monobook.js

From Picklewiki

(Difference between revisions)
Line 49: Line 49:
ta['ca-nstab-help'] = new Array('c','View the help page');
ta['ca-nstab-help'] = new Array('c','View the help page');
ta['ca-nstab-category'] = new Array('c','View the category page');
ta['ca-nstab-category'] = new Array('c','View the category page');
 +
 +
/* Any JavaScript here will be loaded for all users on every page load. */
 +
 +
/*<pre>*/
 +
//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
 +
function ts_parseFloat_ks(num) {
 +
if (!num) return 0;
 +
num = parseFloat(num.replace(/,/g, ""));
 +
return (isNaN(num) ? 0 : num);
 +
}
 +
 +
//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 )
 +
{
 +
    var Button = document.getElementById( "collapseButton" + tableIndex );
 +
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
 +
 +
    if ( !Table || !Button ) {
 +
        return false;
 +
    }
 +
 +
    var Rows = Table.getElementsByTagName( "tr" );
 +
 +
    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);</pre>

Revision as of 21:05, 11 November 2007

/* 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');

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

/*<pre>*/
//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
function ts_parseFloat_ks(num) {
	if (!num) return 0;
	num = parseFloat(num.replace(/,/g, ""));
	return (isNaN(num) ? 0 : num);
}

//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 )
 {
     var Button = document.getElementById( "collapseButton" + tableIndex );
     var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
     if ( !Table || !Button ) {
         return false;
     }
 
     var Rows = Table.getElementsByTagName( "tr" ); 
 
     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);</pre>
Personal tools
Navigation