Zum Inhalt springen

MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Pixopedia
Keine Bearbeitungszusammenfassung
Markierungen: Manuelle Zurücksetzung Zurückgesetzt
Keine Bearbeitungszusammenfassung
 
(23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
// ========================
mw.loader.using( ['jquery', 'mediawiki.util', 'mediawiki.user'] ).done( function () {
// Toggle-Switch-CSS nachladen
    $( function () {
// ========================
        var $body = $( 'body' );


(function () {
        var headerHtml =
    var href = '/darktest/toggle-switch.css';
            '<div id="pixo-custom-header">' +
                '<div id="pixo-custom-header-inner">' +
                    '<div id="pixo-custom-header-left"></div>' +
                    '<div id="pixo-custom-header-center"></div>' +
                    '<div id="pixo-custom-header-right"></div>' +
                '</div>' +
            '</div>';


    var existing = document.querySelector('link[rel="stylesheet"][href="' + href + '"]');
        $body.prepend( headerHtml );
    if (existing) return;


    var link = document.createElement('link');
        var $left  = $( '#pixo-custom-header-left' );
    link.rel = 'stylesheet';
        var $center = $( '#pixo-custom-header-center' );
    link.href = href;
        var $right  = $( '#pixo-custom-header-right' );
    document.head.appendChild(link);
})();


// =============
        /***********************
// Sticky-Header: Logo+Titel (Mitte) und Slider (rechts) einbinden
        * 1) Suche in Header-Left verschieben
// =============
        ***********************/
mw.loader.using('mediawiki.util', function () {
        ( function () {
    if (mw.config.get('skin') !== 'vector-2022') {
            var $searchBox = $( '#p-search' ).first();
         return;
            if ( $searchBox.length ) {
    }
                $searchBox.appendTo( $left );
            }
         } )();


    mw.hook('wikipage.content').add(function () {
        /***********************
         var stickyHeader = document.querySelector('.vector-sticky-header');
        * 2) Logo + Titel in die Mitte
        if (!stickyHeader) return;
        ***********************/
        var $logoLink = $( '.mw-logo' ).first();
        if ( $logoLink.length ) {
            $logoLink.appendTo( $center ).css( { margin: 0 } );
         } else {
            var $home = $( '<a>', {
                href: mw.util.getUrl( 'Start' ),
                class: 'pixo-header-icon',
                title: 'Startseite'
            } ).text( 'Pixopedia' );
            $center.append( $home );
        }


         // ---------- Mitte: Logo + Titel ----------
         /***********************
         if (!stickyHeader.querySelector('.pixo-sticky-center')) {
        * 3) Benutzerbereich rechts
            var center = document.createElement('div');
        ***********************/
            center.className = 'pixo-sticky-center';
         var userName = mw.config.get( 'wgUserName' );


             center.innerHTML = ''
        if ( userName ) {
                + '<a href="/Start" class="mw-logo pixo-sticky-logo">'
             var $userPage = $( '#p-vector-user-menu-userpage' ).first();
                + ' <img class="mw-logo-icon" src="/resources/assets/change-your-logo-icon.svg"'
            var $userMenu = $( '#vector-user-links-dropdown' ).first();
                + '      alt="" aria-hidden="true" height="50" width="50">'
                + ' <span class="mw-logo-container skin-invert">'
                + '    <strong class="mw-logo-wordmark">Pixopedia</strong>'
                + '  </span>'
                + '</a>';


             var start = stickyHeader.querySelector('.vector-sticky-header-start');
             if ( $userPage.length ) {
            var end  = stickyHeader.querySelector('.vector-sticky-header-end');
                $userPage.appendTo( $right ).addClass( 'pixo-header-icon' );
 
            }
             if (start && end && end.parentNode === stickyHeader) {
             if ( $userMenu.length ) {
                 stickyHeader.insertBefore(center, end);
                 $userMenu.appendTo( $right ).addClass( 'pixo-header-icon' );
            } else {
                stickyHeader.appendChild(center);
             }
             }
         }
         } else {
 
             var $register = $( '<a>', {
        // ---------- Rechts: Theme-Slider ----------
                href: mw.util.getUrl( 'Special:CreateAccount' ),
        if (!document.getElementById('theme-toggle-checkbox')) {
                 class: 'pixo-header-icon',
             var wrapper = document.createElement('div');
                 title: 'Benutzer registrieren'
            wrapper.className = 'vector-header-dark-toggle';
            } ).text( '' );
 
            wrapper.innerHTML = ''
                 + '<label class="theme-toggle-switch">'
                + ' <input type="checkbox" id="theme-toggle-checkbox" />'
                 + ' <span class="theme-toggle-slider"></span>'
                + '</label>';


             // ans rechte Ende des Sticky-Headers setzen
             var $login = $( '<a>', {
             stickyHeader.appendChild(wrapper);
                href: mw.util.getUrl( 'Special:UserLogin' ),
        }
                class: 'pixo-header-icon',
                title: 'Benutzeranmeldung'
             } ).text( '⮞' );


        // Wenn der Slider neu eingefügt wurde, Theme-Status auf Checkbox anwenden
             $right.append( $register, $login );
        if (typeof window.__applyThemeFromCurrent === 'function') {
             window.__applyThemeFromCurrent();
         }
         }
     });
     } );
});


// ================
    /***********************
// Switcher als Modul
    * 4) Bestimmte Spezialseiten für Nicht-Admins blocken
// ================
    ***********************/
(function () {
    var $body = $( document.body );
     const THEME_KEY = 'custom-site-theme';
     var isAdmin = $body.hasClass( 'group-sysop' ) || $body.hasClass( 'group-bureaucrat' );
     const LIGHT_CSS = '/darktest/styles.css';
     if ( !isAdmin ) {
    const DARK_CSS  = '/darktest/dark-mode.css';
        var blockedSpecials = [
            'Kurze_Seiten',
            'Lange_Seiten',
            'Kuerzeste_Seiten',
            'Laengste_Seiten',
            'Nicht_kategorisierte_Dateien',
            'Nicht_kategorisierte_Vorlagen',
            '%C3%84lteste_Seiten',
            'Wenigstbearbeitete_Seiten',
            'Unbenutzte_Dateien',
            'Unbenutzte_Kategorien',
            'Verwaiste_Seiten',
            'Unbenutzte_Vorlagen',
            'Gewuenschte_Vorlagen',
            'Gewuenschte_Seiten',
            'Seiten_mit_Eigenschaften',
            'Tracking-Kategorien',
            'Botpassw%C3%B6rter',
            'Beitr%C3%A4ge',
            'Liste_der_Sperren',
            'Letzte_%C3%84nderungen',
            'Diff',
            'PageHistory',
            'Logbuch',
            'Meistbenutzte_Vorlagen',
            'Meistbenutzte_Dateien',
            'Meistbenutzte_Kategorien',
            'Meiste_Interwikilinks',
            'Meistkategorisierte_Seiten',
            'Meistverlinkte_Seiten',
            'Meistbearbeitete_Seiten',
            'Exportieren',
            'Seiten_vergleichen',
            'Beitragen'
        ];


    let linkEl = document.getElementById('theme-css');
        var title = mw.config.get( 'wgPageName' ); // z.B. Spezial:Kurze_Seiten
    if (!linkEl) {
         if ( title.indexOf( 'Spezial:' ) === 0 ) {
        linkEl = document.createElement('link');
             var part = title.split( ':' )[1];
        linkEl.id = 'theme-css';
             if ( blockedSpecials.indexOf( part ) !== -1 ) {
        linkEl.rel = 'stylesheet';
                location.replace( mw.util.getUrl( 'Start' ) );
         linkEl.href = LIGHT_CSS;
             }
        document.head.appendChild(linkEl);
    }
 
    function applyTheme(theme) {
        var checkbox = document.getElementById('theme-toggle-checkbox');
 
        if (theme === 'dark') {
             linkEl.href = DARK_CSS;
            document.documentElement.classList.add('theme-dark');
             document.documentElement.classList.remove('theme-light');
            if (checkbox) checkbox.checked = true;
        } else {
            linkEl.href = LIGHT_CSS;
            document.documentElement.classList.add('theme-light');
            document.documentElement.classList.remove('theme-dark');
             if (checkbox) checkbox.checked = false;
         }
         }
     }
     }
} );


    let current = localStorage.getItem(THEME_KEY);
// HuntPixo-Leitfaden / Toggle nachladen
     if (!current) {
mw.loader.load(
        const prefersDark = window.matchMedia &&
     mw.config.get( 'wgServer' ) +
            window.matchMedia('(prefers-color-scheme: dark)').matches;
    mw.config.get( 'wgScriptPath' ) +
        current = prefersDark ? 'dark' : 'light';
    '/index.php?title=MediaWiki:PixoLeitfaden.js&action=raw&ctype=text/javascript'
    }
);
 
mw.loader.using( 'mediawiki.util' ).then( function () {
    // Helfer, damit der Slider nachträglich synchronisiert werden kann
  if ( mw.config.get( 'wgPageName' ) === 'Start' ) {
    window.__applyThemeFromCurrent = function () {
     document.title = '' + mw.config.get( 'wgSiteName' );
        applyTheme(current);
  }
    };
 
    // Direkt initial anwenden (falls Checkbox schon da ist, wird sie gesetzt)
    applyTheme(current);
 
    mw.hook('wikipage.content').add(function () {
        var checkbox = document.getElementById('theme-toggle-checkbox');
        if (!checkbox) return;
 
        // Doppelte Listener vermeiden
        checkbox.removeEventListener('change', checkbox.__themeChangeHandler || function () {});
 
        var handler = function () {
            current = checkbox.checked ? 'dark' : 'light';
            localStorage.setItem(THEME_KEY, current);
            applyTheme(current);
        };
 
        checkbox.__themeChangeHandler = handler;
        checkbox.addEventListener('change', handler);
    });
})();
 
/*  Placeholder Text in der Suchleiste überschreiben  */
mw.hook( 'wikipage.content' ).add( function () {
     var searchInput = document.querySelector(
        '.vector-sticky-header .cdx-text-input__input[type="search"]'
    );
    if (searchInput) {
        searchInput.setAttribute('placeholder', 'Suche');
    }
});
});

