MediaWiki:Common.js: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Asphyx (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Asphyx (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
Zeile 3: | Zeile 3: | ||
console.log("Common.js wird geladen!"); | console.log("Common.js wird geladen!"); | ||
// Liste der Standard-Menüs, die eingeklappt starten (TOOLBOX | // Liste der Standard-Menüs, die eingeklappt starten (TOOLBOX entfernt) | ||
var defaultCollapsed = ['navigation', 'SEARCH', ' | var defaultCollapsed = ['navigation', 'SEARCH', 'LANGUAGES']; | ||
// Liste der Portale, die klappbar sein sollen (ab HOSTING) | |||
var collapsiblePortals = ['HOSTING', 'DOMAINS']; | |||
// Alle Vector-Menü-Portale durchlaufen | // Alle Vector-Menü-Portale durchlaufen | ||
Zeile 14: | Zeile 16: | ||
var portalName = portalId ? portalId.replace('p-', '') : ''; | var portalName = portalId ? portalId.replace('p-', '') : ''; | ||
// Nur Portale mit Untermenüs | // Nur Portale mit Untermenüs (mindestens 1 <li>) und in collapsiblePortals bearbeiten | ||
if ($content.find('li').length > 0) { | if ($content.find('li').length > 0 && collapsiblePortals.includes(portalName)) { | ||
console.log("Portal:", portalName, "Untermenüs:", $content.find('li').length); | console.log("Portal:", portalName, "Untermenüs:", $content.find('li').length); | ||
Zeile 33: | Zeile 35: | ||
}); | }); | ||
// | // Klappzustand aus localStorage laden, sonst Standard verwenden | ||
var isOpen = !defaultCollapsed.includes(portalName); | var savedState = localStorage.getItem('menu-state-' + portalName); | ||
var isOpen = savedState !== null ? (savedState === 'open') : !defaultCollapsed.includes(portalName); | |||
if (isOpen) { | if (isOpen) { | ||
$content.show(); | $content.show(); | ||
Zeile 51: | Zeile 55: | ||
$content.slideUp(300); | $content.slideUp(300); | ||
$indicator.css('transform', 'rotate(-90deg)'); | $indicator.css('transform', 'rotate(-90deg)'); | ||
localStorage.setItem('menu-state-' + portalName, 'closed'); | |||
} else { | } else { | ||
$content.slideDown(300); | $content.slideDown(300); | ||
$indicator.css('transform', 'rotate(0deg)'); | $indicator.css('transform', 'rotate(0deg)'); | ||
localStorage.setItem('menu-state-' + portalName, 'open'); | |||
} | } | ||
isOpen = !isOpen; // Zustand umschalten | isOpen = !isOpen; // Zustand umschalten |
Version vom 30. März 2025, 11:23 Uhr
/* Das folgende JavaScript wird für alle Benutzer geladen. */
$(document).ready(function() {
console.log("Common.js wird geladen!");
// Liste der Standard-Menüs, die eingeklappt starten (TOOLBOX entfernt)
var defaultCollapsed = ['navigation', 'SEARCH', 'LANGUAGES'];
// Liste der Portale, die klappbar sein sollen (ab HOSTING)
var collapsiblePortals = ['HOSTING', 'DOMAINS'];
// Alle Vector-Menü-Portale durchlaufen
$('.vector-menu-portal').each(function() {
var $portal = $(this);
var $header = $portal.find('.vector-menu-heading');
var $content = $portal.find('.vector-menu-content-list');
var portalId = $portal.attr('id'); // z. B. "p-HOSTING"
var portalName = portalId ? portalId.replace('p-', '') : '';
// Nur Portale mit Untermenüs (mindestens 1 <li>) und in collapsiblePortals bearbeiten
if ($content.find('li').length > 0 && collapsiblePortals.includes(portalName)) {
console.log("Portal:", portalName, "Untermenüs:", $content.find('li').length);
// Indikator hinzufügen (▼ für ausgeklappt, ▶ für eingeklappt)
$header.prepend('<span class="menu-indicator">▼</span> ');
// Styling
$header.css({
'cursor': 'pointer',
'font-weight': 'bold',
'display': 'flex',
'align-items': 'center'
});
$header.find('.menu-indicator').css({
'margin-right': '5px',
'transition': 'transform 0.3s ease'
});
// Klappzustand aus localStorage laden, sonst Standard verwenden
var savedState = localStorage.getItem('menu-state-' + portalName);
var isOpen = savedState !== null ? (savedState === 'open') : !defaultCollapsed.includes(portalName);
if (isOpen) {
$content.show();
$header.find('.menu-indicator').css('transform', 'rotate(0deg)');
} else {
$content.hide();
$header.find('.menu-indicator').css('transform', 'rotate(-90deg)');
}
// Klick-Event mit synchroner Animation
$header.click(function(e) {
e.preventDefault();
var $indicator = $header.find('.menu-indicator');
if (isOpen) {
$content.slideUp(300);
$indicator.css('transform', 'rotate(-90deg)');
localStorage.setItem('menu-state-' + portalName, 'closed');
} else {
$content.slideDown(300);
$indicator.css('transform', 'rotate(0deg)');
localStorage.setItem('menu-state-' + portalName, 'open');
}
isOpen = !isOpen; // Zustand umschalten
});
}
});
});