Pergi ke kandungan

Modul:Sports series

Daripada Wikipedia, ensiklopedia bebas.

Ini ialah modul untuk menjana keputusan perlawanan untuk siri sukan, seperti perlawanan timbal balik. Walau bagaimanapun, modul ini boleh menyokong ikatan satu perlawanan sehingga bilangan perlawanan yang tidak terhad. Templat menyokong perlawanan kelab domestik dan antarabangsa, serta perlawanan pasukan kebangsaan. Walaupun direka bentuk untuk persatuan bola sepak, ia boleh digunakan untuk mana-mana sukan yang menampilkan siri antara pasukan.

Penggunaan

[sunting sumber]

In its simplest form, only a few parameters are needed to build a table.

International club football

[sunting sumber]

For two-legged ties in international club football, seven parameters are expected to be passed for each row. This includes each club's name and national association country name/code, the aggregate score and the score of both legs.

{{#invoke:Sports series|main
|first_club|first_association|aggregate|second_club|second_association|first_leg|second_leg
}}

Domestic club football

[sunting sumber]

For two-legged ties in domestic club football, five parameters are expected to be passed for each row. This includes each club's name, the aggregate score and the score of both legs.

{{#invoke:Sports series|main|flag=n
|first_club|aggregate|second_club|first_leg|second_leg
}}

National team football

[sunting sumber]

For two-legged ties in national team football, five parameters are expected to be passed for each row. This includes each national team's name/code, the aggregate score and the score of both legs.

Men
{{#invoke:Sports series|main|type=NT
|first_nation|aggregate|second_nation|first_leg|second_leg
}}
Women
{{#invoke:Sports series|main|type=WNT
|first_nation|aggregate|second_nation|first_leg|second_leg
}}

Examples

[sunting sumber]

International club football

