Modul:Attribut

Aus FürthWiki

Version vom 8. Februar 2026, 19:33 Uhr von HeikoBot (Diskussion | Beiträge) (+ getAttrAttributes(), attrText())

Seiten-Übersicht

Zur Klasse Attribut gehörende Seiten:
Hauptseite Unterseiten
Allgemein
Faktenbox Vorlagen
Formulare
Module
Abfrage Vorlagen


Formulare


Sonstige


getAttrAttributes()

Gibt die Attribute eines Attributs zurück, z. B. Einzahl-/Mehrzahl-Anzeigetexte. Außerdem liefert es:

  • ValueQuery = Abfragestring z. B. ?BietetKartenzahlung#tick=Kartenzahlung möglich

attrText() / AttrText()

Gibt Anzeigetext eines Attributs zurück.

AttrInfo()

Gibt die PopUp-Info zurück entsprechend {{#info:...|note}}. Der Infotext stammt vom jeweiligen Attribut.

attrInfotextDelimiter()

Gibt Infotext und Delimiter zurück, um damit die PopUp-Info bauen zu können. Siehe auch AttrInfo().

AttrField()

Noch nicht benutzt.

AttrValueQuery()

Noch nicht benutzt.


local p = {}

local dev = require("Modul:Development")
local str = require("Modul:String")
local htm = require("Modul:HTML")
local wor = require("Modul:Wörterbuch")
local lfd = require("Modul:LinkFormDatum")
local ber = require("Modul:Beruf")

function p.TableHeader(frame)
	-- Kommandozeile zum Debuggen:
	-- =p.TableHeader{args={"Beruf", "AbweichendeNamensform"}}
	local args = {}
	local klasse = frame.args["Klasse"]
	for i, a in ipairs(frame.args) do
		args[i] = wor.attrText(a, klasse)
	end
	return htm.tableHeader(args)
end

function p.TableLine(frame)
--	mw.log("TableLine(frame)")
	-- Kommandozeile zum Debuggen:
	-- =p.TableLine{pargs={"Test","Test3","Politiker","1. Januar 2024","2025-03-04,2026-02-03","2025,2026-02-03","Max","Mustermann","Hans Wurst"},args={nil, nil,"Beruf","Geburtsdatum","TodesdatumISO","Todesdatum","Vorname","Nachname","Person"}}
	-- =p.TableLine{pargs={"p1","p2","p3","p4","p5","p6"},args={,"A2",,"A4"}}
	local _, pargs, args = dev.GetFrameAndParentArgs(frame)
--	mw.logObject(pargs, "pargs")
--	mw.logObject(args, "args")
	-- Zeile zusammenbauen
	local line = {}
	local td_args, vorname, nachname
	for i, a in ipairs(pargs) do
		local attr = args[i]
		local val = a
		-- Sonderbehandlung Beruf
		if attr == "Beruf" then
			val = ber.berufePageLinkListe(val, ",")
		-- Sonderbehandlung Datum
		-- Reihenfolge: GeburtsdatumISO|Geburtsdatum
		-- bzw. TodesdatumISO|Todesdatum
		elseif attr == "GeburtsdatumISO" or attr == "TodesdatumISO" or
			attr == "FunktionVonISO" or attr == "FunktionBisISO" then
			td_args = "data-sort-value=\"" .. val .. "\""
			val = nil
		elseif attr == "Geburtsdatum" or attr == "Todesdatum" or
			attr == "FunktionVon" or attr == "FunktionBis" then
			val = str.splitAndStrip(val, ",")									-- als Liste behandeln
			val_tmp = ""
			for _, v in ipairs(val) do
				val_tmp = str.appendWithComma(val_tmp, lfd.formatDate(v))
			end
			val = val_tmp
			if val ~= "" and td_args ~= nil then
				val = {val, td_args = td_args}
				td_args = nil
			end
		-- Sonderbehandlung Person
		-- Reihenfolge: Vorname|Nachname|Person
		elseif attr == "Vorname" and args[i + 2] == "Person" then
			vorname = val
			val = nil
		elseif attr == "Nachname" and args[i + 1] == "Person" then
			nachname = val
			val = nil
		elseif attr == "Person" then
			local name = vorname
			if vorname ~= "" and nachname ~= "" then
				name = name .. " "
			end
			name = name .. nachname
			if name == "" then
				name = val
			end
			val = "[[" .. val .."|" .. name .. "]]"
		end
--		mw.logObject(val, "val")
		table.insert(line, val)
	end
	local t = htm.tableLine(line)
--	mw.logObject(t, "t")
	return t
end

function p.TableFooter(frame)
	return htm.TableFooter(frame)
end

function p.getAttrAttributes(attr, klasse)
	local query = {"[[Attribut:" .. attr .. "]]",
		"?Datentyp#-", mainlabel = "-", limit = 1}
	query = mw.smw.ask(query)
	if query ~= nil then
		query = query[1]
		-- subobjects abfragen
		local sub_query = {}
		for _, k in ipairs{"Default", klasse} do
			sub_query[k] = {"[[-has subobject::Attribut:" .. attr .. "]]" ..
				"[[SubObjektTyp::AttributKlasse]]" ..
				"[[KlassenName::" .. k .."]]",
				"?Einzahl", "?Mehrzahl",
				"?Delimiter", "?FieldArgs",
				"?Infotext", "?Anzeigeformat",
				mainlabel = "-", limit = 1}
			sub_query[k] = mw.smw.ask(sub_query[k]) or {}
			sub_query[k] = sub_query[k][1] or {}
		end
		-- defaults in klasse integrieren
		if klasse ~= nil then
			for a, _ in pairs(sub_query["Default"]) do
				if a ~= "Einzahl" and a ~= "Mehrzahl" then						-- Sonderbehandlung Einzahl/Mehrzahl ausschließen
					sub_query[klasse][a] =
						sub_query[klasse][a] or sub_query["Default"][a]
				end
			end
			-- Sonderbehandlung Einzahl/Mehrzahl
			if sub_query[klasse]["Einzahl"] == nil and
				sub_query[klasse]["Mehrzahl"] == nil then
				sub_query[klasse]["Einzahl"] = sub_query["Default"]["Einzahl"]
				sub_query[klasse]["Mehrzahl"] = sub_query["Default"]["Mehrzahl"]
			end
		end
		-- subobject in query integrieren
		for a, v in pairs(sub_query[klasse or "Default"]) do
			query[a] = v
		end
		-- Mehrzahl von Einzahl von Attribut-Name übernehmen
		query["Mehrzahl"] = query["Mehrzahl"] or query["Einzahl"] or attr
		query["Einzahl"] = query["Einzahl"] or attr
	end
	return query
end

function p.attrText(attr, klasse, mehrzahl)
	local query, text = p.getAttrAttributes(attr, klasse)
	if mehrzahl then
		text = query["Mehrzahl"]
	else
		text = query["Einzahl"]
	end
	return text
end

return p