Modul:InfoboxBiography: Diferență între versiuni
Aspect
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 |
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 = |
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'] = |
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