|
|
| (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); |
| } | | } |
| })(); | | })(); |