Modul:InfoboxRoyalty

De la Wikipedia, enciclopedia liberă

Implementează {{Infocaseta Regalitate}}


local getArgs = require('Modul:Arguments').getArgs
local infoboxBio = require('Modul:InfoboxBiography')
local TableTools = require('Modul:TableTools')
local wikidata = require('Modul:Wikidata')
local editAtWd = require('Modul:EditAtWikidata').displayMessage
local StringUtils = require('Modul:StringUtils')
local p = {}
local argscnt = 1

local function addLabel(ibargs, label)
	ibargs['label' .. tostring(argscnt)] = label
end
local function addHeader(ibargs, header)
	ibargs['header' .. tostring(argscnt)] = header
	argscnt = argscnt + 1
end
local function addData(ibargs, data)
	ibargs['data' .. tostring(argscnt)] = data	
	argscnt = argscnt + 1
end

local function fromArray(args)
	local ibargs = {['culoare cadru'] = 'CCBBEE', ['culoare text'] = '000', aboveclass = 'regalitate', wikidata = 'y', doc = args['caller'] or 'Infocaseta Regalitate', default_title = 'Domnia' }
	local origargs = TableTools.shallowClone(args)
	local numberedargs = TableTools.numData(origargs, true)
	local unnumberedargs = nil
	if origargs['succesiune'] or origargs['domnie'] then
		unnumberedargs = { succesiune = origargs['succesiune'], domnie = origargs['domnie'], ['încoronare'] = origargs['încoronare'] or origargs['incoronare'],
		predecesor = origargs['predecesor'], succesor = origargs['succesor'], regent = origargs['regent'] }
		table.insert(numberedargs, 1, unnumberedargs)
	end
	
	ibargs['subheader1'] = origargs['titlu']
	ibargs['subheaderstyle'] = 'background-color:#dedede;'
	
	ibargs['name'] = origargs['nume']
	ibargs['image'] = origargs['image'] or origargs['imagine']
	ibargs['image_size'] = origargs['image_size'] or origargs['mărime']
	ibargs['caption'] = origargs['descriere']
	ibargs['spouse'] = origargs['soț'] or origargs['casatorit cu'] or origargs['căsătorit cu']
	ibargs['spouse-type'] = origargs['spouse-type']
	ibargs['children'] = origargs['urmași']
	ibargs['birth_name'] = origargs['nume complet']
	ibargs['father'] = origargs['tată'] or origargs['tatal']
	ibargs['mother'] = origargs['mamă'] or origargs['mama']
	if ibargs['father'] or ibargs['mother'] then
		ibargs['parents'] = table.concat(TableTools.compressSparseArray({ibargs['father'], ibargs['mother']}), tostring(mw.html.create('br')))
	end 
	ibargs['siblings'] = origargs['frați']
	ibargs['birth_date'] = origargs['data nașterii'] or origargs['data nasterii']
	ibargs['death_date'] = origargs['data decesului'] or origargs['data mortii'] or origargs['data morții']
	ibargs['birth_place'] = origargs['locul nașterii'] or origargs['locul nasterii']
	ibargs['death_place'] = origargs['locul decesului'] or origargs['locul mortii'] or origargs['locul morții']
	ibargs['burial_place'] = origargs['locul înmormântării'] or origargs['înmormântat']
	ibargs['burial_date'] = origargs['data înmormântării']
	ibargs['occupation'] = origargs['ocupație']
	ibargs['religion'] = origargs['religie']
	ibargs['signature'] = origargs['semnătură'] or origargs['semnatura']
	
	local capitalizeTitlesInList = function(list)
		local capitalizedList = {}
		if list then
			for _,eachElement in ipairs(list) do
				table.insert(capitalizedList, StringUtils._capitalize({eachElement}))
			end
		end
		return capitalizedList
	end

	local royalTitle = origargs['titluri'] or origargs['altetitulaturi'] or table.concat(capitalizeTitlesInList(wikidata.getTimestampedValueList(nil, 'P97')), tostring(mw.html.create('br')))
		
	local royalFamily = origargs['casa'] or origargs['casa regala'] or origargs['casă regală'] or origargs['casa regală'] or table.concat(capitalizeTitlesInList(wikidata.getTimestampedValueList(nil, 'P53')), tostring(mw.html.create('br')))
	local royalAnthem = origargs['imn regal'] or wikidata.findOneValue('P85')
	local heirApparent = origargs['moștenitor'] or origargs['mostenitor']
	
	if royalTitle or royalFamily or royalAnthem then
		addHeader(ibargs, 'Apartenență nobiliară')
		if royalTitle then
			addLabel(ibargs, 'Titluri')
			addData(ibargs, royalTitle)
		end
		if royalFamily then
			addLabel(ibargs, 'Familie nobiliară')
			addData(ibargs, royalFamily)
		end
		if royalAnthem then
			addLabel(ibargs, 'Imn regal')
			addData(ibargs, royalAnthem)
		end
		if heirApparent then
			addLabel(ibargs, 'Moștenitor')
			addData(ibargs, heirApparent)
		end
	end

	local fem = args['f'] or args['femeie'] or wikidata.isFemale()
	
	if not numberedargs or #numberedargs == 0 then
		local wdPositionClaims = wikidata.findClaimsForProperty(nil, 'P39') or {}
		for _,eachClaim in ipairs(wdPositionClaims) do
			if eachClaim.mainsnak.snaktype == 'value' then
				local positionQid = eachClaim.mainsnak.datavalue.value['numeric-id']
				local linktoPosition = wikidata.findLinkToItem('Q' .. tostring(positionQid), true, fem, false) .. ' ' .. editAtWd('P39')
				addHeader(ibargs, linktoPosition)
				local reignTimes = {}
				if eachClaim.qualifiers then
					if eachClaim.qualifiers['P580'] and eachClaim.qualifiers['P580'][1] then
						if eachClaim.qualifiers['P580'][1].snaktype == 'value' then
							table.insert(reignTimes, wikidata.printSnak(eachClaim.qualifiers['P580'][1]))
						elseif eachClaim.qualifiers['P580'][1].snaktype == 'unknownvalue' then
							table.insert(reignTimes, '?')
						end
					end
					if eachClaim.qualifiers['P582'] and eachClaim.qualifiers['P582'][1] then
						if eachClaim.qualifiers['P582'][1].snaktype == 'value' then
							table.insert(reignTimes, wikidata.printSnak(eachClaim.qualifiers['P582'][1]))
						elseif eachClaim.qualifiers['P582'][1].snaktype == 'unknownvalue' then
							table.insert(reignTimes, '?')
						end
					end
					if #reignTimes == 0 and eachClaim.qualifiers['P585'] and eachClaim.qualifiers['P585'][1] then
						if eachClaim.qualifiers['P585'].snaktype == 'value' then
							table.insert(reignTimes, wikidata.printSnak(eachClaim.qualifiers['P585'][1]))
						elseif eachClaim.qualifiers['P585'].snaktype == 'unknownvalue' then
							table.insert(reignTimes, '?')
						end
					end
					if #reignTimes > 0 then
						addLabel(ibargs, 'Domnie')
						addData(ibargs, table.concat(reignTimes, mw.text.decode(' – ', true)))
					end
					if eachClaim.qualifiers['P1365'] and eachClaim.qualifiers['P1365'][1] then
						addLabel(ibargs, 'Predecesor')
						if eachClaim.qualifiers['P1365'][1].snaktype == 'value' then
							addData(ibargs, wikidata.printSnak(eachClaim.qualifiers['P1365'][1]))
						elseif eachClaim.qualifiers['P1365'][1].snaktype == 'novalue' then
							addData(ibargs, 'nimeni')
						else
							addData(ibargs, '?')
						end
					end
					if eachClaim.qualifiers['P1366'] and eachClaim.qualifiers['P1366'][1] then
						addLabel(ibargs, 'Succesor')
						if eachClaim.qualifiers['P1366'][1].snaktype == 'value' then
							addData(ibargs, wikidata.printSnak(eachClaim.qualifiers['P1366'][1]))
						elseif eachClaim.qualifiers['P1366'][1].snaktype == 'novalue' then
							addData(ibargs, 'nimeni')
						else
							addData(ibargs, '?')
						end
					end
				end
			end
		end
	else
		if not numberedargs[1].succesiune then
			addHeader(ibargs, 'Domnie')
		end
		for _,eachReign in ipairs(numberedargs) do
			if eachReign.succesiune then
				addHeader(ibargs, eachReign.succesiune)
			end
			if eachReign.domnie then
				addLabel(ibargs, 'Domnie')
				addData(ibargs, eachReign.domnie)
			end
			if eachReign.domnie or eachReign.succesiune then
				if eachReign['încoronare'] then
					addLabel(ibargs, eachReign['cor-type'] or 'Încoronare')
					addData(ibargs, eachReign['încoronare'])
				end
				if eachReign.predecesor then
					addLabel(ibargs, eachReign['pred-type'] or 'Predecesor')
					addData(ibargs, eachReign.predecesor)
				end
				if eachReign.succesor then
					addLabel(ibargs, eachReign['suc-type'] or 'Succesor')
					addData(ibargs, eachReign.succesor)
				end
				if eachReign.regent then
					addLabel(ibargs, eachReign['reg-type'] or 'Regent')
					addData(ibargs, eachReign.regent)
				end
			end
				
		end
	end
	
	return infoboxBio.displayInfoboxFromArgs(ibargs)
end

local function fromFrame(frame)
	local args = getArgs(frame)
	return fromArray(args)
end

p.fromFrame = fromFrame
p.fromArray = fromArray
return p