MediaWiki:Minerva.js: Unterschied zwischen den Versionen

Der Seiteninhalt wurde durch einen anderen Text ersetzt: „All JavaScript here will be loaded for users of the MinervaNeue skin:
Markierungen: Ersetzt Mobile Bearbeitung Mobile Web-Bearbeitung Erweiterte mobile Bearbeitung
Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Zeile 1: Zeile 1:
/* All JavaScript here will be loaded for users of the MinervaNeue skin */
/* All JavaScript here will be loaded for users of the MinervaNeue skin */
/* ADOS – Hauptkategorien ins Minerva-Hamburger-Menü (Mobile) */
mw.loader.using(['mediawiki.util', 'mediawiki.notify']).then(function () {
  // === KONFIGURATION: Deine Hauptkategorien ===
  // title = exakter Seitentitel (inkl. "Kategorie:")
  // label = kurzes Label im Menü
  var CATS = [
    { title: 'Kategorie:Alle A Dream of Scotland Abfüllungen', label: 'A Dream of Scotland' },
    { title: 'Kategorie:Alle A Dream of Ireland Abfüllungen',  label: 'A Dream of Ireland' },
    { title: 'Kategorie:Alle A Dream of... – Der Rest der Welt Abfüllungen', label: 'Rest der Welt' },
    { title: 'Kategorie:Cigar Malt Übersicht', label: 'Cigar Malt' },
    { title: 'Kategorie:Alle Rumbastic Abfüllungen', label: 'Rumbastic' },
    { title: 'Kategorie:The Tasteful 8', label: 'The Tasteful 8' },
    { title: 'Kategorie:Còmhlan Abfüllungen', label: 'Còmhlan' },
    { title: 'Kategorie:Friendly Mr. Z Whiskytainment Abfüllungen', label: 'Friendly Mr. Z' },
    { title: 'Kategorie:Die Whisky Elfen Abfüllungen', label: 'Die Whisky Elfen' },
    { title: 'Kategorie:The Fine Art of Whisky Abfüllungen', label: 'Fine Art of Whisky' },
    { title: 'Kategorie:The Forbidden Kingdom', label: 'The Forbidden Kingdom' }
  ];
  // === Hilfsfunktionen ===
  function buildListHTML() {
    var html = '<ul class="ados-hauptkategorien">';
    html += '<li class="menu-heading">Hauptkategorien</li>';
    CATS.forEach(function (c) {
      html += '<li><a class="mw-ui-icon mw-ui-icon-before" href="' +
        mw.util.getUrl(c.title) + '"><span>' + (c.label || c.title.replace(/^Kategorie:/,'')) +
        '</span></a></li>';
    });
    html += '</ul>';
    return html;
  }
  function tryInsertOnce() {
    // Drawer-Menü: #mw-mf-page-left .menu ; First UL = Standardblock
    var menu = document.querySelector('#mw-mf-page-left .menu');
    if (!menu) return false;
    if (menu.querySelector('.ados-hauptkategorien')) return true; // schon drin
    var firstUl = menu.querySelector('ul');
    if (!firstUl) return false;
    firstUl.insertAdjacentHTML('afterend', buildListHTML());
    return true;
  }
  function onDrawerOpen() {
    // Mehrere Versuche – das Menü wird manchmal verzögert aufgebaut
    setTimeout(tryInsertOnce, 30);
    setTimeout(tryInsertOnce, 200);
    setTimeout(tryInsertOnce, 600);
  }
  // === Trigger ===
  // 1) Sofort versuchen (falls das Menü schon da ist)
  tryInsertOnce();
  // 2) Auf Klick auf den Drawer-Button reagieren
  // (verschiedene Selektoren je nach MW/Minerva-Version)
  var selectors = [
    '#mw-mf-main-menu-button',
    'button.hamburger',
    '.mw-ui-icon-minerva-drawer',
    '.header .toggle-list-button'
  ];
  selectors.forEach(function (sel) {
    var btn = document.querySelector(sel);
    if (btn) btn.addEventListener('click', onDrawerOpen, false);
  });
  // 3) Fallback: MutationObserver – sobald das Menü in den DOM kommt, einfügen
  var mo = new MutationObserver(function (mutations) {
    if (tryInsertOnce()) return; // hat geklappt, nichts weiter tun
    mutations.forEach(function (m) {
      if (!m.addedNodes) return;
      for (var i = 0; i < m.addedNodes.length; i++) {
        var n = m.addedNodes[i];
        if (n.nodeType === 1 && (n.matches('#mw-mf-page-left') || n.matches('.menu') || n.querySelector?.('.menu'))) {
          tryInsertOnce();
          break;
        }
      }
    });
  });
  mo.observe(document.body, { childList: true, subtree: true });
  // Optionaler Hinweis im Debugmodus
  if (/\bdebug=1\b/.test(location.search)) {
    mw.notify('Minerva.js aktiv – Hauptkategorien-Menü wird eingefügt.');
  }
});