MediaWiki:Anisa.js

Aus Phoenix-Larp Wiki

Version vom 6. September 2026, 09:43 Uhr von Becko (Diskussion | Beiträge) (Inhaltsverzeichnis in die Anisa-Seitenleiste integrieren)

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
/* Inhaltsverzeichnis in die Anisa-Seitenleiste integrieren */
(function () {
  function initAnisaToc() {
    if (!document.body.classList.contains('skin-anisa')) {
      return;
    }

    var toc = document.getElementById('toc');
    var navigation = document.getElementById('site-navigation');
    var toolbox = document.getElementById('p-tb');

    if (!toc || !navigation || toc.dataset.anisaTocInitialized) {
      return;
    }

    toc.dataset.anisaTocInitialized = '1';

    var marker = document.createComment('Position des Inhaltsverzeichnisses');
    toc.parentNode.insertBefore(marker, toc);

    var portlet = document.createElement('div');
    portlet.id = 'p-page-toc';
    portlet.className = 'mw-portlet';
    portlet.setAttribute('role', 'navigation');
    portlet.setAttribute('aria-labelledby', 'p-page-toc-label');

    var heading = document.createElement('h3');
    heading.id = 'p-page-toc-label';
    heading.textContent = 'Inhaltsverzeichnis';

    var body = document.createElement('div');
    body.className = 'mw-portlet-body';

    portlet.appendChild(heading);
    portlet.appendChild(body);

    if (toolbox) {
      navigation.insertBefore(portlet, toolbox);
    } else {
      navigation.appendChild(portlet);
    }

    var mediaQuery = window.matchMedia('(min-width: 769px)');

    function positionToc() {
      if (mediaQuery.matches) {
        body.appendChild(toc);
        portlet.hidden = false;
      } else {
        if (marker.parentNode) {
          marker.parentNode.insertBefore(toc, marker.nextSibling);
        }
        portlet.hidden = true;
      }
    }

    positionToc();

    if (mediaQuery.addEventListener) {
      mediaQuery.addEventListener('change', positionToc);
    } else {
      mediaQuery.addListener(positionToc);
    }
  }

  mw.hook('wikipage.content').add(initAnisaToc);
})();