MediaWiki:Common.js

Aus Phoenix-Larp Wiki

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
/* Das folgende JavaScript wird für alle Benutzer geladen. */
mw.loader.using(['mediawiki.util']).done(function () {
  // Nur auf schmalen Screens aktiv
  if (!window.matchMedia('(max-width: 768px)').matches) return;

  // Burger-Button einfügen (mit ARIA)
  var $btn = $('<button class="mw-burger" aria-label="Menü" aria-controls="column-navigation" aria-expanded="false"><span></span></button>');
  $('body').append($btn);

  // Overlay zum Schließen
  var $overlay = $('<div class="nav-overlay" tabindex="-1" aria-hidden="true"></div>');
  $('body').append($overlay);

  function closeMenu() {
    $('body').removeClass('nav-open');
    $btn.attr('aria-expanded', 'false');
  }
  function toggleMenu() {
    var open = !$('body').hasClass('nav-open');
    $('body').toggleClass('nav-open', open);
    $btn.attr('aria-expanded', String(open));
  }

  $btn.on('click', toggleMenu);
  $overlay.on('click', closeMenu);
  $(document).on('keydown', function (e) { if (e.key === 'Escape') closeMenu(); });

  // Schließt das Menü, wenn Viewport wieder breit wird
  window.matchMedia('(min-width: 769px)').addEventListener('change', function (mql) {
    if (mql.matches) closeMenu();
  });
});





mw.loader.using(['mediawiki.util']).done(function () {
  function ensureUserToolsClonePortlet() {
    var $srcPortlet = $('#p-usertools');
    var $srcBody    = $srcPortlet.find('.mw-portlet-body');
    if (!$srcBody.length) return null;

    // Ziel: der linke Menü-Container (Anisa: #mw-navigation in #column-navigation)
    var $nav = $('#mw-navigation');
    if (!$nav.length) $nav = $('#column-navigation'); // Fallback

    // Wenn unser Klon-Portlet schon existiert: referenzieren
    var $clonePortlet = $('#p-usertools-left');
    if (!$clonePortlet.length) {
      // Überschrift vom Original übernehmen (fällt z.B. "Werkzeuge", "Benutzer" etc.)
      var headingText = $.trim($srcPortlet.children('h3').first().text()) || 'Benutzer';

      // Neues Portlet am ENDE der vorhandenen Portlets anhängen -> „unter die bisherigen Menüpunkte“
      $clonePortlet = $(
        '<div id="p-usertools-left" class="mw-portlet" role="navigation" aria-label="' + headingText + '">' +
          '<h3>' + $('<div>').text(headingText).html() + '</h3>' +
          '<div class="mw-portlet-body"></div>' +
        '</div>'
      );

      // exakt ans Ende der bestehenden Portlets setzen
      // (falls Anisa weitere Wrapper hat, hängt .append() automatisch nach den letzten Menüpunkten)
      $nav.append($clonePortlet);
    }
    return $clonePortlet.find('.mw-portlet-body');
  }

  function cloneUserToolsIntoLeftMenu() {
    var $srcBody = $('#p-usertools .mw-portlet-body');
    if (!$srcBody.length) return;

    var $dstBody = ensureUserToolsClonePortlet();
    if (!$dstBody || !$dstBody.length) return;

    // Ziel leeren, dann frische Kopie erzeugen
    $dstBody.empty();

    // Nur die direkten Kinder klonen, IDs entfernen, damit es keine Duplikate gibt
    $srcBody.children().each(function () {
      var $clone = $(this).clone(true, true);
      $clone.find('[id]').addBack('[id]').removeAttr('id');
      $dstBody.append($clone);
    });
  }

  function apply() {
    cloneUserToolsIntoLeftMenu();
  }

  // initial + bei Soft-Navigation/Ajax
  apply();
  mw.hook('wikipage.content').add(apply);

  // Aktualisieren, wenn sich das Original-Portlet dynamisch ändert
  var srcNode = document.querySelector('#p-usertools .mw-portlet-body');
  if (srcNode && 'MutationObserver' in window) {
    new MutationObserver(function () { cloneUserToolsIntoLeftMenu(); })
      .observe(srcNode, { childList: true, subtree: true });
  }
});