MediaWiki:Gadget-CustomPopups.js: Unterschied zwischen den Versionen
Erscheinungsbild
Gerard (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Gerard (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 11: | Zeile 11: | ||
if (!title) return; | if (!title) return; | ||
$.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; | ||
let html = $('<div>').html(data.parse.text['*']); | let html = $('<div>').html(data.parse.text['*']); | ||
// | // 1. Versuch: ersten sinnvollen Absatz finden | ||
let firstParagraph = null; | let firstParagraph = null; | ||
html.find('p').each(function() { | html.find('p').each(function() { | ||
const text = $(this).text().trim(); | const text = $(this).text().trim(); | ||
if (text.length >= 3) { | if (text.length >= 3) { | ||
firstParagraph = $(this).html(); | firstParagraph = $(this).html(); | ||
| Zeile 56: | Zeile 33: | ||
}); | }); | ||
// Wenn kein Absatz → ersten sichtbaren Textknoten suchen | // 2. Wenn kein Absatz → ersten sichtbaren Textknoten suchen | ||
if (!firstParagraph) { | if (!firstParagraph) { | ||
let fallbackText = html. | let fallbackText = ""; | ||
// Alle Textknoten durchsuchen | |||
html.find('*').contents().each(function() { | |||
if (this.nodeType === 3) { // Textknoten | |||
const text = this.nodeValue.trim(); | |||
if (text.length >= 3) { | |||
fallbackText = text; | |||
return false; | |||
} | |||
} | |||
}); | |||
if (fallbackText.length >= 3) { | if (fallbackText.length >= 3) { | ||
firstParagraph = fallbackText; | firstParagraph = fallbackText; | ||
| Zeile 68: | Zeile 55: | ||
} | } | ||
$('#custom-popup') | $('#custom-popup') | ||
.html(firstParagraph) | .html(firstParagraph) | ||
Aktuelle Version vom 9. Juni 2026, 12:08 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 finden
let firstParagraph = null;
html.find('p').each(function() {
const text = $(this).text().trim();
if (text.length >= 3) {
firstParagraph = $(this).html();
return false;
}
});
// 2. Wenn kein Absatz → ersten sichtbaren Textknoten suchen
if (!firstParagraph) {
let fallbackText = "";
// Alle Textknoten durchsuchen
html.find('*').contents().each(function() {
if (this.nodeType === 3) { // Textknoten
const text = this.nodeValue.trim();
if (text.length >= 3) {
fallbackText = text;
return false;
}
}
});
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();
});
});