MediaWiki:Common.js | ElderScrollsPortal.de

Hinweis: Nach dem Speichern muss der Browserchache geleert werden, um die Änderungen zu sehen:
Mozilla/Firefox: Strg-Shift-R, Internet Explorer: Strg-F5, Opera: F5, Safari: Cmd-Shift-R, Konqueror: F5.

/* Das folgende JavaScript wird für alle Benutzer geladen. */

/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 *  Maintainers: [[en:User:R. Koot]]
 */
 
var autoCollapse = 2;
var collapseCaption = 'Verstecken';
var expandCaption = 'Anzeigen';
 
function collapseTable( tableIndex ) {
        var Button = document.getElementById( 'collapseButton' + tableIndex );
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
        if ( !Table || !Button ) {
                return false;
        }
 
        var Rows = Table.rows;
 
        if ( Button.firstChild.data == collapseCaption ) {
                for ( var i = 1; i < Rows.length; i++ ) {
                        Rows[i].style.display = 'none';
                }
                Button.firstChild.data = expandCaption;
        } else {
                for ( var i = 1; i < Rows.length; i++ ) {
                        Rows[i].style.display = Rows[0].style.display;
                }
                Button.firstChild.data = collapseCaption;
        }
}
 
function createCollapseButtons() {
        var tableIndex = 0;
        var NavigationBoxes = new Object();
        var Tables = document.getElementsByTagName( 'table' );
 
        for ( var i = 0; i < Tables.length; i++ ) {
                if ( hasClass( Tables[i], 'collapsible' ) ) {
 
                        /* only add button and increment count if there is a header row to work with */
                        var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
                        if ( !HeaderRow ) {
                                continue;
                        }
                        var Header = HeaderRow.getElementsByTagName( 'th' )[0];
                        if ( !Header ) {
                                continue;
                        }
 
                        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.className = 'collapseButton'; // Styles are declared in [[MediaWiki:Common.css]]
 
                        ButtonLink.style.color = Header.style.color;
                        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( ']' ) );
 
                        Header.insertBefore( Button, Header.childNodes[0] );
                        tableIndex++;
                }
        }
 
        for ( var i = 0;  i < tableIndex; i++ ) {
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
                        collapseTable( i );
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {
                        var element = NavigationBoxes[i];
                        while ( element = element.parentNode ) {
                                if ( hasClass( element, 'outercollapse' ) ) {
                                        collapseTable( i );
                                        break;
                                }
                        }
                }
        }
}
 
addOnloadHook( createCollapseButtons );
 
/** Test if an element has a certain class **************************************
 *
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 */
 
