Jump to content

Module:Medals table

Permanently protected module
From Wikipedia, the free encyclopedia

require('strict')
localgetArgs=require('Module:Arguments').getArgs
localflagg=require('Module:Flagg').luaMain

localp={}

localfunctiondeflag(s)
s=mw.ustring.gsub(sor'','%[%[[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*$','')
whiles: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')
returns
end

localfunctionifexists(arg)
return((argor'')~='')andargorfalse
end

functionp.createTable(frame,args)
ifnotargsthen
args=getArgs(frame)
end

localteam=args['team']or'Nation'
localroot=mw.html.create()
localhost=args['host']or''
localhost1=args['host1']or''
localhost2=args['host2']or''
localhostColor='#ccccff'
localdefaultRowColor='#ffffff'
localflagTemplate=ifexists(args['flag_template'])or'flagteam'
localevent=args['event']
locallegendpos=(args['legend_position']or't'):lower()
localheader,footer='',''
localtotalGold=0
localtotalSilver=0
localtotalBronze=0

localremainingGold=0
localremainingSilver=0
localremainingBronze=0
localremainingStart=0
localremainingEnd=0
locallimitReached=false
localshowLimit=tonumber(args['show_limit'])

localfunctiongetFlag(code)
if(flagTemplate=='flagteam'ormw.ustring.lower(flagTemplate)=='flagcountry')then
localalias=ifexists(event)or'23px'
localfout=flagg(frame,{'usce',code,mw.ustring.match(alias,"[12]%d%d%d")oralias})
if(flagTemplate=='flagteam')then
fout=fout..'&nbsp;<span style= "font-size:90%;" >('..code..')</span>'
end
returnfout
end
returnframe:expandTemplate{title=flagTemplate,args={code,event}}
end

-- build the legend
ifhost2~=''andhost1~=''then
ifargs['name_'..host1]then
host1=args['name_'..host1]
elseifhost1:match('^([A-Z][A-Z][A-Z])')then
host1=getFlag(host1)
end
ifargs['name_'..host2]then
host2=args['name_'..host2]
elseifhost2: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,'&nbsp;*&nbsp;','border=darkgray'}}..'&nbsp;'..host
elseifhost~=''then
ifargs['name_'..host]then
host=args['name_'..host]
elseifhost: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,'&nbsp;*&nbsp;','border=darkgray'}}..'&nbsp;'..host
end

localleading=''
ifargs['leading']then
leading=frame:expandTemplate{title='legend',args={'#E9D66B',"'''Leading in that sport'''"}}
end

iflegendpos=='t'then
header=header..host..leading
else
footer=footer..host..leading
end

root=root
:tag('table')
:addClass('wikitable')
:addClass('sortable')
:addClass('notheme')
:addClass('plainrowheaders')
:addClass('jquery-tablesorter')
:css('text-align','center')
:css('background-color','white')
:css('color','black')

root:tag('caption')
:wikitext(args['caption'])
-- add the header row
localrow=root:tag('tr')

ifnotargs['hide_rank']then
row:tag('th')
:attr('scope','col')
:css('background-color','white')
:css('color','inherit')
:wikitext('Rank')
end
row
:tag('th')
:attr('scope','col')
:css('background-color','white')
:css('color','inherit')
: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
localrowNums={}
localIOCs={}
fork,vinpairs(args)do
k=''..k
localIOC=k:match('^gold_([A-Z][A-Z][A-Z])$')ork:match('^gold_(%d+)$')
ork:match('^silver_([A-Z][A-Z][A-Z])$')ork:match('^silver_(%d+)$')
ork:match('^bronze_([A-Z][A-Z][A-Z])$')ork:match('^bronze_(%d+)$')
ifIOCandIOCs[IOC]==nilthen
IOCs[IOC]=1
localgold=(tonumber(args['gold_'..IOC])or0)
localsilver=(tonumber(args['silver_'..IOC])or0)
localbronze=(tonumber(args['bronze_'..IOC])or0)
localnoskip=args['skip_'..IOC]and0or1
localnation=args['name_'..IOC]orgetFlag(IOC)
nation=deflag(nation)
ifnation:match('%[%[[^%[%]%|]*%|([^%[%]]*)%]%]')then
nation=nation:match('%[%[[^%[%]%|]*%|([^%[%]]*)%]%]')
end
ifnation:match('%[%[([^%[%]%|]*)%]%]')then
nation=nation:match('%[%[([^%[%]%|]*)%]%]')
end
table.insert(rowNums,{gold,silver,bronze,noskip,nation,IOC})
end
end
ifargs['team']=='Games'then
table.sort(rowNums,function(a,b)
returna[5]<b[5]
end
)
else
table.sort(rowNums,function(a,b)
returna[1]>b[1]or(a[1]==b[1]anda[2]>b[2])
or(a[1]==b[1]anda[2]==b[2]anda[3]>b[3])
or(a[1]==b[1]anda[2]==b[2]anda[3]==b[3]anda[4]>b[4])
or(a[1]==b[1]anda[2]==b[2]anda[3]==b[3]anda[4]==b[4]anda[5]<b[5])
end
)
end

