Módulo:Tabela geral de medalhas
Este módulo está classificado como pré-alfa. Ele está incompleto, e pode ou não estar em desenvolvimento activo. Ele deve ser utilizado desde páginas do domínio artigos. Os módulos ficam em pre-alfa até o editor original (ou alguém que toma conta se ele for abandonado por algum tempo) está satisfeito com a estrutura básica. |
Este módulo é destinado principalmente a implementar a predefinição {{Tabela geral de medalhas}}
, para mais informações verifique as instruções.
Outra documentação:
require('strict')
local getArgs = require('Módulo:Arguments').getArgs
local p = {}
local function deflag(s)
s = mw.ustring.gsub(s or '', '%[%[[Fe][Ii][Ll][Ee]:[^%[%]]*%]%]', '')
s = mw.ustring.gsub(s, '%[%[[Ii][Mm][Aa][Gg][Ee][Mm]?:[^%[%]]*%]%]', '')
s = mw.ustring.gsub(s, '<[^<>]*>', '')
s = mw.ustring.gsub(s, '%s*%([A-Z][A-Z][A-Z]%)%s*$', '')
while s:match('^%s*&[Nn][Bb][Ss][Pp];%s*') do
s = mw.ustring.gsub(s, '^%s*&[Nn][Bb][Ss][Pp];%s*', '')
end
s = mw.ustring.gsub(s, '%s*&[Nn][Bb][Ss][Pp];%s*$', '')
s = mw.ustring.gsub(s, '%s%s+', ' ')
s = mw.ustring.gsub(s, '^%s*(.-?)%s*$', '%1')
return s
end
function p.createTable(frame, args)
local Argumentos = frame.args;
local parent = frame:getParent();
if not Argumentos[1] then
Argumentos = parent.args;
end
local team = Argumentos['team'] or Argumentos['equipa'] or Argumentos['equipe'] or 'País'
local root = mw.html.create()
local anfitriao = Argumentos['anfitrião'] or ''
local anfitriaoCor = '#ccccff'
local defaultRowColor = '#f8f9fa'
local flagTemplate = Argumentos['predefinição_bandeira']
local evento = Argumentos['evento']
local legendpos = (Argumentos['legend_position'] or 't'):lower()
local header, footer = '', ''
local totalOuro = 0
local totalPrata = 0
local totalBronze = 0
local remainingOuro = 0
local remainingPrata = 0
local remainingBronze = 0
local remainingStart = 0
local remainingEnd = 0
local limitReached = false
local showLimit = tonumber(Argumentos['show_limit'])
-- build the legend
if anfitriao ~= '' then
if Argumentos['name_' .. anfitriao] then
anfitriao = Argumentos['name_' .. anfitrion]
anfitriao = 'país anfitrião (' .. deflag(anfitriao) .. ')'
elseif anfitriao:match('^([A-Z][A-Z][A-Z])') then
anfitriao = frame:expandTemplate{title = flagTemplate, args = {anfitriao, evento} }
anfitriao = 'país anfitrião (' .. deflag(anfitriao) .. ')'
end
anfitriao = anfitriao .. (Argumentos['anfitriao_nota'] or '')
anfitriao = frame:expandTemplate{title = 'color box', args = {anfitriaoCor, ' * ', 'border=darkgray'}} ..' '.. anfitriao
end
local leading = ''
if Argumentos['leading'] then
leading = frame:expandTemplate{title = 'legenda', args = {'#E9D66B', "'''Em primeiro nesse desporto'''"}}
end
if legendpos == 't' then
header = header .. anfitriao .. leading
else
footer = footer .. anfitriao .. leading
end
root = root
:tag('table')
:addClass('wikitable')
:addClass('sortable')
:addClass('plainrowheaders')
:addClass('jquery-tablesorter')
:css('text-align', 'center')
root:tag('caption')
:wikitext(Argumentos['título'])
-- add the header row
local row = root:tag('tr')
if Argumentos['hide_rank'] then else
row:tag('th')
:attr('scope', 'col')
:wikitext('<abbr class=abbr title=Posição>Pos.</abbr>')
end
row
:tag('th')
:attr('scope', 'col')
:wikitext(team)
:tag('th')
:attr('scope', 'col')
:addClass('headerSort')
:css('width', '4em')
:css('background-color', 'gold')
:wikitext('Ouro')
:tag('th')
:attr('scope', 'col')
:addClass('headerSort')
:css('width', '4em')
:css('background-color', 'silver')
:wikitext('Prata')
:tag('th')
:attr('scope', 'col')
:addClass('headerSort')
:css('width', '4em')
:css('background-color', '#C96')
:wikitext('Bronze')
:tag('th')
:attr('scope', 'col')
:css('width', '4em')
:wikitext('Total')
-- enumerate the rows
local rowNums = {}
local IOCs = {}
for k,v in pairs(Argumentos) do
k = ''..k
local IOC = k:match('^ouro_([A-Z][A-Z][A-Z])$') or k:match('^ouro_(%d+)$')
or k:match('^prata_([A-Z][A-Z][A-Z])$') or k:match('^prata_(%d+)$')
or k:match('^bronze_([A-Z][A-Z][A-Z])$') or k:match('^bronze_(%d+)$')
if IOC and IOCs[IOC] == nil then
IOCs[IOC] = 1
local ouro = (tonumber(Argumentos['ouro_' .. IOC]) or 0)
local prata = (tonumber(Argumentos['prata_' .. IOC]) or 0)
local bronze = (tonumber(Argumentos['bronze_' .. IOC]) or 0)
local noskip = Argumentos['skip_' .. IOC] and 0 or 1
local pais = Argumentos['name_' .. IOC] or
frame:expandTemplate{title = flagTemplate, args = {IOC, evento} }
pais = deflag(pais)
if pais:match('%[%[[^%[%]%|]*%|([^%[%]]*)%]%]') then
pais = pais:match('%[%[[^%[%]%|]*%|([^%[%]]*)%]%]')
end
if pais:match('%[%[([^%[%]%|]*)%]%]') then
pais = pais:match('%[%[([^%[%]%|]*)%]%]')
end
table.insert(rowNums, {ouro, prata, bronze, noskip, pais, IOC})
end
end
if Argumentos['team'] == 'Games' then
table.sort(rowNums, function (a,b)
return a[5] < b[5]
end
)
else
table.sort(rowNums, function (a, b)
return a[1] > b[1] or (a[1] == b[1] and a[2] > b[2])
or (a[1] == b[1] and a[2] == b[2] and a[3] > b[3])
or (a[1] == b[1] and a[2] == b[2] and a[3] == b[3] and a[4] > b[4])
or (a[1] == b[1] and a[2] == b[2] and a[3] == b[3] and a[4] == b[4] and a[5] < b[5])
end
)
end
local lastOuro, lastPrata, lastBronze = -1
local rank = 0
local lastspan, lastrankcell = 1, nil
for i, anum in ipairs(rowNums) do
local IOC = anum[6]
if Argumentos['skip_' .. IOC] then
lastOuro, lastPrata, lastBronze, lastspan = -1, -1, -1, 1
else
rank = rank + 1
end
local pais = Argumentos['name_' .. IOC] or
frame:expandTemplate{title = flagTemplate, args = {IOC, evento} }
local ouro = tonumber(Argumentos['ouro_' .. IOC]) or 0
local prata = tonumber(Argumentos['prata_' .. IOC]) or 0
local bronze = tonumber(Argumentos['bronze_' .. IOC]) or 0
local isanfitriao = Argumentos['anfitriao_' .. IOC]
-- this is mainly for the parameter names example so you can override it.
local total = Argumentos['total_' .. IOC] or ouro + prata + bronze
local color = isanfitriao and anfitriaoCor or defaultRowColor
if Argumentos['grande_total'] then else
totalOuro = totalOuro + ouro
totalPrata = totalPrata + prata
totalBronze = totalBronze + bronze
end
if Argumentos['anfitrião_' .. IOC] then
pais = pais .. '*'
end
if Argumentos['note_' .. IOC] then
pais = pais .. Argumentos['nota_' .. IOC]
end
if showLimit and (rank>showLimit) then
if remainingStart == 0 then remainingStart = rank end
limitReached = true
remainingOuro = remainingOuro + ouro
remainingPrata = remainingPrata + prata
remainingBronze = remainingBronze + bronze
else
local row
if Argumentos['leading_' .. IOC] then
row = root:tag('tr'):css('background-color', '#E9D66B')
color = '#E9D66B'
else
row = root:tag('tr')
end
--Don't put the color on the row because of ranks spanning multiple rows.
--:css('background-color', color)
if Argumentos['hide_rank'] then else
if (ouro == lastOuro) and (prata == lastPrata) and (bronze == lastBronze) then
lastspan = lastspan + 1
lastrankcell:attr('rowspan',lastspan)
else
lastspan = 1
if Argumentos['skip_' .. IOC] then
lastrankcell = row:tag('td'):wikitext(frame:expandTemplate{title = 'sort', args = {'999', '–'}})
else
lastrankcell = row:tag('td'):wikitext(rank)
lastOuro = ouro
lastPrata = prata
lastBronze = bronze
end
end
end
row:tag('th')
:attr('scope', 'row')
:css('background-color', color)
:css('text-align','left')
:wikitext(pais)
:tag('td')
:wikitext(ouro)
:tag('td')
:wikitext(prata)
:tag('td')
:wikitext(bronze)
:tag('td')
:wikitext(total)
end
remainingEnd = rank
end
if limitReached then
root:tag('tr')
:tag('td')
:wikitext(remainingStart..'–'..remainingEnd)
:tag('td')
:css('font-style', 'italic')
:css('text-align','left')
:wikitext(Argumentos['remaining_link'] or Argumentos['remaining_text'] or 'Remaining')
:tag('td')
:wikitext(remainingOuro)
:tag('td')
:wikitext(remainingPrata)
:tag('td')
:wikitext(remainingBronze)
:tag('td')
:wikitext(remainingOuro+remainingPrata+remainingBronze)
end
if team:match('^[A-Z][A-Z][A-Z]$') or team:match('>[A-Z][A-Z][A-Z]<') then else team = team:lower() end
if team:match('^games$') then team = 'game' end
local colspan
if Argumentos['hide_rank'] then
colspan = 1
else
colspan = 2
end
if Argumentos['hide_totals'] then else
root:tag('tr')
:css('background-color', '#eaebef')
:addClass('sortbottom')
:tag('th')
:wikitext('Total ('..remainingEnd..' entradas)')
:attr('scope', 'row')
:css('background-color', '#eaebef')
:css('font-weight', 'normal')
:attr('colspan', colspan)
:tag('td')
:wikitext(Argumentos['total_ouro'] or totalOuro)
:css('font-weight', 'bold')
:tag('td')
:wikitext(Argumentos['total_prata'] or totalPrata)
:css('font-weight', 'bold')
:tag('td')
:wikitext(Argumentos['total_bronze'] or totalBronze)
:css('font-weight', 'bold')
:tag('td')
:wikitext(Argumentos['grand_total'] or totalOuro+totalPrata+totalBronze)
:css('font-weight', 'bold')
end
-- Build the rest of the footer
if Argumentos['fonte'] or Argumentos['notas'] then
if footer ~= '' then
footer = footer .. '<br>'
end
footer = frame:expandTemplate{ title = 'refbegin' } .. footer
if Argumentos['fonte'] then
footer = footer .. 'Fonte: ' .. Argumentos['fonte']
end
if Argumentos['notas'] then
if Argumentos['fonte'] then
footer = footer .. '<br>'
end
footer = footer .. 'Notas: ' .. Argumentos['notas']
end
footer = footer .. frame:expandTemplate{ title = 'refend' }
end
return header .. tostring(root) .. footer
end
return p