Módulo:Sports results
Este módulo basado en Lua está diseñado para crear tablas de resultados de los partidos. Tenga en cuenta que este módulo se usa ampliamente, por lo que prueba rigurosamente los posibles cambios y asegúrese de que exista consenso antes de implementar cambios importantes. También tenga en cuenta que el módulo se llama desde Módulo:Sports table y compruebe posibles problemas antes de realizar cambios. El resto de esta documentación explica cómo usar este módulo en un artículo o plantilla, consulte la tabla de contenido para asuntos específicos.
Uso
La plantilla se puede usar de la siguiente manera:
Lo que escribes | {{#invoke:Sports results|main |update=1 de enero de 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={{Self-d|GIB}} |short_EEE={{bandera|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 }} | ||||||||||||||||||||||||||||||||||||
Como se ve |
Actualizado a los partidos jugados el 1 de enero de 1900. Fuente: Wikipedia
|
El comando principal es {{#invoke:Sports results|main}}, que llama al módulo y establece la estructura básica. Luego enumeras el orden en que los equipos están listados como |team1=
, |team2=
, etc para todos los equipos que necesites en la tabla. Si estableces |showteam=
a un equipo, los resultados de ese equipo se destacan como en el ejemplo. La visualización de los nombres de los equipos para el equipo TTT se rigen por |name_TTT=
y |short_TTT=
para los encabezados de fila y columna, respectivamente. Los resultados para el partido TTT vs. SSS pueden ser introducidos por |match_TTT_SSS=
. La tabla se construye de esta manera, los partidos futuros se pueden enumerar con su fecha o se pueden dejar en blanco.
La fuente está controlada por |source=
. La fecha de actualización se puede fijar por |update=fecha
cuando la temporada está activa; se puede eliminar después de la temporada con |update=completo
y se puede configurar para una fecha de inicio futura utilizando |update=futuro
y configurando la fecha de inicio con |start_date=
.
El ancho de las columnas se puede establecer por |match_col_width=
.
Otro ejemplo es:
Lo que escribes | {{#invoke:Sports results|main |team1=CZE |team2=ISL |team3=KAZ |team4=LVA |team5=NED |team6=TUR |name_CZE={{Self-d|CZE}} |short_CZE={{bandera4|CZE}} |name_ISL={{Self-d|ISL}} |short_ISL={{bandera4|ISL}} |name_KAZ={{Self-d|KAZ}} |short_KAZ={{bandera4|KAZ}} |name_LVA={{Self-d|LVA}} |short_LVA={{bandera4|LVA}} |name_NED={{Self-d|NED}} |short_NED={{bandera4|NED}} |name_TUR={{Self-d|TUR}} |short_TUR={{bandera4|TUR}} |match_CZE_ISL=[[Grupo A de la Clasificación para la Eurocopa 2016#República Checa vs Islandia|<small>16 Nov '14</small>]] |match_CZE_KAZ=[[Grupo A de la Clasificación para la Eurocopa 2016#República Checa vs Kazajistán|<small>3 Sep '15</small>]] |match_CZE_LVA=[[Grupo A de la Clasificación para la Eurocopa 2016#República Checa vs Letonia|<small>28 Mar '15</small>]] |match_CZE_NED=[[Grupo A de la Clasificación para la Eurocopa 2016#República Checa vs Países Bajos|2–1]] |match_CZE_TUR=[[Grupo A de la Clasificación para la Eurocopa 2016#República Checa vs Turquía|<small>10 Oct '15</small>]] |match_ISL_CZE=[[Grupo A de la Clasificación para la Eurocopa 2016#Islandia vs República Checa|<small>12 Jun '15</small>]] |match_ISL_KAZ=[[Grupo A de la Clasificación para la Eurocopa 2016#Islandia vs Kazajistán|<small>6 Sep '15</small>]] |match_ISL_LVA=[[Grupo A de la Clasificación para la Eurocopa 2016#Islandia vs Letonia|<small>10 Oct '15</small>]] |match_ISL_NED=[[Grupo A de la Clasificación para la Eurocopa 2016#Islandia vs Países Bajos|2–0]] |match_ISL_TUR=[[Grupo A de la Clasificación para la Eurocopa 2016#Islandia vs Turquía|3–0]] |match_KAZ_CZE=[[Grupo A de la Clasificación para la Eurocopa 2016#Kazajistán vs República Checa|2–4]] |match_KAZ_ISL=[[Grupo A de la Clasificación para la Eurocopa 2016#Kazajistán vs Islandia|<small>28 Mar '15</small>]] |match_KAZ_LVA=[[Grupo A de la Clasificación para la Eurocopa 2016#Kazajistán vs Letonia|0–0]] |match_KAZ_NED=[[Grupo A de la Clasificación para la Eurocopa 2016#Kazajistán vs Países Bajos|<small>10 Oct '15</small>]] |match_KAZ_TUR=[[Grupo A de la Clasificación para la Eurocopa 2016#Kazajistán vs Turquía|<small>12 Jun '15</small>]] |match_LVA_CZE=[[Grupo A de la Clasificación para la Eurocopa 2016#Letonia vs República Checa|<small>6 Sep '15</small>]] |match_LVA_ISL=[[Grupo A de la Clasificación para la Eurocopa 2016#Letonia vs Islandia|0–3]] |match_LVA_KAZ=[[Grupo A de la Clasificación para la Eurocopa 2016#Letonia vs Kazajistán|<small>13 Oct '15</small>]] |match_LVA_NED=[[Grupo A de la Clasificación para la Eurocopa 2016#Letonia vs Países Bajos|<small>12 Jun '15</small>]] |match_LVA_TUR=[[Grupo A de la Clasificación para la Eurocopa 2016#Letonia vs Turquía|1–1]] |match_NED_CZE=[[Grupo A de la Clasificación para la Eurocopa 2016#Países Bajos vs República Checa|<small>13 Oct '15</small>]] |match_NED_ISL=[[Grupo A de la Clasificación para la Eurocopa 2016#Países Bajos vs Islandia|<small>3 Sep '15</small>]] |match_NED_KAZ=[[Grupo A de la Clasificación para la Eurocopa 2016#Países Bajos vs Kazajistán|3–1]] |match_NED_LVA=[[Grupo A de la Clasificación para la Eurocopa 2016#Países Bajos vs Letonia|<small>16 Nov '14</small>]] |match_NED_TUR=[[Grupo A de la Clasificación para la Eurocopa 2016#Países Bajos vs Turquía|<small>28 Mar '15</small>]] |match_TUR_CZE=[[Grupo A de la Clasificación para la Eurocopa 2016#Turquía vs República Checa|1–2]] |match_TUR_ISL=[[Grupo A de la Clasificación para la Eurocopa 2016#Turquía vs Islandia|<small>13 Oct '15</small>]] |match_TUR_KAZ=[[Grupo A de la Clasificación para la Eurocopa 2016#Turquía vs Kazajistán|<small>16 Nov '14</small>]] |match_TUR_LVA=[[Grupo A de la Clasificación para la Eurocopa 2016#Turquía vs Letonia|<small>3 Sep '15</small>]] |match_TUR_NED=[[Grupo A de la Clasificación para la Eurocopa 2016#Turquía vs Países Bajos|<small>6 Sep '15</small>]] }} |
Como se ve |
Actualizado a los partidos jugados el fecha desconocida. Fuente: [cita requerida]
|
Colores Victoria/Empate/Derrota
El color de Victoria/Empate/Derrota puede ser configurado a través de |matches_style=FBR
(fútbol) y a través de |matches_style=BSR
(baloncesto).
Lo que escribes | {{#invoke:Sports results|main |source = |update=22 de abril de 2018 |matches_style = FBR |team1=CER |team2=DAV |team3=GLC |team4=JPV |team5=KAY |team6=STA |name_CER=[[Ceres–Negros F.C.|Ceres–Negros]] |name_DAV=[[Davao Aguilas F.C.|Davao Aguilas]] |name_GLC=[[Global Cebu F.C.|Global Cebu]] |name_JPV=[[JPV Marikina F.C.|JPV Marikina]] |name_KAY=[[Kaya F.C.|Kaya–Iloilo]] |name_STA={{nowrap|[[Stallion Laguna F.C.|Stallion Laguna]]}} |match_CER_DAV={{small|{{small|23 May}}}} |match_CER_GLC={{small|{{small|30 May}}}} |match_CER_JPV={{small|{{small|20 Jun}}}} |match_CER_KAY=2–1 |match_CER_STA={{small|{{small|2 Jun}}}} |match_DAV_CER={{small|{{small|2 May}}}} |match_DAV_GLC={{small|{{small|20 Jun}}}} |match_DAV_JPV=3–2 |match_DAV_KAY=2–2 |match_DAV_STA={{small|{{small|6 May}}}} |match_GLC_CER=0–2 |match_GLC_DAV=2–2 |match_GLC_JPV={{small|{{small|27 May}}}} |match_GLC_KAY={{small|{{small|23 May}}}} |match_GLC_STA=1–2 |match_JPV_CER=0–3 |match_JPV_DAV={{small|{{small|9 Jun}}}} |match_JPV_GLC=2–1 |match_JPV_KAY={{small|{{small|5 May}}}} |match_JPV_STA={{small|{{small|19 May}}}} |match_KAY_CER={{small|{{small|12 May}}}} |match_KAY_DAV={{small|{{small|20 May}}}} |match_KAY_GLC={{small|{{small|2 May}}}} |match_KAY_JPV=1–0 |match_KAY_STA=4–1 |match_STA_CER={{small|{{small|26 May}}}} |match_STA_DAV=0–1 |match_STA_GLC={{small|{{small|12 May}}}} |match_STA_JPV=1–2 |match_STA_KAY=3–1 }} | |||||||||||||||||||||||||||||||||||||||||||||||||
Como se ve |
Actualizado a los partidos jugados el 22 de abril de 2018. Fuente:
Colores: Azul = victoria del equipo local; Amarillo = empate; Rojo = victoria del equipo visitante. |
-- 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 notes_exist = false
local ii, ii_fw, bg_col, team_name, team_code_ii
-- Edit links if requested
local template_name = Args['template_name'] or ''
local edit_links = template_name == '' and ''
or frame:expandTemplate{ title = 'navbar',
args = { mini=1, style='float:right', template_name} }
-- Load some other modules
local p_sub = require('Módulo: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
-- Set the font size
local font_size=Args['font_size'] or '100%'
-- Create header
-- Open table
table.insert(t,'{|class="wikitable plainrowheaders" style="text-align:center;font-size:'..font_size..';"\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', edit_links .. ' Local \\ Visitante')
-- Other columns passed to subfunction
t_return = p.header(t_return,Args,p_sub,N_teams,team_list)
t = t_return.tab_text
-- Random value used for uniqueness
math.randomseed( os.clock() * 10^8 )
local rand_val = math.random()
local note_string, note_id
local note_id_list = {}
-- 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 Args['nombre_'..team_code_ii] or team_code_ii
local ii_style = 'text-align:right;'
if ii and ii == ii_show then
ii_style = ii_style .. 'font-weight:bold;'
end
-- Team names
table.insert(t,'|- \n') -- New row
table.insert(t,'! scope="row" style="'
.. ii_style ..'"| '..team_name..'\n') -- Position number
-- Now include note to match results if needed
for jj=1,N_teams do
local team_code_jj = team_list[jj]
if ii == jj then
-- Nothing
else
local match_note = (Args['match_'..team_code_ii..'_'..team_code_jj..'_note'] or Args['partido_'..team_code_ii..'_'..team_code_jj..'_nota'])
if match_note then
notes_exist = true
-- Only when it exist
-- First check for existence of reference for note
if not (Args['note_'..match_note] or Args['match_'..match_note..'_note']) then
-- It's the entry
note_id = '"table_note_'..team_code_ii..'_'..team_code_jj..rand_val..'"' -- Add random end for unique ID if more tables are present on article (which might otherwise share an ID)
note_id_list[team_code_ii..'_'..team_code_jj] = note_id
note_string = frame:expandTemplate{ title = 'efn', args = { group='Table_notes', name=note_id, match_note} }
else
-- Check for existence elsewhere
note_local_num = team_list[match_note] or ii_end + 1
if note_id_list[match_note] or ((note_local_num >= ii_start) and (note_local_num <= ii_end)) then
-- It exists
note_id = '"table_note_'..match_note..rand_val..'"' -- Identifier
note_string = frame:extensionTag{ name = 'ref', args = { group = 'lower-alpha', name = note_id} }
else
-- Now define the identifier for this
note_id = '"table_note_'..match_note..rand_val..'"' -- Add random end for unique ID
note_id_list[match_note] = note_id
-- Call refn template
note_string = frame:expandTemplate{ title = 'efn', args = { group='Table_notes', name=note_id, Args['note_'..match_note]} }
end
end
-- Now append this to the match result string
Args['partido_'..team_code_ii..'_'..team_code_jj] = Args['partido_'..team_code_ii..'_'..team_code_jj]..note_string
end
end
end
-- 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 'fecha desconocida'
local start_date = Args['start_date'] or 'fecha desconocida'
local source = Args['source'] or frame:expandTemplate{ title = 'cita requerida', args = { reason='No source parameter defined', date=os.date('%B %Y') } }
-- Create footer text
-- Date updating
local matches_text = Args['matches_text'] or 'partidos'
if string.lower(update)=='completo' then
-- Do nothing
elseif update=='' then
-- Empty parameter
table.insert(t_footer,'Actualizado a los '..matches_text..' jugados en fecha desconocida. ')
elseif string.lower(update)=='futuro' then
-- Future start date
table.insert(t_footer,'Los primeros '..matches_text..' se disputarán el '..start_date..'. ')
else
table.insert(t_footer,'Actualizado a los '..matches_text..' jugados el '..update..'. ')
end
table.insert(t_footer,'Fuente: '..source)
if (Args['matches_style'] or '') == 'FBR' then
table.insert(t_footer, '<br />Colores: Azul = victoria del equipo local; Amarillo = empate; Rojo = victoria del equipo visitante.')
elseif (Args['matches_style'] or '') == 'BSR' then
table.insert(t_footer, '<br />Colores: Azul = victoria del equipo local; Rojo = victoria del equipo visitante.')
end
if (Args['a_note'] or '') ~= '' then
table.insert(t_footer, '<br />Para los próximos partidos, la a indica que existe un artículo sobre el partido.')
end
if (Args['ot_note'] or '') ~= '' then
table.insert(t_footer, '<br />Los partidos con el fondo en un color más claro se decidieron tras la prórroga.')
end
-- Add notes (if applicable)
if notes_exist then
table.insert(t_footer,'<br>Notes:')
-- As reflist size text
t_footer = '<div class="reflist">'..table.concat(t_footer)..'</div>'
t_footer = t_footer..frame:expandTemplate{ title = 'notelist', args = { group='Table_notes'} }
else
-- As reflist size text
t_footer = '<div class="reflist">'..table.concat(t_footer)..'</div>'
end
-- Add footer to main text table
table.insert(t,t_footer)
return table.concat(t)
end
-- Other functions
local function get_short_name(s, t, n)
-- return short name if defined
if s and s ~= '' then
return s
end
-- replace link text in name with team abbr if possible
if n and t and n:match('(%[%[[^%[%]]*%]%])') then
n = mw.ustring.gsub(n, '(%[%[[^%|%]]*%|)[^%|%]]*(%]%])', '%1' .. t .. '%2')
n = mw.ustring.gsub(n, '(%[%[[^%|%]]*)(%]%])', '%1|' .. t .. '%2')
return n
end
-- nothing worked, so just return the unlinked team abbr
return t or ''
end
local function get_score_background(s, c)
local s1, s2
-- Define the colouring
local wc, lc, tc
if c == 'level2' then
wc, lc, tc = '#CCF9FF', '#FFCCCC', '#FFFFCC' -- blue2, red2, yellow2
elseif c == 'level3' then
wc, lc, tc = '#DDFCFF', '#FFDDDD', '#FFFFDD' -- blue3, red3, yellow3
elseif c == 'level4' then
wc, lc, tc = '#EEFFFF', '#FFEEEE', '#FFFFEE' -- blue4, red4, yellow4
else
wc, lc, tc = '#BBF3FF', '#FFBBBB', '#FFFFBB' -- blue1, red1, yellow1
end
-- delink if necessary
if s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') then
s = s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]')
end
-- get the scores
s1 = tonumber(mw.ustring.gsub( s or '',
'^%s*([%d][%d]*)%s*–%s*([%d][%d]*).*', '%1' ) or '') or ''
s2 = tonumber(mw.ustring.gsub( s or '',
'^%s*([%d][%d]*)%s*–%s*([%d][%d]*).*', '%2' ) or '') or ''
-- return colouring if possible
if s1 ~= '' and s2 ~= '' then
return (s1 > s2) and wc or ((s2 > s1) and lc or tc)
else
return 'transparent'
end
end
local function format_score(s)
s = mw.ustring.gsub(s or '', '^%s*([%d]+)%s*[–−—%-]%s*([%d]+)', '%1–%2')
s = mw.ustring.gsub(s, '^%s*([%d]+)%s*&[MmNn][Dd][Aa][Ss][Hh];%s*([%d]+)', '%1–%2')
s = mw.ustring.gsub(s, '^%s*(%[%[[^%[%]]*%|[%d]+)%s*%-%s*([%d]+)', '%1–%2')
s = mw.ustring.gsub(s, '^%s*(%[%[[^%[%]]*%|[%d]+)%s*&[MmNn][Dd][Aa][Ss][Hh];%s*([%d]+)', '%1–%2')
return s
end
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 Args['anchura_columna_partidos'] 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 = get_short_name(Args['short_'..team_code_ii] or Args['simplificado_'..team_code_ii],
team_code_ii, Args['name_'..team_code_ii] or Args['nombre_'..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, result_extra, team_code_ii, team_code_jj
local cell_bold = false
-- Set score cell style
local matches_style = Args['matches_style'] or ''
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
team_code_jj = team_list[jj]
result = Args['match_'..team_code_ii..'_'..team_code_jj] or Args['partido_'..team_code_ii..'_'..team_code_jj] or ''
result_extra = Args['result_'..team_code_ii..'_'..team_code_jj] or ''
if ii == jj or result == 'null' 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:#f8f9fa;'
-- Grey background color for solid cell
if Args['solid_cell'] == 'grey' then
table.insert(tt,'| style="'..fw..'background-color:#BBBBBB;" |\n')
else
table.insert(tt,'| style="'..fw..bg..'" | —\n')
end
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:#f8f9fa;'
-- Reformat dashes
if result ~= '' then
result = format_score(result)
end
-- Background coloring if enabled
if matches_style == 'FBR' and result ~= '' then
if result_extra == 'OT' then
bg = 'background-color:' .. get_score_background(result,'level2') .. ';'
elseif result_extra == 'PK' then
bg = 'background-color:' .. get_score_background(result,'level3') .. ';'
else
bg = 'background-color:' .. get_score_background(result,'') .. ';'
end
elseif matches_style == 'BSR' and result ~= '' then
if result_extra == 'OT' then
bg = 'background-color:' .. get_score_background(result,'level3') .. ';'
else
bg = 'background-color:' .. get_score_background(result,'') .. ';'
end
end
table.insert(tt,'| style="white-space:nowrap;'..fw..bg..'" |'..result..'\n')
end
end
return tt
end
return p