Modul:Ahnentafel: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(SyncBot) |
K (Schützte „Modul:Ahnentafel“: SyncBot ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt))) |
(kein Unterschied)
| |
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