Modulo:RisF1
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:RisF1/man (modifica · cronologia)
Sandbox: Modulo:RisF1/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:RisF1/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:RisF1/man (modifica · cronologia)
Sandbox: Modulo:RisF1/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:RisF1/test (modifica · cronologia · Esegui)
Questo modulo include le diverse funzioni richiamate dai template risultati di Formula 1.
Il modulo è provvisto di due sottopagine:
- Stagioni: tabella contenente i dati relativi a ciascuna stagione
- GP: tabella contenente i dati relativi ai Gran Premi
local p = {}
local getArgs = require('Modulo:Arguments').getArgs
local tabella = mw.loadData('Modulo:RisF1/Stagioni')
local tabgp = mw.loadData('Modulo:RisF1/GP')
local tavolozza = {
["1"] = "FFFFBF",
["2"] = "DFDFDF",
["3"] = "FFDF9F",
punti = "DFFFDF",
nopunti = "CFCFFF",
NC = "CFCFFF",
Rit = "EFCFFF",
SQ = "000000; color:white; font-size:81%",
NP = "FFFFFF",
NQ = "FFCFCF",
NPQ = "FFCFCF",
SP = "F1F8FF",
TP = "F1F8FF",
AN = "F0FFFF",
["0"] = ""
}
--La funzione determina il colore delle celle contenenti i risultati, dati il numero di piloti in zona punti come primo argomento e il risultato come secondo argomento.
function p.colori(frame)
local args = getArgs(frame)
local zonapunti = tonumber(args[1])
local ris = args[2]
if not ris or string.lower(ris) == "inf" then
ris = 0
end
ris = string.gsub(ris,"'","")
if tonumber(ris) and tonumber(ris) > 3 then
if tonumber(ris) <= zonapunti then
ris = "punti"
else ris = "nopunti"
end
end
local colore = tavolozza[ris]
colore = colore or ""
return "style=\"padding-left:0px;padding-right:0px;background-color:#" .. colore .. "\""
end
--La funzione applica il grassetto e/o il corsivo ai risultati a seconda del valore dei parametri Gn, dati il risultato come primo argomento e il valore di Gn come secondo argomento.
function p.ppgv(frame)
local args = getArgs(frame)
local ris = args[1]
local apici = args[2]
local switch = {["PG"]="'''''",["PP"]="'''",["GV"]="''"}
if ris then
if switch[apici] then
ris = switch[apici] .. ris .. switch[apici]
end
else ris = ""
end
return ris
end
--La funzione restituisce una serie di celle contenenti le bandierine dei Gran Premi effettuati nell'anno definito come unico argomento. Le singole bandierine vengono generate dalla funzione band.
function p.sequenza(frame)
local anno = tonumber(frame.args[1])
local annoN = anno or 0
anno = (p.ultima() >= annoN) and anno or "default"
local seq = tabella[anno].gp
local gareanno = tabella[anno].gare
local str = 'width=3%|' .. p.band({seq[1],anno})
for i = 2,gareanno do
str = str .. '||width=3%|' .. p.band({seq[i],anno})
end
return str
end
--La funzione restituisce una serie di celle vuote, il cui numero dipende da due parametri passati tramite template: il parametro |Anno= e uno tra |Colonne= (il totale desiderato di caselle colorabili e vuote) e |Ritiro= (l'ultimo anno di attività).
function p.vuote(frame)
local argstmp = mw.getCurrentFrame():getParent().args
local anno = tonumber(argstmp["Anno"]) or tonumber(argstmp[1])
local ritiro = tonumber(argstmp["Ritiro"])
local colonne = tonumber(argstmp["Colonne"])
local str = ""
local annoN = anno or 0
anno = (p.ultima() >= annoN) and anno or "default"
local gareanno = tabella[anno].gare
local max = p.max()
if colonne and colonne >= gareanno and colonne <= max then
max = colonne
elseif ritiro and ritiro >= annoN then
max = p.max({ritiro})
end
for i=1,(max-gareanno) do
str = str .. "||width=3%| "
end
return str
end
--La funzione restituisce una serie di celle a seconda dell'anno e dei risultati che sono stati passati come parametri all'interno dei template. Il numero di celle dipende dall'anno e la loro formattazione viene determinata elaborando i parametri tramite le funzioni colori e ppgv.
function p.celle(frame)
local argstmp = mw.getCurrentFrame():getParent().args
local args = getArgs(frame)
local str = ""
local anno = tonumber(argstmp["Anno"])
local annoN = anno or 0
anno = (p.ultima() >= annoN) and anno or "default"
local gare = tabella[anno].gare
local zonapunti = tabella[anno].punti
local lettera = args[1]
local ris = ""
for i=1,gare do
if not lettera or lettera == "" then
paramR = i .. "R"
paramG = "G" .. i
paramN = "N" .. i
ris = p.ppgv({argstmp[paramR],argstmp[paramG]})
else
paramR = lettera .. i
paramN = "N" .. lettera .. i
ris = argstmp[paramR]
end
local col = p.colori({zonapunti,argstmp[paramR]})
local note = argstmp[paramN]
ris = ris or ""
note = note or ""
if i~=1 then
str = str .. '||width=3% '
else str = str .. 'width=3% '
end
str = str .. col .. "| " .. ris .. note
end
return str
end
--La funzione restituisce il numero massimo di gare disputate in una stagione fino all'anno dato come unico argomento; in assenza dell'argomento, la funzione calcola il massimo assoluto.
function p.max(frame)
local args = getArgs(frame)
local ritiro = tonumber(args[1])
local max = 7
local ultima = p.ultima()
if not ritiro or ritiro > ultima then
ritiro = ultima
end
for i = 1951,ritiro do
local gare = tabella[i].gare
max = (gare > max) and gare or max
end
return max
end
--La funzione genera la bandierina con link ai Gran Premi, dati il codice del GP come primo argomento e l'anno come secondo argomento facoltativo.
function p.band(frame)
local args = getArgs(frame)
local gp = args[1]
local anno = args[2]
local dati = tabgp[gp]
local str = ""
dati = dati or tabgp["NC"]
if not anno then
anno = ""
else anno = " " .. anno
end
str = str .. '[[File:' .. dati["file"] .. '|18px|border|link=' .. dati["nome"] .. anno .. ']]'
return str
end
--La funzione, chiamata esclusivamente dal template:Rapporto gara F1, restituisce le gare effettuate durante l'anno, passato come parametro Anno_di_gara nel template.
function p.gareanno(frame)
local argstmp = frame:getParent().args
local anno = tonumber(argstmp["Anno_di_gara"])
local stagione = tabella[anno]
local gareanno = p.max()
if stagione then
gareanno = stagione["gare"]
end
return gareanno
end
--La funzione crea parte della tabella del template:RisF1Team, in particolare le righe con i risultati dei singoli piloti (con un limite massimo di 10, espandibile se necessario), leggendo i parametri inseriti direttamente nel template.
function p.team(frame)
local argstmp = mw.getCurrentFrame():getParent().args
local numero = tonumber(argstmp[1])
local numeroN = numero or 1
numero = (numeroN < 10) and numeroN or 10
local lettera = {string.char(65)}
local pilota = argstmp["P1"]
local punti = argstmp["Punti"]
local pos = argstmp["Pos"]
local rowspan = "||rowspan=" .. numero
if not punti or punti == "" then
punti = " "
end
pilota = pilota or " "
if not pos then
pos = "| "
elseif tonumber(pos) == 1 then
pos = ' bgcolor="#FFFFBF"|' .. pos .. "º"
elseif tonumber(pos) then
pos = "|" .. pos .. "º"
else pos = "|" .. pos
end
local output = pilota .. "||" .. p.celle(lettera) .. p.vuote() .. rowspan .. "|" .. punti .. rowspan .. pos .. "\n|-\n"
for i=2,numero do
lettera = {string.char(i+64)}
pilota = argstmp["P" .. i]
pilota = pilota or " "
output = output .. "|" .. pilota .. "||" .. p.celle(lettera) .. p.vuote() .. "\n|-\n"
end
return output
end
--La funzione aggiunge la legenda in fondo alle tabelle dei risultati.
function p.legenda(frame)
local args = getArgs(frame, {wrappers = {'Template:RisF1','Template:RisF1Team','Template:VetturaF1'}})
local dim = args["dim"] or 85
local anno = tonumber(args["Anno"]) or 0
local apice = ""
if anno == 2021 then
apice = "<br/>'''Apice''' – Risultato Qualifica Sprint (A punti)"
elseif anno > 2021 then
apice = "<br/>'''Apice''' – Risultato Sprint (A punti)"
end
if args["LEG"] == "1" then
return "{| class=\"wikitable\" style=\"text-align:center; width: 100%; font-size:" .. dim .. "%; margin-top: 0em; margin-bottom: 0em; padding:0\"\n|-\n|rowspan=2 width=5%|'''Legenda'''||style=\"background-color:#ffffbf;width:15%\"|1º posto||style=\"background-color:#dfdfdf;width:15%\"|2º posto||style=\"background-color:#ffdf9f;width:15%\"|3º posto||style=\"background-color:#dfffdf;width:15%\"|A punti||style=\"background-color:#cfcfff;width:15%\"|Senza punti/Non class.||rowspan=2 style=\"background-color:#ffffff;width:20%\"|'''Grassetto''' – Pole position<br/>''Corsivo'' – Giro più veloce" .. apice .. "\n|-\n|style=\"background-color:#000000; color:white\"|Squalificato||style=\"background-color:#efcfff\"|Ritirato||style=\"background-color:#FFFFFF\"|Non partito||style=\"background-color:#FFCFCF\"|Non qualificato||style=\"background-color:#f0ffff\"|Solo prove/Terzo pilota\n|}"
end
end
function p.vettura(frame)
local argstmp = mw.getCurrentFrame():getParent().args
local numero = tonumber(argstmp["NumeroPiloti"])
local numeroN = numero or 1
numero = (numeroN < 10) and numeroN or 10
local pilota = argstmp["P1"]
local punti = argstmp["Punti"]
local pos = argstmp["Pos"]
local rowspan = "||rowspan=" .. numero
if not punti or punti == "" then
punti = " "
end
pilota = pilota or " "
if not pos then
pos = "| "
elseif tonumber(pos) == 1 then
pos = ' bgcolor="#FFFFBF"|' .. pos .. "º"
elseif tonumber(pos) then
pos = "|" .. pos .. "º"
else pos = "|" .. pos
end
if argstmp["Ritiro"] or argstmp["Colonne"] then
output = frame:preprocess(pilota) .. p.vuote() .. rowspan .. "|" .. punti .. rowspan .. pos .. "\n|-\n"
else output = frame:preprocess(pilota) .. rowspan .. "|" .. punti .. rowspan .. pos .. "\n|-\n"
end
for i=2,numero do
pilota = argstmp["P" .. i]
pilota = pilota or " "
if argstmp["Ritiro"] or argstmp["Colonne"] then
output = output .. "|" .. frame:preprocess(pilota) .. p.vuote() .. "\n|-\n"
else output = output .. "|" .. frame:preprocess(pilota) .. "\n|-\n"
end
end
return output
end
--La funzione determina la stagione più recente di cui sono presenti dati in Modulo:RisF1/Stagioni.
function p.ultima(frame)
local ultima = 1950
while tabella[ultima] do
ultima = ultima + 1
end
ultima = ultima - 1
return ultima
end
return p