La documentación para este módulo puede ser creada en Módulo:Top/doc

local function starts_with(str, start)    return str:sub(1, #start) == start end  local function renderRow(heading, value) 	return '|-\n| class="info" | \'\'\'' .. heading .. '\'\'\'\n| style="padding-right:5px;" | ' .. value .. '\n' end  local function renderLinkedClaim(id) 	local linkTarget = mw.wikibase.sitelink(id) 	local linkName = mw.wikibase.label(id) 	if linkTarget == nil then 		return linkName 	else 		return '[[' .. linkTarget .. '|' .. linkName .. ']]' 	end end  local function rSimple(item, property) 	return item:formatPropertyValues(property).value end  local lang = mw.language.getContentLanguage() local thousands = {'', 'mil', 'millón', 'mil millones'}  local function sigfigs(num) 	local digits = math.floor(math.log10(num) / 3) 	if digits <= 0 then 		return lang:formatNum(num) 	end 	num = math.floor(num / math.pow(10, 3 * digits -1)) / 10 	local result = lang:formatNum(num) 	result = result .. ' ' .. thousands[digits+1] 	return result end  local function rPopulation(item, property, frame) 	local s = item:getBestStatements(property)[1] 	local result = sigfigs( tonumber(s.mainsnak.datavalue.value.amount) )  	if s.qualifiers ~= nil and s.qualifiers['P585'] ~= nil and #s.qualifiers['P585'] > 0 then 		result = result .. ' (' ..  string.match(s.qualifiers['P585'][1].datavalue.value.time, '0*([1-9][0-9]+)\-', 1) .. ')' 	end 	return result end  local function rElectricity(item, property) 	local claims = item:getBestStatements(property) 	local voltage = {} 	for _,s in pairs(claims) do  		local v = mw.wikibase.renderSnak(s.mainsnak) 		if s.qualifiers ~= nil and s.qualifiers['P2144'] ~= nil and #s.qualifiers['P2144'] > 0 then 			v = v .. ' / ' .. mw.wikibase.renderSnak(s.qualifiers['P2144'][1]) 		end 		table.insert(voltage, v) 	end 	local result = table.concat(voltage, ' y ') 	if #item:getBestStatements('P2853') > 0 then 		result = result .. ' (' .. item:formatPropertyValues('P2853').value .. ')' 	end 	return result end  local function claimOrLabel(id, property)  	local item = mw.wikibase.getEntity(id) 	if #item:getBestStatements(property) > 0 and item:getBestStatements(property)[1].mainsnak.datavalue ~= nil then 		return mw.wikibase.renderSnak(item:getBestStatements(property)[1].mainsnak) 	end 	return item:getLabel() end  local function rCurrency(item, property) 	local claims = item:getBestStatements(property) 	local result = {} 	for _, claim in pairs(claims) do 		local id = 'Q' .. claim.mainsnak.datavalue.value['numeric-id'] 		local currency = mw.wikibase.getEntity(id) 		local subresult = currency:getLabel() 		local symbol = claimOrLabel(id, 'P498') 		if symbol ~= currency:getLabel() then 			subresult = subresult .. ' (' .. symbol .. ')' 		end 		table.insert(result, subresult) 	end 	return table.concat(result, '<br/>') end  local function rEmergency(item, property) 	local claims = item:getBestStatements(property) 	local result = {} 	for _, claim in pairs(claims) do 		local id = 'Q' .. claim.mainsnak.datavalue.value['numeric-id'] 		local res = claimOrLabel(id, 'P1329') 		if claim.qualifiers ~= nil and claim.qualifiers['P366'] ~= nil and #claim.qualifiers['P366'] > 0 then 			local usage = {} 			for _, qual in pairs(claim.qualifiers['P366']) do 				table.insert(usage, mw.wikibase.renderSnak(qual)) 			end 			res = res .. ' (' .. table.concat(usage, ', ') .. ')' 		end 		table.insert(result, res) 	end 	return table.concat(result, ', ') end  local function rTimezones(item, property) 	local claims = item:getBestStatements(property) 	if #claims > 3 then 		local minEntity = nil 		local maxEntity = nil 		local minOffset = 20 		local maxOffset = -20 		local unknownTZs = {} 		for _, claim in pairs(claims) do 			local e = mw.wikibase.getEntity('Q' .. claim.mainsnak.datavalue.value['numeric-id']) 			if #e:getBestStatements('P2907') == 1 then 				local val = tonumber(e:getBestStatements('P2907')[1].mainsnak.datavalue.value.amount) 				if val < minOffset then 					minOffset = val 					minEntity = e 				end 				if val > maxOffset then 					maxOffset = val 					maxEntity = e 				end 			else 				table.insert(unknownTZs, e:getLabel()) 			end 		end 		if minEntity ~= nil and maxEntity ~= nil and minOffset ~= maxOffset then 			local r = minEntity:getLabel() .. ' a ' .. maxEntity:getLabel() 			if #unknownTZs > 0 then 				r = r .. ' y ' .. table.concat(unknownTZs, ', ') 			end 			return r 		end 	end 	return rSimple(item, property) end  local function rSingleLinked(item, property) 	if item:getBestStatements(property)[1].mainsnak.datavalue ~= nil then 		return renderLinkedClaim('Q' .. item:getBestStatements(property)[1].mainsnak.datavalue.value['numeric-id']) 	else 		return nil 	end end  local function rLinked(item, property) 	local claims = item.claims[property] 	local result = {} 	for _, claim in pairs(claims) do 		local id = 'Q' .. claim.mainsnak.datavalue.value['numeric-id'] 		table.insert(result, renderLinkedClaim(id)) 	end 	return table.concat(result, ', ') end  local conf = { 	{'capital', 'Capital', 36, rSingleLinked}, 	{'currency', 'Moneda', 38, rCurrency}, 	{'population', 'Población', 1082, rPopulation}, 	{'electricity', '[[Sistemas eléctricos|Electricidad]]', 2884, rElectricity}, 	{'callingcode', 'Código telefónico', 474, rSimple}, 	{'timezone', 'Huso horario', 421, rTimezones}, 	{'emergencies', 'Emergencias', 2852, rEmergency}, 	{'driving side', 'Lado de conducción', 1622, rSimple} }  local p = {}  function p.quickbar(frame) 	local parentArgs = frame:getParent().args 	local elements = {}  	local item = mw.wikibase.getEntity()  	local useWikidata = (item ~= nil and item.claims ~= nil) 	local missingInfo = false  	-- Se elimina la recopilación de la imagen de localización (P242)  	for _, params in pairs(conf) do 		if params[3] ~= 0 then 			local val = parentArgs[params[1]] 			if (val and starts_with(val, '#Q')) then 				item = mw.wikibase.getEntity(val:gsub("#", "")) 				val = nil 			end 			if val == '' or val == nil then 				if useWikidata and #item:getBestStatements('P' .. params[3]) > 0 then 					val = params[4](item, 'P' .. params[3], frame) 					if val ~= nil then 						table.insert(elements, renderRow(params[2], val)) 					else 						missingInfo = true 					end 				else 					missingInfo = true 				end 			else 				table.insert(elements, renderRow(params[2], val)) 			end 		end 		item = mw.wikibase.getEntity() 	end  	local editRow = '' 	if item ~= nil then 		editRow = '|-\n| colspan="2" class="info footer" |[[:d:' .. item.id .. '|editar en Wikidata]]\n' 	end  	if #elements > 0 then 		return frame:extensionTag {name = 'templatestyles', args = {src = 'Top/estilo.css'}} ..  			'<div id="quickbar" class="wv-quickbar floatright">\n{| cellpadding="0" cellspacing="0"\n|-\n' .. 			table.concat(elements) .. 			'\n' .. editRow .. '|}</div>' 	else 		return '' 	end end  return p