Modul:Ahnentafel: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
SyncBot (D | B)
K (Schützte „Modul:Ahnentafel“: SyncBot ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt)))
 
(33 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 12: Zeile 12:
.."|offset=0"
.."|offset=0"
.."|searchlabel=")
.."|searchlabel=")
if travia==nil or travia[1]==nil or travia[1]["Traviabund mit Von"]==nil then
if travia==nil or travia[1]==nil or travia[1]["Traviabund mit Von"]==nil or travia[1]["Traviabund mit Von"]=="9999 vBF" then
return ""
return ""
end
end
Zeile 22: Zeile 22:
local anzahl=mw.smw.ask("{{#ask: <q>[[Vater ist::"..person["Vater ist"].."]] OR [[Mutter ist::"..person["Mutter ist"].."]]</q>"
local anzahl=mw.smw.ask("{{#ask: <q>[[Vater ist::"..person["Vater ist"].."]] OR [[Mutter ist::"..person["Mutter ist"].."]]</q>"
.."|format=count")
.."|format=count")
if anzahl==1 then
if anzahl<=1 then
return ""
return ""
end
end
Zeile 29: Zeile 29:


--Setze bei nil auf Standardwerte
--Setze bei nil auf Standardwerte
function standardElternInfos(artikel,infos)
function standardInfos(artikel,infos)
local anzeige=artikel
for w in artikel:gmatch("([^:]+)") do
anzeige=w
end
 
if infos==nil or infos["Bild ist"]==nil then
if infos==nil or infos["Bild ist"]==nil then
return {
return {
Zeile 39: Zeile 44:
["Lehenswappen ist"]="Datei:Wappen blanko.svg",
["Lehenswappen ist"]="Datei:Wappen blanko.svg",
["Mitgliedswappen ist"]="Datei:Wappen blanko.svg",
["Mitgliedswappen ist"]="Datei:Wappen blanko.svg",
["Langname"]=artikel,
["Langname"]=anzeige,
["Tsatag Text"]="",
["Tsatag Text"]="",
["Borontag Text"]="",
["Borontag Text"]="",
Zeile 45: Zeile 50:
else
else
return {
return {
["Artikel"]=robusttrim(infos[1]["Artikel"]),
["Artikel"]=robusttrim(infos["Artikel"]),
["Mutter ist"]=robusttrim(infos[1]["Mutter ist"]),
["Mutter ist"]=robusttrim(infos["Mutter ist"]),
["Vater ist"]=robusttrim(infos[1]["Vater ist"]),
["Vater ist"]=robusttrim(infos["Vater ist"]),
["Bild ist"]=robusttrim(infos[1]["Bild ist"]),
["Bild ist"]=robusttrim(infos["Bild ist"]),
["Wappen ist"]=robusttrim(infos[1]["Wappen ist"]),
["Wappen ist"]=robusttrim(infos["Wappen ist"]),
["Lehenswappen ist"]=robusttrim(infos[1]["Lehenswappen ist"]),
["Lehenswappen ist"]=robusttrim(infos["Lehenswappen ist"]),
["Mitgliedswappen ist"]=robusttrim(infos[1]["Mitgliedswappen ist"]),
["Mitgliedswappen ist"]=robusttrim(infos["Mitgliedswappen ist"]),
["Langname"]=robusttrim(infos[1]["Langname"]),
["Langname"]=robusttrim(infos["Langname"]),
["Tsatag Text"]=robusttrim(infos[1]["Tsatag Text"]),
["Tsatag Text"]=robusttrim(infos["Tsatag Text"]),
["Borontag Text"]=robusttrim(infos[1]["Borontag Text"]),
["Borontag Text"]=robusttrim(infos["Borontag Text"]),
}
}
end
end
Zeile 76: Zeile 81:
.."|searchlabel="
.."|searchlabel="
)
)
return standardElternInfos(artikel,infos[1])
if infos==nil then
return standardInfos(artikel,nil)
end
return standardInfos(artikel,infos[1])
end
end