var hasClass = ( function() {
        var reCache = {};
        return function( element, className ) {
                return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( "(?:\\s|^)" + className + "(?:\\s|$)" ) ) ).test( element.className );
        };
})();


	// Copyright (c) 2012 All Right Reserved, http://scharesoft.de
	//
	// All other rights reserved.
	//
	// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY 
	// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
	// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
	// PARTICULAR PURPOSE.
	//
	// Author: Johannes Schmidt (Death-Lord)
	// Email: johannes.schmidt95@gmx.de
	// Date: 2012-05-29
	// Summary: Displays the first bar of a table. To let it work, a table have to have the class helpbar.
	// License: CC-BY, http://creativecommons.org/licenses/by/3.0/de/
	// Version: 1.0.b-0001
	try {
	function HelpBar() 
	{
		// Display Errors, will set if user Errors will be triggered and displayed or not.
		this.DisplayErrors = true;	
		
		this.VirtualFirstRow = new Array();
		
		
		// bool HelpBar::checker(void)
		// Checks if help bar needed and display it.
		this.checker = function()
		{
			try {
				
				this.CountHelpBars = document.getElementsByClassName('HelpBar').length;
				// Check for all if have to display.
				for(i = 0; i < this.CountHelpBars; ++i) {
					document.getElementsByClassName('HelpBar')[i].setAttribute('style', 'margin-top: '+document.getElementsByClassName('HelpBar')[i].rows[0].offsetHeight+'px;');
					var TableOffsetTop = getOffsetTop(document.getElementsByClassName('HelpBar')[i]) - document.getElementsByClassName('HelpBar')[i].rows[0].offsetHeight;				
					
					// Check if above view
					if(TableOffsetTop < window.pageYOffset) {				
						// Now check if overscrolled.
						var TablePosition = TableOffsetTop + document.getElementsByClassName('HelpBar')[i].offsetHeight;					
						
						// if not proceed.
						if(TablePosition > window.pageYOffset) {										
							document.getElementsByClassName('HelpBar')[i].rows[0].setAttribute('style', 'margin-left: '+document.getElementsByClassName('HelpBar')[i].rows[0].getAttribute('margin-left')+'px;z-index: 2100;position: fixed; top: 0px;');
							var difference1 = TablePosition - window.pageYOffset;
							var difference2 = TableOffsetTop - window.pageYOffset;
							if(difference1 < 400 || difference2 > - 400) {							
								setTimeout('Bar.checker()', 10);		
							} else 
								setTimeout('Bar.checker()', 100);		
							return true;
						}
					} 
					
					var Top = document.getElementsByClassName('HelpBar')[i].offsetTop - document.getElementsByClassName('HelpBar')[i].rows[0].offsetHeight + 8;
					document.getElementsByClassName('HelpBar')[i].rows[0].setAttribute('style', 'margin-left: '+document.getElementsByClassName('HelpBar')[i].rows[0].getAttribute('margin-left')+'px;z-index: 2100;position: absolute; top: '+Top+'px;');
				}
				setTimeout('Bar.checker()', 10);		
				return false;
			} catch (Error) {			
				setTimeout('Bar.checker()', 1000);
				return false;
			}
		}
		
		/////////////////
		// Constructor //
		/////////////////
		
		this.browserSize = 0;
		this.construct = function() 
		{
			if (this.browserSize != window.innerWidth) {
				this.tables = new Array();
				// Check if the element is a table
				this.CountHelpBars = document.getElementsByClassName('HelpBar').length;
				for(i = 0; i < this.CountHelpBars; ++i) {
					// Check if table.
					if(document.getElementsByClassName('HelpBar')[i].tagName != 'TABLE') {
						if (this.DisplayErrors)
							alert('Die Klasse HelpBar wurde einem Element zugeordnet, welches keine Tabelle ist');
						break;			
						return false;
					}
					
					//////////////////////////////////
					// Set the widths of the fields.//
					//////////////////////////////////
					
					// First count cells of the first row.
					var CountRows = document.getElementsByClassName('HelpBar')[i].rows.length;		
					this.VirtualFirstRow[i] = new Object();				
					var firstRowCountCells = document.getElementsByClassName('HelpBar')[0].rows[0].cells.length;		
					var Top = document.getElementsByClassName('HelpBar')[i].offsetTop - document.getElementsByClassName('HelpBar')[i].rows[0].offsetHeight + 2;
					document.getElementsByClassName('HelpBar')[i].rows[0].setAttribute('style', 'z-index: 2100;position: absolute; top: ' + Top + 'px;');
					
					var NewHeight = document.getElementsByClassName('HelpBar')[i].rows[0].cells[0].offsetHeight - 2;
					var OK = 0;
					var l = 0;
				
					// For every Cell of the first row.
					for(j = 1; OK != 1; ++j) {
						
						// Count rows.			
						var CountCells = document.getElementsByClassName('HelpBar')[i].rows[j].cells.length;				
						if(CountCells === firstRowCountCells) {						
							++OK;
								
							// For every Cell of the first row.
							for(k = 0; k < CountCells; ++k) {
								// Get the current Width plus margin
								var Tolerance = 5;
								var NewWidth = document.getElementsByClassName('HelpBar')[i].rows[j].cells[k].offsetWidth - 10;
								while((Tolerance >= 1)) {
									NewWidth += 0.5;
									document.getElementsByClassName('HelpBar')[i].rows[0].cells[k].setAttribute('style', 'min-height: '+NewHeight+'px;height: '+NewHeight+'px;max-width: '+NewWidth+'px;width: '+NewWidth+'px;min-width: '+NewWidth+'px;');									
									var Tolerance = document.getElementsByClassName('HelpBar')[i].rows[j].cells[k].offsetWidth - document.getElementsByClassName('HelpBar')[i].rows[0].cells[k].offsetWidth;								
								}
							}
						}
						if(j >= 10) {
							if (this.DisplayErrors)
								alert('Die ersten zehn Zeilen der Tabelle haben weniger bzw. mehr Spalten als die erste Zeile');
							return false;
							break;				
						}
						
					}
					
					var margin = getOffsetLeft(document.getElementsByClassName('HelpBar')[i]) - getOffsetLeft(document.getElementsByClassName('HelpBar')[i].rows[0]);				
					document.getElementsByClassName('HelpBar')[i].rows[0].setAttribute('style', 'z-index: 2100;position: absolute; margin-left: ' + margin + 'px;top: ' + Top + 'px;');								
					
					var Margin = getOffsetLeft(document.getElementsByClassName('HelpBar')[i]) - getOffsetLeft(document.getElementsByClassName('HelpBar')[i].rows[0])  + parseInt(margin);				
					
					document.getElementsByClassName('HelpBar')[i].rows[0].setAttribute('style', 'z-index: 2100;position: absolute; margin-left: ' + Margin + 'px;top: ' + Top + 'px;');
					document.getElementsByClassName('HelpBar')[i].rows[0].setAttribute('margin-left', Margin);
				}			
			}
			this.browserSize = window.innerWidth;
			setTimeout('Bar.construct()', 1000);
			
		}
		this.construct();
		
		
		// Start the Checker Method
		this.checker();
	}
	// Check if is the class HelpBar set
	if(typeof document.getElementsByClassName('HelpBar')[0] != "undefined") {			
		// and the Table isnt bigger than the Content area	
		// Set Bar 
		var Bar = new HelpBar;			
		
	} 
		
	} catch (Error) {
		alert('Fehler:\n'+Error);
	}
	function getOffsetTop (Element){
		var top = 0;
	 
		if(!Element) 
			return false;     
		if(typeof Element != 'object' ) 
			return false;

		if(typeof Element.offsetTop != 'undefined')    {         
			 while (Element && Element.tagName != 'BODY')         {
				top  += parseInt( Element.offsetTop );
				Element = Element.offsetParent;
			 } 
		}
		return top;
	}
	function getOffsetLeft (Element){
		var top = 0;
	 
		if(!Element) 
			return false;
		if(typeof Element != 'object' ) 
			return false;

		if(typeof Element.offsetTop != 'undefined')    {         
			 while (Element && Element.tagName != 'BODY')         {
				top  += parseInt( Element.offsetLeft );
				Element = Element.offsetParent;
			 } 
		}
		return top;
	}