„Modul:AufEinWortLeserschaft“ – Versionsunterschied
Erscheinungsbild
Die Seite wurde neu angelegt: „-- Module:Leserschaft local p = {} local function trim(s) if not s then return "" end -- UTF-8 safe trim 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 -- akzeptiere Komma oder Semikolon als Trenner for part in mw.ustring.gmatch(s, "[^,;]+") do local t = trim(part) if t ~= "" then table.insert(parts, t) end end return parts e…“ |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
-- Module:Leserschaft | -- Module:Leserschaft (überarbeitet) | ||
local p = {} | local p = {} | ||
local function trim(s) | local function trim(s) | ||
if not s then return "" end | if not s then return "" end | ||
return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")) | return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")) | ||
end | end | ||
| Zeile 11: | Zeile 10: | ||
local parts = {} | local parts = {} | ||
if not s or s == "" then return parts end | if not s or s == "" then return parts end | ||
-- | -- Komma, Semikolon oder Zeilenumbruch als Trenner akzeptieren | ||
for part in mw.ustring.gmatch(s, "[^,;]+") do | for part in mw.ustring.gmatch(s, "[^,;\n]+") do | ||
local t = trim(part) | local t = trim(part) | ||
if t ~= "" then table.insert(parts, t) end | if t ~= "" then table.insert(parts, t) end | ||
| Zeile 20: | Zeile 19: | ||
function p.leserschaft(frame) | function p.leserschaft(frame) | ||
local input = frame.args[1] or frame:getParent().args.Leserschaft or "" | 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 | if #names == 0 then return "" end | ||
local seen = {} | |||
local sema = {} | local sema = {} | ||
local links = {} | local links = {} | ||
for _, name in ipairs(names) do | for _, name in ipairs(names) do | ||
-- | -- Normalisiere mehrfachen Leerraum | ||
local page = mw.ustring.gsub(name, "%s+", " ") | 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 | 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 | end | ||
return p | return p | ||
Version vom 19. August 2025, 04:53 Uhr
-- 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