Mô đun:Sports series
Mô đun này được đánh giá là trong giai đoạn beta, và đã sẵn sàng để sử dụng rộng rãi. Nó vẫn còn mới và nên được sử dụng một cách thận trọng để đảm bảo đạt được kết quả như mong đợi. |
This is a module for generating match results for a sports series, such as a two-legged tie. However, the module can support single-match ties up to an unlimited number of legs. The template supports domestic and international club matches, as well as national team matches. While deisgned for association football, it can be used for any sport that features a series between teams.
Cách sử dụng
sửaIn its simplest form, only a few parameters are needed to build a table.
Câu lạc bộ bóng đá quốc tế
sửaFor 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 }}
Câu lạc bộ bóng đá trong nước
sửaFor 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 }}
Đội tuyển bóng đá quốc gia
sửaFor 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.
- Nam
{{#invoke:Sports series|main|type=NT |first_nation|aggregate|second_nation|first_leg|second_leg }}
- Nữ
{{#invoke:Sports series|main|type=WNT |first_nation|aggregate|second_nation|first_leg|second_leg }}
Ví dụ
sửaCâu lạc bộ bóng đá quốc tế
sửa- Cách sử dụng
{{#invoke:Sports series|main|bold_winner=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 }}
- Đầu ra
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Arsenal | 2–3 | Bayern Munich | 2–2 | 0–1 |
Atlético Madrid | 4–5 | Borussia Dortmund | 2–1 | 2–4 |
Real Madrid | 4–4 (4–3 p) | Manchester City | 3–3 | 1–1 (s.h.p.) |
Paris Saint-Germain | 6–4 | Barcelona | 2–3 | 4–1 |
Câu lạc bộ bóng đá trong nước
sửa- Cách sử dụng
{{#invoke:Sports series|main|bold_winner=y|flag=n |[[Real Madrid CF|Real Madrid]]|7–3|[[Girona FC|Girona]]|4–2|3–1 |[[Getafe CF|Getafe]]|2–3|[[Valencia CF|Valencia]]|1–0|1–3 |[[Sevilla FC|Sevilla]]|3–6|[[FC Barcelona|Barcelona]]|2–0|1–6 |[[RCD Espanyol|Espanyol]]|2–4|[[Real Betis]]|1–1|1–3 {{aet}} }}
- Đầu ra
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Real Madrid | 7–3 | Girona | 4–2 | 3–1 |
Getafe | 2–3 | Valencia | 1–0 | 1–3 |
Sevilla | 3–6 | Barcelona | 2–0 | 1–6 |
Espanyol | 2–4 | Real Betis | 1–1 | 1–3 (s.h.p.) |
Đội tuyển bóng đá nam quốc gia
sửa- Cách sử dụng
{{#invoke:Sports series|main|type=NT|bold_winner=y |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 }}
- Đầu ra
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Ukraina | 3–1 | Slovenia | 2–0 | 1–1 |
Thụy Điển | 4–3 | Đan Mạch | 2–1 | 2–2 |
Bosna và Hercegovina | 1–3 | Cộng hòa Ireland | 1–1 | 0–2 |
Na Uy | 1–3 | Hungary | 0–1 | 1–2 |
Đội tuyển bóng đá nữ quốc gia
sửa- Cách sử dụng
{{#invoke:Sports series|main|type=WNT|bold_winner=y |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 }}
- Đầu ra
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Serbia | 2–3 | Iceland | 1–1 | 1–2 |
Hungary | 2–10 | Bỉ | 1–5 | 1–5 |
Bosna và Hercegovina | 0–10 | Thụy Điển | 0–5 | 0–5 |
Croatia | 0–8 | Na Uy | 0–3 | 0–5 |
Danh sách tham số
sửaDưới đây là danh sách đầy đủ của các tham số bản mẫu. Tất cả các tham số đều là tùy chọn.
Tên tham số | Miêu tả | Dạng | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
type
|
Determines the type of competition to be featured. Valid values are club (default, for club competitions) or NT (for national team competitions).
Using |
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
flag
|
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 If the flag template passed through the parameter does not exist, the module will revert to the default values for |
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
legs
|
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 1sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
Example 2sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
|
Number | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
bold_winner
|
To enable, set to a positive value (e.g. y, yes, 1). 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 (such as ties decided on away goals) or no winner can be determined based on the input, neither team in a given tie will be bolded. | String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
color_winner
|
To enable, set to a positive value (e.g. y, yes, 1). Automatically colors 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 (such as ties decided on away goals) or no winner can be determined based on the input, neither team in a given tie will be colored. | String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
collapsed
|
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 3sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
caption
|
Adds a caption to the table.
Example 4sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
title
|
Adds a title to the table in the form of a table header spanning all columns, placed above the standard column headings.
Example 5sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
id
|
Adds an anchor to the top of the table which allows direct linking to the table. | String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
nowrap
|
To enable, set to a positive value (e.g. y, yes, 1). Adds a nowrap value to the table style. | String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
fill_blanks
|
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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
team_width
|
Set to an integer value for the width of the two team columns, in pixels. Default is 250 .
|
Number | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
score_width
|
Set to an integer value for the width of the aggregate score column and each leg score column, in pixels. Default is 80 .
|
Number | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
team1
|
Adds a custom heading for the first team column. Default is Team 1 .
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
team2
|
Adds a custom heading for the second team column. Default is Team 2 .
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
h_a
|
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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
aggregate
|
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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
legN
|
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 6sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
leg_prefix
|
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 Đầu ra will default to Leg N . If |legN= is set, this will replace the Nth leg score column heading, overriding the custom prefix.
Example 7sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
Example 8sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
leg_suffix
|
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 9sửa
{{#invoke:Sports series|main|bold_winner=y|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 }}
|
String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
headingN
|
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 10sửa
{{#invoke:Sports series|main|type=NT|legs=n|h_a=y|bold_winner=y|heading1=Semi-finals|heading3=Final |POL|5–1|EST |WAL|4–1|FIN |WAL|0–0 {{aet}} {{pso|4–5}}|POL }}
|
String |
Other features/notes
sửaPlease 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
sửaFor |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
sửaIf 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.
- Cách sử dụng
{{#invoke:Sports series|main|type=NT|legs=3|bold_winner=y|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 }}
- Đầu ra
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 | Lượt trận 3 |
---|---|---|---|---|---|
Luxembourg | 5–6 | Đan Mạch | 3–3 | 2–2 | 0–1 |
Tây Ban Nha | 7–1 | Cộng hòa Ireland | 5–1 | 2–0 | |
Pháp | 2–5 | Hungary | 1–3 | 1–2 | |
Thụy Điển | 2–4 | Liên Xô | 1–1 | 1–3 |
Quasi-parameters
sửaPlus sign (+) for flag templates/youth level
sửaSome 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.
- Cách sử dụng
{{#invoke:Sports series|main|type=NT|flag=fbu+17|bold_winner=y |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 }}
- Đầu ra
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Luxembourg | 5–6 | Đan Mạch | 3–3 | 2–2 |
Tây Ban Nha | 7–1 | Cộng hòa Ireland | 5–1 | 2–0 |
Pháp | 2–5 | Hungary | 1–3 | 1–2 |
Thụy Điển | 2–4 | Na Uy | 1–1 | 1–3 |
Plus sign (+) for country codes/flag variants
sửaTo 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.
- Cách sử dụng 1
{{#invoke:Sports series|main|type=NT|bold_winner=y |MLT+1943|5–6|GRE+old|3–3|2–2 }}
- Đầu ra 1
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Malta | 5–6 | Hy Lạp | 3–3 | 2–2 |
- Cách sử dụng 2
{{#invoke:Sports series|main|bold_winner=y |[[Atlético Madrid]]|ESP+1945|4–5|[[Borussia Dortmund]]|GER+empire|2–1|2–4 }}
- Đầu ra 2
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Atlético Madrid | 4–5 | Borussia Dortmund | 2–1 | 2–4 |
Asterick (*) for strings instead of national teams
sửaBy 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.
- Cách sử dụng 1
{{#invoke:Sports series|main|type=NT|bold_winner=y |FRA|2–5|HUN|1–3|1–2 |SWE||*Winner QF1|| }}
- Đầu ra 1
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Pháp | 2–5 | Hungary | 1–3 | 1–2 |
Thụy Điển | Winner QF1 |
- Cách sử dụng 2
{{#invoke:Sports series|main|type=NT|bold_winner=y|fill_blanks=y |FRA|2–5|HUN|1–3|1–2 |SWE||*Winner QF1|| }}
- Đầu ra 2
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Pháp | 2–5 | Hungary | 1–3 | 1–2 |
Thụy Điển | Winner QF1 |
Three apostrophes (''') for manual bolding
sửaWhile the template allows for automatic bolding of winning teams via |bold_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 |bold_winner=
to determine 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 set, 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.
- Cách sử dụng 1
{{#invoke:Sports series|main|type=NT |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 }}
- Đầu ra 1
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Luxembourg | 5–6 | Đan Mạch | 3–3 | 2–3 |
Tây Ban Nha | 7–1 | Cộng hòa Ireland | 5–1 | 2–0 |
Pháp | 2–5 | Hungary | 1–3 | 1–2 |
Thụy Điển | 2–4 | Na Uy | 1–1 | 1–3 |
- Cách sử dụng 2 (third row overrides
|bold_winner=
)
{{#invoke:Sports series|main|type=NT|bold_winner=y |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 }}
- Đầu ra 2 (third row overrides
|bold_winner=
)
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Thụy Điển | 2–4 | Na Uy | 1–1 | 1–3 |
Luxembourg | 5–5 (a) | Đan Mạch | 3–3 | 2–2 |
Tây Ban Nha | 7–1 | Cộng hòa Ireland | 5–1 | 2–0 |
Two apostrophes ('') for manual coloring
sửaWhile 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 determine 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 also set, the cell of the team that is manually colored will also be bolded.
This may be used in conjunction with the below method by using five apostrophes on either side of a team to color and bold the cell.
(Note: While two apostrophes surrounding both sides of text are usually used to add italics in wikitext, the Cách sử dụng was modified here to allow for a simple way to color the cell. Therefore, it is not possible to italicize team names using this formatting.)
- Cách sử dụng 1
{{#invoke:Sports series|main|type=WNT |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 }}
- Đầu ra 1
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Luxembourg | 5–6 | Đan Mạch | 3–3 | 2–3 |
Tây Ban Nha | 7–1 | Cộng hòa Ireland | 5–1 | 2–0 |
Pháp | 2–5 | Hungary | 1–3 | 1–2 |
Thụy Điển | 2–4 | Na Uy | 1–1 | 1–3 |
- Cách sử dụng 2 (third row overrides
|color_winner=
)
{{#invoke:Sports series|main|type=WNT|color_winner=y |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 }}
- Đầu ra 2 (third row overrides
|color_winner=
)
Đội 1 | TTS. | Đội 2 | Lượt trận 1 | Lượt trận 2 |
---|---|---|---|---|
Thụy Điển | 2–4 | Na Uy | 1–1 | 1–3 |
Luxembourg | 5–5 (a) | Đan Mạch | 3–3 | 2–2 |
Tây Ban Nha | 7–1 | Cộng hòa Ireland | 5–1 | 2–0 |
Xem thêm
sửa
local p = {}
-- Function to parse and expand a template with given parameters
local function expandTemplate(frame, templateName, params)
return frame:expandTemplate{ title = templateName, args = params }
end
local function templateExists(templateName)
local title = mw.title.new('Template:' .. templateName)
return title and title.exists
end
-- Function to process country codes and variants OR youth team flag templates and age level, dividing parameters by the "+" sign
local function processIcon(iconString)
if not iconString or iconString:match("^%s*$") then
return nil, nil -- Return nil for both iconCode and variant if the input is empty or only whitespace
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 -- Return the input string as iconCode if no "+" is present
end
end
-- Function to determine the correct ordinal suffix for a given number for the heading
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 .. 'st'
elseif last_digit == 2 and last_two_digits ~= 12 then
return n .. 'nd'
elseif last_digit == 3 and last_two_digits ~= 13 then
return n .. 'rd'
else
return n .. 'th'
end
end
-- Function to clean and process the aggregate score for comparison
local function cleanScore(score)
-- Return an empty string if score is nil or empty to avoid errors
if not score or score:match("^%s*$") then
return ''
end
-- Function to replace wiki links with their display text or link text
local function replaceLink(match)
local pipePos = match:find("|")
if pipePos then
return match:sub(pipePos + 1, -3) -- Return text after the '|'
else
return match:sub(3, -3) -- Return text without the brackets
end
end
-- Replace wiki links
score = score:gsub("%[%[.-%]%]", replaceLink)
-- Remove MediaWiki's unique placeholder sequences for references
score = score:gsub('"`UNIQ.-QINU`"', '')
-- Remove superscript tags and their contents
score = score:gsub('<sup.->.-</sup>', '')
-- Convert dashes to a standard format
score = score:gsub('[–—―‒−]', '-')
-- Strip all characters except numbers, dashes and parentheses
return score:gsub('[^0-9%-()]+', '')
end
-- Function to determine the winner based on scores within parentheses (first) or regular format (second)
local function determineWinner(cleanScore, matchType, team1, team2, boldWinner, colorWinner)
local team1Winner, team2Winner = false, false
local score1, score2
local manualBold = false
local manualColor = false
-- Handling for manual bolding
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
-- Handling for manual coloring
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 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
-- Additional check for empty team names in NT matches
if matchType == 'NT' and ((not team1 or team1:match("^%s*$")) or (not team2 or team2:match("^%s*$"))) then
-- Skip further processing if either team name is effectively empty
return team1, team2, team1Winner, team2Winner, manualBold, manualColor
end
-- Regular winner determination logic if manual bolding or coloring is not conclusive
if not team1Winner and not team2Winner and (boldWinner or colorWinner) then
local parenthetical = cleanScore:match('%((%d+%-+%d+)%)')
local outsideParenthetical = cleanScore:match('^(%d+%-+%d+)')
if parenthetical then
score1, score2 = parenthetical:match('(%d+)%-+(%d+)')
elseif outsideParenthetical then
score1, score2 = outsideParenthetical:match('(%d+)%-+(%d+)')
end
if score1 and score2 then
team1Winner = tonumber(score1) > tonumber(score2)
team2Winner = tonumber(score1) < tonumber(score2)
end
end
return team1, team2, team1Winner, team2Winner, manualBold, manualColor
end
-- Function to check if any parameter in a given row is non-nil and non-empty
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
-- Main function that processes input and returns the wikitable
function p.main(frame)
local args = require'Module:Arguments'.getArgs(frame, {trim = true})
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 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
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 = args.bold_winner and (args.bold_winner == 'y' or args.bold_winner == 'yes' or args.bold_winner == '1' or args.bold_winner == 'true')
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 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
-- 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 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)
:css('text-align', 'center')
:wikitext(args.title)
end
-- Create the header row with team and score columns
local header = table:tag('tr')
local defaultTeam1 = (args.h_a == 'y' or args.h_a == 'yes' or args.h_a == '1' or args.h_a == 'true') and 'Sân nhà' or 'Đội 1'
local defaultTeam2 = (args.h_a == 'y' or args.h_a == 'yes' or args.h_a == '1' or args.h_a == 'true') and 'Sân khách' or 'Đội 2'
header:tag('th'):css('text-align', 'right'):css('width', teamWidth):wikitext(args['team1'] or defaultTeam1)
header:tag('th'):css('width', scoreWidth):wikitext(args['aggregate'] or legs == 0 and 'Tỷ số' or expandTemplate(frame, 'Abbrlink', {'TTS.', 'Tổng tỷ số'}))
header:tag('th'):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['Lượt trận' .. leg] then
legHeading = args['Lượt trận' .. 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 = 'Lượt trận ' .. leg
else
legHeading = args.leg_prefix .. ' ' .. 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 = ordinal(leg) .. ' ' .. args.leg_suffix
else
legHeading = 'Lượt trận ' .. leg
end
end
header:tag('th'):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 = false, false, 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)
-- Determine the winning team on aggregate
team1, team2, team1Winner, team2Winner, manualBold, manualColor = determineWinner(cleanAggregate, matchType, team1, team2, boldWinner, colorWinner)
-- 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
team2Text = (not team2Asterick and team2 ~= "" and team2 ~= nil) and (expandTemplate(frame, flagTemplate, {flagParam1, team2, variant = team2Variant})) or team2
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
team2Text = (not team2Asterick and team2 ~= "" and team2 ~= nil) and (expandTemplate(frame, flagTemplate, {team2, variant = team2Variant})) or team2
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 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'):css('text-align', 'center'):css('width', scoreWidth):wikitext(aggregateScore)
row:tag('td'):cssText(team2Style):wikitext((team2Winner and (boldWinner or manualBold)) 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)
-- Determine the winning team on aggregate
team1, team2, team1Winner, team2Winner, manualBold, manualColor = determineWinner(cleanAggregate, matchType, team1, team2, boldWinner, colorWinner)
-- 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 (team1Icon ~= "" and team1Icon ~= nil) and (team1 .. ' ' .. expandTemplate(frame, flagTemplate, {team1Icon, variant = team1Variant})) or team1
local team2Text = noFlagIcons and team2 or (team2Icon ~= "" and team2Icon ~= nil) and (expandTemplate(frame, flagTemplate, {team2Icon, variant = team2Variant}) .. ' ' .. team2) or team2
-- 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 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'):css('text-align', 'center'):css('width', scoreWidth):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'):css('width', scoreWidth):wikitext(legScore)
end
end
end
i = i + step
end
return tostring(root)
end
return p