Tài liệu mô đun[xem] [sửa] [lịch sử] [làm mớ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ửa

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

Câu lạc bộ bóng đá quốc tế

sửa

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
}}

Câu lạc bộ bóng đá trong nước

sửa

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
}}

Đội tuyển bóng đá quốc gia

sửa

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.

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ửa

Câ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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Arsenal Anh2–3Đức Bayern Munich2–20–1
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4
Real Madrid Tây Ban Nha4–4 (4–3 p)Anh Manchester City3–31–1 (s.h.p.)
Paris Saint-Germain Pháp6–4Tây Ban Nha Barcelona2–34–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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Real Madrid7–3Girona4–23–1
Getafe2–3Valencia1–01–3
Sevilla3–6Barcelona2–01–6
Espanyol2–4Real Betis1–11–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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Ukraina 3–1 Slovenia2–01–1
Thụy Điển 4–3 Đan Mạch2–12–2
Bosna và Hercegovina 1–3 Cộng hòa Ireland1–10–2
Na Uy 1–3 Hungary0–11–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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Serbia 2–3 Iceland1–11–2
Hungary 2–10 Bỉ1–51–5
Bosna và Hercegovina 0–10 Thụy Điển0–50–5
Croatia 0–8 Na Uy0–30–5

Danh sách tham số

sửa

Dướ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 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 Đầu ra, it will be equally true for also setting it to WNT or MNT.

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 |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
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 1

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Đội 1TTS.Đội 2Lượt trận 1Lượt trận 2Lượt trận 3Lượt trận 4Lượt trận 5
Arsenal Anh6–8Đức Bayern Munich2–20–12–20–12–2
Atlético Madrid Tây Ban Nha10–11Đức Borussia Dortmund2–12–42–12–42–1
Real Madrid Tây Ban Nha11–11 (4–3 p)Anh Manchester City3–31–13–31–13–3 (s.h.p.)
Paris Saint-Germain Pháp14–11Tây Ban Nha Barcelona2–34–12–34–12–3

Example 2

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Đội 1Tỷ sốĐội 2
Arsenal Anh2–3Đức Bayern Munich
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund
Real Madrid Tây Ban Nha4–4 (s.h.p.) (4–3 p)Anh Manchester City
Paris Saint-Germain Pháp6–4Tây Ban Nha Barcelona
Number

bold_winner

sửa
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

sửa
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

sửa
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 3

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Đội 1TTS.Đội 2Lượt trận 1Lượt trận 2
Arsenal Anh2–3Đức Bayern Munich2–20–1
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4
String

caption

sửa
caption
Adds a caption to the table.

Example 4

sửa
Cách sử dụng
{{#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
}}
Đầu ra
This is a caption
Đội 1TTS.Đội 2Lượt trận 1Lượt trận 2
Arsenal Anh2–3Đức Bayern Munich2–20–1
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4
String

title

sửa
title
Adds a title to the table in the form of a table header spanning all columns, placed above the standard column headings.

Example 5

sửa
Cách sử dụng
{{#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
}}
Đầu ra
This is a title
Đội 1TTS.Đội 2Lượt trận 1Lượt trận 2
Arsenal Anh2–3Đức Bayern Munich2–20–1
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4
String
id
Adds an anchor to the top of the table which allows direct linking to the table. String

nowrap

sửa
nowrap
To enable, set to a positive value (e.g. y, yes, 1). Adds a nowrap value to the table style. String

fill_blanks

sửa
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

sửa
team_width
Set to an integer value for the width of the two team columns, in pixels. Default is 250. Number

score_width

sửa
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

sửa
team1
Adds a custom heading for the first team column. Default is Team 1. String

team2

sửa
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

sửa
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 6

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Đội 1TTS.Đội 2Lượt trận 1Lượt trận 2
Arsenal Anh2–3Đức Bayern Munich2–20–1
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4
Real Madrid Tây Ban Nha4–4 (4–3 p)Anh Manchester City3–31–1 (s.h.p.)
Paris Saint-Germain Pháp6–4Tây Ban Nha Barcelona2–34–1
String

leg_prefix

sửa
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 7

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Đội 1SeriesĐội 2Game 1Game 2Game 3Game 4Game 5Game 6Game 7
Golden State Warriors3–4Cleveland Cavaliers104–89110–7790–120108–9797–112101–11589–93

Example 8

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Đội 1TTS.Đội 2Lượt trận 1Lượt trận 2
Arsenal Anh2–3Đức Bayern Munich2–20–1
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4
Real Madrid Tây Ban Nha4–4 (4–3 p)Anh Manchester City3–31–1 (s.h.p.)
Paris Saint-Germain Pháp6–4Tây Ban Nha Barcelona2–34–1
String

leg_suffix

sửa
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 9

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Đội 1TTS.Đội 21st match2nd match
Arsenal Anh2–3Đức Bayern Munich2–20–1
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4
Real Madrid Tây Ban Nha4–4 (4–3 p)Anh Manchester City3–31–1 (s.h.p.)
Paris Saint-Germain Pháp6–4Tây Ban Nha Barcelona2–34–1
String

headingN

sửa
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 10

sửa
Cách sử dụng
{{#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
}}
Đầu ra
Sân nhàTỷ sốSân khách
Semi-finals
Ba Lan 5–1 Estonia
Wales 4–1 Phần Lan
Final
Wales 0–0 (s.h.p.) (4–5 p) Ba Lan
String

Other features/notes

sửa

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

sửa

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

sửa

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.

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 1TTS.Đội 2Lượt trận 1Lượt trận 2Lượt trận 3
Luxembourg 5–6 Đan Mạch3–32–20–1
Tây Ban Nha 7–1 Cộng hòa Ireland5–12–0
Pháp 2–5 Hungary1–31–2
Thụy Điển 2–4 Liên Xô1–11–3

Quasi-parameters

sửa

Plus sign (+) for flag templates/youth level

sửa

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.

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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Luxembourg 5–6 Đan Mạch3–32–2
Tây Ban Nha 7–1 Cộng hòa Ireland5–12–0
Pháp 2–5 Hungary1–31–2
Thụy Điển 2–4 Na Uy1–11–3

Plus sign (+) for country codes/flag variants

sửa

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.

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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Malta 5–6 Hy Lạp3–32–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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Atlético Madrid Tây Ban Nha4–5Đức Borussia Dortmund2–12–4

Asterick (*) for strings instead of national teams

sửa

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.

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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Pháp 2–5 Hungary1–31–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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Pháp 2–5 Hungary1–31–2
Thụy Điển  Winner QF1

Three apostrophes (''') for manual bolding

sửa

While 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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Luxembourg 5–6 Đan Mạch3–32–3
Tây Ban Nha 7–1 Cộng hòa Ireland5–12–0
Pháp 2–5 Hungary1–31–2
Thụy Điển 2–4 Na Uy1–11–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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Thụy Điển 2–4 Na Uy1–11–3
Luxembourg 5–5 (a) Đan Mạch3–32–2
Tây Ban Nha 7–1 Cộng hòa Ireland5–12–0

Two apostrophes ('') for manual coloring

sửa

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 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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Luxembourg 5–6 Đan Mạch3–32–3
Tây Ban Nha 7–1 Cộng hòa Ireland5–12–0
Pháp 2–5 Hungary1–31–2
Thụy Điển 2–4 Na Uy1–11–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 1TTS.Đội 2Lượt trận 1Lượt trận 2
Thụy Điển 2–4 Na Uy1–11–3
Luxembourg 5–5 (a) Đan Mạch3–32–2
Tây Ban Nha 7–1 Cộng hòa Ireland5–12–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