locallastGold,lastSilver,lastBronze=-1
localrank=0
locallastspan,lastrankcell=1,nil
fori,anuminipairs(rowNums)do
localIOC=anum[6]
ifargs['skip_'..IOC]then
lastGold,lastSilver,lastBronze,lastspan=-1,-1,-1,1
else
rank=rank+1
end
localnation=args['name_'..IOC]orgetFlag(IOC)
localgold=tonumber(args['gold_'..IOC])or0
localsilver=tonumber(args['silver_'..IOC])or0
localbronze=tonumber(args['bronze_'..IOC])or0
localisHost=args['host_'..IOC]
-- this is mainly for the parameter names example so you can override it.
localtotal=args['total_'..IOC]orgold+silver+bronze
localcolor=isHostandhostColorordefaultRowColor

ifnotargs['grand_total']then
totalGold=totalGold+gold
totalSilver=totalSilver+silver
totalBronze=totalBronze+bronze
end

ifargs['host_'..IOC]then
nation=nation..'*'
end

ifargs['note_'..IOC]then
nation=nation..args['note_'..IOC]
end

ifshowLimitand(rank>showLimit)then
ifremainingStart==0thenremainingStart=rankend
limitReached=true
remainingGold=remainingGold+gold
remainingSilver=remainingSilver+silver
remainingBronze=remainingBronze+bronze
else
localrow
ifargs['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')

ifnotargs['hide_rank']then
if(gold==lastGold)and(silver==lastSilver)and(bronze==lastBronze)then
lastspan=lastspan+1
lastrankcell:attr('rowspan',lastspan)
else
lastspan=1
ifargs['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','#202122')
: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

iflimitReachedthen
root:tag('tr')
:tag('td')
:wikitext(remainingStart..'–'..remainingEnd)
:tag('td')
:css('font-style','italic')
:css('text-align','left')
:wikitext(args['remaining_link']orargs['remaining_text']or'Remaining')
:tag('td')
:wikitext(remainingGold)
:tag('td')
:wikitext(remainingSilver)
:tag('td')
:wikitext(remainingBronze)
:tag('td')
:wikitext(remainingGold+remainingSilver+remainingBronze)
end

ifnot(team:match('^[A-Z][A-Z][A-Z]$')orteam:match('>[A-Z][A-Z][A-Z]<'))then
team=team:lower()
end
ifteam:match('^games$')thenteam='game'end

localcolspan
ifargs['hide_rank']then
colspan=1
else
colspan=2
end
ifnotargs['hide_totals']then
root:tag('tr')
:css('color','#202122')
:css('background-color','#eaebef')
:addClass('sortbottom')
:tag('th')
:wikitext('Totals ('..remainingEnd..' entries)')
:attr('scope','row')
:css('color','#202122')
:css('background-color','#eaebef')
:css('font-weight','bold')
:attr('colspan',colspan)
:tag('td')
:wikitext(args['total_gold']ortotalGold)
:css('font-weight','bold')
:tag('td')
:wikitext(args['total_silver']ortotalSilver)
:css('font-weight','bold')
:tag('td')
:wikitext(args['total_bronze']ortotalBronze)
:css('font-weight','bold')
:tag('td')
:wikitext(args['grand_total']ortotalGold+totalSilver+totalBronze)
:css('font-weight','bold')
end

-- Build the rest of the footer
ifargs['source']orargs['notes']then
iffooter~=''then
footer=footer..'<br>'
end
footer=frame:expandTemplate{title='refbegin'}..footer

ifargs['source']then
footer=footer..'Source: '..args['source']
end
ifargs['notes']then
ifargs['source']then
footer=footer..'<br>'
end
footer=footer..'Notes: '..args['notes']
end
footer=footer..frame:expandTemplate{title='refend'}
end

returnheader..tostring(root)..footer
end

returnp