Module:Sports table/CricketRR

From Chalo Chatu, Zambia online encyclopedia

-- Style for cricket tables local pp = { }


function pp.header(t, Args, p_sub, pos_label, group_col, VTE_text, full_table, results_header_txt) -- Load relevant modules

   local yesno = require('Module:Yesno')

-- Create table header -- Pre stuff

   local team_width = Args['teamwidth'] or '180'
   local sort_text = yesno(Args['sortable_table'] or 'no') and ' sortable' or 
   --local show_played = not yesno(Args['hide_played'] or 'no')

table.insert(t,'{|class="wikitable'..sort_text..'" style="text-align:center;"\n') -- Open table

-- Table title if Args['title'] then

       table.insert(t,'|+ ' .. Args['title'] .. '\n')

end

   --Header specific options

local team_head_text = Args['team_header'] or 'Team'

   local tie_head_text = Args['tie_header'] or 'T'
   local nr_head_text  = Args['nr_header']  or 'NR'
   local bonus_head_text = Args['bonus_header'] or 'BP'
   local deduct_head_text = Args['deduct_header'] or 'Ded'
   local nrr_head_text = Args['nrr_header'] or 'NRR'
   -- 
   local loss_first = yesno(Args['loss_before_tie']  or 'yes')
   local show_tie = yesno(Args['show_tie'] or 'yes')
   local show_nr = yesno(Args['show_nr'] or 'yes')
   local show_deduct = yesno(Args['show_deductions'] or 'no')
   local show_bonus_points = yesno(Args['show_bonus_points'] or 'no')
   local show_nrr = yesno(Args['show_nrr'] or 'yes')
   -- What to rank the teams by
   --local ranking_style = Args['ranking_style'] or 'pts'
   -- Initialize
   local tt = {}

tt.count = 0 -- Up by one after every call

   tt.tab_text = t		-- Actual text

-- Actual headers

   if pos_label ~= nil then
       tt = p_sub.colhead(tt,28,pos_label)								-- Position col
   end
   tt = p_sub.colhead(tt, team_width, team_head_text..VTE_text)        -- Team col
   tt = p_sub.colhead(tt,28,'Pld')			-- Matches played col

if full_table then

       tt = p_sub.colhead(tt,28,'W')			-- Win col
       if loss_first then
           tt = p_sub.colhead(tt,28,'L')		-- Loss col

if show_tie then

               tt = p_sub.colhead(tt,28,tie_head_text)					-- Tie col
           end

else if show_tie then

               tt = p_sub.colhead(tt,28,tie_head_text)					-- Tie col
           end
           tt = p_sub.colhead(tt, 28, 'L')   -- Loss col
       end
       if show_nr then
           tt = p_sub.colhead(tt,28,nr_head_text)	                    -- No result col
       end
       if show_bonus_points then
           tt = p_sub.colhead(tt,28,bonus_head_text)	                -- Bonus points col
       end
       if show_deduct then
           tt = p_sub.colhead(tt,28,deduct_head_text)	                -- Deduction col
       end
   end
   tt = p_sub.colhead(tt, 28, 'Pts')       -- Points col

if full_table then

       if show_nrr then
           tt = p_sub.colhead(tt,28,nrr_head_text)	                    -- NRR col
       end
       tt.count = tt.count+1

table.insert(tt.tab_text, results_header_txt)

   end

return tt end


function pp.row(frame, t, Args, p_sub, notes_exist, hth_id_list, full_table, rand_val, team_list, team_code_ii, ii_start, ii_end, ii_fw, bg_col, N_teams, ii, ii_show) -- Build the inner parts of individual rows

-- Sub-module usage

   local mm = require('Module:Math')
   local yesno = require('Module:Yesno')
   -- Get custom/default options for in table
     -- Do not change these defaults without first checking which tables use them
   local win_points = tonumber(Args['winpoints'])     or 2
 	local tie_points = tonumber(Args['tiepoints'])     or 1

local nr_points = tonumber(Args['nrpoints']) or 1 local loss_points = tonumber(Args['losspoints']) or 0

   local bonus_points = tonumber(Args['bonuspoints']) or 1    -- in some competitions it is 4 pts for win + bonus point for some winning margin
   -- table options, to match those in the header        
   local loss_first = yesno(Args['loss_before_tie']  or 'yes')
   local show_tie = yesno(Args['show_tie'] or 'yes')
   local show_nr = yesno(Args['show_nr'] or 'yes')
   local show_bonus_points = yesno(Args['show_bonus_points'] or 'no')
   local show_deduct = yesno(Args['show_deductions'] or 'no')
   local show_nrr = yesno(Args['show_nrr'] or 'yes')
   -- Get some input
   local wins = tonumber(Args['win_'..team_code_ii])       or 0

local ties = tonumber(Args['tie_'..team_code_ii]) or 0

	local losses = tonumber(Args['loss_'..team_code_ii])    or 0

local noresults = tonumber(Args['nr_'..team_code_ii]) or 0

   local bonuses = tonumber(Args['bonus_'..team_code_ii])  or 0
   local deductions = tonumber(Args['ded_'..team_code_ii]) or 0
   local oversbowled = tonumber(Args['ob_'..team_code_ii])   or 0
	local runsconceded = tonumber(Args['rc_'..team_code_ii])  or 0

