MediaWiki:Common.js

Aus Rettungsdienst-Wiki
Zur Navigation springen Zur Suche springen

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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/* 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);
    });
  });
})();