Vorlage:Moduldokumentation

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

Automatisch anhand des aktuellen Datums Bearbeiten

{{#invoke:Symboltage|render}}

Gezielt über Symbol-ID Bearbeiten

{{#invoke:Symboltage|render|id=krebs}}

Mit erweiterten Optionen 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 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 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 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 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