Zeile 94: Zeile 102:
.."|sort=Tsatag Index"
.."|sort=Tsatag Index"
)
)
if infos==nil then
infos={}
end
local result={}
local result={}
for c = 1, #infos do
for c=1,#infos do
result[c]=standardElternInfos(artikel,infos[c])
result[c]=standardInfos(artikel,infos[c])
end
end
return result
return result
end
end


--versteckte Titelzeile, um gleichmäßige Darstellung zu erreichen
--neue Zeile eventuell verstecken, wenn leer
function neueZeile(eintrag)
local c=0
for i=1,#eintrag do
if eintrag[i]~="" then
c=c+1
end
end
local hide=""
if c==0 then
hide="style=\"visibility:hidden"
end
return "\n|- "..hide
end
 
--versteckte Titelzeile, um gleichmäßige Darstellung zu erreichen, kurze Anzeige der Alteltern
function zeile0(eintrag)  
function zeile0(eintrag)  
local result="\n|-"
local result=neueZeile(eintrag)
for i=1,16,1 do
for i=1,16,1 do
result=result.."\n|class=\"hell\" style=\"width:6%;vertical-align:top;text-align:center;border:1px solid gray;\"|"..eintrag[i]
result=result.."\n|class=\"hell\" style=\"width:6%;vertical-align:top;text-align:center;border:1px solid gray;\"|"..eintrag[i]
Zeile 112: Zeile 138:
--Zeile mit den Urgroßeltern
--Zeile mit den Urgroßeltern
function zeile1(eintrag)  
function zeile1(eintrag)  
local result="\n|-"
local result=neueZeile(eintrag)
for i=1,8,1 do
for i=1,8,1 do
result=result.."\n|colspan=\"2\" class=\"hell\" "
result=result.."\n|colspan=\"2\" class=\"hell\" "
Zeile 123: Zeile 149:
--Zeile mit den Großeltern
--Zeile mit den Großeltern
function zeile2(eintrag)  
function zeile2(eintrag)  
local result="\n|-"
local result=neueZeile(eintrag)
result=result.."\n|style=\"vertical-align:middle;text-align:right;\"|"..eintrag[1]
result=result.."\n|style=\"vertical-align:middle;text-align:right;\"|"..eintrag[1]
result=result.."\n|colspan=\"2\" class=\"hell\" "
result=result.."\n|colspan=\"2\" class=\"hell\" "
Zeile 150: Zeile 176:
--Zeile mit den Eltern
--Zeile mit den Eltern
function zeile3(eintrag)  
function zeile3(eintrag)  
local result="\n|-"
local result=neueZeile(eintrag)
result=result.."\n|colspan=\"2\" style=\"vertical-align:middle;text-align:right;\"|"..eintrag[1]
result=result.."\n|colspan=\"2\" style=\"vertical-align:middle;text-align:right;\"|"..eintrag[1]
result=result.."\n|colspan=\"4\" class=\"hell\" "
result=result.."\n|colspan=\"4\" class=\"hell\" "
Zeile 166: Zeile 192:
--Zeile mit den Person
--Zeile mit den Person
function zeile4(eintrag)  
function zeile4(eintrag)  
local result="\n|-"
local result=neueZeile(eintrag)
result=result.."\n|colspan=\"4\" style=\"vertical-align:middle;text-align:right;\"|"
result=result.."\n|colspan=\"4\" style=\"vertical-align:middle;text-align:right;\"|"
result=result.."\n|colspan=\"8\" class=\"hell\" "
result=result.."\n|colspan=\"8\" class=\"hell\" "
Zeile 176: Zeile 202:


function personEintrag(person)
function personEintrag(person)
if person==nil then
if person==nil or person["Artikel"]=="" then
return ""
end
if person["Langname"]:find("^Vater von ") or person["Langname"]:find("^Mutter von ") then
return ""
return ""
end
end
Zeile 203: Zeile 232:
for w in artikel:gmatch("([^:]+)") do
for w in artikel:gmatch("([^:]+)") do
anzeige=w
anzeige=w
end
if anzeige:find("^Vater von ") or anzeige:find("^Mutter von ") then
return ""
end
end
return "[["..artikel.."|"..anzeige.."]]"
return "[["..artikel.."|"..anzeige.."]]"
Zeile 209: Zeile 241:
function ausgabe(artikel)
function ausgabe(artikel)
local person=holeElternInfos(artikel)
local person=holeElternInfos(artikel)
 
