„Modul:AufEinWortLeserschaft“ – Versionsunterschied
Erscheinungsbild
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
-- Module:Leserschaft ( | -- Module:Leserschaft (mit Kategorie-Erzeugung) | ||
local p = {} | local p = {} | ||
| Zeile 16: | Zeile 16: | ||
end | end | ||
return parts | 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 | end | ||
function p.leserschaft(frame) | function p.leserschaft(frame) | ||
-- 1. Input (positional oder Named 'Leserschaft') | |||
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) | 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 "AufEinWort Leserschaft" | |||
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) | local names = split_on_separators(input) | ||
if #names == 0 then return "" end | if #names == 0 then return "" end | ||
| Zeile 30: | Zeile 52: | ||
local sema = {} | local sema = {} | ||
local links = {} | local links = {} | ||
local cats = {} | |||
for _, name in ipairs(names) do | for _, name in ipairs(names) do | ||
local page = normalize_name_for_cat(name) | |||
local page = | if page ~= "" and not seen[page] then | ||
if not seen[page] then | |||
seen[page] = true | seen[page] = true | ||
-- Property-Zuweisungen (für SMW), | -- Property-Zuweisungen (für SMW), unsichtbar verpackt | ||
table.insert(sema, "[[hat Leserschaft::" .. page .. "]]") | table.insert(sema, "[[hat Leserschaft::" .. page .. "]]") | ||
-- Sichtbarer Link | -- Sichtbarer Link | ||
table.insert(links, "[[" .. page .. "]]") | 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 | ||
end | end | ||
-- Hidden | -- Hidden wrappers: Properties und Category-Tags bleiben unsichtbar im Inhalt, | ||
-- | -- aber werden vom Parser verarbeitet (SMW & Kategorien). | ||
local hidden = "" | local hidden = "" | ||
if #sema > 0 then | if #sema > 0 then | ||
hidden = '<span class="smw-leserschaft-hidden" style="display:none">' .. table.concat(sema, "") .. '</span>' | hidden = hidden .. '<span class="smw-leserschaft-hidden" style="display:none">' .. table.concat(sema, "") .. '</span>' | ||
end | |||
if #cats > 0 then | |||
hidden = hidden .. '<span class="smw-leserschaft-cats" style="display:none">' .. table.concat(cats, "") .. '</span>' | |||
end | |||
local visible = "" | |||
if #links > 0 then | |||
visible = table.concat(links, ", ") | |||
end | end | ||
return hidden .. | return hidden .. visible | ||
end | end | ||
return p | return p | ||
Aktuelle Version vom 19. August 2025, 05:13 Uhr
-- Module:Leserschaft (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.leserschaft(frame)
-- 1. Input (positional oder Named 'Leserschaft')
local input = frame.args[1] or frame:getParent().args.Leserschaft 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 "AufEinWort Leserschaft"
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, "[[hat Leserschaft::" .. 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-leserschaft-hidden" style="display:none">' .. table.concat(sema, "") .. '</span>'
end
if #cats > 0 then
hidden = hidden .. '<span class="smw-leserschaft-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