Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Humanipedia
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Module:Medals table
Module
Discussion
English
Read
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
require('strict') local getArgs = require('Module:Arguments').getArgs local flagg = require('Module:Flagg').luaMain 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 local function ifexists(arg) return ((arg or '') ~= '') and arg or false end function p.createTable(frame, args) if not args then args = getArgs(frame) end local team = args['team'] or 'Nation' local root = mw.html.create() local host = args['host'] or '' local host1 = args['host1'] or '' local host2 = args['host2'] or '' local hostColor = '#ccccff' local defaultRowColor = 'inherit' local flagTemplate = ifexists(args['flag_template']) or 'flagteam' local event = args['event'] 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['show_limit']) local lang = mw.getContentLanguage() local function getFlag(code) if (flagTemplate == 'flagteam' or mw.ustring.lower(flagTemplate) == 'flagcountry') then local alias = ifexists(event) or '23px' local fout = flagg(frame,{'usce', code, mw.ustring.match(alias, "[12]%d%d%d") or alias}) if (flagTemplate == 'flagteam') then fout = fout..' <span style="font-size:90%;">('..code..')</span>' end return fout end return frame:expandTemplate{title = flagTemplate, args = {code, event} } end -- build the legend if host2 ~= '' and host1 ~= '' then if args['name_' .. host1] then host1 = args['name_' .. host1] elseif host1:match('^([A-Z][A-Z][A-Z])') then host1 = getFlag(host1) end if args['name_' .. host2] then host2 = args['name_' .. host2] elseif host2:match('^([A-Z][A-Z][A-Z])') then host2 = getFlag(host2) end host = 'Host nations (' .. deflag(host1) .. ', ' .. deflag(host2) .. ')' host = frame:expandTemplate{title = 'color box', args = {hostColor, ' * ', 'border=darkgray'}} ..' '.. host elseif host ~= '' then if args['name_' .. host] then host = args['name_' .. host] elseif host:match('^([A-Z][A-Z][A-Z])') then host = getFlag(host) end host = 'Host nation (' .. deflag(host) .. ')' host = host .. (args['host_note'] or '') host = frame:expandTemplate{title = 'color box', args = {hostColor, ' * ', 'border=darkgray'}} ..' '.. host end local leading = '' if args['leading'] then leading = frame:expandTemplate{title = 'legend', args = {'#E9D66B', "'''Leading in that sport'''"}} end if legendpos == 't' then header = header .. host .. leading else footer = footer .. host .. leading end local sticky = frame:extensionTag{ name = "templatestyles", args = {src = "template:sticky header/styles.css" } } root = root :tag('table') :addClass('wikitable') :addClass('sortable') :addClass('sticky-header-multi') :addClass('plainrowheaders') :addClass('jquery-tablesorter') :css('text-align', 'center') root:tag('caption') :wikitext(args['caption']) -- add the header row local row = root:tag('tr') if not args['hide_rank'] then row:tag('th') :attr('scope', 'col') :css('color', 'inherit') :wikitext('Rank') end row :tag('th') :attr('scope', 'col') :wikitext(team) :tag('th') :attr('scope', 'col') :addClass('headerSort') :css('width', '4em') :css('background-color', 'gold') :css('color', '#333') :wikitext('Gold') :tag('th') :attr('scope', 'col') :addClass('headerSort') :css('width', '4em') :css('background-color', 'silver') :css('color', '#333') :wikitext('Silver') :tag('th') :attr('scope', 'col') :addClass('headerSort') :css('width', '4em') :css('background-color', '#c96') :css('color', '#333') :wikitext('Bronze') :tag('th') :attr('scope', 'col') :css('width', '4em') :wikitext('Total') -- enumerate the rows local rowNums = {} local IOCs = {} for k,v in pairs(args) do k = ''..k local IOC = k:match('^gold_([A-Z][A-Z][A-Z])$') or k:match('^gold_(%d+)$') or k:match('^silver_([A-Z][A-Z][A-Z])$') or k:match('^silver_(%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 gold = (tonumber(args['gold_' .. IOC]) or 0) local silver = (tonumber(args['silver_' .. IOC]) or 0) local bronze = (tonumber(args['bronze_' .. IOC]) or 0) local noskip = args['skip_' .. IOC] and 0 or 1 local nation = args['name_' .. IOC] or getFlag(IOC) 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['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 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['name_' .. IOC] or getFlag(IOC) local gold = tonumber(args['gold_' .. IOC]) or 0 local silver = tonumber(args['silver_' .. IOC]) or 0 local bronze = tonumber(args['bronze_' .. IOC]) or 0 local isHost = args['host_' .. IOC] -- this is mainly for the parameter names example so you can override it. local total = tonumber(args['total_' .. 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['host_' .. IOC] then nation = nation .. '*' end if args['note_' .. IOC] then nation = nation .. args['note_' .. 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['leading_' .. IOC] then row = root:tag('tr'):css('background-color', '#E9D66B'):css('color', '#202122') 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):css('color', '#202122') if not args['hide_rank'] 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('color', 'inherit') :css('text-align','left') :wikitext(nation) :tag('td') :wikitext(lang:formatNum(gold)) :tag('td') :wikitext(lang:formatNum(silver)) :tag('td') :wikitext(lang:formatNum(bronze)) :tag('td') :wikitext(lang:formatNum(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['remaining_link'] or args['remaining_text'] or 'Remaining') :tag('td') :wikitext(lang:formatNum(remainingGold)) :tag('td') :wikitext(lang:formatNum(remainingSilver)) :tag('td') :wikitext(lang:formatNum(remainingBronze)) :tag('td') :wikitext(lang:formatNum(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['hide_rank'] then colspan = 1 else colspan = 2 end if not args['hide_totals'] then root:tag('tr') :addClass('sortbottom') :tag('th') :wikitext('Totals ('..remainingEnd..' entries)') :attr('scope', 'row') :css('font-weight', 'bold') :attr('colspan', colspan) :tag('th') :wikitext(lang:formatNum(tonumber(args['total_gold']) or totalGold)) :css('font-weight', 'bold') :tag('th') :wikitext(lang:formatNum(tonumber(args['total_silver']) or totalSilver)) :css('font-weight', 'bold') :tag('th') :wikitext(lang:formatNum(tonumber(args['total_bronze']) or totalBronze)) :css('font-weight', 'bold') :tag('th') :wikitext(lang:formatNum(tonumber(args['grand_total']) or (totalGold + totalSilver + totalBronze))) :css('font-weight', 'bold') end -- Build the rest of the footer if args['source'] or args['notes'] then if footer ~= '' then footer = footer .. '<br>' end footer = frame:expandTemplate{ title = 'refbegin' } .. footer if args['source'] then footer = footer .. 'Source: ' .. args['source'] end if args['notes'] then if args['source'] then footer = footer .. '<br>' end footer = footer .. 'Notes: ' .. args['notes'] end footer = footer .. frame:expandTemplate{ title = 'refend' } end return header .. sticky .. tostring(root) .. footer end return p
Summary:
Please note that all contributions to Humanipedia may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Humanipedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Error
(
edit
)
Template:High-use
(
edit
)
Template:Module other
(
edit
)
Template:Module rating
(
edit
)
Template:Ombox
(
edit
)
Template:Pp
(
edit
)
Template:Protection padlock
(
edit
)
Template:Template link
(
edit
)
Template:Tl
(
edit
)
Module:Error
(
edit
)
Module:File link
(
edit
)
Module:Medals table/doc
(
edit
)
Module:Message box
(
edit
)
Module:Protection banner
(
edit
)