Module:Sports results

Frá Wikipedia, hin frælsa alfrøðin
Jump to navigation Jump to search

This Lua-based module is meant to build match result tables. Note that this module is used extensively, so test potential changes rigorously in the sandbox and please ensure consensus exists before implementing major changes. Also note that the module is called from Module:Sports table and check for potential issues there as well after making changes. The rest of this documentation explains how to use this module in an article or template, check the table of contents for specific items.

Usage[rætta wikitekst]

The template can be used as follows:

What you type
{{#invoke:Sports results|main
|update=1 January 1900
|source=[https://en.wikipedia.org/wiki/Main_Page Wikipedia]
|showteam=CCC
|team1=FDT |team2=BBB |team3=CCC |team4=DDD |team5=EEE

|name_FDT=[[FIFA World Cup Dream Team]]  |short_FDT=[[FIFA World Cup Dream Team|FDT]]
|name_BBB=Team 2                         |short_BBB=T2
|name_CCC=Team 3                         |short_CCC=T3
|name_DDD=DDD F.C.                       |short_DDD=DDD
|name_EEE={{fb-rt|GIB}} |short_EEE={{flagicon|Gibraltar}}

|match_FDT_BBB=1–0
|match_FDT_CCC=0–1
|match_FDT_DDD=<small>16 Nov '14</small>
|match_FDT_EEE=<small>3 Sep '15</small>

|match_BBB_FDT=B–F
|match_BBB_CCC=<small>3 Sep '15</small>
|match_BBB_DDD=B–D
|match_BBB_EEE=<small>3 Sep '15</small>

|match_CCC_FDT=<small>16 Nov '14</small>
|match_CCC_BBB=C–B
|match_CCC_DDD=<small>16 Nov '14</small>
|match_CCC_EEE=C–E

|match_DDD_FDT=D–F
|match_DDD_BBB=<small>3 Sep '15</small>
|match_DDD_CCC=D–C
|match_DDD_EEE=<small>3 Sep '15</small>

|match_EEE_FDT=E–F
|match_EEE_BBB=9–5
|match_EEE_CCC=<small>16 Nov '14</small>
|match_EEE_DDD=E–D
}}
What it looks like
Home \ Away FDT T2 T3 DDD Gibraltar
FIFA World Cup Dream Team 1–0 0–1 16 Nov '14 3 Sep '15
Team 2 B–F 3 Sep '15 B–D 3 Sep '15
Team 3 16 Nov '14 C–B 16 Nov '14 C–E
DDD F.C. D–F 3 Sep '15 D–C 3 Sep '15
Gibraltar  E–F 9–5 16 Nov '14 E–D
Updated to match(es) played on 1 January 1900. Source: Wikipedia

The main command is {{#invoke:Sports results|main}}, which calls the module and sets the basic structure up. Then you list the order in which the teams are listed as |team1=, |team2=, etc for however many teams you need in the table. If you set |showteam= to a team, then that team's results are highlighted as in the example. The display of team names for team TTT is now governed by |name_TTT= and |short_TTT= for the row and column headers respectively. The results for the game TTT vs. SSS can now be input by |match_TTT_SSS=. The table is build this way, future games can be listed with their date or they can be left blank.

The source is controlled by |source=. The update date can be set by |update=date when the season is active; can be removed after the season with |update=complete and can be set for a future start date by using |update=future and setting the start date with |start_date=.

The width of the columns can be set by |match_col_width=.

Another example is:

What you type
{{#invoke:Sports results|main

|team1=CZE |team2=ISL |team3=KAZ |team4=LVA |team5=NED |team6=TUR

|name_CZE={{fb-rt|CZE}}	|short_CZE={{flagicon|CZE}}
|name_ISL={{fb-rt|ISL}}	|short_ISL={{flagicon|ISL}}
|name_KAZ={{fb-rt|KAZ}}	|short_KAZ={{flagicon|KAZ}}
|name_LVA={{fb-rt|LVA}}	|short_LVA={{flagicon|LVA}}
|name_NED={{fb-rt|NED}}	|short_NED={{flagicon|NED}}
|name_TUR={{fb-rt|TUR}}	|short_TUR={{flagicon|TUR}}

|match_CZE_ISL=[[UEFA Euro 2016 qualifying Group A#Czech Republic v Iceland|<small>16 Nov '14</small>]]
|match_CZE_KAZ=[[UEFA Euro 2016 qualifying Group A#Czech Republic v Kazakhstan|<small>3 Sep '15</small>]]
|match_CZE_LVA=[[UEFA Euro 2016 qualifying Group A#Czech Republic v Latvia|<small>28 Mar '15</small>]]
|match_CZE_NED=[[UEFA Euro 2016 qualifying Group A#Czech Republic v Netherlands|2–1]]
|match_CZE_TUR=[[UEFA Euro 2016 qualifying Group A#Czech Republic v Turkey|<small>10 Oct '15</small>]]

|match_ISL_CZE=[[UEFA Euro 2016 qualifying Group A#Iceland v Czech Republic|<small>12 Jun '15</small>]]
|match_ISL_KAZ=[[UEFA Euro 2016 qualifying Group A#Iceland v Kazakhstan|<small>6 Sep '15</small>]]
|match_ISL_LVA=[[UEFA Euro 2016 qualifying Group A#Iceland v Latvia|<small>10 Oct '15</small>]]
|match_ISL_NED=[[UEFA Euro 2016 qualifying Group A#Iceland v Netherlands|2–0]]
|match_ISL_TUR=[[UEFA Euro 2016 qualifying Group A#Iceland v Turkey|3–0]]

|match_KAZ_CZE=[[UEFA Euro 2016 qualifying Group A#Kazakhstan v Czech Republic|2–4]]
|match_KAZ_ISL=[[UEFA Euro 2016 qualifying Group A#Kazakhstan v Iceland|<small>28 Mar '15</small>]]
|match_KAZ_LVA=[[UEFA Euro 2016 qualifying Group A#Kazakhstan v Latvia|0–0]]
|match_KAZ_NED=[[UEFA Euro 2016 qualifying Group A#Kazakhstan v Netherlands|<small>10 Oct '15</small>]]
|match_KAZ_TUR=[[UEFA Euro 2016 qualifying Group A#Kazakhstan v Turkey|<small>12 Jun '15</small>]]

|match_LVA_CZE=[[UEFA Euro 2016 qualifying Group A#Latvia v Czech Republic|<small>6 Sep '15</small>]]
|match_LVA_ISL=[[UEFA Euro 2016 qualifying Group A#Latvia v Iceland|0–3]]
|match_LVA_KAZ=[[UEFA Euro 2016 qualifying Group A#Latvia v Kazakhstan|<small>13 Oct '15</small>]]
|match_LVA_NED=[[UEFA Euro 2016 qualifying Group A#Latvia v Netherlands|<small>12 Jun '15</small>]]
|match_LVA_TUR=[[UEFA Euro 2016 qualifying Group A#Latvia v Turkey|1–1]]

|match_NED_CZE=[[UEFA Euro 2016 qualifying Group A#Netherlands v Czech Republic|<small>13 Oct '15</small>]]
|match_NED_ISL=[[UEFA Euro 2016 qualifying Group A#Netherlands v Iceland|<small>3 Sep '15</small>]]
|match_NED_KAZ=[[UEFA Euro 2016 qualifying Group A#Netherlands v Kazakhstan|3–1]]
|match_NED_LVA=[[UEFA Euro 2016 qualifying Group A#Netherlands v Latvia|<small>16 Nov '14</small>]]
|match_NED_TUR=[[UEFA Euro 2016 qualifying Group A#Netherlands v Turkey|<small>28 Mar '15</small>]]

|match_TUR_CZE=[[UEFA Euro 2016 qualifying Group A#Turkey v Czech Republic|1–2]]
|match_TUR_ISL=[[UEFA Euro 2016 qualifying Group A#Turkey v Iceland|<small>13 Oct '15</small>]]
|match_TUR_KAZ=[[UEFA Euro 2016 qualifying Group A#Turkey v Kazakhstan|<small>16 Nov '14</small>]]
|match_TUR_LVA=[[UEFA Euro 2016 qualifying Group A#Turkey v Latvia|<small>3 Sep '15</small>]]
|match_TUR_NED=[[UEFA Euro 2016 qualifying Group A#Turkey v Netherlands|<small>6 Sep '15</small>]]
}}
What it looks like
Home \ Away Kekkia Ísland Kasakstan Lettland Niðurlond Turkaland
Kekkia  16 Nov '14 3 Sep '15 28 Mar '15 2–1 10 Oct '15
Ísland  12 Jun '15 6 Sep '15 10 Oct '15 2–0 3–0
Kasakstan  2–4 28 Mar '15 0–0 10 Oct '15 12 Jun '15
Lettland  6 Sep '15 0–3 13 Oct '15 12 Jun '15 1–1
Niðurlond  13 Oct '15 3 Sep '15 3–1 16 Nov '14 28 Mar '15
Turkaland  1–2 13 Oct '15 16 Nov '14 3 Sep '15 6 Sep '15
Updated to match(es) played on unknown. Source: [tørvar keldu]

-- Module to build results cross-tables for standings in Sports
-- See documentation for details
 
require('Module:No globals')

local p = {}
 
-- Main function
function p.main(frame)
	-- Declare locals
	local Args = frame.args
	local N_teams = 0
	local t = {}
	local t_footer = {}
	local t_return = {}
	local team_list = {}
	local ii, ii_fw, bg_col, team_name, team_code_ii
	
	-- Load some other modules
	local p_sub = require('Module:Sports table/sub')
	
	-- Read in number of consecutive teams (ignore entries after skipping a spot)
	while Args['team'..N_teams+1] ~= nil do
		N_teams = N_teams+1
		-- Sneakily add it twice to the team_list parameter, once for the actual
		-- ranking, the second for position lookup in sub-tables
		-- This is possible because Lua allows both numbers and strings as indices.
		team_list[N_teams] = Args['team'..N_teams] -- i^th entry is team X
		team_list[Args['team'..N_teams]] = N_teams -- team X entry is position i
	end
	
	-- Get team to show
	local ii_show = team_list[Args['showteam']] -- nil if non-existant
	
	-- Create header
	-- Open table
	table.insert(t,'{|class="wikitable" style="text-align:center;"\n') 
	-- First column
	t_return.count = 0 			-- Dummy parameter, using subfunction call seems best at this point because both module are intertwined
	t_return.tab_text = t		-- Actual text
	t_return = p_sub.colhead(t_return,'auto','Home \\ Away')	
	-- Other columns passed to subfunction
	t_return = p.header(t_return,Args,p_sub,N_teams,team_list)
	t = t_return.tab_text
	
	-- Now create individual rows
	for ii=1,N_teams do
		-- Get team info
		team_code_ii = team_list[ii]
		team_name = Args['name_'..team_code_ii]		 	or team_code_ii
		
		-- Team names
		table.insert(t,'|- \n')																			-- New row
		table.insert(t,'! scope="row" style="text-align: right;"| '..team_name..'\n')	-- Position number
		
		-- Then individual results
		t = p.row(t,Args,N_teams,team_list,ii,ii_show)
	end
	
	-- Close table
	table.insert(t, '|}\n')
	
	-- Get info for footer
	local update = Args['update']			or 'unknown'
	local start_date = Args['start_date'] 	or 'unknown'
	local source = Args['source']			or frame:expandTemplate{ title = 'citation needed', args = { reason='No source parameter defined', date=os.date('%B %Y') } }
	
	-- Create footer text
	-- Date updating
	if string.lower(update)=='complete' then
		-- Do nothing
	elseif update=='' then
		-- Empty parameter
		table.insert(t_footer,'Updated to match(es) played on unknown. ')
	elseif string.lower(update)=='future' then
		-- Future start date
		table.insert(t_footer,'First match(es) will be played on '..start_date..'. ')
	else
		table.insert(t_footer,'Updated to match(es) played on '..update..'. ')
	end
	table.insert(t_footer,'Source: '..source)
	-- As reflist size text
	t_footer = '<div class="reflist">'..table.concat(t_footer)..'</div>'
	-- Add footer to main text table
	table.insert(t,t_footer)
	
	return table.concat(t)
end

-- Other functions
function p.header(tt,Args,p_sub,N_teams,team_list)
	local ii, team_code_ii, short_name
	
	-- Set match column width
	local col_width = Args['match_col_width'] or '28'
	
	-- Get some default values in case it doesn't start at 1
	local top_pos = tonumber(Args['highest_pos']) or 1
	
	for ii=top_pos,N_teams do
		team_code_ii = team_list[ii]
		short_name = Args['short_'..team_code_ii] 	or team_code_ii
		tt = p_sub.colhead(tt,col_width,short_name)
	end
	
	return tt
end

function p.row(tt,Args,N_teams,team_list,ii,ii_show)
	-- Note ii is the row number being shown
	local jj, fw, bg, result, team_code_ii, team_code_jj
	local cell_bold = false
	
	team_code_ii = team_list[ii]
	
	-- Get some default values in case it doesn't start at 1
	local top_pos = tonumber(Args['highest_pos']) or 1
	
	for jj=top_pos,N_teams do
		if ii == jj then
			-- Solid cell
			if ii==ii_show then cell_bold = true else cell_bold = false end
			fw = cell_bold and 'font-weight: bold;' or 'font-weight: normal;'
			bg = 'background-color:transparent;'
			table.insert(tt,'| style="'..fw..bg..'" | &mdash;\n')
		else
			-- Content cell
			-- Set bolding and background
			if ii==ii_show or jj == ii_show then cell_bold = true else cell_bold = false end
			fw = cell_bold and 'font-weight: bold;' or 'font-weight: normal;'
			bg = 'background-color:transparent;'
			
			-- Now for the actual result
			team_code_jj = team_list[jj]
			result = Args['match_'..team_code_ii..'_'..team_code_jj] or ''
			table.insert(tt,'| style="white-space:nowrap;'..fw..bg..'" |'..result..'\n')
		end
	end
	
	return tt
end

return p