Module:Fb overview
Appearance
![]() | This module depends on the following other modules: |
Implements {{fb overview}}
-- This implements {{fb overview}}
local p = {}
-- Main function
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
-- Get the row numbers and check for invalid input
local rownumbers = {}
local unknown = {}
local showdates, showrounds, showpos = false, false, false
local maxrow = -1
for k, v in pairs(args) do
if k == 'u' or k == 'c' or k == 's' or k == 'pts' then
-- These are valid
elseif tostring(k):match('^[cwdlfa]%d%d*$') then
local n = tonumber(mw.ustring.gsub(tostring(k), '^[cwdlfa](%d%d*)$', '%1'))
table.insert(rownumbers, n)
maxrow = (n > maxrow) and maxrow or n
elseif tostring(k):match('[dfl]m%d%d*$') then
local n = tonumber(mw.ustring.gsub(tostring(k), '^[dfl]m(%d%d*)$', '%1'))
table.insert(rownumbers, n)
maxrow = (n > maxrow) and maxrow or n
showdates = true
elseif tostring(k):match('sr%d%d*$') then
local n = tonumber(mw.ustring.gsub(tostring(k), '^sr(%d%d*)$', '%1'))
table.insert(rownumbers, n)
maxrow = (n > maxrow) and maxrow or n
showrounds = true
elseif tostring(k):match('fp%d%d*$') then
local n = tonumber(mw.ustring.gsub(tostring(k), '^fp(%d%d*)$', '%1'))
table.insert(rownumbers, n)
maxrow = (n > maxrow) and maxrow or n
showpos = true
else
table.insert(unknown, {k, v})
end
end
-- Sort the row numbers
table.sort(rownumbers)
local root = {}
if maxrow > -1 then
local WDL = require('Module:WDL').main
-- Make the table
table.insert(root,'{| class="wikitable" style="text-align:center"')
-- Add the headers
table.insert(root,'|-')
table.insert(root,'! rowspan=2 | Competition')
local totspan = 1
if showdates then
table.insert(root,'! rowspan=2 | First match')
table.insert(root,'! rowspan=2 | Last match')
totspan = totspan + 2
end
if showrounds then
table.insert(root,'! rowspan=2 | Starting round')
totspan = totspan + 1
end
if showpos then
table.insert(root,'! rowspan=2 | Final position')
totspan = totspan + 1
end
table.insert(root,'! colspan=8 | Record')
table.insert(root,'|-')
table.insert(root,'! <abbr title="Games played">Pld</abbr>')
table.insert(root,'! <abbr title="Games won">W</abbr>')
table.insert(root,'! <abbr title="Games drawn">D</abbr>')
table.insert(root,'! <abbr title="Games lost">L</abbr>')
if args.pts and args.pts == 'y' then
table.insert(root,'! <abbr title="Points for">PF</abbr>')
table.insert(root,'! <abbr title="Points against">PA</abbr>')
table.insert(root,'! <abbr title="Point difference">PD</abbr>')
else
table.insert(root,'! <abbr title="Goals for">GF</abbr>')
table.insert(root,'! <abbr title="Goals against">GA</abbr>')
table.insert(root,'! <abbr title="Goal difference">GD</abbr>')
end
table.insert(root,'! <abbr title="Winning percentage">Win %</abbr>')
evenodd = 'odd'
-- Now add the rows
wtot, dtot, ltot, ftot, atot = 0, 0, 0, 0, 0
for i=1,#rownumbers do
local r = rownumbers[i]
if evenodd == 'even' then
table.insert(root,'|- style="background-color:#EEE"')
else
table.insert(root,'|-')
end
table.insert(root,'| ' .. (args['c' .. r] or ''))
if showdates then
if args['dm' .. r] then
table.insert(root,'| colspan=2 | ' .. args['dm' .. r])
else
table.insert(root,'| ' .. (args['fm' .. r] or ''))
table.insert(root,'| ' .. (args['lm' .. r] or ''))
end
end
if showrounds then
table.insert(root,'| ' .. (args['sr' .. r] or ''))
end
if showpos then
local fp = args['fp' .. r] or ''
local bg =
(fp:match('^Winner') and 'gold') or
(fp:match('^Runners-up') and 'silver') or
(fp:match('^Runner-up') and 'silver') or nil
if bg then
table.insert(root,'| style="background-color:' .. bg .. '" | ' .. fp)
else
table.insert(root,'| ' .. fp)
end
end
wtot = wtot + (tonumber(args['w' .. r]) or 0)
dtot = dtot + (tonumber(args['d' .. r]) or 0)
ltot = ltot + (tonumber(args['l' .. r]) or 0)
ftot = ftot + (tonumber(args['f' .. r]) or 0)
atot = atot + (tonumber(args['a' .. r]) or 0)
table.insert(root, WDL(frame,
{nil, args['w' .. r], args['d' .. r], args['l' .. r],
['for'] = args['f' .. r], ['against'] = args['a' .. r], ['diff'] = 'yes'})
)
end
table.insert(root,'|-')
if totspan > 1 then
table.insert(root,'! colspan=' .. totspan .. ' | Total')
else
table.insert(root,'! Total')
end
table.insert(root, WDL(frame,
{wtot+dtot+ltot, wtot, dtot, ltot, ['total'] = 'y',
['for'] = ftot, ['against'] = atot, ['diff'] = 'yes'})
)
table.insert(root, '|}' .. frame:expandTemplate{title = 'refbegin'})
if args.u then
table.insert(root, 'Last updated: ' .. args.u .. '<br>')
end
table.insert(root, 'Source: ' .. (args.s or '[[#Competitions|Competitions]]'))
end
return table.concat(root, '\n')
end
return p