MediaWiki:Mobile.js: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Keine Bearbeitungszusammenfassung
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
/**
/* Minerva: Alle Abschnitte automatisch ausklappen */
* 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 () {
(function () {
  if (!window.mw) return;
   if (mw.config.get('skin') !== 'minerva') return;
   if (mw.config.get('skin') !== 'minerva') return;


   var LINK_ID = 'menu-the-tasteful-8';
   function expandAll() {
  var LINK_TEXT = 'The Tasteful 8';
    // 1) Alle Toggle-Buttons, die noch "zu" sind, anklicken
  var LINK_HREF = '/wiki/Kategorie:The_Tasteful_8';
    document.querySelectorAll('button.section-toggle[aria-expanded="false"], [data-event-name="section-toggle"][aria-expanded="false"]').forEach(function (btn) {
      try { btn.click(); } catch(e) {}
    });


  function makeItem(doc) {
     // 2) Sicherheitsgurt: typische Inhalts-Container sichtbar erzwingen
    var li = doc.createElement('li');
     document.querySelectorAll('.collapsible-block, .mf-section-contents, .section-content').forEach(function (el) {
    li.id = LINK_ID;
       el.style.display = 'block';
     // gängige Minerva-Klassen; falls sie fehlen, stört es nicht
      el.hidden = false;
     li.className = 'menu__item';
       el.classList.add('open-block');
    var a = doc.createElement('a');
      el.classList.remove('collapsed');
    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() {
  // Beim Rendern und bei dynamischen Änderungen erneut ausführen
     var drawer = document.getElementById('mw-mf-page-left') || document.body;
   function init() {
     var ul = findSiteLinksUL(drawer);
     expandAll();
    if (!ul) return false;
     // Nochmal kurz nach Seitenaufbau und nach spätem JS
     if (ul.querySelector('#' + LINK_ID)) return true; // schon drin
     setTimeout(expandAll, 50);
     ul.appendChild(makeItem(document)); // unten anhängen
     setTimeout(expandAll, 400);
    return true;
   }
   }


   function arm() {
   if (mw.loader && mw.loader.using) {
     // 1) Sofort versuchen
     mw.loader.using(['mobile.init']).always(function () {
    insertLink();
       if (mw.hook) mw.hook('wikipage.content').add(init);
 
      init();
    // 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 {
   } else {
     arm();
     document.addEventListener('DOMContentLoaded', init);
   }
   }
})();
})();