Zum Inhalt springen

MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Informatik.wiki
Add global DE/EN navigation for DGB 1
 
DE/EN-Inhaltssprache dauerhaft speichern und automatisch beibehalten
 
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
/* BEGIN INFORMATIK.WIKI DGB1 LANGSWITCH */
/* BEGIN INFORMATIK.WIKI GLOBAL LANGSWITCH */
mw.loader.using( 'mediawiki.util' ).then( function () {
    var ns = mw.config.get( 'wgNamespaceNumber' );
    if ( ns < 0 ) {
        return;
    }


    var pageName = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
mw.loader.using( [ 'mediawiki.util', 'mediawiki.api' ] ).then( function () {
    var isEnglish = /\/en$/.test( pageName );
    var baseTitle = pageName.replace( /\/en$/, '' );


     var translatedTitles = [
     $( function () {
        '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 ns = mw.config.get( 'wgNamespaceNumber' );
    var box = document.createElement( 'div' );
    box.id = 'iw-lang-switch';
    box.setAttribute( 'aria-label', 'Language / Sprache' );


    function addLanguage( code, label, href, active, enabled ) {
         if ( ns < 0 ) {
        var el;
             return;
         if ( enabled ) {
             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;
 
        el.lang = code;
        var pageName = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
        if ( active ) {
         var isEnglish = /\/en$/.test( pageName );
            el.classList.add( 'iw-lang-active' );
        var baseTitle = pageName.replace( /\/en$/, '' );
            el.setAttribute( 'aria-current', 'page' );
        var englishTitle = baseTitle + '/en';
 
        var storageKey = 'informatikwiki-content-language';
 
        function getPreferredLanguage() {
            try {
                return window.localStorage.getItem( storageKey );
            } catch ( e ) {
                return null;
            }
        }
 
        function setPreferredLanguage( language ) {
            try {
                window.localStorage.setItem( storageKey, language );
            } catch ( e ) {
                // localStorage nicht verfügbar -> Schalter funktioniert
                // trotzdem, nur ohne dauerhafte Speicherung.
            }
        }
 
        function pageExists( title ) {
 
            var api = new mw.Api();
 
            return api.post( {
                action: 'query',
                prop: 'info',
                titles: title,
                formatversion: 2
            } ).then( function ( data ) {
 
                var pages = data &&
                            data.query &&
                            data.query.pages;
 
                var page = null;
 
                if ( Array.isArray( pages ) ) {
                    page = pages[ 0 ];
                } else if ( pages ) {
                    var keys = Object.keys( pages );
 
                    if ( keys.length ) {
                        page = pages[ keys[ 0 ] ];
                    }
                }
 
                return !!(
                    page &&
                    typeof page.pageid === 'number' &&
                    page.pageid > 0 &&
                    page.missing !== true
                );
            } );
        }
 
        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;
 
                    el.addEventListener( 'click', function () {
                        setPreferredLanguage( code );
                    } );
 
                } 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' );
 
                    if ( code === 'en' ) {
                        el.title = 'English page not available yet';
                    }
                }
 
                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 );
            }
         }
         }
        box.appendChild( el );
    }


    addLanguage(
        var preferredLanguage = getPreferredLanguage();
         'de', 'DE',
         var action = mw.config.get( 'wgAction' );
        mw.util.getUrl( baseTitle, { setlang: 'de' } ),
        !isEnglish,
        true
    );


    var separator = document.createElement( 'span' );
        /*
    separator.className = 'iw-lang-separator';
        * Auf englischer Seite:
    separator.textContent = '|';
        * - EN anzeigen
    box.appendChild( separator );
        * - bei gespeicherter Sprache DE zurückwechseln.
        */
        if ( isEnglish ) {


    addLanguage(
            if (
        'en', 'EN',
                preferredLanguage === 'de' &&
        hasEnglishPage ? mw.util.getUrl( baseTitle + '/en', { setlang: 'en' } ) : '#',
                action === 'view'
        isEnglish,
            ) {
        hasEnglishPage
                window.location.replace(
    );
                    mw.util.getUrl( baseTitle )
                );
                return;
            }


    var heading = document.getElementById( 'firstHeading' );
            renderSwitch( true );
    if ( heading && heading.parentNode ) {
             return;
        heading.parentNode.insertBefore( box, heading );
    } else {
        var content = document.getElementById( 'mw-content-text' );
        if ( content ) {
             content.insertBefore( box, content.firstChild );
         }
         }
     }
 
        /*
        * Auf deutscher Seite zuerst prüfen,
        * ob eine /en-Seite existiert.
        */
        pageExists( englishTitle )
            .then( function ( hasEnglishPage ) {
 
                /*
                * EN wurde früher gewählt:
                * automatisch auf die vorhandene
                * englische Seite wechseln.
                */
                if (
                    preferredLanguage === 'en' &&
                    hasEnglishPage &&
                    action === 'view'
                ) {
                    window.location.replace(
                        mw.util.getUrl( englishTitle )
                    );
                    return;
                }
 
                renderSwitch( hasEnglishPage );
 
            } )
            .catch( function ( error ) {
 
                console.error(
                    'informatik.wiki language switch:',
                    englishTitle,
                    error
                );
 
                renderSwitch( false );
            } );
 
     } );
 
} );
} );
/* END INFORMATIK.WIKI DGB1 LANGSWITCH */
 
