Modul:BündelGalerie

Version vom 24. Februar 2026, 03:29 Uhr von Freya (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „local p = {} local function trim(s) if not s then return "" end return (mw.text.trim(s)) end local function splitItems(s) local out = {} if not s or s == "" then return out end for part in mw.text.gsplit(s, "%s*;%s*") do part = trim(part) if part ~= "" then table.insert(out, part) end end return out end local function findBundleLine(content, key) key = mw.ustring.lower(trim(key or "")) if key == "" then return nil end for line in mw…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Die Dokumentation für dieses Modul kann unter Modul:BündelGalerie/Doku erstellt werden

local p = {}

local function trim(s)
	if not s then return "" end
	return (mw.text.trim(s))
end

local function splitItems(s)
	local out = {}
	if not s or s == "" then return out end
	for part in mw.text.gsplit(s, "%s*;%s*") do
		part = trim(part)
		if part ~= "" then
			table.insert(out, part)
		end
	end
	return out
end

local function findBundleLine(content, key)
	key = mw.ustring.lower(trim(key or ""))
	if key == "" then return nil end

	for line in mw.text.gsplit(content or "", "\n", true) do
		local raw = trim(line)
		if raw ~= "" and raw:sub(1,1) ~= "<" then
			local k, v = raw:match("^([^=]+)=%s*(.+)$")
			if k and v then
				k = mw.ustring.lower(trim(k))
				if k == key then
					return trim(v)
				end
			end
		end
	end
	return nil
end

function p.main(frame)
	local args = frame:getParent() and frame:getParent().args or frame.args
	local bundle = args[1] or args.name or ""
	bundle = trim(bundle)

	local elementTemplate = trim(args.element or "GalerieElement") -- Name deiner Galerie-Vorlage
	local dataPage = trim(args.data or "Vorlage:BündelDaten")

	if bundle == "" then
		return '<span class="error">BündelGalerie: Kein Bündelname angegeben.</span>'
	end

	local title = mw.title.new(dataPage)
	if not title then
		return '<span class="error">BündelGalerie: Datenseite nicht gefunden: ' .. mw.text.nowiki(dataPage) .. '</span>'
	end

	local content = title:getContent() or ""
	local itemsStr = findBundleLine(content, bundle)

	if not itemsStr or itemsStr == "" then
		return '<span class="error">BündelGalerie: Bündel nicht gefunden: ' .. mw.text.nowiki(bundle) .. '</span>'
	end

	local items = splitItems(itemsStr)
	if #items == 0 then
		return '<span class="error">BündelGalerie: Bündel ist leer: ' .. mw.text.nowiki(bundle) .. '</span>'
	end

	local out = {}
	for _, item in ipairs(items) do
		table.insert(out, frame:expandTemplate{
			title = elementTemplate,
			args = { item }
		})
	end

	return table.concat(out, "\n")
end

return p