Modul:Attribut: Unterschied zwischen den Versionen

Aus FürthWiki

(+ AttrInfo(), attrInfotextDelimiter(), AttrField())
(- AttrInfo() und attrInfotextDelimiter() obsolete)
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 8: Zeile 8:
-- mw.logObject(p.getAttrAttributes("BietetKartenzahlung"))
-- mw.logObject(p.getAttrAttributes("BietetKartenzahlung"))
local query = {"[[Attribut:" .. attr .. "]]",
local query = {"[[Attribut:" .. attr .. "]]",
"?Datentyp#-", mainlabel = "-", limit = 1}
"?Datentyp#-", "?EhemalsAttribut", "?Anzeigegenauigkeit",
mainlabel = "-", limit = 1}
query = mw.smw.ask(query)
query = mw.smw.ask(query)
if query ~= nil then
if query ~= nil then
Zeile 47: Zeile 48:
query["Mehrzahl"] = query["Mehrzahl"] or query["Einzahl"] or attr
query["Mehrzahl"] = query["Mehrzahl"] or query["Einzahl"] or attr
query["Einzahl"] = query["Einzahl"] or query["Mehrzahl"] or attr
query["Einzahl"] = query["Einzahl"] or query["Mehrzahl"] or attr
-- Abfrage-String zusammenbauen
-- Sonderbehandlung Delimiter
query["ValueQuery"] = "?" .. attr
if query["Delimiter"] == "Semikolon" then
if query["Anzeigeformat"] ~= nil then
query["Delimiter"] = ";"
query["ValueQuery"] =
elseif query["Delimiter"] == "keine Liste" or
query["ValueQuery"] .. "#" .. query["Anzeigeformat"]
(query["Delimiter"] == "Default/leer" and klasse == nil) then
end
query["Delimiter"] = nil
if query["Einzahl"] ~= attr then
query["ValueQuery"] =
query["ValueQuery"] .. "=" .. query["Einzahl"]
end
end
end
end
Zeile 78: Zeile 76:
end
end
return text
return text
end
function p.AttrInfo(frame)
local frame, _, args = dev.GetFrameAndParentArgs(frame)
local attr, klasse = args[1], args[2]
local info, delimiter = p.attrInfotextDelimiter(attr, klasse)
if info ~= nil then
info = info .. "."
if delimiter ~= nil then
info = info .. " Mehrere Eintragungen möglich, zu trennen per " ..
delimiter
end
info = string.gsub(info, "%.%.", ".")
info = frame:callParserFunction("#info", info, "note")
end
return info
end
function p.attrInfotextDelimiter(attr, klasse)
local text, delimiter
local query = p.getAttrAttributes(attr, klasse)
if query ~= nil then
text = query["Infotext"]
delimiter = query["Delimiter"]
end
return text, delimiter
end
function p.AttrField(frame)
local t = ""
local frame, _, args = dev.GetFrameAndParentArgs(frame)
local attr, klasse = args[1], args[2]
local query = p.getAttrAttributes(attr, klasse)
t = t .. "{{{field|" .. attr
if query ~= nil and query["FieldArgs"] ~= nil then
t = t .. "|" .. query["FieldArgs"]
end
t = t .. "}}}"
return t
end
function p.AttrValueQuery(frame) -- Attribut-Abfragestring
-- Kommandozeile zum Debuggen:
-- =p.AttrValueQuery{args={"BietetKartenzahlung"}}
local attr = frame.args[1]
local klasse = frame.args[2]
local query = p.getAttrAttributes(attr, klasse)
return query["ValueQuery"]
end
end


return p
return p

Aktuelle Version vom 6. März 2026, 20:03 Uhr

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. Es liefert (alles, was im Formular des Attributs eintragbar ist):

  • ["Datentyp"] des Attributs
  • ["EhemalsAttribut"] = Wenn das Attribut mit einem anderen „Ehemals“-Attribut eine Kombi bildet. Z. B. Attribut:Abrissjahr ist kombiniert mit Attribut:Ehemals, somit ist „Ehemals“ als EhemalsAttribut bei Attribut:Abrissjahr eingetragen
  • ["Anzeigegenauigkeit"] = bei Datentyp Zahl
  • ["Einzahl"] bzw. ["Mehrzahl"] = Anzeigetext Einzahl/Mehrzahl (z B. in Faktenboxen und Tabellen-Spaltenköpfen)
  • ["Delimiter"] = Trennzeichen, falls Formular-Wert des Attribut als Liste ausgewertet werden soll
  • ["FieldArgs"] = Argumente für {{{field|...}}} der Attribute des Formulars
  • ["Infotext"] = Text für Hilfe-Popup {{#info:...|note}} der Attribute des Formulars
  • ["Anzeigeformat"] = Anzeigeformat eines Attributs bei einer #ask-Abfrage. Entspricht dem Ausdruck hinter der Raute. Z. B. ja,nein bei {{#ask:...|?Ehemals#ja,nein|...}}.

attrText() / AttrText()

Gibt Anzeigetext eines Attributs zurück.


local p = {}

local dev = require("Modul:Development")

function p.getAttrAttributes(attr, klasse)
	-- Kommandozeile zum Debuggen:
	-- mw.logObject(p.getAttrAttributes("Ehemals"))
	-- mw.logObject(p.getAttrAttributes("BietetKartenzahlung"))
	local query = {"[[Attribut:" .. attr .. "]]",
		"?Datentyp#-", "?EhemalsAttribut", "?Anzeigegenauigkeit",
		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 query["Mehrzahl"] or attr
		-- Sonderbehandlung Delimiter
		if query["Delimiter"] == "Semikolon" then
			query["Delimiter"] = ";"
		elseif query["Delimiter"] == "keine Liste" or
			(query["Delimiter"] == "Default/leer" and klasse == nil) then
			query["Delimiter"] = nil
		end
	end
	return query
end

function p.AttrText(frame)														-- Attribut-Anzeige-Texte
	local frame, _, args = dev.GetFrameAndParentArgs(frame)
	local attr, klasse = args[1], args[2]
	return p.attrText(attr, klasse)
end

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

return p