MediaWiki:Common.js: Unterschied zwischen den Versionen
Änderung 112454 von Till Kraemer (Diskussion) rückgängig gemacht. |
Keine Bearbeitungszusammenfassung |
||
Zeile 55: | Zeile 55: | ||
/* End of extra pages */ | /* End of extra pages */ | ||
/** Collapsible tables | /** | ||
* Collapsible tables | |||
* | * | ||
* | * Allows tables to be collapsed, showing only the header. See [[Wikipedia:NavFrame]]. | ||
* @maintainer [[User:R. Koot]] (on Wikipedia) | |||
* | |||
*/ | */ | ||
var autoCollapse = 2; | var autoCollapse = 2; | ||
var collapseCaption = 'Verbergen'; | var collapseCaption = 'Verbergen'; | ||
var expandCaption = 'Anzeigen'; | var expandCaption = 'Anzeigen'; | ||
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 ) { | function collapseTable( tableIndex ) { | ||
var i; | |||
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 ( i = 1; i < Rows.length; i++ ) { | |||
Rows[i].style.display = 'none'; | |||
} | |||
Button.firstChild.data = expandCaption; | |||
} else { | |||
for ( i = 1; i < Rows.length; i++ ) { | |||
Rows[i].style.display = Rows[0].style.display; | |||
} | |||
Button.firstChild.data = collapseCaption; | |||
} | |||
} | } | ||
function createCollapseButtons() { | function createCollapseButtons() { | ||
var i; | |||
var tableIndex = 0; | |||
var NavigationBoxes = {}; | |||
var Tables = document.getElementsByTagName( 'table' ); | |||
for ( 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 ( i = 0; i < tableIndex; i++ ) { | |||
if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) { | |||
collapseTable( i ); | |||
} | |||
} | |||
} | } | ||
$( createCollapseButtons ); | |||
/** | /** | ||
* Dynamic Navigation Bars (experimental) | * Dynamic Navigation Bars (experimental) | ||
* | * | ||
* | * See [[Wikipedia:NavFrame]]. | ||
*/ | */ | ||
/ | // set up the words in your language | ||
var NavigationBarHide = '[' + collapseCaption + ']'; | var NavigationBarHide = '[' + collapseCaption + ']'; | ||
var NavigationBarShow = '[' + expandCaption + ']'; | var NavigationBarShow = '[' + expandCaption + ']'; | ||
/ | // shows and hides content and picture (if available) of navigation bars | ||
// Parameters: | |||
// indexNavigationBar: the index of navigation bar to be toggled | |||
function toggleNavigationBar(indexNavigationBar) { | |||
var NavChild; | |||
var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar); | |||
var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar); | |||
if (!NavFrame || !NavToggle) { | |||
return false; | |||
} | |||
// if shown now | |||
if (NavToggle.firstChild.data == NavigationBarHide) { | |||
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |||
if ( hasClass( NavChild, 'NavPic' ) ) { | |||
NavChild.style.display = 'none'; | |||
} | |||
if ( hasClass( NavChild, 'NavContent') ) { | |||
NavChild.style.display = 'none'; | |||
} | |||
} | |||
NavToggle.firstChild.data = NavigationBarShow; | |||
// if hidden now | |||
} else if (NavToggle.firstChild.data == NavigationBarShow) { | |||
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |||
if (hasClass(NavChild, 'NavPic')) { | |||
NavChild.style.display = 'block'; | |||
} | |||
if (hasClass(NavChild, 'NavContent')) { | |||
NavChild.style.display = 'block'; | |||
} | |||
} | |||
} | NavToggle.firstChild.data = NavigationBarHide; | ||
} | |||
/ | } | ||
function createNavigationBarToggleButton() { | |||
// adds show/hide-button to navigation bars | |||
function createNavigationBarToggleButton(){ | |||
var indexNavigationBar = 0; | |||
// iterate over all < div >-elements | |||
var divs = document.getElementsByTagName( 'div' ); | |||
for (var i = 0; NavFrame = divs[i]; i++) { | |||
// if found a navigation bar | |||
if ( hasClass(NavFrame, 'NavFrame' )) { | |||
indexNavigationBar++; | |||
var NavToggle = document.createElement('a'); | |||
NavToggle.className = 'NavToggle'; | |||
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); | |||
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); | |||
var NavToggleText = document.createTextNode(NavigationBarHide); | |||
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |||
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) { | |||
if (NavChild.style.display == 'none') { | |||
NavToggleText = document.createTextNode(NavigationBarShow); | |||
break; | |||
} | |||
} | |||
} | |||
NavToggle.appendChild(NavToggleText); | |||
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) | |||
for(var j=0; j < NavFrame.childNodes.length; j++) { | |||
if (hasClass(NavFrame.childNodes[j], 'NavHead')) { | |||
NavFrame.childNodes[j].appendChild(NavToggle); | |||
} | |||
} | |||
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); | |||
} | |||
} | |||
} | } | ||
$( createNavigationBarToggleButton ); |