MediaWiki:Common.js

Aus Perrypedia
Zur Navigation springen Zur Suche springen

Anmerkung: Nach dem Speichern muss der Browser-Cache geleert werden, damit die Änderungen sichtbar werden: Mozilla/Firefox: neu laden anklicken (oder Strg-R), IE / Opera: Strg-F5, Safari: Kommando-R, Konqueror Strg-R.

/* Jedes JavaScript hier wird für alle Benutzer (auch nicht angemeldete) für jede Seite geladen. */

/**
 ** Namensräume für die Seitenvorschau
 **/
mw.config.set('wgContentNamespaces', [0, 100]);

/**
 ** Toolbox erweitern
 **/
$( function() {
    // Sidebar ändern
    function ModifySidebar( action, section, name, link ) {
        try {
            switch ( section ) {
                case 'languages':
                    var target = 'p-lang';
                    break;
                case 'toolbox':
                    var target = 'p-tb';
                    break;
                case 'navigation':
                    var target = 'p-navigation';
                    break;
                default:
                    var target = 'p-' + section;
                    break;
            }

            if ( action == 'add' ) {
                var node = document.getElementById( target )
                                   .getElementsByTagName( 'div' )[0]
                                   .getElementsByTagName( 'ul' )[0];
                var aNode = document.createElement( 'a' );
                var liNode = document.createElement( 'li' );
                aNode.appendChild( document.createTextNode( name ) );
                aNode.setAttribute( 'href', link );
                liNode.appendChild( aNode );
                liNode.className = 'plainlinks';
                node.appendChild( liNode );
            }

            else if ( action == 'remove' ) {
                var list = document.getElementById( target )
                                   .getElementsByTagName( 'div' )[0]
                                   .getElementsByTagName( 'ul' )[0];
                var listelements = list.getElementsByTagName( 'li' );
                for ( var i = 0; i < listelements.length; i++ ) {
                    if ( listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
                         listelements[i].getElementsByTagName( 'a' )[0].href == link
                    )
                    {
                        list.removeChild( listelements[i] );
                    }
                }
            }

        } catch( e ) {
            // let's just ignore what's happened
            return;
        }
    } ;

    function CustomizeSidebar() {
        // Kategoriebaum hinzufügen
        ModifySidebar( 'add', 'toolbox', 'Kategoriebaum',
                       'https://www.perrypedia.de/wiki/Spezial:CategoryTree' );
        // Semantische Suche hinzufügen (ersatzweise für Extension:MultiCategorySearch, die in MW 1.35 nicht läuft)
        ModifySidebar( 'add', 'toolbox', 'Semantische Suche',
                       'https://www.perrypedia.de/wiki/Spezial:Semantische_Suche' );
    } ;

    jQuery( CustomizeSidebar );
}) ;


/**
 ** Dynamic Navigation Bars
 **/

// set up the words in your language
var NavigationBarHide = 'Einklappen';
var NavigationBarShow = 'Ausklappen';

// adds show/hide-button to navigation bars
$( function() {
    // 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 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 ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
                if (NavChild.className == 'NavContent') {
                    NavChild.style.display = 'none';
                }
                else if (NavChild.className == 'NavToggle') {
                    NavChild.firstChild.data = NavigationBarShow;
                }
            }

        // if hidden now
        } else if (NavToggle.firstChild.data == NavigationBarShow) {
            for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
                if (NavChild.className == 'NavContent') {
                    NavChild.style.display = 'block';
                }
                else if (NavChild.className == 'NavToggle') {
                    NavChild.firstChild.data = NavigationBarHide;
                }
            }
        }
    }

    function toggleNavigationBarFunction( indexNavigationBar ) {
        return function() {
            toggleNavigationBar( indexNavigationBar );
            return false;
        };
    }
        
    // iterate over all <div>-elements
    var indexNavigationBar = 0;
    var divs = document.getElementsByTagName( "div" );
    for ( var i = 0; i < divs.length; i++ ) {
        var NavFrame = divs[i];

        // if found a navigation bar
        if ( NavFrame.className == "NavFrame" ) {

            indexNavigationBar++;
            var NavToggle = document.createElement( "a" );
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
            NavToggle.setAttribute( 'href', '#' );
            NavToggle.onclick = toggleNavigationBarFunction( indexNavigationBar );

            // add NavToggle-Button as first div-element in <div class="NavFrame">
            var NavToggleText = document.createTextNode( NavigationBarHide );
            NavToggle.appendChild( NavToggleText );
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
            NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
        }
    }

    // Normalansicht: alle zu, Vorschau: alle auf
    for ( var i = 1; i <= indexNavigationBar; i++ ) {
        toggleNavigationBar( i );
    }
}) ;


/**
 * Tabellensortierung merken
 *
 * based on: http://meta.wikimedia.org/wiki/Help:Sorting#Persistent_sort_states_using_cookies
 */
/*** addOnloadHook( function() {
    jQuery('.sortable').each( function() {
        var id = jQuery(this).attr('id');
        if ( id != undefined )
        {
            // Versuche, passenden Cookie zu lesen
            document.shCookie = jQuery.cookie('sortheader-'+id);

            // Falls kein Cookie gefunden wurde: Gehe alle Spalten durch und schau, ob Standard-Sortierung
            // durch class="ppSortAsc" bzw. class="ppSortDesc" im Spaltenkopf gesetzt.
            // Da nur eine Spalte möglich ist: Falls versehentlich/fehlerhaft mehrere Spalten markiert wurden, 
            // zählt die erste in der Tabelle gefundene.
            if ( document.shCookie == undefined ) {
                document.sortheaderId = 0;
                jQuery('#'+id+' th').each( function() {
                    var sh = document.sortheaderId++;
                    if(jQuery(this).hasClass('ppSortAsc')) {
                        document.shCookie = sh;
                        return false;                // beendet Schleife über Spalten => erstes zählt ("false" notwendig für jQuery-each)
                    } else if(jQuery(this).hasClass('ppSortDesc')) {
                        document.shCookie = sh+100;
                        return false;                // beendet Schleife über Spalten => erstes zählt
                    }
                });
            }

            // Gehe alle Spalten durch und führe auf die zu sortierende Spalte
            // entweder zwei Klicks aus (aufsteigend) oder einen Klick (absteigend)
            document.sortheaderId = 0;
            jQuery('#'+id+' th').each( function() {
                var sh = document.sortheaderId++;
                if( sh+100 == document.shCookie ) { 
                    jQuery(this).click();
                    jQuery(this).click();
                } else if( sh == document.shCookie ) { 
                    jQuery(this).click();
                    sh += 100; 
                }

                // Zukünftige "clicks" werden in einem Cookie gespeichert.
                jQuery(this).bind('click', {id: id, sh: sh}, function(e) {
                    jQuery.cookie('sortheader-'+e.data.id, e.data.sh, { expires: 9999 } );
                    e.data.sh += e.data.sh < 100 ? 100 : -100;
                });
            });
        }
    });
});
***/