MediaWiki:Common.js: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 52: | Zeile 52: | ||
console.error('[NewPages] API-Fehler:', err); | console.error('[NewPages] API-Fehler:', err); | ||
mw.util.addPortletLink(targetId, '#', 'Fehler beim Laden'); | mw.util.addPortletLink(targetId, '#', 'Fehler beim Laden'); | ||
}); | |||
}); | |||
})(); | |||
/* global mw, $ */ | |||
(function () { | |||
'use strict'; | |||
$.when( mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ), $.ready ).then( function () { | |||
// 1) Referenz-Portlet finden (Werkzeuge = p-tb). Daran hängen wir unseren Block direkt DARUNTER an. | |||
var tools = document.getElementById('p-tb') || document.getElementById('p-navigation'); | |||
if ( !tools ) { | |||
console.warn('[NewPages] Referenz-Portlet nicht gefunden.'); | |||
return; | |||
} | |||
// 2) Eigenen Portlet-Block erstellen – Klassen/Struktur von bestehendem Portlet ableiten | |||
var block = document.createElement('div'); | |||
block.id = 'p-newpages'; | |||
// Klassen vom Werkzeuge-Portlet übernehmen (wirkt in Timeless/Vector/MonoBook sauber) | |||
block.className = tools.className || 'mw-portlet'; | |||
// passende Überschrift (h3 oder h2 – je nach Skin) ermitteln | |||
var headingTag = (tools.querySelector('h3,h2') || { tagName: 'H3' }).tagName; | |||
var heading = document.createElement(headingTag); | |||
heading.textContent = 'Neueste Beiträge'; | |||
// Body + UL wie bei anderen Portlets | |||
var body = document.createElement('div'); | |||
body.className = 'body'; | |||
var list = document.createElement('ul'); | |||
body.appendChild(list); | |||
block.appendChild(heading); | |||
block.appendChild(body); | |||
// Block direkt UNTERHALB von "Werkzeuge" einfügen | |||
if (tools.insertAdjacentElement) { | |||
tools.insertAdjacentElement('afterend', block); | |||
} else if (tools.parentNode) { | |||
tools.parentNode.insertBefore(block, tools.nextSibling); | |||
} | |||
// 3) Einträge via API laden | |||
var api = new mw.Api(); | |||
api.get({ | |||
action: 'query', | |||
list: 'recentchanges', | |||
rctype: 'new', | |||
rcprop: 'title|timestamp', | |||
rcnamespace: 0, // nur Artikel | |||
rcshow: '!bot|!redirect', // Bots & Weiterleitungen ausblenden | |||
rclimit: 3, | |||
format: 'json' | |||
}).done(function (data) { | |||
var items = (data.query && data.query.recentchanges) || []; | |||
// Helper: <li><a/></li> hinzufügen | |||
function addItem(href, text, title) { | |||
var li = document.createElement('li'); | |||
var a = document.createElement('a'); | |||
a.href = href; | |||
a.textContent = text; | |||
if (title) a.title = title; | |||
li.appendChild(a); | |||
list.appendChild(li); | |||
} | |||
if (!items.length) { | |||
addItem(mw.util.getUrl('Special:NewPages'), 'Keine neuen Seiten', 'Zur vollständigen Liste'); | |||
return; | |||
} | |||
for (var i = 0; i < items.length; i++) { | |||
var rc = items[i]; | |||
var href = mw.util.getUrl(rc.title); | |||
var tip = new Date(rc.timestamp).toLocaleString('de-DE', { dateStyle: 'medium', timeStyle: 'short' }); | |||
addItem(href, rc.title, tip); | |||
} | |||
// Abschluss-Link | |||
addItem(mw.util.getUrl('Special:NewPages'), 'Alle neuen Seiten →', 'Zur vollständigen Liste'); | |||
}).fail(function (err) { | |||
console.error('[NewPages] API-Fehler:', err); | |||
var li = document.createElement('li'); | |||
li.textContent = 'Fehler beim Laden'; | |||
list.appendChild(li); | |||
}); | }); | ||
}); | }); | ||
})(); | })(); | ||
Version vom 7. November 2025, 19:09 Uhr
/* global mw, $ */
(function () {
'use strict';
$.when( mw.loader.using( [ 'mediawiki.util', 'mediawiki.api' ] ), $.ready ).then( function () {
// Ziel-Portlets (OHNE #)
var targetId = document.getElementById('p-tb') ? 'p-tb'
: ( document.getElementById('p-navigation') ? 'p-navigation' : null );
if ( !targetId ) {
console.warn('[NewPages] Kein passender Portlet-Container gefunden.');
return;
}
// "Überschrift" als nicht-klickbaren Eintrag unter Werkzeuge einfügen
var headerId = 'newpages-header';
var headerLink = mw.util.addPortletLink(targetId, '#', '-- Neueste Beiträge --', headerId, 'Neueste, neu angelegte Seiten');
if (headerLink && headerLink.addEventListener) {
headerLink.addEventListener('click', function (e) { e.preventDefault(); }, false);
}
// API: 3 neu angelegte Artikel
var api = new mw.Api();
api.get({
action: 'query',
list: 'recentchanges',
rctype: 'new',
rcprop: 'title|timestamp',
rcnamespace: 0, // Hauptnamensraum
rcshow: '!bot|!redirect', // Bots & Weiterleitungen ausblenden
rclimit: 3,
format: 'json'
}).done(function (data) {
var items = (data.query && data.query.recentchanges) || [];
if (!items.length) {
mw.util.addPortletLink(targetId, mw.util.getUrl('Special:NewPages'), 'Keine neuen Seiten');
return;
}
for (var i = 0; i < items.length; i++) {
var rc = items[i];
var href = mw.util.getUrl(rc.title);
var tip = new Date(rc.timestamp).toLocaleString('de-DE', { dateStyle: 'medium', timeStyle: 'short' });
mw.util.addPortletLink(targetId, href, rc.title, null, tip);
}
// Abschluss-Link
mw.util.addPortletLink(targetId, mw.util.getUrl('Special:NewPages'), 'Alle neuen Seiten →', 'newpages-more', 'Zur vollständigen Liste');
}).fail(function (err) {
console.error('[NewPages] API-Fehler:', err);
mw.util.addPortletLink(targetId, '#', 'Fehler beim Laden');
});
});
})();
/* global mw, $ */
(function () {
'use strict';
$.when( mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ), $.ready ).then( function () {
// 1) Referenz-Portlet finden (Werkzeuge = p-tb). Daran hängen wir unseren Block direkt DARUNTER an.
var tools = document.getElementById('p-tb') || document.getElementById('p-navigation');
if ( !tools ) {
console.warn('[NewPages] Referenz-Portlet nicht gefunden.');
return;
}
// 2) Eigenen Portlet-Block erstellen – Klassen/Struktur von bestehendem Portlet ableiten
var block = document.createElement('div');
block.id = 'p-newpages';
// Klassen vom Werkzeuge-Portlet übernehmen (wirkt in Timeless/Vector/MonoBook sauber)
block.className = tools.className || 'mw-portlet';
// passende Überschrift (h3 oder h2 – je nach Skin) ermitteln
var headingTag = (tools.querySelector('h3,h2') || { tagName: 'H3' }).tagName;
var heading = document.createElement(headingTag);
heading.textContent = 'Neueste Beiträge';
// Body + UL wie bei anderen Portlets
var body = document.createElement('div');
body.className = 'body';
var list = document.createElement('ul');
body.appendChild(list);
block.appendChild(heading);
block.appendChild(body);
// Block direkt UNTERHALB von "Werkzeuge" einfügen
if (tools.insertAdjacentElement) {
tools.insertAdjacentElement('afterend', block);
} else if (tools.parentNode) {
tools.parentNode.insertBefore(block, tools.nextSibling);
}
// 3) Einträge via API laden
var api = new mw.Api();
api.get({
action: 'query',
list: 'recentchanges',
rctype: 'new',
rcprop: 'title|timestamp',
rcnamespace: 0, // nur Artikel
rcshow: '!bot|!redirect', // Bots & Weiterleitungen ausblenden
rclimit: 3,
format: 'json'
}).done(function (data) {
var items = (data.query && data.query.recentchanges) || [];
// Helper: <li><a/></li> hinzufügen
function addItem(href, text, title) {
var li = document.createElement('li');
var a = document.createElement('a');
a.href = href;
a.textContent = text;
if (title) a.title = title;
li.appendChild(a);
list.appendChild(li);
}
if (!items.length) {
addItem(mw.util.getUrl('Special:NewPages'), 'Keine neuen Seiten', 'Zur vollständigen Liste');
return;
}
for (var i = 0; i < items.length; i++) {
var rc = items[i];
var href = mw.util.getUrl(rc.title);
var tip = new Date(rc.timestamp).toLocaleString('de-DE', { dateStyle: 'medium', timeStyle: 'short' });
addItem(href, rc.title, tip);
}
// Abschluss-Link
addItem(mw.util.getUrl('Special:NewPages'), 'Alle neuen Seiten →', 'Zur vollständigen Liste');
}).fail(function (err) {
console.error('[NewPages] API-Fehler:', err);
var li = document.createElement('li');
li.textContent = 'Fehler beim Laden';
list.appendChild(li);
});
});
})();