模組:Sports table/WDL

文档图示 模块文档

此是一個體育模組的luaModule:Sports table,用作建立比賽積分榜,並有勝和負系統。注意,此模組將有可能廣泛使用,所以請勿隨意修改指令碼。下列將介紹如何使用。

可於以下mod修訂:

用法

條目

你輸入的{{#invoke:Sports table|main|style=WDL


|team1=FDT |team2=BBB |team3=CCC |team4=DDD |team5=EEE

|win_FDT=5 |loss_FDT=0 |gf_FDT=10 |ga_FDT=0
|win_BBB=3 |draw_BBB=1 |loss_BBB=1 |gf_BBB= 3 |ga_BBB=2
|win_CCC=3 |loss_CCC=2 |gf_CCC= 3 |ga_CCC=3
|win_DDD=1 |draw_DDD=1 |loss_DDD=3 |gf_DDD= 1 |ga_DDD=4
|win_EEE=0 |loss_EEE=5 |gf_EEE= 0 |ga_EEE=6

|name_FDT=[[FIFA World Cup Dream Team]]
|name_BBB=Team 2
|name_CCC=Team 3
|name_EEE={{fb|GIB}}
}}

效果
排名隊伍
1FIFA World Cup Dream Team5500100+1015
2Team 2531132+110
3Team 353023309
4DDD511314−34
5 直布罗陀500506−60
最後更新:unknown。 資料來源:[來源請求]

