Modul:AufEinWortTeilnehmer
Erscheinungsbild
-- Module:Teilnehmer (mit Kategorie-Erzeugung)
local p = {}
local function trim(s)
if not s then return "" end
return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
end
local function split_on_separators(s)
local parts = {}
if not s or s == "" then return parts end
-- Komma, Semikolon oder Zeilenumbruch als Trenner akzeptieren
for part in mw.ustring.gmatch(s, "[^,;\n]+") do
local t = trim(part)
if t ~= "" then table.insert(parts, t) end
end
return parts
end
-- sanitize category part (vermeidet z.B. doppelte / unnötige whitespace)
local function normalize_name_for_cat(name)
if not name then return "" end
-- mehrfachen Leerraum reduzieren
local n = mw.ustring.gsub(name, "%s+", " ")
-- führende/trailing whitespace entfernen
n = trim(n)
-- einfache Sicherheitsreinigung: ']]' entfernen, falls vorhanden
n = mw.ustring.gsub(n, "%]%]", "")
return n
end
function p.teilnehmer(frame)
-- 1. Input (positional oder Named 'Teilnehmer')
local input = frame.args[1] or frame:getParent().args.Teilnehmer or ""
input = tostring(input)
-- 2. Optional: named args für Verhalten
local createCats = frame.args.createCats or frame:getParent().args.createCats or "yes"
local catPrefix = frame.args.catPrefix or frame:getParent().args.catPrefix or "Teilnehmer"
createCats = mw.ustring.lower(tostring(createCats))
if createCats ~= "yes" and createCats ~= "y" and createCats ~= "true" then
createCats = "no"
else
createCats = "yes"
end
local names = split_on_separators(input)
if #names == 0 then return "" end
local seen = {}
local sema = {}
local links = {}
local cats = {}
for _, name in ipairs(names) do
local page = normalize_name_for_cat(name)
if page ~= "" and not seen[page] then
seen[page] = true
-- Property-Zuweisungen (für SMW), unsichtbar verpackt
table.insert(sema, "[[ist Teilnehmer::" .. page .. "]]")
-- Sichtbarer Link
table.insert(links, "[[" .. page .. "]]")
-- Kategorie erzeugen, falls aktiviert
if createCats == "yes" then
-- Kategorie-Name: <catPrefix> <Name>
local catname = catPrefix .. " " .. page
-- Safety: entferne ']]' aus Kategorie-Teil, falls vorhanden
catname = mw.ustring.gsub(catname, "%]%]", "")
table.insert(cats, "[[Kategorie:" .. catname .. "]]")
end
end
end
-- Hidden wrappers: Properties und Category-Tags bleiben unsichtbar im Inhalt,
-- aber werden vom Parser verarbeitet (SMW & Kategorien).
local hidden = ""
if #sema > 0 then
hidden = hidden .. '<span class="smw-teilnehmer-hidden" style="display:none">' .. table.concat(sema, "") .. '</span>'
end
if #cats > 0 then
hidden = hidden .. '<span class="smw-teilnehmer-cats" style="display:none">' .. table.concat(cats, "") .. '</span>'
end
local visible = ""
if #links > 0 then
visible = table.concat(links, ", ")
end
return hidden .. visible
end
return p