MediaWiki:Minerva.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) 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 |
Admin (Diskussion | Beiträge) 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.'); | |||
} | |||
}); | |||