The main command is the {{#invoke:Sports table|main|style=WDL}} statement which basically calls the module and enables you to set everything up. Then you list the positions of the teams as |team1=, |team2=, etc for however many teams you need in the table. You can use full team names there without spaces if you want, but using codes (as in the example) can make it easier. For each team you now define the wins, draws, losses, goals for and goals against by using |win_TTT=, |draw_TTT=, |loss_TTT=, |gf_TTT= and |ga_TTT= respectively (with TTT replaced by the team code). If you do not define these numbers, it is automatically assumed to be 0. It is good practice though to include them anyway and to align the columns using appropriate spaces (as in the example), so the code is easy to read. The last step now is to define the |name_TTT= parameters which determine what name is shown in the table, you can use wiki markup and templates in here as well. See #Dating to see how to change the update date.

模板

你輸入的{{#invoke:Sports table|main|style=WDL

|showteam={{{showteam}}} |only_pld_pts={{{only_pld_pts}}} |show_matches={{{show_matches}}}
|template_name=Example

|team1=FDT |team2=BBB |team3=CCC |team4=DDD |team5=EEE

|win_FDT=5 |loss_FDT=0 |gf_FDT=10 |ga_FDT=0
|win_BBB=3 |draw_BBB=1 |loss_BBB=1 |gf_BBB= 3 |ga_BBB=2
|win_CCC=3 |loss_CCC=2 |gf_CCC= 3 |ga_CCC=3
|win_DDD=1 |draw_DDD=1 |loss_DDD=3 |gf_DDD= 1 |ga_DDD=4
|win_EEE=0 |loss_EEE=5 |gf_EEE= 0 |ga_EEE=6

|name_FDT=[[FIFA World Cup Dream Team]]
|name_BBB=Team 2
|name_CCC=Team 3
|name_EEE={{fb|GIB}}
}}

效果
排名隊伍
1FIFA World Cup Dream Team5500100+1015
2Team 2531132+110
3Team 353023309
4DDD511314−34
5 直布罗陀500506−60
最後更新:unknown。 資料來源:[來源請求]

The markup is effectively the same, you only add two lines. The line |showteam={{{showteam}}}, is needed to forward the showteam parameter from a template call (see #Team highlighting and partial table); the |only_pld_pts={{{only_pld_pts}}} is needed to forward truncated tables, (see #Appearance); the |show_matches={{{show_matches}}} is needed to forward match result visibility, see #Matches. The |template_name= with the actual name of the Template-page, creates the V, T and E buttons that link to the template page (so you can easily reach it from any article it is included in).

自訂

Several things can be customized in these tables

分數

你輸入的{{#invoke:Sports table|main|style=WDL


|team1=FDT |team2=BBB |team3=CCC |team4=DDD |team5=EEE

|win_FDT=5 |loss_FDT=0 |gf_FDT=10 |ga_FDT=0 |adjust_points_FDT=1.5
|win_BBB=3 |draw_BBB=1 |loss_BBB=1 |gf_BBB= 3 |ga_BBB=2
|win_CCC=3 |loss_CCC=2 |gf_CCC= 3 |ga_CCC=3
|win_DDD=1 |draw_DDD=1 |loss_DDD=3 |gf_DDD= 1 |ga_DDD=4
|win_EEE=0 |loss_EEE=5 |gf_EEE= 0 |ga_EEE=6 |adjust_points_EEE=-1.5

|name_FDT=[[FIFA World Cup Dream Team]]
|name_BBB=Team 2
|name_CCC=Team 3
|name_EEE={{fb|GIB}}

|winpoints=2
|drawpoints=1
|losspoints=-0.1
}}

效果
排名隊伍
1FIFA World Cup Dream Team5500100+1011.5
2Team 2531132+16.9
3Team 353023305.8
4DDD511314−32.7
5 直布罗陀500506−6−2
最後更新:unknown。 資料來源:[來源請求]

As a default a win is worth 3 points, a draw 1 point and a loss 0 points, these values can be overwritten to what you need by |winpoints=, |drawpoints= and |losspoints=. Teams can also start the season with bonus or penalty points, this can be included by using |adjust_points_TTT= for that specific team.

Header選項

你輸入的{{#invoke:Sports table|main|style=WDL

|for_against_style=points
|draw_header=<abbr title="Won after extra time or penalties">W+</abbr>
}}

效果
排名隊伍W+
最後更新:unknown。 資料來源:[來源請求]

For sports with points for and against rather than goals, setting |for_against_style=points switches the for, against and difference columns to using points instead. The wording of the D (draw) column can be adjusted using |draw_header=.

入球比率

你輸入的{{#invoke:Sports table|main|style=WDL

|use_goal_ratio=yes

|team1=FDT |team2=BBB |team3=CCC |team4=DDD |team5=EEE

|win_FDT=5 |loss_FDT=0 |gf_FDT=10 |ga_FDT=0
|win_BBB=3 |draw_BBB=1 |loss_BBB=1 |gf_BBB= 3 |ga_BBB=2
|win_CCC=3 |loss_CCC=2 |gf_CCC= 3 |ga_CCC=3
|win_DDD=1 |draw_DDD=1 |loss_DDD=3 |gf_DDD= 1 |ga_DDD=4
|win_EEE=0 |loss_EEE=5 |gf_EEE= 0 |ga_EEE=6

|name_FDT=[[FIFA World Cup Dream Team]]
|name_BBB=Team 2
|name_CCC=Team 3
|name_EEE={{fb|GIB}}
}}

效果
排名隊伍球率
1FIFA World Cup Dream Team550010015
2Team 25311321.50010
3Team 35302331.0009
4DDD5113140.2504
5 直布罗陀5005060.0000
最後更新:unknown。 資料來源:[來源請求]

Using |use_goal_ratio=yes use goal ratio (goal average) instead of goal differential. Module:Sports table/doc/doc

使用範例

The module parameters can be arranged in different orders depending on the editor and article but below is an example use that can be copied when creating a module table.

你輸入的{{#invoke:Sports table|main|style=WDL

|showteam = {{{showteam|}}} <!-- For template use when passing forward what team shall be highlighted -->
|template_name = <!--If used as template add template name here (without template: first) -->
|update = future <!-- When tournament started update the update-parameter with date of latest update and remove start_date-->
|start_date = Unknown <!-- On form 24 April 2165. When tournament started remove start_date-->
|source = Unknown <!-- Add source for table here with single bracket [webadress info] -->

<!--Update team positions here-->
|team1=AAA |team2=BBB |team3=CCC |team4=DDD |team5=EEE |team6=FFF |team7=GGG |team8=HHH |team9=III |team10=JJJ |team11=KKK |team12=LLL

<!--Update team qualifications here (defined below)-->
|result1=PRO |result2=CLG |result3=KO |result4=CLPO |result5=ELPO |result8=ELG |result11=RPO |result12=REL

<!--Update team results here and then (if needed) positions above. Dont forget to update the date above (update parameter)-->
|win_AAA=0 |draw_AAA=0 |loss_AAA=0 |gf_AAA=0 |ga_AAA=0 |status_AAA=CQ <!-- Team A -->
|win_BBB=0 |draw_BBB=0 |loss_BBB=0 |gf_BBB=0 |ga_BBB=0 |status_BBB=C <!-- Team B -->
|win_CCC=0 |draw_CCC=0 |loss_CCC=0 |gf_CCC=0 |ga_CCC=0 |status_CCC=A <!-- Team C -->
|win_DDD=0 |draw_DDD=0 |loss_DDD=0 |gf_DDD=0 |ga_DDD=0 |status_DDD=T <!-- Team D -->
|win_EEE=0 |draw_EEE=0 |loss_EEE=0 |gf_EEE=0 |ga_EEE=0 |status_EEE= <!-- Team E -->
|win_FFF=0 |draw_FFF=0 |loss_FFF=0 |gf_FFF=0 |ga_FFF=0 |status_FFF= <!-- Team F -->
|win_GGG=0 |draw_GGG=0 |loss_GGG=0 |gf_GGG=0 |ga_GGG=0 |status_GGG= <!-- Team G -->
|win_HHH=0 |draw_HHH=0 |loss_HHH=0 |gf_HHH=0 |ga_HHH=0 |status_HHH= <!-- Team H -->
|win_III=0 |draw_III=0 |loss_III=0 |gf_III=0 |ga_III=0 |status_III= <!-- Team I -->
|win_JJJ=0 |draw_JJJ=0 |loss_JJJ=0 |gf_JJJ=0 |ga_JJJ=0 |status_JJJ= <!-- Team J -->
|win_KKK=0 |draw_KKK=0 |loss_KKK=0 |gf_KKK=0 |ga_KKK=0 |status_KKK= <!-- Team K -->
|win_LLL=0 |draw_LLL=0 |loss_LLL=0 |gf_LLL=0 |ga_LLL=0 |status_LLL=R <!-- Team L -->

<!--Team definitions (wikilinks in table)-->
|name_AAA = <!-- Add wikilink for Team A here -->
|name_BBB = <!-- Add wikilink for Team B here -->
|name_CCC = <!-- Add wikilink for Team C here -->
|name_DDD = <!-- Add wikilink for Team D here -->
|name_EEE = <!-- Add wikilink for Team E here -->
|name_FFF = <!-- Add wikilink for Team F here -->
|name_GGG = <!-- Add wikilink for Team G here -->
|name_HHH = <!-- Add wikilink for Team H here -->
|name_III = <!-- Add wikilink for Team I here -->
|name_JJJ = <!-- Add wikilink for Team J here -->
|name_KKK = <!-- Add wikilink for Team K here -->
|name_LLL = <!-- Add wikilink for Team L here -->

<!--Table settings and rules-->
|show_limit = <!-- For league tables and other big tables use showlimit = 5 (standard per consensus to only show five teams on individual articles) -->
|class_rules = 1) Points; 2) Goal difference; 3) Number of goals scored; <!-- Add the classification rules here -->

<!--Qualification and relegation column definitions, use green for top tournament, then blue followed by yellow, red is elimination. Different levels of same competitions should have different shades in color like green1, green2 and so on.-->
|res_col_header = PQR <!-- All of these may not be needed, Promotion (P), Qualification (Q) and Relegation (R) -->
|col_PRO = green1 |text_PRO = Promotion to <!-- Wikilink to higher level, pipe year and association -->
|col_KO = green1 |text_KO = Advance to <!-- Wikilink to next stage for example knockout stage (KO) -->
|col_CLG = green1 |text_CLG = Qualification to <!-- Wikilink to tournament stage, pipe year and association -->
|col_CLPO= green2 |text_CLPO= Qualification to <!-- Wikilink to tournament stage, pipe year and association -->
|col_ELG = blue1 |text_ELG = Qualification to <!-- Wikilink to tournament stage, pipe year and association -->
|col_ELPO= blue2 |text_ELPO= Qualification to <!-- Wikilink to tournament stage, pipe year and association -->
|col_RPO = red2 |text_RPO = Qualification to <!-- Wikilink to relegation playoff, pipe to Relegation playoffs -->
|col_REL = red1 |text_REL = Relegation to <!-- Wikilink to lower level, pipe year and association -->
}}

