Zum Inhalt springen

Modul:AufEinWortLeserschaft

aus AufEinWort, der freien Forschung
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 19. August 2025 um 04:53 Uhr durch Nikolaos (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

-- 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