คุณอาจจะต้องการสร้างคู่มือการใช้งานของนี้ ผู้เขียนสามารถทำการทดลองได้ที่กระบะทราย (สร้าง | คัดลอก) และชุดทดสอบ (สร้าง) ของมอดูลนี้ โปรดเพิ่มหมวดหมู่ไปที่หน้าย่อย |
-- Module to build results cross-tables for standings in Sports -- See documentation for details require('Module:No globals') local p = {} -- Main function function p.main(frame) -- Declare locals local Args = frame.args local N_teams = 0 local t = {} local t_footer = {} local t_return = {} local team_list = {} local notes_exist = false local ii, ii_fw, bg_col, team_name, team_code_ii -- Optional custom team header local team_header = Args['team_header'] or 'เหย้า \/ เยือน' -- Number of legs local legs = tonumber(Args['legs']) or 1 -- Edit links if requested local template_name = Args['template_name'] or '' local edit_links = template_name == '' and '' or frame:expandTemplate{ title = 'navbar', args = { mini=1, style='float:right', template_name} } -- Load some other modules local p_sub = require('Module:Sports table/sub') -- Read in number of consecutive teams (ignore entries after skipping a spot) while Args['team'..N_teams+1] ~= nil do N_teams = N_teams+1 -- Sneakily add it twice to the team_list parameter, once for the actual -- ranking, the second for position lookup in sub-tables -- This is possible because Lua allows both numbers and strings as indices. team_list[N_teams] = Args['team'..N_teams] -- i^th entry is team X team_list[Args['team'..N_teams]] = N_teams -- team X entry is position i end -- Get team to show local ii_show = team_list[Args['showteam']] -- nil if non-existant -- Set the font size local font_size=Args['font_size'] or '100%' -- Create header -- Open table table.insert(t,'{|class="wikitable plainrowheaders" style="text-align:center;font-size:'..font_size..';"\n') -- First column t_return.count = 0 -- Dummy parameter, using subfunction call seems best at this point because both module are intertwined t_return.tab_text = t-- Actual text t_return = p_sub.colhead(t_return,'auto', edit_links .. ' ' .. team_header) -- Other columns passed to subfunction t_return = p.header(t_return,Args,p_sub,N_teams,team_list,legs) t = t_return.tab_text -- Random value used for uniqueness math.randomseed( os.clock() * 10^8 ) local rand_val = math.random() local note_string, note_id local note_id_list = {} -- Now create individual rows for ii=1,N_teams do -- Get team info team_code_ii = team_list[ii] team_name = Args['name_'..team_code_ii] or team_code_ii local ii_style = 'text-align:right;' .. (ii and ii == ii_show and 'font-weight:bold;' or '') -- Team names table.insert(t,'|- \n')-- New row table.insert(t,'! scope="row" style="' .. ii_style ..'"| '..team_name..'\n')-- Position number -- Now include note to match results if needed for jj=1,N_teams do local team_code_jj = team_list[jj] if ii == jj then -- Nothing else for l=1,legs do local m = (legs == 1) and 'match_' or 'match' .. l .. '_' local match_note = Args[m ..team_code_ii..'_'..team_code_jj..'_note'] if match_note then notes_exist = true -- Only when it exist -- First check for existence of reference for note if not (Args['note_'..match_note] or Args[m ..match_note..'_note']) then -- It's the entry -- Add random end for unique ID if more tables are present on article (which might otherwise share an ID) note_id = '"table_note_'..team_code_ii..'_'..team_code_jj..rand_val..'"' note_id_list[team_code_ii..'_'..team_code_jj] = note_id note_string = frame:expandTemplate{ title = 'efn', args = { group='Table_notes', name=note_id, match_note} } else -- Check for existence elsewhere note_local_num = team_list[match_note] or ii_end + 1 if note_id_list[match_note] or ((note_local_num >= ii_start) and (note_local_num <= ii_end)) then -- It exists note_id = '"table_note_'..match_note..rand_val..'"' -- Identifier note_string = frame:extensionTag{ name = 'ref', args = { group = 'lower-alpha', name = note_id} } else -- Now define the identifier for this -- Add random end for unique ID note_id = '"table_note_'..match_note..rand_val..'"' note_id_list[match_note] = note_id -- Call refn template note_string = frame:expandTemplate{ title = 'efn', args = { group='Table_notes', name=note_id, Args['note_'..match_note]} } end end -- Now append this to the match result string Args[m..team_code_ii..'_'..team_code_jj] = Args[m..team_code_ii..'_'..team_code_jj]..note_string end end end end -- Then individual results t = p.row(t,Args,N_teams,team_list,ii,ii_show,legs) end -- Close table table.insert(t, '|}\n') -- Get info for footer local update = Args['update'] or 'unknown' local start_date = Args['start_date'] or 'unknown' local source = Args['source'] or frame:expandTemplate{ title = 'citation needed', args = { reason='No source parameter defined', date=os.date('%B %Y') } } -- Create footer text -- Date updating if string.lower(update)=='complete' then -- Do nothing elseif update=='' then -- Empty parameter table.insert(t_footer,'Updated to match(es) played on unknown. ') elseif string.lower(update)=='future' then -- Future start date table.insert(t_footer,'การแข่งขันจะเริ่มขึ้นในวันที่ '..start_date..'. ') else table.insert(t_footer,'นับผลการแข่งขันล่าสุดถึงวันที่ '..update..'. ') end table.insert(t_footer,'ที่มา: '..source) if (Args['matches_style'] or '') == 'FBR' then table.insert(t_footer, Args['team_header'] and '<br />สีฟ้าหมายถึงทีมในคอลัมน์ด้านซ้ายชนะ สีเหลืองหมายถึงเสมอกัน และสีแดงหมายถึงทีมในแถวด้านบนชนะ' or '<br />สีฟ้าหมายถึงทีมเหย้าชนะ สีเหลืองหมายถึงเสมอกัน และสีแดงหมายถึงทีมเยือนชนะ') elseif (Args['matches_style'] or '') == 'BSR' then table.insert(t_footer, Args['team_header'] and '<br />สีฟ้าหมายถึงทีมในคอลัมน์ด้านซ้ายชนะ สีเหลืองหมายถึงเสมอกัน และสีแดงหมายถึงทีมในแถวด้านบนชนะ' or '<br />สีฟ้าหมายถึงทีมเหย้าชนะ สีเหลืองหมายถึงเสมอกัน และสีแดงหมายถึงทีมเยือนชนะ') end if (Args['a_note'] or '') ~= '' then table.insert(t_footer, '<br />อักษร "a" สำหรับการแข่งขันที่ยังไม่เกิดขึ้นหมายความว่ามีบทความเกี่ยวกับการแข่งขันนัดนี้') end if (Args['ot_note'] or '') ~= '' then table.insert(t_footer, '<br />การแข่งขันที่แรเงาสีจางหมายถึงมีการต่อเวลาพิเศษ') end -- Add notes (if applicable) if notes_exist then table.insert(t_footer,'<br>Notes:') -- As reflist size text t_footer = '<div class="reflist">'..table.concat(t_footer)..'</div>' t_footer = t_footer..frame:expandTemplate{ title = 'notelist', args = { group='Table_notes'} } else -- As reflist size text t_footer = '<div class="reflist">'..table.concat(t_footer)..'</div>' end -- Add footer to main text table table.insert(t,t_footer) return table.concat(t) end -- Other functions local function get_short_name(s, t, n) -- return short name if defined if s and s ~= '' then return s end -- replace link text in name with team abbr if possible if n and t and n:match('(%[%[[^%[%]]*%]%])') then n = mw.ustring.gsub(n, '(%[%[[^%|%]]*%|)[^%|%]]*(%]%])', '%1' .. t .. '%2') n = mw.ustring.gsub(n, '(%[%[[^%|%]]*)(%]%])', '%1|' .. t .. '%2') return n end -- nothing worked, so just return the unlinked team abbr return t or '' end local function get_score_background(s, c) local s1, s2 -- Define the colouring local wc, lc, tc if c == 'level2' then wc, lc, tc = '#CCF9FF', '#FCC', '#FFC' -- blue2, red2, yellow2 elseif c == 'level3' then wc, lc, tc = '#DDFCFF', '#FDD', '#FFD' -- blue3, red3, yellow3 elseif c == 'level4' then wc, lc, tc = '#EEFFFF', '#FEE', '#FFE' -- blue4, red4, yellow4 else wc, lc, tc = '#BBF3FF', '#FBB', '#FFB' -- blue1, red1, yellow1 end -- delink if necessary if s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') then s = s:match('^%s*%[%[[^%[%]]*%|([^%[%]]*)%]%]') end -- get the scores s1 = tonumber(mw.ustring.gsub( s or '', '^%s*([%d][%d]*)%s*–%s*([%d][%d]*).*', '%1' ) or '') or '' s2 = tonumber(mw.ustring.gsub( s or '', '^%s*([%d][%d]*)%s*–%s*([%d][%d]*).*', '%2' ) or '') or '' -- return colouring if possible if s1 ~= '' and s2 ~= '' then return (s1 > s2) and wc or ((s2 > s1) and lc or tc) else return 'transparent' end end local function format_score(s) s = mw.ustring.gsub(s or '', '^%s*([%d]+)%s*[–−—%-]%s*([%d]+)', '%1–%2') s = mw.ustring.gsub(s, '^%s*([%d]+)%s*&[MmNn][Dd][Aa][Ss][Hh];%s*([%d]+)', '%1–%2') s = mw.ustring.gsub(s, '^%s*(%[%[[^%[%]]*%|[%d]+)%s*%-%s*([%d]+)', '%1–%2') s = mw.ustring.gsub(s, '^%s*(%[%[[^%[%]]*%|[%d]+)%s*&[MmNn][Dd][Aa][Ss][Hh];%s*([%d]+)', '%1–%2') return s end function p.header(tt,Args,p_sub,N_teams,team_list,legs) local ii, team_code_ii, short_name legs = legs or 1 -- Set match column width local col_width = Args['match_col_width'] or '28' -- Get some default values in case it doesn't start at 1 local top_pos = tonumber(Args['highest_pos']) or 1 for l=1,legs do for ii=top_pos,N_teams do team_code_ii = team_list[ii] short_name = get_short_name(Args['short_'..team_code_ii], team_code_ii, Args['name_'..team_code_ii]) local bl = legs > 1 and ii == top_pos and ' style="border-left:2px solid #aaa;"' or '' tt = p_sub.colhead(tt,col_width .. bl,short_name) end end return tt end function p.row(tt,Args,N_teams,team_list,ii,ii_show,legs) -- Note ii is the row number being shown local jj, fw, bg, result, result_extra, team_code_ii, team_code_jj legs = legs or 1 -- Set score cell style local matches_style = Args['matches_style'] or '' team_code_ii = team_list[ii] -- Get some default values in case it doesn't start at 1 local top_pos = tonumber(Args['highest_pos']) or 1 for l=1,legs do for jj=top_pos,N_teams do team_code_jj = team_list[jj] local m = (legs == 1) and 'match_' or 'match' .. l .. '_' result = Args[m..team_code_ii..'_'..team_code_jj] or '' result_extra = Args['result_'..team_code_ii..'_'..team_code_jj] or '' local bl = legs > 1 and jj == top_pos and 'border-left:2px solid #aaa;' or '' if ii == jj or result == 'null' then -- Solid cell fw = 'font-weight:' .. (ii==ii_show and 'bold' or 'normal') .. ';' bg = 'background:transparent;' -- Grey background color for solid cell if Args['solid_cell'] == 'grey' then table.insert(tt,'| style="'..fw..bl..'background:#bbb;" |\n') else table.insert(tt,'| style="'..fw..bl..bg..'" | —\n') end else -- Content cell -- Set bolding and background fw = 'font-weight:' .. ((ii==ii_show or jj == ii_show) and 'bold' or 'normal') .. ';' bg = 'background:transparent;' -- Reformat dashes if result ~= '' then result = format_score(result) end -- Background coloring if enabled if matches_style == 'FBR' and result ~= '' then if result_extra == 'OT' then bg = 'background:' .. get_score_background(result,'level2') .. ';' elseif result_extra == 'PK' then bg = 'background:' .. get_score_background(result,'level3') .. ';' else bg = 'background:' .. get_score_background(result,'') .. ';' end elseif matches_style == 'BSR' and result ~= '' then if result_extra == 'OT' then bg = 'background:' .. get_score_background(result,'level3') .. ';' else bg = 'background:' .. get_score_background(result,'') .. ';' end end table.insert(tt,'| style="white-space:nowrap;'..fw..bl..bg..'" |'..result..'\n') end end end return tt end return p
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
khumuxkarichnganmxdul srang khunxaccatxngkarsrangkhumuxkarichngankhxngmxdulni phuekhiynsamarththakarthdlxngidthikrabathray srang khdlxk aelachudthdsxb srang khxngmxdulni oprdephimhmwdhmuipthihnayxy hnayxykhxngmxdulni Module to build results cross tables for standings in Sports See documentation for details require Module No globals local p Main function function p main frame Declare locals local Args frame args local N teams 0 local t local t footer local t return local team list local notes exist false local ii ii fw bg col team name team code ii Optional custom team header local team header Args team header or ehya eyuxn Number of legs local legs tonumber Args legs or 1 Edit links if requested local template name Args template name or local edit links template name and or frame expandTemplate title navbar args mini 1 style float right template name Load some other modules local p sub require Module Sports table sub Read in number of consecutive teams ignore entries after skipping a spot while Args team N teams 1 nil do N teams N teams 1 Sneakily add it twice to the team list parameter once for the actual ranking the second for position lookup in sub tables This is possible because Lua allows both numbers and strings as indices team list N teams Args team N teams i th entry is team X team list Args team N teams N teams team X entry is position i end Get team to show local ii show team list Args showteam nil if non existant Set the font size local font size Args font size or 100 Create header Open table table insert t class wikitable plainrowheaders style text align center font size font size n First column t return count 0 Dummy parameter using subfunction call seems best at this point because both module are intertwined t return tab text t Actual text t return p sub colhead t return auto edit links team header Other columns passed to subfunction t return p header t return Args p sub N teams team list legs t t return tab text Random value used for uniqueness math randomseed os clock 10 8 local rand val math random local note string note id local note id list Now create individual rows for ii 1 N teams do Get team info team code ii team list ii team name Args name team code ii or team code ii local ii style text align right ii and ii ii show and font weight bold or Team names table insert t n New row table insert t scope row style ii style team name n Position number Now include note to match results if needed for jj 1 N teams do local team code jj team list jj if ii jj then Nothing else for l 1 legs do local m legs 1 and match or match l local match note Args m team code ii team code jj note if match note then notes exist true Only when it exist First check for existence of reference for note if not Args note match note or Args m match note note then It s the entry Add random end for unique ID if more tables are present on article which might otherwise share an ID note id table note team code ii team code jj rand val note id list team code ii team code jj note id note string frame expandTemplate title efn args group Table notes name note id match note else Check for existence elsewhere note local num team list match note or ii end 1 if note id list match note or note local num gt ii start and note local num lt ii end then It exists note id table note match note rand val Identifier note string frame extensionTag name ref args group lower alpha name note id else Now define the identifier for this Add random end for unique ID note id table note match note rand val note id list match note note id Call refn template note string frame expandTemplate title efn args group Table notes name note id Args note match note end end Now append this to the match result string Args m team code ii team code jj Args m team code ii team code jj note string end end end end Then individual results t p row t Args N teams team list ii ii show legs end Close table table insert t n Get info for footer local update Args update or unknown local start date Args start date or unknown local source Args source or frame expandTemplate title citation needed args reason No source parameter defined date os date B Y Create footer text Date updating if string lower update complete then Do nothing elseif update then Empty parameter table insert t footer Updated to match es played on unknown elseif string lower update future then Future start date table insert t footer karaekhngkhncaerimkhuninwnthi start date else table insert t footer nbphlkaraekhngkhnlasudthungwnthi update end table insert t footer thima source if Args matches style or FBR then table insert t footer Args team header and lt br gt sifahmaythungthiminkhxlmndansaychna siehluxnghmaythungesmxkn aelasiaednghmaythungthiminaethwdanbnchna or lt br gt sifahmaythungthimehyachna siehluxnghmaythungesmxkn aelasiaednghmaythungthimeyuxnchna elseif Args matches style or BSR then table insert t footer Args team header and lt br gt sifahmaythungthiminkhxlmndansaychna siehluxnghmaythungesmxkn aelasiaednghmaythungthiminaethwdanbnchna or lt br gt sifahmaythungthimehyachna siehluxnghmaythungesmxkn aelasiaednghmaythungthimeyuxnchna end if Args a note or then table insert t footer lt br gt xksr a sahrbkaraekhngkhnthiyngimekidkhunhmaykhwamwamibthkhwamekiywkbkaraekhngkhnndni end if Args ot note or then table insert t footer lt br gt karaekhngkhnthiaerengasicanghmaythungmikartxewlaphiess end Add notes if applicable if notes exist then table insert t footer lt br gt Notes As reflist size text t footer lt div class reflist gt table concat t footer lt div gt t footer t footer frame expandTemplate title notelist args group Table notes else As reflist size text t footer lt div class reflist gt table concat t footer lt div gt end Add footer to main text table table insert t t footer return table concat t end Other functions local function get short name s t n return short name if defined if s and s then return s end replace link text in name with team abbr if possible if n and t and n match then n mw ustring gsub n 1 t 2 n mw ustring gsub n 1 t 2 return n end nothing worked so just return the unlinked team abbr return t or end local function get score background s c local s1 s2 Define the colouring local wc lc tc if c level2 then wc lc tc CCF9FF FCC FFC blue2 red2 yellow2 elseif c level3 then wc lc tc DDFCFF FDD FFD blue3 red3 yellow3 elseif c level4 then wc lc tc EEFFFF FEE FFE blue4 red4 yellow4 else wc lc tc BBF3FF FBB FFB blue1 red1 yellow1 end delink if necessary if s match s then s s match s end get the scores s1 tonumber mw ustring gsub s or s d d s s d d 1 or or s2 tonumber mw ustring gsub s or s d d s s d d 2 or or return colouring if possible if s1 and s2 then return s1 gt s2 and wc or s2 gt s1 and lc or tc else return transparent end end local function format score s s mw ustring gsub s or s d s s d 1 2 s mw ustring gsub s s d s amp MmNn Dd Aa Ss Hh s d 1 2 s mw ustring gsub s s d s s d 1 2 s mw ustring gsub s s d s amp MmNn Dd Aa Ss Hh s d 1 2 return s end function p header tt Args p sub N teams team list legs local ii team code ii short name legs legs or 1 Set match column width local col width Args match col width or 28 Get some default values in case it doesn t start at 1 local top pos tonumber Args highest pos or 1 for l 1 legs do for ii top pos N teams do team code ii team list ii short name get short name Args short team code ii team code ii Args name team code ii local bl legs gt 1 and ii top pos and style border left 2px solid aaa or tt p sub colhead tt col width bl short name end end return tt end function p row tt Args N teams team list ii ii show legs Note ii is the row number being shown local jj fw bg result result extra team code ii team code jj legs legs or 1 Set score cell style local matches style Args matches style or team code ii team list ii Get some default values in case it doesn t start at 1 local top pos tonumber Args highest pos or 1 for l 1 legs do for jj top pos N teams do team code jj team list jj local m legs 1 and match or match l result Args m team code ii team code jj or result extra Args result team code ii team code jj or local bl legs gt 1 and jj top pos and border left 2px solid aaa or if ii jj or result null then Solid cell fw font weight ii ii show and bold or normal bg background transparent Grey background color for solid cell if Args solid cell grey then table insert tt style fw bl background bbb n else table insert tt style fw bl bg amp mdash n end else Content cell Set bolding and background fw font weight ii ii show or jj ii show and bold or normal bg background transparent Reformat dashes if result then result format score result end Background coloring if enabled if matches style FBR and result then if result extra OT then bg background get score background result level2 elseif result extra PK then bg background get score background result level3 else bg background get score background result end elseif matches style BSR and result then if result extra OT then bg background get score background result level3 else bg background get score background result end end table insert tt style white space nowrap fw bl bg result n end end end return tt end return p