<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AIce_hockey_box</id>
	<title>Module:Ice hockey box - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AIce_hockey_box"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Ice_hockey_box&amp;action=history"/>
	<updated>2026-06-14T13:43:55Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Ice_hockey_box&amp;diff=472223&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Ice_hockey_box&amp;diff=472223&amp;oldid=prev"/>
		<updated>2021-07-15T22:20:27Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- implements [[template:IceHockeybox]]&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local errorcats = ''&lt;br /&gt;
&lt;br /&gt;
local function isnotempty(s)&lt;br /&gt;
	return s and s:match( '^%s*(.-)%s*$' ) ~= ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mysplit(s)&lt;br /&gt;
	-- Change &amp;lt;br&amp;gt; tags to slashes&lt;br /&gt;
	s = mw.ustring.gsub(s or '', '&amp;lt;[\/%s]*[Bb][Rr][^&amp;lt;&amp;gt;]*&amp;gt;', ' / ')&lt;br /&gt;
	s = mw.ustring.gsub(s or '', '[%s]* /[%s]*', ' / ')&lt;br /&gt;
	s = mw.ustring.gsub(s or '', '[%s]*/ [%s]*', ' / ')&lt;br /&gt;
	-- Split into a table&lt;br /&gt;
	s = mw.text.split(s .. ' / ', ' / ')&lt;br /&gt;
	-- Remove empty rows&lt;br /&gt;
	local t = {}&lt;br /&gt;
	for k=1,#s do&lt;br /&gt;
		if isnotempty(s[k]) then&lt;br /&gt;
			table.insert(t, s[k])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function scoringtable(g1, g2, p)&lt;br /&gt;
	local root = ''&lt;br /&gt;
	-- If there is no progression then do a very simple format&lt;br /&gt;
	if (not isnotempty(p)) and (isnotempty(g1) or isnotempty(g2)) then&lt;br /&gt;
		root = mw.html.create('table')&lt;br /&gt;
			root&lt;br /&gt;
				:attr('cellspacing', '0')&lt;br /&gt;
				:css('width', '100%')&lt;br /&gt;
		local row = root:tag('tr'):css('text-align','top')&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:css('text-align','right')&lt;br /&gt;
			:css('width', '39%')&lt;br /&gt;
			:wikitext(g1 or '')&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:css('text-align','center')&lt;br /&gt;
			:css('width', '22%')&lt;br /&gt;
			:tag('i'):wikitext('Goals')&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:css('text-align','left')&lt;br /&gt;
			:css('width', '39%')&lt;br /&gt;
			:wikitext(g2 or '')&lt;br /&gt;
		return tostring(root)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Split into tables&lt;br /&gt;
	local gt1 = mysplit(g1)&lt;br /&gt;
	local gt2 = mysplit(g2)&lt;br /&gt;
	local pt  = mysplit(p)&lt;br /&gt;
	-- Align goals with scores in progression&lt;br /&gt;
	local score1, score2 = 0, 0&lt;br /&gt;
	for k = 1,#pt do&lt;br /&gt;
		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&lt;br /&gt;
		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&lt;br /&gt;
		if s1 == (score1 + 1) and s2 == score2 then&lt;br /&gt;
			score1 = s1&lt;br /&gt;
			table.insert(gt2, k, '')&lt;br /&gt;
		elseif s2 == (score2 + 1) and s1 == score1 then&lt;br /&gt;
			score2 = s2&lt;br /&gt;
			table.insert(gt1, k, '')&lt;br /&gt;
		else&lt;br /&gt;
			errorcats = errorcats .. '[[Category:Pages using icehockeybox with improperly formatted progression or goals]]'&lt;br /&gt;
			errorcats = errorcats .. 'Error: Goals/Progression mismatch: S1 = ' .. s1 .. ' S2 = ' .. s2 .. ' GT1 = ' .. (gt1[k] or '') .. ' GT2 = ' .. (gt2[k] or '') .. '&amp;lt;br&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not (#gt1 == #pt) or not(#gt2 == #pt) then&lt;br /&gt;
		errorcats = errorcats .. '[[Category:Pages using icehockeybox with improperly formatted progression or goals]]'&lt;br /&gt;
		errorcats = errorcats .. 'Error: Goals/Progression mismatch: N1 = ' .. #gt1 .. ' N2 = ' .. #gt2 .. ' PN = ' .. #pt .. '&amp;lt;br&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	-- Now build the score table&lt;br /&gt;
	for k=1,#pt do&lt;br /&gt;
		if k == 1 then&lt;br /&gt;
			root = mw.html.create('table')&lt;br /&gt;
			root&lt;br /&gt;
				:attr('cellspacing', '0')&lt;br /&gt;
				:css('width', '100%')&lt;br /&gt;
		end&lt;br /&gt;
		local row = root:tag('tr'):css('text-align','top')&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:css('text-align','right')&lt;br /&gt;
			:css('width', '39%')&lt;br /&gt;
			:wikitext(gt1[k] or '')&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:css('text-align','center')&lt;br /&gt;
			:css('width', '22%')&lt;br /&gt;
			:wikitext(pt[k] or '')&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:css('text-align','left')&lt;br /&gt;
			:css('width', '39%')&lt;br /&gt;
			:wikitext(gt2[k] or '')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.box( frame )&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local res = ''&lt;br /&gt;
	local id = args['id'] or ''&lt;br /&gt;
	&lt;br /&gt;
	id = mw.ustring.gsub(id,'^&amp;quot;(.-)&amp;quot;$', '%1')&lt;br /&gt;
	&lt;br /&gt;
	local root = mw.html.create('table')&lt;br /&gt;
	root&lt;br /&gt;
		:attr('cellspacing', '0')&lt;br /&gt;
		:attr('id', id )&lt;br /&gt;
		:css('width', '100%')&lt;br /&gt;
		:css('background-color', args['bg'] or '#eeeeee')&lt;br /&gt;
		:addClass('vevent')&lt;br /&gt;
	local row = root:tag('tr'):addClass('summary')&lt;br /&gt;
	-- Date and time&lt;br /&gt;
	local cell = row:tag('td')&lt;br /&gt;
		:css('width', '15%')&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:css('font-size', '85%')&lt;br /&gt;
	cell:wikitext(args['date'] or '')&lt;br /&gt;
	cell:wikitext(isnotempty(args['time']) and '&amp;lt;br&amp;gt;' .. args['time'] or '')&lt;br /&gt;
	-- Team 1&lt;br /&gt;
	cell = row:tag('td')&lt;br /&gt;
		:css('width', '25%')&lt;br /&gt;
		:css('text-align', 'right')&lt;br /&gt;
		:addClass('vcard attendee')&lt;br /&gt;
	cell:tag('span'):addClass('fn org'):wikitext(args['team1'] or '')&lt;br /&gt;
	-- Score&lt;br /&gt;
	cell = row:tag('td')&lt;br /&gt;
		:css('width', '15%')&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
	if isnotempty(args['score']) then&lt;br /&gt;
		cell:tag('b'):wikitext(args['score'])&lt;br /&gt;
	else&lt;br /&gt;
		cell:tag('abbr'):attr('title', 'versus'):css('text-decoration', 'none'):wikitext('v')	&lt;br /&gt;
	end&lt;br /&gt;
	if isnotempty(args['periods']) then&lt;br /&gt;
		cell:wikitext('&amp;lt;br&amp;gt;')&lt;br /&gt;
		cell:tag('small'):wikitext(args['periods'])&lt;br /&gt;
	end&lt;br /&gt;
	-- Team 2&lt;br /&gt;
	cell = row:tag('td')&lt;br /&gt;
		:css('width', '25%')&lt;br /&gt;
		:css('text-align', 'left')&lt;br /&gt;
		:addClass('vcard attendee')&lt;br /&gt;
	cell:tag('span'):addClass('fn org'):wikitext(args['team2'] or '')&lt;br /&gt;
	-- Stadium and attendance&lt;br /&gt;
	cell = row:tag('td')&lt;br /&gt;
		:css('font-size', '85%')&lt;br /&gt;
	if isnotempty(args['stadium']) then&lt;br /&gt;
		cell:tag('span'):addClass('location'):wikitext(args['stadium'])&lt;br /&gt;
	end&lt;br /&gt;
	if isnotempty(args['attendance']) then&lt;br /&gt;
		cell:wikitext('&amp;lt;br&amp;gt;')&lt;br /&gt;
		cell:tag('i'):wikitext('Attendance:')&lt;br /&gt;
		cell:wikitext(' ' .. args['attendance'])&lt;br /&gt;
	end&lt;br /&gt;
	res = res .. tostring(root)&lt;br /&gt;
