Modul:Biodata
Afișează datele biografice elementare (data și locul nașterii, data și locul decesului) unei persoane. Dacă nu sunt prezente, ele se extrag de la Wikidata.
local p = {}
local getArgs = require('Modul:Arguments').getArgs
local wikidata = require('Modul:Wikidata')
local lc = require('Modul:LocationAndCountry')
local join = require('Modul:Separated entries')._main
local StringUtils = require('Modul:StringUtils')
local GregorianDate = require('Modul:GregorianDate')
local DateUtils = require('Modul:DateUtils')
local function processDateDateRefAndPlace(iDate, iDateRefs, iPlace, prefix, refsEnabled)
local out = ''
if not StringUtils.__isEmpty(iDate) or not StringUtils.__isEmpty(iPlaced) then
out = out .. prefix
end
if not StringUtils.__isEmpty(iDate) then
out = out .. iDate
if StringUtils.__isEmpty(iPlace) and not StringUtils.__isEmpty(iDateRefs) then
out = out .. iDateRefs
end
end
if not StringUtils.__isEmpty(iPlace) then
out = out .. ',' .. (refsEnabled and not StringUtils.__isEmpty(iDateRefs) and iDateRefs or '') .. ' ' .. iPlace
end
if out == '' then return nil end
return out
end
p.fromParams = function(birthDate, birthDateRefs, birthPlace, deathDate, deathDateRefs, deathPlace, deathIntro, refsEnabled)
local birthInfo = processDateDateRefAndPlace(birthDate, birthDateRefs, birthPlace, 'n. ', refsEnabled)
local deathInfo = processDateDateRefAndPlace(deathDate, deathDateRefs, deathPlace, deathIntro or 'd. ', refsEnabled)
return join({birthInfo, deathInfo, separator = mw.text.decode(' – ', true)})
end
p.fromArray = function(args)
local birthDate = args[1]
local birthDateRefs = nil
local wikidataBDate = nil
local birthTs = nil
local deathTs = nil
local q = args['q']
local refsEnabled = args['ref'] == 'y' or args['ref'] == 'd' or args['ref'] == 'yes' or args['ref'] == 'da'
if not args[1] then
wikidataBDate = wikidata.findDateValues('P569', q)
if wikidataBDate and wikidataBDate[1] then
birthDate = GregorianDate.displayDualDateIfInInterval(wikidataBDate[1], true)
birthDateRefs = refsEnabled and wikidata.outputReferences(wikidataBDate[1].claim) or ''
birthTs = DateUtils.parseWikidataDate(wikidataBDate[1].claim.mainsnak.datavalue.value.time, wikidataBDate[1].claim.mainsnak.datavalue.value.precision)
else
birthDate = "[[Categorie:Nașteri cu dată necunoscută]] ?"
end
end
local birthPlace = args[2] or lc.displayFromParams('P19', q, birthTs or 'P569', 1, nil, refsEnabled)
local deathDate = args[3]
local deathIntro = 'd. '
if not args[3] then
local wikidataDDate = wikidata.findDateValues('P570', q)
if wikidataDDate then
for _,eachDateCandidate in ipairs(wikidataDDate) do
if eachDateCandidate and eachDateCandidate.claim.mainsnak.snaktype == 'value' then
deathDate = GregorianDate.displayDualDateIfInInterval(eachDateCandidate, true)
deathDateRefs = refsEnabled and wikidata.outputReferences(eachDateCandidate.claim) or ''
deathTs = DateUtils.parseWikidataDate(eachDateCandidate.claim.mainsnak.datavalue.value.time, eachDateCandidate.claim.mainsnak.datavalue.value.precision)
break
elseif eachDateCandidate.claim.mainsnak.snaktype == 'somevalue' then
deathDate = "[[Categorie:Decese cu dată necunoscută]] ?"
break
end
end
end
if not deathDate then
local wikidataDisappDate = wikidata.findDateValues('P746', q)
if wikidataDisappDate then
for _,eachDateCandidate in ipairs(wikidataDisappDate) do
if eachDateCandidate and eachDateCandidate.claim.mainsnak.snaktype == 'value' then
--mw.logObject(eachDateCandidate, '[Biodata] disapp date')
deathDate = GregorianDate.displayDualDateIfInInterval(eachDateCandidate, true)
deathDateRefs = wikidata.outputReferences(eachDateCandidate.claim)
deathTs = DateUtils.parseWikidataDate(eachDateCandidate.claim.mainsnak.datavalue.value.time, eachDateCandidate.claim.mainsnak.datavalue.value.precision)
deathIntro = 'disp. '
break
end
end
end
end
if not deathDate and wikidataDDate and wikidataDDate[1] and wikidataDDate[1].year < (os.date("*t").year - 120) then
deathDate = "[[Categorie:Decese cu dată necunoscută]] ?"
end
end
local deathPlace = args[4] or lc.displayFromParams('P20', q, deathTs or 'P570', 1, nil, refsEnabled)
return p.fromParams(birthDate, birthDateRefs, birthPlace, deathDate, deathDateRefs, deathPlace, deathIntro, refsEnabled)
end
p.fromFrame = function(frame)
local args = getArgs(frame)
return p.fromArray(args)
end
return p