Modulo:Tracce/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
aggiungo controllo casomai il template contenga solo tracce con numeri troppo elevati
test abbr
 
(12 versioni intermedie di un altro utente non mostrate)
Riga 1:
local categories = {}
local discontinuous_num = '[[Categoria:Voci con template Tracce acon numerazione discontinua]]'
local missing_title = '[[Categoria:ErroriVoci di compilazione delcon template Tracce -con titolo mancante]]'
local unexpected_markup = '[[Categoria:ErroriVoci di compilazione delcon template Tracce -con markup inaspettato]]'
local unknown_format = '[[Categoria:ErroriVoci di compilazione delcon template Tracce -con formato durata sconosciuto]]'
 
-- ProtectsProtegge auna stringstringa thatche willsarà beavvolta wrappeddal inmarkup wiki italic markup '' ... '' del corsivo
local function safeforitalics(str)
if str:sub(1,1) == "'" then str = "<span></span>" .. str end
if str:sub(-1,-1) == "'" then str = str .. "<span></span>" end
return str
end
 
-- Calcola e formatta la durata di una traccia
local function getTrackLength(args, i)
local string_durata = args["Durata" .. i]
local minuti, secondi
if string_durata then
local string_minuti, string_secondi = mw.ustring.match(string_durata, "^(%d+):(%d%d)$")
minuti = tonumber(string_minuti) or 0
secondi = tonumber(string_secondi) or 0
else
minuti = tonumber(args["Minuti" .. i]) or 0
secondi = args["Secondi" .. i] and mw.ustring.match(args["Secondi" .. i], "^%d%d?$") and
secondi = tonumber(args["Secondi" .. i]) or 0
end
local durata = (minuti or 0) * 60 + (secondi or 0)
elseifif (string_durata orand args["Minuti"durata ..== i]0) or (not minuti and args["SecondiMinuti" .. i]) thenor
(not secondi and args["Secondi" .. i]) then
categories[#categories+1] = unknown_format
end
return durata, durata > 0 and string.format("%d:%02.f", minuti or 0, secondi or 0) or nil
end
 
Line 17 ⟶ 38:
]]--
 
local function track(args, i, corsivodurata)
local titolo = args["Titolo" .. i]
local row_elements = {}
Line 23 ⟶ 44:
local interprete = args["Interprete" .. i]
if interprete then table.insert(row_elements, interprete .. " – ") end
local corsivo = args["Corsivo"] ~= "no" and true or false
corsivo = (corsivo and args["Corsivo" .. i] ~= "no") or
(not corsivo and (args["Corsivo" .. i] == "sì" or args["Corsivo" .. i] == "si"))
Line 33 ⟶ 55:
table.insert(row_elements, titolo)
local featuring = args["Featuring" .. i]
if featuring then table.insert(row_elements, " <small>(<abbr title=featuring>feat.</abbr> " .. featuring .. ")</small>") end
local note = args["Note" .. i]
if note then table.insert(row_elements, " <small>(" .. note .. ")</small>") end
if durata > 0 then
local string_durata = args["Durata" .. i]
local minuti, secondi
if string_durata then
local string_minuti, string_secondi = mw.ustring.match(string_durata, "(%d+):(%d%d)")
minuti = tonumber(string_minuti) or 0
secondi = tonumber(string_secondi) or 0
else
minuti = tonumber(args["Minuti" .. i]) or 0
secondi = tonumber(args["Secondi" .. i]) or 0
end
local durata = minuti * 60 + secondi
if durata > 0 then
table.insert(row_elements, " – ")
table.insert(row_elements, string.format("%d:%02.f", minuti, secondi)durata)
elseif string_durata or args["Minuti" .. i] or args["Secondi" .. i] then
categories[#categories+1] = unknown_format
end
local AutoreTesto = args["Autore testo" .. i]
Line 122 ⟶ 131:
testata = testata .. "."
end
local corsivo = args["Corsivo"] ~= "no" and true or false
table.insert(tracks, testata)
-- compone la lista dei parametri
Line 131 ⟶ 139:
if visualizza_durata == "si" or visualizza_durata == "sì" then somma_durata = true end
local nums = {}
local validated_nums = {}
for k, v in pairs(args) do
local prefix, num = string.match(k, '^(%D+)([0-9]+)$')
if num and (num == '0' or num:sub(1,1) ~= '0') then
-- se il numero viene modificato da tonumber, è troppo alto
table.insert(nums,num = tonumber(num))
if not args['Titolo' .. num] then
categories[#categories+1] = missing_title
end
-- se il numero viene modificato da tonumber, è troppo alto
elseifif k == 'Titolo'args[prefix .. num] and argsnot validated_nums['Titolo' .. tonumber(num)] then
validated_nums[num] = true
table.insert(nums, tonumber(num))
table.insert(tracksnums, new_tracknum)
end
end
end
table.sort(nums)
if #nums == 0 then
categories[#categories+1] = missing_title
-- categoria di tracciamento se la numerazione delle tracce è discontinua
if #nums > 0 andelseif nums[1] + #nums - 1 ~= nums[#nums] then
categories[#categories+1] = discontinuous_num
end
local tracce = false
-- estrae le tracce dai parametri e inserisce i valori nella tabella tracks
for k, num in ipairs(nums) do
local new_trackdurata_track, durata_trackdurata_formattata = trackgetTrackLength(args, num, corsivo)
if args['Titolo' .. num] then
table.insert(tracks, new_track)
tracce = true
local new_track = track(args, num, durata_formattata)
table.insert(tracks, new_track)
end
if somma_durata then durata = durata + durata_track end
end
Line 157 ⟶ 176:
table.insert(tracks, "Durata totale: " .. string.format("%d:%02.f", math.floor(durata/60) , durata % 60) .. "</p>")
end
local ns = mw.title.getCurrentTitle().namespace
return (tracce and table.concat(tracks, "\n") or '') .. (ns == 0 and table.concat(categories) or '')
end
 
Line 172 ⟶ 192:
-- estrae tutti i parametri e li memorizza in una tabella
local args = {}
local tracce = false
for k, v in pairs(pframe.args) do
if v ~= nil and v ~= '' then
args[k] = v
local num = string.match(k, "^Titolo([0-9]+)$")
num = num and (num == '0' or num:sub(1,1) ~= '0')
if not tracce and num then
tracce = true
end
end
end
return tracce and componi_tracce(args) or ''
-- procede solo se c'è almeno un campo titolo
return tracce and componi_tracce(args) or ''
end
 
Line 217 ⟶ 230:
local args = {}
local log = {}
for k, v in pairs(pframe.args) do
local tracce = false
if notv tracce~= nil and numv ~= '' then
for k,v in pairs(pframe.args) do
if conversion_table[k] then -- Controlla se è un parametro non indicizzato
args[conversion_table[k]] = v
else
-- estrae nome base e indice, se k=title1 allora prefix=title e num=1
local prefix, num = string.match(k, "^(%D+)(%d+)$")
if prefix and conversion_table_index[prefix] then -- controlla se è un parametro indicizzato
args[conversion_table_index[prefix] .. num] = v
elseif not num then -- non è neanche un parametro indicizzato, lo copia così com'è
if not tracce and (num == '0' or num:sub(1,1) ~= '0') then
tracceargs[k] = truev
end
elseif not num then -- non è neanche un parametro indicizzato, lo copia così com'è
args[k] = v
end
end
end
if args['Visualizza durata totale'] then args['Visualizza durata totale'] = 'si' end
return tracce and componi_tracce(args) or '' -- table.concat(log, '\n*') --
end