MediaWiki:Common.js: Unterschied zwischen den Versionen
Aus ISMS-Ratgeber WiKi
Zur Navigation springenZur Suche springen
Dirk (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Dirk (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
||
Zeile 7: | Zeile 7: | ||
if (!$target.length) return; | if (!$target.length) return; | ||
// 1. Neue Seiten holen | // 1. Neue Seiten holen und Dubletten filtern | ||
new mw.Api().get({ | new mw.Api().get({ | ||
action: 'query', | action: 'query', | ||
Zeile 14: | Zeile 14: | ||
rcshow: 'new', | rcshow: 'new', | ||
rcnamespace: 0, | rcnamespace: 0, | ||
rclimit: | rclimit: 50, // Höheres Limit für Dublettenfilterung | ||
format: 'json' | format: 'json' | ||
}).done(function(data) { | }).done(function(data) { | ||
var pages = data.query && | var pages = data.query?.recentchanges || []; | ||
if (! | var uniquePages = {}; // Dublettenfilter | ||
var filteredPages = []; | |||
// 2. Einzigartige Seiten filtern | |||
pages.forEach(function(p) { | |||
if (!uniquePages[p.title] && !p.title.includes(':')) { | |||
uniquePages[p.title] = true; | |||
filteredPages.push(p); | |||
if (filteredPages.length >= 10) return; // Auf 10 begrenzen | |||
} | |||
}); | |||
if (!filteredPages.length) { | |||
$target.html('Keine neuen Seiten gefunden.'); | $target.html('Keine neuen Seiten gefunden.'); | ||
return; | return; | ||
} | } | ||
// | // 3. SEO-Daten für gefilterte Seiten holen | ||
var titles = | var titles = filteredPages.map(p => p.title).join('|'); | ||
new mw.Api().get({ | new mw.Api().get({ | ||
action: 'query', | action: 'query', | ||
Zeile 32: | Zeile 44: | ||
}).done(function(seoData) { | }).done(function(seoData) { | ||
var seoProps = {}; | var seoProps = {}; | ||
Object.values(seoData.query?.pages || {}).forEach(function(page) { | |||
seoProps[page.title] = page.pageprops?.wikiseo_title || page.pageprops?.seo_title; | |||
}); | |||
// | // 4. Tabelle generieren | ||
var table = '<table class="wikitable"><tr><th>Seitenname</th><th> | var table = '<table class="wikitable"><tr><th>Seitenname</th><th>Erstellt am</th><th>SEO-Titel</th></tr>'; | ||
filteredPages.forEach(function(p) { | |||
var link = '<a href="' + mw.util.getUrl(p.title) + '">' + mw.html.escape(p.title) + '</a>'; | var link = '<a href="' + mw.util.getUrl(p.title) + '">' + mw.html.escape(p.title) + '</a>'; | ||
var date = new Date(p.timestamp).toLocaleDateString('de-DE'); | var date = new Date(p.timestamp).toLocaleDateString('de-DE', {day: '2-digit', month: '2-digit', year: 'numeric'}); | ||
var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–'; | var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–'; | ||
table += | table += `<tr><td>${link}</td><td>${date}</td><td>${seo}</td></tr>`; | ||
}); | }); | ||
table + | $target.html(table + '</table>'); | ||
}).fail(() => $target.html('Fehler bei SEO-Daten')); | |||
}).fail( | }).fail(() => $target.html('Fehler beim Laden')); | ||
}).fail( | |||
}); | }); |
Version vom 13. Mai 2025, 07:03 Uhr
/* Das folgende JavaScript wird für alle Benutzer geladen. */ // Top 10 zuletzt geänderte Seiten: $(function() { var $target = $('#seo-pages-table'); if (!$target.length) return; // 1. Neue Seiten holen und Dubletten filtern new mw.Api().get({ action: 'query', list: 'recentchanges', rcprop: 'title|timestamp', rcshow: 'new', rcnamespace: 0, rclimit: 50, // Höheres Limit für Dublettenfilterung format: 'json' }).done(function(data) { var pages = data.query?.recentchanges || []; var uniquePages = {}; // Dublettenfilter var filteredPages = []; // 2. Einzigartige Seiten filtern pages.forEach(function(p) { if (!uniquePages[p.title] && !p.title.includes(':')) { uniquePages[p.title] = true; filteredPages.push(p); if (filteredPages.length >= 10) return; // Auf 10 begrenzen } }); if (!filteredPages.length) { $target.html('Keine neuen Seiten gefunden.'); return; } // 3. SEO-Daten für gefilterte Seiten holen var titles = filteredPages.map(p => p.title).join('|'); new mw.Api().get({ action: 'query', prop: 'pageprops', titles: titles, format: 'json' }).done(function(seoData) { var seoProps = {}; Object.values(seoData.query?.pages || {}).forEach(function(page) { seoProps[page.title] = page.pageprops?.wikiseo_title || page.pageprops?.seo_title; }); // 4. Tabelle generieren var table = '<table class="wikitable"><tr><th>Seitenname</th><th>Erstellt am</th><th>SEO-Titel</th></tr>'; filteredPages.forEach(function(p) { var link = '<a href="' + mw.util.getUrl(p.title) + '">' + mw.html.escape(p.title) + '</a>'; var date = new Date(p.timestamp).toLocaleDateString('de-DE', {day: '2-digit', month: '2-digit', year: 'numeric'}); var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–'; table += `<tr><td>${link}</td><td>${date}</td><td>${seo}</td></tr>`; }); $target.html(table + '</table>'); }).fail(() => $target.html('Fehler bei SEO-Daten')); }).fail(() => $target.html('Fehler beim Laden')); });