Mô đun:Football box

-- Implements [[Bản mẫu:Hộp bóng đá]]
local p = {}
local lang = nil
local delink = require('Module:Delink')._delink
local eventschema = "http://schema.org/SportsEvent"
local teamschema = "http://schema.org/SportsTeam"
local placeschema = "http://schema.org/Place"
local penalties = '[[Loạt sút luân lưu (bóng đá)|Loạt sút luân lưu]]'
local aet = '[[Hiệp phụ (bóng đá)|s.h.p.]]'
local asdet = '[[Sudden death (sport)#Association football|a.s.d.e.t.]]'
local agget = '[[Hiệp phụ (bóng đá)|s.h.p.]]/[[Bàn thắng vàng|b.t.v.]]'
local asget = '[[Hiệp phụ (bóng đá)|s.h.p.]]/[[Bàn thắng vàng#Bàn thắng bạc|b.t.b.]]'
local attendance = 'Khán giả:'
local referee = 'Trọng tài:'
local templatestyles = 'Module:Football box/styles.css'

local tracking, preview

local function checkarg(k,v)
	if not k or type(k) ~= 'string' then return end
	
	if  k == 'assistantreferees2' then
		table.insert(tracking, '[[Thể loại:Trang sử dụng hộp bóng đá có assistantreferees|2]]')
	elseif k == 'aggregatescore' or k == 'assistantreferees' or 
			k == 'fourthofficial' or k == 'game' or k == 'motm' or 
			k == 'nobars' or k == 'note' or k == 'result' then
		-- valid and tracked
		table.insert(tracking, '[[Thể loại:Trang sử dụng hộp bóng đá có ' .. k .. ']]')
			elseif k == 'size' or k == 'kích thước' or k == 'bg' or k == 'nền màu' or k == 'id' or 
	    k == 'event' or k == 'sự kiện' or k == 'date' or k == 'ngày' or k == 'time' or k == 'giờ' or 
	    k == 'round' or k == 'vòng' or k == 'team1' or k =='đội 1' or k == 'team2' or k =='đội 2' or 
	    k == 'score1' or k == 'tỷ số 1' or k == 'score2' or k == 'tỷ số 2' or 
	    k == 'score' or k == 'tỉ số' or k == 'tỷ số' or k == 'scorenote' or k == 'aet' or k == 'hiệp phụ' or 
	    k == 'asdet' or k == 'agget' or k == 'asget' or k == 'goals1' or k == 'bàn thắng đội 1' or 
	    k == 'report' or k == 'báo cáo' or k == 'goals2' or k == 'bàn thắng đội 2' or 
		k == 'penaltyscore' or k == 'tỉ số luân lưu' or k == 'tỷ số luân lưu' or 
		k == 'penalties1' or k == 'luân lưu đội 1' or k == 'penalties2' or k == 'luân lưu đội 2' or
		k == 'stadium'  or k == 'sân vận động' or k == 'location' or k == 'vị trí' or 
		k == 'attendance' or k == 'khán giả' or k == 'referee' or k == 'trọng tài' or k == 'stack' or 
		k == 'section' or k == 'transcludesection' then
		-- valid and not tracked
	else
		-- invalid
		local vlen = mw.ustring.len(k)
		k = mw.ustring.sub(k, 1, (vlen < 25) and vlen or 25) 
		k = mw.ustring.gsub(k, '[^%w%-_ ]', '?')
		table.insert(tracking, '[[Thể loại:Trang sử dụng hộp bóng đá có các tham số chưa rõ|' .. k .. ']]')
		table.insert(preview, '"' .. k .. '"')
	end
end

local function timestamp(d, t)
	if not d then return nil end
	
	lang = lang or mw.language.getContentLanguage() -- lazy initialize
	local success, timestamp = pcall(lang.formatDate, lang, 'c', delink({d .. ' ' .. (t or '')}))
	if success then
		return timestamp
	else
		return nil
	end
end

local function fmtlist(s)
	s = mw.ustring.gsub(s or '', '%[%[ *([%?-]) *%]%]', '%1')
	s = mw.ustring.gsub(s, '%[%[ *[%?-] *| *(.-) *%]%]', '%1')
	if mw.ustring.sub(s, 1, 1) == '*' then
		-- could also expand plainlist here
		return mw.getCurrentFrame():extensionTag{
			name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
		} .. tostring(  mw.html.create('div'):addClass('plainlist'):newline():wikitext(s))
	end
	return s
end

local function makelink(s,t)
	if s:match('^[Hh][Tt][Tt][Pp][Ss]?:[^ ]*$') then
		return '[' .. s .. ' ' .. t .. ']'
	end
	return s
end

local function trim(s)
	return s:match('^[\'"%s]*(.-)[\'"%s]*$')
end

local function getid(s)
	s = trim(s or '')
	if s and s ~= '' then
		return s
	end
	return nil
end

