< User:Sledged
User:Sledged/sledged.js
var gTableMap; var gaCollapseCaption = "hide"; var gExpandCaption = "show";
if ( !Array.prototype.indexOf ) {
Array.prototype.indexOf = function( elt /*, from*/ )
{
var len = this.length;
var from = Number( arguments[1] ) || 0;
from = from < 0 ? Math.ceil( from ) : Math.floor( from );
if ( from < 0 ) from += len;
for ( ; from < len; from++ ) { if ( from in this && this[from] === elt )
return from; }
return -1; };
}
function Map() {
// private members var mKeyArray = new Array(); // Keys var mValueArray = new Array(); // Values
// methods this.clear = function() { mKeyArray.length = 0; mValueArray.length = 0; };
this.containsKey = function( key )
{
return mKeyArray.indexOf( key ) == -1 ? false : true;
};
this.containsValue = function( value )
{
return mValueArray.indexOf( value ) == -1 ? false : true;
};
this.entrySet = function() { set = new Array();
for ( i = 0; i < mKeyArray.length; i++ ) { entry = new Object(); entry.key = mKeyArray[i]; entry.value = valArray[i]; set.push( entry ); }
return set; };
this.get = function( key ) { var index = mKeyArray.indexOf( key );
return index == -1 ? null : mValueArray[index];
};
this.isEmpty = function()
{
return mKeyArray.length == 0 ? true : false;
}
this.keySet = function() { // return a copy of the key set array return mKeyArray.slice(0); };
this.put = function( key, val ) { var index = mKeyArray.indexOf( key );
if ( index == -1 ) { mKeyArray.push( key ); mValueArray.push( val ); return null; }
var old = mValueArray[index]; mValueArray[index] = val;
return old; };
this.putAll = function( map ) { if ( !Map.prototype.isPrototypeOf( map ) ) throw new TypeError( "Argument is not of class 'Map'." );
var keys = map.keySet();
for ( i = 0; i < keys.length; i++ ) { key = keys[i]; this.put( key, map.get( key ) ); } };
this.remove = function( key ) { var index = mKeyArray.indexOf( key );
if ( index == -1 ) return null;
var old = mValueArray[index]; mKeyArray = mKeyArray.splice( index, 1 ); mValueArray = mValueArray.splice( index, 1 ); return old; };
this.size = function() { return mKeyArray.length; };
this.toString = function() { var result = "{";
for( var i = 0; i < mKeyArray.length; i++ ) { if ( i != 0 ) result += ", ";
result += mKeyArray[i].valueOf() + "=" + mValueArray[i].valueOf(); }
result = "}";
return result; }; // returns a string with all keys and values in map.
this.values = function() { // return a copy of the value set array return mValueArray.slice(0); };
}
function aCollapsibleTable( table, span ) {
this.domTable = table; this.domTextSpan = span; this.rowDisplayMap = new Map(); this.acollapsed = false;
}
aCollapsibleTable.prototype.COLLAPSE_TEXT = "hide"; aCollapsibleTable.prototype.EXPAND_TEXT = "show";
function initaCollapsibleTables() {
// get all the table elements var tables = document.getElementsByTagName( "table" ); gTableMap = new Map();
// sort out the table elements with the class name "acollapsible" for ( i = 0; i < tables.length; i++ ) { var table = tables[i];
// multiple class names are separated by white space var classes = table.className.split( /\s+/ );
// "acollapsible"? Are you there? if ( classes.indexOf( "acollapsible" ) != -1 ) { // create a collapse button for each // get the existing caption element or create a new one var caption = table.createCaption(); // create span element... var spanButton = document.createElement( "span" ); // create span element... var spanText = document.createElement( "span" ); // ... of the class showHideButton spanButton.className = "showHideButton"; // create onclick attribute with a value of // "tableaCollapseExpand(this);" spanButton.setAttribute( "onclick", "tableaCollapseExpand(this);" ); // create text node with a value of "hide" var text = document.createTextNode( gaCollapseCaption ); // nest the text in the span tag spanText.appendChild( text ); spanButton.appendChild( document.createTextNode( "[" ) ); spanButton.appendChild( spanText ); spanButton.appendChild( document.createTextNode( "]" ) ); // append span element to caption element caption.insertBefore( spanButton, caption.firstChild ); // map the span element to the table gTableMap.put( spanButton, new aCollapsibleTable( table, spanText ) );
// see if it should initially start collapsed if ( classes.indexOf( "hidden" ) != -1 || classes.indexOf( "acollapsed" ) != -1 ) { tableaCollapseExpand( spanButton ); } } }
}
/*
What |
---|
I feel happy! |
What |
---|
I feel happy! |
What |
---|
I feel happy! |
What |
---|
I feel happy! |
- /
function tableaCollapseExpand( elem ) {
// get the table mapped to this HTML element var table = gTableMap.get( elem ); var domTable = table.domTable;
if ( table.acollapsed ) { for ( var i = 0; i < domTable.rows.length; i++ ) { var row = domTable.rows[i];
// if the display value was changed while // it was hidden, preserve tbe new value if ( row.style.display == "none" ) row.style.display = table.rowDisplayMap.get( row ); }
table.acollapsed = false; table.domTextSpan.firstChild.data = table.COLLAPSE_TEXT; return; }
for ( var i = 0; i < domTable.rows.length; i++ ) { var row = domTable.rows[i]; table.rowDisplayMap.put( row, row.style.display ); row.style.display = "none"; }
table.acollapsed = true; table.domTextSpan.firstChild.data = table.EXPAND_TEXT;
}
addOnloadHook( initaCollapsibleTables );
This article is issued from Dandwiki. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.