User:Ucucha/collapse.js

var autoCollapse = 2; var collapseCaption = "hide"; var expandCaption = "show";

function collapseRow( rowIndex ) {   var Button = document.getElementById( "id-row-collapsebutton" + rowIndex ); var Row = document.getElementById( "id-row-collapsible" + rowIndex );

if ( !Row || !Button ) { return false; }

if ( Button.firstChild.data == collapseCaption ) { Row.style.display = "none"; Button.firstChild.data = expandCaption; } else { Row.style.display = "table-row"; Button.firstChild.data = collapseCaption; } }

function createCollapseButtons {   var rowIndex = 0; var Collbuttons = new Object; var Collrows = new Object; var Rows = document.getElementsByTagName( "tr" );

for ( var i = 0; i < Rows.length; i++ ) { if ( hasClass( Rows[i], "row-collapsebutton" ) ) {

/* only add button and increment count if there is a header row to work with */ var Collbutton = Rows[i]; var Header = Collbutton.getElementsByTagName( "th" )[0]; if (!Header) continue;

Collbuttons[ rowIndex ] = Collbutton; /* get accompanying row to be collapsed */ for (i < Rows.length ; i++ ) { if ( hasClass( Rows[i], "row-collapsible" ) ) { var Collrow = Rows[i]; break; }           }            if (!Collrow) break; Collrows[ rowIndex ] = Collrow; Collrow.setAttribute( "id", "id-row-collapsible" + rowIndex );

/* create hide/show button */ var Button    = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption );

Button.className = "collapseButton"; //Styles are declared in Common.css

ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( "id", "id-row-collapsebutton" + rowIndex ); ButtonLink.setAttribute( "href", "#" ); addHandler( ButtonLink, "click", new Function( "evt", "collapseRow(" + rowIndex + " ); return killEvt( evt );") ); ButtonLink.appendChild( ButtonText );

Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) );

Header.insertBefore( Button, Header.childNodes[0] ); rowIndex++; }   }

for ( var i = 0; i < rowIndex; i++ ) { if ( hasClass( Collrows[i], "collapsed" ) ) { collapseRow( i ); }   } }

addOnloadHook( createCollapseButtons );