Zum Inhalt springen

Modul:Symboltage

Aus Wikonia


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), mini 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


Ausgabebespiele[Quelltext bearbeiten]

Icon[Quelltext bearbeiten]

mit typ=aids

Ausgabe-Beispiel
Rotes Band als Zeichen gegen AIDS

Mini[Quelltext bearbeiten]

mit typ=pride

Ausgabe-Beispiel
Progress-Pride-Flagge

Badge[Quelltext bearbeiten]

mit typ=europa

Ausgabe-Beispiel
Europäische Sternenflagge

Bar[Quelltext bearbeiten]

mit typ=pride

Ausgabe-Beispiel
Progress-Pride-Flagge


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"] then
	    -- Wenn kein Datum im Symbol hinterlegt oder es nicht zum heutigen Tag/Monat passt → abbrechen
	    if not symbol.date or (symbol.date ~= dateKey and symbol.date ~= monthKey) then
	        return ""
	    end
	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: mini → Icon + Name, Icon ggf. verlinkt
	elseif style == "mini" then
	    local mini = mw.html.create("div")
	        :addClass("symboltag-mini")
	        :addClass("symboltag-" .. (symbol.id or "generic"))
	
	    -- Icon (immer rendern, ggf. mit Link)
	    local imageWikitext
	    if link then
	        imageWikitext = string.format(
	            '[[File:%s|40px|alt=%s|link=%s]]',
	            symbol.image, symbol.alt or symbol.name, link
	        )
	    else
	        imageWikitext = renderImage(symbol)
	    end
	    mini:tag("span"):addClass("symboltag-icon"):wikitext(imageWikitext)
	
	    -- Name (ebenfalls klickbar, wenn Link gesetzt)
	    local nameText
	    if link then
	        nameText = makeLink(link, string.format("'''%s'''", symbol.name))
	    else
	        nameText = string.format("'''%s'''", symbol.name)
	    end
	    mini:tag("span"):addClass("symboltag-name"):wikitext(nameText)
	
	    return tostring(mini)

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