Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Sports table/Water polo

From Wikipedia, the free encyclopedia

-- Style for sports tables with custom columns
local pp = {}

function pp.get_col_styles(Args)
	-- Load relevant modules
	local yesno = require('Module:Yesno')

	local col_style = {}
	local num_cols = 1
	-- Default styles
	local default_style = Args['default_style'] or ''
	if default_style:match('^([Ww][Dd]?[Ll])') then
		-- Backwards compatibility with WDL
		if not yesno(Args['hide_played'] or 'no') then
			col_style[num_cols] = 'pld'
			num_cols = num_cols +1
		end
		if yesno(Args['show_win'] or 'yes') then
			col_style[num_cols] = 'w'
			num_cols = num_cols +1
		end
		local loss_first = yesno(Args['loss_before_draw'] or Args['loss_before_tie'] or false)
		if loss_first and yesno(Args['show_loss'] or 'yes') then
			col_style[num_cols] = 'l'
			num_cols = num_cols +1
		end
		if yesno(Args['show_draw'] or default_style:match('^[Ww]([Dd])[Ll]')~=nil) then
			col_style[num_cols] = 'd'
			num_cols = num_cols +1
		end
		if (not loss_first) and yesno(Args['show_loss'] or 'yes') then
			col_style[num_cols] = 'l'
			num_cols = num_cols +1
		end
		local fa_letter = string.lower(Args['for_against_style'] or '')
		if fa_letter ~= '' then
			if fa_letter=='game' or fa_letter=='games' then
				fa_letter = 'game'
			elseif fa_letter == 'none' then
				fa_letter = nil
			else
				fa_letter = fa_letter:match('^(%a).*')
			end
		else
			fa_letter = default_style:match('^[Ww][Dd]?[Ll](%a)fa')
					or default_style:match('^[Ww][Dd]?[Ll](%a)diff')
		end
		if fa_letter ~= nil then
			local fa_word_sing, fa_word_plur
			if fa_letter == 'game' then
				fa_letter = 'g'
				fa_word_sing = 'Game'
				fa_word_plur = 'Games'
			elseif fa_letter == 'f' then
				fa_word_sing = 'Frame'
				fa_word_plur = 'Frames'
			elseif fa_letter == 'm' then
				fa_word_sing = 'Match'
				fa_word_plur = 'Matches'
			elseif fa_letter == 'p' then
				fa_word_sing = 'Point'
				fa_word_plur = 'Points'
			elseif fa_letter == 'r' then
				fa_word_sing = 'Run'
				fa_word_plur = 'Runs'
			elseif fa_letter == 's' then
				fa_word_sing = 'Set'
				fa_word_plur = 'Sets'
			else
				fa_letter = 'g'
				fa_word_sing = 'Goal'
				fa_word_plur = 'Goals'
			end
			col_style[num_cols] = fa_letter..'f'
			col_style[num_cols+1] = fa_letter..'a'
			col_style[num_cols+2] = 'diff_'..fa_letter..'f_'..fa_letter..'a'
			fa_letter = string.upper(fa_letter)
			Args['col_header'..num_cols] = Args['col_header'..num_cols] or
					'<abbr title="'..fa_word_plur..' for">'..fa_letter..'F</abbr>'
			num_cols = num_cols + 1
			Args['col_header'..num_cols] = Args['col_header'..num_cols] or
					'<abbr title="'..fa_word_plur..' against">'..fa_letter..'A</abbr>'
			num_cols = num_cols + 1
			Args['col_header'..num_cols] = Args['col_header'..num_cols] or
					'<abbr title="'..fa_word_sing..' difference">'..fa_letter..'D</abbr>'
			num_cols = num_cols + 1
		end
		col_style[num_cols] = 'tpi'
		col_style['ranking_col'] = num_cols
	end
	-- Number of columns and custom column styles
	num_cols = tonumber(Args['num_cols']) or num_cols
	for cc=1,9 do
		col_style[cc] = Args['colstyle'..cc] or col_style[cc] or ''
		col_style[cc] = string.lower(col_style[cc])
	end
	-- Store num_cols so it may be returned
	col_style['num_cols'] = num_cols
	return col_style
