Módulo:Tabela geral de medalhas

Revisão em 01h28min de 14 de maio de 2024 por Jaewoo (discussão | contribs) (Criou a página com "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*',...")
(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)

A documentação para este módulo pode ser criada na página Módulo:Tabela geral de medalhas/doc

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, '&nbsp;*&nbsp;', 'border=darkgray'}} ..'&nbsp;'.. 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