Aktuelle Version vom 9. März 2026, 02:03 Uhr

mw.loader.using( ['jquery', 'mediawiki.util', 'mediawiki.user'] ).done( function () {
    $( function () {
        var $body = $( 'body' );

        var headerHtml =
            '<div id="pixo-custom-header">' +
                '<div id="pixo-custom-header-inner">' +
                    '<div id="pixo-custom-header-left"></div>' +
                    '<div id="pixo-custom-header-center"></div>' +
                    '<div id="pixo-custom-header-right"></div>' +
                '</div>' +
            '</div>';

        $body.prepend( headerHtml );

        var $left   = $( '#pixo-custom-header-left' );
        var $center = $( '#pixo-custom-header-center' );
        var $right  = $( '#pixo-custom-header-right' );

        /***********************
         * 1) Suche in Header-Left verschieben
         ***********************/
        ( function () {
            var $searchBox = $( '#p-search' ).first();
            if ( $searchBox.length ) {
                $searchBox.appendTo( $left );
            }
        } )();

        /***********************
         * 2) Logo + Titel in die Mitte
         ***********************/
        var $logoLink = $( '.mw-logo' ).first();
        if ( $logoLink.length ) {
            $logoLink.appendTo( $center ).css( { margin: 0 } );
        } else {
            var $home = $( '<a>', {
                href: mw.util.getUrl( 'Start' ),
                class: 'pixo-header-icon',
                title: 'Startseite'
            } ).text( 'Pixopedia' );
            $center.append( $home );
        }

        /***********************
         * 3) Benutzerbereich rechts
         ***********************/
        var userName = mw.config.get( 'wgUserName' );

        if ( userName ) {
            var $userPage = $( '#p-vector-user-menu-userpage' ).first();
            var $userMenu = $( '#vector-user-links-dropdown' ).first();

            if ( $userPage.length ) {
                $userPage.appendTo( $right ).addClass( 'pixo-header-icon' );
            }
            if ( $userMenu.length ) {
                $userMenu.appendTo( $right ).addClass( 'pixo-header-icon' );
            }
        } else {
            var $register = $( '<a>', {
                href: mw.util.getUrl( 'Special:CreateAccount' ),
                class: 'pixo-header-icon',
                title: 'Benutzer registrieren'
            } ).text( '✚' );

            var $login = $( '<a>', {
                href: mw.util.getUrl( 'Special:UserLogin' ),
                class: 'pixo-header-icon',
                title: 'Benutzeranmeldung'
            } ).text( '⮞' );

            $right.append( $register, $login );
        }
    } );

    /***********************
     * 4) Bestimmte Spezialseiten für Nicht-Admins blocken
     ***********************/
    var $body = $( document.body );
    var isAdmin = $body.hasClass( 'group-sysop' ) || $body.hasClass( 'group-bureaucrat' );
    if ( !isAdmin ) {
        var blockedSpecials = [
            'Kurze_Seiten',
            'Lange_Seiten',
            'Kuerzeste_Seiten',
            'Laengste_Seiten',
            'Nicht_kategorisierte_Dateien',
            'Nicht_kategorisierte_Vorlagen',
            '%C3%84lteste_Seiten',
            'Wenigstbearbeitete_Seiten',
            'Unbenutzte_Dateien',
            'Unbenutzte_Kategorien',
            'Verwaiste_Seiten',
            'Unbenutzte_Vorlagen',
            'Gewuenschte_Vorlagen',
            'Gewuenschte_Seiten',
            'Seiten_mit_Eigenschaften',
            'Tracking-Kategorien',
            'Botpassw%C3%B6rter',
            'Beitr%C3%A4ge',
            'Liste_der_Sperren',
            'Letzte_%C3%84nderungen',
            'Diff',
            'PageHistory',
            'Logbuch',
            'Meistbenutzte_Vorlagen',
            'Meistbenutzte_Dateien',
            'Meistbenutzte_Kategorien',
            'Meiste_Interwikilinks',
            'Meistkategorisierte_Seiten',
            'Meistverlinkte_Seiten',
            'Meistbearbeitete_Seiten',
            'Exportieren',
            'Seiten_vergleichen',
            'Beitragen'
        ];

        var title = mw.config.get( 'wgPageName' ); // z.B. Spezial:Kurze_Seiten
        if ( title.indexOf( 'Spezial:' ) === 0 ) {
            var part = title.split( ':' )[1];
            if ( blockedSpecials.indexOf( part ) !== -1 ) {
                location.replace( mw.util.getUrl( 'Start' ) );
            }
        }
    }
} );

// HuntPixo-Leitfaden / Toggle nachladen
mw.loader.load(
    mw.config.get( 'wgServer' ) +
    mw.config.get( 'wgScriptPath' ) +
    '/index.php?title=MediaWiki:PixoLeitfaden.js&action=raw&ctype=text/javascript'
);
mw.loader.using( 'mediawiki.util' ).then( function () {
  if ( mw.config.get( 'wgPageName' ) === 'Start' ) {
    document.title = '' + mw.config.get( 'wgSiteName' );
  }
});