&lt;br /&gt;
	if isnotempty(args['score']) then&lt;br /&gt;
		root = mw.html.create('table')&lt;br /&gt;
		root&lt;br /&gt;
			:addClass('collapsible collapsed')&lt;br /&gt;
			:attr('cellspacing', '0')&lt;br /&gt;
			:css('width', '100%')&lt;br /&gt;
			:css('background-color', args['bg'] or '#eeeeee')&lt;br /&gt;
		cell = root:tag('tr'):tag('th')&lt;br /&gt;
		cell:attr('colspan', '5')&lt;br /&gt;
			:css('style', 'text-align', 'center')&lt;br /&gt;
			:css('font-size', '85%')&lt;br /&gt;
		if isnotempty(args['reference']) then&lt;br /&gt;
			cell:tag('b'):wikitext('[' .. args['reference'] .. ' Game reference]')&lt;br /&gt;
		end&lt;br /&gt;
		-- Empty spacing&lt;br /&gt;
		row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:attr('rowspan', '7')&lt;br /&gt;
			:css('width', '15%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
&lt;br /&gt;
		-- Goalies&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '25%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'right')&lt;br /&gt;
			:wikitext(args['goalie1'] or '')&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '15%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
		if isnotempty(args['goalie1']) or isnotempty(args['goalie2']) then&lt;br /&gt;
			cell:tag('i'):wikitext('Goalies')&lt;br /&gt;
		end&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '25%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'left')&lt;br /&gt;
			:wikitext(args['goalie2'] or '')&lt;br /&gt;
&lt;br /&gt;
		-- Officials and linesmen&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:attr('rowspan', '7')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
		if isnotempty(args['official']) then&lt;br /&gt;
			if isnotempty(args['official2']) then&lt;br /&gt;
				cell:tag('i'):wikitext('Referees:')&lt;br /&gt;
				cell:wikitext('&amp;lt;br&amp;gt;' .. args['official'] .. '&amp;lt;br&amp;gt;' .. args['official2'])&lt;br /&gt;
			else&lt;br /&gt;
				cell:tag('i'):wikitext('Referee:')&lt;br /&gt;
				cell:wikitext('&amp;lt;br&amp;gt;' .. args['official'])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args['linesman']) then&lt;br /&gt;
			cell:wikitext('&amp;lt;br&amp;gt;')&lt;br /&gt;
			if isnotempty(args['linesman2']) then&lt;br /&gt;
				cell:tag('i'):wikitext('Linesmen:')&lt;br /&gt;
				cell:wikitext('&amp;lt;br&amp;gt;' .. args['linesman'] .. '&amp;lt;br&amp;gt;' .. args['linesman2'])&lt;br /&gt;
			else&lt;br /&gt;
				cell:tag('i'):wikitext('Linesman:')&lt;br /&gt;
				cell:wikitext('&amp;lt;br&amp;gt;' .. args['linesman'])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- Goals and progression&lt;br /&gt;
		row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:attr('colspan', '3')&lt;br /&gt;
			:css('width', '65%')&lt;br /&gt;
			:wikitext(&lt;br /&gt;
				scoringtable(args['goals1'] or '', &lt;br /&gt;
							args['goals2'] or '',&lt;br /&gt;
							args['progression'] or '')&lt;br /&gt;
					)&lt;br /&gt;
		if isnotempty(args['pnote']) then&lt;br /&gt;
			row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
			row:tag('td')&lt;br /&gt;
				:attr('colspan', '3')&lt;br /&gt;
				:css('text-align','center')&lt;br /&gt;
				:css('width', '65%')&lt;br /&gt;
				:wikitext(args['pnote'])&lt;br /&gt;
		end&lt;br /&gt;
		-- Shoot out&lt;br /&gt;
		if isnotempty(args['soshots1']) or isnotempty(args['soshots2']) then&lt;br /&gt;
			soshots1 = table.concat(mysplit(args['soshots1'] or ''), '&amp;lt;br&amp;gt;')&lt;br /&gt;
			soshots2 = table.concat(mysplit(args['soshots2'] or ''), '&amp;lt;br&amp;gt;')&lt;br /&gt;
			row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
			row:tag('td')&lt;br /&gt;
				:css('width', '25%')&lt;br /&gt;
				:css('vertical-align', 'top')&lt;br /&gt;
				:css('text-align', 'right')&lt;br /&gt;
				:wikitext(soshots1 or '')&lt;br /&gt;
			row:tag('td')&lt;br /&gt;
				:css('width', '15%')&lt;br /&gt;
				:css('vertical-align', 'top')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:tag('i'):wikitext('[[Overtime (ice hockey)#Shootout|Shootout]]')&lt;br /&gt;
			row:tag('td')&lt;br /&gt;
				:css('width', '25%')&lt;br /&gt;
				:css('vertical-align', 'top')&lt;br /&gt;
				:css('text-align', 'left')&lt;br /&gt;
				:wikitext(soshots2 or '')&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args['sonote']) then&lt;br /&gt;
			row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
			row:tag('td')&lt;br /&gt;
				:attr('colspan', '3')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('width', '65%')&lt;br /&gt;
				:wikitext(args['sonote'])&lt;br /&gt;
		end&lt;br /&gt;
		-- Second leg overtime&lt;br /&gt;
		if isnotempty(args['otgoals1']) or isnotempty(args['otgoals2']) &lt;br /&gt;
						or isnotempty(args['otprogression']) then&lt;br /&gt;
			row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
			cell = row:tag('td')&lt;br /&gt;
				:attr('colspan', '3')&lt;br /&gt;
				:css('width', '65%')&lt;br /&gt;
				:wikitext(&lt;br /&gt;
					scoringtable(args['otgoals1'] or '', &lt;br /&gt;
							args['otgoals2'] or '',&lt;br /&gt;
							args['otprogression'] or '')&lt;br /&gt;
					)&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args['otnote']) then&lt;br /&gt;
			row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
			row:tag('td')&lt;br /&gt;
				:attr('colspan', '3')&lt;br /&gt;
				:css('text-align','center')&lt;br /&gt;
				:css('width', '65%')&lt;br /&gt;
				:wikitext(args['otnote'])&lt;br /&gt;
		end&lt;br /&gt;
		-- Penalties&lt;br /&gt;
		row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '25%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'right')&lt;br /&gt;
		if isnotempty(args['penalties1']) then&lt;br /&gt;
			cell:tag('i'):wikitext(args['penalties1'] .. ' min')&lt;br /&gt;
		end&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '15%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
		if isnotempty(args['penalties1']) or isnotempty(args['penalties2']) then&lt;br /&gt;
			cell:tag('i'):wikitext('Penalties')&lt;br /&gt;
		end&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '25%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'left')&lt;br /&gt;
		if isnotempty(args['penalties2']) then&lt;br /&gt;
			cell:tag('i'):wikitext(args['penalties2'] .. ' min')&lt;br /&gt;
		end&lt;br /&gt;
		-- Shots&lt;br /&gt;
		row = root:tag('tr'):css('font-size', '85%')&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '25%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'right')&lt;br /&gt;
		if isnotempty(args['shots1']) then&lt;br /&gt;
			cell:tag('i'):wikitext(args['shots1'])&lt;br /&gt;
		end&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '15%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
		if isnotempty(args['shots1']) or isnotempty(args['shots2']) then&lt;br /&gt;
			cell:tag('i'):wikitext('Shots')&lt;br /&gt;
		end&lt;br /&gt;
		cell = row:tag('td')&lt;br /&gt;
			:css('width', '25%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
			:css('text-align', 'left')&lt;br /&gt;
		if isnotempty(args['shots2']) then&lt;br /&gt;
			cell:tag('i'):wikitext(args['shots2'])&lt;br /&gt;
		end&lt;br /&gt;
		res = res .. tostring(root)&lt;br /&gt;
	end&lt;br /&gt;
	if isnotempty(args['note']) then&lt;br /&gt;
		root = mw.html.create('table')&lt;br /&gt;
		root&lt;br /&gt;
			:attr('cellspacing', '0')&lt;br /&gt;
			:css('width', '100%')&lt;br /&gt;
			:css('background-color', args['bg'] or '#eeeeee')&lt;br /&gt;
		cell = root:tag('tr'):tag('td')&lt;br /&gt;
		cell&lt;br /&gt;
			:css('text-align', 'left')&lt;br /&gt;
			:css('font-size', '100%')&lt;br /&gt;
			:tag('i'):wikitext(args['note'])&lt;br /&gt;
		res = res .. tostring(root) .. '[[Category:Pages using icehockeybox with the note parameter]]'&lt;br /&gt;
	end&lt;br /&gt;
	-- tracking&lt;br /&gt;
	if (args['sogoals1'] or args['sogoals2']) then&lt;br /&gt;
		errorcats = errorcats .. '[[Category:Pages using icehockeybox with improperly formatted progression or goals| ]]'&lt;br /&gt;
	end&lt;br /&gt;
	-- make errors visible in preview mode&lt;br /&gt;
	if errorcats ~= '' then&lt;br /&gt;
		if frame:preprocess( &amp;quot;{{REVISIONID}}&amp;quot; ) == &amp;quot;&amp;quot; then&lt;br /&gt;
			errorcats = '&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;' .. errorcats .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
		else&lt;br /&gt;
			errorcats = '&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;' .. errorcats .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return errorcats .. res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>