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