MediaWiki:Mobile.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) Die Seite wurde geleert. Markierungen: Geleert Manuelle Zurücksetzung Mobile Bearbeitung Mobile Web-Bearbeitung Erweiterte mobile Bearbeitung |
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
||
| Zeile 1: | Zeile 1: | ||
/* ADOS – Hauptkategorien ins Hamburger-Menü (MobileFrontend + Minerva) */ | |||
mw.loader.using(['mediawiki.util','mediawiki.notify']).then(function () { | |||
// === KONFIGURATION: Hauptkategorien === | |||
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"><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() { | |||
// Menü-Container in Minerva (versch. Versionen haben leicht andere Strukturen) | |||
var menu = document.querySelector('#mw-mf-page-left .menu, .drawer .menu, .menu'); | |||
if (!menu) return false; | |||
if (menu.querySelector('.ados-hauptkategorien')) return true; // schon eingefügt | |||
var firstUl = menu.querySelector('ul'); | |||
if (!firstUl) return false; | |||
firstUl.insertAdjacentHTML('afterend', buildListHTML()); | |||
return true; | |||
} | |||
function onDrawerOpen() { | |||
// Menü baut sich lazy auf – mehrmals kurz nacheinander versuchen | |||
setTimeout(tryInsertOnce, 30); | |||
setTimeout(tryInsertOnce, 200); | |||
setTimeout(tryInsertOnce, 600); | |||
} | |||
// Sofort versuchen (falls Menü schon im DOM ist) | |||
tryInsertOnce(); | |||
// Auf Klick auf den Menü-Button reagieren (verschiedene Selektoren je nach MW/Minerva) | |||
document.addEventListener('click', function (e) { | |||
if (e.target.closest('#mw-mf-main-menu-button,.mw-ui-icon-minerva-drawer,.hamburger,.toggle-list-button')) { | |||
onDrawerOpen(); | |||
} | |||
}, true); | |||
// Fallback: sobald irgendwas Menü-Ähnliches in den DOM kommt, einfügen | |||
var mo = new MutationObserver(function () { | |||
if (tryInsertOnce()) return; // einmalig einfügen | |||
}); | |||
mo.observe(document.body, { childList: true, subtree: true }); | |||
// sichtbarer Hinweis im Debugmodus | |||
if (/\bdebug=1\b/.test(location.search)) { | |||
mw.notify('Mobile.js aktiv – Hauptkategorien werden eingefügt.'); | |||
} | |||
}); | |||