[sunting sumber]
Usage
{{#invoke:Sports series|main
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER|2–1|2–4
|[[Real Madrid CF|Real Madrid]]|ESP|4–4 {{pen|4–3}}|[[Manchester City F.C.|Manchester City]]|ENG|3–3|1–1 {{aet}}
|[[Paris Saint-Germain F.C.|Paris Saint-Germain]]|FRA|6–4|[[FC Barcelona|Barcelona]]|ESP|2–3|4–1
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Arsenal England2–3Jerman Bayern Munich2–20–1
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4
Real Madrid Sepanyol4–4 (4–3 pen.)England Manchester City3–31–1 (s.m.t.)
Paris Saint-Germain Perancis6–4Sepanyol Barcelona2–34–1

Domestic club football

[sunting sumber]
Usage
{{#invoke:Sports series|main|flag=n
|[[Valencia CF|Valencia]]|3–3 {{pso|3–2}}|[[Deportivo Alavés|Alavés]]|2–1|1–2 {{aet}}
|[[Atlético Madrid]]|2–5|[[Sevilla FC|Sevilla]]|1–2|1–3
|[[RCD Espanyol|Espanyol]]|1–2|[[FC Barcelona|Barcelona]]|1–0|0–2
|[[CD Leganés|Leganés]]|2–2 ([[Away goals rule|a]])|[[Real Madrid CF|Real Madrid]]|0–1|2–1
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Valencia3–3 (3–2 pen.)Alavés2–11–2 (s.m.t.)
Atlético Madrid2–5Sevilla1–21–3
Espanyol1–2Barcelona1–00–2
Leganés2–2 (a)Real Madrid0–12–1

Men's national team football

[sunting sumber]
Usage
{{#invoke:Sports series|main|type=NT
|UKR|3–1|SVN|2–0|1–1
|SWE|4–3|DEN|2–1|2–2
|BIH|1–3|IRL|1–1|0–2
|NOR|1–3|HUN|0–1|1–2
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Ukraine Bendera Ukraine3–1 Slovenia2–01–1
Sweden Bendera Sweden4–3 Denmark2–12–2
Bosnia dan Herzegovina Bendera Bosnia dan Herzegovina1–3 Ireland1–10–2
Norway Bendera Norway1–3 Hungary0–11–2

Women's national team football

[sunting sumber]
Usage
{{#invoke:Sports series|main|type=WNT
|SRB|2–3|ISL|1–1|1–2
|HUN|2–10|BEL|1–5|1–5
|BIH|0–10|SWE|0–5|0–5
|CRO|0–8|NOR|0–3|0–5
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Serbia Bendera Serbia2–3 Iceland1–11–2
Hungary Bendera Hungary2–10 Belgium1–51–5
Bosnia dan Herzegovina Bendera Bosnia dan Herzegovina0–10 Sweden0–50–5
Croatia Bendera Croatia0–8 Norway0–30–5

Parameter list

[sunting sumber]

Below is a full list of template parameters. All parameters are optional.

Parameter name Description Type
Templat:TOC tab Determines the type of competition to be featured. Valid values are club (default, for club competitions) or NT (for national team competitions).

Using WNT instead of NT allows for the default flag template being changed to {{fbw}} without setting |flag=. Using MNT acts as an alias for NT. Note that while the documentation will make mention of what setting |type=NT does to the output, it will be equally true for also setting it to WNT or MNT.

String
Templat:TOC tab Determines the flag icon template which will be used in the table. The default for |type=club is {{fbaicon}}, the default for |type=NT is {{fb}}, and the default for |type=WNT is {{fbw}}. If set to a negative value (e.g. n, no, 0), no flags will be displayed for |type=club (this will have no impact if |type=NT). For |type=NT, the text "-rt" is always added to the end of the template name for the first team column, allowing for the flag to be aligned to the right side of the cell.

For |type=club, flags are displayed next to club names, while for |type=NT the national team codes/names are wrapped into the national team flag template. To support national team flag templates that use the first parameter to pass a special value (e.g. for youth team templates, such as {{fbu}} which passes the age level), use a "+" in between the template name and the first parameter value (e.g. |flag=fbu+17 generates code for {{fbu|17|<country>}}).

If the flag template passed through the parameter does not exist, the module will revert to the default values for |type=club or |type=NT.

String
Templat:TOC tab Determines the number of legs that will be displayed in the table, and how many scores are expected to be passed to each row. The default is 2. If set to a negative value (e.g. n, no, 0), the table will display no legs and will be formatted to display the results of single-leg ties (the aggregate column header will then be changed to "Score").

Example 1

[sunting sumber]
Usage
{{#invoke:Sports series|main|legs=5
|[[Arsenal F.C.|Arsenal]]|ENG|6–8|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1|2–2|0–1|2–2
|[[Atlético Madrid]]|ESP|10–11|[[Borussia Dortmund]]|GER|2–1|2–4|2–1|2–4|2–1
|[[Real Madrid CF|Real Madrid]]|ESP|11–11 {{pen|4–3}}|[[Manchester City F.C.|Manchester City]]|ENG|3–3|1–1|3–3|1–1|3–3 {{aet}}
|[[Paris Saint-Germain F.C.|Paris Saint-Germain]]|FRA|14–11|[[FC Barcelona|Barcelona]]|ESP|2–3|4–1|2–3|4–1|2–3
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2 Tempat 3 Tempat 4 Tempat 5
Arsenal England6–8Jerman Bayern Munich2–20–12–20–12–2
Atlético Madrid Sepanyol10–11Jerman Borussia Dortmund2–12–42–12–42–1
Real Madrid Sepanyol11–11 (4–3 pen.)England Manchester City3–31–13–31–13–3 (s.m.t.)
Paris Saint-Germain Perancis14–11Sepanyol Barcelona2–34–12–34–12–3

Example 2

[sunting sumber]
Usage
{{#invoke:Sports series|main|legs=n
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER
|[[Real Madrid CF|Real Madrid]]|ESP|4–4 {{aet}} {{pen|4–3}}|[[Manchester City F.C.|Manchester City]]|ENG
|[[Paris Saint-Germain F.C.|Paris Saint-Germain]]|FRA|6–4|[[FC Barcelona|Barcelona]]|ESP
}}
Output
Pasukan 1JaringanPasukan 2
Arsenal England2–3Jerman Bayern Munich
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund
Real Madrid Sepanyol4–4 (s.m.t.) (4–3 pen.)England Manchester City
Paris Saint-Germain Perancis6–4Sepanyol Barcelona
Number
Templat:TOC tab Automatically enabled by default. To disable, set to a negative value (e.g. n, no, 0). The module automatically bolds the winning team of the tie. First priority is given to the winning team of scores listed inside brackets (which is commonly used to denote the results of a penalty shoot-out). Otherwise, the regular score will be used. If the aggregate scores are level for two-legged ties and no results of penalty shoot-outs are given, the away goals rule will be applied to determine the winning team (unless |away_goals= is used to turn off this feature). In all other cases, if no winner can be determined based on the input, neither team in a given tie will be bolded. String
Templat:TOC tab To enable, set to a positive value (e.g. y, yes, 1). Automatically gives the winning team of the tie with a background color of green (#CCFFCC). First priority is given to the winning team of scores listed inside brackets (which is commonly used to denote the results of a penalty shoot-out). Otherwise, the regular score will be used. If the aggregate scores are level for two-legged ties and no results of penalty shoot-outs are given, the away goals rule will be applied to determine the winning team (unless |away_goals= is used to turn off this feature). In all other cases, if no winner can be determined based on the input, neither team in a given tie will be colored.

When this parameter is enabled for single-leg ties, the score cell of any draws will be automatically given a background color of yellow (#FFFFBB).

String
Templat:TOC tab When set to FBR for single-leg ties, it automatically changes the background color of the score cells based on the result of the match. Home wins are shown in blue (#BBF3FF), draws in yellow (#FFFFBB) and away wins in red (#FFBBBB). A legend for the colors will also be added below the table, and the team column headers will be changed to "Home" and "Away" (as done with |h_a=, making that parameter redundant when FBR is enabled). This functions similar to Module:Sports results. String
Templat:TOC tab To enable, set to a positive value (e.g. y, yes, 1). If set, it collapses the table using mw-collapsed. This results in the table being spread across the entire width of the page.

Example 3

[sunting sumber]
Usage
{{#invoke:Sports series|main|collapsed=y
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER|2–1|2–4
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Arsenal England2–3Jerman Bayern Munich2–20–1
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4
String
Templat:TOC tab Adds a caption to the table.

Example 4

[sunting sumber]
Usage
{{#invoke:Sports series|main|caption=This is a caption
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER|2–1|2–4
}}
Output
This is a caption
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Arsenal England2–3Jerman Bayern Munich2–20–1
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4
String
Templat:TOC tab Adds a title to the table in the form of a table header spanning all columns, placed above the standard column headings.

Example 5

[sunting sumber]
Usage
{{#invoke:Sports series|main|title=This is a title
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER|2–1|2–4
}}
Output
This is a title
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Arsenal England2–3Jerman Bayern Munich2–20–1
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4
String
Templat:TOC tab Adds an anchor to the top of the table which allows direct linking to the table. String
Templat:TOC tab Allows for a custom name to be given to the table for the purposes of transclusion. This is useful when there are multiple instances of this module (or also Module:Sports table) on the same page within transclusion tags, allowing for selective calling of specific tables on another page. When the parameter is set and the module code is placed in between Templat:Xtag tags, other pages transcluding the table and using |transcludesection= will only show tables with a matching |section= and not all tables.

For example, if the article "Example" has this module placed in between Templat:Xtag tags with |section=First round, then the table can be transcluded to other articles using {{:Example|transcludesection=First round}}.

String
Templat:TOC tab To enable, set to a positive value (e.g. y, yes, 1). Adds a nowrap value to the table style. String
Templat:TOC tab Modifies the font size of the table to a given percentage. The percentage sign is optional. Default is 100. Due to MOS:SMALLTEXT, values lower than 85% will be converted to 85%. Number
Templat:TOC tab To enable, set to a positive value (e.g. y, yes, 1). Adds a placeholder flag icon to the space next to a team's name when flag parameters are present in the table, but the parameter for a given team is left blank (for |type=club) or does not contain a flag (for |type=NT). This will have no impact if |flag=false. String
Templat:TOC tab Set to an integer value for the width of the two team columns, in pixels. Default is 250. Number
Templat:TOC tab Set to an integer value for the width of the aggregate score column and each leg score column, in pixels. Default is 80. Number
Templat:TOC tab If set to a negative value (e.g. n, no, 0), the module will not apply the away goals rule for two-legged ties in which the aggregate score is level. Otherwise, by default the module will use the away goals rule to determine the winner. String
Templat:TOC tab Adds a custom heading for the first team column. Default is Team 1. String
Templat:TOC tab Adds a custom heading for the second team column. Default is Team 2. String
Templat:TOC tab To enable, set to a positive value (e.g. y, yes, 1). Changes the default column headers for the teams to "Home" and "Away". If |team1= and/or |team2= is set, those respective parameter(s) will override headers set by |h_a=. String
Templat:TOC tab Adds a custom heading for the aggregate score column. Default is {{Abbrlink|Agg.|Aggregate score}}, unless |legs= is set to a negative value (e.g. n, no, 0), for which the default will be Score. String
Templat:TOC tab Adds a custom heading for the Nth leg column (e.g. |leg1= for the first leg column, |leg3= for the third leg column, etc.). Default is <ordinal> leg (e.g. 1st leg for the first leg column, 3rd leg for the third leg column, etc.).

Example 6

[sunting sumber]
Usage
{{#invoke:Sports series|main|leg1=Game 1|leg2=Second Leg
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER|2–1|2–4
|[[Real Madrid CF|Real Madrid]]|ESP|4–4 {{pen|4–3}}|[[Manchester City F.C.|Manchester City]]|ENG|3–3|1–1 {{aet}}
|[[Paris Saint-Germain F.C.|Paris Saint-Germain]]|FRA|6–4|[[FC Barcelona|Barcelona]]|ESP|2–3|4–1
}}
Output
Pasukan 1Agr.Pasukan 2Game 1Second Leg
Arsenal England2–3Jerman Bayern Munich2–20–1
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4
Real Madrid Sepanyol4–4 (4–3 pen.)England Manchester City3–31–1 (s.m.t.)
Paris Saint-Germain Perancis6–4Sepanyol Barcelona2–34–1
String
Templat:TOC tab Changes the format of the leg score column headings. Instead of using "<ordinal> leg", now the format will be "<leg_prefix> N". Any string can be specified through the parameter to add as a custom prefix. However, when set only to a positive value (e.g. y, yes, 1), the output will default to Leg N. If |legN= is set, this will replace the Nth leg score column heading, overriding the custom prefix.

Example 7

[sunting sumber]
Usage
{{#invoke:Sports series|main|flag=n|legs=7|leg_prefix=Game|aggregate=Series
|[[Golden State Warriors]]|3–4|[[Cleveland Cavaliers]]|104–89|110–77|90–120|108–97|97–112|101–115|89–93
}}
Output
Pasukan 1SeriesPasukan 2GameTempat 1GameTempat 2GameTempat 3GameTempat 4GameTempat 5GameTempat 6GameTempat 7
Golden State Warriors3–4Cleveland Cavaliers104–89110–7790–120108–9797–112101–11589–93

Example 8

[sunting sumber]
Usage
{{#invoke:Sports series|main|leg_prefix=y
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER|2–1|2–4
|[[Real Madrid CF|Real Madrid]]|ESP|4–4 {{pen|4–3}}|[[Manchester City F.C.|Manchester City]]|ENG|3–3|1–1 {{aet}}
|[[Paris Saint-Germain F.C.|Paris Saint-Germain]]|FRA|6–4|[[FC Barcelona|Barcelona]]|ESP|2–3|4–1
}}
Output
Pasukan 1Agr.Pasukan 2Leg 1Leg 2
Arsenal England2–3Jerman Bayern Munich2–20–1
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4
Real Madrid Sepanyol4–4 (4–3 pen.)England Manchester City3–31–1 (s.m.t.)
Paris Saint-Germain Perancis6–4Sepanyol Barcelona2–34–1
String
Templat:TOC tab Adds a custom suffix after the ordinal for the leg score column headings. Default is leg. If |legN= is set, this will replace the Nth leg score column heading, overriding the custom suffix. In addition, |leg_prefix= takes precedence over |leg_suffix=.

Example 9

[sunting sumber]
Usage
{{#invoke:Sports series|main|leg_suffix=match
|[[Arsenal F.C.|Arsenal]]|ENG|2–3|[[FC Bayern Munich|Bayern Munich]]|GER|2–2|0–1
|[[Atlético Madrid]]|ESP|4–5|[[Borussia Dortmund]]|GER|2–1|2–4
|[[Real Madrid CF|Real Madrid]]|ESP|4–4 {{pen|4–3}}|[[Manchester City F.C.|Manchester City]]|ENG|3–3|1–1 {{aet}}
|[[Paris Saint-Germain F.C.|Paris Saint-Germain]]|FRA|6–4|[[FC Barcelona|Barcelona]]|ESP|2–3|4–1
}}
Output
Pasukan 1Agr.Pasukan 2match 1 match 2
Arsenal England2–3Jerman Bayern Munich2–20–1
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4
Real Madrid Sepanyol4–4 (4–3 pen.)England Manchester City3–31–1 (s.m.t.)
Paris Saint-Germain Perancis6–4Sepanyol Barcelona2–34–1
String
Templat:TOC tab Adds a custom heading spanning all columns above the Nth row of the table (e.g. |heading1= for above the first row, |heading20= for above the twentieth row, etc.).

Example 10

[sunting sumber]
Usage
{{#invoke:Sports series|main|type=NT|legs=n|h_a=y|heading1=Semi-finals|heading3=Final
|POL|5–1|EST
|WAL|4–1|FIN
|WAL|0–0 {{aet}} {{pso|4–5}}|POL
}}
Output
RumahJaringanPelawat
Semi-finals
Poland Bendera Poland5–1 Estonia
Wales Bendera Wales4–1 Finland
Final
Wales Bendera Wales0–0 (s.m.t.) (4–5 pen.) Poland
String

Other features/notes

[sunting sumber]

Please note that in order to display a row in the table, at least one cell of said row must have value that is not empty or whitespace. Otherwise, the module will not create a row for that line and all others below it.

Team names/codes

[sunting sumber]

For |type=club, the country codes supplied for each club are by default wrapped into {{fbaicon}}, based on Wikipedia's country data system of templates, and displayed next to each team.

For |type=NT, the national team names/codes supplied are by default wrapped into {{fb}} and {{fb-rt}}, based on Wikipedia's country data system of templates.

Leg scores

[sunting sumber]

If a cell of one of the leg scores contains only null, the cell will not be generated. This is useful for rounds of competitions that have an inconsistent number of legs, for example competitions that have a possible replay or play-off match after two legs.

Usage
{{#invoke:Sports series|main|type=NT|legs=3|leg3=Play-off
|LUX|5–6|DEN|3–3|2–2|0–1
|ESP+1945|7–1|IRL|5–1|2–0|null
|FRA|2–5|HUN|1–3|1–2|null
|SWE|2–4|URS|1–1|1–3|null
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2 Play-off
Luxembourg Bendera Luxembourg5–6 Denmark3–32–20–1
Sepanyol Bendera Sepanyol7–1 Ireland5–12–0
Perancis Bendera Perancis2–5 Hungary1–31–2
Sweden Bendera Sweden2–4 Kesatuan Soviet1–11–3

Quasi-parameters

[sunting sumber]

Plus sign (+) for flag templates/youth level

[sunting sumber]

Some youth national team flag templates, such as {{fbu}}, have an additional parameter to pass the age level to be linked within to template. To accomodate, this module supports within the |flag= parameter the use of a plus sign (+) in between the name of the flag template and the age level. For example, |flag=fbu+17 will generate a flag template in the form of {{fbu|17|<country>}}. This only applies for |type=NT. If the portion before the plus sign is a negative value (e.g. n, no, 0), the default flag template ({{fb}}) will be used.

Usage
{{#invoke:Sports series|main|type=NT|flag=fbu+17
|LUX|5–6|DEN|3–3|2–2
|ESP|7–1|IRL|5–1|2–0
|FRA|2–5|HUN|1–3|1–2
|SWE|2–4|NOR|1–1|1–3
}}
Output
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Luxembourg 5–6 Denmark3–32–2
Sepanyol 7–1 Ireland5–12–0
Perancis 2–5 Hungary1–31–2
Sweden 2–4 Norway1–11–3

Plus sign (+) for country codes/flag variants

[sunting sumber]

To allow for the use of flag variants, this module supports within country parameters (the country code parameter for |type=club, or the national team name/code parameter for |type=NT), the use of a plus sign (+) in between the country name/code and the name of the flag variant.

Usage 1
{{#invoke:Sports series|main|type=NT
|MLT+1943|5–6|GRE+old|3–3|2–2
}}
Output 1
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Malta Bendera Malta5–6 Yunani3–32–2
Usage 2
{{#invoke:Sports series|main
|[[Atlético Madrid]]|ESP+1945|4–5|[[Borussia Dortmund]]|GER+empire|2–1|2–4
}}
Output 2
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Atlético Madrid Sepanyol4–5Jerman Borussia Dortmund2–12–4

Asterick (*) for strings instead of national teams

[sunting sumber]

By default, when |type=NT is set, the team parameters wrap into a flag template. However, it may be desired to pass a plan string to the template without a flag icon, for example as placeholder text for a team that will advance from a prior round. In this case, starting the team parameter with an asterick (*), followed by the text to be displayed, will result in the text showing in that team's cell instead of being wrapped into a flag template. If |fill_blanks= is set to a positive value (e.g. y, yes, 1), a placeholder flag will also be displayed.

Usage 1
{{#invoke:Sports series|main|type=NT
|FRA|2–5|HUN|1–3|1–2
|SWE||*Winner QF1||
}}
Output 1
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Perancis Bendera Perancis2–5 Hungary1–31–2
Sweden Bendera SwedenWinner QF1
Usage 2
{{#invoke:Sports series|main|type=NT|fill_blanks=y
|FRA|2–5|HUN|1–3|1–2
|SWE||*Winner QF1||
}}
Output 2
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Perancis Bendera Perancis2–5 Hungary1–31–2
Sweden Bendera Sweden Winner QF1

Three apostrophes (''') for manual bolding

[sunting sumber]

While the template automatically bolds winning teams (unless |bold_winner=n), in some situations the module will be unable to determine the winner. Or, some users may find it undesirable to have the module bold the winner automatically. In these cases, manual bolding can be used to indicate the winning team of a tie. This is simple to do for |type=club, by placing the three apostrophes before and after the name of the team. Additionally, the module supports using three apostrophes around both sides of the national team name/code for |type=NT. If |bold_winner= is not disabled, the team that is manually bolded will override the winning team as determined by the module. If |color_winner= is also set, the cell of the team that is manually bolded will also be colored.

This may be used in conjunction with the below method by using five apostrophes on either side of a team to bold and color the cell.

(Note: The usage of three apostrophes was slightly modified for the purposes of this module to bold the cell. Therefore, it is not possible to selectively bold parts of the team parameters, while leaving other parts of said parameter unbolded.)

Usage 1
{{#invoke:Sports series|main|type=NT|bold_winner=n
|LUX|5–6|'''DEN'''|3–3|2–3
|'''ESP'''|7–1|IRL|5–1|2–0
|FRA|2–5|'''HUN'''|1–3|1–2
|SWE|2–4|'''NOR'''|1–1|1–3
}}
Output 1
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Luxembourg Bendera Luxembourg5–6 Denmark3–32–3
Sepanyol Bendera Sepanyol7–1 Ireland5–12–0
Perancis Bendera Perancis2–5 Hungary1–31–2
Sweden Bendera Sweden2–4 Norway1–11–3
Usage 2 (third row overrides automatic bolding)
{{#invoke:Sports series|main|type=NT
|SWE|2–4|NOR|1–1|1–3
|LUX|5–5 ([[Away goals rule|a]])|'''DEN'''|3–3|2–2
|ESP|7–1|'''IRL'''|5–1|2–0
}}
Output 2 (third row overrides automatic bolding)
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Sweden Bendera Sweden2–4 Norway1–11–3
Luxembourg Bendera Luxembourg5–5 (a) Denmark3–32–2
Sepanyol Bendera Sepanyol7–1 Ireland5–12–0

Two apostrophes ('') for manual coloring

[sunting sumber]

While the template allows for automatic coloring of the cells of winning teams via |color_winner=y, in some situations (such as matches tied on away goals) the module will be unable to determine the winner. Or, some users may find it undesirable to use |color_winner= to color the winner automatically. In these cases, manual coloring can be used to indicate the winning team of a tie. This is simple to do for |type=club, by placing the two apostrophes before and after the name of the team. Additionally, the module supports using two apostrophes around both sides of the national team name/code for |type=NT. If |color_winner= is set, the cell of team that is manually colored will override the winning team as determined by the module. If |bold_winner= is not disabled, the cell of the team that is manually colored will also be bolded.

This may be used in conjunction with the above method by using five apostrophes on either side of a team to color and bold the cell.

Two apostrophes surrounding an aggregate score (or the score of a single-leg tie) can also be used to manually indicate a draw/tie.

(Note: While two apostrophes surrounding both sides of text are usually used to add italics in wikitext, the usage was modified here to allow for a simple way to color the cell. Therefore, it is not possible to italicize team names or aggregate scores using this formatting.)

Usage 1
{{#invoke:Sports series|main|type=WNT|bold_winner=n
|LUX|5–6|''DEN''|3–3|2–3
|''ESP''|7–1|IRL|5–1|2–0
|FRA|2–5|''HUN''|1–3|1–2
|SWE|2–4|''NOR''|1–1|1–3
}}
Output 1
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Luxembourg Bendera Luxembourg5–6 Denmark3–32–3
Sepanyol Bendera Sepanyol7–1 Ireland5–12–0
Perancis Bendera Perancis2–5 Hungary1–31–2
Sweden Bendera Sweden2–4 Norway1–11–3
Usage 2 (third row overrides automatic coloring)
{{#invoke:Sports series|main|type=WNT|color_winner=y|bold_winner=n
|SWE|2–4|NOR|1–1|1–3
|LUX|5–5 ([[Away goals rule|a]])|''DEN''|3–3|2–2
|ESP|7–1|''IRL''|5–1|2–0
}}
Output 2 (third row overrides automatic coloring)
Pasukan 1Agr.Pasukan 2Tempat 1 Tempat 2
Sweden Bendera Sweden2–4 Norway1–11–3
Luxembourg Bendera Luxembourg5–5 (a) Denmark3–32–2
Sepanyol Bendera Sepanyol7–1 Ireland5–12–0
Usage 3
{{#invoke:Sports series|main|type=WNT|legs=0|bold_winner=n
|LUX|5–6|''DEN''
|''ESP''|7–1|IRL
|FRA|''2–2''|HUN
}}
Output 3
Pasukan 1JaringanPasukan 2
Luxembourg Bendera Luxembourg5–6 Denmark
Sepanyol Bendera Sepanyol7–1 Ireland
Perancis Bendera Perancis2–2 Hungary

See also

[sunting sumber]

-- Modul untuk membina jadual untuk keputusan perlawanan agregat dalam sukan
-- Lihat dokumentasi untuk butiran

local p = {}

-- Berfungsi untuk menghuraikan dan mengembangkan templat dengan parameter yang diberikan
local function expandTemplate(frame, templateName, params)
    return frame:expandTemplate{ title = templateName, args = params }
end

-- Berfungsi untuk menyemak kewujudan templat yang diluluskan melalui |flag=
local function templateExists(templateName)
    local title = mw.title.new('Templat:' .. templateName)
    return title and title.exists
end

-- Berfungsi untuk memproses kod negara dan varian ATAU templat bendera pasukan belia dan tahap umur, membahagikan parameter dengan tanda "+"
local function processIcon(iconString)
    if not iconString or iconString:match("^%s*$") then
        return nil, nil  -- Kembalikan sifar untuk kedua-dua Kod ikon dan varian jika input kosong atau hanya ruang putih
    elseif iconString:find('+') then
        local parts = mw.text.split(iconString, '+', true)
        local iconCode = parts[1]
        local variant = parts[2]
        return iconCode, variant
    else
        return iconString, nil  -- Kembalikan rentetan input sebagai Kod ikon jika tiada "+" hadir
    end
end

-- Berfungsi untuk menentukan akhiran ordinal yang betul untuk nombor yang diberikan untuk tajuk
local function ordinal(n)
    local last_digit = n % 10
    local last_two_digits = n % 100
    if last_digit == 1 and last_two_digits ~= 11 then
        return n .. ' '
    else
        return n .. ' '
    end
end

-- Berfungsi untuk membersihkan dan memproses skor agregat untuk perbandingan
local function cleanScore(score)
    -- Kembalikan rentetan kosong jika markah tiada atau kosong untuk mengelakkan ralat
    if not score or score:match("^%s*$") then
        return ''
    end

    -- Berfungsi untuk menggantikan pautan wiki dengan teks paparan atau teks pautannya
    local function replaceLink(match)
        local pipePos = match:find("|")
        if pipePos then
            return match:sub(pipePos + 1, -3) -- Kembalikan teks selepas '|'
        else
            return match:sub(3, -3) -- Kembalikan teks tanpa kurungan
        end
    end

    -- Gantikan pautan wiki
    score = score:gsub("%[%[.-%]%]", replaceLink)

    -- Alih keluar jujukan pemegang tempat unik MediaWiki untuk rujukan
    score = score:gsub('"`UNIQ.-QINU`"', '')

    -- Alih keluar tag superskrip dan kandungannya
    score = score:gsub('<sup.->.-</sup>', '')

    -- Tukar sempang kepada format standard
    score = score:gsub('[–—―‒−]', '-')

    -- Tanggalkan semua aksara kecuali nombor, sempang dan kurungan
    return score:gsub('[^0-9%-()]+', '')
end

-- Berfungsi untuk menentukan pemenang berdasarkan markah dalam kurungan (pertama) atau format biasa (kedua)
local function determineWinner(cleanAggregate, matchType, team1, team2, boldWinner, colorWinner, aggregate, isFBRStyle, legs, leg1Score, leg2Score, disableAwayGoals)
    local team1Winner, team2Winner = false, false
    local score1, score2
    local manualBold = false
    local manualColor = false
    local isDraw = false

    -- Pengendalian untuk huruf tebal manual
    if team1 and type(team1) == 'string' then
        manualBold1 = team1:find("'''") and not (team1:gsub("'''", ""):match("^%s*$"))
        team1 = team1:gsub("'''", "")
    end
    if team2 and type(team2) == 'string' then
        manualBold2 = team2:find("'''") and not (team2:gsub("'''", ""):match("^%s*$"))
        team2 = team2:gsub("'''", "")
    end

    if manualBold1 then
        team1Winner = true
        manualBold = true
    end
    if manualBold2 then
        team2Winner = true
        manualBold = true
    end

    -- Pengendalian untuk pewarnaan manual sel pasukan atau agregat
    if team1 and type(team1) == 'string' then
        manualColor1 = team1:find("''") and not (team1:gsub("''", ""):match("^%s*$"))
        team1 = team1:gsub("''", "")
    end
    if team2 and type(team2) == 'string' then
        manualColor2 = team2:find("''") and not (team2:gsub("''", ""):match("^%s*$"))
        team2 = team2:gsub("''", "")
    end
    if aggregate then
        if aggregate:find("'''") then
            aggregate = aggregate:gsub("'''", "")
            aggregate = "<strong>" .. aggregate .. "</strong>"
        end
        manualColorDraw = aggregate:find("''") and not (aggregate:gsub("''", ""):match("^%s*$"))
        aggregate = aggregate:gsub("''", "")
    end

    if manualColor1 then
        if not team1Winner then
            team1Winner = true
        end
        manualColor = true
    end
    if manualColor2 then
        if not team2Winner then
            team2Winner = true
        end
        manualColor = true
    end
    if manualColorDraw then
        isDraw = true
        manualColor = true
    end

    -- Logik penentuan pemenang tetap jika huruf tebal atau pewarnaan manual tidak muktamad
    if not team1Winner and not team2Winner and not isDraw and (boldWinner or colorWinner or isFBRStyle) then
        local parenthetical = cleanAggregate:match('%((%d+%-+%d+)%)')
        local outsideParenthetical = cleanAggregate:match('^(%d+%-+%d+)')
        if parenthetical then -- Utamakan skor semak di dalam kurungan
            score1, score2 = parenthetical:match('(%d+)%-+(%d+)')
        elseif outsideParenthetical then
            score1, score2 = outsideParenthetical:match('(%d+)%-+(%d+)')
        end

        if score1 and score2 then
            score1 = tonumber(score1)
            score2 = tonumber(score2)
        
            if score1 > score2 then
                team1Winner = true
            elseif score1 < score2 then
                team2Winner = true
            elseif score1 == score2 and legs == 2 and not disableAwayGoals then
                -- Gunakan peraturan gol tempat lawan
                local cleanLeg1 = cleanScore(leg1Score):gsub('[()]', '')
                local cleanLeg2 = cleanScore(leg2Score):gsub('[()]', '')
                local _, team2AwayGoals = cleanLeg1:match('(%d+)%-+(%d+)')
                local team1AwayGoals = cleanLeg2:match('(%d+)%-+(%d+)')

                if team1AwayGoals and team2AwayGoals then
                    team1AwayGoals, team2AwayGoals = tonumber(team1AwayGoals), tonumber(team2AwayGoals)
            
                    if team1AwayGoals > team2AwayGoals then
                        team1Winner = true
                    elseif team2AwayGoals > team1AwayGoals then
                        team2Winner = true
                    end
                end
            end
    
            if (colorWinner or isFBRStyle) and legs == 0 then
                isDraw = not team1Winner and not team2Winner
            end
        end
    end

    return team1, team2, team1Winner, team2Winner, manualBold, manualColor, isDraw, aggregate
end

-- Berfungsi untuk menyemak sama ada mana-mana parameter dalam baris tertentu adalah bukan sifar dan tidak kosong
local function anyParameterPresent(startIndex, step, args)
    for index = startIndex, startIndex + step - 1 do
        if args[index] and args[index]:match("^%s*(.-)%s*$") ~= "" then
            return true
        end
    end
    return false
end

-- Berfungsi untuk menambah legenda di bawah jadual apabila |matches_style=FBR
local function createFBRLegend()
    return mw.html.create('div')
        :css('font-size', '90%')
        :css('margin-bottom', '0.5em')
        :wikitext("Legend: Blue = home team win; Yellow = draw; Red = away team win.")
end

-- Main function that processes input and returns the wikitable
function p.main(frame)
    local args = require'Module:Arguments'.getArgs(frame, {trim = true})

    -- Check for section transclusion
    local tsection = frame:getParent().args['transcludesection'] or frame:getParent().args['section'] or ''
    local bsection = args['section'] or ''
    if tsection ~= '' and bsection ~= '' then
        if tsection ~= bsection then
            return ''  -- Return an empty string if sections don't match
        end
    end

    local root = mw.html.create()
    local matchType = (args.type == 'WNT' or args.type == 'MNT') and 'NT' or (args.type or 'club')  -- Set default match type to 'club'
    local isWNT = args.type == 'WNT'  -- Track if WNT was set
    local flagTemplate, flagParam1
    local noFlagIcons = false
    local fillBlanks = args.fill_blanks and (args.fill_blanks == 'y' or args.fill_blanks == 'yes' or args.fill_blanks == '1' or args.fill_blanks == 'true')

    -- Process the font size parameter
    local size
    if args.font_size then
        -- Remove trailing '%' if present and convert to number
        size = tonumber((args.font_size:gsub('%s*%%$', '')))
        if size then
            size = math.max(size, 85)  -- Ensure size is at least 85
        end
    end

    -- Process flag parameter to determine flag template and variant
    if args.flag and args.flag:find('+') then
        flagTemplate, flagParam1 = processIcon(args.flag)  -- Process flag icons with variants
    else
        if args.flag then
            flagTemplate = args.flag
        elseif isWNT then
            flagTemplate = 'fbw'  -- Default to {{fbw}} for WNT matches
        elseif matchType == 'NT' then
            flagTemplate = 'fb'  -- Default to {{fb}} for NT/MNT matches
        else
            flagTemplate = 'fbaicon'  -- Default to {{fbaicon}} for club matches
        end
    end

    if args.flag and (flagTemplate == 'n' or flagTemplate == 'no' or flagTemplate == '0' or flagTemplate == 'false' or flagTemplate == 'null' or flagTemplate == 'none' or flagTemplate == 'noflag') then
        noFlagIcons = true  -- Hide flag icons for club matches
        if matchType == 'NT' then
            flagTemplate = isWNT and 'fbw' or 'fb'  -- Set flagTemplate to "fbw"/"fb", as disabling flags is not allowed for NT
            flagParam1 = false
        end
    end

    -- Check if flagTemplate exists and adjust if necessary
    if matchType == 'NT' and (flagTemplate ~= 'fb' and flagTemplate ~= 'fbw') then
        if not templateExists(flagTemplate) or not templateExists(flagTemplate .. '-rt') then
            flagTemplate = isWNT and 'fbw' or 'fb'
        end
    elseif not noFlagIcons and flagTemplate ~= 'fbaicon' then
        if not templateExists(flagTemplate) then
            flagTemplate = 'fbaicon'
        end
    end

    local legs = (args.legs == '1' or args.legs == 'n' or args.legs == 'no' or args.legs == 'false' or args.legs == 'null' or args.legs == 'none' or args.legs == 'single' or args.legs == 'one') and 0 or tonumber(args.legs) or 2
    if legs and legs < 0 then
        legs = 2
    end
    local teamWidth = (tonumber(args['team_width']) and args['team_width'] .. 'px') or '250px'
    local scoreWidth = (tonumber(args['score_width']) and args['score_width'] .. 'px') or '80px'
    local boldWinner = not (args.bold_winner == 'n' or args.bold_winner == 'no' or args.bold_winner == '0' or args.bold_winner == 'false' or args.bold_winner == 'null')
    local colorWinner = args.color_winner and (args.color_winner == 'y' or args.color_winner == 'yes' or args.color_winner == '1' or args.color_winner == 'true')
    local matchesStyle = args.matches_style
    local isFBRStyle = matchesStyle and matchesStyle:upper() == "FBR"
    local isHA = args.h_a == 'y' or args.h_a == 'yes' or args.h_a == '1' or args.h_a == 'true'
    local disableAwayGoals = args.away_goals == 'n' or args.away_goals == 'no' or args.away_goals == '0' or args.away_goals == 'false' or args.away_goals == 'null'

    local tableClass = 'wikitable'
    local tableStyle = 'text-align: center;'
    if args.collapsed and (args.collapsed == 'y' or args.collapsed == 'yes' or args.collapsed == '1' or args.collapsed == 'true') then
        tableClass = 'wikitable mw-collapsible mw-collapsed'
        tableStyle = 'width: 100%; text-align: center;'
    end
    if args.nowrap and (args.nowrap == 'y' or args.nowrap == 'yes' or args.nowrap == '1' or args.nowrap == 'true') then
        tableStyle = tableStyle .. ' white-space: nowrap;'
    end
    if size then
        tableStyle = tableStyle .. ' font-size: ' .. size .. '%;'
    end

    -- Create the table element
    local table = root:tag('table')
        :addClass(tableClass)
        :cssText(tableStyle)
    if args.id then
        table:attr('id', args.id)  -- Optional id parameter to allow anchor to table
    end

    -- Add FBR legend if isFBRStyle is true
    if isFBRStyle and legs == 0 then
        root:node(createFBRLegend())
        isHA = true
    end

    -- Add a caption to table if the "caption" parameter is passed
    if args.caption then
        table:tag('caption'):wikitext(args.caption)
    end

    -- Count number of columns
    local colCount = 3 + legs

    -- Add a title row above column headings if the "title" parameter is passed
    if args.title then
        local titleRow = table:tag('tr')
        titleRow:tag('th')
            :attr('colspan', colCount)
            :attr('scope', 'colgroup')
            :css('text-align', 'center')
            :wikitext(args.title)
    end

    -- Create the header row with team and score columns
    local header = table:tag('tr')
    local defaultTeam1 = isHA and 'Rumah' or 'Pasukan 1'
    local defaultTeam2 = isHA and 'Pelawat' or 'Pasukan 2'
    header:tag('th')
        :attr('scope', 'col')
        :css('text-align', 'right')
        :css('width', teamWidth)
        :wikitext(args['team1'] or defaultTeam1)
    header:tag('th')
        :attr('scope', 'col')
        :css('width', scoreWidth)
        :wikitext(args['aggregate'] or legs == 0 and 'Jaringan' or expandTemplate(frame, 'Abbrlink', {'Agr.', 'Keputusan agregat'}))
    header:tag('th')
        :attr('scope', 'col')
        :css('text-align', 'left')
        :css('width', teamWidth)
        :wikitext(args['team2'] or defaultTeam2)

    -- Add columns for each leg if applicable
    if legs > 0 then
        for leg = 1, legs do
            local legHeading

            -- Check if "legN" parameter is present
            if args['leg' .. leg] then
                legHeading = args['leg' .. leg]
            else
                -- Check if "leg_prefix" parameter is present
                if args.leg_prefix then
                    -- Check if leg_prefix is y, yes, 1, or true
                    if args.leg_prefix == 'y' or args.leg_prefix == 'yes' or args.leg_prefix == '1' or args.leg_prefix == 'true' then
                        legHeading = 'Leg ' .. leg
                    else
                        legHeading = args.leg_prefix .. 'Tempat ' .. leg
                    end
                -- Check if "leg_suffix" parameter is present and does not equal y, yes, 1, or true
                elseif args.leg_suffix and args.leg_suffix ~= 'y' and args.leg_suffix ~= 'yes' and args.leg_suffix ~= '1' and args.leg_suffix ~= 'true' then
                    legHeading = args.leg_suffix .. ' ' .. ordinal(leg)
                else
                    legHeading = 'Tempat ' .. ordinal(leg)
                end
            end

            header:tag('th')
                :attr('scope', 'col')
                :css('width', scoreWidth)
                :wikitext(legHeading)
        end
    end

    local step = (matchType == 'NT' and 3 or (noFlagIcons and 3 or 5)) + legs  -- Determine the step size based on the match type and presence of flag icons
    local i = 1
    while anyParameterPresent(i, step, args) do
        local rowIndex = math.floor((i - 1) / step) + 1
        local headingParam = args['heading' .. rowIndex]
        -- Add a heading above a given row in the table
        if headingParam then
            local headingRow = table:tag('tr')
            headingRow:tag('td')
                :attr('colspan', colCount)
                :css('text-align', 'center')
                :css('background', 'whitesmoke')
                :wikitext('<strong>' .. headingParam .. '</strong>')
        end

        local row = table:tag('tr')
        local team1, aggregateScore, team2
        local team1Winner, team2Winner, manualBold, manualColor, isDraw = false, false, false, false, false
        local leg1Score, leg2Score = false, false
        local team1Asterick, team2Asterick = false, false

        -- Process rows for national team matches
        if matchType == 'NT' then
        	-- Check if team parameter beings with an asterick instead of a country code, indicating a string will be displayed instead of national team flag
            team1 = args[i]
            if team1 and team1:match("^%s*%*") then
                team1 = team1:gsub("^%s*%*", "")
                team1Asterick = true
            else
                team1, team1Variant = processIcon(args[i])
            end
            aggregateScore = args[i+1]
            team2 = args[i+2]
            if team2 and team2:match("^%s*%*") then
                team2 = team2:gsub("^%s*%*", "")
                team2Asterick = true
            else
                team2, team2Variant = processIcon(args[i+2])
            end

            -- Clean the aggregate score
            local cleanAggregate = cleanScore(aggregateScore)
            -- Name the 1st/2nd leg scores for two-legged ties for possibly determining the winner on away goals
            if legs == 2 then
                leg1Score = args[i+3]
                leg2Score = args[i+4]
            end
            -- Determine the winning team on aggregate
            team1, team2, team1Winner, team2Winner, manualBold, manualColor, isDraw, aggregateScore = determineWinner(cleanAggregate, matchType, team1, team2, boldWinner, colorWinner, aggregateScore, isFBRStyle, legs, leg1Score, leg2Score, disableAwayGoals)
            -- Add background-color for winning team if set by user
            local team1Style = team1Winner and ((colorWinner or manualColor) and 'background-color: #CCFFCC;' or '') .. 'text-align: right;' or 'text-align: right;'
            local team2Style = team2Winner and ((colorWinner or manualColor) and 'background-color: #CCFFCC;' or '') .. 'text-align: left;' or 'text-align: left;'
            -- Generate text to display for each team
            local team1Text, team2Text
            if flagParam1 then  -- Check whether youth team flag template with age level is used
                team1Text = (not team1Asterick and team1 ~= "" and team1 ~= nil) and (expandTemplate(frame, flagTemplate .. '-rt', {flagParam1, team1, variant = team1Variant})) or (team1 ~= nil and team1 or "")
                team2Text = (not team2Asterick and team2 ~= "" and team2 ~= nil) and (expandTemplate(frame, flagTemplate, {flagParam1, team2, variant = team2Variant})) or (team2 ~= nil and team2 or "")
            else  -- Use standard national team flag template without age level
                team1Text = (not team1Asterick and team1 ~= "" and team1 ~= nil) and (expandTemplate(frame, flagTemplate .. '-rt', {team1, variant = team1Variant})) or (team1 ~= nil and team1 or "")
                team2Text = (not team2Asterick and team2 ~= "" and team2 ~= nil) and (expandTemplate(frame, flagTemplate, {team2, variant = team2Variant})) or (team2 ~= nil and team2 or "")
            end
            -- When set by user, adds blank flags when string is used for a team instead of national team flag template
            if fillBlanks then
                if team1Asterick then
                    team1Text = team1Text .. ' <span class="flagicon">[[File:Flag placeholder.svg|25x17px|link=]]</span>'
                end
                if team2Asterick then
                    team2Text = '<span class="flagicon">[[File:Flag placeholder.svg|25x17px|link=]]</span> ' .. team2Text
                end
            end
            -- Create aggregate score cell with conditional styling
            local aggregateStyle = 'text-align: center;'
            if isFBRStyle and legs == 0 then
                if team1Winner then
                    aggregateStyle = aggregateStyle .. '; background-color: #BBF3FF;'
                elseif team2Winner then
                    aggregateStyle = aggregateStyle .. '; background-color: #FFBBBB;'
                elseif isDraw then
                    aggregateStyle = aggregateStyle .. '; background-color: #FFFFBB;'
                end
            elseif isDraw then
                aggregateStyle = aggregateStyle .. '; background-color: #FFFFBB;'
            end
            -- Create rows for aggregate score and team names, bolded if set by user
            row:tag('td'):cssText(team1Style):wikitext((team1Winner and (boldWinner or manualBold) and team1Text ~= '') and ('<strong>' .. team1Text .. '</strong>') or team1Text)
            row:tag('td'):cssText(aggregateStyle):wikitext(aggregateScore)
            row:tag('td'):cssText(team2Style):wikitext((team2Winner and (boldWinner or manualBold) and team2Text ~= '') and ('<strong>' .. team2Text .. '</strong>') or team2Text)
        else
            -- Process rows for club matches
            team1 = args[i]
            if noFlagIcons then  -- Remove use of flag icons if set by user
                aggregateScore = args[i+1]
                team2 = args[i+2]
            else
                team1Icon, team1Variant = processIcon(args[i+1])
                aggregateScore = args[i+2]
                team2 = args[i+3]
                team2Icon, team2Variant = processIcon(args[i+4])
            end
            -- Clean the aggregate score
            local cleanAggregate = cleanScore(aggregateScore)
            -- Name the 1st/2nd leg scores for two-legged ties for possibly determining the winner on away goals
            if legs == 2 then
            	if noFlagIcons then
                    leg1Score = args[i+3]
                    leg2Score = args[i+4]
                else
                    leg1Score = args[i+5]
                    leg2Score = args[i+6]
                end
            end
            -- Determine the winning team on aggregate
            team1, team2, team1Winner, team2Winner, manualBold, manualColor, isDraw, aggregateScore = determineWinner(cleanAggregate, matchType, team1, team2, boldWinner, colorWinner, aggregateScore, isFBRStyle, legs, leg1Score, leg2Score, disableAwayGoals)
            -- Add background-color for winning team if set by user
            local team1Style = team1Winner and ((colorWinner or manualColor) and 'background-color: #CCFFCC;' or '') .. 'text-align: right;' or 'text-align: right;'
            local team2Style = team2Winner and ((colorWinner or manualColor) and 'background-color: #CCFFCC;' or '') .. 'text-align: left;' or 'text-align: left;'
            -- Generate text, and flags (if not disabled), to display for each team
            local team1Text = noFlagIcons and (team1 or '') or ((team1Icon ~= "" and team1Icon ~= nil) and ((team1 or '') .. ' ' .. expandTemplate(frame, flagTemplate, {team1Icon, variant = team1Variant})) or (team1 or ''))
            local team2Text = noFlagIcons and (team2 or '') or ((team2Icon ~= "" and team2Icon ~= nil) and (expandTemplate(frame, flagTemplate, {team2Icon, variant = team2Variant}) .. ' ' .. (team2 or '')) or (team2 or ''))
            -- When set by user, adds blank flags when country code parameter is left blank
            if fillBlanks then
                if not noFlagIcons then
                    if not team1Icon or team1Icon == "" then
                        team1Text = team1Text .. ' <span class="flagicon">[[File:Flag placeholder.svg|25x17px|link=]]</span>'
                    end
                    if not team2Icon or team2Icon == "" then
                        team2Text = '<span class="flagicon">[[File:Flag placeholder.svg|25x17px|link=]]</span> ' .. team2Text
                    end
                end
            end
            -- Create aggregate score cell with conditional styling
            local aggregateStyle = 'text-align: center;'
            if isFBRStyle and legs == 0 then
                if team1Winner then
                    aggregateStyle = aggregateStyle .. '; background-color: #BBF3FF;'
                elseif team2Winner then
                    aggregateStyle = aggregateStyle .. '; background-color: #FFBBBB;'
                elseif isDraw then
                    aggregateStyle = aggregateStyle .. '; background-color: #FFFFBB;'
                end
            elseif isDraw then
                aggregateStyle = aggregateStyle .. '; background-color: #FFFFBB;'
            end
            -- Create rows for aggregate score and team names, bolded if set by user
            row:tag('td'):cssText(team1Style):wikitext((team1Winner and (boldWinner or manualBold)) and '<strong>' .. team1Text .. '</strong>' or team1Text)
            row:tag('td'):cssText(aggregateStyle):wikitext(aggregateScore)
            row:tag('td'):cssText(team2Style):wikitext((team2Winner and (boldWinner or manualBold)) and '<strong>' .. team2Text .. '</strong>' or team2Text)
        end

        -- Add columns for each leg score if applicable
        if legs > 0 then
            for leg = 1, legs do
                local legIndex = i + 4 + leg + (matchType == 'NT' and -2 or (noFlagIcons and -2 or 0))
                local legScore = args[legIndex]
                if legScore ~= "null" then
                    row:tag('td'):css('text-align', 'center'):wikitext(legScore)
                end
            end
        end

        i = i + step
    end

    return tostring(root)
end

return p