Zum Inhalt springen

„Modul:AufEinWortLeserschaft“ – Versionsunterschied

aus AufEinWort, der freien Forschung
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
  -- UTF-8 safe trim
   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
   -- akzeptiere Komma oder Semikolon als Trenner
   -- 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)
  -- 1. Parameter: entweder als erstes arg oder als Named param Leserschaft
   local input = frame.args[1] or frame:getParent().args.Leserschaft or ""
   local input = frame.args[1] or frame:getParent().args.Leserschaft or ""
   local names = split_on_separators(tostring(input))
   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 Leerraum (mehrfache Leerzeichen -> 1)
     -- Normalisiere mehrfachen Leerraum
     local page = mw.ustring.gsub(name, "%s+", " ")
     local page = mw.ustring.gsub(name, "%s+", " ")
     -- Erzeuge Semantic-Property (wird unsichtbar gespeichert, falls du das möchtest)
     if not seen[page] then
    table.insert(sema, "[[hat Leserschaft::" .. page .. "]]")
      seen[page] = true
    -- Sichtbarer Link zur Seite (rot, wenn Seite nicht existiert)
      -- Property-Zuweisungen (für SMW), werden aber versteckt ausgegeben
    table.insert(links, "[[" .. page .. "]]")
      table.insert(sema, "[[hat Leserschaft::" .. page .. "]]")
      -- Sichtbarer Link (rot, falls Seite fehlt)
      table.insert(links, "[[" .. page .. "]]")
    end
   end
   end


   -- gib zuerst die Property-Tags zurück (ohne sichtbaren Text) und dann die sichtbare Liste
   -- Hidden wrapper: die Property-Tags bleiben im Quelltext (SMW liest sie),
   return table.concat(sema, "") .. table.concat(links, ", ")
  -- 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