Zum Inhalt springen

MediaWiki:Gadget-CustomPopups.js: Unterschied zwischen den Versionen

Aus TerranianStar
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
Zeile 11: Zeile 11:
         if (!title) return;
         if (!title) return;


        // API-Aufruf
         $.getJSON(mw.util.wikiScript('api'), {
         $.getJSON(mw.util.wikiScript('api'), {
             action: 'parse',
             action: 'parse',
Zeile 21: Zeile 20:
             if (!data.parse || !data.parse.text) return;
             if (!data.parse || !data.parse.text) return;


            // HTML in jQuery-Objekt umwandeln
             let html = $('<div>').html(data.parse.text['*']);
             let html = $('<div>').html(data.parse.text['*']);


             // Unerwünschte Elemente entfernen
             // 1. Versuch: ersten sinnvollen Absatz nehmen
            html.find('.infobox').remove();      // Infoboxen
             let firstParagraph = null;
            html.find('table').remove();        // Tabellen (Navigation, Layout)
             html.find('.catlinks').remove();    // Kategorien
            html.find('style, script').remove(); // Skripte/Styles


            // Vorlagen entfernen (alles was direkt in mw-parser-output steht und kein Absatz/Überschrift ist)
             html.find('p').each(function() {
             html.find('.mw-parser-output > *').each(function() {
                 const text = $(this).text().trim();
                 if (
                if (text.length >= 3) {
                    !$(this).is('p') &&
                     firstParagraph = $(this).html();
                    !$(this).is('h1') &&
                     return false;
                    !$(this).is('h2') &&
                     !$(this).is('h3') &&
                    !$(this).is('h4') &&
                    !$(this).is('h5')
                ) {
                     $(this).remove();
                 }
                 }
             });
             });


// Ersten sinnvollen Absatz finden
            // 2. Fallback: gesamten sichtbaren Text, wenn kein Absatz gefunden
let firstParagraph = null;
 
html.find('p').each(function() {
    const text = $(this).text().trim();
 
    if (text.length >= 3) {
        firstParagraph = $(this).html();
        return false;
    }
});
 
// Wenn kein Absatz → ersten sichtbaren Textknoten suchen
if (!firstParagraph) {
    let fallbackText = html.text().trim();
 
    // Nur sinnvollen Text nehmen
    if (fallbackText.length >= 3) {
        firstParagraph = fallbackText;
    } else {
        firstParagraph = "(Kein Vorschautext verfügbar)";
    }
}
 
 
            // Wenn kein Absatz existiert → Überschrift als Fallback
             if (!firstParagraph) {
             if (!firstParagraph) {
                 let heading = html.find('h1, h2, h3').first().text().trim();
                 const fallbackText = html.text().trim();
                 if (heading.length > 0) {
                 if (fallbackText.length >= 3) {
                     firstParagraph = heading;
                     firstParagraph = fallbackText;
                 } else {
                 } else {
                     firstParagraph = "(Kein Vorschautext verfügbar)";
                     firstParagraph = "(Kein Vorschautext verfügbar)";
Zeile 79: Zeile 43:
             }
             }


            // Popup anzeigen
             $('#custom-popup')
             $('#custom-popup')
                 .html(firstParagraph)
                 .html(firstParagraph)

Version vom 9. Juni 2026, 12:01 Uhr

mw.hook('wikipage.content').add(function() {

    // Popup-Container erzeugen (einmalig)
    if (!$('#custom-popup').length) {
        $('body').append('<div id="custom-popup"></div>');
    }

    // Hover-Effekt für interne Links
    $('a').hover(function(e) {
        const title = $(this).attr('title');
        if (!title) return;

        $.getJSON(mw.util.wikiScript('api'), {
            action: 'parse',
            page: title,
            prop: 'text',
            format: 'json'
        }).done(function(data) {

            if (!data.parse || !data.parse.text) return;

            let html = $('<div>').html(data.parse.text['*']);

            // 1. Versuch: ersten sinnvollen Absatz nehmen
            let firstParagraph = null;

            html.find('p').each(function() {
                const text = $(this).text().trim();
                if (text.length >= 3) {
                    firstParagraph = $(this).html();
                    return false;
                }
            });

            // 2. Fallback: gesamten sichtbaren Text, wenn kein Absatz gefunden
            if (!firstParagraph) {
                const fallbackText = html.text().trim();
                if (fallbackText.length >= 3) {
                    firstParagraph = fallbackText;
                } else {
                    firstParagraph = "(Kein Vorschautext verfügbar)";
                }
            }

            $('#custom-popup')
                .html(firstParagraph)
                .css({
                    top: e.pageY + 10,
                    left: e.pageX + 10
                })
                .show();

        });

    }, function() {
        $('#custom-popup').hide();
    });

});