Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Usage  














Module:Medals table






العربية
Azərbaycanca

Banjar
Bosanski
Буряад
Dansk
Ελληνικά
Español
Euskara
فارسی
Galego

Հայերեն
Bahasa Indonesia

Latviešu
Lietuvių
Magyar
Македонски

Bahasa Melayu

Norsk bokmål
Oʻzbekcha / ўзбекча
Polski
Português
Русский
Simple English
سنڌي
Slovenščina
کوردی
Српски / srpski
Suomi
Svenska

Türkçe
Українська
اردو
Tiếng Vit


 

Edit links
 









Module
Talk
 

















Read
View source
View history
 








Tools
   


Actions  



Read
View source
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 





Permanently protected module

From Wikipedia, the free encyclopedia
 


Usage

See: Template:Medals table

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 = '#ffffff'
 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 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..'&nbsp;<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, '&nbsp;*&nbsp;', 'border=darkgray'}} ..'&nbsp;'.. 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, '&nbsp;*&nbsp;', 'border=darkgray'}} ..'&nbsp;'.. 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
 
 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
 local row = root:tag('tr')
 
 if not args['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
 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  = 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', '#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
 
 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(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['hide_rank'] then 
  colspan = 1 
 else 
  colspan = 2 
 end
 if not args['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'] or totalGold)
    :css('font-weight', 'bold')
   :tag('td')
    :wikitext(args['total_silver'] or totalSilver)
    :css('font-weight', 'bold')
   :tag('td')
    :wikitext(args['total_bronze'] 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['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 .. tostring(root) .. footer
end

return p

Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:Medals_table&oldid=1229263026"

Category: 
Modules subject to page protection
Hidden category: 
Wikipedia template-protected modules
 



This page was last edited on 15 June 2024, at 20:25 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki