Modul:HilfeNavigation
Modulpflege & Verwendung
Dieses Modul erzeugt die Navigationsstruktur für den Hilfebereich.
Es rendert eine mehrstufige, einklappbare Seitenleiste auf Basis einer externen JSON-Datenquelle.
Die Ausgabe ist bewusst frei von Überschriftenelementen (h2–h6), um eine Beeinflussung des Seiten-Inhaltsverzeichnisses (TOC) zu vermeiden. Die Ein- und Ausklapp-Logik wird über JavaScript und CSS gesteuert.
Zweck Bearbeiten
Das Modul dient ausschließlich der Darstellung einer konsistenten Navigationsstruktur für Hilfeseiten. Es trifft keine inhaltlichen Entscheidungen und filtert keine Daten.
- Struktur und Reihenfolge werden vollständig durch die JSON-Datei vorgegeben
- Darstellung und Interaktion erfolgen über CSS und JavaScript
- Das Modul selbst erzeugt ausschließlich sauberes HTML
Datenquelle Bearbeiten
Die Navigationsstruktur wird aus folgender Seite geladen:
Die Datei enthält eine Liste von Hauptgruppen, jeweils mit zugehörigen Seiten und optionalen Untergruppen.
Datenstruktur Bearbeiten
Hauptgruppen Bearbeiten
Eine Hauptgruppe besteht aus einem Gruppentitel und einer Seitenliste:
{
"group": "Seitenbearbeitung",
"pages": [ ... ]
}
Seiten Bearbeiten
Eine Seite wird als einfacher Link definiert:
{
"link": "Hilfe:Bearbeiten",
"label": "Seiten bearbeiten"
}
Untergruppen Bearbeiten
Untergruppen erlauben eine weitere Hierarchieebene:
{
"group": "Vorlagenprogrammierung",
"pages": [
{
"link": "Hilfe:Vorlagenprogrammierung",
"label": "Einstieg"
}
]
}
Untergruppen können beliebig verschachtelt werden.
HTML-Struktur Bearbeiten
Das Modul erzeugt eine strikt vorhersehbare DOM-Struktur:
- Gruppenüberschriften werden als
<div class="help-sidebar-header">ausgegeben - Die zugehörige Liste folgt jeweils direkt als
<ul> - Untergruppen befinden sich innerhalb eines
<li>
Diese Struktur ist Voraussetzung für das zugehörige CSS- und JavaScript-Verhalten.
Interaktion Bearbeiten
Das Modul selbst implementiert keine Interaktionslogik.
- Das Ein- und Ausklappen erfolgt über JavaScript
- Der Zustand wird über das Attribut
aria-expandedam Header gesteuert - Die Darstellung (Pfeile, Abstände, Animationen) erfolgt vollständig per CSS
Barrierefreiheit Bearbeiten
Die klickbaren Gruppenüberschriften erhalten das Attribut: role="button"
Der aktuelle Zustand wird über aria-expanded abgebildet.
Die Navigation ist damit für Screenreader nachvollziehbar.
Einschränkungen Bearbeiten
- Das Modul validiert die Daten nicht inhaltlich
- Leere oder fehlerhafte Einträge in der JSON-Datei werden ungefiltert gerendert
- Die Darstellung ist abhängig von den begleitenden UI-Styles
Wartung Bearbeiten
Änderungen an der Navigationsstruktur erfolgen ausschließlich in der JSON-Datei. Anpassungen an Optik oder Verhalten sind im jeweiligen UI-Gadget bzw. Stylesheet vorzunehmen.
Das Modul selbst sollte nur bei strukturellen Änderungen angepasst werden.
Siehe auch
- Modul:HilfeNavigation/data.json – Datenquelle für Menüstrukur
- Vorlage:HilfeNavigation – Wrapper-Vorlage zum Einbau in Seiten
- MediaWiki:Gadget-NSHilfe.css – Style-Definitionen (nur durch Oberflächen-Administratoren erditierbar)
- MediaWiki:Gadget-NSHilfe.js – Java-Skript-Funktionen (nur durch Oberflächen-Administratoren erditierbar)
local p = {}
local JsonLoader = require("Modul:JsonLoader")
function p.render(frame)
local currentTitle = mw.title.getCurrentTitle().prefixedText
local data, err = JsonLoader.load("Modul:HilfeNavigation/data.json")
if not data then
return "Fehler beim Laden: " .. (err or "unbekannt")
end
-- WICHTIG: KEIN äußerer Wrapper hier! Der kommt aus der Vorlage.
local html = mw.html.create()
-- Rekursive Funktion für Seiten & Untergruppen
local function render_list_items(parent_html_node, page_list)
local ul = parent_html_node:tag("ul")
for _, item in ipairs(page_list) do
local li = ul:tag("li")
-- Fall 1: normaler Link
if item.link and item.label then
if item.link == currentTitle then
li:addClass("active")
end
li:wikitext(string.format("[[%s|%s]]", item.link, item.label))
-- Fall 2: Untergruppe
elseif item.group and item.pages then
li:addClass("help-sidebar-subgroup")
-- klickbarer Header (TOC-safe)
li:tag("div")
:addClass("help-sidebar-header")
:attr("role", "button")
:attr("aria-expanded", "false")
:wikitext(item.group)
-- rekursiv: Unterliste direkt danach
render_list_items(li, item.pages)
end
end
end
-- Hauptgruppen (Ebene 0)
for _, groupData in ipairs(data) do
html:tag("div")
:addClass("help-sidebar-header")
:attr("role", "button")
:attr("aria-expanded", "false")
:wikitext(groupData.group)
render_list_items(html, groupData.pages)
end
return tostring(html)
end
return p