-- this module implements local p =
local math_module = require("Module:Math")
local headings =
local highlight = "#CCFFCC"local splitcolor = "#CCCCCC"local divleadermark = " *"
local function get_division(division) if division then division = division:sub(1,1):upper .. division:sub(2,-1) -- ucfirst return '' .. division .. ' Division' else return nil endend
local function get_conference(conference) if conference then conference = conference:sub(1,1):upper .. conference:sub(2,-1) -- ucfirst return '' .. conference .. 'ern Conference' else return nil endend
local function rnd(num, digits) -- This function implements return math_module._precision_format(tostring(num), digits)end
local function winpct(w, l) local pct = '–' if (w + l) > 0 then pct = rnd(w / (w + l), 3):gsub('^0', ) end return pctend
local function gbformat(hw, hl, rw, rl, hw1, hl1, rw1, rl1) if (tonumber(hw1 or '0')
hl1 and tonumber(rw1 or '0')
rl1) then local gb = ((hw1 - hl1 + rw1 - rl1) - (hw - hl + rw - rl))/2 if gb
function p._division(args) -- division name local division = args['division']:lower -- division leader record local dloffset = 8*((tonumber(args[division .. 'leader']) or 1) - 1) local dlhw = tonumber(args[dloffset + 3]) local dlhl = tonumber(args[dloffset + 4]) local dlrw = tonumber(args[dloffset + 5]) local dlrl = tonumber(args[dloffset + 6]) -- start the table local root = mw.html.create('table') :addClass('wikitable') :css('width', args['width'] or '500px') :css('font-size', args['font-size'] or '95%') :css('text-align', 'center') -- table headings local row = root:tag('tr') row:tag('th'):wikitext(get_division(args['division'])) for k,v in ipairs do local abbr, text, width = v, v, 0 if headings[v] then abbr = headings[v][1] or abbr text = headings[v][2] or abbr or text width = tonumber(headings[v][3]) or width if text ~= abbr then text = '' .. abbr .. '' end end row:tag('th') :css('width', (width > 0) and width .. '%' or nil) :wikitext(text) end -- rows local pos = 1 while args[(pos - 1)*8 + 1] or args[(pos - 1)*8 + 2] do local offset = (pos - 1)*8 local team = args[offset + 1] or local abbr = args[offset + 2] or local hw = tonumber(args[offset + 3]) or 0 local hl = tonumber(args[offset + 4]) or 0 local rw = tonumber(args[offset + 5]) or 0 local rl = tonumber(args[offset + 6]) or 0 local wldiff = hw - hl + rw - rl local divrecord = args[offset + 7] or local divname = (args[offset + 8] or ):lower if divname
args['team'] then rowcolor = highlight end row = root:tag('tr'):css('background-color', rowcolor) -- team name row:tag('td'):css('text-align', 'left'):wikitext(team) -- wins row:tag('td'):wikitext(hw + rw) -- losses row:tag('td'):wikitext(hl + rl) -- percentage row:tag('td'):wikitext(winpct(hw + rw, hl + rl)) -- gb row:tag('td'):wikitext(gbformat(hw, hl, rw, rl, dlhw, dlhl, dlrw, dlrl)) -- home record row:tag('td'):wikitext(hw .. ' - ' .. hl) -- road record row:tag('td'):wikitext(rw .. ' - ' .. rl) -- div record row:tag('td'):wikitext(divrecord) -- played row:tag('td'):wikitext(hw + hl + rw + rl) end pos = pos + 1 end return rootend
function p._conference(args) -- conference leader local cloffset = 0 local clhw = tonumber(args[cloffset + 3]) local clhl = tonumber(args[cloffset + 4]) local clrw = tonumber(args[cloffset + 5]) local clrl = tonumber(args[cloffset + 6]) -- start the table local root = mw.html.create('table') :addClass('wikitable') :css('width', args['width'] or '400px') :css('font-size', args['font-size'] or '95%') :css('text-align', 'center') -- title root:tag('tr'):tag('th'):attr('colspan', 7):wikitext(get_conference(args['conference'])) -- headings local row = root:tag('tr') for k,v in ipairs do local abbr, text, width = v, v, 0 if headings[v] then abbr = headings[v][1] or abbr text = headings[v][2] or abbr or text width = tonumber(headings[v][3]) or width if text ~= abbr then text = '' .. abbr .. '' end end row:tag('th') :css('width', (width > 0) and width .. '%' or nil) :wikitext(text) end -- rows local pos = 1 local div1leader = tonumber(args[(args['div1name'] or ):lower .. 'leader']) local div2leader = tonumber(args[(args['div2name'] or ):lower .. 'leader']) local div3leader = tonumber(args[(args['div3name'] or ):lower .. 'leader']) while args[(pos - 1)*8 + 1] or args[(pos - 1)*8 + 2] do local offset = (pos - 1)*8 local team = args[offset + 1] or local abbr = args[offset + 2] or local hw = tonumber(args[offset + 3]) or 0 local hl = tonumber(args[offset + 4]) or 0 local rw = tonumber(args[offset + 5]) or 0 local rl = tonumber(args[offset + 6]) or 0 local wldiff = hw - hl + rw - rl local divrecord = args[offset + 7] or local divname = (args[offset + 8] or ):lower if (pos
div2leader or pos
args['team'] then rowcolor = highlight end row = root:tag('tr'):css('background-color', rowcolor) -- position row:tag('th'):wikitext(pos) -- team name row:tag('td'):css('text-align', 'left'):wikitext(team) -- wins row:tag('td'):wikitext(hw + rw) -- losses row:tag('td'):wikitext(hl + rl) -- percentage row:tag('td'):wikitext(winpct(hw + rw, hl + rl)) -- gb row:tag('td'):wikitext(gbformat(hw, hl, rw, rl, clhw, clhl, clrw, clrl)) -- played row:tag('td'):wikitext(hw + hl + rw + rl) if args['split' .. pos] then root:tag('tr'):css('background-color', splitcolor):tag('td'):attr('colspan', 7) end pos = pos + 1 end return rootend function p.main(frame) local args = require('Module:Arguments').getArgs(frame) if args['division'] then return p._division(args) else return p._conference(args) endend
return p