效果
排名隊伍獲得資格、升班或降班
1AAA (C, Q)00000000Promotion to
2BBB (Q)00000000Qualification to
3CCC (A)00000000Advance to
4DDD (T)00000000Qualification to
5EEE00000000Qualification to
6FFF00000000
7GGG00000000
8HHH00000000Qualification to
9III00000000
10JJJ00000000
11KKK00000000Qualification to
12LLL (R)00000000Relegation to
首場比賽將於Unknown開始。資料來源:Unknown
排名規則:1) Points; 2) Goal difference; 3) Number of goals scored;
(A) 晉級下一圈; (C) 冠軍; (Q) 晉身到指定賽事階段; (R) 降班; (T) 已確定晉級,但未確定到指定階段

-- Style for football tableslocal pp = {}function pp.header(t,Args,p_sub,pos_label,group_col,VTE_text,full_table,results_header_txt)-- Load relevant moduleslocal yesno = require('Module:Yesno')-- Create table header-- Pre stufflocal team_width = Args['teamwidth'] or '190'local sort_text = yesno(Args['sortable_table'] or 'no') and ' sortable' or ''local show_played = not yesno(Args['hide_played'] or 'no')local rounds_won = yesno(Args['show_rw'] or Args['rounds_won'] or 'no')table.insert(t,'{| class="wikitable'..sort_text..'" style="text-align:center;"\n')            -- Open table-- Table titleif Args['title'] or Args['table_header'] thentable.insert(t,'|+ ' .. (Args['title'] or Args['table_header']) .. '\n')end-- Custom header optionslocal played_head_text = Args['pld_header'] or '<abbr title="場數">賽</abbr>'local draw_head_text = Args['draw_header'] or '<abbr title="打和">和</abbr>'local group_head_text = Args['group_header'] or '組別'local team_head_text = Args['team_header'] or '隊伍'local away_goals_head_text = Args['away_goals_header'] or '<abbr title="Away goals">AG</abbr>'local bonus_head_text = Args['bonus_header'] or '<abbr title="Bonus points">BP</abbr>'local rw_head_text = Args['rw_header'] or '<abbr title="Rounds won">RW</abbr>'local loss_first = Args['loss_before_draw'] or Args['loss_before_tie'] or false-- What to rank the teams bylocal ranking_style = string.lower(Args['ranking_style'] or 'pts')local show_points, show_wperc, show_perc, show_ppg = false, false, false, falseif ranking_style=='w' or ranking_style=='win' or ranking_style=='wins' or ranking_style=='none' then-- Based on winselseif ranking_style=='wperc' or ranking_style=='win percentage' or ranking_style=='wpct' thenshow_wperc = trueelseif ranking_style=='perc' or ranking_style=='percentage' or ranking_style=='%' then-- Based on percentageshow_perc = trueelseif ranking_style=='ppg' or ranking_style=='points per game' or ranking_style=='ptspergame' then-- Based on points per gameshow_ppg = trueelseif ranking_style=='percpts' or ranking_style=='%pts' then-- Based on percentage and pointsshow_perc = trueshow_points = trueelseif ranking_style=='ppgpts' then-- Based on ppg and pointsshow_ppg = trueshow_points = trueelse-- Based on pointsshow_points = trueendlocal pts_perc_first = yesno((show_points and Args['pts_first']) or (show_perc and Args['perc_first']) or 'no')local show_away_goals = yesno(Args['show_away_goals'] or 'no')local show_bonus_points = yesno(Args['show_bonus_points'] or 'no')local show_win = yesno(Args['show_win'] or 'yes')local show_draw = yesno(Args['show_draw'] or 'yes')local show_loss = yesno(Args['show_loss'] or 'yes')-- Use points instead of goals for/againstlocal for_against_style = Args['for_against_style'] or '得球'local fa_letter, fa_word_sing, fa_word_plurlocal hide_for_against = false-- First convert to lower case if it is a stringfor_against_style = string.lower(for_against_style)if for_against_style=='g' or for_against_style=='得球' or for_against_style=='射球' thenfa_letter = ''fa_word_sing = ''fa_word_plur = ''elseif for_against_style=='f' or for_against_style=='frame' or for_against_style=='frames' thenfa_letter = 'F'fa_word_sing = 'Frame'fa_word_plur = 'Frames'elseif for_against_style=='m' or for_against_style=='match' or for_against_style=='matches' thenfa_letter = 'M'fa_word_sing = 'Match'fa_word_plur = 'Matches'elseif for_against_style=='game' or for_against_style=='games' thenfa_letter = 'G'fa_word_sing = 'Game'fa_word_plur = 'Games'elseif for_against_style=='p' or for_against_style=='point' or for_against_style=='' thenfa_letter = ''fa_word_sing = ''fa_word_plur = ''    elseif for_against_style=='s' or for_against_style=='set' or for_against_style=='sets' then        fa_letter = 'S'        fa_word_sing = 'Set'        fa_word_plur = 'Sets'    elseif for_against_style=='r' or for_against_style=='run' or for_against_style=='runs' then        fa_letter = 'R'        fa_word_sing = 'Run'        fa_word_plur = 'Runs'elseif for_against_style=='none' thenhide_for_against = trueelsefa_letter = ''fa_word_sing = ''fa_word_plur = ''end-- Whether to use goal ratio (goal average) insteadlocal do_ratio = yesno(Args['use_goal_ratio'] or 'no')local do_average = yesno(Args['use_goal_average'] or 'no')-- Whether to use goal percentage insteadlocal do_percentage = yesno(Args['use_goal_percentage'] or Args['use_point_percentage'] or 'no')local do_point_for_avg = yesno(Args['use_goals_per_match'] or Args['use_points_per_match'] or 'no')-- Whether to suppress the GR/GA/G% column entirelylocal do_difference = yesno(Args['use_goal_diff'] or 'yes')-- Use games behind headerlocal show_GB = yesno(Args['show_GB'] or 'no')-- Initializelocal tt = {}tt.count = 0 -- Up by one after every calltt.tab_text = t-- Actual text-- Actual headersif pos_label ~= nil thentt = p_sub.colhead(tt,32,pos_label)-- Position colend-- Add group headerif full_table and group_col thentt = p_sub.colhead(tt,32,group_head_text)-- Group colendtt = p_sub.colhead(tt,team_width,team_head_text..VTE_text)-- Team colif pts_perc_first thenif show_points thentt = p_sub.colhead(tt,32,'<abbr title="積分">分</abbr>')-- Points colendif show_perc thentt = p_sub.colhead(tt,36,'<abbr title="勝率">率</abbr>')-- Win percentage colendif show_ppg thentt = p_sub.colhead(tt,36,'<abbr title="Points per game">PPG</abbr>')-- Points per game colendendif show_played thentt = p_sub.colhead(tt,32,played_head_text)-- Matches played colendif full_table thenif show_win thentt = p_sub.colhead(tt,32,'<abbr title="勝出">勝</abbr>')-- Win colendif loss_first thenif show_loss thentt = p_sub.colhead(tt,32,'<abbr title="落敗">負</abbr>')-- Loss colendif show_draw thentt = p_sub.colhead(tt,32,draw_head_text)-- Draw colendelseif show_draw thentt = p_sub.colhead(tt,32,draw_head_text)-- Draw colendif show_loss thentt = p_sub.colhead(tt,32,'<abbr title="落敗">負</abbr>')-- Loss colendendif rounds_won thentt = p_sub.colhead(tt,32,rw_head_text)  -- Rounds wonendif not hide_for_against thenif not yesno(Args['hide_for_against_columns'] or 'no') thentt = p_sub.colhead(tt,32,'<abbr title="'..fa_word_plur..' 入球">'..fa_letter..'得</abbr>')-- For coltt = p_sub.colhead(tt,32,'<abbr title="'..fa_word_plur..' 失球">'..fa_letter..'失</abbr>')-- Against colendif do_ratio or do_average thenlocal ratio_word = do_ratio and ' ratio' or ' average'local ratio_letter = do_ratio and 'R' or 'Av'tt = p_sub.colhead(tt,32,'<abbr title="'..fa_word_sing..' 入球率">'..fa_letter..'球率</abbr>')-- Ratio colelseif do_percentage thentt = p_sub.colhead(tt,32,'<abbr title="'..fa_word_sing..' percentage">PP</abbr>')-- Percentage colelseif do_point_for_avg thentt = p_sub.colhead(tt,32,'<abbr title="'..fa_word_plur..' per match">'..fa_letter..'PM</abbr>')-- Points per matchelseif do_difference thentt = p_sub.colhead(tt,32,'<abbr title="'..fa_word_sing..' 得失球差">'..fa_letter..'差</abbr>')-- Difference colendendendif show_away_goals thentt = p_sub.colhead(tt,32,away_goals_head_text)-- Away goals colendif show_bonus_points thentt = p_sub.colhead(tt,32,bonus_head_text)-- Bonus points colendif not pts_perc_first thenif show_points thentt = p_sub.colhead(tt,32,'<abbr title="積分">分</abbr>')-- Points colendif show_perc thentt = p_sub.colhead(tt,36,'<abbr title="勝率">率</abbr>')-- Win percentage colelseif show_wperc thentt = p_sub.colhead(tt,36,'<abbr title="勝率">率</abbr>')-- Win percentage colendif show_ppg thentt = p_sub.colhead(tt,36,'<abbr title="Points per game">PPG</abbr>')-- Points per game colendendif full_table thenif show_GB then -- Games behind headertt = p_sub.colhead(tt,32,'<abbr title="落後場次">勝差</abbr>')endtt.count = tt.count+1table.insert(tt.tab_text,results_header_txt)endreturn ttend-- Numeric alignmentlocal function num_align(num, digits)if tonumber(digits) and tonumber(num) thenlocal n = tonumber(num)digits = tonumber(digits)if digits == 1 thenif n >= 0 and n < 10 thenreturn '<span style="visibility:hidden; color:transparent;">0</span>' .. numendelseif digits == 2 thenif n >= 0 and n < 10 thenreturn '<span style="visibility:hidden; color:transparent;">00</span>' .. numelseif n >= 10 and n < 100 thenreturn '<span style="visibility:hidden; color:transparent;">0</span>' .. numendendendreturn numendfunction pp.row(frame,t,Args,p_sub,notes_exist,hth_id_list,full_table,rand_val,team_list,team_code_ii,ii_start,ii_end,ii_fw,bg_col,N_teams,ii,ii_show)-- Build the inner parts of individual rows-- Sub-module usagelocal mm = require('Module:Math')local yesno = require('Module:Yesno')-- Get custom/default options for in tablelocal show_win = yesno(Args['show_win'] or 'yes')local show_draw = yesno(Args['show_draw'] or 'yes')local show_loss = yesno(Args['show_loss'] or 'yes')local win_points = tonumber(Args['winpoints'])or (show_draw and 3 or 2)local draw_points = tonumber(Args['drawpoints'])or (show_draw and 1 or 0)local loss_points = tonumber(Args['losspoints'])or (show_draw and 0 or 1)local rw_points = tonumber(Args['rwpoints'])or 1local digits = Args['digitpad']local total_row_name = 'SPORTS_TABLE_TOTAL'-- Add to tallies if enabledif yesno(Args['show_totals'] or 'no') and (team_code_ii ~= total_row_name) thenfor k,v in ipairs({'win', 'draw', 'loss', 'gf', 'ga', 'adjust_points', 'startpoints'}) doArgs[v .. '_' .. total_row_name] = (tonumber(Args[v .. '_' .. total_row_name]) or 0) + (tonumber(Args[v .. '_' .. team_code_ii]) or 0)endend-- Order of draws and losses --local loss_first = Args['loss_before_draw'] or Args['loss_before_tie'] or false-- Optional rounds wonlocal rounds_won = yesno(Args['show_rw'] or Args['rounds_won'] or 'no')-- Get some inputlocal wins = tonumber(Args['win_'..team_code_ii])or 0local draws = tonumber(Args['draw_'..team_code_ii]) or 0local losses = tonumber(Args['loss_'..team_code_ii])or 0local rw = tonumber(Args['rw_'..team_code_ii])or 0local gfor = tonumber(Args['gf_'..team_code_ii] or Args['pf_'..team_code_ii] or '0') or '?'local gaig = tonumber(Args['ga_'..team_code_ii] or Args['pa_'..team_code_ii] or '0') or '?'local s_pts = (tonumber(Args['adjust_points_'..team_code_ii]) or 0) + (tonumber(Args['startpoints_'..team_code_ii]) or 0)local hth_local = yesno(Args['show_hth'] or 'yes') and Args['hth_'..team_code_ii] or nillocal ranking_style = string.lower(Args['ranking_style'] or 'pts')local pct_style = string.lower(Args['pct_style'] or 'ratio')-- Then calculate some valueslocal matches = wins + draws + losseslocal points = win_points*wins + draw_points*draws + loss_points*losses + rw_points*rw + s_ptsif Args['goalpoints'] and tonumber(Args['gf_'..team_code_ii] or Args['pf_'..team_code_ii]) thenpoints = points + (tonumber(Args['goalpoints']) or 1)*tonumber(Args['gf_'..team_code_ii] or Args['pf_'..team_code_ii])endlocal matches_text = matchesif tonumber(Args['win_'..team_code_ii]) == nil or tonumber(Args['draw_'..team_code_ii]) == nil or tonumber(Args['loss_'..team_code_ii]) == nil thenmatches = tonumber(Args['matches_'..team_code_ii]) or matchesmatches_text = Args['matches_'..team_code_ii] or matchesendlocal win_perc = ''local ppg = ''if tonumber(matches) == nil or matches == 0 then -- Escape for zero matcheswin_perc = '&mdash;'ppg = '&mdash;'else--Some sports use draw as wellwin_perc = (pct_style == 'ratio') andmm._precision_format((2*wins + draws  + s_pts) / (2*matches), 3) ormm._precision_format(100*(2*wins + draws  + s_pts) / (2*matches), 2)-- Allow win_perc to be altered due to point deductions/additionsppg = mm._precision_format(points / matches, 2)if (losses > 0 or draws > 0) and pct_style == 'ratio' then-- Drop the leading zero (from the string)win_perc = string.sub(win_perc,2,string.len(win_perc))endendif ranking_style=='wperc' or ranking_style=='win percentage' or ranking_style=='wpct' thenif matches == 0 thenwin_perc = '&mdash;'elsewin_perc = mm._precision_format(100 * wins / matches, 2)endend-- Show for/againstlocal for_against_style = Args['for_against_style'] or 'goals'local hide_for_against = falsefor_against_style = string.lower(for_against_style)if for_against_style=='none' thenhide_for_against = trueend-- Comparison of for againstlocal gcomp = nil-- Whether to use goal ratio (goal average) or goal percentage insteadlocal skip_signif yesno(Args['use_goal_ratio'] or 'no') or yesno(Args['use_goal_average'] or 'no') then-- Now it is the goal ratio/goal averageif (gfor == '?') or (gaig == '?') or gaig == 0 thengcomp = '&mdash;'elsegcomp = mm._precision_format(gfor / gaig, 3)endelseif yesno(Args['use_goal_percentage'] or 'no') then-- Now it is the percentageif (gfor == '?') or (gaig == '?') or gaig == 0 thengcomp = '&mdash;'elsegcomp = mm._precision_format(100 * gfor / gaig , 1)endelseif yesno(Args['use_point_percentage'] or 'no') then-- Now it is the point percentageif (gfor == '?') or (gaig == '?') or (gfor + gaig) <= 0 thengcomp = '&mdash;'elsegcomp = mm._precision_format(100 * gfor / (gfor + gaig) , 2)endelseif yesno(Args['use_goals_per_match'] or Args['use_points_per_match'] or 'no') then-- Now it is the point for averageif (gfor == '?') or matches <= 0 thengcomp = '&mdash;'elsegcomp = mm._precision_format(gfor / matches , 1)endelseif yesno(Args['use_goal_diff'] or 'yes') then-- It's goal differenceif (gfor == '?') or (gaig == '?') thengcomp = '&mdash;'elsegcomp = gfor - gaig-- Formatting with signsif gcomp>0 thengcomp='+'..num_align(gcomp,digits)elseif gcomp < 0 thengcomp='&minus;'..-num_align(gcomp,digits)endendend-- Use actual values if gfor or gaig is not numericif (gfor == '?') then gfor = Args['gf_'..team_code_ii] or Args['pf_'..team_code_ii] or '' endif (gaig == '?') then gaig = Args['ga_'..team_code_ii] or Args['pa_'..team_code_ii] or '' end-- Show games behindlocal show_GB = yesno(Args['show_GB'] or 'no')local GB_text = '&mdash;'if show_GB thenlocal GB_team_no = tonumber(Args['GB_team']) or 1if ii == GB_team_no then-- Do nothing, it's vs this teamelselocal wins_GB = tonumber(Args['win_'..team_list[GB_team_no]])or 0local losses_GB = tonumber(Args['loss_'..team_list[GB_team_no]])or 0local GB_num = (wins_GB-wins+losses-losses_GB)/2-- Display optionsif GB_num >0 then-- Indicates trailing GB_teamGB_text = num_align(GB_num,digits)elseif GB_num == 0 then-- Equal, do nothing to get dashelse -- Ahead of GB team, should be noted by plus (instead of minus that comes from formula)GB_text = '+'..num_align(-GB_num,digits)endendend-- Some local varslocal hth_stringlocal tt_return = p_sub.hth(frame,Args,full_table,hth_id_list,hth_local,notes_exist,team_list,team_code_ii,ii_start,ii_end,rand_val)hth_string = tt_return.strhth_id_list = tt_return.listnotes_exist = tt_return.notes_exist-- What to rank the teams bylocal rank_points, rank_perc, rank_wperc, rank_ppg = false, false, false, falselocal win_fw, win_stringif ranking_style=='w' or ranking_style=='win' or ranking_style=='wins' then-- Based on winswin_fw = 'font-weight: bold;'win_string = hth_stringelseif ranking_style=='perc' or ranking_style=='percentage' or ranking_style=='%' then-- Based on percentagerank_perc = truewin_fw=ii_fwwin_string = ''elseif ranking_style=='wperc' or ranking_style=='win percentage' or ranking_style=='%w' then-- Based on percentagerank_wperc = truewin_fw=ii_fwwin_string = ''elseif ranking_style=='ppg' or ranking_style=='points per game' or ranking_style=='ptspergame' then-- Based on points per gamerank_ppg = truewin_fw=ii_fwwin_string = ''elseif ranking_style=='percpts' or ranking_style=='%pts' then-- Based on percentage and pointsrank_perc = truerank_points = truewin_fw=ii_fwwin_string = ''elseif ranking_style=='ppgpts'  then-- Based on ppg and pointsrank_ppg = truerank_points = truewin_fw=ii_fwwin_string = ''elseif ranking_style=='none' thenwin_fw=ii_fwwin_string = ''else-- Based on pointsrank_points = truewin_fw=ii_fwwin_string = ''endlocal show_played = not yesno(Args['hide_played'] or 'no')local show_away_goals = yesno(Args['show_away_goals'] or 'no')local show_bonus_points = yesno(Args['show_bonus_points'] or 'no')local pts_perc_first = yesno((rank_points and Args['pts_first']) or ((rank_perc or rank_wperc) and Args['perc_first']) or 'no')-- Row buildingif (tonumber(Args['adjust_points_'..team_code_ii]) and tonumber(Args['startpoints_'..team_code_ii])) thentable.insert(t,'[[Category:Pages using sports table with both adjust and startpoints]]\n')endif pts_perc_first thenif rank_points then-- Add &minus; for negative point totalsif points<0 thentable.insert(t,'| style="font-weight:bold;'..bg_col..'" | &minus;'..num_align(-points,digits)..hth_string..'\n')elsetable.insert(t,'| style="font-weight:bold;'..bg_col..'" | '..num_align(points,digits)..hth_string..'\n')endendif rank_perc thentable.insert(t,'| style="font-weight:bold;'..bg_col..'" | '..win_perc..hth_string..'\n')elseif rank_wperc thentable.insert(t,'| style="font-weight:bold; text-align:right;'..bg_col..'" | '..win_perc..hth_string..'\n')endif rank_ppg thentable.insert(t,'| style="font-weight:bold;'..bg_col..'" | '..ppg..hth_string..'\n')endendif show_played thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..matches_text..'\n') -- Playedendif full_table then-- Use actual values if wins, draws, and losses are not numericif (wins == 0 and draws == 0 and losses == 0) thenlocal function numorval(s)return s and ((s == '' and 0) or tonumber(s) or s) or 0endwins = numorval(Args['win_'..team_code_ii])draws = numorval(Args['draw_'..team_code_ii])losses = numorval(Args['loss_'..team_code_ii])endif show_win thentable.insert(t,'| style="'..win_fw..bg_col..'" |'..num_align(wins,digits)..win_string..'\n') -- Wonendif loss_first thenif show_loss thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..num_align(losses,digits)..'\n') -- Lostendif show_draw thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..num_align(draws,digits)..'\n') -- Drawnendelseif show_draw thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..num_align(draws,digits)..'\n') -- Drawnendif show_loss thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..num_align(losses,digits)..'\n') -- Lostendendif rounds_won thenif tonumber(Args['rw_' .. team_code_ii] or 0) == nil thenrw = Args['rw_' .. team_code_ii] or ''endtable.insert(t,'| style="'..ii_fw..bg_col..'" |'..rw..'\n')         -- Rounds wonendif not hide_for_against thenif not yesno(Args['hide_for_against_columns'] or 'no') thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..num_align(gfor,digits)..'\n') -- GFtable.insert(t,'| style="'..ii_fw..bg_col..'" |'..num_align(gaig,digits)..'\n')-- GAendif gcomp thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..gcomp..'\n')      -- Goal comparisonendendendif show_away_goals thentable.insert(t,'| style="'..bg_col..'" | '..(Args['away_goals_'..team_code_ii] or '')..'\n')endif show_bonus_points thenif s_pts < 0 thentable.insert(t,'| style="'..bg_col..'" | &minus;'..num_align(-s_pts,digits)..'\n')elsetable.insert(t,'| style="'..bg_col..'" | '..num_align(s_pts,digits)..'\n')endendif not pts_perc_first thenif rank_points then-- Add &minus; for negative point totalsif points<0 thentable.insert(t,'| style="font-weight:bold;'..bg_col..'" | &minus;'..num_align(-points,digits)..hth_string..'\n')elsetable.insert(t,'| style="font-weight:bold;'..bg_col..'" | '..num_align(points,digits)..hth_string..'\n')endendif rank_perc thentable.insert(t,'| style="font-weight:bold;'..bg_col..'" | '..win_perc..hth_string..'\n')elseif rank_wperc thentable.insert(t,'| style="font-weight:bold; text-align:right;'..bg_col..'" | '..win_perc..hth_string..'\n')endif rank_ppg thentable.insert(t,'| style="font-weight:bold;'..bg_col..'" | '..ppg..hth_string..'\n')endendif show_GB thentable.insert(t,'| style="'..ii_fw..bg_col..'" |'..GB_text..'\n')  -- GBendreturn {t=t, notes_exist=notes_exist, hth_id_list=hth_id_list}endfunction pp.status(Args)-- Declare status options-- -------------------------------------------------------------- NOTE: If you add to status_code, also add to status_called and status_letters!!-- Or functionality will be compromised-- ------------------------------------------------------------local status_code, status_called = {}, {}status_code = {A='晉級下一圈', C='冠軍', D='被取消資格', E='被淘汰出局', G='獲邀球隊', H='東道主', O='附加賽勝方', P='升班', Q='晉身到指定賽事階段',R='降班', S='衛冕球隊', T='已確定晉級,但未確定到指定階段'}local status_letters = (Args['status_order'] or '') .. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'-- Status position (before or after read and default)local stat_pos_val = string.lower(Args['status_pos'] or '')local status_position = 'after' -- Default locationif stat_pos_val=='before' thenstatus_position = 'before'elseif stat_pos_val=='after' thenstatus_position = 'after'end-- Read in custom status optionsfor l in mw.text.gsplit(status_letters, '') dostatus_called[l] = falsestatus_code[l] = status_code[l] or '?'status_letters = mw.ustring.gsub(status_letters, '(' .. l ..'.-)' .. l, '%1')if Args['status_text_' .. l] thenstatus_code[l] = Args['status_text_' .. l]end endreturn {code=status_code, called=status_called, letters=status_letters, position=status_position}endreturn pp