Zum Inhalt springen

Modul:Symboltage

Aus Wikonia

Vorlage:Moduldokumentation

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]


-- 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