MediaWiki:Mobile.js: Unterschied zwischen den Versionen

Die Seite wurde geleert.
Markierungen: Geleert Manuelle Zurücksetzung
Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Zeile 1: Zeile 1:
/**
* Minerva (mobile): Link "The Tasteful 8" ins Hamburger-Menü einfügen
* Ziel: /wiki/Kategorie:The_Tasteful_8
* Robust gegen DOM-Varianten; hängt den Link unten bei den Sitelinks an.
*/
(function () {
  if (mw.config.get('skin') !== 'minerva') return;


  var LINK_ID = 'menu-the-tasteful-8';
  var LINK_TEXT = 'The Tasteful 8';
  var LINK_HREF = '/wiki/Kategorie:The_Tasteful_8';
  function makeItem(doc) {
    var li = doc.createElement('li');
    li.id = LINK_ID;
    // gängige Minerva-Klassen; falls sie fehlen, stört es nicht
    li.className = 'menu__item';
    var a = doc.createElement('a');
    a.className = 'menu__item--link';
    a.href = LINK_HREF;
    a.textContent = LINK_TEXT;
    li.appendChild(a);
    return li;
  }
  function findSiteLinksUL(root) {
    // 1) Versuche, die UL mit "Über ADOS Wiki" oder "Haftungsausschluss" zu finden
    var anchors = root.querySelectorAll('nav a, .menu a, #mw-mf-page-left a');
    var targetUL = null;
    anchors.forEach(function (a) {
      var t = (a.textContent || '').trim();
      if (t === 'Über ADOS Wiki' || t === 'Haftungsausschluss') {
        var ul = a.closest('ul');
        if (ul) targetUL = ul;
      }
    });
    if (targetUL) return targetUL;
    // 2) Fallback: nimm die letzte Menü-UL im Drawer
    var lists = root.querySelectorAll('#mw-mf-page-left nav ul, nav.minerva-navigation ul, .menu ul');
    return lists.length ? lists[lists.length - 1] : null;
  }
  function insertLink() {
    var drawer = document.getElementById('mw-mf-page-left') || document.body;
    var ul = findSiteLinksUL(drawer);
    if (!ul) return false;
    if (ul.querySelector('#' + LINK_ID)) return true; // schon drin
    ul.appendChild(makeItem(document)); // unten anhängen
    return true;
  }
  function arm() {
    // 1) Sofort versuchen
    insertLink();
    // 2) Beobachte DOM-Änderungen (wenn Nutzer den Burger öffnet / Lazy-Build)
    var mo = new MutationObserver(function () { insertLink(); });
    mo.observe(document.body, { childList: true, subtree: true });
    // 3) Sicherheitshalber ein paar Retries (MobileFrontend initialisiert asynchron)
    var tries = 0;
    var timer = setInterval(function () {
      tries++;
      var ok = insertLink();
      if (ok || tries > 10) clearInterval(timer);
    }, 250);
  }
  if (mw.hook) {
    mw.hook('mobileFrontend.pageReady').add(arm);
  }
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', arm);
  } else {
    arm();
  }
})();