Zum Inhalt springen

MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Informatik.wiki
Sprachumschalter rechts vom Seitentitel positionieren
Globalen DE/EN-Schalter dynamisch auf vorhandene /en-Seiten umstellen
Zeile 1: Zeile 1:
/* BEGIN INFORMATIK.WIKI DGB1 LANGSWITCH */
/* BEGIN INFORMATIK.WIKI GLOBAL LANGSWITCH */
mw.loader.using( 'mediawiki.util' ).then( function () {
 
    /* Alten zweiten Sprachumschalter dauerhaft ausblenden */
mw.loader.using( [ 'mediawiki.util', 'mediawiki.api' ] ).then( function () {
    mw.util.addCSS( '#iw-lang-switch-header { display: none !important; }' );
 
     $( function () {
     $( function () {
         var ns = mw.config.get( 'wgNamespaceNumber' );
         var ns = mw.config.get( 'wgNamespaceNumber' );
         if ( ns < 0 ) {
         if ( ns < 0 ) {
             return;
             return;
Zeile 12: Zeile 14:
         var isEnglish = /\/en$/.test( pageName );
         var isEnglish = /\/en$/.test( pageName );
         var baseTitle = pageName.replace( /\/en$/, '' );
         var baseTitle = pageName.replace( /\/en$/, '' );
        var englishTitle = baseTitle + '/en';


         var translatedTitles = [
         function renderSwitch( hasEnglishPage ) {
            'DGB 1. Klasse',
            'DGB 1: EVA-Prinzip',
            'DGB 1: Analog vs. Digital',
            'DGB 1: Persönliches Nutzungsverhalten',
            'DGB 1: Suchmaschinen',
            'DGB 1: Personalisierte Suchroutinen',
            'DGB 1: Internetrecherche',
            'DGB 1: Daten speichern verwalten verändern',
            'DGB 1: Personenbezogene Informationen',
            'DGB 1: Digitale Zusammenarbeit',
            'DGB 1: Kommunikations- und Kollaborationswerkzeuge',
            'DGB 1: Algorithmen',
            'DGB 1: Darstellungsformen und Wirkung',
            'DGB 1: Daten rechnen sammeln präsentieren',
            'DGB 1: Texte und Präsentationen',
            'DGB 1: Hardware',
            'DGB 1: Medienwandel',
            'DGB 1: Hilfesysteme'
        ];


        var hasEnglishPage = translatedTitles.indexOf( baseTitle ) !== -1;
            var old = document.getElementById( 'iw-lang-switch' );


        var old = document.getElementById( 'iw-lang-switch' );
            if ( old ) {
        if ( old ) {
                old.remove();
            old.remove();
            }
        }
 
            var box = document.createElement( 'div' );
 
            box.id = 'iw-lang-switch';
            box.setAttribute( 'aria-label', 'Sprache / Language' );
 
            function addLanguage( code, label, href, active, enabled ) {
 
                var el;
 
                if ( enabled && !active ) {
                    el = document.createElement( 'a' );
                    el.href = href;
                } else {
                    el = document.createElement( 'span' );
                }
 
                el.textContent = label;
                el.lang = code;


        var box = document.createElement( 'div' );
                if ( active ) {
        box.id = 'iw-lang-switch';
                    el.classList.add( 'iw-lang-active' );
        box.setAttribute( 'aria-label', 'Language / Sprache' );
                    el.setAttribute( 'aria-current', 'page' );
                }


        function addLanguage( code, label, href, active, enabled ) {
                if ( !enabled ) {
            var el;
                    el.classList.add( 'iw-lang-unavailable' );
                    el.title = code === 'en'
                        ? 'English page not available yet'
                        : 'Deutsche Seite nicht verfügbar';
                }


            if ( enabled ) {
                 box.appendChild( el );
                 el = document.createElement( 'a' );
                el.href = href;
            } else {
                el = document.createElement( 'span' );
                el.className = 'iw-lang-unavailable';
                el.title = code === 'en'
                    ? 'English page not available yet'
                    : 'Deutsche Seite nicht verfügbar';
             }
             }


             el.textContent = label;
             addLanguage(
             el.lang = code;
                'de',
                'DE',
                mw.util.getUrl( baseTitle ),
                !isEnglish,
                true
             );


             if ( active ) {
             var separator = document.createElement( 'span' );
                el.classList.add( 'iw-lang-active' );
            separator.className = 'iw-lang-separator';
                 el.setAttribute( 'aria-current', 'page' );
            separator.textContent = '|';
            box.appendChild( separator );
 
            addLanguage(
                'en',
                'EN',
                 mw.util.getUrl( englishTitle ),
                isEnglish,
                hasEnglishPage || isEnglish
            );
 
            var heading = document.getElementById( 'firstHeading' );
 
            if ( heading && heading.parentNode ) {
                heading.parentNode.insertBefore( box, heading );
             }
             }


            box.appendChild( el );
         }
         }


         addLanguage(
         /*
            'de',
        * Auf einer englischen Seite wissen wir bereits,
            'DE',
        * dass die englische Version existiert.
            mw.util.getUrl( baseTitle, { setlang: 'de' } ),
        */
             !isEnglish,
        if ( isEnglish ) {
             true
             renderSwitch( true );
         );
             return;
         }


         var separator = document.createElement( 'span' );
         /*
        separator.className = 'iw-lang-separator';
        * Auf deutschen Seiten automatisch prüfen,
         separator.textContent = '|';
        * ob die entsprechende echte /en-Seite existiert.
        box.appendChild( separator );
        */
         var api = new mw.Api();


         addLanguage(
         api.get( {
            'en',
            action: 'query',
            'EN',
             titles: englishTitle,
            hasEnglishPage
             formatversion: 2
                ? mw.util.getUrl( baseTitle + '/en', { setlang: 'en' } )
         } ).then( function ( data ) {
                : '#',
             isEnglish,
             hasEnglishPage
         );


        var heading = document.getElementById( 'firstHeading' );
            var page = data.query.pages[ 0 ];
            var exists = !Object.prototype.hasOwnProperty.call( page, 'missing' );


        if ( heading && heading.parentNode ) {
             renderSwitch( exists );
             heading.insertAdjacentElement( 'afterend', box );
        }
    } );
} );
/* END INFORMATIK.WIKI DGB1 LANGSWITCH */


/* BEGIN REMOVE DUPLICATE LANGUAGE SWITCH */
        } ).catch( function () {
(function () {
    function removeDuplicateLanguageSwitch() {
        var oldSwitch = document.getElementById('iw-lang-switch-header');
        if (oldSwitch) {
            oldSwitch.remove();
        }
    }


    $(function () {
            /*
        removeDuplicateLanguageSwitch();
            * Bei einem API-Fehler lieber EN deaktivieren,
            * statt auf eine nicht geprüfte Seite zu verlinken.
            */
            renderSwitch( false );


         var heading = document.getElementById('firstHeading');
         } );
        if (!heading || !heading.parentNode) {
            return;
        }


        var observer = new MutationObserver(function () {
    } );
            removeDuplicateLanguageSwitch();
        });


        observer.observe(heading.parentNode, {
} );
            childList: true
        });


        window.setTimeout(removeDuplicateLanguageSwitch, 250);
/* END INFORMATIK.WIKI GLOBAL LANGSWITCH */
        window.setTimeout(removeDuplicateLanguageSwitch, 1000);
    });
}());
/* END REMOVE DUPLICATE LANGUAGE SWITCH */

Version vom 11. September 2026, 17:39 Uhr

/* BEGIN INFORMATIK.WIKI GLOBAL LANGSWITCH */

mw.loader.using( [ 'mediawiki.util', 'mediawiki.api' ] ).then( function () {

    $( function () {

        var ns = mw.config.get( 'wgNamespaceNumber' );

        if ( ns < 0 ) {
            return;
        }

        var pageName = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
        var isEnglish = /\/en$/.test( pageName );
        var baseTitle = pageName.replace( /\/en$/, '' );
        var englishTitle = baseTitle + '/en';

        function renderSwitch( hasEnglishPage ) {

            var old = document.getElementById( 'iw-lang-switch' );

            if ( old ) {
                old.remove();
            }

            var box = document.createElement( 'div' );

            box.id = 'iw-lang-switch';
            box.setAttribute( 'aria-label', 'Sprache / Language' );

            function addLanguage( code, label, href, active, enabled ) {

                var el;

                if ( enabled && !active ) {
                    el = document.createElement( 'a' );
                    el.href = href;
                } else {
                    el = document.createElement( 'span' );
                }

                el.textContent = label;
                el.lang = code;

                if ( active ) {
                    el.classList.add( 'iw-lang-active' );
                    el.setAttribute( 'aria-current', 'page' );
                }

                if ( !enabled ) {
                    el.classList.add( 'iw-lang-unavailable' );
                    el.title = code === 'en'
                        ? 'English page not available yet'
                        : 'Deutsche Seite nicht verfügbar';
                }

                box.appendChild( el );
            }

            addLanguage(
                'de',
                'DE',
                mw.util.getUrl( baseTitle ),
                !isEnglish,
                true
            );

            var separator = document.createElement( 'span' );
            separator.className = 'iw-lang-separator';
            separator.textContent = '|';
            box.appendChild( separator );

            addLanguage(
                'en',
                'EN',
                mw.util.getUrl( englishTitle ),
                isEnglish,
                hasEnglishPage || isEnglish
            );

            var heading = document.getElementById( 'firstHeading' );

            if ( heading && heading.parentNode ) {
                heading.parentNode.insertBefore( box, heading );
            }

        }

        /*
         * Auf einer englischen Seite wissen wir bereits,
         * dass die englische Version existiert.
         */
        if ( isEnglish ) {
            renderSwitch( true );
            return;
        }

        /*
         * Auf deutschen Seiten automatisch prüfen,
         * ob die entsprechende echte /en-Seite existiert.
         */
        var api = new mw.Api();

        api.get( {
            action: 'query',
            titles: englishTitle,
            formatversion: 2
        } ).then( function ( data ) {

            var page = data.query.pages[ 0 ];
            var exists = !Object.prototype.hasOwnProperty.call( page, 'missing' );

            renderSwitch( exists );

        } ).catch( function () {

            /*
             * Bei einem API-Fehler lieber EN deaktivieren,
             * statt auf eine nicht geprüfte Seite zu verlinken.
             */
            renderSwitch( false );

        } );

    } );

} );

/* END INFORMATIK.WIKI GLOBAL LANGSWITCH */