MediaWiki:Common.js: Unterschied zwischen den Versionen
Aus Phoenix-Larp Wiki
Becko (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
Becko (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: Manuelle Zurücksetzung |
||
| (5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
/* Das folgende JavaScript wird für alle Benutzer geladen. */ | /* Das folgende JavaScript wird für alle Benutzer geladen. */ | ||
mw.loader.using(['mediawiki.util']).done(function () { | mw.loader.using(['mediawiki.util']).done(function () { | ||
// Nur auf schmalen Screens aktiv | // Nur auf schmalen Screens aktiv | ||
if (!window.matchMedia('(max-width: 768px)').matches) return; | if (!window.matchMedia('(max-width: 768px)').matches) return; | ||
| Zeile 140: | Zeile 30: | ||
if (mql.matches) closeMenu(); | if (mql.matches) closeMenu(); | ||
}); | }); | ||
}); | |||
// MediaWiki:Common.js (ggf. zusätzlich in MediaWiki:Mobile.js, falls MobileFrontend aktiv ist) | |||
mw.loader.using(['mediawiki.util']).done(function () { | |||
function findSourceBody() { | |||
var sel = [ | |||
'#p-usertools .mw-portlet-body', | |||
'#p-user-tools .mw-portlet-body', | |||
'#p-personal .mw-portlet-body' // Fallback – hier sitzen "Anmelden", "Benutzerkonto…" | |||
]; | |||
for (var i = 0; i < sel.length; i++) { | |||
var $el = $(sel[i]); | |||
if ($el.length) return $el; | |||
} | |||
return $(); // leer | |||
} | |||
function ensureClonePortlet($nav, headingText) { | |||
var $clone = $('#p-usertools-left'); | |||
if ($clone.length) return $clone.find('.mw-portlet-body'); | |||
// Portlet mit Standard-Classes => erbt 1:1 den Skin-Stil | |||
$clone = $( | |||
'<div id="p-usertools-left" class="mw-portlet" role="navigation" aria-label="' + headingText + '">' + | |||
'<h3>' + $('<div>').text(headingText).html() + '</h3>' + | |||
'<div class="mw-portlet-body"></div>' + | |||
'</div>' | |||
); | |||
// ANS ENDE der bestehenden Portlets hängen -> "unter die bisherigen Menüpunkte" | |||
$nav.append($clone); | |||
return $clone.find('.mw-portlet-body'); | |||
} | |||
function cloneUserStuffIntoLeftMenu() { | |||
var $srcBody = findSourceBody(); | |||
if (!$srcBody.length) return; | |||
// Ziel-Container: zuerst #mw-navigation (Anisa), sonst #column-navigation als Fallback | |||
var $nav = $('#mw-navigation'); | |||
if (!$nav.length) $nav = $('#column-navigation'); | |||
if (!$nav.length) return; | |||
// Überschrift übernehmen (z.B. "Benutzer" oder "Persönliche Werkzeuge") | |||
var heading = ($srcBody.closest('.mw-portlet').children('h3').first().text() || 'Benutzer').trim(); | |||
var $dstBody = ensureClonePortlet($nav, heading); | |||
if (!$dstBody.length) return; | |||
// Ziel leeren, dann frische KOPIE der direkten Kinder einfügen | |||
$dstBody.empty(); | |||
$srcBody.children().each(function () { | |||
var $clone = $(this).clone(true, true); | |||
// doppelte IDs vermeiden | |||
$clone.find('[id]').addBack('[id]').removeAttr('id'); | |||
$dstBody.append($clone); | |||
}); | |||
} | |||
function apply() { | |||
cloneUserStuffIntoLeftMenu(); | |||
} | |||
apply(); | |||
mw.hook('wikipage.content').add(apply); // bei Soft-Navigation erneut | |||
}); | }); | ||
Aktuelle Version vom 9. November 2025, 20:35 Uhr
/* Das folgende JavaScript wird für alle Benutzer geladen. */
mw.loader.using(['mediawiki.util']).done(function () {
// Nur auf schmalen Screens aktiv
if (!window.matchMedia('(max-width: 768px)').matches) return;
// Burger-Button einfügen (mit ARIA)
var $btn = $('<button class="mw-burger" aria-label="Menü" aria-controls="column-navigation" aria-expanded="false"><span></span></button>');
$('body').append($btn);
// Overlay zum Schließen
var $overlay = $('<div class="nav-overlay" tabindex="-1" aria-hidden="true"></div>');
$('body').append($overlay);
function closeMenu() {
$('body').removeClass('nav-open');
$btn.attr('aria-expanded', 'false');
}
function toggleMenu() {
var open = !$('body').hasClass('nav-open');
$('body').toggleClass('nav-open', open);
$btn.attr('aria-expanded', String(open));
}
$btn.on('click', toggleMenu);
$overlay.on('click', closeMenu);
$(document).on('keydown', function (e) { if (e.key === 'Escape') closeMenu(); });
// Schließt das Menü, wenn Viewport wieder breit wird
window.matchMedia('(min-width: 769px)').addEventListener('change', function (mql) {
if (mql.matches) closeMenu();
});
});
// MediaWiki:Common.js (ggf. zusätzlich in MediaWiki:Mobile.js, falls MobileFrontend aktiv ist)
mw.loader.using(['mediawiki.util']).done(function () {
function findSourceBody() {
var sel = [
'#p-usertools .mw-portlet-body',
'#p-user-tools .mw-portlet-body',
'#p-personal .mw-portlet-body' // Fallback – hier sitzen "Anmelden", "Benutzerkonto…"
];
for (var i = 0; i < sel.length; i++) {
var $el = $(sel[i]);
if ($el.length) return $el;
}
return $(); // leer
}
function ensureClonePortlet($nav, headingText) {
var $clone = $('#p-usertools-left');
if ($clone.length) return $clone.find('.mw-portlet-body');
// Portlet mit Standard-Classes => erbt 1:1 den Skin-Stil
$clone = $(
'<div id="p-usertools-left" class="mw-portlet" role="navigation" aria-label="' + headingText + '">' +
'<h3>' + $('<div>').text(headingText).html() + '</h3>' +
'<div class="mw-portlet-body"></div>' +
'</div>'
);
// ANS ENDE der bestehenden Portlets hängen -> "unter die bisherigen Menüpunkte"
$nav.append($clone);
return $clone.find('.mw-portlet-body');
}
function cloneUserStuffIntoLeftMenu() {
var $srcBody = findSourceBody();
if (!$srcBody.length) return;
// Ziel-Container: zuerst #mw-navigation (Anisa), sonst #column-navigation als Fallback
var $nav = $('#mw-navigation');
if (!$nav.length) $nav = $('#column-navigation');
if (!$nav.length) return;
// Überschrift übernehmen (z.B. "Benutzer" oder "Persönliche Werkzeuge")
var heading = ($srcBody.closest('.mw-portlet').children('h3').first().text() || 'Benutzer').trim();
var $dstBody = ensureClonePortlet($nav, heading);
if (!$dstBody.length) return;
// Ziel leeren, dann frische KOPIE der direkten Kinder einfügen
$dstBody.empty();
$srcBody.children().each(function () {
var $clone = $(this).clone(true, true);
// doppelte IDs vermeiden
$clone.find('[id]').addBack('[id]').removeAttr('id');
$dstBody.append($clone);
});
}
function apply() {
cloneUserStuffIntoLeftMenu();
}
apply();
mw.hook('wikipage.content').add(apply); // bei Soft-Navigation erneut
});