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 );