Mô đun:Sports results

-- Mô đun để xây dựng kết quả qua bảng trên bảng xếp hạng trong môn thể thao
-- Xem tài liệu để biết thêm chi tiết

require('strict')

local p = {}

-- Main function
function p.main(frame)
-- Get the args, stripping out blank values
local getArgs = require('Module: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 'Nhà \\ Khách'
-- 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().text == baselink then baselink = end
local template_name = Args['template_name']
or (baselink ~= and (':' .. baselink))
or
local edit_links = template_name == and
or require('Module: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 Màu sắc: Xanh = đội cột bên trái thắng; Vàng = hòa; Đỏ = đội hàng bên trên thắng.'
or 'Màu sắc: Xanh = đội nhà thắng; Vàng = hòa; Đỏ = đội khách thắng.')
elseif (Args['matches_style'] or ) == 'BSR' then
table.insert(t_footer, Args['team_header']
and 'Màu sắc: Xanh = đội cột bên trái thắng; Đỏ = đội hàng bên trên thắng.'
or 'Màu sắc: Xanh = đội nhà thắng; Đỏ = đội khách thắng.')
end
if Args['a_note'] then
table.insert(t_footer, 'Đối với các trận đấu sắp diễn ra, chữ "a" cho biết có một bài viết về sự cạnh tranh giữa hai đội tham dự.')
end
if Args['ot_note'] then
table.insert(t_footer, 'Các trận đấu có màu nền nhạt hơn đã được quyết định sau hiệp phụ.')
end


local templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Sports results/styles.css' }
}

-- Add notes (if applicable)
if notes_exist then
table.insert(t_footer,'Ghi chú:')
t_footer = templatestyles .. ..table.concat(t_footer)..
t_footer = t_footer..frame:expandTemplate{ title = 'notelist', args = { group='lower-alpha'} }
else
t_footer = templatestyles .. ..table.concat(t_footer)..
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
.. '\n'
.. table.concat(t) ..
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, '%[%[[Ff][Ii][Ll][Ee]:[^%[%]]%]%]', )
elseif ss == 'flag' then
n = mw.ustring.gsub(n, '(%s%[%[[Ff][Ii][Ll][Ee]:[^%[%]]link=)[^%|%[%]](%]%][^<>])%s%[%[([^%[%]%|])%|[^%[%]]%]%]', '%1%3%2')
n = mw.ustring.gsub(n, '.(%s%[%[[Ff][Ii][Ll][Ee]:[^%[%]]%]%][^<>]).', '%1')
n = mw.ustring.gsub(n, '&nbsp;()', '%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;]>%([A-Z][A-Z][A-Z]%)', '%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 wc, lc, tc
if c == 'level2' then
wc, lc, tc = 'CCF9FF', 'FCC', 'FFC' -- blue2, red2, yellow2
elseif c == 'level3' then
wc, lc, tc = 'DDFCFF', 'FDD', 'FFD' -- blue3, red3, yellow3
elseif c == 'level4' then
wc, lc, tc = 'EEFFFF', 'FEE', 'FFE' -- blue4, red4, yellow4
else
wc, lc, tc = 'BBF3FF', 'FBB', 'FFB' -- blue1, red1, yellow1
end

-- check for override
if s:match('^%s]).-$') then
local c = mw.ustring.gsub(s,'^%s]).-$', '%1')
return 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(']>(.-)') then
s = s:match(']>(.-)')
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(%[[^%[%]%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

-- 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
result_extra = Args['result_'..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 = 'background:transparent;'

-- Grey background color for solid cell
if Args['solid_cell'] == 'grey' then
table.insert(tt,'| style="'..fw..bl..'background:bbb;" |\n')
else
table.insert(tt,'| style="'..fw..bl..bg..'" | &mdash;\n')
end
else
-- Content cell
-- Set bolding and background
fw = 'font-weight:' .. ((iiii_show or jj ii_show) and 'bold' or 'normal') .. ';'
bg = 'background:transparent;'

-- 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:' .. get_score_background(result,'level2') .. ';'
elseif result_extra == 'PK' then
bg = 'background:' .. get_score_background(result,'level3') .. ';'
else
bg = 'background:' .. get_score_background(result,) .. ';'
end
elseif matches_style == 'BSR' and result ~= then
if result_extra == 'OT' then
bg = 'background:' .. get_score_background(result,'level3') .. ';'
elseif result_extra == 'OTL' then
bg = 'background:' .. get_score_background('0–1','level3') .. ';'
elseif result_extra == 'OTW' then
bg = 'background:' .. get_score_background('1–0','level3') .. ';'
elseif result_extra == 'L' then
bg = 'background:' .. get_score_background('0–1',) .. ';'
elseif result_extra == 'W' then
bg = 'background:' .. get_score_background('1–0',) .. ';'
else
bg = 'background:' .. get_score_background(result,) .. ';'
end
end
table.insert(tt,'| style="white-space:nowrap;'..fw..bl..bg..'" |'..result..'\n')
end
end
end

return tt
end

return p