Modul:Taxobox
Documentația acestui modul poate fi creată la Modul:Taxobox/doc
local getArgs = require('Modul:Arguments').getArgs
local infobox = require('Modul:Infobox')
local infoboxImage = require('Modul:InfoboxImage').InfoboxImage
local wikidata = require('Modul:Wikidata')
local StringUtils = require('Modul:StringUtils')
local join = require('Modul:Separated entries')._main
local p = {}
local taxonorder = {
'Q22666877', -- superdomeniu
'Q146481', --domeniu
'Q3491996', --subdomeniu
'Q19858692', --supraregn
'Q36732', --regn
'Q2752679', --subregn
'Q3150876', --infraregn
'Q3978005', --supraîncrengătură
'Q38348', --încrengătură
'Q1153785', --subîncrengătură
'Q2361851', --infraîncrengătură
'Q334460', --divisio
'Q3491997', --subdivisio
'Q3504061', --supraclasă
'Q37517', --clasă
'Q5867051', --subclasă
'Q2007442', --infraclasă
'Q6054425', --supracohortă
'Q2981883', --cohortă
'Q6541077', --subcohortă
'Q4226087', --infracohortă
'Q30093070', --diviziune
'Q30093105', --subdiviziune
'Q21061732', --serie
'Q5868144', --supraordin
'Q36602', --ordin
'Q6054237', --magnordin
'Q5867959', --subordin
'Q2889003', --infraordin
'Q6311258', -- parvordin
'Q10861426', --secțiune
'Q10861375', -- subsecțiune zoologică
'Q2136103', --suprafamilie
'Q10296147', --epifamilie
'Q35409', --familie
'Q164280', --subfamilie
'Q5481039', --infrafamilie
'Q14817220', --supratrib
'Q227936', --trib
'Q3965313', --subtrib
'Q3798630', --infratrib
'Q1783100', --supragen
'Q34740', --gen
'Q3238261', --subgen
'Q3181348', -- secțiune botanică
'Q5998839', --subsecțiune botanică
'Q3025161', --serie
'Q13198444', -- subserie
'Q1783100', --supraspecie
'Q7432', --specie
'Q68947', --subspecie
'Q21446603', --infraspecie
'Q767728', --varietate
'Q855769', --tulpină
}
local argMap = {
superdomain = 'Q22666877', supradomeniu = 'Q22666877',
domain = 'Q146481', domeniu = 'Q146481',
subdomain = 'Q3491996', subdomeniu = 'Q3491996',
superregnum = 'Q19858692', supraregn = 'Q19858692',
regnum = 'Q36732', regn = 'Q36732', kingdom = 'Q36732',
subregnum = 'Q2752679', subregn = 'Q2752679',
infraregnum = 'Q3150876', infraregn = 'Q3150876',
superdivisio = 'Q3978005', superdiviziune = 'Q3978005', superphylum = 'Q3978005', --supraîncrengătură
divisio = 'Q38348', phylum = 'Q38348', --încrengătură
subphylum = 'Q1153785', subdivisio = 'Q1153785', --subîncrengătură
infraphylum = 'Q2361851', --infraîncrengătură
microphylum = 'Q1153785',
superclassis = 'Q3504061', --supraclasă
classis = 'Q37517', --clasă
subclassis = 'Q5867051', --subclasă
infraclassis = 'Q2007442', --infraclasă
supracohors = 'Q6054425', --supracohortă
cohors = 'Q2981883', --cohortă
subcohors = 'Q6541077', --subcohortă
infracohors = 'Q4226087', --infracohortă
magnordo = 'Q6054237',
superordo = 'Q5868144', --supraordin
ordo = 'Q36602', --ordin
subordo = 'Q5867959', --subordin
infraordo = 'Q2889003', --infraordin
parvordo = 'Q6311258',
zoosectio = 'Q3181348', -- secțiune zoologică
zoosubsectio = 'Q10861375',
superfamilia = 'Q2136103', --suprafamilie
epifamilia = 'Q10296147', --epifamilie
familia = 'Q35409', --familie
subfamilia = 'Q164280', --subfamilie
infrafamilia = 'Q5481039', --infrafamilie
supertribus = 'Q14817220', --supratrib
tribus = 'Q227936', --trib
subtribus = 'Q3965313', --subtrib
infratribus = 'Q3798630', --infratrib
supergenus = 'Q1783100', --supragen
genus = 'Q34740', --gen
subgenus = 'Q3238261', --subgen
sectio = 'Q3181348', -- secțiune botanică
subsectio = 'Q5998839',
series2 = 'Q3025161', --serie
subseries2 = 'Q13198444', -- subserie
superspecies = 'Q1783100', --supraspecie
species = 'Q7432', --specie
subspecies = 'Q68947', --subspecie
infraspecies = 'Q21446603', --infraspecie
variety = 'Q767728', varietate = 'Q767728', -- varietate
strain = 'Q855769', -- tulpină
}
local function extractStatusFromWikidata()
local statusClaims = wikidata.findClaimsForProperty(nil, 'P141') -- iucn conservation status
local statusDescriptions = {}
if statusClaims and #statusClaims > 0 then
for statusIdx, statusClaim in ipairs(statusClaims) do
local statusQString = StringUtils.prependIfMissing({tostring(statusClaim.mainsnak.datavalue.value['numeric-id']), 'Q'})
local statusImg = wikidata.findOneValueNoRef('P18', statusQString)
if statusImg then statusImg = mw.ustring.gsub(statusImg, '.svg', ' ro.svg') end
local statusTxt = wikidata.findLabel(statusQString)
local statusCats = wikidata.getBestEntityIdsList(nil, 'P910')
statusDescriptions[statusIdx] = ''
if statusImg then statusDescriptions[statusIdx] = statusDescriptions[statusIdx] .. '[[Fișier:' .. statusImg .. '|frameless]]' end
if statusTxt then statusDescriptions[statusIdx] = statusDescriptions[statusIdx] .. tostring(mw.html.create('br')) .. statusTxt end
if statusCats then
for catIdx,catId in ipairs(statusCats) do
local localCatTitle = mw.wikibase.sitelink('Q' .. catId)
if localCatTitle and mw.ustring.len(mw.text.trim(localCatTitle)) > 0 then
statusDescriptions[statusIdx] = statusDescriptions[statusIdx] .. '[[' .. localCatTitle .. ']]'
end
end
end
statusDescriptions[statusIdx] = statusDescriptions[statusIdx] .. wikidata.outputReferences(statusClaim)
end
end
return statusDescriptions
end
local function extractStatusFromArgs(args)
local statusData = {}
statusData['iucn2.3'] = {}
statusData['iucn2.3']['ex'] = {image='Status iucn2.3 EX ro.svg', text='Dispărut', cat='Specii dispărute'}
statusData['iucn2.3']['ew'] = {image='Status iucn2.3 EW ro.svg', text='Stare de dispariție', cat='Specii dispărute în stare sălbatică'}
statusData['iucn2.3']['cr'] = {image='Status iucn2.3 CR ro.svg', text='Critic', cat='Specii în pericol critic de dispariție'}
statusData['iucn2.3']['en'] = {image='Status iucn2.3 EN ro.svg', text='În pericol', cat='Specii amenințate'}
statusData['iucn2.3']['vu'] = {image='Status iucn2.3 VU ro.svg', text='Vulnerabil', cat='Specii în stare vulnerabilă'}
statusData['iucn2.3']['lr'] = {image='Status iucn2.3 blank.svg', text='Risc minim', cat='Invalid conservation status'}
statusData['iucn2.3']['cd'] = {image='Status iucn2.3 CD ro.svg', text='[[Conservation Dependent]]', cat='IUCN Red List conservation dependent species'}
statusData['iucn2.3']['lr/cd'] = statusData['iucn2.3']['cd']
statusData['iucn2.3']['nt'] = {image='Status iucn2.3 NT ro.svg', text='Risc scăzut (NT)', cat='Specii amenințate moderat'}
statusData['iucn2.3']['lr/nt'] = statusData['iucn2.3']['nt']
statusData['iucn2.3']['lc'] = {image='Status iucn2.3 LC ro.svg', text='Risc scăzut (LC)', cat='Specii cu risc scăzut'}
statusData['iucn2.3']['lr/lc'] = statusData['iucn2.3']['lc']
statusData['iucn2.3']['dd'] = {image='Status iucn2.3 blank.svg', text='Date insuficiente'}
statusData['iucn2.3']['ne'] = {text='Neevaluată'}
statusData['iucn2.3']['nr'] = {text='Nerecunoscută'}
statusData['iucn2.3']['pe'] = {image='Status iucn2.3 CR ro.svg', text='Critic, posibilă dispariție', cat='Specii în pericol critic de dispariție'}
statusData['iucn2.3']['pew'] = {image='Status iucn2.3 CR ro.svg', text='Critic, posibilă dispariție în sălbăticie', cat='Specii în pericol critic de dispariție'}
statusData['iucn3.1'] = {}
statusData['iucn3.1']['ex'] = {image='Status iucn3.1 EX ro.svg', text='Dispărut', cat='Specii dispărute'}
statusData['iucn3.1']['ew'] = {image='Status iucn3.1 EW ro.svg', text='Stare de dispariție', cat='Specii dispărute în stare sălbatică'}
statusData['iucn3.1']['cr'] = {image='Status iucn3.1 CR ro.svg', text='Critic', cat='Specii în pericol critic de dispariție'}
statusData['iucn3.1']['en'] = {image='Status iucn3.1 EN ro.svg', text='În pericol', cat='Specii amenințate'}
statusData['iucn3.1']['vu'] = {image='Status iucn3.1 VU ro.svg', text='Vulnerabil', cat='Specii în stare vulnerabilă'}
statusData['iucn3.1']['nt'] = {image='Status iucn3.1 NT ro.svg', text='Risc scăzut (NT)', cat='Specii amenințate moderat'}
statusData['iucn3.1']['lc'] = {image='Status iucn3.1 LC ro.svg', text='Risc scăzut (LC)', cat='Specii cu risc scăzut'}
statusData['iucn3.1']['dd'] = {image='Status iucn3.1 blank.svg', text='Date insuficiente'}
statusData['iucn3.1']['ne'] = {text='Neevaluată'}
statusData['iucn3.1']['nr'] = {text='Nerecunoscută'}
statusData['iucn3.1']['pw'] = {image='Status iucn3.1 LC ro.svg', text='Critic, posibilă dispariție', cat='Specii în pericol critic de dispariție'}
statusData['iucn3.1']['pew'] = {image='Status iucn3.1 LC ro.svg', text='Critic, posibilă dispariție în sălbăticie', cat='Specii în pericol critic de dispariție'}
statusData['iucn'] = statusData['iucn3.1']
local ret = {}
for i=1,2 do
local statusArgName = 'status'
if i ~= 1 then statusArgName = statusArgName .. tostring(i) end
local statusObj = statusData[mw.ustring.lower(args[statusArgName .. '_system'])][mw.ustring.lower(args[statusArgName])]
if statusObj == nil then return '' end
local retTxt = ''
if statusObj.image then retTxt = retTxt .. '[[Fișier:' .. statusObj.image .. '|frameless]]' end
if statusObj.text then retTxt = retTxt .. tostring(mw.html.create('br')) .. statusObj.text end
if statusObj.cat then retTxt = retTxt .. '[[Categorie:' .. statusObj.cat .. ']]' end
table.insert(ret, retTxt)
end
return ret
end
local function extractTaxonomyFromArgs(args)
local taxonomy = nil
for argN,argV in pairs(args) do
if argMap[argN] then
if taxonomy == nil then taxonomy = {} end
taxonomy[argMap[argN]] = argV
end
end
if args['binomial'] then
if taxonomy == nil then taxonomy = {} end
taxonomy.name = binomial
end
local argAuthority = args['binomial_authority'] or args['binomial authority'] or args['autoritate_binomial'] or args['binomial_autoritate']
if argAuthority then
if taxonomy == nil then taxonomy = {} end
taxonomy.author = argAuthority
end
return nil
end
local function extractTaxonomyFromWikidata()
local taxonomy = nil
local taxonNameClaims = wikidata.findClaimsForProperty(nil, 'P225') -- taxon name
local taxonRanks = wikidata.getBestEntityIdsList(nil, 'P105') -- taxon rank list
local qTaxonRank = nil
if taxonRanks and #taxonRanks > 0 then qTaxonRank = StringUtils.prependIfMissing({taxonRanks[1], 'Q'}) end -- taxon rank
local rankValue = { deprecated = 0, normal = 1, preferred = 2 }
if taxonNameClaims and #taxonNameClaims > 0 then
table.sort(taxonNameClaims, function(c1, c2) return rankValue[c1.rank] > rankValue[c2.rank] end)
taxonomy = {}
taxonomy.qrank = qTaxonRank
taxonomy.name = wikidata.printSnak(taxonNameClaims[1].mainsnak) .. wikidata.outputReferences(taxonNameClaims[1])
if taxonNameClaims[1].qualifiers and taxonNameClaims[1].qualifiers['P405'] then -- taxon author
local taxonAuthorNamesList = {}
for taxonAuthorIdx,taxonAuthorQualifier in ipairs(taxonNameClaims[1].qualifiers['P405']) do
local taxonAuthorCitation = nil
if taxonAuthorQualifier.datatype == 'wikibase-item' and taxonAuthorQualifier.datavalue.type == 'wikibase-entityid' then
local taxonAuthorQID = StringUtils.prependIfMissing({tostring(taxonAuthorQualifier.datavalue.value['numeric-id']), 'Q'})
taxonAuthorCitation = wikidata.findOneValueNoRef('P428', taxonAuthorQID) -- botanist author abbreviation
if taxonAuthorCitation == nil then
taxonAuthorCitation = wikidata.findOneValueNoRef('P835', taxonAuthorQID) --author citation (zoology)
end
local taxonAuthorLink = nil
if taxonAuthorCitation == nil then
taxonAuthorLink = wikidata.printSnak(taxonAuthorQualifier)
else
taxonAuthorLink = '[[' .. (mw.wikibase.sitelink(taxonAuthorQID) or (':d:' .. taxonAuthorQID)) .. '|' .. taxonAuthorCitation .. ']]'
end
taxonAuthorLink = taxonAuthorLink .. wikidata.outputReferences(taxonAuthorQualifier)
table.insert(taxonAuthorNamesList, taxonAuthorLink)
end
end
taxonAuthorNamesList.separator = ', '
taxonomy.author = join(taxonAuthorNamesList)
end
if taxonNameClaims[1].qualifiers and taxonNameClaims[1].qualifiers['P574'] and taxonNameClaims[1].qualifiers['P574'][1] then
local d = wikidata.extractDateFromClaim(taxonNameClaims[1].qualifiers['P574'][1])
if d and d.year then taxonomy.publicationDate = tostring(d.year) end
end
end
local taxonParentIdList = wikidata.getBestEntityIdsList(nil, 'P171') -- parent taxon
while taxonParentIdList and #taxonParentIdList > 0 do
if taxonomy == nil then taxonomy = {} end
local taxonParentId = taxonParentIdList[1]
local qTaxonParentId = StringUtils.prependIfMissing({taxonParentId, 'Q'})
local taxonParentName = wikidata.findOneValueNoRef('P225', qTaxonParentId) -- taxon name
local taxonSitelink = mw.wikibase.sitelink(qTaxonParentId) or (':d:' .. qTaxonParentId)
local taxonRankId = wikidata.getBestEntityIdsList(qTaxonParentId, 'P105') -- taxon rank
if taxonRankId and taxonRankId[1] then
local qTaxonRankId = StringUtils.prependIfMissing({taxonRankId[1], 'Q'})
taxonomy[qTaxonRankId] = '[[' .. taxonSitelink .. '|' .. (taxonParentName or qTaxonParentId) .. ']]'
end
taxonParentIdList = wikidata.getBestEntityIdsList(qTaxonParentId, 'P171') -- parent taxon
end
return taxonomy
end
local function getNameAndAuthority(qId)
local qItem = StringUtils.prependIfMissing({qId, 'Q'})
local sName = wikidata.findOneValueNoRef('P225', qItem)
local sClaims = wikidata.findClaimsForProperty(qItem, 'P225')
local authors = nil
local year = nil
local nStatus = nil
if sName and sClaims and #sClaims > 0 and sClaims[1].qualifiers then
if sClaims[1].qualifiers['P405'] then
local taxonAuthorNamesList = {}
for taxonAuthorIdx,taxonAuthorQualifier in ipairs(sClaims[1].qualifiers['P405']) do
local taxonAuthorCitation = nil
if taxonAuthorQualifier.datatype == 'wikibase-item' and taxonAuthorQualifier.datavalue.type == 'wikibase-entityid' then
local taxonAuthorQID = StringUtils.prependIfMissing({tostring(taxonAuthorQualifier.datavalue.value['numeric-id']), 'Q'})
taxonAuthorCitation = wikidata.findOneValueNoRef('P428', taxonAuthorQID) -- botanist author abbreviation
if taxonAuthorCitation == nil then
taxonAuthorCitation = wikidata.findOneValueNoRef('P835', taxonAuthorQID) --author citation (zoology)
end
local taxonAuthorLink = nil
if taxonAuthorCitation == nil then
taxonAuthorLink = wikidata.printSnak(taxonAuthorQualifier)
else
taxonAuthorLink = '[[' .. (mw.wikibase.sitelink(taxonAuthorQID) or (':d:' .. taxonAuthorQID)) .. '|' .. taxonAuthorCitation .. ']]'
end
taxonAuthorLink = taxonAuthorLink .. wikidata.outputReferences(taxonAuthorQualifier)
table.insert(taxonAuthorNamesList, taxonAuthorLink)
end
end
taxonAuthorNamesList.separator = ', '
authors = join(taxonAuthorNamesList)
end
if sClaims[1].qualifiers['P574'] and sClaims[1].qualifiers['P574'][1] then
local d = wikidata.extractDateFromClaim(sClaims[1].qualifiers['P574'][1])
if d and d.year then year = tostring(d.year) end
end
if sClaims[1].qualifiers['P1135'] and sClaims[1].qualifiers['P1135'][1] then
nomStatus = sClaims[1].qualifiers['P1135'][1]
if nomStatus.datatype == 'wikibase-item' and nomStatus.datavalue.type == 'wikibase-entityid' then
local nomStatusQID = StringUtils.prependIfMissing({tostring(nomStatus.datavalue.value['numeric-id']), 'Q'})
nStatus = wikidata.findLinkToItem(nomStatusQID, false, false, true)
end
end
end
local entry = nil
if sName then
entry = {}
entry.name = sName
entry.author = authors
entry.year = year
entry.nomStatus = nStatus
end
mw.logObject(entry)
return entry
end
local function extractSynonymsFromWikidata()
local synonymEntries = nil
local synonyms1420 = wikidata.getBestEntityIdsList(nil, 'P1420') -- synonyms
local synonyms694 = wikidata.getBestEntityIdsList(nil, 'P694') -- synonyms nom.nov.
if synonyms1420 == nil and synonyms694 == nil then
return nil
end
local synonyms = {}
for syn = 1, #synonyms1420 do
synonyms[synonyms1420[syn]] = true
end
for syn = 1, #synonyms694 do
synonyms[synonyms694[syn]] = true
end
local synTableIdx = 1
if synonyms then
synonymEntries = {}
for synonymId,synonymBool in pairs(synonyms) do
local synonymEntry = getNameAndAuthority(synonymId)
if synonymEntry then
synonymEntries[synTableIdx] = synonymEntry
synTableIdx = synTableIdx + 1
end
end
end
if synonymEntries then
table.sort(synonymEntries, function(c1, c2)
if c1 and c2 and c1.year and c2.year then
if c1.year == c2.year then return c1.name < c2.name end
return c1.year < c2.year
end
if c1 and c1.year then return true end
if c2 and c2.year then return false end
return c1.name < c2.name
end)
end
return synonymEntries
end
local function isValueSnak(snak)
return snak and snak.snaktype == 'value'
end
local function hasValueSnak(claim)
return claim and claim.type == 'statement' and isValueSnak(claim.mainsnak)
end
local function findImageAndCaption(entityId, propertyId, defaultCaption)
local wikidataImages = wikidata.findBestClaimsForProperty(entityId, propertyId)
local imageName, imageCaption
if wikidataImages and #wikidataImages > 0 then
local wikidataImage = wikidataImages[1]
if hasValueSnak(wikidataImage) and wikidataImage.mainsnak.datavalue then
imageName = wikidataImage.mainsnak.datavalue.value
local roDescr = defaultCaption
if wikidataImage.qualifiers and wikidataImage.qualifiers['P2096'] then
for _,eachImageDescrLangString in pairs(wikidataImage.qualifiers['P2096']) do
if isValueSnak(eachImageDescrLangString) and eachImageDescrLangString.datavalue and eachImageDescrLangString.datavalue.value.language == 'ro' then
roDescr = eachImageDescrLangString.datavalue.value.text or roDescr
end
end
end
if roDescr == defaultCaption and wikidataImage.qualifiers and wikidataImage.qualifiers['P180'] then
local subjList = {}
for _,eachSubj in pairs(wikidataImage.qualifiers['P180']) do
subjDescrQID = StringUtils.prependIfMissing({tostring(eachSubj.datavalue.value.id), 'Q'})
local subjLabel = wikidata.findLabel(subjDescrQID, 'ro')
subjDescr = "[[" .. (mw.wikibase.sitelink(subjDescrQID) or (':d:' .. subjDescrQID)) .. '|' .. StringUtils._capitalize({subjLabel}) .. "]]"
if subjLabel == wikidata.findOneValueNoRef('P225', subjDescrQID) then
subjDescr = "''" .. subjDescr .. "''"
end
table.insert(subjList, subjDescr)
end
subjList.separator = ', '
roDescr = join(subjList) or roDescr
end
imageCaption = roDescr
end
end
return imageName, imageCaption
end
p._displayInfobox = function(args)
local ibArgs = { antet = 'biota' }
if args['colour'] then ibArgs['culoare cadru'] = args['colour'] end
local wdLabel = wikidata.findLabel()
if wdLabel == wikidata.findOneValueNoRef('P225', nil) then
wdLabel = "''" .. wdLabel .. "''"
end
local title = args['nume'] or args['name'] or wdLabel
if title == nil or mw.ustring.len(mw.text.trim(title)) == 0 then
title = mw.title.getCurrentTitle().text
end
if args['temporal_range'] then
title = title .. tostring(mw.html.create('br')) .. tostring(mw.html.create('small'):wikitext('Fosilă: ' .. args['temporal_range']))
end
ibArgs['title'] = StringUtils._capitalize({title})
local img = {}
if args['image'] then
img[1] = args['image']
ibArgs['image'] = infoboxImage{image=img[1], sizedefault='280px', upright='1', alt=args['image_alt']}
ibArgs['caption'] = args['image_caption']
else
imagewd, captionwd = findImageAndCaption(nil, 'P18', nil)
img[1] = imagewd
ibArgs['image'] = infoboxImage{image=img[1], sizedefault='280px', upright='1', alt=args['image_alt']}
ibArgs['caption'] = captionwd
end
img[2] = args['image2']
if img[2] then ibArgs['image2'] = infoboxImage{image=img[2], sizedefault='280px', upright='1', alt=args['image2_alt']} end
ibArgs['caption2'] = args['image2_caption']
local entryIndex = 1
local statusDescriptions = nil
if args['status'] and args['status_system'] then
statusDescriptions = extractStatusFromArgs(args)
else
statusDescriptions = extractStatusFromWikidata()
end
if statusDescriptions and #statusDescriptions > 0 then
ibArgs['header' .. tostring(entryIndex)] = '[[Stare de conservare]]'
entryIndex = entryIndex + 1
for statDescIdx=1,#statusDescriptions,1 do
ibArgs['data' .. tostring(entryIndex)] = statusDescriptions[statDescIdx]
entryIndex = entryIndex + 1
end
end
local taxonomy = extractTaxonomyFromArgs(args)
if taxonomy == nil or #taxonomy == 0 then
taxonomy = extractTaxonomyFromWikidata()
end
if taxonomy then
ibArgs['header' .. tostring(entryIndex)] = '[[Clasificare științifică]]'
entryIndex = entryIndex + 1
for _k,eachTaxonOrder in pairs(taxonorder) do
if taxonomy[eachTaxonOrder] then
ibArgs['label' .. tostring(entryIndex)] = '[[' .. (mw.wikibase.sitelink(eachTaxonOrder) or (':d:' .. eachTaxonOrder)) .. '|' .. StringUtils.capitalize({wikidata.findLabel(eachTaxonOrder)}) .. ']]'
ibArgs['data' .. tostring(entryIndex)] = taxonomy[eachTaxonOrder]
entryIndex = entryIndex + 1
end
end
if taxonomy.name then
if taxonomy.qrank == 'Q7432' then
ibArgs['header' .. tostring(entryIndex)] = '[[Nume binomial]]'
else
if taxonomy.qrank then
ibArgs['header' .. tostring(entryIndex)] = '[[' .. (mw.wikibase.sitelink(taxonomy.qrank) or (':d:' .. taxonomy.qrank)) .. '|' .. StringUtils.capitalize({wikidata.findLabel(taxonomy.qrank)}) .. ']]'
else
ibArgs['header' .. tostring(entryIndex)] = 'Rang necunoscut'
end
end
entryIndex = entryIndex + 1
ibArgs['data' .. tostring(entryIndex)] = "'''" .. tostring(mw.html.create('span'):addClass('binomial'):wikitext(taxonomy.name)) .. "'''"
entryIndex = entryIndex + 1
if taxonomy.author then
ibArgs['data' .. tostring(entryIndex)] = tostring(tostring(mw.html.create('small'):wikitext(join({taxonomy.author, taxonomy.publicationDate, separator = ', '}))))
entryIndex = entryIndex + 1
end
end
end
taxonomicTypes = wikidata.getBestEntityIdsList(nil, 'P427')
if taxonomicTypes and #taxonomicTypes > 0 then
for typeIdx,taxonomicType in ipairs(taxonomicTypes) do
local qType = StringUtils.prependIfMissing({taxonomicType, 'Q'})
local taxType = getNameAndAuthority(qType)
if taxType then
ibArgs['header' .. tostring(entryIndex)] = 'Tip taxonomic'
entryIndex = entryIndex + 1
ibArgs['data' .. tostring(entryIndex)] = "''[[" .. (mw.wikibase.sitelink(qType) or (':d:' .. qType)) .. '|' .. taxType.name .. "]]''"
if taxType.author then
ibArgs['data' .. tostring(entryIndex)] = ibArgs['data' .. tostring(entryIndex)] .. ' ' .. tostring(tostring(mw.html.create('small'):wikitext(join({taxType.author, taxType.year, separator = ', '}))))
end
if taxType.nomStatus then
ibArgs['data' .. tostring(entryIndex)] = ibArgs['data' .. tostring(entryIndex)] .. ' ' .. tostring(tostring(mw.html.create('small'):wikitext('(' .. taxType.nomStatus .. ')')))
end
entryIndex = entryIndex + 1
end
end
end
local rangeMap = args['range_map']
if rangeMap then
ibArgs['data' .. tostring(entryIndex)] = infoboxImage{image=rangeMap, sizedefault='280px', upright='1', alt=args['image_alt']}
entryIndex = entryIndex + 1
else
rangeMap, rangeCaption = findImageAndCaption(nil, 'P181', 'Areal de răspândire')
if rangeMap then
ibArgs['data' .. tostring(entryIndex)] = infoboxImage{image=rangeMap, sizedefault='280px', upright='1'}
entryIndex = entryIndex + 1
ibArgs['data' .. tostring(entryIndex)] = rangeCaption
entryIndex = entryIndex + 1
end
end
local synonymEntries = extractSynonymsFromWikidata()
if synonymEntries and #synonymEntries > 0 then
ibArgs['header' .. tostring(entryIndex)] = 'Sinonime'
entryIndex = entryIndex + 1
for synIdx=1,#synonymEntries,1 do
local entry = synonymEntries[synIdx]
local synonymData = "''" .. entry.name .. "''"
if entry.author then
synonymData = synonymData .. ' ' .. tostring(mw.html.create('small'):wikitext(join({entry.author, entry.year, separator = ', '})))
end
if entry.nomStatus then
synonymData = synonymData .. ' ' .. tostring(mw.html.create('small'):wikitext('(' .. entry.nomStatus .. ')'))
end
ibArgs['data' .. tostring(entryIndex)] = synonymData
entryIndex = entryIndex + 1
end
end
ibArgs.doc = 'Taxobox-wd'
ibArgs.wikidata = 'y'
return infobox._infobox(ibArgs)
end
p.infobox = function(frame)
local args = getArgs(frame)
return p._displayInfobox(args)
end
return p