end

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
	local sort_text = yesno(Args['sortable_table'] or 'no') and ' sortable' or ''
	table.insert(t,'{| class="wikitable'..sort_text..'" style="text-align:center;"\n')            			-- Open table
	-- Table title
	if Args['title'] or Args['table_header'] then
		table.insert(t,'|+ ' .. (Args['title'] or Args['table_header']) .. '\n')
	end
	-- Pre stuff
	local team_width = Args['teamwidth'] or '190'
	local col_style = pp.get_col_styles(Args)
	local num_cols = 9
	local ranking_col = 9
	-- Custom header options
	local group_head_text = Args['group_header'] or '<abbr title="Group">Grp</abbr>'
	local team_head_text = Args['team_header'] or 'Team'

	-- 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
	-- Add group header
	if full_table and group_col then
		tt = p_sub.colhead(tt,28,group_head_text)							-- Group col
	end
	tt = p_sub.colhead(tt,team_width,team_head_text..VTE_text)				-- Team col
	tt = p_sub.colhead(tt,28,'<abbr title="Played">Pld</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Wins">W</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Penalty shootouts wins">PSW</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Penalty shootouts losses">PSL</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Losses">L</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Goals for">GF</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Goals against">GA</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Goal difference">GD</abbr>')
	tt = p_sub.colhead(tt,28,'<abbr title="Tournament Performance Index">TPI</abbr>')

		table.insert(tt.tab_text,results_header_txt)
	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
	local col_style = pp.get_col_styles(Args)
	local num_cols = col_style['num_cols']
	local default_style = Args['default_style'] or ''
	local ranking_col = tonumber(Args['ranking_col']) or col_style['ranking_col'] or num_cols
	
	-- Get some input
	local win = tonumber(Args['win_'..team_code_ii])	or 0
	local psw = tonumber(Args['psw_'..team_code_ii])	or 0
	local psl = tonumber(Args['psl_'..team_code_ii])	or 0	
	local loss = tonumber(Args['loss_'..team_code_ii])	or 0
	local gf = tonumber(Args['gf_'..team_code_ii])	or 0
	local ga = tonumber(Args['ga_'..team_code_ii])	or 0
	local tpi = tonumber(Args['tpi_'..team_code_ii])	or 0
	local hth_local = yesno(Args['show_hth'] or 'yes') and Args['hth_'..team_code_ii] or nil
	-- Then calculate some values
	local matches = win + psw + psl + loss
	local gd = gf - ga
	local matches_text = matches
	if tonumber(Args['win_'..team_code_ii]) == nil or tonumber(Args['draw_'..team_code_ii]) == nil or tonumber(Args['loss_'..team_code_ii]) == nil then
		matches = tonumber(Args['matches_'..team_code_ii]) or matches
		matches_text = Args['matches_'..team_code_ii] or matches
	end

	-- Use actual values if wins, draws, and losses are not numeric
	if (win == 0 and psw == 0 and psl == 0 and loss == 0) then
		local function numorval(s)
			return s and ((s == '' and 0) or tonumber(s) or s) or 0
		end
		win = numorval(Args['win_'..team_code_ii])
		psw = numorval(Args['psw_'..team_code_ii])
		psl = numorval(Args['psl_'..team_code_ii])
		loss = numorval(Args['loss_'..team_code_ii])
	end

	-- 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

	-- Row building
	table.insert(t,'| style="'..bg_col..'" |'..matches..'\n')
	table.insert(t,'| style="'..bg_col..'" |'..win..'\n')
	table.insert(t,'| style="'..bg_col..'" |'..psw..'\n')
	table.insert(t,'| style="'..bg_col..'" |'..psl..'\n')
	table.insert(t,'| style="'..bg_col..'" |'..loss..'\n')
	table.insert(t,'| style="'..bg_col..'" |'..gf..'\n')
	table.insert(t,'| style="'..bg_col..'" |'..ga..'\n')
	table.insert(t,'| style="'..bg_col..'" |'..gd..'\n')
	table.insert(t,'| style="'..bg_col..'" | <b>'..tpi..'</b>\n')
	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='Advance 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
	-- Read in custom status options
	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