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="↓"/>'; | ||
+ | newRows.reverse(); | ||
+ | span.setAttribute('sortdir','up'); | ||
+ | } else { | ||
+ | arrowHTML = '<img src="'+ ts_image_path + 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]); | ||
+ | } | ||
+ | |||
+ | // 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="↓"/>'; | ||
+ | } | ||
+ | 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="↓"/>'; newRows.reverse(); span.setAttribute('sortdir','up'); } else { arrowHTML = '<img src="'+ ts_image_path + 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]); } // 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="↓"/>'; } 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>