local function makeanchor(s)
    s = mw.ustring.gsub(s, '%[%[[Ff][Ii][Ll][Ee]:[^%[%]]*%]%]', '')
    s = mw.ustring.gsub(s, '%[%[[Tt][Ậậ][Pp][ ][Tt][Ii][Nn]:[^%[%]]*%]%]', '') -- để nhận diện chữ "Tập tin:", không xóa để tránh gây lỗi
    s = mw.ustring.gsub(s, '<[Ss][Pp][Aa][Nn][^<>]*>', '')
	s = mw.ustring.gsub(s, '</[Ss][Pp][Aa][Nn][^<>]*>', '')
	s = mw.ustring.gsub(s, '[\'"]', '')
	s = mw.ustring.gsub(s, '%s*&nbsp;%s*', ' ')
	s = mw.ustring.gsub(s, '%[%[[^%[%]%|]*%|([^%[%]]*)%]%]', '%1')
	s = mw.ustring.gsub(s, '%[%[([^%[%]]*)%]%]', '%1')
	s = mw.ustring.gsub(s, '\127[^\127]*UNIQ%-%-[^\127]*%-%x+%-QINU[^\127]*\127', '')
	s = mw.ustring.gsub(s, '<[Ss][Uu][Pp]>[^<>]*</[Ss][Uu][Pp]>', '')
	s = mw.ustring.gsub(s, '%s%s*', ' ')
	return s
end

local function checkTitle()
    local pageTitle = mw.title.getCurrentTitle().text
    local titlePhrases = {
        "vòng bảng", "vòng đấu loại trực tiếp", "vòng chung kết", "vòng đấu hạng",
        "vòng", "vòng loại", "play%-off", "nations league", "hạng đấu [a-d]", "intertoto"
    }
    
    for _, phrase in ipairs(titlePhrases) do
        if mw.ustring.match(mw.ustring.lower(pageTitle), phrase) then
            return true
        end
    end
    
    return false
end

