Modul:Ahnentafel
Zur Navigation springen
Zur Suche springen
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