Modulo:Aeropuerte
La documentazione per questo modulo può essere creata in Modulo:Aeropuerte/man
--[[
* Modulo a supporto del template Aeropuerte.
]]--
require('strict')
local getArgs = require('Modulo:Arguments').getArgs
local mWikidata = require('Modulo:Wikidata')
-- Legge le piste dagli argomenti passati al modulo e le restituisce come sequence Lua.
--
-- @param {table} args
-- @return {table}
local function getPiste(args)
local params = { 'Orientamento(%d+)', 'Lunghezza(%d+)_m', 'Lunghezza(%d+)', 'Superficie(%d+)', 'Note(%d+)' }
local piste = {}
for k, v in pairs(args) do
if type(k) == 'string' then
for _, param in ipairs(params) do
local num = k:match('^' .. param .. '$')
if num then
num = tonumber(num)
piste[num] = piste[num] or {}
piste[num][param:gsub('%(%%d%+%)', '')] = v
break
end
end
end
end
return piste
end
-- Ricerca le piste da Wikidata in P529 e le restituisce come sequence Lua.
--
-- @return {table}
local function getPisteFromWikidata()
local piste = {}
local claims
claims = mWikidata._getClaims('P529') or {}
for _, claim in ipairs(claims) do
piste[#piste + 1] = {
Orientamento = mWikidata._formatStatement(claim),
Lunghezza_m = mWikidata._formatQualifiers(claim, 'P2043', { unit = 'metro', formatnum = true }),
Larghezza = mWikidata._formatQualifiers(claim, 'P2049', { unit = 'metro', formatnum = true }),
Superficie = mWikidata._formatQualifiers(claim, 'P186')
}
end
return piste
end
-- Restituisce una tabella HTML contenente le piste.
-- Il colore dell'intestazione è ottenuto dal parametro "Struttura" tramite il sottotemplate Colore.
--
-- @param {table} piste
-- @param {string} struttura
-- @return {string}
local function formatPiste(piste, struttura)
local tableStyle = {
['text-align'] = 'center',
['line-height'] = '1.2em'
}
local thcolor = mw.getCurrentFrame():expandTemplate {
title = 'Aeropuerte/Colore',
args = { struttura }
}
local tdcolor = '#d3d3d3'
local tableNode = mw.html.create('table')
tableNode
:addClass('sinottico_annidata')
:css(tableStyle)
:tag('tr')
:tag('th')
:css('width', '25%')
:css('text-align', 'center')
:css('background-color', thcolor)
:wikitext('Orientamento ([[QFU]])')
:done()
:tag('th')
:css('width', '40%')
:css('text-align', 'center')
:css('background-color', thcolor)
:wikitext('Lunghezza')
:done()
:tag('th')
:css('width', '35%')
:css('text-align', 'center')
:css('background-color', thcolor)
:wikitext('Superficie')
:done()
for _, pista in ipairs(piste) do
if pista.Orientamento then
local lunghezza
if pista.Lunghezza then
lunghezza = pista.Lunghezza
elseif pista.Lunghezza_m then
local larghezza = pista.Larghezza and (' x ' .. pista.Larghezza) or ''
lunghezza = pista.Lunghezza_m .. larghezza .. ' [[metro|m]]'
end
tableNode:tag('tr')
:tag('td')
:css('background-color', tdcolor)
:wikitext(pista.Orientamento)
:done()
:tag('td')
:css('background-color', tdcolor)
:wikitext(lunghezza)
:done()
:tag('td')
:css('background-color', tdcolor)
:wikitext(pista.Superficie)
:done()
if pista.Note then
tableNode:tag('tr')
:tag('td')
:attr('align', 'right')
:attr('colspan', '3')
:wikitext(pista.Note)
:done()
end
end
end
return tostring(tableNode)
end
-- =============================================================================
-- Funzioni esportate
-- =============================================================================
local p = {}
-- Funzione per {{#invoke:Aeropuerte|piste}}
function p.piste(frame)
local args = getArgs(frame, { parentOnly = true })
local piste = args.Orientamento1 and getPiste(args) or {}
piste = #piste > 0 and piste or getPisteFromWikidata()
return #piste > 0 and formatPiste(piste, args.Struttura) or ''
end
return p