Modul:InfoboxUnitOfMeasurement
Documentația acestui modul poate fi creată la Modul:InfoboxUnitOfMeasurement/doc
local p = {}
local getArgs = require('Modul:Arguments').getArgs
local wikidata = require('Modul:Wikidata')
local infobox = require('Modul:Infobox').infobox
local StringUtils = require('Modul:StringUtils')
local TableTools = require('Modul:TableTools')
local displayImage = require('Modul:InfoboxImage').InfoboxImage
p.fromArgs = function(unit)
local ibArgs = {}
ibArgs['culoare cadru'] = '#FFDAB9'
ibArgs['culoare text'] = '#000'
ibArgs.antet = 'blank'
ibArgs.title = StringUtils._capitalize({unit.name})
ibArgs.image = displayImage({image = unit.image})
ibArgs.caption = unit.imageDescr
ibArgs.wikidata = 'y'
ibArgs.doc = 'Infocaseta Unitate de măsură'
ibArgs.label10 = 'Sistem'
ibArgs.data10 = unit.system
ibArgs.label12 = 'Nume'
ibArgs.data12 = unit.name
ibArgs.label14 = 'Simbol'
ibArgs.data14 = unit.symbol
ibArgs.label16 = 'Mărime'
ibArgs.data16 = unit.domain
ibArgs.label18 = 'Simbolul mărimii'
ibArgs.data18 = unit.domainSymbols
ibArgs.label20 = 'Denumit după'
ibArgs.data20 = unit.namedAfter
ibArgs.label22 = 'Utilizare'
ibArgs.data22 = unit.use
ibArgs.label24 = 'Unitatea în SI'
ibArgs.data24 = unit.siUnit
ibArgs.label26 = 'Unitatea în CGS'
ibArgs.data26 = unit.cgsUnit
ibArgs.label28 = 'Formula'
ibArgs.data28 = unit.formula
ibArgs.label30 = 'Observație'
ibArgs.data30 = unit.notes
ibArgs.label32 = 'Alte caracteristici'
ibArgs.data32 = unit.otherText
local idx = 40
if unit.otherList then for _,eachOtherItem in ipairs(unit.otherItems) do
if eachOtherItem.header then
ibArgs['header' .. tostring(idx)] = eachOtherItem.header
idx = idx + 1
end
ibArgs['label' .. tostring(idx)] = eachOtherItem.label
ibArgs['data' .. tostring(idx)] = eachOtherItem.data
idx = idx + 1
end end
return infobox(ibArgs)
end
local function extractDomainSymbolsFromWdId(wdId)
local domainSymbols = {}
local wdDomainClaims = wikidata.findBestClaimsForProperty(nil, 'P111')
if wdDomainClaims then
for _,eachDomainClaim in ipairs(wdDomainClaims) do
if eachDomainClaim.type == 'statement' and eachDomainClaim.mainsnak.snaktype == 'value' then
local domainId = eachDomainClaim.mainsnak.datavalue.value['numeric-id']
local wdDomainSymbols = wikidata.findBestValues('P416', StringUtils._prependIfMissing({tostring(domainId), 'Q'}))
if wdDomainSymbols then for _,eachDomainSymbol in ipairs(wdDomainSymbols) do
table.insert(domainSymbols, eachDomainSymbol)
end end
end
end
end
if #domainSymbols > 0 then return table.concat(domainSymbols, ', ') end
return nil
end
local function extractSymbolFromWd(wdId)
local symbolClaims = wikidata.findBestClaimsForProperty(wdId, 'P558') -- unit symbol
local symbols = {}
if symbolClaims then for _,eachSymbolClaim in ipairs(symbolClaims) do
local symbolToAdd = true
if eachSymbolClaim.qualifiers
and ((eachSymbolClaim.qualifiers['P2439'] and #(eachSymbolClaim.qualifiers['P2439']) > 0) or (eachSymbolClaim.qualifiers['P407'] and #(eachSymbolClaim.qualifiers['P407']) > 0) or (eachSymbolClaim.qualifiers['P282'] and #(eachSymbolClaim.qualifiers['P282']) > 0)) then
symbolToAdd = false
if eachSymbolClaim.qualifiers['P407'] and #(eachSymbolClaim.qualifiers['P407']) > 0 then
for _,eachLanguageClaim in ipairs(eachSymbolClaim.qualifiers['P407']) do
if eachLanguageClaim.snaktype == 'value' and eachLanguageClaim.datavalue.value and eachLanguageClaim.datavalue.value['numeric-id'] == 7913 then
symbolToAdd = true
end
end
end
if eachSymbolClaim.qualifiers['P2439'] and #(eachSymbolClaim.qualifiers['P2439']) > 0 then
for _,eachLanguageClaim in ipairs(eachSymbolClaim.qualifiers['P2439']) do
if eachLanguageClaim.snaktype == 'value' and eachLanguageClaim.datavalue.value and eachLanguageClaim.datavalue.value['numeric-id'] == 7913 then
symbolToAdd = true
end
end
end
if eachSymbolClaim.qualifiers['P282'] and eachSymbolClaim.qualifiers['P282'][1] then
if eachSymbolClaim.qualifiers['P282'][1].snaktype == 'value' and eachSymbolClaim.qualifiers['P282'][1].datavalue.value and eachSymbolClaim.qualifiers['P282'][1].datavalue.value['numeric-id'] == 8229 then
symbolToAdd = true
end
end
end
if symbolToAdd then
table.insert(symbols, wikidata.printSnak(eachSymbolClaim.mainsnak))
end
end end
if #symbols > 0 then return table.concat(symbols, ', ') else return nil end
end
p.fromArray = function(args)
local unit = {}
unit.name = args['nume'] or args['name'] or wikidata.findLabel() or mw.title.getCurrentTitle().text
unit.image = args['imagine']
if not unit.image then unit.image, unit.imageDescr = wikidata.findImageAndCaption() end
if not unit.imageDescr then unit.imageDescr = args['comentariu'] end
unit.system = args['sistem'] or args['Sistem']
unit.symbol = args['simbol'] or args['Simbol'] or extractSymbolFromWd()
unit.domain = args['domeniu'] or args['Domeniu'] or wikidata._getBestValuesWithSeparator(nil, 'P111', ', ')
unit.domainSymbols = args['Simbolul domeniilor'] or args['simboluri'] or extractDomainSymbolsFromWdId()
unit.namedAfter = args['Denumit după'] or wikidata._getBestValuesWithSeparator(nil, 'P138', tostring(mw.html.create('br')))
unit.siUnit = args['Unitatea în SI'] or args['în SI'] or wikidata.findOneValue('P2370')
unit.cgsUnit = args['Unitatea în CGS'] or args['în CGS']
unit.formula = args['Formula'] or wikidata._getValueListWithSeparator({tostring(mw.html.create('br')), 'P2442'})
unit.notes = args['Observații']
unit.otherText = args['Alte caracteristici']
local headers = TableTools.affixNums(args, 'punct-')
if headers then
unit.otherItems = {}
for _,eachHeader in ipairs(headers) do
local otherItem = {}
otherItem.header = args['punct-' .. tostring(eachHeader)]
otherItem.label = args['n-desc' .. tostring(eachHeader)]
otherItem.data = args['descrie' .. tostring(eachHeader)]
table.insert(unit.otherItems, otherItem)
end
end
return p.fromArgs(unit)
end
p.fromFrame = function(frame)
local args = getArgs(frame)
return p.fromArray(args)
end
return p