Nothing Special   »   [go: up one dir, main page]

Przejdź do zawartości

Moduł:Wyniki sportowe: Różnice pomiędzy wersjami

Z Wikipedii, wolnej encyklopedii
[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('Module:No globals')
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 ' Gospodarz \\ Gość'
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] or team_code_ii
team_name = Args['name_'..team_code_ii] or team_code_ii
local ii_style = 'text-align:' .. (Args['team_align'] or 'left') .. ';'
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') -- New row
table.insert(t,'|- \n') -- New row
table.insert(t,'| scope="row" style="'
table.insert(t,'| scope="row"'.. (multirowlegs and ' rowspan=' .. legs or '')
.. ii_style ..'"| '..team_name..'\n') -- Position number
.. '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'] or 'unknown'
local update = Args['update']
or 'unknown'
local start_date = Args['start_date'] 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') } }
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,'Updated to match(es) played on unknown. ')
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,'Rozgrywki rozpoczną się'..start_date..'. ')
table.insert(t_footer,'Pierwsze mecze zostaną rozegrane '..start_date..'. ')
else
else
table.insert(t_footer,'Aktualne na '..update..'. ')
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, '<br />'
table.insert(t_footer, Args['team_header']
.. '<span class="legend-text" style="border:1px solid #BBB;padding:1px .3em;background-color:#CEFFCD;font-size:95%;line-height:1.25;text-align:center">&#160;</span> = zwycięstwo gospodarzy; '
and '<br /><span class="legend-text-W">&#160;</span> = drużyna z lewej kolumny wygrywa; '
.. '<span class="legend-text" style="border:1px solid #BBB;padding:1px .3em;background-color:#FEFCD9;font-size:95%;line-height:1.25;text-align:center">&#160;</span> = remis; '
.. '<span class="legend-text-R">&#160;</span> = remis; '
.. '<span class="legend-text" style="border:1px solid #BBB;padding:1px .3em;background-color:#FFDFDF;font-size:95%;line-height:1.25;text-align:center">&#160;</span> = zwycięstwo gości.')
.. '<span class="legend-text-P">&#160;</span> = wygrana drużyna z górnego rzędu.'
or '<br /><span class="legend-text-W">&#160;</span> = zwycięstwo gospodarzy; '
.. '<span class="legend-text-R">&#160;</span> = remis; '
.. '<span class="legend-text-P">&#160;</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">&#160;</span> = drużyna z lewej kolumny wygrywa; '
.. '<span class="legend-text-P">&#160;</span> = wygrana drużyna z górnego rzędu.'
or '<br /><span class="legend-text-W">&#160;</span> = zwycięstwo gospodarzy; '
.. '<span class="legend-text-P">&#160;</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*&nbsp;%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*&nbsp;%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, '&nbsp;(</span>)', '%1')
n = mw.ustring.gsub(n, '&nbsp;(</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][%d]*)%s*:%s*([%d][%d]*).*', '%1' ) or '') or ''
'^%s*([%d%.]+)%s*%s*([%d%.]+).*', '%1' ) or '') or ''
s2 = tonumber(mw.ustring.gsub( s or '',
s2 = tonumber(mw.ustring.gsub( s or '',
'^%s*([%d][%d]*)%s*:%s*([%d][%d]*).*', '%2' ) or '') or ''
'^%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 wc or ((s2 > s1) and lc or tc)
return (s1 > s2) and ('background-color: ' .. wc .. ';')
or ((s2 > s1) and ('background-color: ' .. lc .. ';')
or ('background-color: ' .. tc .. ';'))
else
else
return 'transparent'
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*([%d]+)', '%1:%2')
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*&[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*%-%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*%-%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 ii=top_pos,N_teams do
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..'" | &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]
team_code_jj = team_list[jj]
result = Args['match_'..team_code_ii..'_'..team_code_jj] or ''
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 matches_style == 'FBR' and result ~= '' then
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..'" | &mdash;\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

 Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Użycie

[edytuj kod]

Moduł do tworzenia tabeli z wynikami rozgrywek ligowych. Podstawowe użycie to {{#invoke:Wyniki sportowe|main}}.

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]


-- 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">&#160;</span> = drużyna z lewej kolumny wygrywa; '
				.. '<span class="legend-text-R">&#160;</span> = remis; '
				.. '<span class="legend-text-P">&#160;</span> = wygrana drużyna z górnego rzędu.'
			or '<br /><span class="legend-text-W">&#160;</span> = zwycięstwo gospodarzy; '
				.. '<span class="legend-text-R">&#160;</span> = remis; '
				.. '<span class="legend-text-P">&#160;</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">&#160;</span> = drużyna z lewej kolumny wygrywa; '
				.. '<span class="legend-text-P">&#160;</span> = wygrana drużyna z górnego rzędu.'
			or '<br /><span class="legend-text-W">&#160;</span> = zwycięstwo gospodarzy; '
				.. '<span class="legend-text-P">&#160;</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*&nbsp;%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*&nbsp;%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, '&nbsp;(</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])(%]%])&nbsp;<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..'" | &mdash;\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