Modul:Versionsschutz/Level
Beschreibung[Quelltext bearbeiten]
Dieses Modul erzeugt automatisch eine Anzeige des aktiven Seitenschutzes – bestehend aus:
- einem Padlock-Icon (oben rechts auf der Seite),
- einer Hinweisbox im Seiteninhalt,
- sowie einer zugehörigen Kategorie.
Es funktioniert vollständig ohne manuelle Parameter und ermittelt Schutzstufe, Ablaufdatum und Benutzergruppe aus der aktuellen Seite. Optional kann ein Grund übergeben werden.
Aufbau[Quelltext bearbeiten]
Das Modul besteht aus einem Hauptmodul und mehreren Submodulen, es nutzt zudem weitere allgemeine Hilfsmodule:
Submodule[Quelltext bearbeiten]
| Modul | Funktion |
|---|---|
| Modul:Versionsschutz | Hauptmodul, erzeugt Padlock, Box und Kategorie |
| Modul:Versionsschutz/Konfig | Konfigurationsdaten (Icons, Texte, Farben, Kategorien) |
| Modul:Versionsschutz/Level | Ermittelt aktivste Schutzstufe (nach Priorität) |
| Modul:Versionsschutz/Ablauf | Ermittelt das Ablaufdatum eines Schutzes (falls gesetzt) |
Hilfsmodule[Quelltext bearbeiten]
| Modul | Funktion |
|---|---|
| Modul:Dateilink | Gibt formatierte Dateilinks mit Titel, Größe etc. zurück |
| Modul:DateFormat | Gibt ISO-Zeitstempel im lesbaren Format aus |
Verwendung[Quelltext bearbeiten]
Einbindung per Vorlage[Quelltext bearbeiten]
Empfohlen über die Wrapper-Vorlage {{Versionsschutz}}, z. B.:
{{Versionsschutz|Vandalismus}}
Siehe auch
Direktaufruf per #invoke (nicht empfohlen)[Quelltext bearbeiten]
{{#invoke:Versionsschutz|main}}
Parameter[Quelltext bearbeiten]
Nur ein Parameter ist vorgesehen (optional):
Grund=- Gibt einen individuellen Hinweistext zum Schutzgrund an (wird als Text unterhalb der Hinweisbox angezeigt).
Funktionsweise[Quelltext bearbeiten]
- Das Modul ruft alle bekannten Schutzarten (z. B.
edit,move,upload) überPROTECTIONLEVELab. - Die aktivste Schutzstufe wird aus einer vordefinierten Prioritätenliste ermittelt.
- Ist ein Schutz aktiv, wird abhängig von der Konfiguration:
- das passende Icon gewählt (inkl. Unterscheidung bei temporären Schutzarten),
- das Ablaufdatum formatiert,
- ein Tooltip generiert,
- eine Hinweisbox mit erklärendem Text eingeblendet,
- eine Kategorie zugewiesen.
Temporäre Schutzarten[Quelltext bearbeiten]
Das Modul erkennt temporäre Schutzarten anhand des Ablaufdatums (`expiry ≠ infinity`)
In diesem Fall werden spezielle Icons mit Uhrsymbol genutzt (z. B. Protection-temp-sysop.svg).
Icons[Quelltext bearbeiten]
Das Modul unterstützt differenzierte Icons für:
- Aktionen:
edit,move,create,upload - Schutzstufen:
sysop,autoconfirmed,confirmed,templateprotection,policyprotection - temporäre Varianten: eigene Icons mit
-temp-im Dateinamen
Kategorisierung[Quelltext bearbeiten]
Wird automatisch gesetzt auf Basis der Konfiguration. Beispiele:
[[Kategorie:Bearbeitungsgeschützte Inhalte]][[Kategorie:Vorlagengeschützte Inhalte]]
Einschränkungen[Quelltext bearbeiten]
- Es wird immer nur eine Schutzstufe pro Seite angezeigt – die mit der höchsten Priorität.
- Kaskadierende Schutzstufen (cascade) werden derzeit nicht ausgewertet.
- Der Schutzgrund kann nicht automatisch ausgelesen werden – nur manuell übergeben.
To-Do / Ausblick[Quelltext bearbeiten]
- Automatische Integration per Hook (statt manuelle Einbindung)
- Kaskadenerkennung für eingebundene Seiten
- Mehrsprachigkeit über zentrale JSON-Datei
- Konfigurierbare Textbausteine
Siehe auch
local p = {}
-- Gibt das Schutzlevel für eine bestimmte Aktion (edit, move, upload) auf einer Seite zurück
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
-- Sonderfälle: JS/CSS-Seiten → interfaceadmin
if title.namespace == 8 then
if title.text:sub(-3) == '.js'
or title.text:sub(-4) == '.css'
or title.contentModel == 'javascript'
or title.contentModel == 'css' then
return 'interfaceadmin'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then
return 'interfaceadmin'
elseif title.contentModel == 'json' then
return 'sysop'
end
end
-- Fallback nach Level
if level == 'templateprotection' then
return 'templatemaster'
elseif level == 'policyprotection' then
return 'policyeditor'
elseif level == 'sysop' then
return 'sysop'
elseif level == 'autoconfirmed' or level == 'confirmed' then
return 'autoconfirmed'
elseif level then
return level
else
return '*' -- keine Einschränkung
end
end
-- Wrapper für #invoke-Aufrufe
setmetatable(p, {
__index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end
})
return p