/* END INFORMATIK.WIKI GLOBAL LANGSWITCH */

Aktuelle Version vom 11. September 2026, 18:19 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';

        var storageKey = 'informatikwiki-content-language';

        function getPreferredLanguage() {
            try {
                return window.localStorage.getItem( storageKey );
            } catch ( e ) {
                return null;
            }
        }

        function setPreferredLanguage( language ) {
            try {
                window.localStorage.setItem( storageKey, language );
            } catch ( e ) {
                // localStorage nicht verfügbar -> Schalter funktioniert
                // trotzdem, nur ohne dauerhafte Speicherung.
            }
        }

        function pageExists( title ) {

            var api = new mw.Api();

            return api.post( {
                action: 'query',
                prop: 'info',
                titles: title,
                formatversion: 2
            } ).then( function ( data ) {

                var pages = data &&
                            data.query &&
                            data.query.pages;

                var page = null;

                if ( Array.isArray( pages ) ) {
                    page = pages[ 0 ];
                } else if ( pages ) {
                    var keys = Object.keys( pages );

                    if ( keys.length ) {
                        page = pages[ keys[ 0 ] ];
                    }
                }

                return !!(
                    page &&
                    typeof page.pageid === 'number' &&
                    page.pageid > 0 &&
                    page.missing !== true
                );
            } );
        }

        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;

                    el.addEventListener( 'click', function () {
                        setPreferredLanguage( code );
                    } );

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

                    if ( code === 'en' ) {
                        el.title = 'English page not available yet';
                    }
                }

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

        var preferredLanguage = getPreferredLanguage();
        var action = mw.config.get( 'wgAction' );

        /*
         * Auf englischer Seite:
         * - EN anzeigen
         * - bei gespeicherter Sprache DE zurückwechseln.
         */
        if ( isEnglish ) {

            if (
                preferredLanguage === 'de' &&
                action === 'view'
            ) {
                window.location.replace(
                    mw.util.getUrl( baseTitle )
                );
                return;
            }

            renderSwitch( true );
            return;
        }

        /*
         * Auf deutscher Seite zuerst prüfen,
         * ob eine /en-Seite existiert.
         */
        pageExists( englishTitle )
            .then( function ( hasEnglishPage ) {

                /*
                 * EN wurde früher gewählt:
                 * automatisch auf die vorhandene
                 * englische Seite wechseln.
                 */
                if (
                    preferredLanguage === 'en' &&
                    hasEnglishPage &&
                    action === 'view'
                ) {
                    window.location.replace(
                        mw.util.getUrl( englishTitle )
                    );
                    return;
                }

                renderSwitch( hasEnglishPage );

            } )
            .catch( function ( error ) {

                console.error(
                    'informatik.wiki language switch:',
                    englishTitle,
                    error
                );

                renderSwitch( false );
            } );

    } );

} );

/* END INFORMATIK.WIKI GLOBAL LANGSWITCH */