MediaWiki:Mobile.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) Die Seite wurde geleert. Markierungen: Geleert Manuelle Zurücksetzung |
Admin (Diskussion | Beiträge) 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(); | |||
} | |||
})(); | |||