Zum Inhalt springen

MediaWiki:Gadget-CustomPopups.js

Aus TerranianStar

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
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();
    });

});