function p.main(frame)
	-- Exit early if we are using section transclusion for a different section
	local tsection = frame:getParent().args['transcludesection'] or frame:getParent().args['section'] or ''
	local bsection = frame.args['section'] or ''
	if( tsection ~= '' and bsection ~= '' ) then
		if( tsection ~= bsection ) then
			return ''
		end
	end
	
	local args = require('Module:Arguments').getArgs(frame)
	
	    args['size'] = args['kích thước'] or args['size']
	    args['bg'] = args['nền màu'] or args['bg']
	    args['event'] = args['sự kiện'] or args['event']
	    args['date'] = args['ngày'] or args['date']
	    args['time'] = args['giờ'] or args['time']
	    args['round'] = args['vòng'] or args['round']
	    args['team1'] = args['đội 1'] or args['team1']
        args['team2'] = args['đội 2'] or args['team2']
	    args['score1'] = args['tỷ số 1'] or args['score1']
        args['score2'] = args['tỷ số 2'] or args['score2']
        args['score'] = args['tỉ số'] or args['tỷ số'] or args['score']
        args['aet'] = args['hiệp phụ'] or args['aet']
        args['goals1'] = args['bàn thắng đội 1'] or args['goals1']
        args['report'] = args['báo cáo'] or args['report']
        args['goals2'] = args['bàn thắng đội 2'] or args['goals2']
        args['penaltyscore'] = args['tỉ số luân lưu'] or args['tỷ số luân lưu'] or args['penaltyscore']
        args['penalties1'] = args['luân lưu đội 1'] or args['penalties1']
        args['penalties2'] = args['luân lưu đội 2'] or args['penalties2']
        args['stadium'] = args['sân vận động'] or args['stadium']
        args['location'] = args['vị trí'] or args['location']
        args['attendance'] = args['khán giả'] or args['attendance']
        args['referee'] = args['trọng tài'] or args['referee']
        
	local id = getid(args['id'])
	local d = timestamp(args['date'], args['time'])
	local block
	
	tracking, preview = {}, {}
    for k, v in pairs(args) do
    	if v ~= '' then
    		checkarg(k,v)
    	end
	end

	local score = 'v'
	if args['score1'] or args['score2'] then
		score = (args['score1'] or '0') .. '&ndash;' .. (args['score2'] or '0')
	elseif args['score'] and args['score'] ~= '' then
		score = args['score']
	end
	if args['aet'] then
		score = score .. ' (' .. aet .. ')'
	elseif args['asdet'] then
		score = score .. ' (' .. asdet .. ')'
	elseif args['agget'] then
		score = score .. ' (' .. agget .. ')'
	elseif args['asget'] then
		score = score .. ' (' .. asget .. ')'
	end
	if args['scorenote'] then
		score = score .. '<br>' .. args['scorenote']
	end
	
	-- Generate an anchor
	if id and id == 'event' and args['event'] then
		id = makeanchor(args['event'])
	end
	if (id and id == 'auto') or (not id and checkTitle()) then
		id = makeanchor((args['team1'] or 'Đội 1') .. ' v ' .. (args['team2'] or 'Đội 2'))
	end
	
	-- Start box
	local root = 
		mw.html.create('div')
			:attr('itemscope', '')
			:attr('itemtype', eventschema)
			:addClass('footballbox')
			:css('width', args['size'])
			:css('background-color', args['bg'])
			:attr('id', id)
	root:newline()
	
	if args['event'] then
		root:tag('div')
			:addClass('ftitle')
			:wikitext(args['event'])
	end
	
	-- Start left block
	block = root:tag('div')
		:addClass('fleft')
	
	local timetag = block:tag('time')
		:attr('itemprop', d and 'startDate' or nil)
		:attr('datetime', d)
		
	timetag:tag('div')
		:addClass('fdate')
		:wikitext(args['date'])
	
	if args['time'] then
		timetag:tag('div')
			:addClass('ftime')
			:wikitext(args['time'])
	end
	
	if args['round'] then
		block:tag('div')
			:addClass('frnd')
			:wikitext(args['round'])
	end
	-- End block
	
	-- Start table
	local rtable = root:tag('table')
		:addClass('fevent')
	local row = rtable:tag('tr')
		:attr('itemprop', 'name')
	row:newline()
	row:tag('th')
		:addClass('fhome')
		:attr('itemprop', 'homeTeam')
		:attr('itemscope', '')
		:attr('itemtype', teamschema)
		:tag('span')
			:attr('itemprop', 'name')
			:wikitext(args['team1'])
	row:tag('th')
		:addClass('fscore')
		:wikitext(score)
	row:tag('th')
		:addClass('faway')
		:attr('itemprop', 'awayTeam')
		:attr('itemscope', '')
		:attr('itemtype', teamschema)
		:tag('span')
			:attr('itemprop', 'name')
			:wikitext(args['team2'])

	row = rtable:tag('tr')
		:addClass('fgoals')
		:newline()
	row:tag('td')
		:addClass('fhgoal')
		:wikitext(fmtlist(args['goals1']))
	row:newline()
	row:tag('td')
		:wikitext(makelink(args['report'] or '', 'Chi tiết'))
	row:newline()
	row:tag('td')
		:addClass('fagoal')
		:wikitext(fmtlist(args['goals2']))
	row:newline()	
	
	if args['penaltyscore'] then
		rtable
			:tag('tr')
				:tag('th')
					:attr('colspan', 3)
					:wikitext(penalties)
		row = rtable:tag('tr')
			:addClass('fgoals')
		row:newline()
		row:tag('td')
			:addClass('fhgoal')
			:wikitext(fmtlist(args['penalties1']))
		row:newline()
		row:tag('th')
			:wikitext(args['penaltyscore'])
		row:newline()
		row:tag('td')
			:addClass('fagoal')
			:wikitext(fmtlist(args['penalties2']))
		row:newline()
	end
	-- End table
	
	-- Start right block
	block = root:tag('div')
		:addClass('fright')
	
	if args['stadium'] then
		local sdiv = block:tag('div')
			:attr('itemprop', 'location')
			:attr('itemscope', '')
			:attr('itemtype', placeschema)
		if args['location'] then
			sdiv:tag('span')
				:attr('itemprop', 'name')
				:wikitext(args['stadium'])
			sdiv:wikitext(', ')
			sdiv:tag('span')
				:attr('itemprop', 'address')
				:wikitext(args['location'])
		else
			sdiv:tag('span')
				:attr('itemprop', 'name address')
				:wikitext(args['stadium'])
		end
	end
	
	if args['attendance'] then
		block:tag('div'):wikitext(attendance ..' ' .. args['attendance'])
	end
	if args['referee'] then
		block:tag('div'):wikitext(referee .. ' ' .. args['referee'])
	end

	local trackstr = (#tracking > 0) and table.concat(tracking, '') or ''
	if #preview > 0 then
		trackstr = require('Module:If preview')._warning({
			'Các tham số chưa rõ ' .. table.concat(preview, '; ') .. '.'
		}) .. trackstr
	end
	
	return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(root) .. trackstr
end

return p
Chúng tôi bán
Bài viết liên quan
Hướng dẫn tạo Image Slider với Vanila JS
Hướng dẫn tạo Image Slider với Vanila JS
Make an Image Slider also known as carousel with a clean UI
[Homo Scachorum] Giỏi cờ vua hơn không đồng nghĩa với thông minh hơn
[Homo Scachorum] Giỏi cờ vua hơn không đồng nghĩa với thông minh hơn
Trong các bài trước chúng ta đã biết rằng vào thời kì Cờ vua Lãng mạn, cờ vua được coi như một công cụ giáo dục không thể chối cãi
Chongyun: Giải mã cuộc đời
Chongyun: Giải mã cuộc đời
Chắc ai cũng biết về Chongyun ngây thơ và đáng yêu này rồi
Hướng dẫn vượt La Hoàn Thâm Cảnh tầng 7 Genshin Impact
Hướng dẫn vượt La Hoàn Thâm Cảnh tầng 7 Genshin Impact
Tầng 7 toàn bộ quái đều là lính Fatui, sau 1 thời gian nhất định sẽ xuất hiện khiên nguyên tố giúp giảm 1 lượng lớn sát thương nhận vào