Sari la conținut

Modul:InfoboxBiography: Diferență între versiuni

De la Wikipedia, enciclopedia liberă
Conținut șters Conținut adăugat
Fără descriere a modificării
Fără descriere a modificării
Linia 70: Linia 70:
if wikidataGender and mw.ustring.find(wikidataGender, 'femeie', 1, true) then genderSuffix = 'ă' end
if wikidataGender and mw.ustring.find(wikidataGender, 'femeie', 1, true) then genderSuffix = 'ă' end
local imageName = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'image', 'Imagine', 'imagine', 'foto'}, function() return wikidata.findOneValueNoRef('P18') end)
local imageName = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'image', 'Imagine', 'imagine', 'foto'}, function() return nil end)
if imageName then
if StringUtils._startsWithAny({mw.text.trim(imageName), '[['}) then
imageName = StringUtils._substringBefore({mw.text.trim(imageName), ']]', '|'})
end
imageName = StringUtils._removeStart({mw.text.trim(imageName), 'File:'})
imageName = StringUtils._removeStart({imageName, 'Fișier:'})
imageName = StringUtils._removeStart({imageName, 'Image:'})
imageName = StringUtils._removeStart({imageName, 'Imagine:'})
local imgTitle = mw.title.new(imageName, 6)
if not imgTitle or not imgTitle.file or not imgTitle.file.exists then
imageName = nil
end
end

local wdImageName, wdImageCaption = wikidata.findImageAndCaption()
local wdImageName, wdImageCaption = wikidata.findImageAndCaption()
imageName = wdImageName or imageName
imageName = imageName or wdImageName
if imageName and mw.ustring.len(imageName) > 0 then
if imageName and mw.ustring.len(imageName) > 0 then
local imageSize = args['imagesize'] or args['image_size']
local imageSize = args['imagesize'] or args['image_size']
processedArgs['image'] = infoboxImage{image=imageName, size=imageSize, sizedefault='frameless', upright='1', suppressplaceholder='yes'}
processedArgs['image'] = infoboxImage{image=imageName, size=imageSize, sizedefault='frameless', upright='1', suppressplaceholder='yes'}
processedArgs['caption'] = wdImageCaption or args['caption'] or args['descriere'] or args['comentariu']
processedArgs['caption'] = args['caption'] or args['descriere'] or args['comentariu'] or wdImageCaption
end
end

Versiunea de la 3 august 2016 13:47

Documentația acestui modul poate fi creată la Modul:InfoboxBiography/doc

local p = {}
local getArgs = require('Modul:Arguments').getArgs
local wikidata = require('Modul:Wikidata')
local lc = require('Modul:LocationAndCountry')
local bda = require('Modul:BirthDateAndAge')
local infobox = require('Modul:Infobox')
local infoboxImage = require('Modul:InfoboxImage').InfoboxImage
local join = require('Modul:Separated entries')._main
local libraryUtil = require( 'libraryUtil' )

local function extractDedicatedArgFromInputArgs(retainedInputArgs, args, argNames, wikidataCallback)
	libraryUtil.checkType('extractDedicatedArgFromInputArgs', 1, retainedInputArgs, 'table', true)
	libraryUtil.checkType('extractDedicatedArgFromInputArgs', 2, args, 'table', false)
	libraryUtil.checkType('extractDedicatedArgFromInputArgs', 3, argNames, 'table', true)
	libraryUtil.checkType('extractDedicatedArgFromInputArgs', 4, wikidataCallback, 'function', true)
	
	if argNames == nil then return nil end
	local foundValue = nil
	for argNameIdx,argName in pairs(argNames) do
		local argv = args[argName]
		if argv and foundValue == nil then
			foundValue = argv
			break
		end
	end

	if foundValue then
		for argNameIdx,argName in pairs(argNames) do
			table.insert(retainedInputArgs, argName)
		end
		return foundValue
	end

	if args['embed'] ~= 'yes' and args['embed'] ~= 'y' and args['embed'] ~= 'da' then
		local wikidataValue = wikidataCallback()
		if wikidataValue and mw.ustring.len(mw.text.trim(wikidataValue)) > 0 then return wikidataValue end
	end
	return nil
end

local function copyProperty(outputTable, inputTable, propName)
	libraryUtil.checkType('copyProperty', 1, outputTable, 'table', false)
	libraryUtil.checkType('copyProperty', 2, inputTable, 'table', false)
	libraryUtil.checkTypeMulti('copyProperty', 3, propName, {'string', 'number'})
	outputTable[propName] = inputTable[propName]
