Modul:AufEinWortLeserschaft
Erscheinungsbild
-- Module:Leserschaft (überarbeitet)
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
function p.leserschaft(frame)
local input = frame.args[1] or frame:getParent().args.Leserschaft or ""
input = tostring(input)
-- Falls der Editor versehentlich die ganze Eingabe als ein Item in '{{{Leserschaft}}}' belässt,
-- trotzdem robust splitten:
local names = split_on_separators(input)
if #names == 0 then return "" end
local seen = {}
local sema = {}
local links = {}
for _, name in ipairs(names) do
-- Normalisiere mehrfachen Leerraum
local page = mw.ustring.gsub(name, "%s+", " ")
if not seen[page] then
seen[page] = true
-- Property-Zuweisungen (für SMW), werden aber versteckt ausgegeben
table.insert(sema, "[[hat Leserschaft::" .. page .. "]]")
-- Sichtbarer Link (rot, falls Seite fehlt)
table.insert(links, "[[" .. page .. "]]")
end
end
-- Hidden wrapper: die Property-Tags bleiben im Quelltext (SMW liest sie),
-- sind aber für Leser unsichtbar. So vermeiden wir die doppelte sichtbare Ausgabe.
local hidden = ""
if #sema > 0 then
hidden = '<span class="smw-leserschaft-hidden" style="display:none">' .. table.concat(sema, "") .. '</span>'
end
return hidden .. table.concat(links, ", ")
end
return p