Benutzer:TMg/showInfoboxToggle.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/**
 * Erlaubt das Ein- und Ausklappen von Taxo- und Infoboxen, ähnlich wie beim
 * Inhaltsverzeichnis oder den Navigationsleisten. Eine ausführliche
 * Beschreibung ist auf der Diskussionsseite zu finden.
 */
function toggleInfobox( a ) {
	/* Koordinatenvorlage vor dem Ausblenden retten */
	var c = document.getElementById( 'coordinates' );
	if ( c ) {
		document.getElementById( 'bodyContent' ).appendChild( c );
	}

	var r = a;
	while ( r && r.nodeName !== 'TR' ) {
		r = r.parentNode;
	}
	if ( !r ) {
		r = a;
		while ( r && r.nodeName !== 'DIV' ) {
			r = r.parentNode;
		}
	}
	if ( !r ) {
		return false;
	}

	while ( r = r.nextSibling ) {
		if ( r.nodeType === 1 && r.style ) {
			r.style.display = r.style.display === 'none' ? '' : 'none';
		}
	}

	var sHide = window.NavigationBarHide ? NavigationBarHide : 'Einklappen';
	var sShow = window.NavigationBarShow ? NavigationBarShow : 'Ausklappen';
	a.firstChild.data = a.firstChild.data === sShow ? sHide : sShow;

	return false;
}

( function() {
	if ( !document.createTextNode ) {
		return;
	}

	var headers,
		i = 0;

	/* HTML 5, supported since Opera 9.5 */
	if ( document.getElementsByClassName ) {
		headers = document.getElementById( 'bodyContent' ).getElementsByClassName( 'collapsible' );
	} else {
		headers = document.getElementById( 'bodyContent' );
		headers = headers.all ? headers.all : headers.getElementsByTagName( '*' );
		var regex = /(?:^|\s)collapsible(?:\s|$)/;
		for ( i = 0; i < headers.length; i++ ) {
			if ( regex.test( headers[i].className ) ) {
				break;
			}
		}
	}

	if ( headers && headers.length > 0 && i < headers.length ) {
		/* Die Standardhierarchie ist TABLE → TBODY → TR → TD/TH */
		if ( headers[i].nodeName === 'TABLE' ) {
			headers = headers[i].getElementsByTagName( 'TR' );
			i = 0;
		}
		if ( headers[i].nodeName === 'TR' ) {
			headers = headers[i].childNodes;
			/* Leere Textknoten zwischen den Zellen auslassen */
			for ( i = headers.length - 1; i >= 0; i-- ) {
				if ( headers[i].nodeType === 1 ) {
					break;
				}
			}
		}
	} else {
		headers = document.getElementsByTagName( 'TH' );
		for ( i = 0; i < headers.length; i++ ) {
			var h = headers[i];
			/* Sucht nach dem ersten Textknoten innerhalb der Tabellenzelle */
			while ( h.nodeType === 1 && h.firstChild ) {
				h = h.firstChild;
			}
			if ( h.data
				&& /^(?:[a-z]*daten|Allgemein(?:es)?|Physikalische Eigenschaften|Systematik)\b/i.test( h.data )
			) {
				break;
			}
		}
	}
	if ( i >= headers.length ) {
		return;
	}

	var eSpan = document.createElement( 'SPAN' );
	eSpan.style.fontSize = 'x-small';
	eSpan.style.fontWeight = 'normal';
	var toggle = document.createElement( 'A' );
	toggle.href = '#';
	toggle.onclick = function() {
		return toggleInfobox( this );
	};
	/* Bei hell auf dunkel umgefärbten Kopfzellen (z.B. Autobahnen) die Textfarbe übernehmen */
	if ( headers[i].style.color && headers[i].style.color !== '#000000' ) {
		toggle.style.color = headers[i].style.color;
	}
	toggle.appendChild( document.createTextNode( window.NavigationBarHide
		? NavigationBarHide
		: 'Einklappen' ) );
	eSpan.appendChild( document.createTextNode( '[' ) );
	eSpan.appendChild( toggle );
	eSpan.appendChild( document.createTextNode( ']' ) );
	headers[i].appendChild( document.createTextNode( ' ' ) );
	headers[i].appendChild( eSpan );

	if ( window.NavigationBarShowDefault <= 0 ) {
		toggleInfobox( toggle );
	}
} )();