Module:Build bracket
![]() | This Lua module is used on approximately 8,300 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes at Wikipedia talk:High-risk templates before implementing them. |
![]() | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This module is intended to be used to create and edit intricate sports brackets that cannot be made by Module:RoundN or Module:Team bracket. For example, additional headers (for double-elimination brackets; 3rd-, 5th-, 7th-place matches; etc), singular omitted matches (i.e., having a horizonal line instead of a match), and N-way brackets (N teams per match). The syntax is slightly more complicated than the aforementioned brackets, but simpler than using the standard wikitable code.
Usage
{{#invoke:Build bracket|main | rounds = | col1-headers = | col1-matches = | col2-headers = | col2-matches = ... | col1-col2-paths = | col2-col3-paths = ... }}
Parameters
Parameter | Description | Default |
---|---|---|
rounds |
number of rounds (columns). | 1
|
autocol |
set to yes to automatically set set maximum round to display based on entries. |
no
|
rows |
manually set the number of rows. | Automatic |
teams-per-match |
enter the number of teams in each match. Use colm-teams-per-match to set individual columns |
2
|
colm-headers |
(optional) enter the row numbers where headers are desired in column m. Separate entries with , . Half integer values are allowed. |
Automatic |
colm-matches |
enter the row numbers where a match is desired in column m. Matches take up two rows by default. Separate entries with , . Half integer values are allowed. |
|
RDmh-hide |
set to yes to hide the (alpha) hth header and all matches beneath it in column m unless any of those entries are non empty. Useful for consolation matches. |
|
colm-colm+1-paths |
enter the starting and ending row numbers, separated by - , from columns m and m+1 where a path is desired. Separate entries with , . Half integer values are allowed. |
|
colm-colm+1-cross |
enter the row number where paths intersect from column m to m+1. | |
RDm-altname |
Alternate name for RDm (e.g., if |RD1-altname=first , then first-team1 can be used instead of RD1-team1 ). Use RDmh-altname for cells under header mh. |
|
text-altname |
Alternate name for RDm-textk (e.g., if |text-altname=details , then RDm-details1 can be used instead of RDm-text1 ). |
|
maxround |
final round to display. This parameter should be omitted unless it is less than the default value set by rounds . |
|
minround |
first round to display. | 1
|
height |
the amount of vertical visibility desired for the bracket. Creates a vertical scroll bar. Enter a number with units (e.g., 30em or 480px ). |
|
col-spacing |
the amount of horizontal space between rounds. Enter as a plain number (e.g., 10 for 10px). |
5
|
seed-width |
the width of the cells for seeds. Plain numbers are assumed to be in px units (e.g., 25 for 25px or 2em for 2em) |
25
|
team-width |
the width of the cells for team names. Plain numbers are assumed to be in px units (e.g., 200 for 200px or 15em for 15em) |
150
|
score-width |
the width of the cells for scores. Plain numbers are assumed to be in px units (e.g., 25 for 25px or 2em for 2em) |
25
|
agg-width |
the width of the cells for aggregate scores. score-width will change aggregate score widths unless this parameter is used. Plain numbers are assumed to be in px units (e.g., 25 for 25px or 2em for 2em) |
25
|
seeds |
set to no to omit seeds in in all matches. set to yes to show seed cells to show for all matches. |
|
legs |
the number of legs for all rounds. Use RDm-legs to individually set columns. Use RDm-legsk to individually set teams. |
1
|
autolegs |
set to yes to automatically generate score cells per team. If legs or RDm-legs is used, autolegs will be set to no . |
no
|
byes |
set to yes to hide any team cells that are empty. Alternatively, set to m to have rounds 1 through m hide any team cells that are empty. Use RDm-byes for just matches under column m. Use RDmh-byes for just matches under header h only in column m. |
no
|
show-bye-paths |
set to yes to replace any team cells that that are hidden byes with a path. |
no
|
aggregate |
set to yes to add an aggregate score box to each match. Only matches with two or more legs will show the aggregate score box. |
no
|
boldwinner |
set to yes to automatically bold the seed/team/score with the higher score in each match. |
no
|
shift |
vertically shifts all of the entries by the number entered. Use RDm-shift for individual in columns. |
0
|
RDm , RDmh |
The header text of the (alpha hth) header in column m (e.g., RD1 or RD1a for the first header and RD1b for the second header in column 1). |
|
RDm-seedk |
The seed of the kth team in column m. Alternatively, use RDmh-seedk for the kth team under header mh. |
|
RDm-teamk |
The name of the kth team in column m. Alternatively, use RDmh-teamk for the kth team under header mh. |
|
RDm-scorek |
The score of the kth team in column m. Alternatively, use RDmh-scorek for the kth team under header mh. Append the suffix -l for the lth leg or -agg for the aggregate score. |
|
RDm-textk |
The text above the kth match in column m. Alternatively, use RDmh-textk for the kth match under header mh. |
|
RDm-groupk |
The text for the kth group in column m. Group text will appear to the left of whenever two paths meet. | |
RD-shade |
the background color (in hex format, e.g. #ABCDEF ) of all headers. Use RDm-shade or RDmh-shade for individual headers. |
#F2F2F2
|
RDm-RD(m+1)-path [a] |
set to no or 0 to omit the paths from round m to round m+1. |
yes
|
paramstyle [b] |
set to numbered change the parameter name style of RDm-textk , RDm-seedk , RDm-teamk , and RDm-scorek to a numbered notation (|1= ,|2= ...). Set |seeds=yes add seeds. |
indexed
|
Parameter hierarchy
- Whenever there are multiple headers in a single column, more than one parameter may be assigned to a cell value. For example, in the following bracket, both
|RD1-team3=
and|RD1b-team1=
can be used to assign the third team in the first column. By default, entries with subheader prefixes will override those without. In the below example,RD1b-team1
will override any value that has been set byRD1-team3
.
- Parameters used in articles take precedence over parameters used in the template itself. For example, suppose ArticleX used the template NTeamBracket, and suppose NTeamBracket had the parameter
|RD1-seed1=1
set. If ArticleX implemented{{NTeamBracket|RD1-seed1=2}}
, then the first team in round 1 would have a seed of 2.
Path codes
Path codes are entered in the form a-b
, where a
is associated match in the first column, and b
is associated match in the second column. Path codes can be grouped; for example, (a,b)-c
is equivalent to a-c, b-c
. To add color, append :color
to the end of a path, e.g. 3-5:red
. Only one extra color can be used in a bracket.
Example | Output | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1-3
|
| |||||||||||||||||||||||||||
(1,5)-3
|
| |||||||||||||||||||||||||||
3-1,3-5:red
|
|
Examples
Note: These are only examples to illustrate parameters. Standard 4-team, 8-team, etc. brackets are better handled by Module:Team bracket.
Standard 4-team bracket
{{#invoke:Build bracket|main | rounds=2 | col1-headers = 1 | col2-headers = 1 | col1-matches = 3,7 | col2-matches = 5 | col1-col2-paths = (3,7)-5 <!-- Defaults --> | RD2 = Grand Final | RD1-seed1 = 1 | RD1-seed3 = 2 }}
3-way bracket
{{#invoke:Build bracket|main | rounds=2 | teams-per-match = 3 | col1-headers = 1 | col2-headers = 1 | col1-matches = 3,7,11 | col2-matches = 7 | col1-col2-paths = (3,7,11)-7 }}
Double-elimination bracket
{{#invoke:Build bracket|main | rounds=4 | col1-headers = 1,7 | col2-headers = 1,7 | col3-headers = 7 | col4-headers = 1 | col1-matches = 4,11 | col2-matches = 3,10 | col3-matches = 9 | col4-matches = 6 | col1-col2-paths = 4-3, 11-10 | col2-col3-paths = 3-3, 10-9 | col3-col4-paths = (3,9)-6 <!-- Defaults --> | RD1 = Upper round 1 | RD2 = Upper final | RD3b = Lower final }}
Crossing paths
{{#invoke:Build bracket|main | rounds=2 | col1-matches = 3,7 | col2-matches = 3,7 | col1-col2-paths = 3-7, 7-3 | col1-col2-cross = 5 }}
Text
{{#invoke:Build bracket|main | rounds=2 | col1-matches = 3,6 | col2-matches = 4.5 | col1-col2-paths = (3,6)-4.5 | RD1-text1 = Text 1 | RD1-text2 = Text 2 | RD2-text1 = Text 3 }}
Groups
{{#invoke:Build bracket|main | rounds=3 | col1-matches = 3,6,9,12 | col2-matches = 4.5,10.5 | col3-matches = 7.5 | col1-col2-paths = (3,6)-4.5, (9,12)-10.5 | col2-col3-paths = (4.5,10.5)-7.5 | RD1-group1 = Group 1 | RD1-group2 = Group 2 | RD2-group1 = Group 3 }}
Legs and aggregate
{{#invoke:Build bracket|main | rounds=3 | legs = 2 | RD1-legs = 3 | aggregate = y | col1-matches = 3,6,9,12 | col2-matches = 4.5,10.5 | col3-matches = 7.5 | col1-col2-paths = (3,6)-4.5, (9,12)-10.5 | col2-col3-paths = (4.5,10.5)-7.5 }}
Byes
{{#invoke:Build bracket|main | rounds=3 | RD1-byes = y | col1-matches = 3,6,9,12 | col2-matches = 4.5,10.5 | col3-matches = 7.5 | col1-col2-paths = (3,6)-4.5, (9,12)-10.5 | col2-col3-paths = (4.5,10.5)-7.5 | RD1-team1 = Team 1 | RD1-team2 = Team 2 }}
Bold winner
{{#invoke:Build bracket|main | rounds=2 | legs = 3 | boldwinner=y | col1-matches = 3,7 | col2-matches = 5 | col1-col2-paths = (3,7)-5 | RD1-seed1 = 1 | RD1-team1 = Team 1 | RD1-score1-1 = 5 | RD1-score1-2 = 12 | RD1-score1-3 = 15 | RD1-seed2 = 4 | RD1-team2 = Team 2 | RD1-score2-1 = 11 | RD1-score2-2 = 10 | RD1-score2-3 = 4 | RD1-seed3 = 2 | RD1-team3 = Team 3 | RD1-score3-1 = 6 | RD1-score3-2 = 13 | RD1-score3-3 = {{ndash}} | RD1-seed4 = 3 | RD1-team4 = Team 4 | RD1-score4-1 = 3 | RD1-score4-2 = 2 | RD1-score4-3 = {{ndash}} | RD2-seed1 = 4 | RD2-team1 = Team 2 | RD2-score1-1 = 2 | RD2-score1-2 = 2 | RD2-score1-3 = 5 | RD2-seed2 = 2 | RD2-team2 = Team 3 | RD2-score2-1 = 1 | RD2-score2-2 = 7 | RD2-score2-3 = 2 }}
See also
local p = {}
local legs
local function isempty(s)
return s == nil or s == ''
end
local function generateRow(t,c,j,cell,path,RDlegs)
if isempty(cell) then
table.insert(t,'| colspan="' .. RDlegs+2 .. '" | \n')
else
table.insert(t,cell..'\n')
end
if j<c then
if isempty(path) then
table.insert(t,'| colspan="2" | \n')
else
table.insert(t,path..' \n')
end
end
end
local function generateColumn(t)
table.insert(t,'|-\n')
table.insert(t,'| \n')
end
function p.main(frame)
local fargs = frame.args
local pargs = frame:getParent().args;
local r = tonumber(frame.args.rows) or tonumber(frame.args.maxrows) or 1
local c = tonumber(frame.args.rounds) or 1
local legs = tonumber(fargs.legs) or tonumber(pargs.legs) or 1
local seed_width = fargs["seed-width"] or pargs["seed-width"] or 25
local team_width = fargs["team-width"] or pargs["team-width"] or 150
local score_width = fargs["score-width"] or pargs["score-width"] or 25
t = {}
table.insert(t,'{| border=0 cellpadding=0 cellspacing=0 style="font-size: 90%; margin:1em 2em 1em 1em;\n')
generateColumn(t)
for j=1,c do
local RDlegs = tonumber(fargs['RD'..j..'-legs']) or tonumber(pargs['RD'..j..'-legs']) or legs
local cell = fargs['0-'..j] or ''
local path = fargs['0-'..j..'a'] or ''
generateRow(t,c,j,cell,path,RDlegs)
end
table.insert(t,'|-\n')
for j=1,c do
local RDlegs = tonumber(fargs['RD'..j..'-legs']) or tonumber(pargs['RD'..j..'-legs']) or legs
table.insert(t,'| width="5" | \n')
table.insert(t,'| width="'..seed_width..'" | \n')
table.insert(t,'| width="'..team_width..'" | \n')
for k=1,RDlegs do
table.insert(t,'| width="'..score_width..'" | \n')
end
if j<c then
table.insert(t,'| width="5" | \n')
end
end
for i=1,r do
generateColumn(t)
for j=1,c do
local RDlegs = tonumber(fargs['RD'..j..'-legs']) or tonumber(pargs['RD'..j..'-legs']) or legs
local cell = fargs[i..'-'..j] or ''
local path = fargs[i..'-'..j..'a'] or ''
generateRow(t,c,j,cell,path,RDlegs)
end
end
table.insert(t,'|} \n')
return table.concat(t)
end
return p