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