end

local function tableContains(haystackTable, needle)
	libraryUtil.checkType('tableContains', 1, haystackTable, 'table', true)
	if haystackTable == nil or needle == nil then return false end
	for k, v in pairs(haystackTable) do
		if v == needle then return true end
	end
	return false
end

local function processArgs(args)
	local processedArgs = {}
	local retainedInputArgs = {}
	local labeldatacount = 2
	
	processedArgs['child'] = (args['embed'] == 'yes' or args['embed'] == 'da' or args['embed'] == 'y') and 'yes' or nil
	if args['culoare cadru'] then processedArgs['culoare cadru'] = args['culoare cadru'] end
	if args['culoare text'] then processedArgs['culoare text'] = args['culoare text'] end
	copyProperty(processedArgs, args, 'aboveclass')
	if (processedArgs['child'] == nil) then
		processedArgs['header1'] = 'Date personale'
		local genderSuffix = ''
		local wikidataGender = wikidata.findOneValueNoRef('P21')
		if wikidataGender and mw.ustring.find(wikidataGender, 'femeie', 1, true) then genderSuffix = 'ă' end
		
		local imageName = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'image', 'Imagine', 'imagine', 'foto'}, function() return nil end)
		if imageName then
			if StringUtils._startsWithAny({mw.text.trim(imageName), '[['}) then
				imageName = StringUtils._substringBefore({mw.text.trim(imageName), ']]', '|'})
			end
			imageName = StringUtils._removeStart({mw.text.trim(imageName), 'File:'})
			imageName = StringUtils._removeStart({imageName, 'Fișier:'})
			imageName = StringUtils._removeStart({imageName, 'Image:'})
			imageName = StringUtils._removeStart({imageName, 'Imagine:'})
			local imgTitle = mw.title.new(imageName, 6)
			if not imgTitle or not imgTitle.file or not imgTitle.file.exists then
				imageName = nil
			end
		end

		local wdImageName, wdImageCaption = wikidata.findImageAndCaption()
		imageName = imageName or wdImageName
		if imageName and mw.ustring.len(imageName) > 0 then
			local imageSize = args['imagesize'] or args['image_size']
			processedArgs['image'] = infoboxImage{image=imageName, size=imageSize, sizedefault='frameless', upright='1', suppressplaceholder='yes'}
			processedArgs['caption'] = args['caption'] or args['descriere'] or args['comentariu'] or wdImageCaption
		end
		
		local birthName = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'nume_naștere', 'birth_name'}, function() return wikidata.findOneValue('P1477') end)
		if birthName and mw.ustring.len(birthName) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Nume la naștere'
			processedArgs['data' .. tostring(labeldatacount)] = birthName
			labeldatacount = labeldatacount + 1
		end
		
		local birthDate = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'data_nașterii', 'data_nasterii', 'birth_date'}, function() return bda._getBdaByWikidata{link = 'yes'} end)
		local birthPlace = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'locul_nașterii', 'locul_nasterii', 'birth_place'}, function() return lc.displayFromParams('P19', nil, 'P569', 1, '; ') end)
		if birthDate and mw.ustring.len(birthDate) > 0 or birthPlace and mw.ustring.len(birthPlace) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Născut' .. genderSuffix
			processedArgs['data' .. tostring(labeldatacount)] = join{birthDate, birthPlace, separator = '<br/>'}
			labeldatacount = labeldatacount + 1
		end

		local deathDate = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'data_deces', 'data_decesului', 'death_date'}, function() return bda._getDdaByWikidata{link = 'yes'} end)
		local deathPlace = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'locul_decesului', 'death_place'}, function() return lc.displayFromParams('P20', nil, 'P570', 1, '; ') end)
		if deathDate and mw.ustring.len(deathDate) > 0 or deathPlace and mw.ustring.len(deathPlace) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Decedat' .. genderSuffix
			processedArgs['data' .. tostring(labeldatacount)] = join{deathDate, deathPlace, separator = '<br/>'}
			labeldatacount = labeldatacount + 1
		end
		
		local burialSite = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'loc_odihna', 'locodihna', 'burial_place', 'final_resting_place'}, function() return wikidata.findOneValue('P119') end)
		if burialSite and mw.ustring.len(mw.text.trim(burialSite)) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Locul înmormântării'
			processedArgs['data' .. tostring(labeldatacount)] = burialSite
			labeldatacount = labeldatacount + 1
		end
		
		local parents = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'părinți', 'parents', 'parinti'}, function() return join{wikidata.findOneValue('P22'), wikidata.findOneValue('P25'), separator = '<br/>'} end)
		if parents and mw.ustring.len(mw.text.trim(parents)) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Părinți'
			processedArgs['data' .. tostring(labeldatacount)] = parents
			labeldatacount = labeldatacount + 1
		end
		
		local siblings = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'frați', 'frati', 'siblings'}, function()
			local tbl = {}
			for _i,lst in ipairs({wikidata.getValueList(nil, 'P7'), wikidata.getValueList(nil, 'P9')}) do
				for _i1,v in ipairs(lst or {}) do 
					table.insert(tbl, v)
				end
			end
			tbl.separator = '<br/>'
			return join(tbl)
		end)
		if siblings and mw.ustring.len(mw.text.trim(siblings)) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Frați și surori'
			processedArgs['data' .. tostring(labeldatacount)] = siblings
			labeldatacount = labeldatacount + 1
		end

		local partners = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'partener', 'partners'}, function() return nil end)
		if partners and mw.ustring.len(mw.text.trim(partners)) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Partener(i)'
			processedArgs['data' .. tostring(labeldatacount)] = partners
			labeldatacount = labeldatacount + 1
		end
		
		local spouse = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'soț', 'soție', 'sot', 'sotie', 'spouse', 'căsătorit'}, function() return wikidata._getTimestampedValueListWithSeparator({'<br/>', 'P26'}) end)
		if spouse and mw.ustring.len(mw.text.trim(spouse)) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Căsătorit' .. genderSuffix .. ' cu'
			processedArgs['data' .. tostring(labeldatacount)] = spouse
			labeldatacount = labeldatacount + 1
		end
		
		local children = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'copii', 'children'}, function() return wikidata._getValueListWithSeparator({'<br/>', 'P40'}) end)
		if children and mw.ustring.len(mw.text.trim(children)) > 0 then
			processedArgs['label' .. tostring(labeldatacount)] = 'Copii'
			processedArgs['data' .. tostring(labeldatacount)] = children
			labeldatacount = labeldatacount + 1
		end

		local nationality = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'nationalitate', 'nationality', 'naționalitate'}, function() return nil end)
		if nationality then
			processedArgs['label' .. tostring(labeldatacount)] = 'Naționalitate'
			processedArgs['data' .. tostring(labeldatacount)] = nationality
			labeldatacount = labeldatacount + 1
		end
		
		local rude = processedArgs['rude'] or processedArgs['relations']
		if rude then
			processedArgs['label' .. tostring(crtLineIndex)] = 'Rude'
			processedArgs['data' .. tostring(crtLineIndex)] = rude
			labeldatacount = labeldatacount + 1
		end

		local citizenship = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'cetatenie', 'cetățenie', 'citizenship'}, function() return wikidata._getTimestampedValueListWithSeparator({'<br/>', 'P27'}) end)
		if citizenship then
			processedArgs['label' .. tostring(labeldatacount)] = 'Cetățenie'
			processedArgs['data' .. tostring(labeldatacount)] = citizenship
			labeldatacount = labeldatacount + 1
		end

		local ethnicityWdRetriever = function()
			local ethnicityClaims = wikidata.findBestClaimsForProperty(nil, 'P172') -- ethnic group
			local retList = {}
			if ethnicityClaims then
				for _,eachEthnicityClaim in pairs(ethnicityClaims) do
					if eachEthnicityClaim.type == 'statement' and eachEthnicityClaim.mainsnak and eachEthnicityClaim.mainsnak.snaktype == 'value' then
						table.insert(retList, wikidata.findLinkToItemWithLabelFromClaim(eachEthnicityClaim.mainsnak.datavalue.value['numeric-id'], false, 'P1549'))
					end
				end
			end
			if #retList > 0 then
				retList.separator = tostring(mw.html.create('br'))
				return join(retList)
			end
			return nil
		end
		local ethnicity = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'etnie', 'ethnicity'}, ethnicityWdRetriever)
		if ethnicity then
			processedArgs['label' .. tostring(labeldatacount)] = 'Etnie'
			processedArgs['data' .. tostring(labeldatacount)] = ethnicity
			labeldatacount = labeldatacount + 1
		end
		
		local religion = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'religie', 'religion', 'confesiune'}, function() return wikidata._getValueListWithSeparator({'<br/>', 'P140'}) end)
		if religion then
			processedArgs['label' .. tostring(labeldatacount)] = 'Religie'
			processedArgs['data' .. tostring(labeldatacount)] = religion
			labeldatacount = labeldatacount + 1
		end
		
		local occupation = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'ocupație', 'occupation', 'ocupatie'}, function() return wikidata._getValueListWithSeparator({'<br/>', 'P106'}) end)
		if occupation then
			processedArgs['label' .. tostring(labeldatacount)] = 'Ocupație'
			processedArgs['data' .. tostring(labeldatacount)] = occupation
			labeldatacount = labeldatacount + 1
		end
		
		processedArgs['title'] = args['Nume'] or args['nume'] or args['name'] or wikidata.findLabel()
		processedArgs['doc'] = args['doc']
		processedArgs['wikidata'] = args['wikidata']
	else
		processedArgs['title'] = args['default_title']
		processedArgs['parent_colspan'] = args['parent_colspan'] or '2'
	end
	table.insert(retainedInputArgs, 'title')
	
	labeldatacount = labeldatacount + 1

	local earliestHeaderNumberAfterGeneralLabels = 0
	local earliestDataNumberAfterGeneralLabels = 0

	for argN, argV in pairs(args) do
		local headerStart
		local headerEnd
		local labelStart
		local labelEnd
		local dataStart
		local dataEnd
		headerStart, headerEnd = mw.ustring.find(argN, "header")
		labelStart, labelEnd = mw.ustring.find(argN, "label")
		dataStart, dataEnd = mw.ustring.find(argN, "data")
		styleStart, styleEnd = mw.ustring.find(argN, "style")
		classStart, classEnd = mw.ustring.find(argN, "class")
		
		local nr = ""
		local argumentName = nil
		if dataStart == 1 then
			nr = mw.ustring.sub(argN, 1 + dataEnd, mw.ustring.len(argN))
			argumentName = 'data'
			if argV and mw.ustring.len(mw.text.trim(argV)) > 0 and nr ~= nil and mw.ustring.match(nr, '%d+') then
				if earliestDataNumberAfterGeneralLabels == 0 or earliestDataNumberAfterGeneralLabels < tonumber(nr) then
					earliestDataNumberAfterGeneralLabels = tonumber(nr)
				end
			end
		elseif labelStart == 1 then
			nr = mw.ustring.sub(argN, 1 + labelEnd, mw.ustring.len(argN))
			argumentName = 'label'
		elseif headerStart == 1 then
			nr = mw.ustring.sub(argN, 1 + headerEnd, mw.ustring.len(argN))
			argumentName = 'header'
			if argV and mw.ustring.len(mw.text.trim(argV)) > 0 and nr ~= nil and mw.ustring.match(nr, '%d+') then
				if earliestHeaderNumberAfterGeneralLabels == 0 or earliestHeaderNumberAfterGeneralLabels < tonumber(nr) then
					earliestHeaderNumberAfterGeneralLabels = tonumber(nr)
				end
			end
		elseif styleStart == 1 then
			nr = mw.ustring.sub(argN, 1 + styleEnd, mw.ustring.len(argN))
			argumentName = 'style'
		elseif classStart == 1 then
			nr = mw.ustring.sub(argN, 1 + classEnd, mw.ustring.len(argN))
			argumentName = 'class'
		end
		if argumentName and nr and mw.ustring.len(mw.text.trim(nr)) > 0 and mw.ustring.gsub(nr, '%d+', '') == '' then
			processedArgs[argumentName .. (labeldatacount + tonumber(nr))] = argV
		elseif not tableContains(retainedInputArgs, argN) then
			processedArgs[argN] = argV
		end
	end
	if earliestDataNumberAfterGeneralLabels > 0 and (earliestHeaderNumberAfterGeneralLabels > earliestDataNumberAfterGeneralLabels or earliestHeaderNumberAfterGeneralLabels == 0) then
		processedArgs['header' .. tostring(labeldatacount - 1)] = 'Activitate'
	end
	return processedArgs
end

p.displayInfoboxFromArgs = function(args)
	local processedArgs = processArgs(args)
	return infobox._infobox(processedArgs)
end

p.displayInfobox = function(frame)
	local args = getArgs(frame)
	return p.displayInfoboxFromArgs(args)
end

return p