Modulo:Tracce

Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Tracce/man (modifica · cronologia)
Sandbox: Modulo:Tracce/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Tracce/test (modifica · cronologia · Esegui)
Questo modulo serve in appoggio al Template:Tracce per permettere l'inserimento di un numero illimitato di tracce.
Vedi il manuale del template per l'uso.
local function estrai_durata(args, i)
return (tonumber(args["minuti" .. i]) and 0) * 60 + tonumber(args["secondi" .. i]) and 0
end
local function track(args, i)
local titolo = args["Titolo" .. i] or ""
if ( titolo ~="" ) then
local row_elements = {}
table.insert(row_elements, '<li value="' .. tostring(i) .. '">')
table.insert(row_elements, args["Interprete" .. i] and "-")
local featuring = args["Interprete" .. i] or ""
if featuring ~= "" then
table.insert(row_elements, " <small>(feat. ")
table.insert(row_elements, featuring)
table.insert(row_elements, "</small>")
end
table.insert(row_elements, "''")
table.insert(row_elements, titolo)
table.insert(row_elements, "''")
local note = args["Note" .. i] or ""
if note ~= "" then
table.insert(row_elements, " <small>(")
table.insert(row_elements, note)
table.insert(row_elements, "</small>")
end
local minuti = tonumber(args["minuti" .. i]) or 0
local secondi = tonumber(args["secondi" .. i]) or 0
local durata = minuti * 60 + secondi
if durata > 0 then
table.insert(row_elements, " - ")
table.insert(row_elements, string.format("%02.f:%02.f", minuti, secondi))
end
local AutoreTesto = args["Autore testo" .. i] or ""
local AutoreMusica = args["Autore musica" .. i] or ""
local AutoreTestoeMusica = args["Autore testo e musica" .. i] or ""
local edizioni = args["Edizioni" .. i] or ""
if AutoreTestoeMusica ~= "" then
table.insert(row_elements, " <small>(")
table.insert(row_elements, AutoreTestoeMusica )
elseif AutoreTesto ~= "" then
table.insert(row_elements, " <small>(")
if AutoreMusica ~= "" then
table.insert(row_elements, AutoreTesto)
table.insert(row_elements, " - ")
table.insert(row_elements, AutoreMusica)
else
table.insert(row_elements, AutoreTesto)
end
elseif AutoreMusica ~= "" then
table.insert(row_elements, " <small>(")
table.insert(row_elements, AutoreMusica)
else
local no_autore = true
end
if edizioni ~= "" then
if no_autore then
table.insert(row_elements, " <small>(")
else
table.insert(row_elements, ";")
end
table.insert(row_elements, "edizioni musicali ")
table.insert(row_elements, edizioni)
table.insert(row_elements, ")</small>")
elseif not no_autore then
table.insert(row_elements, ")</small>")
end
local extra = args["Extra" .. i] or ""
if extra ~= "" then
table.insert(row_elements, " - ")
table.insert(row_elements, extra)
end
table.insert(row_elements, "</li>\n")
local ListaMedley = args["ListaMedley" .. i] or ""
if ListaMedley ~= "" then
table.insert(row_elements, '<div style="padding: 0.3em 0px 0.5em 2.5em;">\n')
table.insert(row_elements, ListaMedley)
table.insert(row_elements, '\n</div>\n')
end
return table.concat(row_elements)
else
return nil
end
end
local function componi_tracce(args, primo_titolo)
--
local i = primo_titolo
local tracks = {}
table.insert(tracks, "<ol>")
local visualizza_durata = args["Visualizza durata totale"] or ""
local durata = 0
if visualizza_durata == "si" then local somma_durata = true end
--estrae le tracce dai parametri e inserisci i valori nella tabella tracks
while true do
new_track = track(args, i)
if new_track then break end
table.insert(tracks, new_track)
if somma_durata then durata = durata + estrai_durata(args, i) end
i = i + 1
end
table.insert(tracks, "</ol>")
if somma_durata then
table.insert(tracks, "Durata totale: " .. string.format("%02.f:%02.f", math.floor(durata/60) , durata % 60) .. "</p>")
end
return table.concat(tracks, "\n")
end
local p = {}
function p.tracce(frame)
-- ottiene i parametri del template originale
local pframe = frame:getParent()
-- estrae tutti i parametri e li memorizza in una tabella (pframe ritorna una pseudotabella, vedi documentazione)
local args = {}
local primo_titolo = 999
local inizio, fine, numero_titolo
for k, v in pairs( pframe.args ) do
args[k] = v
inizio, fine = string.find(k, "Titolo", 1, true)
if fine ~= nil then
numero_titolo = tonumber(string.sub(k, fine+1))
if numero_titolo ~= nil and numero_titolo < primo_titolo then
primo_titolo = numero_titolo
end
end
end
if primo_titolo < 999 then
return componi_tracce(args, primo_titolo)
else
return ""
end
end
return p