Modul:Sports rbr table
Penampilan
Modul ini telah dinilai berada pada tahap beta, dan sedia untuk kegunaan secara luas. Ia masih baru dan patut digunakan dengan berhati-hati untuk memastikan bahawa hasil penggunaannya adalah seperti yang dijangkakan. |
This module uses TemplateStyles: |
Penggunaan
[sunting sumber]Jadual kedudukan
{{#invoke:Sports rbr table|table
| sortable = <!-- y or n or omit -->
| team1 =
| pos1 = <!-- 1 / 2 / 3 / 4 / ... -->
| team2 =
| pos2 = <!-- 1 / 2 / 3 / 4 / ... -->
<!-- ... -->
| color_1 = 1st
| text_1 = 1st place
| source =
}}
Jadual WDL
{{#invoke:Sports rbr table|table
| sortable = <!-- y or n or omit -->
| team1 =
| res1 = <!-- W / D / L ... -->
| team2 =
| res2 = <!-- W / D / L ... -->
<!-- ... -->
| color_W = green2
| color_D = yellow2
| color_L = red2
| source =
}}
Parameter
[sunting sumber]Parameter umum | |
---|---|
Parameter | Penerangan |
title |
Tajuk utama untuk jadual, meninggalkan tanpa tajuk. |
sortable |
Adakah jadual disusun? Tetapkan kepada y untuk jadual sortable, dan meninggalkan untuk unsortable.
|
color_X |
Warna latar belakang untuk kedudukan X . Di sini, X boleh menjadi nombor tunggal (e.g., 1 untuk kedudukan 1), atau nilai bukan angka yang sepadan dengan kedudukan yang digunakan dalam jadual (e.g., R untuk diturunkan atau W untuk menarik diri ...) Lihat Warna bahagian bawah untuk maklumat lanjut mengenai sintaks warna.
|
color_-3 |
Warna latar belakang untuk posisi 1, 2, dan 3. Lihat Warna bahagian bawah untuk maklumat lanjut mengenai sintaks warna. |
color_15- |
Warna latar belakang untuk posisi 15, 16, .... Lihat Warna bahagian bawah untuk maklumat lanjut mengenai sintaks warna. |
text_Y |
Teks lagenda untuk color_Y . Menambah apa-apa teks legenda akan mencetuskan kemasukan legenda di bahagian bawah jadual.
|
source |
Sumber maklumat di dalam jadual. |
notes |
Apa-apa nota tambahan di tambah ke kaki jadual. |
update start_date |
Tarikh pusingan terakhir perlawanan termasuk dalam jadual. Jika jadual selesai, gunakan |update=complete . Jika perlawanan akan berlaku pada tarikh yang akan datang, gunakan |update=future dan |start_date= untuk tarikh pusingan pertama perlawanan.
|
legendpos |
Kedudukan untuk legenda. Nilai yang disokong termasuk tr (top right), br (kanan bawah), tl (kiri atas), bl (bawah kiri), t (atas), dan b (bawah).
|
legendorder |
Perintah untuk entri dalam legenda (e.g., |legendorder=W/D/L ).
|
toptext |
Teks untuk dimasukkan di bahagian atas jadual. Ini berguna apabila |legendpos=tr dan anda ingin mempunyai apungan legenda di sebelah teks di bahagian atas.
|
header |
Teks untuk tajuk lajur pasukan. Lalai adalah Team ╲ Round .
|
labelalign |
Penjajaran untuk label lajur. Lalai adalah left .
|
firstround |
Bilangan pusingan pertama. Lalai adalah 1 .
|
rnd1 |
Teks yang hendak digunakan untuk label untuk pusingan 1. Lalai adalah 1 .
|
splitN |
Garis boleh ditambah antara seksyen jadual (jika dikehendaki) dengan menambah |splitN=yes dengan kedudukan bawah N dengan bar perlu dipaparkan.
|
Sintaks padat | |
Parameter | Penerangan |
team1 |
Nama yang dikehendaki oleh pasukan pertama. Untuk pasukan tambahan, gunakan team2 , team3 , ... Untuk pemegang tempat sementara, gunakan |team1=- atau |team1= or |team1=  atau |team1=TBA .
|
pos1 |
Slash ke hadapan (/ ) senarai terhad kedudukan pusingan untuk pasukan pertama. Sebagai contoh, |pos1=1/2/3/8/3/2/1 untuk tujuh pusingan dengan kedudukan berubah dari 1 hingga 2 hingga 3 hingga 8 hingga 3 hingga 2 hingga 1.
|
pos1_rnd3_note |
Nota kaki untuk menambah kedudukan ke-3 di kedudukan pos1 .
|
res1 |
Slash ke hadapan (/ ) Senarai keputusan perlawanan terpilih bagi pasukan pertama. Sebagai contoh, |res1=W/D/D/W/L untuk lima pusingan dengan keputusan pusingan, menang, seri, menang, kalah. Perhatikan, parameter ini tidak boleh digunakan jika |pos1= sedang digunakan.
|
res1_rnd3_note |
Nota kaki untuk menambah keputusan ke 3 di keputusan perlawanan res1 .
|
Sintaks Sports table | |
Parameter | Penerangan |
team1 |
ini boleh menjadi singkatan untuk pasukan pertama. Baki dokumentasi dalam bahagian ini mengandaikan singkatan itu ABC . Untuk pasukan tambahan, gunakan team2 , team3 , ...
|
name_ABC |
Nama pasukan yang berganda ABC
|
pos_ABC |
Slash ke hadapan (/ ) senarai terhad kedudukan pusingan untuk pasukan ABC . Sebagai contoh, |pos_ABC=1/2/3/8/3/2/1 untuk tujuh pusingan dengan kedudukan berubah dari 1 hingga 2 hingga 3 hingga 8 hingga 3 hingga 2 hingga 1.
|
res_ABC |
Slash ke hadapan (/ ) Senarai keputusan perlawanan untuk pasukan ABC . Sebagai contoh, |res_ABC=W/D/D/W/L untuk lima pusingan dengan keputusan pusingan, menang, seri, menang, kalah. Perhatikan, parameter ini tidak boleh digunakan jika |pos_ABC= sedang digunakan.
|
Warna
[sunting sumber]Modul ini mempunyai beberapa warna latar belakang pratetap yang mempunyai kontras yang boleh diterima dengan teks latar depan hitam. Adalah disyorkan untuk menggunakan salah satu daripada warna ini, yang sepadan dengan warna yang digunakan Module:Sports table.
Nama | Nilai hex |
---|---|
green1 | BBF3BB |
green2 | CCF9CC |
green3 | DDFCDD |
green4 | EEFFEE |
blue1 | BBF3FF |
blue2 | CCF9FF |
blue3 | DDFCFF |
blue4 | EEFFFF |
Nama | Nilai hex |
---|---|
yellow1 | FFFFBB |
yellow2 | FFFFCC |
yellow3 | FFFFDD |
yellow4 | FFFFEE |
red1 | FFBBBB |
red2 | FFCCCC |
red3 | FFDDDD |
red4 | FFEEEE |
Nama | Nilai hex |
---|---|
black1 | BBBBBB |
black2 | CCCCCC |
black3 | DDDDDD |
black4 | EEEEEE |
1st | FFD700 |
2nd | C0C0C0 |
3rd | CC9966 |
Dalam sesetengah kes yang jarang berlaku, mungkin perlu mengatasi warna latar belakang untuk sel tertentu. Ini boleh dicapai dengan menggunakan |posX_rndY_color=
atau |resX_rndY_color=
di mana X
adalah nombor baris, dan Y
adalah nombor pusingan.
Contoh
[sunting sumber]Contoh 1: sintaks kedudukan padat
[sunting sumber]First place | |
Promoted | |
Championship League | |
Relegated |
Sumber: Some source
{{#invoke:Sports rbr table|table
| title = Contoh 1
| sortable = y
| team1 = A Team
| pos1 = 1/2/2/2/2
| team2 = B Team
| pos2 = 2/1/4/4/4
| team3 = C Team
| pos3 = 3/4/1/6/1
| team4 = D Team
| pos4 = 4/3/6/1/3
| team5 = E Team
| pos5 = 5/6/3/8/7
| team6 = F Team
| pos6 = 6/5/8/3/5
| team7 = G Team
| pos7 = 7/8/5/5/8
| team8 = H Team
| pos8 = 8/7/7/7/6
| color_1 = 1st
| text_1 = First place
| color_2 = green1
| text_2 = Promoted
| color_3-4 = blue2
| text_3-4 = Championship League
| color_7- = red1
| text_7- = Relegated
| source = Some source
}}
Contoh 2: Sintaks kedudukan Sports table
[sunting sumber]First place | |
Promoted | |
Championship League | |
Relegated |
Sumber: Some source
{{#invoke:Sports rbr table|table
| title = Contoh 2
| sortable = y
| team1 = AAA | team2 = BBB | team3 = CCC | team4 = DDD
| team5 = EEE | team6 = FFF | team7 = GGG | team8 = HHH
| name_AAA = A Team
| pos_AAA = 1/2/2/2/2
| name_BBB = B Team
| pos_BBB = 2/1/4/4/4
| name_CCC = C Team
| pos_CCC = 3/4/1/6/1
| name_DDD = D Team
| pos_DDD = 4/3/6/1/3
| name_EEE = E Team
| pos_EEE = 5/6/3/8/7
| name_FFF = F Team
| pos_FFF = 6/5/8/3/5
| name_GGG = G Team
| pos_GGG = 7/8/5/5/8
| name_HHH = H Team
| pos_HHH = 8/7/7/7/6
| color_1 = 1st
| text_1 = First place
| color_2 = green1
| text_2 = Promoted
| color_3-4 = blue2
| text_3-4 = Championship League
| color_7- = red1
| text_7- = Relegated
| source = Some source
}}
Contoh 3: Pasukan bergabung Jadual
[sunting sumber]Sumber: Some source
{{#invoke:sports rbr table|table
|title=Contoh 3
|header=Pusingan
|label1= Ground
| res1= H/ A/ A/ H/ A/ H/ A/ H/ H/ A/ A/ H/ H/ A/ H/ A/ A/ H/ H/ A/ A
|label2= Result
| res2= W/ L/ L/ W/ W/ D/ W/ L/ L/ L/ L/ W/ W/ W/ W/ L/ D/ L/ L/ D/ L
|label3= Position
| pos3= 4/10/14/ 8/ 6/ 7/ 7/ 8/ 9/10/11/11/ 8/ 7/ 6/ 6/ 6/ 7/ 9/ 9/ 9
| color_W = green2| color_D = yellow2| color_L = red2
| color_1=green1| color_2=green2| color_3-4=green3
| color_5-7=blue1| color_18-=red1
| source = Some source
}}
Contoh 4: Pasukan bergabung Jadual dengan legenda
[sunting sumber]Sumber: Some source
A = Away; H = Home; W = Win; D = Draw; L = Loss
A = Away; H = Home; W = Win; D = Draw; L = Loss
{{#invoke:sports rbr table|table|legendpos=b
|title=Contoh 4
|header=Pusingan
|label1= Ground
| res1= H/ A/ A/ H/ A/ H/ A/ H/ H/ A/ A/ H/ H/ A/ H/ A/ A/ H/ H/ A/ A
|label2= Result
| res2= W/ L/ L/ W/ W/ D/ W/ L/ L/ L/ L/ W/ W/ W/ W/ L/ D/ L/ L/ D/ L
|label3= Position
| pos3= 4/10/14/ 8/ 6/ 7/ 7/ 8/ 9/10/11/11/ 8/ 7/ 6/ 6/ 6/ 7/ 9/ 9/ 9
<!-- -->
| color_W = green2|text_W=Win
| color_D = yellow2|text_D=Draw
| color_L = red2|text_L=Loss
| text_H = Home|text_A = Away
| color_1=green1| color_2=green2| color_3-4=green3
| color_5-7=blue1| color_18-=red1
| source = Some source
}}
Lihat juga
[sunting sumber]Kategori Penjejakan
[sunting sumber]- Kategori:Pages using sports rbr table with dubious updated parameter (1) (pages where the updated date does not match the parent page name)
- Kategori:Pages using sports rbr table with legendorder (0) (pages where the
|legendorder=
parameter is used) - Kategori:Pages using sports rbr table with rnd parameters (0) (pages where the
|rnd1=
parameter is used and may be converted to|firstround=
) - Kategori:Pages using sports rbr table with unsupported parameters (0) (pages where unsupported parameters are used, or where the
|header=
is potentially missing)
-- This module implements {{Sports rbr table}}
local p = {}
-- Internationalisation
local labels = {
teamround = 'Pasukan ╲ Pusingan ',
source = 'Sumber:',
notes = 'Nota:',
matches = 'Perlawanan',
updatedto = 'Dikemaskini untuk <matches> dimainkan pada <date>.',
firstplayed = '<matches> pertama dimainkan pada <date>.',
futuredate = '?',
complete = 'complete',
future = 'future'
}
local templatestyles = 'Module:Sports rbr table/styles.css'
local args = nil
local preview, tracking = '', ''
local hasnotes = false
local colorlist = {}
local textlist = {}
local color_map = {
green1='#BBF3BB', green2='#CCF9CC', green3='#DDFCDD', green4='#EEFFEE',
blue1='#BBF3FF', blue2='#CCF9FF', blue3='#DDFCFF', blue4='#EEFFFF',
yellow1='#FFFFBB', yellow2='#FFFFCC', yellow3='#FFFFDD', yellow4='#FFFFEE',
red1='#FFBBBB', red2='#FFCCCC', red3='#FFDDDD', red4='#FFEEEE',
black1='#BBBBBB', black2='#CCCCCC', black3='#DDDDDD', black4='#EEEEEE',
['1st']='#FFD700', ['2nd']='#C0C0C0', ['3rd']='#CC9966'
}
local legend_symbols = {O='W/O'}
local legend_order_default = {'A', 'H', 'N', 'B', 'W', 'D', 'L', 'Ab', 'P', 'O', 'M', 'S', 'K'}
local function isnotempty(s)
return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end
local function zeropad(n)
if n>=0 and n < 10 then
return '00' .. n
end
if n>=0 and n < 100 then
return '0' .. n
end
return '' .. n
end
local function pad_key(k)
-- Zero pad, fix ranges and dashes
if k then
k = k .. ' '
k = mw.ustring.gsub(k, '–', '-')
k = mw.ustring.gsub(k, '_([%d][^%d])', '_0%1')
k = mw.ustring.gsub(k, '%-([%d][^%d])', '-0%1')
k = mw.ustring.gsub(k, '_([%d][%d][^%d])', '_0%1')
k = mw.ustring.gsub(k, '%-([%d][%d][^%d])', '-0%1')
k = mw.ustring.gsub(k, '([^%d])%-([%d])', '%1000-%2')
k = mw.ustring.gsub(k, '([%d])%-%s*$', '%1-999')
k = mw.ustring.gsub(k, '^%s*(.-)%s*$', '%1')
end
return k
end
local function matches_date(text, m, d)
return mw.ustring.gsub(mw.ustring.gsub(text .. '', '<matches>', m), '<date>', d)
end
local function escapetag(text)
return mw.ustring.gsub(text, '</', '<FORWARDSLASH')
end
local function unescapetag(text)
return mw.ustring.gsub(text, '<FORWARDSLASH', '</')
end
local function get_color(p)
if p then
p = mw.ustring.gsub(p, '</?[Aa][Bb][Bb][Rr][^<>]*>', '')
p = mw.ustring.gsub(p, '<[Ss][Uu][Pp]>[^<>]*</[Ss][Uu][Pp]>', '')
p = mw.ustring.gsub(p, '</?[Ss][^<>]*>', '')
p = mw.ustring.gsub(p, '†%s*$', '')
p = mw.ustring.gsub(p, '=%s*$', '')
p = mw.ustring.gsub(p, '%[%[[^%[%]|]*|([^%[%]|]*)%]%]', '%1')
if p:match('^%a%a*$') then
if args['text_' .. p] == nil then
tracking = tracking .. '[[Category:Pages using sports rbr table with an undescribed result|'
.. p:match('^(%a).*$') .. ']]'
end
end
end
local c = colorlist[p] or colorlist[zeropad(tonumber(p) or -1)]
if c then
return color_map[c] or c
end
p = tonumber(p or '0') or 0
if p <= 0 then
return nil
end
-- ranges in order of specificity
local offset1, offset2 = 999, 999
for k,v in pairs( colorlist ) do
local r1 = tostring(k):match( '^%s*([%d]+)%-[%d]+%s*$' )
local r2 = tostring(k):match( '^%s*[%d]+%-([%d]+)%s*$' )
if r1 and r2 then
r1 = tonumber(r1)
r2 = tonumber(r2)
if (r1 <= p) and (r2 >= p) then
if (c == nil) or ((p - r1) <= offset1 and (r2 - p) <= offset2) then
c = color_map[v] or v
offset1 = p - r1
offset2 = r2 - p
end
end
end
end
return c
end
local function check_arg(k)
k = tostring(k) or ''
if k == 'firstround' or k == 'sortable' or k == 'updated' or k == 'update'
or k =='source' or k =='notes' or k == 'legendpos' or k == 'date'
or k == 'header' or k == 'title' or k == 'start_date'
or k == 'toptext' then
elseif k == 'legendorder' then
tracking = tracking .. '[[Category:Pages using sports rbr table with legendorder]]'
elseif tostring(k):match( '^%s*text_?(.-)%s*$' ) then
elseif tostring(k):match( '^%s*colou?r_?(.-)%s*$' ) then
elseif tostring(k):match( '^%s*team[%d]+%s*$' ) then
elseif tostring(k):match( '^%s*label[%d]+%s*$' ) then
if args['header'] then
else
tracking = tracking .. '[[Category:Pages using sports rbr table with unsupported parameters|ψ]]'
end
elseif tostring(k):match( '^%s*pos[%d]+%s*$' ) then
elseif tostring(k):match( '^%s*res[%d]+%s*$' ) then
elseif tostring(k):match( '^%s*split[%d]+%s*$' ) then
elseif k == 'rnd1' then
tracking = tracking .. '[[Category:Pages using sports rbr table with rnd parameters]]'
elseif tostring(k):match( '^%s*rnd[%d]+%s*$' ) then
elseif tostring(k):match( '^%s*pos_' ) then
elseif tostring(k):match( '^%s*res_' ) then
elseif tostring(k):match( '^%s*name_' ) then
elseif tostring(k):match( '^%s*note_' ) then
elseif tostring(k):match( '^%s*pos[%d]+_rnd[%d]+_colou?r%s*$' ) then
tracking = tracking .. '[[Category:Pages using sports rbr table with per team and round coloring]]'
elseif tostring(k):match( '^%s*res[%d]+_rnd[%d]+_colou?r%s*$' ) then
tracking = tracking .. '[[Category:Pages using sports rbr table with per team and round coloring]]'
elseif tostring(k):match( '^%s*pos[%d]+_rnd[%d]+_note%s*$' ) then
elseif tostring(k):match( '^%s*res[%d]+_rnd[%d]+_note%s*$' ) then
else
local vlen = mw.ustring.len(k)
k = mw.ustring.sub(k, 1, (vlen < 25) and vlen or 25)
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
preview = preview .. 'Unknown: "' .. k .. '"<br>'
tracking = tracking .. '[[Category:Pages using sports rbr table with unsupported parameters|' .. k .. ']]'
end
end
function p.table(frame)
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
args = getArgs(frame, {wrappers = {'Template:Sports rbr table'}})
local rounds = tonumber(args['rounds'] or '0') or 0
local firstround = tonumber(args['firstround'] or 1) or 1
local sortable = yesno(args['sortable'] or 'no')
local updated = args['updated'] or args['update']
local source = args['source']
local notes = args['notes']
local delimiter = args['delimiter'] or '/'
local addlegend = nil
local legendpos = (args['legendpos'] or 'tr'):lower()
local header, footer, prenotes = '', '', ''
-- Lowercase two labels --
labels['complete'] = string.lower(labels['complete'])
labels['future'] = string.lower(labels['future'])
-- Adjust rounds
rounds = rounds - (firstround - 1)
-- Tracking
if updated and updated:match(' %d%d%d%d$') then
local YY = mw.ustring.gsub(updated, '^.*(%d%d)$', '%1')
local pn = frame:getParent():getTitle() or ''
if pn:match('^User:') or pn:match('^User talk:') or pn:match('^Draft:') or pn:match('^Talk:') then
else
if pn:match('%d%d' .. YY) or pn:match('[–%-]' .. YY) then
else
tracking = tracking .. '[[Category:Pages using sports rbr table with dubious updated parameter]]'
end
end
end
-- Require a source
if source == nil and args['date'] then
source = frame:expandTemplate{ title = 'citation needed', args = { reason='No source parameter defined', date=date or os.date('%B %Y') } }
elseif source and source:match('[^%[]#') then
if source:match('eason#') or source:match('%d%d#') then
tracking = tracking .. '[[Category:Pages using sports rbr table with an unusual source]]'
elseif source:match('^[Hh][Tt][Tt][Pp]') then
tracking = tracking .. '[[Category:Pages using sports rbr table with an unusual source|Φ]]'
end
end
-- Process team, pos, and color args
local team_list = {}
local maxrounds = 0
local rowlength = {}
for k, v in pairs( args ) do
check_arg(k)
-- Preprocess ranges
if tostring(k):match( '^%s*text_?(.-)%s*$' ) then
k = pad_key(k)
end
if tostring(k):match( '^%s*colou?r_?(.-)%s*$' ) then
k = pad_key(k)
end
-- Create the list of teams and count rounds
local i = tonumber(
tostring(k):match( '^%s*team([%d]+)%s*$' ) or
tostring(k):match( '^%s*label([%d]+)%s*$' ) or '0'
)
if ( i > 0 and isnotempty(v) ) then
table.insert( team_list, i)
local p = args['pos' .. i] or args['res' .. i] or ''
if args['name_' .. v] then
local t = args['team' .. i] or args['label' .. i] or ''
p = args['pos_' .. t] or args['res_' .. t] or ''
end
local pos = mw.text.split(escapetag(p), '%s*' .. delimiter .. '%s*')
table.insert(rowlength, #pos)
maxrounds = (#pos > maxrounds) and #pos or maxrounds
end
-- Create the list of colors
local s = tostring(k):match( '^%s*colou?r_?(.-)%s*$' )
if ( s and isnotempty(v) ) then
colorlist[s] = v:lower()
end
-- Check if we are adding a legend
s = tostring(k):match( '^%s*text_?(.-)%s*$' )
if ( s and isnotempty(v) ) then
textlist[s] = v
addlegend = 1
end
end
maxrounds = (rounds > maxrounds) and rounds or maxrounds
table.sort(rowlength)
for k=2,#rowlength do
if rowlength[k] ~= rowlength[k-1] then
tracking = tracking .. '[[Category:Pages using sports rbr table with unequal row lengths|k]]'
end
end
-- sort the teams
table.sort(team_list)
local fs = 95
if ((maxrounds - firstround) > 37 ) then
fs = fs - 2*(maxrounds - firstround - 37)
fs = (fs < 80) and 80 or fs
end
-- Build the table
local root = mw.html.create('table')
root:addClass('wikitable')
root:addClass(sortable and 'sortable' or nil)
root:addClass('sportsrbrtable')
root:css('font-size', fs .. '%')
if args['title'] then
root:tag('caption'):wikitext(args['title'])
end
local navbar = ''
if args['template_name'] then
navbar = '<br />' .. frame:expandTemplate{ title = 'navbar', args = { mini=1, style='', brackets=1, args['template_name']}}
-- remove the next part if https://en.wikipedia.org/w/index.php?oldid=832717047#Sortable_link_disables_navbar_links?
-- is ever fixed
if sortable then
navbar = mw.ustring.gsub(navbar, '<%/?abbr[^<>]*>', ' ')
end
end
-- Heading row
local row = root:tag('tr')
row:tag('th')
:attr('rowspan', args['sortable'] and 2 or nil)
:wikitext((args['header'] or labels['teamround']) .. navbar)
for r=1,maxrounds do
row:tag('th')
:addClass(args['sortable'] and 'sportsrbrtable-rnd-sort' or 'sportsrbrtable-rnd')
:attr('scope', 'col')
:wikitext(args['rnd' .. (r + (firstround - 1))]
or (r + (firstround - 1)))
end
if args['sortable'] then
row = root:tag('tr')
for r=1,maxrounds do
row:tag('th')
:addClass('sportsrbrtable-rnd-toggle')
end
end
-- Team positions
for k=1,#team_list do
local i = team_list[k]
local t = args['team' .. i] or args['label' .. i] or ''
local p = args['pos' .. i] or args['res' .. i] or ''
local n = args['note' .. i] or ''
local efnname = 'note' .. i
if args['name_' .. t] then
p = args['pos_' .. t] or args['res_' .. t] or ''
n = args['note_' .. t] or ''
efnname = 'note' .. t
t = args['name_' .. t]
end
if n ~= '' then
if args['note_' .. n] then
n = frame:expandTemplate{ title = 'efn', args = { name='note' .. n, ''} }
else
n = frame:expandTemplate{ title = 'efn', args = { name=efnname, n} }
end
hasnotes = true
end
row = root:tag('tr')
row:tag('th')
:addClass(args['team' .. i] and 'sportsrbrtable-team' or 'sportsrbrtable-lbl')
:css('text-align', args['labelalign'])
:attr('scope', 'row')
:wikitext(mw.ustring.gsub(t,'^%s*%-%s*$', ' ') .. n)
if t:match('<%s*[Cc][Ee][Nn][Tt][Ee][Rr]%s*>') then
tracking = tracking .. '[[Category:Pages using sports rbr table with unsupported parameters|χ]]'
end
local pos = mw.text.split(escapetag(p), '%s*' .. delimiter .. '%s*')
for r=1,maxrounds do
local s = args['team' .. i .. '_rnd' .. r .. '_' .. 'color'] or
args['team' .. i .. '_rnd' .. r .. '_' .. 'colour'] or
args['pos' .. i .. '_rnd' .. r .. '_' .. 'color'] or
args['pos' .. i .. '_rnd' .. r .. '_' .. 'colour'] or
args['res' .. i .. '_rnd' .. r .. '_' .. 'color'] or
args['res' .. i .. '_rnd' .. r .. '_' .. 'colour'] or nil
local n = args['team' .. i .. '_rnd' .. r .. '_' .. 'note'] or
args['pos' .. i .. '_rnd' .. r .. '_' .. 'note'] or
args['res' .. i .. '_rnd' .. r .. '_' .. 'note'] or nil
if s then s = color_map[s] or s end
local posrt = unescapetag(pos[r] or '')
local posrc = posrt
if posrt:match('^%s*[%d–]+[A-Za-z][A-Za-z0-9]*') then
posrc = posrc:match('^%s*[%d–]+([A-Za-z][A-Za-z0-9]*)')
posrt = mw.ustring.gsub(posrt, '^%s*([%d–]+)[A-Za-z][A-Za-z0-9]*', '%1')
end
local ds
if args['sortable'] and posrt:match('^%s*[%d]+[^%d%s]') then
ds = mw.ustring.gsub(posrt, '^%s*([%d]+)[^%d%s].*$', '%1')
end
row:tag('td')
:attr('data-sort-value', ds)
:css('background-color', s or get_color(posrc))
:wikitext((legend_symbols[posrt] or posrt) .. (n or ''))
end
if args['split' .. i] and k ~= #team_list then
row = root:tag('tr')
:css('background-color', '#BBBBBB')
:css('line-height', '3pt')
row:tag('td')
:attr('colspan', maxrounds + 1)
end
end
-- build the legend
if addlegend then
-- Sort the keys for the legend
local legendkeys = {}
for k,v in pairs( textlist ) do
table.insert(legendkeys, k)
end
table.sort(legendkeys)
if args['legendorder'] then
legendkeys = mw.text.split(args['legendorder'] .. delimiter ..
table.concat(legend_order_default, delimiter) .. delimiter ..
table.concat(legendkeys, delimiter), '%s*' .. delimiter .. '%s*')
else
legendkeys = mw.text.split(
table.concat(legend_order_default, delimiter) .. delimiter ..
table.concat(legendkeys, delimiter), '%s*' .. delimiter .. '%s*')
end
local lroot
if (legendpos == 't' or legendpos == 'b') then
lroot = mw.html.create('')
local firsttag = true
for k,v in pairs( legendkeys ) do
if v and textlist[v] then
if firsttag == false then lroot:wikitext('; ') end
local c = colorlist[v] or ''
local l = lroot:tag('span')
:css('margin', '0')
:css('white-space', 'nowrap')
:tag('span')
:addClass('legend-text')
:css('border', 'none')
:css('padding', '1px .3em')
:css('background-color', color_map[c] or c)
:css('font-size', '95%')
:css('border', '1px solid #BBB')
:css('line-height', '1.25')
:css('text-align', 'center')
:wikitext(legend_symbols[v] or (v:match('^[^%d][^%d]?$') and v) or ' ')
:done()
:wikitext(' = ' .. textlist[v])
textlist[v] = nil
firsttag = false
end
end
else
lroot = mw.html.create('table')
if legendpos == 'tl' or legendpos == 'bl' then
lroot:addClass('wikitable')
lroot:css('font-size', '88%')
else
lroot:addClass('infobox')
lroot:addClass('bordered')
-- lroot:css('width', 'auto')
end
for k,v in pairs( legendkeys ) do
if v and textlist[v] then
local c = colorlist[v] or ''
local row = (legendpos == 'tl' or legendpos == 'bl') and lroot or lroot:tag('tr')
local l = row:tag('th'):css('background-color', color_map[c] or c)
if legend_symbols[v] then
l:css('font-weight', 'normal')
:css('padding', '1px 3px')
:wikitext(legend_symbols[v])
else
l:css('width', '10px')
end
row:tag('td')
:css('padding', '1px 3px')
:wikitext(textlist[v])
textlist[v] = nil
end
end
end
if (legendpos == 'bl' or legendpos == 'br') then
footer = footer .. tostring(lroot)
elseif (legendpos == 'b') then
prenotes = prenotes .. tostring(lroot)
elseif (legendpos == 't') then
args['toptext'] = (args['toptext'] or '')
.. frame:expandTemplate{ title = 'refbegin' }
.. tostring(lroot)
.. frame:expandTemplate{ title = 'refend' }
else
header = header .. tostring(lroot)
end
end
-- simplify updated == complete case
local lupdated = updated and string.lower(updated) or ''
if lupdated == labels['complete'] or lupdated == 'complete' then
lupdated = ''
end
-- add note list
if hasnotes then
footer = footer .. frame:expandTemplate{ title = 'notelist' }
end
-- build the footer
if prenotes ~= '' or notes or source or lupdated ~= '' then
footer = footer .. frame:expandTemplate{ title = 'refbegin' }
if lupdated ~= '' then
local mtext = args['matches_text'] or labels['matches']
if lupdated == labels['future'] or lupdated == 'future' then
footer = footer .. matches_date(labels['firstplayed'] .. ' ',
mtext, args['start_date'] or labels['futuredate'])
else
footer = footer .. matches_date(labels['updatedto'] .. ' ',
mtext, updated)
end
end
if source then
footer = footer .. labels['source'] .. ' ' .. source
end
if prenotes ~= '' then
if lupdated ~= '' or source then
footer = footer .. '<br>'
end
footer = footer .. prenotes
end
if notes then
if prenotes ~= '' or lupdated ~= '' or source then
footer = footer .. '<br>'
end
footer = footer .. labels['notes'] .. ' ' .. notes
end
footer = footer .. frame:expandTemplate{ title = 'refend' }
end
-- add clear right for the legend if necessary
footer = footer .. ((addlegend and (legendpos == 'bl' or legendpos == 'br'))
and '<div style="clear:right"></div>' or '')
if tracking ~= '' then
if frame:preprocess( "{{REVISIONID}}" ) == "" then
tracking = preview
end
end
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} }
.. header .. (args['toptext'] or '') .. '<div style="overflow:hidden">'
.. '<div class="noresize overflowbugx" style="overflow:auto">'
.. tostring(root) .. '</div></div>' .. footer .. tracking
end
return p