local vater=holeElternInfos(person["Vater ist"])
local vater=holeElternInfos(person["Vater ist"])
local mutter=holeElternInfos(person["Mutter ist"])
local mutter=holeElternInfos(person["Mutter ist"])
Zeile 227: Zeile 259:
local muttersmuttersvater=holeElternInfos(muttersmutter["Vater ist"])
local muttersmuttersvater=holeElternInfos(muttersmutter["Vater ist"])
local muttersmuttersmutter=holeElternInfos(muttersmutter["Mutter ist"])
local muttersmuttersmutter=holeElternInfos(muttersmutter["Mutter ist"])
local kinder=holeKinderInfos(artikel)


local result='{| style="font-size:0.8em;width:100%;background:transparent;border:none;"'
local result='{| style="font-size:0.8em;width:100%;background:transparent;border:none;"'
Zeile 281: Zeile 315:
})
})
result=result.."\n|}"
result=result.."\n|}"
result=result.."\n{| style=\"font-size:0.8em;width:100%;background:transparent;border:none;\""
result=result.."\n|-"
local width=100/math.min(10,#kinder)
for c = 1, #kinder do
result=result.."\n|class=\"hell\" "
.."style=\"vertical-align:top;text-align:center;border:1px solid gray;width:"..width.."%\"|"
..personEintrag(kinder[c])
if (c%10)==0 then
result=result.."\n|-"
end
end
result=result.."\n|}"
return result
return result
end
end

Aktuelle Version vom 11. Oktober 2024, 08:17 Uhr

Dokumentation und Testfälle unter Modul:Ahnentafel/Doku.
require("Modul:Hilfsfunktionen")
require("Modul:Text")

local p = {}

--hole die Daten zum Traviabund der Eltern
function holeTraviabund(person)
	local travia=mw.smw.ask("{{#ask:<q>[[-Has subobject::"..person["Vater ist"].."]] [[Traviabund mit Partner::"..person["Mutter ist"].."]]</q>"
		.." OR <q>[[-Has subobject::"..person["Mutter ist"].."]] [[Traviabund mit Partner::"..person["Vater ist"].."]]</q>"
		.."|?Traviabund mit Von"
		.."|limit=1"
		.."|offset=0"
		.."|searchlabel=")
	if travia==nil or travia[1]==nil or travia[1]["Traviabund mit Von"]==nil or travia[1]["Traviabund mit Von"]=="9999 vBF" then
		return ""
	end
	return "[[Datei:Symbol Travia-Kirche.svg|15px|link=]]"..travia[1]["Traviabund mit Von"]
end

--hole die Anzahl Geschwister inklusive Halbgeschwister
function holeAnzahlGeschwister(person)
	local anzahl=mw.smw.ask("{{#ask: <q>[[Vater ist::"..person["Vater ist"].."]] OR [[Mutter ist::"..person["Mutter ist"].."]]</q>"
		.."|format=count")
	if anzahl<=1 then
		return ""
	end
	return "("..(anzahl-1).." Geschwister)"
end

--Setze bei nil auf Standardwerte
function standardInfos(artikel,infos)
	local anzeige=artikel
	for w in artikel:gmatch("([^:]+)") do
		anzeige=w
	end

	if infos==nil or infos["Bild ist"]==nil then
		return {
			["Artikel"]=artikel,
			["Mutter ist"]="",
			["Vater ist"]="",
			["Bild ist"]="Datei:Bild blanko.svg",
			["Wappen ist"]="Datei:Wappen blanko.svg",
			["Lehenswappen ist"]="Datei:Wappen blanko.svg",
			["Mitgliedswappen ist"]="Datei:Wappen blanko.svg",
			["Langname"]=anzeige,
			["Tsatag Text"]="",
			["Borontag Text"]="",
		}
	else
		return {
			["Artikel"]=robusttrim(infos["Artikel"]),
			["Mutter ist"]=robusttrim(infos["Mutter ist"]),
			["Vater ist"]=robusttrim(infos["Vater ist"]),
			["Bild ist"]=robusttrim(infos["Bild ist"]),
			["Wappen ist"]=robusttrim(infos["Wappen ist"]),
			["Lehenswappen ist"]=robusttrim(infos["Lehenswappen ist"]),
			["Mitgliedswappen ist"]=robusttrim(infos["Mitgliedswappen ist"]),
			["Langname"]=robusttrim(infos["Langname"]),
			["Tsatag Text"]=robusttrim(infos["Tsatag Text"]),
			["Borontag Text"]=robusttrim(infos["Borontag Text"]),
		}
	end
end

--Hole Eltern und Infos einer Person
function holeElternInfos(artikel)
	local infos=mw.smw.ask("{{#ask: [["..artikel.."]]"
		.."|?#-=Artikel"
		.."|?Mutter ist#"
		.."|?Vater ist#"
		.."|?Bild ist#"
		.."|?Wappen ist#"
		.."|?Lehenswappen ist#"
		.."|?Mitgliedswappen ist#"
		.."|?Langname#"
		.."|?Tsatag Text#"
		.."|?Borontag Text#"
		.."|limit=1"
		.."|offset=0"
		.."|searchlabel="
	)
	if infos==nil then
		return standardInfos(artikel,nil)
	end
	return standardInfos(artikel,infos[1])
end

function holeKinderInfos(artikel)
	local infos=mw.smw.ask("{{#ask: [[Vater ist::"..artikel.."]] OR [[Mutter ist::"..artikel.."]]"
		.."|?#-=Artikel"
		.."|?Mutter ist#"
		.."|?Vater ist#"
		.."|?Bild ist#"
		.."|?Wappen ist#"
		.."|?Lehenswappen ist#"
		.."|?Mitgliedswappen ist#"
		.."|?Langname#"
		.."|?Tsatag Text#"
		.."|?Borontag Text#"
		.."|searchlabel="
		.."|sort=Tsatag Index"
	)
	if infos==nil then
		infos={}
	end
	local result={}
	for c=1,#infos do
		result[c]=standardInfos(artikel,infos[c])
	end
	return result
end

--neue Zeile eventuell verstecken, wenn leer
function neueZeile(eintrag)
	local c=0
	for i=1,#eintrag do
		if eintrag[i]~="" then
			c=c+1
		end
	end
	local hide=""
	if c==0 then
		hide="style=\"visibility:hidden"
	end
	return "\n|- "..hide
end

--versteckte Titelzeile, um gleichmäßige Darstellung zu erreichen, kurze Anzeige der Alteltern
function zeile0(eintrag) 
	local result=neueZeile(eintrag)
	for i=1,16,1 do
		result=result.."\n|class=\"hell\" style=\"width:6%;vertical-align:top;text-align:center;border:1px solid gray;\"|"..eintrag[i]
	end
	return result 
end

--Zeile mit den Urgroßeltern
function zeile1(eintrag) 
	local result=neueZeile(eintrag)
	for i=1,8,1 do
		result=result.."\n|colspan=\"2\" class=\"hell\" "
			.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
			..eintrag[i]
	end
	return result 
end

--Zeile mit den Großeltern
function zeile2(eintrag) 
	local result=neueZeile(eintrag)
	result=result.."\n|style=\"vertical-align:middle;text-align:right;\"|"..eintrag[1]
	result=result.."\n|colspan=\"2\" class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
		..eintrag[2]
	result=result.."\n|colspan=\"2\" "
		.."style=\"vertical-align:middle;text-align:center;\"|"..eintrag[3]
	result=result.."\n|colspan=\"2\" class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
		..eintrag[4]
	result=result.."\n|style=\"vertical-align:middle;text-align:left;\"|"..eintrag[5]

	result=result.."\n|style=\"vertical-align:middle;text-align:right;\"|"..eintrag[6]
	result=result.."\n|colspan=\"2\" class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
		..eintrag[7]
	result=result.."\n|colspan=\"2\" "
		.."style=\"vertical-align:middle;text-align:center;\"|"..eintrag[8]
	result=result.."\n|colspan=\"2\" class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
		..eintrag[9]
	result=result.."\n|style=\"vertical-align:middle;text-align:left;\"|"..eintrag[10]
	return result 
end

--Zeile mit den Eltern
function zeile3(eintrag) 
	local result=neueZeile(eintrag)
	result=result.."\n|colspan=\"2\" style=\"vertical-align:middle;text-align:right;\"|"..eintrag[1]
	result=result.."\n|colspan=\"4\" class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
		..eintrag[2]
	result=result.."\n|colspan=\"4\" "
		.."style=\"vertical-align:middle;text-align:center;\"|"..eintrag[3]
	result=result.."\n|colspan=\"4\" class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
		..eintrag[4]
	result=result.."\n|colspan=\"2\" style=\"vertical-align:middle;text-align:left;\"|"..eintrag[5]
	return result 
end

--Zeile mit den Person
function zeile4(eintrag) 
	local result=neueZeile(eintrag)
	result=result.."\n|colspan=\"4\" style=\"vertical-align:middle;text-align:right;\"|"
	result=result.."\n|colspan=\"8\" class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;\"|"
		..eintrag[1]
	result=result.."\n|colspan=\"4\" style=\"vertical-align:middle;text-align:left;\"|"..eintrag[2]
	return result 
end

function personEintrag(person)
	if person==nil or person["Artikel"]=="" then
		return ""
	end
	if person["Langname"]:find("^Vater von ") or person["Langname"]:find("^Mutter von ") then
		return ""
	end
	local wappen2=person["Lehenswappen ist"]
	if wappen2=="Datei:Wappen blanko.svg" then
		wappen2=person["Mitgliedswappen ist"]
	end
	local result="[["..person["Wappen ist"].."|25x28px|link=]]"
		.."[["..person["Bild ist"].."|25x28px|link=]]"
		.."[["..wappen2.."|25x28px|link=]]"
		.."<br>[["..person["Artikel"].."|"..person["Langname"].."]]"
	if person["Tsatag Text"]~="" then
		result=result.."<br>[[Datei:Symbol Tsa-Kirche.svg|15px|link=]]"..person["Tsatag Text"]
	end
	if person["Borontag Text"]~="" then
		result=result.."<br>[[Datei:Symbol Boron-Kirche.svg|15px|link=]]"..person["Borontag Text"]
	end
	return result
end

function personEintragKurz(artikel)
	if artikel==nil or artikel=="" then
		return ""
	end
	local anzeige=artikel
	for w in artikel:gmatch("([^:]+)") do
		anzeige=w
	end
	if anzeige:find("^Vater von ") or anzeige:find("^Mutter von ") then
		return ""
	end
	return "[["..artikel.."|"..anzeige.."]]"
end
--Formatierung der Ausgabe
function ausgabe(artikel)
	local person=holeElternInfos(artikel)

	local vater=holeElternInfos(person["Vater ist"])
	local mutter=holeElternInfos(person["Mutter ist"])
	
	local vatersvater=holeElternInfos(vater["Vater ist"])
	local vatersmutter=holeElternInfos(vater["Mutter ist"])
	local muttersvater=holeElternInfos(mutter["Vater ist"])
	local muttersmutter=holeElternInfos(mutter["Mutter ist"])
	
	local vatersvatersvater=holeElternInfos(vatersvater["Vater ist"])
	local vatersvatersmutter=holeElternInfos(vatersvater["Mutter ist"])
	local vatersmuttersvater=holeElternInfos(vatersmutter["Vater ist"])
	local vatersmuttersmutter=holeElternInfos(vatersmutter["Mutter ist"])

	local muttersvatersvater=holeElternInfos(muttersvater["Vater ist"])
	local muttersvatersmutter=holeElternInfos(muttersvater["Mutter ist"])
	local muttersmuttersvater=holeElternInfos(muttersmutter["Vater ist"])
	local muttersmuttersmutter=holeElternInfos(muttersmutter["Mutter ist"])
	
	local kinder=holeKinderInfos(artikel)

	local result='{| style="font-size:0.8em;width:100%;background:transparent;border:none;"'
	result=result..zeile0({
		[1]=personEintragKurz(vatersvatersvater["Vater ist"]),
		[2]=personEintragKurz(vatersvatersvater["Mutter ist"]),
		[3]=personEintragKurz(vatersvatersmutter["Vater ist"]),
		[4]=personEintragKurz(vatersvatersmutter["Mutter ist"]),
		[5]=personEintragKurz(vatersmuttersvater["Vater ist"]),
		[6]=personEintragKurz(vatersmuttersvater["Mutter ist"]),
		[7]=personEintragKurz(vatersmuttersmutter["Vater ist"]),
		[8]=personEintragKurz(vatersmuttersmutter["Mutter ist"]),
		[9]=personEintragKurz(muttersvatersvater["Vater ist"]),
		[10]=personEintragKurz(muttersvatersvater["Mutter ist"]),
		[11]=personEintragKurz(muttersvatersmutter["Vater ist"]),
		[12]=personEintragKurz(muttersvatersmutter["Mutter ist"]),
		[13]=personEintragKurz(muttersmuttersvater["Vater ist"]),
		[14]=personEintragKurz(muttersmuttersvater["Mutter ist"]),
		[15]=personEintragKurz(muttersmuttersmutter["Vater ist"]),
		[16]=personEintragKurz(muttersmuttersmutter["Mutter ist"]),
	})
	result=result..zeile1({
		[1]=personEintrag(vatersvatersvater),
		[2]=personEintrag(vatersvatersmutter),
		[3]=personEintrag(vatersmuttersvater),
		[4]=personEintrag(vatersmuttersmutter),
		[5]=personEintrag(muttersvatersvater),
		[6]=personEintrag(muttersvatersmutter),
		[7]=personEintrag(muttersmuttersvater),
		[8]=personEintrag(muttersmuttersmutter),
	})
	result=result..zeile2({
		[1]=holeAnzahlGeschwister(vatersvater),
		[2]=personEintrag(vatersvater),
		[3]=holeTraviabund(vater),
		[4]=personEintrag(vatersmutter),
		[5]=holeAnzahlGeschwister(vatersmutter),
		[6]=holeAnzahlGeschwister(muttersvater),
		[7]=personEintrag(muttersvater),
		[8]=holeTraviabund(mutter),
		[9]=personEintrag(muttersmutter),
		[10]=holeAnzahlGeschwister(muttersmutter),
	})
	result=result..zeile3({
		[1]=holeAnzahlGeschwister(vater),
		[2]=personEintrag(vater),
		[3]=holeTraviabund(person),
		[4]=personEintrag(mutter),
		[5]=holeAnzahlGeschwister(mutter),
	})
	result=result..zeile4({
		[1]=personEintrag(person),
		[2]=holeAnzahlGeschwister(person),
	})
	result=result.."\n|}"
	
	result=result.."\n{| style=\"font-size:0.8em;width:100%;background:transparent;border:none;\""
	result=result.."\n|-"
	local width=100/math.min(10,#kinder)
	for c = 1, #kinder do
		result=result.."\n|class=\"hell\" "
		.."style=\"vertical-align:top;text-align:center;border:1px solid gray;width:"..width.."%\"|"
		..personEintrag(kinder[c])
		if (c%10)==0 then
			result=result.."\n|-"
		end
	end
	result=result.."\n|}"
	
	return result
end

--Aufzurufende Funktion
function p.ahnentafel(frame)
	local artikel=robusttrim(frame.args[1])
	if(artikel=='') then return '' end
	return ausgabe(artikel)
end

return p