Modulo:Carriera sportivo: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
m fix |
semplificazione e uniformazione, vedi disc. |
||
Riga 98: | Riga 98: | ||
local range_cell = makeTd(range) |
local range_cell = makeTd(range) |
||
local team_cell = makeTd(team, not hasScore and 'colspan="2"' or '') |
local team_cell = makeTd(team, not hasScore and 'colspan="2"' or '') |
||
local score_cell = hasScore and makeTd(score, |
local score_cell = hasScore and makeTd(score, 'align="right"') or '' |
||
local content = range_cell .. team_cell .. score_cell |
local content = range_cell .. team_cell .. score_cell |
||
⚫ | |||
⚫ | |||
if sport:lower() == 'rugby' |
|||
then rowStyle = rowStyle:format('background:'.. (rowNum % 2 == 1 and '#F6FCFC' or '#FFF') .. '; font-size:90%;') |
|||
else rowStyle = rowStyle:format('background:#FFF;') |
|||
end |
|||
res = res .. makeTag('tr', content, rowStyle) |
res = res .. makeTag('tr', content, rowStyle) |
||
Versione delle 12:09, 29 ago 2021
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Carriera sportivo/man (modifica · cronologia)
Sandbox: Modulo:Carriera sportivo/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Carriera sportivo/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Carriera sportivo/man (modifica · cronologia)
Sandbox: Modulo:Carriera sportivo/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Carriera sportivo/test (modifica · cronologia · Esegui)
Questo modulo implementa la funzionalità del template {{Carriera sportivo}}.
local getArgs = require('Modulo:Arguments').getArgs
local p = {}
--i pattern supportati devono avere sempre 3 gruppi: (prefisso)(nome squadra)(suffisso)
local supportedPatterns = {
'(→ *)(.*)(.-)', --per i trasferimenti
'(<[^<>]*>)(.*)(< */[^<>]*>)', --per i tag (riconosce anche {{TA}} e simili)
'(.-)(.*)(%c\'"`UNIQ---ref.*QINU`"\'%c)' --per le note
}
local function makeTag(name, content, attributes)
return string.format('<%s %s>%s</%s>', name, attributes or '', content or '', name)
end
local function makeTd(content, attributes)
return makeTag('td', content, attributes)
end
local function getYearFromRange(range)
--se l'intervallo temporale ha un formato riconosciuto, allora ricava l'ultimo anno e decrementalo di uno
--altrimenti, se l'intervallo temporale è costituito solo da un anno, allora usa quest'ultimo
--l'anno iniziale ammette anche i punti interrogativi
return ( range:find('^[%d?][%d?][%d?][%d?] *[\-–] *%d%d%d%d$') and (tonumber(range:sub(-4)) - 1) )
or ( range:find('^%d%d%d%d$') and range )
or ''
end
local function unformat(content)
local newContent = content
local matchedPatterns = {}
repeat
local matched = false
for i = 1, #supportedPatterns do
local prefix, middle, suffix = newContent:match('^'..supportedPatterns[i]..'$')
if middle and newContent ~= middle then
matched = true
newContent = middle
--salvo la coppia prefisso-suffisso in prima posizione in modo che venga pescata dalla cima dello stack
table.insert(matchedPatterns, 1, {prefix, suffix})
end
end
until (not matched) --continuo il loop finché non ottengo più match
return newContent, matchedPatterns
end
local function reformat(content, wrappers)
local newContent = content
for i = 1, #wrappers do
local wrapper = wrappers[i]
newContent = wrapper[1] .. newContent .. wrapper[2]
end
return newContent
end
function p.getList(frame)
local args = getArgs(frame)
local sport = args['sport'] or ''
local pos = args['pos'] or ''
--parsing preliminare per controllare che la terza colonna contenga almeno un valore
local hasScore = false
local rowNum = 0
while true do
local startIndex = rowNum * 3
local team = args[startIndex + 2]
local score = args[startIndex + 3]
if not team then break end
if score then hasScore = true break end
rowNum = rowNum + 1
end
local res = ''
rowNum = 0
while true do
local startIndex = rowNum * 3
local range = args[startIndex + 1] or ''
local team = args[startIndex + 2]
local score = args[startIndex + 3] or ''
local _, spaceCount = string.gsub(score, " ", "")
if spaceCount <= 1 then score = makeTag('span', score, 'class="nowrap"') end
if not team then break end
if sport ~= '' then
local year = getYearFromRange(range)
local cleanedTeam, matchedPatterns = unformat(team)
local frame = mw.getCurrentFrame()
--chiamata protetta per verificare l'esistenza del template
local success, result = pcall(frame.expandTemplate, frame, {
title = string.format('Template:%s %s', sport, cleanedTeam),
args = { pos, year }
})
if success then team = reformat(result, matchedPatterns) end
end
local range_cell = makeTd(range)
local team_cell = makeTd(team, not hasScore and 'colspan="2"' or '')
local score_cell = hasScore and makeTd(score, 'align="right"') or ''
local content = range_cell .. team_cell .. score_cell
local rowStyle = 'style="background:white"'
res = res .. makeTag('tr', content, rowStyle)
rowNum = rowNum + 1
end
return res
end
return p