Moduuli:Mitalitaulukko
Siirry navigaatioon
Siirry hakuun
[ muokkaa ] Tämä on en:Module:Medals table -sivulta kopioitu moduuli ja siihen on tehty muutoksina pelkästään lokalisoinnit.
|
require('strict')
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function deflag(s)
s = mw.ustring.gsub(s or '', '%[%[[Ff][Ii][Ll][Ee]:[^%[%]]*%]%]', '')
s = mw.ustring.gsub(s, '%[%[[Ii][Mm][Aa][Gg][Ee]:[^%[%]]*%]%]', '')
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)
if not args then
args = getArgs(frame)
end
local team = args['joukkue'] or 'Maa'
local root = mw.html.create()
local host = args['isäntä'] or ''
local host1 = args['isäntä1'] or ''
local host2 = args['isäntä2'] or ''
local hostColor = '#ccccff'
local defaultRowColor = '#ffffff'
local flagTemplate = args['lippumalline'] or 'Maalippu'
local event = args['tapahtuma']
local legendpos = (args['legend_position'] or 't'):lower()
local header, footer = '', ''
local totalGold = 0
local totalSilver = 0
local totalBronze = 0
local remainingGold = 0
local remainingSilver = 0
local remainingBronze = 0
local remainingStart = 0
local remainingEnd = 0
local limitReached = false
local showLimit = tonumber(args['esitysraja'])
-- build the legend
if host2 ~= '' and host1 ~= '' then
if args['nimi_' .. host1] then
host1 = args['nimi_' .. host1]
elseif host1:match('^([A-Z][A-Z][A-Z])') then
host1 = frame:expandTemplate{title = flagTemplate, args = {host1, event} }
end
if args['nimi_' .. host2] then
host2 = args['nimi_' .. host2]
elseif host2:match('^([A-Z][A-Z][A-Z])') then
host2 = frame:expandTemplate{title = flagTemplate, args = {host2, event} }
end
host = 'Isäntämaat (' .. deflag(host1) .. ', ' .. deflag(host2) .. ')'
host = frame:expandTemplate{title = 'color box', args = {hostColor, ' * ', 'border=darkgray'}} ..' '.. host
elseif host ~= '' then
if args['nimi_' .. host] then
host = args['nimi_' .. host]
elseif host:match('^([A-Z][A-Z][A-Z])') then
host = frame:expandTemplate{title = flagTemplate, args = {host, event} }
end
host = 'Isäntämaa (' .. deflag(host) .. ')'
host = host .. (args['isäntähuom'] or '')
host = frame:expandTemplate{title = 'color box', args = {hostColor, ' * ', 'border=darkgray'}} ..' '.. host
end
local leading = ''
if args['johdossa'] then
leading = frame:expandTemplate{title = 'legend', args = {'#E9D66B', "'''Johdossa lajissa'''"}}
end
if legendpos == 't' then
header = header .. host .. leading
else
footer = footer .. host .. leading
end
root = root
:tag('table')
:addClass('wikitable')
:addClass('sortable')
:addClass('plainrowheaders')
:addClass('jquery-tablesorter')
:css('text-align', 'center')
:css('background-color', 'white')
root:tag('caption')
:wikitext(args['otsikko'])
-- add the header row
local row = root:tag('tr')
if not args['hide_rank'] then
row:tag('th')
:attr('scope', 'col')
:wikitext('Sija')
end
row
:tag('th')
:attr('scope', 'col')
:wikitext(team)
:tag('th')
:attr('scope', 'col')
:addClass('headerSort')
:css('width', '4em')
:css('background-color', 'gold')
:wikitext('Kultaa')
:tag('th')
:attr('scope', 'col')
:addClass('headerSort')
:css('width', '4em')
:css('background-color', 'silver')
:wikitext('Hopeaa')
:tag('th')
:attr('scope', 'col')
:addClass('headerSort')
:css('width', '4em')
:css('background-color', '#c96')
:wikitext('Pronssia')
:tag('th')
:attr('scope', 'col')
:css('width', '4em')
:wikitext('Yhteensä')
-- enumerate the rows
local rowNums = {}
local IOCs = {}
for k,v in pairs(args) do
k = ''..k
local IOC = k:match('^kultaa_([A-Z][A-Z][A-Z])$') or k:match('^kultaa_(%d+)$')
or k:match('^hopeaa_([A-Z][A-Z][A-Z])$') or k:match('^hopeaa_(%d+)$')
or k:match('^pronssia_([A-Z][A-Z][A-Z])$') or k:match('^pronssia_(%d+)$')
if IOC and IOCs[IOC] == nil then
IOCs[IOC] = 1
local gold = (tonumber(args['kultaa_' .. IOC]) or 0)
local silver = (tonumber(args['hopeaa_' .. IOC]) or 0)
local bronze = (tonumber(args['pronssia_' .. IOC]) or 0)
local noskip = args['skip_' .. IOC] and 0 or 1
local nation = args['nimi_' .. IOC] or
frame:expandTemplate{title = flagTemplate, args = {IOC, event} }
nation = deflag(nation)
if nation:match('%[%[[^%[%]%|]*%|([^%[%]]*)%]%]') then
nation = nation:match('%[%[[^%[%]%|]*%|([^%[%]]*)%]%]')
end
if nation:match('%[%[([^%[%]%|]*)%]%]') then
nation = nation:match('%[%[([^%[%]%|]*)%]%]')
end
table.insert(rowNums, {gold, silver, bronze, noskip, nation, IOC})
end
end
if args['joukkue'] == '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 lastGold, lastSilver, lastBronze = -1
local rank = 0
local lastspan, lastrankcell = 1, nil
for i, anum in ipairs(rowNums) do
local IOC = anum[6]
if args['skip_' .. IOC] then
lastGold, lastSilver, lastBronze, lastspan = -1, -1, -1, 1
else
rank = rank + 1
end
local nation = args['nimi_' .. IOC] or
frame:expandTemplate{title = flagTemplate, args = {IOC, event} }
local gold = tonumber(args['kultaa_' .. IOC]) or 0
local silver = tonumber(args['hopeaa_' .. IOC]) or 0
local bronze = tonumber(args['pronssia_' .. IOC]) or 0
local isHost = args['isäntä_' .. IOC]
-- this is mainly for the parameter names example so you can override it.
local total = args['yhteensä_' .. IOC] or gold + silver + bronze
local color = isHost and hostColor or defaultRowColor
if not args['grand_total'] then
totalGold = totalGold + gold
totalSilver = totalSilver + silver
totalBronze = totalBronze + bronze
end
if args['isäntä_' .. IOC] then
nation = nation .. '*'
end
if args['huom_' .. IOC] then
nation = nation .. args['huom_' .. IOC]
end
if showLimit and (rank>showLimit) then
if remainingStart == 0 then remainingStart = rank end
limitReached = true
remainingGold = remainingGold + gold
remainingSilver = remainingSilver + silver
remainingBronze = remainingBronze + bronze
else
local row
if args['johdossa_' .. 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 not args['piilota_sija'] then
if (gold == lastGold) and (silver == lastSilver) and (bronze == lastBronze) then
lastspan = lastspan + 1
lastrankcell:attr('rowspan',lastspan)
else
lastspan = 1
if args['skip_' .. IOC] then
lastrankcell = row:tag('td'):wikitext(frame:expandTemplate{title = 'sort', args = {'999', '–'}})
else
lastrankcell = row:tag('td'):wikitext(rank)
lastGold = gold
lastSilver = silver
lastBronze = bronze
end
end
end
row:tag('th')
:attr('scope', 'row')
:css('background-color', color)
:css('text-align','left')
:wikitext(nation)
:tag('td')
:wikitext(gold)
:tag('td')
:wikitext(silver)
: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(args['jäännös_linkki'] or args['jäännös_teksti'] or 'Jäljelläolevia')
:tag('td')
:wikitext(remainingGold)
:tag('td')
:wikitext(remainingSilver)
:tag('td')
:wikitext(remainingBronze)
:tag('td')
:wikitext(remainingGold+remainingSilver+remainingBronze)
end
if not (team:match('^[A-Z][A-Z][A-Z]$') or team:match('>[A-Z][A-Z][A-Z]<')) then
team = team:lower()
end
if team:match('^games$') then team = 'game' end
local colspan
if args['piilota_sija'] then
colspan = 1
else
colspan = 2
end
if not args['piilota_summat'] then
root:tag('tr')
:css('background-color', '#eaebef')
:addClass('sortbottom')
:tag('th')
:wikitext('Yhteensä ('..remainingEnd..' maata)')
:attr('scope', 'row')
:css('background-color', '#eaebef')
:css('font-weight', 'bold')
:attr('colspan', colspan)
:tag('td')
:wikitext(args['yhteensä_kultaa'] or totalGold)
:css('font-weight', 'bold')
:tag('td')
:wikitext(args['yhteensä_hopeaa'] or totalSilver)
:css('font-weight', 'bold')
:tag('td')
:wikitext(args['yhteensä_pronssia'] or totalBronze)
:css('font-weight', 'bold')
:tag('td')
:wikitext(args['grand_total'] or totalGold+totalSilver+totalBronze)
:css('font-weight', 'bold')
end
-- Build the rest of the footer
if args['lähde'] or args['huomioita'] then
if footer ~= '' then
footer = footer .. '<br>'
end
footer = frame:expandTemplate{ title = 'refbegin' } .. footer
if args['lähde'] then
footer = footer .. 'Lähde: ' .. args['lähde']
end
if args['huomioita'] then
if args['lähde'] then
footer = footer .. '<br>'
end
footer = footer .. 'Huomioita: ' .. args['huomioita']
end
footer = footer .. frame:expandTemplate{ title = 'refend' }
end
return header .. tostring(root) .. footer
end
return p