Bước tới nội dung

Mô đun:Ice hockey box

Bách khoa toàn thư mở Wikipedia
-- implements [[template:IceHockeybox]]local p = {}local errorcats = ''local function isnotempty(s)	return s and s:match( '^%s*(.-)%s*$' ) ~= ''endlocal function mysplit(s)	-- Change <br> tags to slashes	s = mw.ustring.gsub(s or '', '<[\/%s]*[Bb][Rr][^<>]*>', ' / ')	s = mw.ustring.gsub(s or '', '[%s]* /[%s]*', ' / ')	s = mw.ustring.gsub(s or '', '[%s]*/ [%s]*', ' / ')	-- Split into a table	s = mw.text.split(s .. ' / ', ' / ')	-- Remove empty rows	local t = {}	for k=1,#s do		if isnotempty(s[k]) then			table.insert(t, s[k])		end	end	return tendlocal function scoringtable(g1, g2, p)	local root = ''	-- If there is no progression then do a very simple format	if (not isnotempty(p)) and (isnotempty(g1) or isnotempty(g2)) then		root = mw.html.create('table')			root				:attr('cellspacing', '0')				:css('width', '100%')		local row = root:tag('tr'):css('text-align','top')		row:tag('td')			:css('text-align','right')			:css('width', '39%')			:wikitext(g1 or '')		row:tag('td')			:css('text-align','center')			:css('width', '22%')			:tag('i'):wikitext('Bàn thắng')		row:tag('td')			:css('text-align','left')			:css('width', '39%')			:wikitext(g2 or '')		return tostring(root)	end		-- Split into tables	local gt1 = mysplit(g1)	local gt2 = mysplit(g2)	local pt  = mysplit(p)	-- Align goals with scores in progression	local score1, score2 = 0, 0	for k = 1,#pt do		local s1 = tonumber(mw.ustring.gsub(pt[k] or '', '^[%s]*([0-9][0-9]*)[^0-9][^0-9]*([0-9][0-9]*)[%s]*$', '%1') or '-1') or -1		local s2 = tonumber(mw.ustring.gsub(pt[k] or '', '^[%s]*([0-9][0-9]*)[^0-9][^0-9]*([0-9][0-9]*)[%s]*$', '%2') or '-1') or -1		if s1 == (score1 + 1) and s2 == score2 then			score1 = s1			table.insert(gt2, k, '')		elseif s2 == (score2 + 1) and s1 == score1 then			score2 = s2			table.insert(gt1, k, '')		else			errorcats = errorcats .. '[[Thể loại:Trang sử dụng icehockeybox với diễn biến hoặc bàn thắng được định dạng sai]]'			errorcats = errorcats .. 'Lỗi: Bàn thắng/Progression không khớp: S1 = ' .. s1 .. ' S2 = ' .. s2 .. ' GT1 = ' .. (gt1[k] or '') .. ' GT2 = ' .. (gt2[k] or '') .. '<br>'		end	end	if not (#gt1 == #pt) or not(#gt2 == #pt) then		errorcats = errorcats .. '[[Thể loại:Trang sử dụng icehockeybox với diễn biến hoặc bàn thắng được định dạng sai]]'		errorcats = errorcats .. 'Lỗi: Bàn thắng/Progression không khớp: N1 = ' .. #gt1 .. ' N2 = ' .. #gt2 .. ' PN = ' .. #pt .. '<br>'	end	-- Now build the score table	for k=1,#pt do		if k == 1 then			root = mw.html.create('table')			root				:attr('cellspacing', '0')				:css('width', '100%')		end		local row = root:tag('tr'):css('text-align','top')		row:tag('td')			:css('text-align','right')			:css('width', '39%')			:wikitext(gt1[k] or '')		row:tag('td')			:css('text-align','center')			:css('width', '22%')			:wikitext(pt[k] or '')		row:tag('td')			:css('text-align','left')			:css('width', '39%')			:wikitext(gt2[k] or '')	end		return tostring(root)endfunction p.box( frame )	local args = frame:getParent().args	local res = ''	local id = args['id'] or ''		id = mw.ustring.gsub(id,'^"(.-)"$', '%1')		local root = mw.html.create('table')	root		:attr('cellspacing', '0')		:attr('id', id )		:css('width', '100%')		:css('background-color', args['bg'] or '#eeeeee')		:addClass('')	local row = root:tag('tr'):addClass('summary')	-- Date and time	local cell = row:tag('td')		:css('width', '15%')		:css('text-align', 'center')		:css('font-size', '85%')	cell:wikitext(args['date'] or '')	cell:wikitext(isnotempty(args['time']) and '<br>' .. args['time'] or '')	-- Team 1	cell = row:tag('td')		:css('width', '25%')		:css('text-align', 'right')		:addClass(' attendee')	cell:tag('span'):addClass('fn org'):wikitext(args['team1'] or '')	-- Score	cell = row:tag('td')		:css('width', '15%')		:css('text-align', 'center')	if isnotempty(args['score']) then		cell:tag('b'):wikitext(args['score'])	else		cell:tag('abbr'):attr('title', 'versus'):css('text-decoration', 'none'):wikitext('v')		end	if isnotempty(args['periods']) then		cell:wikitext('<br>')		cell:tag('small'):wikitext(args['periods'])	end	-- Team 2	cell = row:tag('td')		:css('width', '25%')		:css('text-align', 'left')		:addClass(' attendee')	cell:tag('span'):addClass('fn org'):wikitext(args['team2'] or '')	-- Stadium and attendance	cell = row:tag('td')		:css('font-size', '85%')	if isnotempty(args['stadium']) then		cell:tag('span'):addClass('location'):wikitext(args['stadium'])	end	if isnotempty(args['attendance']) then		cell:wikitext('<br>')		cell:tag('i'):wikitext('Số khán giả:')		cell:wikitext(' ' .. args['attendance'])	end	res = res .. tostring(root)	if isnotempty(args['score']) then		root = mw.html.create('table')		root			:addClass('collapsible collapsed')			:attr('cellspacing', '0')			:css('width', '100%')			:css('background-color', args['bg'] or '#eeeeee')		cell = root:tag('tr'):tag('th')		cell:attr('colspan', '5')			:css('style', 'text-align', 'center')			:css('font-size', '85%')		if isnotempty(args['reference']) then			cell:tag('b'):wikitext('[' .. args['reference'] .. ' Nguồn]')		end		-- Empty spacing		row = root:tag('tr'):css('font-size', '85%')		cell = row:tag('td')			:attr('rowspan', '7')			:css('width', '15%')			:css('vertical-align', 'top')		-- Goalies		cell = row:tag('td')			:css('width', '25%')			:css('vertical-align', 'top')			:css('text-align', 'right')			:wikitext(args['goalie1'] or '')		cell = row:tag('td')			:css('width', '15%')			:css('vertical-align', 'top')			:css('text-align', 'center')		if isnotempty(args['goalie1']) or isnotempty(args['goalie2']) then			cell:tag('i'):wikitext('Thủ môn')		end		cell = row:tag('td')			:css('width', '25%')			:css('vertical-align', 'top')			:css('text-align', 'left')			:wikitext(args['goalie2'] or '')		-- Officials and linesmen		cell = row:tag('td')			:attr('rowspan', '7')			:css('vertical-align', 'top')		if isnotempty(args['official']) then			if isnotempty(args['official2']) then				cell:tag('i'):wikitext('Trọng tài:')				cell:wikitext('<br>' .. args['official'] .. '<br>' .. args['official2'])			else				cell:tag('i'):wikitext('Trọng tài:')				cell:wikitext('<br>' .. args['official'])			end		end		if isnotempty(args['linesman']) then			cell:wikitext('<br>')			if isnotempty(args['linesman2']) then				cell:tag('i'):wikitext('Trọng tài biên:')				cell:wikitext('<br>' .. args['linesman'] .. '<br>' .. args['linesman2'])			else				cell:tag('i'):wikitext('Trọng tài biên:')				cell:wikitext('<br>' .. args['linesman'])			end		end		-- Goals and progression		row = root:tag('tr'):css('font-size', '85%')		cell = row:tag('td')			:attr('colspan', '3')			:css('width', '65%')			:wikitext(				scoringtable(args['goals1'] or '', 							args['goals2'] or '',							args['progression'] or '')					)		if isnotempty(args['pnote']) then			row = root:tag('tr'):css('font-size', '85%')			row:tag('td')				:attr('colspan', '3')				:css('text-align','center')				:css('width', '65%')				:wikitext(args['pnote'])		end		-- Shoot out		if isnotempty(args['soshots1']) or isnotempty(args['soshots2']) then			soshots1 = table.concat(mysplit(args['soshots1'] or ''), '<br>')			soshots2 = table.concat(mysplit(args['soshots2'] or ''), '<br>')			row = root:tag('tr'):css('font-size', '85%')			row:tag('td')				:css('width', '25%')				:css('vertical-align', 'top')				:css('text-align', 'right')				:wikitext(soshots1 or '')			row:tag('td')				:css('width', '15%')				:css('vertical-align', 'top')				:css('text-align', 'center')				:tag('i'):wikitext('[[Hiệp phụ (khúc côn cầu trên băng)#Luân lưu|Luân lưu]]')			row:tag('td')				:css('width', '25%')				:css('vertical-align', 'top')				:css('text-align', 'left')				:wikitext(soshots2 or '')		end		if isnotempty(args['sonote']) then			row = root:tag('tr'):css('font-size', '85%')			row:tag('td')				:attr('colspan', '3')				:css('text-align', 'center')				:css('width', '65%')				:wikitext(args['sonote'])		end		-- Second leg overtime		if isnotempty(args['otgoals1']) or isnotempty(args['otgoals2']) 						or isnotempty(args['otprogression']) then			row = root:tag('tr'):css('font-size', '85%')			cell = row:tag('td')				:attr('colspan', '3')				:css('width', '65%')				:wikitext(					scoringtable(args['otgoals1'] or '', 							args['otgoals2'] or '',							args['otprogression'] or '')					)		end		if isnotempty(args['otnote']) then			row = root:tag('tr'):css('font-size', '85%')			row:tag('td')				:attr('colspan', '3')				:css('text-align','center')				:css('width', '65%')				:wikitext(args['otnote'])		end		-- Penalties		row = root:tag('tr'):css('font-size', '85%')		cell = row:tag('td')			:css('width', '25%')			:css('vertical-align', 'top')			:css('text-align', 'right')		if isnotempty(args['penalties1']) then			cell:tag('i'):wikitext(args['penalties1'] .. ' phút')		end		cell = row:tag('td')			:css('width', '15%')			:css('vertical-align', 'top')			:css('text-align', 'center')		if isnotempty(args['penalties1']) or isnotempty(args['penalties2']) then			cell:tag('i'):wikitext('Số phút bị phạt')		end		cell = row:tag('td')			:css('width', '25%')			:css('vertical-align', 'top')			:css('text-align', 'left')		if isnotempty(args['penalties2']) then			cell:tag('i'):wikitext(args['penalties2'] .. ' phút')		end		-- Shots		row = root:tag('tr'):css('font-size', '85%')		cell = row:tag('td')			:css('width', '25%')			:css('vertical-align', 'top')			:css('text-align', 'right')		if isnotempty(args['shots1']) then			cell:tag('i'):wikitext(args['shots1'])		end		cell = row:tag('td')			:css('width', '15%')			:css('vertical-align', 'top')			:css('text-align', 'center')		if isnotempty(args['shots1']) or isnotempty(args['shots2']) then			cell:tag('i'):wikitext('Số cú đánh')		end		cell = row:tag('td')			:css('width', '25%')			:css('vertical-align', 'top')			:css('text-align', 'left')		if isnotempty(args['shots2']) then			cell:tag('i'):wikitext(args['shots2'])		end		res = res .. tostring(root)	end	if isnotempty(args['note']) then		root = mw.html.create('table')		root			:attr('cellspacing', '0')			:css('width', '100%')			:css('background-color', args['bg'] or '#eeeeee')		cell = root:tag('tr'):tag('td')		cell			:css('text-align', 'left')			:css('font-size', '100%')			:tag('i'):wikitext(args['note'])		res = res .. tostring(root) .. '[[Category:Trang sử dụng icehockeybox với tham số note]]'	end	-- tracking	if (args['sogoals1'] or args['sogoals2']) then		errorcats = errorcats .. '[[Thể loại:Trang sử dụng icehockeybox với diễn biến hoặc bàn thắng được định dạng sai| ]]'	end	-- make errors visible in preview mode	if errorcats ~= '' then		if frame:preprocess( "{{REVISIONID}}" ) == "" then			errorcats = '<span class="error">' .. errorcats .. '</span>'		else			errorcats = '<span style="display:none">' .. errorcats .. '</span>'		end	end	return errorcats .. resendreturn p