Moduł:Wyniki sportowe: Różnice pomiędzy wersjami
Wygląd
[wersja nieprzejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
m dodanie team_align, domyślnie left |
m poprawka |
||
(Nie pokazano 18 wersji utworzonych przez 3 użytkowników) | |||
Linia 1: | Linia 1: | ||
-- Module to build results cross-tables for standings in Sports |
-- Module to build results cross-tables for standings in Sports |
||
-- See documentation for details |
-- See documentation for details |
||
require(' |
require('strict') |
||
local p = {} |
local p = {} |
||
-- Main function |
-- Main function |
||
function p.main(frame) |
function p.main(frame) |
||
-- Get the args, stripping out blank values |
|||
local getArgs = require('Moduł:Arguments').getArgs |
|||
local Args = getArgs(frame, {parentFirst = true}) |
|||
-- Exit early if we are using section transclusion for a different section |
|||
if (Args['transcludesection'] and Args['section']) |
|||
and Args['transcludesection'] ~= Args['section'] then |
|||
return '' |
|||
end |
|||
-- Declare locals |
-- Declare locals |
||
local Args = require('Module:Arguments').getArgs(frame, { |
|||
trim = true, |
|||
removeBlanks = false, |
|||
wrappers = "Szablon:Wyniki sportowe", |
|||
}) |
|||
local N_teams = 0 |
|||
local t = {} |
local t = {} |
||
local t_footer = {} |
local t_footer = {} |
||
local t_return = {} |
local t_return = {} |
||
local team_list = {} |
local team_list = {} |
||
local notes_exist = false |
|||
local ii, ii_fw, bg_col, team_name, team_code_ii |
|||
local ii, ii_fw, bg_col, team_name, team_code_ii, ii_start, ii_end |
|||
-- Optional custom team header |
-- Optional custom team header |
||
local team_header = Args['team_header'] or ' |
local team_header = Args['team_header'] or 'Gospodarz \\ Gość' |
||
-- Number of legs |
|||
local legs = tonumber(Args['legs']) or 1 |
|||
local multirowlegs = (Args['multirowlegs'] or 'no') ~= 'no' |
|||
-- Edit links if requested |
-- Edit links if requested |
||
local baselink = frame:getParent():getTitle() |
|||
local template_name = Args['template_name'] or '' |
|||
if mw.title.getCurrentTitle().fullText == baselink then baselink = '' end |
|||
local edit_links = template_name == '' and '' |
|||
local template_name = Args['template_name'] |
|||
or frame:expandTemplate{ title = 'navbar', |
|||
or (baselink ~= '' and (':' .. baselink)) |
|||
args = { mini=1, style='float:right', template_name} } |
|||
or '' |
|||
local edit_links = template_name == '' and '' |
|||
or require('Moduł:Navbar')._navbar({ |
|||
template_name, |
|||
mini=1, |
|||
style='float:right' |
|||
}) |
|||
-- Get the custom start point for the table (most will start by default at 1) |
|||
local top_pos = tonumber(Args['highest_pos']) or 1 |
|||
-- Get the custom end point for the table (unrestricted if bottom_pos is < top_pos) |
|||
local bottom_pos = tonumber(Args['lowest_pos']) or 0 |
|||
local N_teams = top_pos - 1 -- Default to 0 at start, but higher number needed to skip certain entries |
|||
-- Load some other modules |
-- Load some other modules |
||
local p_sub = require('Moduł:Tabela sportowa/sub') |
local p_sub = require('Moduł:Tabela sportowa/sub') |
||
-- Alternative syntax for team list |
|||
if Args['team_order'] and Args['team_order'] ~= '' then |
|||
local tlist = mw.text.split(Args['team_order'], '%s*[;,]%s*') |
|||
for k, tname in ipairs(tlist) do |
|||
if tname ~= '' then |
|||
Args['team' .. k] = tname |
|||
end |
|||
end |
|||
end |
|||
if Args['team_header_note'] then |
|||
notes_exist=true |
|||
local note_string = frame:extensionTag{ name = 'ref', content = Args['team_header_note'], args = { group='mini', Args['team_header_note']} } |
|||
team_header = team_header .. note_string |
|||
end |
|||
-- Read in number of consecutive teams (ignore entries after skipping a spot) |
-- Read in number of consecutive teams (ignore entries after skipping a spot) |
||
ii_start = N_teams |
|||
while Args['team'..N_teams+1] ~= nil do |
|||
while Args['team'..N_teams+1] ~= nil and (bottom_pos < top_pos or N_teams < bottom_pos) do |
|||
N_teams = N_teams+1 |
N_teams = N_teams+1 |
||
-- Sneakily add it twice to the team_list parameter, once for the actual |
-- Sneakily add it twice to the team_list parameter, once for the actual |
||
Linia 42: | Linia 79: | ||
team_list[Args['team'..N_teams]] = N_teams -- team X entry is position i |
team_list[Args['team'..N_teams]] = N_teams -- team X entry is position i |
||
end |
end |
||
ii_end = N_teams |
|||
-- Get team to show |
-- Get team to show |
||
local ii_show = team_list[Args['showteam']] -- nil if non-existant |
local ii_show = team_list[Args['showteam']] -- nil if non-existant |
||
Linia 52: | Linia 89: | ||
-- Open table |
-- Open table |
||
table.insert(t,'{|class="wikitable plainrowheaders" style="text-align:center;font-size:'..font_size..';"\n') |
table.insert(t,'{|class="wikitable plainrowheaders" style="text-align:center;font-size:'..font_size..';"\n') |
||
-- Table title |
|||
if Args['title'] then |
|||
table.insert(t,'|+ ' .. Args['title'] .. '\n') |
|||
end |
|||
-- First column |
-- First column |
||
t_return.count = 0 -- Dummy parameter, using subfunction call seems best at this point because both module are intertwined |
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.tab_text = t -- Actual text |
||
t_return = p_sub.colhead(t_return,'auto', edit_links .. team_header) |
t_return = p_sub.colhead(t_return,'auto', edit_links .. ' ' .. team_header) |
||
-- Other columns passed to subfunction |
-- Other columns passed to subfunction |
||
t_return = p.header(t_return,Args,p_sub,N_teams,team_list) |
t_return = p.header(t_return,Args,p_sub,N_teams,team_list,legs,multirowlegs) |
||
t = t_return.tab_text |
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 |
-- Now create individual rows |
||
ii_start = tonumber(Args['highest_row']) and (tonumber(Args['highest_row']) > top_pos) and tonumber(Args['highest_row']) or top_pos |
|||
for ii=1,N_teams do |
|||
ii_end = tonumber(Args['lowest_row']) and (tonumber(Args['lowest_row']) < N_teams) and tonumber(Args['lowest_row']) or N_teams |
|||
for ii=ii_start,ii_end do |
|||
-- Get team info |
-- Get team info |
||
team_code_ii = team_list[ii] |
team_code_ii = team_list[ii] |
||
team_name = Args['name_'..team_code_ii] |
team_name = Args['name_'..team_code_ii] or team_code_ii |
||
local ii_style = 'text-align:' .. (Args['team_align'] or ' |
local ii_style = 'text-align:' .. (Args['team_align'] or 'right') .. ';' |
||
.. (ii and ii == ii_show and 'font-weight:bold;' or '') |
.. (ii and ii == ii_show and 'font-weight:bold;' or '') |
||
.. (Args['team_nowrap'] and 'white-space:nowrap;' or '') |
.. (Args['team_nowrap'] and 'white-space:nowrap;' or '') |
||
local team_note = Args['note_'..team_code_ii] |
|||
if team_note then |
|||
notes_exist = true |
|||
-- Only when it exist |
|||
-- First check for existence of reference for note |
|||
if not Args['note_'..team_note] then |
|||
-- It's the entry |
|||
-- Add random end for unique ID if more tables are present on article (which might otherwise share an ID) |
|||
note_id = '"table_note_'..team_code_ii..rand_val..'"' |
|||
note_id_list[team_code_ii] = note_id |
|||
note_string = frame:extensionTag{ name = 'ref', content = team_note, args = { group='mini', name=note_id, team_note} } |
|||
else |
|||
-- Check for existence elsewhere |
|||
local note_local_num = team_list[team_note] or ii_end + 1 |
|||
if note_id_list[team_note] or ((note_local_num >= ii_start) and (note_local_num <= ii_end)) then |
|||
-- It exists |
|||
note_id = '"table_note_'..team_note..rand_val..'"' -- Identifier |
|||
note_string = frame:extensionTag{ name = 'ref', args = { group='mini', name = note_id} } |
|||
else |
|||
-- Now define the identifier for this |
|||
-- Add random end for unique ID |
|||
note_id = '"table_note_'..team_note..rand_val..'"' |
|||
note_id_list[team_note] = note_id |
|||
-- Call refn template |
|||
note_string = frame:extensionTag{ name = 'ref', content = Args['note_'..team_note], args = { group='mini', name=note_id, Args['note_'..team_note]} } |
|||
end |
|||
end |
|||
-- Now append this to the team_name string |
|||
team_name = team_name..note_string |
|||
end |
|||
-- Team names |
-- Team names |
||
table.insert(t,'|- \n') |
table.insert(t,'|- \n') -- New row |
||
table.insert(t,'| scope="row" |
table.insert(t,'| scope="row"'.. (multirowlegs and ' rowspan=' .. legs or '') |
||
.. ii_style ..'"| '..team_name..'\n') |
.. 'style="'.. ii_style ..'"| '..team_name..'\n') -- Position number |
||
-- Now include note to match results if needed |
|||
for jj=top_pos,N_teams do |
|||
local team_code_jj = team_list[jj] |
|||
if ii == jj then |
|||
-- Nothing |
|||
else |
|||
for l=1,legs do |
|||
local m = (legs == 1) and 'match_' or 'match' .. l .. '_' |
|||
local match_note = Args[m ..team_code_ii..'_'..team_code_jj..'_note'] |
|||
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[m ..match_note..'_note']) then |
|||
-- It's the entry |
|||
-- Add random end for unique ID if more tables are present on article (which might otherwise share an ID) |
|||
note_id = '"table_note_'..team_code_ii..'_'..team_code_jj..rand_val..'"' |
|||
note_id_list[team_code_ii..'_'..team_code_jj] = note_id |
|||
note_string = frame:extensionTag{ name = 'ref', content = match_note, args = { group='mini', name=note_id, match_note} } |
|||
else |
|||
-- Check for existence elsewhere |
|||
local 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 = 'mini', name = note_id} } |
|||
else |
|||
-- Now define the identifier for this |
|||
-- Add random end for unique ID |
|||
note_id = '"table_note_'..match_note..rand_val..'"' |
|||
note_id_list[match_note] = note_id |
|||
-- Call refn template |
|||
note_string = frame:extensionTag{ name = 'ref', content = Args['note_'..match_note], args = { group='mini', name=note_id, Args['note_'..match_note]} } |
|||
end |
|||
end |
|||
-- Now append this to the match result string |
|||
Args[m..team_code_ii..'_'..team_code_jj] = (Args[m..team_code_ii..'_'..team_code_jj] or '–')..note_string |
|||
end |
|||
end |
|||
end |
|||
end |
|||
-- Then individual results |
-- Then individual results |
||
t = p.row(t,Args,N_teams,team_list,ii,ii_show) |
t = p.row(t,Args,N_teams,team_list,ii,ii_show,legs,multirowlegs) |
||
end |
end |
||
Linia 81: | Linia 203: | ||
-- Get info for footer |
-- Get info for footer |
||
local update = Args['update'] |
local update = Args['update'] |
||
or 'unknown' |
|||
local start_date = Args['start_date'] |
local start_date = Args['start_date'] |
||
or 'unknown' |
|||
local source = Args['source'] |
local source = Args['source'] |
||
or frame:expandTemplate{ title = 'potrzebny przypis', |
|||
args = { reason='Źródło niezdefiniowane', date=os.date('%B %Y') } } |
|||
-- Create footer text |
-- Create footer text |
||
Linia 91: | Linia 217: | ||
elseif update=='' then |
elseif update=='' then |
||
-- Empty parameter |
-- Empty parameter |
||
table.insert(t_footer,' |
table.insert(t_footer,'Nieznana data aktualizacji.') |
||
elseif string.lower(update)=='future' then |
elseif string.lower(update)=='future' then |
||
-- Future start date |
-- Future start date |
||
table.insert(t_footer,' |
table.insert(t_footer,'Pierwsze mecze zostaną rozegrane '..start_date..'. ') |
||
else |
else |
||
table.insert(t_footer,' |
table.insert(t_footer,'Zaktualizowano do meczów rozegranych w dniu '..update..'. ') |
||
end |
end |
||
table.insert(t_footer,'Źródło: '..source) |
table.insert(t_footer,'Źródło: '..source) |
||
if (Args['matches_style'] or '') == 'FBR' then |
if (Args['matches_style'] or '') == 'FBR' then |
||
table.insert(t_footer, ' |
table.insert(t_footer, Args['team_header'] |
||
and '<br /><span class="legend-text-W"> </span> = drużyna z lewej kolumny wygrywa; ' |
|||
.. '<span class="legend- |
.. '<span class="legend-text-R"> </span> = remis; ' |
||
.. '<span class="legend- |
.. '<span class="legend-text-P"> </span> = wygrana drużyna z górnego rzędu.' |
||
or '<br /><span class="legend-text-W"> </span> = zwycięstwo gospodarzy; ' |
|||
.. '<span class="legend-text-R"> </span> = remis; ' |
|||
.. '<span class="legend-text-P"> </span> = zwycięstwo gości.') |
|||
elseif (Args['matches_style'] or '') == 'BSR' then |
|||
table.insert(t_footer, Args['team_header'] |
|||
and '<br /><span class="legend-text-W"> </span> = drużyna z lewej kolumny wygrywa; ' |
|||
.. '<span class="legend-text-P"> </span> = wygrana drużyna z górnego rzędu.' |
|||
or '<br /><span class="legend-text-W"> </span> = zwycięstwo gospodarzy; ' |
|||
.. '<span class="legend-text-P"> </span> = zwycięstwo gości.') |
|||
end |
end |
||
if Args['a_note'] then |
|||
-- As reflist size text |
|||
table.insert(t_footer, '<br />W przypadku nadchodzących meczów litera „a” oznacza, że istnieje artykuł o rywalizacji między dwoma uczestnikami.') |
|||
t_footer = '<div class="reflist" style="font-size:85%;">'..table.concat(t_footer)..'</div>' |
|||
end |
|||
if Args['ot_note'] then |
|||
table.insert(t_footer, '<br />Mecze z jaśniejszym cieniowaniem tła były rozstrzygane po dogrywce.') |
|||
end |
|||
local templatestyles = frame:extensionTag{ |
|||
name = 'templatestyles', args = { src = 'Moduł:Wyniki sportowe/styles.css' } |
|||
} |
|||
-- Add notes (if applicable) |
|||
if notes_exist then |
|||
table.insert(t_footer,'<br>Uwagi:') |
|||
-- As reflist size text |
|||
t_footer = '<div class="reflist" style="font-size:85%;">'..table.concat(t_footer)..'</div>' |
|||
local references = frame:extensionTag{ name = 'references', args = { group='mini'} } |
|||
t_footer = t_footer..'<div class="do-not-make-smaller refsection-mini refsection references-column-count ">'..references..'</div>' |
|||
else |
|||
-- As reflist size text |
|||
t_footer = '<div class="reflist" style="font-size:85%;">'..table.concat(t_footer)..'</div>' |
|||
end |
|||
-- Add footer to main text table |
-- Add footer to main text table |
||
table.insert(t,t_footer) |
table.insert(t,t_footer) |
||
-- Rewrite anchor links |
|||
return table.concat(t) |
|||
for k=1,#t do |
|||
if t[k]:match('%[%[#[^%[%]]*%|') then |
|||
t[k] = mw.ustring.gsub(t[k], '(%[%[)(#[^%[%]]*%|)', '%1' .. baselink .. '%2') |
|||
end |
|||
end |
|||
return templatestyles .. '<div style="overflow:hidden">' |
|||
.. '<div class="noresize overflowbugx" style="overflow:auto">\n' |
|||
.. table.concat(t) .. '</div></div>' |
|||
end |
end |
||
Linia 123: | Linia 288: | ||
if ss == 'noflag' then |
if ss == 'noflag' then |
||
n = mw.ustring.gsub(n, '%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%]', '') |
n = mw.ustring.gsub(n, '%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%]', '') |
||
n = mw.ustring.gsub(n, '^%s* %s*', '') |
|||
elseif ss == 'flag' then |
elseif ss == 'flag' then |
||
n = mw.ustring.gsub(n, '(<span class="flagicon">%s*%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*link=)[^%|%[%]]*(%]%][^<>]*</span>)%s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2') |
n = mw.ustring.gsub(n, '(<span class="flagicon">%s*%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*link=)[^%|%[%]]*(%]%][^<>]*</span>)%s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2') |
||
n = mw.ustring.gsub(n, '(%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*link=)[^%|%[%]]*(%]%])%s* %s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2') |
|||
n = mw.ustring.gsub(n, '(%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*link=)[^%|%[%]]*(%]%])%s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2') |
|||
n = mw.ustring.gsub(n, '.*(<span class="flagicon">%s*%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%][^<>]*</span>).*', '%1') |
n = mw.ustring.gsub(n, '.*(<span class="flagicon">%s*%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%][^<>]*</span>).*', '%1') |
||
n = mw.ustring.gsub(n, '.*(%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%]).*', '%1') |
|||
n = mw.ustring.gsub(n, ' (</span>)', '%1') |
n = mw.ustring.gsub(n, ' (</span>)', '%1') |
||
end |
end |
||
Linia 141: | Linia 310: | ||
end |
end |
||
local function get_score_background(s) |
local function get_score_background(s, c) |
||
local s1, s2 |
local s1, s2 |
||
-- Define the colouring |
-- Define the colouring |
||
local bg |
|||
local wc, lc, tc = '#CEFFCD', '#FFDFDF', '#FEFCD9' |
|||
local wc, lc, tc |
|||
if c == 'level2' then |
|||
wc, lc, tc = 'var(--background-color-success-subtle,#dff2eb)', 'var(--background-color-destructive-subtle,#ffe9e5)', 'var(--background-color-warning-subtle,#fdf2d5)' -- green2, red2, yellow2 |
|||
elseif c == 'level3' then |
|||
wc, lc, tc = '#DDFCDD', '#FFDDDD', '#FFFFDD' -- green3, red3, yellow3 |
|||
elseif c == 'level4' then |
|||
wc, lc, tc = 'var(--background-color-success-subtle,#eeffee)', 'var(--background-color-destructive-subtle,#fff2f0)', 'var(--background-color-warning-subtle,#ffffee)' -- green4, red4, yellow4 |
|||
else |
|||
wc, lc, tc = '#BBF3BB', '#FFBBBB', '#FFFFBB' -- green1, red1, yellow1 |
|||
end |
|||
--2-'#CCF9CC', '#FFCCCC', '#FFFFCC' |
|||
--4-'#EEFFEE', '#FFEEEE', '#FFFFEE' |
|||
-- check for override |
|||
if s:match('^%s*<span%s+style%s*=["\'%s]*background[%-color]*%s*:([^\'";<>]*).-$') then |
|||
local c = mw.ustring.gsub(s,'^%s*<span%s+style%s*=["\'%s]*background[%-color]*%s*:([^\'";<>]*).-$', '%1') |
|||
return 'background: ' .. c ..';' |
|||
end |
|||
-- delink if necessary |
-- delink if necessary |
||
if s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') then |
if s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') then |
||
s = s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') |
s = s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') |
||
end |
|||
if s:match('^%s*%[[^%[%]%s]*%s([^%[%]]*)%]') then |
|||
s = s:match('^%s*%[[^%[%]%s]*%s([^%[%]]*)%]') |
|||
end |
|||
if s:match('<span[^<>]*>(.-)</span>') then |
|||
s = s:match('<span[^<>]*>(.-)</span>') |
|||
end |
end |
||
-- get the scores |
-- get the scores |
||
s1 = tonumber(mw.ustring.gsub( s or '', |
s1 = tonumber(mw.ustring.gsub( s or '', |
||
'^%s*([%d |
'^%s*([%d%.]+)%s*–%s*([%d%.]+).*', '%1' ) or '') or '' |
||
s2 = tonumber(mw.ustring.gsub( s or '', |
s2 = tonumber(mw.ustring.gsub( s or '', |
||
'^%s*([%d |
'^%s*([%d%.]+)%s*–%s*([%d%.]+).*', '%2' ) or '') or '' |
||
-- return colouring if possible |
-- return colouring if possible |
||
if s1 ~= '' and s2 ~= '' then |
if s1 ~= '' and s2 ~= '' then |
||
return (s1 > s2) and |
return (s1 > s2) and ('background-color: ' .. wc .. ';') |
||
or ((s2 > s1) and ('background-color: ' .. lc .. ';') |
|||
or ('background-color: ' .. tc .. ';')) |
|||
else |
else |
||
return ' |
return '' |
||
end |
end |
||
end |
end |
||
local function format_score(s) |
local function format_score(s) |
||
s = mw.ustring.gsub(s or '', '^%s*([%d]+)%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]+)', '% |
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]+)', '% |
s = mw.ustring.gsub(s, '^%s*(%[%[[^%[%]]*%|[%d%.]+)%s*%-%s*([%d%.]+)', '%1–%2') |
||
s = mw.ustring.gsub(s, '^%s*( |
s = mw.ustring.gsub(s, '^%s*(%[[^%[%]%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') |
|||
s = mw.ustring.gsub(s, '^%s*(%[[^%[%]%s]*%s+[%d%.]+)%s*&[MmNn][Dd][Aa][Ss][Hh];%s*([%d%.]+)', '%1–%2') |
|||
return s |
return s |
||
end |
end |
||
function p.header(tt,Args,p_sub,N_teams,team_list) |
function p.header(tt,Args,p_sub,N_teams,team_list,legs,multirowlegs) |
||
local ii, team_code_ii, short_name |
local ii, team_code_ii, short_name |
||
legs = legs or 1 |
|||
-- Set match column width |
-- Set match column width |
||
Linia 182: | Linia 381: | ||
local top_pos = tonumber(Args['highest_pos']) or 1 |
local top_pos = tonumber(Args['highest_pos']) or 1 |
||
for |
for l=1,legs do |
||
if multirowlegs and l > 1 then |
|||
team_code_ii = team_list[ii] |
|||
break |
|||
short_name = get_short_name(Args['short_'..team_code_ii], |
|||
end |
|||
team_code_ii, Args['name_'..team_code_ii], Args['short_style'] or '') |
|||
for ii=top_pos,N_teams do |
|||
tt = p_sub.colhead(tt,col_width,short_name) |
|||
team_code_ii = team_list[ii] |
|||
short_name = get_short_name(Args['short_'..team_code_ii], |
|||
team_code_ii, Args['name_'..team_code_ii], Args['short_style'] or '') |
|||
local bl = legs > 1 and ii == top_pos and ' style="border-left:2px solid #aaa;"' or '' |
|||
tt = p_sub.colhead(tt,col_width .. bl,short_name) |
|||
end |
|||
end |
end |
||
return tt |
return tt |
||
end |
end |
||
function p.row(tt,Args,N_teams,team_list,ii,ii_show) |
function p.row(tt,Args,N_teams,team_list,ii,ii_show,legs,multirowlegs) |
||
-- Note ii is the row number being shown |
-- Note ii is the row number being shown |
||
local jj, fw, bg, result, team_code_ii, team_code_jj |
local jj, fw, bg, result, result_extra, team_code_ii, team_code_jj |
||
legs = legs or 1 |
|||
local cell_bold = false |
|||
-- Links for match |
|||
local isLink = (Args['generate_links'] or 'no') == 'yes' |
|||
local currentPageTitle = mw.title.getCurrentTitle().fullText |
|||
-- Set score cell style |
-- Set score cell style |
||
Linia 204: | Linia 412: | ||
-- Get some default values in case it doesn't start at 1 |
-- Get some default values in case it doesn't start at 1 |
||
local top_pos = tonumber(Args['highest_pos']) or 1 |
local top_pos = tonumber(Args['highest_pos']) or 1 |
||
for l=1,legs do |
|||
if multirowlegs and l > 1 then |
|||
for jj=top_pos,N_teams do |
|||
table.insert(tt,'|- \n') -- New row |
|||
if ii == jj then |
|||
end |
|||
-- Solid cell |
|||
for jj=top_pos,N_teams do |
|||
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..'" | —\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] |
team_code_jj = team_list[jj] |
||
local m = (legs == 1) and 'match_' or 'match' .. l .. '_' |
|||
result = Args[m..team_code_ii..'_'..team_code_jj] or '' |
|||
-- Reformat dashes |
|||
local mr = (legs == 1) and 'result_' or 'result' .. l .. '_' |
|||
if result ~= '' then |
|||
result_extra = Args[mr..team_code_ii..'_'..team_code_jj] or '' |
|||
result = format_score(result) |
|||
local bl = legs > 1 and jj == top_pos and 'border-left:2px solid #aaa;' or '' |
|||
end |
|||
-- Background coloring if enabled |
|||
if |
if ii == jj or result == 'null' then |
||
-- Solid cell |
|||
bg = 'background-color:' .. get_score_background(result) .. ';' |
|||
fw = 'font-weight:' .. (ii==ii_show and 'bold' or 'normal') .. ';' |
|||
bg = '' |
|||
-- Grey background color for solid cell |
|||
if Args['solid_cell'] == 'grey' then |
|||
table.insert(tt,'| style="'..fw..bl..'background-color:var(--background-color-disabled, #c8ccd1);" |\n') |
|||
else |
|||
table.insert(tt,'| style="'..fw..bl..bg..'" | —\n') |
|||
end |
|||
else |
|||
-- Content cell |
|||
-- Set bolding and background |
|||
fw = 'color:inherit; font-weight:' .. ((ii==ii_show or jj == ii_show) and 'bold' or 'normal') .. ';' |
|||
bg = '' |
|||
-- 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 = get_score_background(result,'level3') |
|||
elseif result_extra == 'PK' then |
|||
bg = get_score_background(result,'level4') |
|||
else |
|||
bg = get_score_background(result,'level2') |
|||
end |
|||
elseif matches_style == 'BSR' and result ~= '' then |
|||
if result_extra == 'OT' then |
|||
bg = get_score_background(result,'level3') |
|||
elseif result_extra == 'OTL' then |
|||
bg = get_score_background('0–1','level3') |
|||
elseif result_extra == 'OTW' then |
|||
bg = get_score_background('1–0','level3') |
|||
elseif result_extra == 'L' then |
|||
bg = get_score_background('0–1','') |
|||
elseif result_extra == 'W' then |
|||
bg = get_score_background('1–0','') |
|||
else |
|||
bg = get_score_background(result,'') |
|||
end |
|||
end |
|||
if isLink and result ~= '' then |
|||
table.insert(tt,'| style="white-space:nowrap;'..fw..bl..bg..'" |[['..currentPageTitle..'#' .. l .. team_code_ii .. team_code_jj .. '|' ..result .. ']]\n') |
|||
else |
|||
table.insert(tt,'| style="white-space:nowrap;'..fw..bl..bg..'" |'..result..'\n') |
|||
end |
|||
end |
end |
||
table.insert(tt,'| style="white-space:nowrap;'..fw..bg..'" |'..result..'\n') |
|||
end |
end |
||
end |
end |
Aktualna wersja na dzień 15:46, 9 lis 2024
Użycie
[edytuj kod]Moduł do tworzenia tabeli z wynikami rozgrywek ligowych.
Podstawowe użycie to {{#invoke:Wyniki sportowe|main}}
.
Opis parametrów
[edytuj kod]Przykład
[edytuj kod]Błędy
[edytuj kod]Błędy należy zgłaszać na stronie Wikipedia:Kawiarenka/Kwestie techniczne.
Podstrony modułu
[edytuj kod]Zobacz też
[edytuj kod]
Powyższy opis jest dołączany ze strony Moduł:Wyniki sportowe/opis. (edytuj | historia)
Zobacz podstrony tego modułu.
Zobacz podstrony tego modułu.
-- Module to build results cross-tables for standings in Sports
-- See documentation for details
require('strict')
local p = {}
-- Main function
function p.main(frame)
-- Get the args, stripping out blank values
local getArgs = require('Moduł:Arguments').getArgs
local Args = getArgs(frame, {parentFirst = true})
-- Exit early if we are using section transclusion for a different section
if (Args['transcludesection'] and Args['section'])
and Args['transcludesection'] ~= Args['section'] then
return ''
end
-- Declare locals
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, ii_start, ii_end
-- Optional custom team header
local team_header = Args['team_header'] or 'Gospodarz \\ Gość'
-- Number of legs
local legs = tonumber(Args['legs']) or 1
local multirowlegs = (Args['multirowlegs'] or 'no') ~= 'no'
-- Edit links if requested
local baselink = frame:getParent():getTitle()
if mw.title.getCurrentTitle().fullText == baselink then baselink = '' end
local template_name = Args['template_name']
or (baselink ~= '' and (':' .. baselink))
or ''
local edit_links = template_name == '' and ''
or require('Moduł:Navbar')._navbar({
template_name,
mini=1,
style='float:right'
})
-- Get the custom start point for the table (most will start by default at 1)
local top_pos = tonumber(Args['highest_pos']) or 1
-- Get the custom end point for the table (unrestricted if bottom_pos is < top_pos)
local bottom_pos = tonumber(Args['lowest_pos']) or 0
local N_teams = top_pos - 1 -- Default to 0 at start, but higher number needed to skip certain entries
-- Load some other modules
local p_sub = require('Moduł:Tabela sportowa/sub')
-- Alternative syntax for team list
if Args['team_order'] and Args['team_order'] ~= '' then
local tlist = mw.text.split(Args['team_order'], '%s*[;,]%s*')
for k, tname in ipairs(tlist) do
if tname ~= '' then
Args['team' .. k] = tname
end
end
end
if Args['team_header_note'] then
notes_exist=true
local note_string = frame:extensionTag{ name = 'ref', content = Args['team_header_note'], args = { group='mini', Args['team_header_note']} }
team_header = team_header .. note_string
end
-- Read in number of consecutive teams (ignore entries after skipping a spot)
ii_start = N_teams
while Args['team'..N_teams+1] ~= nil and (bottom_pos < top_pos or N_teams < bottom_pos) 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
ii_end = N_teams
-- 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')
-- Table title
if Args['title'] then
table.insert(t,'|+ ' .. Args['title'] .. '\n')
end
-- 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 .. ' ' .. team_header)
-- Other columns passed to subfunction
t_return = p.header(t_return,Args,p_sub,N_teams,team_list,legs,multirowlegs)
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
ii_start = tonumber(Args['highest_row']) and (tonumber(Args['highest_row']) > top_pos) and tonumber(Args['highest_row']) or top_pos
ii_end = tonumber(Args['lowest_row']) and (tonumber(Args['lowest_row']) < N_teams) and tonumber(Args['lowest_row']) or N_teams
for ii=ii_start,ii_end do
-- Get team info
team_code_ii = team_list[ii]
team_name = Args['name_'..team_code_ii] or team_code_ii
local ii_style = 'text-align:' .. (Args['team_align'] or 'right') .. ';'
.. (ii and ii == ii_show and 'font-weight:bold;' or '')
.. (Args['team_nowrap'] and 'white-space:nowrap;' or '')
local team_note = Args['note_'..team_code_ii]
if team_note then
notes_exist = true
-- Only when it exist
-- First check for existence of reference for note
if not Args['note_'..team_note] then
-- It's the entry
-- Add random end for unique ID if more tables are present on article (which might otherwise share an ID)
note_id = '"table_note_'..team_code_ii..rand_val..'"'
note_id_list[team_code_ii] = note_id
note_string = frame:extensionTag{ name = 'ref', content = team_note, args = { group='mini', name=note_id, team_note} }
else
-- Check for existence elsewhere
local note_local_num = team_list[team_note] or ii_end + 1
if note_id_list[team_note] or ((note_local_num >= ii_start) and (note_local_num <= ii_end)) then
-- It exists
note_id = '"table_note_'..team_note..rand_val..'"' -- Identifier
note_string = frame:extensionTag{ name = 'ref', args = { group='mini', name = note_id} }
else
-- Now define the identifier for this
-- Add random end for unique ID
note_id = '"table_note_'..team_note..rand_val..'"'
note_id_list[team_note] = note_id
-- Call refn template
note_string = frame:extensionTag{ name = 'ref', content = Args['note_'..team_note], args = { group='mini', name=note_id, Args['note_'..team_note]} }
end
end
-- Now append this to the team_name string
team_name = team_name..note_string
end
-- Team names
table.insert(t,'|- \n') -- New row
table.insert(t,'| scope="row"'.. (multirowlegs and ' rowspan=' .. legs or '')
.. 'style="'.. ii_style ..'"| '..team_name..'\n') -- Position number
-- Now include note to match results if needed
for jj=top_pos,N_teams do
local team_code_jj = team_list[jj]
if ii == jj then
-- Nothing
else
for l=1,legs do
local m = (legs == 1) and 'match_' or 'match' .. l .. '_'
local match_note = Args[m ..team_code_ii..'_'..team_code_jj..'_note']
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[m ..match_note..'_note']) then
-- It's the entry
-- Add random end for unique ID if more tables are present on article (which might otherwise share an ID)
note_id = '"table_note_'..team_code_ii..'_'..team_code_jj..rand_val..'"'
note_id_list[team_code_ii..'_'..team_code_jj] = note_id
note_string = frame:extensionTag{ name = 'ref', content = match_note, args = { group='mini', name=note_id, match_note} }
else
-- Check for existence elsewhere
local 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 = 'mini', name = note_id} }
else
-- Now define the identifier for this
-- Add random end for unique ID
note_id = '"table_note_'..match_note..rand_val..'"'
note_id_list[match_note] = note_id
-- Call refn template
note_string = frame:extensionTag{ name = 'ref', content = Args['note_'..match_note], args = { group='mini', name=note_id, Args['note_'..match_note]} }
end
end
-- Now append this to the match result string
Args[m..team_code_ii..'_'..team_code_jj] = (Args[m..team_code_ii..'_'..team_code_jj] or '–')..note_string
end
end
end
end
-- Then individual results
t = p.row(t,Args,N_teams,team_list,ii,ii_show,legs,multirowlegs)
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 = 'potrzebny przypis',
args = { reason='Źródło niezdefiniowane', 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,'Nieznana data aktualizacji.')
elseif string.lower(update)=='future' then
-- Future start date
table.insert(t_footer,'Pierwsze mecze zostaną rozegrane '..start_date..'. ')
else
table.insert(t_footer,'Zaktualizowano do meczów rozegranych w dniu '..update..'. ')
end
table.insert(t_footer,'Źródło: '..source)
if (Args['matches_style'] or '') == 'FBR' then
table.insert(t_footer, Args['team_header']
and '<br /><span class="legend-text-W"> </span> = drużyna z lewej kolumny wygrywa; '
.. '<span class="legend-text-R"> </span> = remis; '
.. '<span class="legend-text-P"> </span> = wygrana drużyna z górnego rzędu.'
or '<br /><span class="legend-text-W"> </span> = zwycięstwo gospodarzy; '
.. '<span class="legend-text-R"> </span> = remis; '
.. '<span class="legend-text-P"> </span> = zwycięstwo gości.')
elseif (Args['matches_style'] or '') == 'BSR' then
table.insert(t_footer, Args['team_header']
and '<br /><span class="legend-text-W"> </span> = drużyna z lewej kolumny wygrywa; '
.. '<span class="legend-text-P"> </span> = wygrana drużyna z górnego rzędu.'
or '<br /><span class="legend-text-W"> </span> = zwycięstwo gospodarzy; '
.. '<span class="legend-text-P"> </span> = zwycięstwo gości.')
end
if Args['a_note'] then
table.insert(t_footer, '<br />W przypadku nadchodzących meczów litera „a” oznacza, że istnieje artykuł o rywalizacji między dwoma uczestnikami.')
end
if Args['ot_note'] then
table.insert(t_footer, '<br />Mecze z jaśniejszym cieniowaniem tła były rozstrzygane po dogrywce.')
end
local templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Moduł:Wyniki sportowe/styles.css' }
}
-- Add notes (if applicable)
if notes_exist then
table.insert(t_footer,'<br>Uwagi:')
-- As reflist size text
t_footer = '<div class="reflist" style="font-size:85%;">'..table.concat(t_footer)..'</div>'
local references = frame:extensionTag{ name = 'references', args = { group='mini'} }
t_footer = t_footer..'<div class="do-not-make-smaller refsection-mini refsection references-column-count ">'..references..'</div>'
else
-- As reflist size text
t_footer = '<div class="reflist" style="font-size:85%;">'..table.concat(t_footer)..'</div>'
end
-- Add footer to main text table
table.insert(t,t_footer)
-- Rewrite anchor links
for k=1,#t do
if t[k]:match('%[%[#[^%[%]]*%|') then
t[k] = mw.ustring.gsub(t[k], '(%[%[)(#[^%[%]]*%|)', '%1' .. baselink .. '%2')
end
end
return templatestyles .. '<div style="overflow:hidden">'
.. '<div class="noresize overflowbugx" style="overflow:auto">\n'
.. table.concat(t) .. '</div></div>'
end
-- Other functions
local function get_short_name(s, t, n, ss)
-- return short name if defined
if s and s ~= '' then
return s
end
-- deflag if necessary
if ss and n then
if ss == 'noflag' then
n = mw.ustring.gsub(n, '%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%]', '')
n = mw.ustring.gsub(n, '^%s* %s*', '')
elseif ss == 'flag' then
n = mw.ustring.gsub(n, '(<span class="flagicon">%s*%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*link=)[^%|%[%]]*(%]%][^<>]*</span>)%s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2')
n = mw.ustring.gsub(n, '(%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*link=)[^%|%[%]]*(%]%])%s* %s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2')
n = mw.ustring.gsub(n, '(%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*link=)[^%|%[%]]*(%]%])%s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2')
n = mw.ustring.gsub(n, '.*(<span class="flagicon">%s*%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%][^<>]*</span>).*', '%1')
n = mw.ustring.gsub(n, '.*(%[%[[Pp][Ll][Ii][Kk]:[^%[%]]*%]%]).*', '%1')
n = mw.ustring.gsub(n, ' (</span>)', '%1')
end
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')
n = mw.ustring.gsub(n, '(%[%[[^%|%]]*%|)([A-Z][A-Z][A-Z])(%]%]) <span[^<>]*>%([A-Z][A-Z][A-Z]%)</span>', '%1%2%3')
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 bg
local wc, lc, tc
if c == 'level2' then
wc, lc, tc = 'var(--background-color-success-subtle,#dff2eb)', 'var(--background-color-destructive-subtle,#ffe9e5)', 'var(--background-color-warning-subtle,#fdf2d5)' -- green2, red2, yellow2
elseif c == 'level3' then
wc, lc, tc = '#DDFCDD', '#FFDDDD', '#FFFFDD' -- green3, red3, yellow3
elseif c == 'level4' then
wc, lc, tc = 'var(--background-color-success-subtle,#eeffee)', 'var(--background-color-destructive-subtle,#fff2f0)', 'var(--background-color-warning-subtle,#ffffee)' -- green4, red4, yellow4
else
wc, lc, tc = '#BBF3BB', '#FFBBBB', '#FFFFBB' -- green1, red1, yellow1
end
--2-'#CCF9CC', '#FFCCCC', '#FFFFCC'
--4-'#EEFFEE', '#FFEEEE', '#FFFFEE'
-- check for override
if s:match('^%s*<span%s+style%s*=["\'%s]*background[%-color]*%s*:([^\'";<>]*).-$') then
local c = mw.ustring.gsub(s,'^%s*<span%s+style%s*=["\'%s]*background[%-color]*%s*:([^\'";<>]*).-$', '%1')
return 'background: ' .. c ..';'
end
-- delink if necessary
if s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') then
s = s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]')
end
if s:match('^%s*%[[^%[%]%s]*%s([^%[%]]*)%]') then
s = s:match('^%s*%[[^%[%]%s]*%s([^%[%]]*)%]')
end
if s:match('<span[^<>]*>(.-)</span>') then
s = s:match('<span[^<>]*>(.-)</span>')
end
-- get the scores
s1 = tonumber(mw.ustring.gsub( s or '',
'^%s*([%d%.]+)%s*–%s*([%d%.]+).*', '%1' ) or '') or ''
s2 = tonumber(mw.ustring.gsub( s or '',
'^%s*([%d%.]+)%s*–%s*([%d%.]+).*', '%2' ) or '') or ''
-- return colouring if possible
if s1 ~= '' and s2 ~= '' then
return (s1 > s2) and ('background-color: ' .. wc .. ';')
or ((s2 > s1) and ('background-color: ' .. lc .. ';')
or ('background-color: ' .. tc .. ';'))
else
return ''
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*(%[[^%[%]%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')
s = mw.ustring.gsub(s, '^%s*(%[[^%[%]%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,legs,multirowlegs)
local ii, team_code_ii, short_name
legs = legs or 1
-- 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 l=1,legs do
if multirowlegs and l > 1 then
break
end
for ii=top_pos,N_teams do
team_code_ii = team_list[ii]
short_name = get_short_name(Args['short_'..team_code_ii],
team_code_ii, Args['name_'..team_code_ii], Args['short_style'] or '')
local bl = legs > 1 and ii == top_pos and ' style="border-left:2px solid #aaa;"' or ''
tt = p_sub.colhead(tt,col_width .. bl,short_name)
end
end
return tt
end
function p.row(tt,Args,N_teams,team_list,ii,ii_show,legs,multirowlegs)
-- Note ii is the row number being shown
local jj, fw, bg, result, result_extra, team_code_ii, team_code_jj
legs = legs or 1
-- Links for match
local isLink = (Args['generate_links'] or 'no') == 'yes'
local currentPageTitle = mw.title.getCurrentTitle().fullText
-- 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 l=1,legs do
if multirowlegs and l > 1 then
table.insert(tt,'|- \n') -- New row
end
for jj=top_pos,N_teams do
team_code_jj = team_list[jj]
local m = (legs == 1) and 'match_' or 'match' .. l .. '_'
result = Args[m..team_code_ii..'_'..team_code_jj] or ''
local mr = (legs == 1) and 'result_' or 'result' .. l .. '_'
result_extra = Args[mr..team_code_ii..'_'..team_code_jj] or ''
local bl = legs > 1 and jj == top_pos and 'border-left:2px solid #aaa;' or ''
if ii == jj or result == 'null' then
-- Solid cell
fw = 'font-weight:' .. (ii==ii_show and 'bold' or 'normal') .. ';'
bg = ''
-- Grey background color for solid cell
if Args['solid_cell'] == 'grey' then
table.insert(tt,'| style="'..fw..bl..'background-color:var(--background-color-disabled, #c8ccd1);" |\n')
else
table.insert(tt,'| style="'..fw..bl..bg..'" | —\n')
end
else
-- Content cell
-- Set bolding and background
fw = 'color:inherit; font-weight:' .. ((ii==ii_show or jj == ii_show) and 'bold' or 'normal') .. ';'
bg = ''
-- 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 = get_score_background(result,'level3')
elseif result_extra == 'PK' then
bg = get_score_background(result,'level4')
else
bg = get_score_background(result,'level2')
end
elseif matches_style == 'BSR' and result ~= '' then
if result_extra == 'OT' then
bg = get_score_background(result,'level3')
elseif result_extra == 'OTL' then
bg = get_score_background('0–1','level3')
elseif result_extra == 'OTW' then
bg = get_score_background('1–0','level3')
elseif result_extra == 'L' then
bg = get_score_background('0–1','')
elseif result_extra == 'W' then
bg = get_score_background('1–0','')
else
bg = get_score_background(result,'')
end
end
if isLink and result ~= '' then
table.insert(tt,'| style="white-space:nowrap;'..fw..bl..bg..'" |[['..currentPageTitle..'#' .. l .. team_code_ii .. team_code_jj .. '|' ..result .. ']]\n')
else
table.insert(tt,'| style="white-space:nowrap;'..fw..bl..bg..'" |'..result..'\n')
end
end
end
end
return tt
end
return p