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

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

// 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. Optimized for mediaWiki
// License: CC-BY, http://creativecommons.org/licenses/by/3.0/de/
// Version: 1.0.b-0001
try {
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;
}
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();
}

function initHelpBar(event) 
{
	var tables = document.getElementsByTagName('table');
	for(var i = 0; i < tables.length; ++i) {
		if(hasClass(tables[i], 'HelpBar'))
			Bar = new HelpBar;					
	}
	
}
initHelpBar();

} catch (Error) {
	// alert(Error);
}