Module:WDL: Difference between revisions
Appearance
Content deleted Content added
adjust decimal alignment and some logic for percent (see List of Real Madrid C.F. managers for an example), will also add more examples to the doc |
|||
Line 24: | Line 24: | ||
local retval = '' |
local retval = '' |
||
if winPercent < 10 then |
if winPercent < 10 then |
||
⚫ | |||
elseif winPercent < 100 then |
|||
retval = '<span style="visibility:hidden;color:transparent;">0</span>' |
retval = '<span style="visibility:hidden;color:transparent;">0</span>' |
||
end |
end |
||
return retval .. frame:expandTemplate{title = 'Number table sorting', args = { roundAndPad(winPercent, decimals or 2) }} |
|||
if winPercent >= 100 then -- XXX: Should >= be ==? This should never be over 100, but that's what the original template had |
|||
⚫ | |||
else |
|||
return retval |
|||
end |
|||
end |
end |
||
Line 43: | Line 40: | ||
return '<span style="display:none">!</span>—' |
return '<span style="display:none">!</span>—' |
||
end |
end |
||
return displayWinPercent(frame, 100 * (won or |
return displayWinPercent(frame, 100 * (won or 0) / (((won or 0) + (drawn or 0) + (lost or 0)) or 1), decimals) |
||
elseif tonumber(played) <= 0 then |
elseif tonumber(played) <= 0 then |
||
return '<span style="display:none">!</span>—' |
return '<span style="display:none">!</span>—' |
Revision as of 15:26, 3 July 2017
![]() | This Lua module is used on approximately 13,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
![]() | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Usage
This module implements the {{WDL}} and {{WDLtot}} templates. Please see the template pages for usage instructions.
Tracking/maintenance category
require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local roundAndPad = require('Module:Decimals')._main
local p = {}
local function total(frame, played, won, drawn, lost, category)
if played == '-' or played == '—' then
return '—'
elseif not played then
if not won and not drawn and not lost then
return ''
end
return frame:expandTemplate{title = 'Number table sorting', args = { (won or 0) + (drawn or 0) + (lost or 0) }}
elseif tonumber(played) ~= (won or 0) + (drawn or 0) + (lost or 0) then
return '<span class="error" style="font-size:100%"><abbr title="GP not equal to W + D + L">error</abbr>' .. (category or '') .. '</span>'
else
return frame:expandTemplate{title = 'Number table sorting', args = { played }}
end
end
local function displayWinPercent(frame, winPercent, decimals)
local retval = ''
if winPercent < 10 then
retval = '<span style="visibility:hidden;color:transparent;">00</span>'
elseif winPercent < 100 then
retval = '<span style="visibility:hidden;color:transparent;">0</span>'
end
return retval .. frame:expandTemplate{title = 'Number table sorting', args = { roundAndPad(winPercent, decimals or 2) }}
end
local function pct(frame, played, won, drawn, lost, decimals)
if played == '-' or played == '—' then
return '—'
elseif not played then
if not won and not drawn and not lost then
return ''
elseif (won or 0) + (drawn or 0) + (lost or 0) <= 0 then
return '<span style="display:none">!</span>—'
end
return displayWinPercent(frame, 100 * (won or 0) / (((won or 0) + (drawn or 0) + (lost or 0)) or 1), decimals)
elseif tonumber(played) <= 0 then
return '<span style="display:none">!</span>—'
else
return displayWinPercent(frame, 100 * (won or 0) / played, decimals)
end
end
function p.main(frame)
local args = getArgs(frame)
local tableprefix = string.format('| style="%stext-align:%s" |', args.total and 'font-weight:bold;background:#efefef;' or '', args.align or 'center')
local retval = tableprefix .. total(frame, args[1], args[2], args[3], args[4], args.demospace and '' or '[[Category:WDL error]]') .. '\n'
retval = retval .. tableprefix .. frame:expandTemplate{title = 'Number table sorting', args = { args[2] }} .. '\n'
retval = retval .. tableprefix .. frame:expandTemplate{title = 'Number table sorting', args = { args[3] }} .. '\n'
retval = retval .. tableprefix .. frame:expandTemplate{title = 'Number table sorting', args = { args[4] }} .. '\n'
if args['for'] then
retval = retval .. tableprefix .. frame:expandTemplate{title = 'Number table sorting', args = { args['for'] }} .. '\n'
end
if args.against then
retval = retval .. tableprefix .. frame:expandTemplate{title = 'Number table sorting', args = { args.against }} .. '\n'
end
if args.diff == 'yes' then
if tonumber(args['for']) and tonumber(args.against) then
retval = retval .. tableprefix .. string.format('%s%d\n', tonumber(args['for']) < tonumber(args.against) and '−' or '+', math.abs(args['for'] - args.against))
else
retval = retval .. tableprefix .. '<span style="display:none">!</span>—\n'
end
end
return retval .. tableprefix .. pct(frame, args[1], args[2], args[3], args[4], args.decimals)
end
return p