Modul:InfoboxBiography
Acest modul generează o infocasetă de folosit pe articolele biografice. El primește parametri introduși manual în format, dar preia și date din Wikidata, atunci când parametrul corespunzător nu este completat explicit în articol. Modulul este folosit fie prin intermediul formatului {{Infocaseta Biografie}}, care apelează funcția p.displayInfobox; fie este extins de alte formate și module care pot adăuga câmpuri și elemente structurale diferite.
Utilizare
Modulul nu este apelat de regulă direct din articole, ci printr-un format care conține:
{{#invoke:InfoboxBiography|displayInfobox}}
Parametrii se transmit formatului, iar acesta îi transmite mai departe modulului.
Parametri
Parametri generali
| Parametru | Descriere |
|---|---|
embed (yes / da / y)
|
Activează modul „încorporat”: nu se mai preiau date din Wikidata, nu se afișează titlul, semnătura, prezența online; caseta este pregătită pentru a fi inclusă în altă infocasetă. |
q
|
ID-ul elementului Wikidata din care se preiau datele, dacă diferă de elementul asociat automat paginii curente. |
culoare cadru, culoare text
|
Culoarea cadrului, respectiv a textului din antet. |
aboveclass
|
Clasă CSS aplicată rândului de sus al casetei. |
title / Nume / nume / name
|
Titlul afișat în antetul casetei. Implicit se preia numele în română, apoi numele multilingv, apoi numele nativ/englez de pe Wikidata. |
default_title
|
Titlu folosit doar atunci când embed este activ.
|
parent_colspan
|
Numărul de coloane pe care se întinde caseta încorporată (implicit 2), folosit doar în modul „încorporat”. Pentru infocasete incluse, de exemplu, în cele despre practicanți de sporturi de echipă, a căror infocasetă are mai multe coloane. |
doc, wikidata
|
Parametri transmiși mai departe modulului de infobox generic (pentru a activa afișarea legăturii spre elementul Wikidata, și pentru a afișa o legătură spre pagina de descriere a modulului). |
stilsubtitlu / subheaderstyle
|
Stilul CSS al subtitlurilor (implicit text îngroșat, 110%). |
bio_header
|
Textul antetului care desparte secțiunea „Date personale” de restul câmpurilor introduse manual de utilizator (implicit „Activitate”). |
Imagine
| Parametru | Descriere |
|---|---|
image / Imagine / imagine / foto
|
Numele fișierului imagine (cu sau fără prefixul „Fișier:”/„File:”, cu sau fără sintaxă de tip [[...]]). Dacă lipsește, se preia imaginea de pe Wikidata. |
imagesize / image_size / Lățime
|
Lățimea imaginii, în pixeli. Valoarea maximă permisă este 300. |
caption / descriere / comentariu / Descriere
|
Descrierea (legenda) afișată sub imagine. |
Date personale
| Parametru | Proprietate Wikidata | Descriere |
|---|---|---|
nume_naștere / birth_name |
P1477 | Numele la naștere. |
porecla / poreclă / nickname (etichetă modificabilă prin tip_poreclă) |
P1449 | Porecla. |
data_nașterii / data_nasterii / birth_date / Născut |
P569 | Data nașterii. |
locul_nașterii / locul_nasterii / birth_place / Loc naștere / oraș_natal |
P19 | Locul nașterii. |
data_deces / data_decesului / death_date / Decedat |
P570 | Data decesului. |
locul_decesului / death_place / Loc deces |
P20 | Locul decesului. |
loc_odihna / locodihna / burial_place / final_resting_place |
P119 | Locul înmormântării. |
burial_date |
— | Data înmormântării (fără echivalent pe Wikidata în acest modul). |
cauza_decesului / death cause / death_cause |
P1196, P509 | Modul și cauza decesului. |
părinți / parents / parinti |
P22, P25 | Tatăl și mama. |
frați / frati / siblings |
P7, P9, P3373 | Frați/surori. |
partener / partners |
— | Partenerul/partenerii (doar manual, fără preluare de pe Wikidata). |
soț / soție / sot / sotie / spouse / căsătorit (etichetă modificabilă prin spouse-type) |
P26 | Soțul/soția, cu perioadele căsătoriei. |
număr_copii / numărcopii / number_children / childrennumber |
P1971 | Numărul de copii. |
copii / children |
P40 | Copiii (limitat la 10 valori). |
rude / relations |
— | Rude (doar manual). |
cetatenie / cetățenie / citizenship |
P27 | Cetățenia. Nu este preluată automat de pe Wikidata pentru persoane decedate înainte de anul 1800. |
etnie / ethnicity |
P172 | Etnia, cu forma de gen corespunzătoare (feminin/masculin) atunci când este disponibilă. |
nationalitate / nationality / naționalitate / Naționalitate |
— | Naționalitatea; se afișează doar dacă nu există etnie sau cetățenie completate. |
religie / religion / confesiune |
P140 | Religia/confesiunea. |
ocupație / occupation / ocupatie / profesiune / profesie |
P106 | Ocupația, cu forma de gen corespunzătoare. |
loc_activitate / work_location |
P937 | Locul desfășurării activității, cu perioadele aferente. |
limbi_vorbite / limba_vorbita |
P1412 | Limbile vorbite. |
avere / net_worth |
P2218 | Averea. |
Aniversări
| Parametru | Descriere |
|---|---|
aniversare_naștere
|
Dacă este completat, adaugă un subtitlu de tipul „N ani de la naștere”, calculat automat pe baza datei nașterii de pe Wikidata (P569). |
aniversare_deces
|
Similar, adaugă „N ani de la moarte”, pe baza datei decesului (P570). |
Semnătură și prezență online
Aceste câmpuri sunt afișate doar în afara modului „încorporat”.
| Parametru | Proprietate Wikidata | Descriere |
|---|---|---|
semnătură / semnatura / signature |
P109 | Fișierul cu semnătura persoanei; se afișează centrat, sub un antet „Semnătură”. |
sit / site / web / website / sit-web / site-web / sit-adresă / URL / url |
P856 | Adresa site-ului web oficial. |
În plus, sub antetul „Prezență online” se adaugă automat, atunci când există pe Wikidata, legături către diverse identificatori/profiluri externe (printre altele: IMDb, Twitter/X, Instagram, YouTube, TikTok, Facebook și alte proprietăți similare).
Rânduri suplimentare libere
Pe lângă câmpurile predefinite de mai sus, se pot adăuga rânduri suplimentare, generice, folosind seturile de parametri numerotate proprii modulului generic de infobox:
headerN— antet de secțiunelabelN— eticheta unui rânddataN— valoarea unui rândstyleN— stil CSS pentru rândul NclassN— clasă CSS pentru rândul N
unde N este un număr întreg (1, 2, 3...). Aceste rânduri sunt inserate după câmpurile completate automat de modul (date personale) și înaintea secțiunii de semnătură/prezență online. Dacă există cel puțin un dataN completat manual, se adaugă automat, înaintea acestuia, un antet de secțiune (implicit „Activitate”, modificabil prin bio_header).
Categorii
- Articole biografice fără fotografii — adăugată automat atunci când nu există nicio imagine (nici introdusă manual, nici pe Wikidata) și modulul nu este folosit în mod „încorporat”.
Module folosite
Modulul face apel, printre altele, la:
- Modul:Arguments — pentru preluarea parametrilor;
- Modul:Wikidata — pentru interogarea elementelor Wikidata;
- Modul:LocationAndCountry, Modul:BirthDateAndAge, Modul:DateUtils — pentru formatarea locurilor și datelor;
- Modul:Infobox, Modul:InfoboxImage — pentru construirea propriu-zisă a casetei;
- Modul:EditAtWikidata — pentru afișarea legăturii de editare pe Wikidata;
- Modul:WikidataUtils/Biography, Modul:NameAndImage, Modul:Lang, Modul:Transliteration, Modul:Plural, Modul:StringUtils, Modul:TableTools, Modul:Separated entries.
Vezi și
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 StringUtils = require('Modul:StringUtils')
local DateUtils = require('Modul:DateUtils')
local Lang = require('Modul:Lang')
local TableTools = require('Modul:TableTools')
local toWdLinkGenerator = require('Modul:EditAtWikidata')
local NameAndImage = require('Modul:NameAndImage')
local libraryUtil = require( 'libraryUtil' )
local plural = require('Modul:Plural')
local wdu_b = require('Modul:WikidataUtils/Biography')
local Transliteration = require('Modul:Transliteration')
local MIN_YEAR_TO_DISPLAY_CITIZENSHIP = 1800
local _br_ = tostring(mw.html.create('br'))
local appendToString = StringUtils._appendToString
local prependToString = StringUtils._prependToString
local encloseString = StringUtils._encloseString
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, wikidataId, wikidataEntId = wikidataCallback()
if wikidataValue and mw.ustring.len(mw.text.trim(wikidataValue)) > 0 then return wikidataValue .. toWdLinkGenerator.displayMessage(wikidataId, wikidataEntId) 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')
processedArgs['navbar'] = 'false'
local q = args.q or mw.wikibase.getEntityIdForCurrentPage()
if (processedArgs['child'] == nil) then
processedArgs['header1'] = 'Date personale'
local genderSuffix = wdu_b.isFemale() and 'ă' or ''
local imageName = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'image', 'Imagine', 'imagine', 'foto'}, function() return nil, nil, nil end)
if imageName then
if StringUtils._startsWithAny({mw.text.trim(imageName), '[['}) then
imageName = StringUtils._substringBefore({mw.text.trim(imageName), ']]', '|'})
imageName = StringUtils._removeStart({imageName, '[['})
end
imageName = StringUtils._removeStart({mw.text.trim(imageName), 'File:'})
imageName = StringUtils._removeStart({imageName, 'Fișier:'})
imageName = StringUtils._removeStart({imageName, 'Fişier:'})
imageName = StringUtils._removeStart({imageName, 'Image:'})
imageName = StringUtils._removeStart({imageName, 'Imagine:'})
imageName = StringUtils._removeStart({imageName, 'Media:'})
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 imageCaption = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'caption', 'descriere', 'comentariu', 'Descriere'}, function() return nil, nil, nil end)
local wdImageName, wdImageCaption
if imageName == nil then
wdImageName, wdImageCaption = wikidata.findImageAndCaption(q)
imageName = wdImageName
imageCaption = wdImageCaption
end
if imageName and mw.ustring.len(imageName) > 0 then
local imageSizeStr = args['imagesize'] or args['image_size'] or args['Lățime']
local imageSizeNum = 300
if imageSizeStr then
local imageSizeNumStr = mw.ustring.match(imageSizeStr, '%d+')
if imageSizeNumStr then
imageSizeNum = math.min(300, tonumber(imageSizeNumStr))
end
end
if wdImageName and not mw.ustring.find(mw.ustring.lower(imageName), '%.svg$') then
local wdFile = mw.title.new(imageName, 6)
wdFile = wdFile and wdFile.file
if wdFile and wdFile.exists and wdFile.width and wdFile.width > 0 then
imageSizeNum = math.min(imageSizeNum, wdFile.width)
end
end
processedArgs['image'] = imageName
processedArgs['infoboximage_size'] = tostring(imageSizeNum)
processedArgs['infoboximage_sizedefault'] = 'frameless'
processedArgs['infoboximage_suppressplaceholder'] = 'yes'
processedArgs['caption'] = imageCaption
end
local birthName = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'nume_naștere', 'birth_name'}, function()
local birthNameClaims = wikidata.findClaimsForProperty(q, 'P1477')
local roVal = nil
local otherLangVals = {}
if birthNameClaims then for _,eachBirthNameClaim in ipairs(birthNameClaims) do
if wikidata.isClaimTrue(eachBirthNameClaim) and wikidata.hasValueSnak(eachBirthNameClaim) then
if eachBirthNameClaim.mainsnak.datavalue.value.language == 'ro' then
roVal = eachBirthNameClaim.mainsnak.datavalue.value.text
else
local thisName = nil
if Transliteration.isTransliterationSupported(eachBirthNameClaim.mainsnak.datavalue.value.language) then
thisName = Lang.fromArgs(eachBirthNameClaim.mainsnak.datavalue.value.language .. '-Latn', nil, Transliteration.transliterate(eachBirthNameClaim.mainsnak.datavalue.value.text, eachBirthNameClaim.mainsnak.datavalue.value.language), false)
else
thisName = Lang.fromArgs(eachBirthNameClaim.mainsnak.datavalue.value.language, nil, eachBirthNameClaim.mainsnak.datavalue.value.text, false)
end
table.insert(otherLangVals, thisName)
end
end
end end
if roVal then return roVal, 'P1477', q
elseif #otherLangVals then return mw.text.listToText(otherLangVals, tostring(mw.html.create('br'))), 'P1477', q
else return nil
end
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 nickname = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'porecla', 'poreclă', 'nickname'}, function()
local birthNameClaims = wikidata.findClaimsForProperty(q, 'P1449')
local roVals = {}
local otherLangVals = {}
if birthNameClaims then for _,eachBirthNameClaim in ipairs(birthNameClaims) do
if wikidata.hasValueSnak(eachBirthNameClaim) and wikidata.claimHasRankAtLeastNormal(eachBirthNameClaim) then
if eachBirthNameClaim.mainsnak.datavalue.value.language == 'ro' then
table.insert(roVals, eachBirthNameClaim.mainsnak.datavalue.value.text)
else
table.insert(otherLangVals, Lang.fromArgs(eachBirthNameClaim.mainsnak.datavalue.value.language, nil, eachBirthNameClaim.mainsnak.datavalue.value.text, false))
end
end
end end
if #roVals == 0 and #otherLangVals == 0 then return nil end
return mw.text.listToText(#roVals > 0 and roVals or otherLangVals, ', ', ', '), 'P1449', q
end)
if nickname and mw.ustring.len(nickname) > 0 then
processedArgs['label' .. tostring(labeldatacount)] = args['tip_poreclă'] or 'Poreclă'
processedArgs['data' .. tostring(labeldatacount)] = nickname
labeldatacount = labeldatacount + 1
end
local birthDate = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'data_nașterii', 'data_nasterii', 'birth_date', 'Născut'}, function() return bda._getBdaByWikidata{link = 'yes', q = q}, 'P569', q end)
local birthPlace = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'locul_nașterii', 'locul_nasterii', 'birth_place', 'Loc naștere', 'oraș_natal'}, function() return lc.displayFromParams('P19', nil, 'P569', 1, '; ', true), 'P19', q 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', 'Decedat'}, function() return bda._getDdaByWikidata{link = 'yes', q = q}, 'P570', q end)
local deathPlace = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'locul_decesului', 'death_place', 'Loc deces' }, function() return lc.displayFromParams('P20', q, 'P570', 1, '; ', true), 'P20', q 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 table.concat(wikidata.findValueListWithDecoratedQualifiers(q, 'P119', false, {'$P580', '$P582'}, {'–'}) or {}, tostring(mw.html.create('br'))), 'P119', q end)
if burialSite and mw.ustring.len(mw.text.trim(burialSite)) > 0 or args['burial_date'] then
processedArgs['label' .. tostring(labeldatacount)] = 'Înmormântat' .. genderSuffix
processedArgs['data' .. tostring(labeldatacount)] = table.concat(TableTools.compressSparseArray({args['burial_date'], burialSite}), tostring(mw.html.create('br')))
labeldatacount = labeldatacount + 1
end
local causeOfDeath = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'cauza_decesului', 'death cause', 'death_cause'}, function()
local mOD = wikidata.findOneValue('P1196', q)
local cOD = wikidata.findOneValue('P509', q)
local cODTbl = {}
local cODPropTbl = {}
if mOD then
table.insert(cODTbl, mOD)
table.insert(cODPropTbl, 'P1196')
end
if cOD then
table.insert(cODTbl, cOD)
table.insert(cODPropTbl, 'P509')
end
if #cODTbl == 2 then
return appendToString({cODTbl[1], prependToString({encloseString({cODTbl[2], '(', ')'}), ' '})}), 'P509', q
elseif #cODTbl == 1 then
return cODTbl[1], cODPropTbl[1], q
end
return nil
end)
if causeOfDeath and mw.ustring.len(mw.text.trim(causeOfDeath)) > 0 then
processedArgs['label' .. tostring(labeldatacount)] = 'Cauza decesului'
processedArgs['data' .. tostring(labeldatacount)] = causeOfDeath
labeldatacount = labeldatacount + 1
end
local parents = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'părinți', 'parents', 'parinti'}, function() return join({wikidata.findOneValue('P22', q), wikidata.findOneValue('P25', q), separator = _br_}), 'P22', q 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 = {}
local props = {'P7', 'P9', 'P3373'}
local actualProp = nil
local wdTbl = {wikidata.getValueList(q, 'P7'), wikidata.getValueList(q, 'P9'), wikidata.getValueList(q, 'P3373')}
for _i,lst in ipairs(wdTbl) do
for _i1,v in ipairs(lst or {}) do
table.insert(tbl, v)
actualProp = props[_i]
end
end
tbl.separator = _br_
return join(tbl), actualProp, q
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, nil, 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', q}), 'P26', q end)
if spouse and mw.ustring.len(mw.text.trim(spouse)) > 0 then
processedArgs['label' .. tostring(labeldatacount)] = args['spouse-type'] or ('Căsătorit' .. genderSuffix .. ' cu')
processedArgs['data' .. tostring(labeldatacount)] = spouse
labeldatacount = labeldatacount + 1
end
local numberChildren = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'număr_copii', 'numărcopii', 'number_children', 'childrennumber'}, function() return wikidata._getValueListWithSeparator({_br_, 'P1971', q}), 'P1971', q end)
if numberChildren and mw.ustring.len(mw.text.trim(numberChildren)) > 0 then
processedArgs['label' .. tostring(labeldatacount)] = 'Număr de copii'
processedArgs['data' .. tostring(labeldatacount)] = numberChildren
labeldatacount = labeldatacount + 1
end
local children = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'copii', 'children'}, function() return wikidata._getValueListWithSeparator({_br_, 'P40', q, '10'}), 'P40', q 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 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()
if wdu_b.isDead() then
local dateOfDeathClaims = wikidata.findBestClaimsForProperty(q, 'P570')
for _,eachDateOfDeathClaim in ipairs(dateOfDeathClaims) do
local dateOfDeath = DateUtils.extractDateFromWikidataSnak(eachDateOfDeathClaim.mainsnak)
if dateOfDeath and dateOfDeath.year < MIN_YEAR_TO_DISPLAY_CITIZENSHIP then return nil end
end
end
local endOfCitizenship = wikidata.loadOneValueInChain({q, 'P27', '_P582'})
if not endOfCitizenship or endOfCitizenship == '' then endOfCitizenship = wikidata.loadOneValueInChain({q, 'P570', 'raw'}) end
local list = wikidata.findValueListWithDecoratedQualifiers(q, 'P27', false, {'$P580–$P582'}, {}, 'P41', '20px')
if list then return mw.text.listToText(list, _br_, _br_), 'P27', q else return nil end
--return NameAndImage._nameAndFlagFromPropOfEntity('P27', nil, DateUtils.parseWikidataDate(endOfCitizenship))
end)
if citizenship then
processedArgs['label' .. tostring(labeldatacount)] = 'Cetățenie'
processedArgs['data' .. tostring(labeldatacount)] = citizenship
labeldatacount = labeldatacount + 1
end
local ethnicityWdRetriever = function(entity)
local ethnicityClaims = wikidata.findBestClaimsForProperty(entity, 'P172') -- ethnic group
local retList = {}
local female = wdu_b.isFemale(entity)
if ethnicityClaims then
for _,eachEthnicityClaim in pairs(ethnicityClaims) do
if wikidata.hasValueSnak(eachEthnicityClaim) then
local callFunction = function(objectId, female)
local returnValue = nil
if objectId then
local demonymClaims = wikidata.findClaimsForProperty(objectId, 'P1549')
for eachClaimIdx, eachClaim in pairs(demonymClaims) do
if wikidata.isClaimTrue(eachClaim) and wikidata.hasValueSnak(eachClaim) then
if eachClaim.mainsnak.datavalue.value.language == 'ro' then
local qualifierIsFeminine = eachClaim.qualifiers and ( ( eachClaim.qualifiers['P21'] and eachClaim.qualifiers['P21'][1] and eachClaim.qualifiers['P21'][1].snaktype == 'value' and eachClaim.qualifiers['P21'][1].datavalue.value['numeric-id'] == 1775415 )
or ( eachClaim.qualifiers['P21'] and eachClaim.qualifiers['P21'][1] and eachClaim.qualifiers['P21'][1].snaktype == 'value' and eachClaim.qualifiers['P21'][1].datavalue.value['numeric-id'] == 6581072 )
or (eachClaim.qualifiers['P5185'] and eachClaim.qualifiers['P5185'][1] and eachClaim.qualifiers['P5185'][1].snaktype == 'value' and eachClaim.qualifiers['P5185'][1].datavalue.value['numeric-id'] == 1775415) )
if (qualifierIsFeminine and female) or (not qualifierIsFeminine and not female) then
returnValue = eachClaim.mainsnak.datavalue.value.text
end
end
end
end
end
return returnValue
end
local callFunctionWithGender = function(object) return callFunction(object, false) end
if female then callFunctionWithGender = function(object) return callFunction(object, true) end end
table.insert(retList, wikidata.findLinkToItemWithCallback(eachEthnicityClaim.mainsnak.datavalue.value['numeric-id'], false, nil, callFunctionWithGender))
end
end
end
if #retList > 0 then
retList.separator = tostring(mw.html.create('br'))
return join(retList), 'P172', nil
end
return nil, nil, 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 nationality = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'nationalitate', 'nationality', 'naționalitate', 'Naționalitate'}, function() return nil end)
if not ethnicity and not citizenship and nationality then
processedArgs['label' .. tostring(labeldatacount)] = 'Naționalitate'
processedArgs['data' .. tostring(labeldatacount)] = nationality
labeldatacount = labeldatacount + 1
end
local religion = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'religie', 'religion', 'confesiune'}, function() return wikidata._getValueListWithSeparator({_br_, 'P140', q}), 'P140', q 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', 'profesiune', 'profesie'}, function()
local occupationClaims = wikidata.findBestClaimsForProperty(q, 'P106')
local fem = wdu_b.isFemale()
local occupationList = {}
if occupationClaims then for _,eachOccupationClaim in ipairs(occupationClaims) do
if eachOccupationClaim.mainsnak.snaktype == 'value' then
table.insert(occupationList, wikidata.findLinkToItem(eachOccupationClaim.mainsnak.datavalue.value['numeric-id'], false, fem))
end
end end
return table.concat(occupationList, tostring(mw.html.create('br'))), 'P106', q
end)
if occupation then
processedArgs['label' .. tostring(labeldatacount)] = 'Ocupație'
processedArgs['data' .. tostring(labeldatacount)] = occupation
labeldatacount = labeldatacount + 1
end
local work_location = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'loc_activitate', 'work_location'}, function()
local workLocations = wikidata.findValueListWithQualifiersInBrackets(q, 'P937', false, {'$P580', '$P582'}, {'–'})
if workLocations then return mw.text.listToText(workLocations, _br_, _br_), 'P937', q end
end)
if work_location then
processedArgs['label' .. tostring(labeldatacount)] = 'Locul desfășurării activității'
processedArgs['data' .. tostring(labeldatacount)] = work_location
labeldatacount = labeldatacount + 1
end
local spoken_langs = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'limbi_vorbite', 'limba_vorbita'}, function()
local spokenLangs = wikidata.findValueListWithQualifiersInBrackets(q, 'P1412', false, {'$P3831'}, {', '})
if spokenLangs then return mw.text.listToText(spokenLangs, _br_, _br_), 'P1412', q end
end)
if spoken_langs then
processedArgs['label' .. tostring(labeldatacount)] = 'Limbi vorbite'
processedArgs['data' .. tostring(labeldatacount)] = spoken_langs
labeldatacount = labeldatacount + 1
end
local net_worth = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'avere', 'net_worth'}, function()
return wikidata.findOneValue('P2218', q), 'P2218', q
end)
if net_worth then
processedArgs['label' .. tostring(labeldatacount)] = 'Avere'
processedArgs['data' .. tostring(labeldatacount)] = net_worth
labeldatacount = labeldatacount + 1
end
index = 1
processedArgs['subheaderstyle'] = args['stilsubtitlu'] or args['subheaderstyle'] or 'font-weight: bold; font-size: 110%'
if args['aniversare_naștere'] then
local by = wikidata.findAnniversary('P569', q, args['aniversare_naștere'])
if by and by > 0 then
processedArgs['subheader' .. tostring(index)] = plural.build_plural(by, "an", "ani") .. ' de la naștere'
index = index + 1
end
end
if args['aniversare_deces'] then
local dy = wikidata.findAnniversary('P570', mw.wikibase.getEntityIdForCurrentPage(), args['aniversare_deces'])
if dy and dy > 0 then
processedArgs['subheader' .. tostring(index)] = plural.build_plural(dy, "an", "ani") .. ' de la moarte'
index = index + 1
end
end
processedArgs['title'] = args['title'] or args['Nume'] or args['nume'] or args['name'] or wikidata.findRoLabel(q) or wikidata.findMulLabel(q) or wikidata.findNativeOrEnglishLabel(q)
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
local largestIndex = labeldatacount
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
local argumentidx = labeldatacount + tonumber(nr)
processedArgs[argumentName .. tostring(argumentidx)] = argV
largestIndex = math.max(largestIndex, argumentidx)
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)] = args['bio_header'] or 'Activitate'
end
if not processedArgs['child'] then
local crtLineIndex = largestIndex + 1
local signature = args['semnătură'] or args['semnatura'] or args['signature'] or wikidata.findOneValueNoRef('P109', q)
if signature and signature ~= '' then
processedArgs['header' .. tostring(crtLineIndex)] = 'Semnătură'
crtLineIndex = crtLineIndex + 1
processedArgs['data' .. tostring(crtLineIndex)] = infoboxImage{image=signature, size='150', sizedefault='frameless', suppressplaceholder='yes', class='skin-invert'}
processedArgs['style' .. tostring(crtLineIndex)] = 'text-align: center;'
crtLineIndex = crtLineIndex + 1
end
local onlinelinks = {}
local linkstopullfromwd = {'P2013', 'P2002', 'P2035', 'P2847', 'P345', 'P3265', 'P3579', 'P3435', 'P2003', 'P2471', 'P2397', 'P6634', 'P2572', 'P7085', 'P3789', 'P11245'}
local webaddr = extractDedicatedArgFromInputArgs(retainedInputArgs, args, {'sit', 'site', 'web', 'website', 'sit-web', 'site-web', 'sit-adresă', 'URL', 'url'}, function() return nil end)
if webaddr then
if mw.ustring.find(webaddr, '[', 1, true) then
webaddr = StringUtils._substringBefore({StringUtils._substringAfter({webaddr, '['}), ' '})
end
end
if webaddr and mw.ustring.len(mw.text.trim(webaddr)) > 0 then
table.insert(onlinelinks, '[' .. webaddr .. ' Site web]')
else
table.insert(linkstopullfromwd, 1, 'P856')
end
local wdonlinelinks = wikidata.findOnlineLinks(linkstopullfromwd, q)
for _,eachWdOnlineLink in ipairs(wdonlinelinks) do
table.insert(onlinelinks, eachWdOnlineLink)
end
if #onlinelinks > 0 then
processedArgs['header' .. tostring(crtLineIndex)] = 'Prezență online'
crtLineIndex = crtLineIndex + 1
processedArgs['data' .. tostring(crtLineIndex)] = tostring(
mw.html.create('div')
:css('text-align', 'center')
:wikitext(table.concat(onlinelinks, tostring(mw.html.create('br'))))
)
crtLineIndex = crtLineIndex + 1
end
end
return processedArgs
end
p.displayInfoboxFromArgs = function(args)
local processedArgs = processArgs(args)
local outtext = infobox._infobox(processedArgs)
local maintcats = {}
if not processedArgs.image then
table.insert(maintcats, 'Articole biografice fără fotografii')
end
for _,eachMaintCat in ipairs(maintcats) do
outtext = outtext .. '[[Categorie:' .. eachMaintCat .. ']]'
end
return outtext
end
p.displayInfobox = function(frame)
local args = getArgs(frame, {parentFirst = true})
return p.displayInfoboxFromArgs(args)
end
return p