Modul:Symboltage
Beschreibung[Quelltext bearbeiten]
Dieses Modul zeigt automatisch Symbole zu wichtigen Gedenk-, Aktions- oder Haltungstagen an – etwa zum Pride Month, zum Welt-AIDS-Tag oder zum Weltkrebstag. Die Anzeige basiert auf einem vordefinierten Datum (aktuelles Tages- oder Monatsdatum) oder kann gezielt über eine Symbol-ID gesteuert werden.
Verwendung[Quelltext bearbeiten]
Automatisch anhand des aktuellen Datums[Quelltext bearbeiten]
{{#invoke:Symboltage|render}}
Gezielt über Symbol-ID[Quelltext bearbeiten]
{{#invoke:Symboltage|render|id=krebs}}
Mit erweiterten Optionen[Quelltext bearbeiten]
{{#invoke:Symboltage|render|id=aids|style=badge|text=kurz|link=Wikonia:Mit Achtung/Aids}}
{{#invoke:Symboltage|render|id=psyche|text=custom=Wir zeigen Gesicht für mentale Gesundheit}}
Parameter[Quelltext bearbeiten]
| Parameter | Typ | Beschreibung |
|---|---|---|
id |
optional | explizite Symbol-ID (z. B. pride, krebs, aids)
|
style |
optional | Darstellungsform: icon (Standard), badge, flag, bar
|
text |
optional | Textform: none, kurz, lang (Standard), custom=...
|
force |
optional | Erzwingt Anzeige unabhängig vom Datum (z. B. in Doku oder Tests) |
link |
optional | Überschreibt das Linkziel des Symbols |
linktext |
optional | Überschreibt den anzuzeigenden Linktext |
Datenquelle[Quelltext bearbeiten]
Die verwalteten Symboltage werden in Modul:Symboltage/data gepflegt. Jeder Eintrag hat einen Schlüssel im Format MM-DD (z. B. 06-01 für 1. Juni) oder MM für Monatsereignisse. Zusätzlich gibt es eine byId-Liste für gezielten Zugriff.
Hinweise[Quelltext bearbeiten]
- Dieses Modul unterstützt nur UTF-8 und Wikimedia Commons-kompatible Dateinamen für Bilddateien.
- Bildgrößen, Layouts und Ausrichtungslogik werden in der Wrapper-Vorlage (optional) oder durch CSS geregelt.
- Die Anzeige auf der Hauptseite oder bestimmten Namensräumen kann automatisiert erfolgen.
Siehe auch[Quelltext bearbeiten]
- Vorlage:Symboltage – Für den Einbau vorgesehene Wrapper-Vorlage
- Wikonia:Mit Achtung! – Themenseite zu Haltung & Symboltagen
- Modul:Symboltage/data – Konfigurationsdaten
-- Modul:Symboltage
-- Gibt ein Symbol zu einem bestimmten Datum oder expliziten ID aus
local p = {}
local data = mw.loadData("Modul:Symboltage/data")
-- Hilfsfunktionen
local function getDateKey()
local ts = os.date("!*t")
return string.format("%02d-%02d", ts.month, ts.day), string.format("%02d", ts.month)
end
local function renderImage(sym)
return string.format("[[File:%s|40px|alt=%s]]", sym.image, sym.alt or sym.name)
end
local function renderText(sym, textMode)
if textMode == "none" or textMode == "0" then
return ""
elseif textMode == "kurz" then
return sym.name
elseif textMode and textMode:match("^custom=") then
return textMode:sub(8)
else
return string.format("'''%s''' – %s", sym.name, sym.label or "")
end
end
local function makeLink(link, linktext)
if not link then return "" end
if not linktext or linktext == "" then linktext = "Mehr erfahren" end
local isInternal = not link:match("^https?://")
if isInternal then
return string.format("[[%s|%s]]", link, linktext)
else
return string.format("[%s %s]", link, linktext)
end
end
-- ID-Suchindex
local dataById = {}
for k, v in pairs(data) do
if v.id then
dataById[v.id] = v
end
end
-- Hauptfunktion
p.render = function(frame)
local args = frame:getParent().args
local id = args["id"]
local dateKey, monthKey = getDateKey()
local symbol
-- Symbolobjekt finden
if not id or id == "auto" then
symbol = data[dateKey] or data[monthKey]
else
symbol = data[id] or dataById[id]
end
-- Keine Daten gefunden
if not symbol then return "" end
-- Datum prüfen (außer force)
if not args["force"] and symbol.date and symbol.date ~= dateKey and symbol.date ~= monthKey then
return ""
end
-- Parameter
local style = args["style"] or symbol.style or "icon"
local text = args["text"] or "lang"
local link = args["link"] or symbol.link
-- link ersatzweise entfernen --
if link == "0" then
link = nil
elseif not link or link == "" then
link = symbol.link
end
local linktext = args["linktext"] or symbol.linktext
-- Style: icon → nur Bild
if style == "icon" then
return renderImage(symbol)
-- Style: flag → leerer DIV (z. B. mit Farbverlauf)
elseif style == "flag" then
local flag = mw.html.create("div")
flag:addClass("symboltag-flag"):addClass("symboltag-" .. (symbol.id or "generic"))
return tostring(flag)
-- Style: bar → schmaler Balken
elseif style == "bar" then
local bar = mw.html.create("div")
bar:addClass("symboltag-bar"):addClass("symboltag-" .. (symbol.id or "generic"))
return tostring(bar)
-- Style: badge → Bild + Text + Link kompakt
elseif style == "badge" then
local badge = mw.html.create("div"):addClass("symboltag-badge"):addClass("symboltag-" .. (symbol.id or "generic"))
badge:tag("span"):addClass("symboltag-icon"):wikitext(renderImage(symbol))
badge:tag("span"):addClass("symboltag-label"):wikitext(renderText(symbol, text))
if link then
badge:tag("span"):addClass("symboltag-link"):wikitext(makeLink(link, linktext))
end
return tostring(badge)
-- Fallback: Bild + Text + Link gestapelt
else
local html = mw.html.create("div"):addClass("symboltag"):addClass("symboltag-" .. (symbol.id or "generic"))
html:tag("div"):wikitext(renderImage(symbol))
html:tag("div"):wikitext(renderText(symbol, text))
if link then
html:tag("div"):wikitext(makeLink(link, linktext))
end
return tostring(html)
end
end
return p