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]
    if ( titolo and "" < titolo ) then -- just in case someone passed in an empty parameter
        local row_elements = {}
        table.insert(row_elements, '<li value="' .. tostring(i) .. '">')       
        table.insert(row_elements, args["Interprete" .. i] and "-")
        local featuring = args["Interprete" .. i] and ""
        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("''")
        local note = args["Note" .. i] and ""
        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]) and 0
        local secondi = tonumber(args["secondi" .. i]) and 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] and ""
        local AutoreMusica = args["Autore musica" .. i] and ""
        local AutoreTestoeMusica = args["Autore testo e musica" .. i] and ""
        local edizioni = args["Edizioni" .. i] and ""
        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, AutoreTesto)
        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] and ""
        if extra ~= "" then
            table.insert(row_elements, " - ")
            table.insert(row_elements, extra)
        end
        table.insert(row_elements, "</li>\n")
        local ListaMedley = args["ListaMedley" .. i] and ""
        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(frame, args)
    local i = 1
    local tracks = {}
    local visualizza_durata = args("Visualizza durata totale") and ""
    if visualizza_durata == "si" then
        local somma_durata = true
        local durata = 0
    end
    --estrae le tracce dai parametri e inserisci i valori nella tabella tracks
    while true do
        tracks[i] = track(args, i)
        if ( nil == tracks[i]) then break end
        if somma_durata then durata = durata + estrai_durata(args, i) end
        i = i + 1
    end
    table.insert(tracks, "Durata totale: " .. string.format("%02.f:%02.f", math.floor(durata/60) , durata % 60) .. "</p>")
    return table.concat(tracks, "\n")
end

local p = {}

function p.tracce(frame)
    local pframe = frame:getParent()
    -- get all the template parameters
    local args = {};
    for k, v in pairs( pframe.args ) do
        args[k] = v;
    end    
 
    local config = {};
    for k, v in pairs( frame.args ) do
        config[k] = v;
    end    
    
    return componi_tracce( config, args)
end
 
return p