Modul:InfoboxUnitOfMeasurement

De la Wikipedia, enciclopedia liberă

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