local oversreceived = tonumber(Args['or_'..team_code_ii]) or 0 local runsscored = tonumber(Args['rs_'..team_code_ii]) or 0

local hth_local = Args['hth_'..team_code_ii] or nil

-- Then calculate some values

   local matches = wins + losses + ties + noresults
   local s_bps = bonus_points * bonuses
   local points = win_points*wins + loss_points*losses + tie_points*ties + nr_points*noresults + s_bps - deductions
   
   -- Some local vars
   local hth_string
   local tt_return = p_sub.hth(frame, Args, full_table, hth_id_list, hth_local, notes_exist, team_list, team_code_ii, ii_start, ii_end, rand_val)
   hth_string = tt_return.str
   hth_id_list = tt_return.list
   notes_exist = tt_return.notes_exist
           -- What to rank the teams by
   local ranking_style = Args['ranking_style'] or 'pts'

local win_fw, win_string, pts_fw, pts_string

   ranking_style = string.lower(ranking_style)

if ranking_style=='p' or ranking_style=='pts' or ranking_style=='points' then -- Based on points

       win_fw = ii_fw
       win_string = 

pts_fw = 'font-weight: bold;' pts_string = hth_string else -- Based on wins

       win_fw = 'font-weight: bold;'
       win_string = hth_string
       pts_fw = ii_fw
       pts_string = 

end

   -- Set Net Run Rate. This is probabaly over-engineered and could just be done with a single precalculated value
   local nrr
   if (oversbowled == 0 ) or(oversreceived == 0) then -- if 0 or null then have mdash rather than 0?
      nrr = '—'
   else
       nrr = mm._precision_format((runsscored / oversreceived) - (runsconceded / oversbowled )  , 3)
   end

-- Row building

   table.insert(t,'| style="'..ii_fw..bg_col..'" |'..matches..'\n') 		-- Played

if full_table then -- Use actual values if wins, ties, and losses are not numeric. Copied this from other module. if (wins == 0 and ties == 0 and losses == 0) then

           local function numorval(s)

return s and((s == and 0) or tonumber(s) or s) or 0 end

           wins = numorval(Args['win_'..team_code_ii])
           ties = numorval(Args['tie_'..team_code_ii])
           losses = numorval(Args['loss_'..team_code_ii])
       end
       table.insert(t,'| style="'..win_fw..bg_col..'" |'..wins..win_string..'\n')  -- Won
       if loss_first then
           table.insert(t,'| style="'..ii_fw..bg_col..'" |'..losses..'\n')             -- Lost
           if show_tie then
               table.insert(t,'| style="'..ii_fw..bg_col..'" |'..ties..'\n') 	        -- Ties
           end
       else
           if show_tie then
               table.insert(t,'| style="'..ii_fw..bg_col..'" |'..ties..'\n') 	        -- Ties
           end
           table.insert(t,'| style="'..ii_fw..bg_col..'" |'..losses..'\n')             -- Lost
       end
       if show_nr then
           table.insert(t,'| style="'..ii_fw..bg_col..'" |'..noresults..'\n')         -- No Results
       end

if show_bonus_points then if s_bps< 0 then

               table.insert(t,'| style="'..bg_col..'" | −'..-s_bps..'\n')

else table.insert(t,'| style="'..bg_col..'" | '..s_bps..'\n') end

   	end
   	if show_deduct then 
   	table.insert(t,'| style="'..bg_col..'" | '..deductions..'\n')
   	end

end if points<0 then

       table.insert(t,'| style="'..pts_fw..bg_col..'" | −'..-points..pts_string..'\n')

else table.insert(t,'| style="'..pts_fw..bg_col..'" | '..points..pts_string..'\n') end if full_table then

       if show_nrr then
           table.insert(t,'| style="'..ii_fw..bg_col..'" |'..nrr..'\n') 		-- Net run rate
       end
   end

return {t=t, notes_exist=notes_exist, hth_id_list=hth_id_list} end

function pp.status(Args) -- Declare status options -- ------------------------------------------------------------ -- NOTE: If you add to status_code, also add to status_called and status_letters!! -- Or functionality will be compromised -- ------------------------------------------------------------ local status_code, status_called = {},{}

   status_code = {	A='Advances to a further round', C='Champion', D='Disqualified', 

E='Eliminated', G='Guest', H='Host', O='Play-off winner', P='Promoted', Q='Qualified to the phase indicated', R='Relegated', T='Qualified, but not yet to the particular phase indicated' }

local status_letters = (Args['status_order'] or ) .. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

   -- Status position(before or after read and default)
   local stat_pos_val = string.lower(Args['status_pos'] or )

local status_position = 'after'-- Default location if stat_pos_val=='before' then

       status_position = 'before'
   elseif stat_pos_val=='after' then
       status_position = 'after'
   end

for l in mw.text.gsplit(status_letters, ) do status_called[l] = false status_code[l] = status_code[l] or '?' status_letters = mw.ustring.gsub(status_letters, '(' .. l..'.-)' .. l, '%1')

if Args['status_text_'..l] then

           status_code[l] = Args['status_text_'..l]
       end
    end

return {code=status_code, called=status_called, letters=status_letters, position=status_position} end

return pp