Modul:Adelskalendarium

Aus TobrienWiki
Version vom 19. November 2024, 18:08 Uhr von SyncBot (Diskussion | Beiträge) (SyncBot)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
Dokumentation und Testfälle unter Modul:Adelskalendarium/Doku.
local p = {}

require("Modul:Hilfsfunktionen")

function holeHerrscher(lehen)
	if lehen=='' then return {} end
	local herrscher=mw.smw.ask('[[Herrscher von Lehen::'..lehen..']] [[Herrscher von BisIndex::99990000]]'
		..'|mainlabel=-'
		..'|?Herrscher von Titel#=Titel'
		..'|?=Herrscher'
		..'|?Herrscher von Lehen#=Lehen'
		..'|?Herrscher von Anzeige=Anzeige'
		..'|?Herrscher von Von#=Von'
		..'|limit=10'
	)
	if herrscher==nil then return {} end
	return herrscher
end

function holeInfos(lehen,extern,vasallen)
	if lehen=='' then return {} end
	local s='[['..lehen..']]'
	if vasallen then
		s='[[Vasallenlehen von::'..lehen..']]'
	end
	local vasallen=mw.smw.ask(s..' [[Extern::'..extern..']]'
		..'|mainlabel=-'
		..'|?#-=Artikel'
		..'|?Kennziffer'
		..'|?Lehensebene'
		..'|?Einwohner'
		..'|?Wappen ist#'
		..'|?Icon ist#'
		..'|?Briefspieler#'
		..'|sort=Kennziffer'
		..'|limit=500'
		..'|searchlabel='
	)
	if vasallen==nil then return {} end
	return vasallen
end

function nonil(s)
	if(type(s)=='table') then
		return 'TABLE'
	end
	if((s==nil)or(type(s)=='table')) then
		return ''
	end
	return s
end

function iconLehensebene(lehensebene,namespace,name)
	if lehensebene=='Herr' then return 'Edlenkrone' end
	if lehensebene=='Junker' then return 'Junkerskrone' end
	if lehensebene=='Baron' then return 'Baronskrone' end
	if lehensebene=='Graf' then return 'Grafenkrone' end
	if lehensebene=='Provinzherr' then 
		if namespace=='Garetien' then return 'Debrekskrone' end
		if namespace=='Perricum' or  namespace=='Greifenfurt' then return 'Markgrafenkrone' end
		if namespace=='' then
			if name=='Rommilyser Mark' or name=='Sonnenmark' or name=='Rabenmark' or name=='Markgrafschaft Warunk' or name=='Markgrafschaft Windhag' then return 'Markgrafenkrone' end
			if name=='Fürstentum Albernia' or name=='Fürstentum Almada' or name=='Fürstentum Maraskan' or name=='Fürstentum Kosch' then return 'Fürstenkrone' end
			if name=='Herzogtum Weiden' or name=='Herzogtum Tobrien' or name=='Herzogtum Nordmarken' then return 'Herzogenkrone' end
		end
	end
	if lehensebene=='Kaiser' then return 'Raulskrone' end
	if lehensebene=='Kirche' then return 'Kirchenkrone' end
	return ''
end

function classNachLevel(level)
	local class='hell'
	if level<=1 then
		class='dunkel'
	end
	return class 
end

function styleNachLevel(level)
	local style='font-size:'..(1.2-level/10)..'em;border:none;'
	if level==0 then
		style=style..'font-weight:bold;'
	end
	return style 
end

function starteTabelle()
	local result='{| style="width:100%;border:none;"'
	return result
end

function endeTabelle()
	local result='\n|}\n'
	return result
end

function formatiereHerrscher(herrscher)
	local result=''
	for k,v in pairs(herrscher) do
		result=result
			..nonil(v['Titel'])..' '
			..nonil(v['Herrscher'])..' '
			..'[['..nonil(v['Lehen'])..'|'..v['Anzeige']..']] '
			..'(seit '..nonil(v['Von'])..')<br>'
	end
	return result
end

function formatiereBriefspieler(briefspieler)
	local result=''
	if(briefspieler==nil) then return '' end
	if(type(briefspieler)~='table') then briefspieler={briefspieler} end
	for k,v in pairs(briefspieler) do
		if v~='' then
			local benutzer=string.match(v,"Benutzer:(.*)")
			if benutzer~=nil then
				result=result..'[[Datei:Bespielt.svg|20x20px|link='..v..']]'
			else
				result=result..'[[Datei:Bespielt NSC.svg|20x20px|link='..v..']]'
			end
		end
	end
	return result
end

function formatiereInfos(lehen,level,extern,maxlevel)
	local result=''
	local style=styleNachLevel(level)
	local class=classNachLevel(level)
	for k,v in spairs(lehen,function(lehen,a,b)
    	return lehen[a]['Kennziffer']<lehen[b]['Kennziffer']
	end) do
		local wappendatei=nonil(v['Wappen ist'])
		local wappen='[['..wappendatei..'|30x30px|link=]]'
		if wappendatei=='Datei:Wappen blanko.svg' then
			wappen=''
		end
		local kennziffer=nonil(v['Kennziffer'])
		local artikel=nonil(v['Artikel'])
		local namespace=string.match(artikel,"(.*):")
		if namespace==nil then
			namespace=''
		end
		local name=string.match(artikel,":(.*)")
		if name==nil then
			name=artikel
		end
		local artikellink='[['..artikel..'|'..name..']]'
		local einwohner=nonil(v['Einwohner'])
		local herrscher=holeHerrscher(artikel)
		lehensebene='[['..nonil(v['Icon ist'])..'|30x30px|link=|'..nonil(v['Lehensebene'])..']]'
		if nonil(v['Icon ist'])==nonil(v['Wappen ist']) then
			lehensebene='[[Datei:'..iconLehensebene(nonil(v['Lehensebene']),namespace,name)..'.svg|30x30px|link=|'..nonil(v['Lehensebene'])..']]'
		end
		result=result
			..'\n|- style="'..style..'" class="'..class..'"'
			..'\n| class="dunkel" style="border:none;padding-left:'..(level*10)..'px"|'..wappen
			..'\n| style="border:none;"|'..kennziffer
			..'\n| style="border:none;padding-left:'..(level*10)..'px"|'..artikellink
			..'\n| style="border:none;text-align:right"|'..einwohner
			..'\n| style="border:none;"|'..formatiereHerrscher(herrscher)
			..'\n| style="border:none;text-align:center"|'..formatiereBriefspieler(v['Briefspieler'])
			..'\n| style="border:none;text-align:center"|'..lehensebene
		if level<maxlevel then
			local vasallen=holeInfos(artikel,extern,true)
			result=result..formatiereInfos(vasallen,level+1,extern,maxlevel)
		end
	end
	return result
end

function p.Abfrage(frame)
	if (frame.args[1]==nil) then
		return 'no parameter found'
	end
	local lehen=robusttrim(frame.args[1])
	local extern=robusttrim(frame.args[2])
	local maxlevel=robusttrim(frame.args[3])
	local selbst=holeInfos(lehen,extern,false)
	local result=starteTabelle()
		..formatiereInfos(selbst,0,extern,tonumber(maxlevel))
		..endeTabelle()
	return result
end

return p