

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://fa.imamatpedia.com/w/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AMedical_cases_chart</id>
	<title>پودمان:Medical cases chart - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://fa.imamatpedia.com/w/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AMedical_cases_chart"/>
	<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Medical_cases_chart&amp;action=history"/>
	<updated>2026-04-20T04:28:15Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Medical_cases_chart&amp;diff=526483&amp;oldid=prev</id>
		<title>Heydari: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Medical_cases_chart&amp;diff=526483&amp;oldid=prev"/>
		<updated>2021-09-01T10:49:26Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fa&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;→ نسخهٔ قدیمی‌تر&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;نسخهٔ ‏۱ سپتامبر ۲۰۲۱، ساعت ۱۴:۱۹&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fa&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(بدون تفاوت)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Heydari</name></author>
	</entry>
	<entry>
		<id>https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Medical_cases_chart&amp;diff=526482&amp;oldid=prev</id>
		<title>fa&gt;Hooman91 در ‏۵ ژوئن ۲۰۲۰، ساعت ۱۶:۵۱</title>
		<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Medical_cases_chart&amp;diff=526482&amp;oldid=prev"/>
		<updated>2020-06-05T16:51:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local barBox = require(&amp;#039;Module:Bar box&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local language = &amp;#039;fa-IR&amp;#039; -- local default language&lt;br /&gt;
&lt;br /&gt;
local i18n = require(&amp;quot;Module:Medical cases chart/i18n&amp;quot;)[language]&lt;br /&gt;
&lt;br /&gt;
local function is(v)&lt;br /&gt;
	return (v or &amp;#039;&amp;#039;) ~= &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._barColors(n)&lt;br /&gt;
	local colors = {&lt;br /&gt;
		&amp;#039;#A50026&amp;#039;, --deaths&lt;br /&gt;
		&amp;#039;SkyBlue&amp;#039;, --recoveries&lt;br /&gt;
		&amp;#039;Tomato&amp;#039;, --cases or altlbl1&lt;br /&gt;
		&amp;#039;Gold&amp;#039;, --altlbl2&lt;br /&gt;
		&amp;#039;OrangeRed&amp;#039; --altlbl3&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return colors[n]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._legend0(args)&lt;br /&gt;
	return &amp;#039;&amp;lt;span style=&amp;quot;font-size:90%; margin:0px&amp;quot;&amp;gt;&amp;#039; .. &amp;#039;&amp;lt;span style=&amp;quot;&amp;#039; .. &amp;#039;background-color:&amp;#039; .. (args[1] or &amp;#039;none&amp;#039;) .. &amp;#039;; border:&amp;#039; .. (args.border or &amp;#039;none&amp;#039;) .. &amp;#039;; color:&amp;#039; .. (args[1] or &amp;#039;none&amp;#039;) .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. &amp;#039;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;#039; .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; .. &amp;#039;&amp;amp;nbsp;&amp;#039; .. (args[2] or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._customBarStacked(args)&lt;br /&gt;
	barargs = {}&lt;br /&gt;
	barargs[1] = args[1]&lt;br /&gt;
&lt;br /&gt;
	local function _numwidth(nw)&lt;br /&gt;
		if nw == &amp;#039;n&amp;#039; then&lt;br /&gt;
			return 0&lt;br /&gt;
		elseif nw == &amp;#039;t&amp;#039; then&lt;br /&gt;
			return 2.45&lt;br /&gt;
		elseif nw == &amp;#039;m&amp;#039; then&lt;br /&gt;
			return 3.5&lt;br /&gt;
		elseif nw == &amp;#039;w&amp;#039; then&lt;br /&gt;
			return 4.55&lt;br /&gt;
		elseif nw == &amp;#039;x&amp;#039; then&lt;br /&gt;
			return 5.6&lt;br /&gt;
		elseif nw == &amp;#039;d&amp;#039; then&lt;br /&gt;
			return 3.5&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return 3.5&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	width1 = 3.5&lt;br /&gt;
	width2 = 3.5&lt;br /&gt;
	if is(args.numwidth) then&lt;br /&gt;
		width1 = _numwidth(mw.ustring.sub(args.numwidth,1,1))&lt;br /&gt;
		width2 = _numwidth(mw.ustring.sub(args.numwidth,2,2))&lt;br /&gt;
		width3 = _numwidth(mw.ustring.sub(args.numwidth,3,3))&lt;br /&gt;
		width4 = _numwidth(mw.ustring.sub(args.numwidth,4,4))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs[2] =&lt;br /&gt;
		&amp;#039;&amp;lt;span class=&amp;quot;cbs-ibr&amp;quot; style=&amp;quot;padding:0 0.3em 0 0; width:&amp;#039; .. width1 .. &amp;#039;em&amp;quot;&amp;gt;&amp;#039; .. (args[7] or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;span class=&amp;quot;cbs-ibl&amp;quot; style=&amp;quot;width:&amp;#039; .. width2 .. &amp;#039;em&amp;quot;&amp;gt;&amp;#039; .. (args[8] or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if mw.ustring.len(args.numwidth) == 4 then&lt;br /&gt;
		local padding = &amp;#039;0.3em&amp;#039;&lt;br /&gt;
		if mw.ustring.sub(args.numwidth,3,3) == &amp;#039;n&amp;#039; then&lt;br /&gt;
			padding = &amp;#039;0&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		barargs.note2 =&lt;br /&gt;
			&amp;#039;&amp;lt;span class=&amp;quot;cbs-ibr&amp;quot; style=&amp;quot;padding:0 &amp;#039; .. padding .. &amp;#039; 0 0; width:&amp;#039; .. width3 .. &amp;#039;em&amp;quot;&amp;gt;&amp;#039; .. (args[9] or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; ..&lt;br /&gt;
			&amp;#039;&amp;lt;span class=&amp;quot;cbs-ibl&amp;quot; style=&amp;quot;width:&amp;#039; .. width4 .. &amp;#039;em&amp;quot;&amp;gt;&amp;#039; .. (args[10] or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i=1,5 do&lt;br /&gt;
		barargs[2*i + 1] = p._barColors(i)&lt;br /&gt;
		barargs[2*i + 2] = (tonumber(args[i+1]) or 0)/(tonumber(args.divisor) or 1)&lt;br /&gt;
		barargs[&amp;#039;title&amp;#039; .. i] = args[i+1]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs.align = &amp;#039;cdcc&amp;#039;&lt;br /&gt;
	barargs.collapsed = args.collapsed&lt;br /&gt;
	barargs.id = args.id&lt;br /&gt;
	barargs.rowstyle = is(tonumber(args.rowheight)) and (&amp;#039;line-height:&amp;#039;..args.rowheight..&amp;#039;;&amp;#039;) or nil&lt;br /&gt;
&lt;br /&gt;
	return barBox._stacked(barargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._row(args)&lt;br /&gt;
	local barargs = {}&lt;br /&gt;
	local rowDate = args.prevDate or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if is(args[1]) then&lt;br /&gt;
		if pcall(function () mw.getContentLanguage():formatDate(&amp;#039;&amp;#039;, args[1]) end) then&lt;br /&gt;
			barargs[1] = args[1]&lt;br /&gt;
			rowDate = args[1]&lt;br /&gt;
		else&lt;br /&gt;
			barargs[1] = &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. i18n.invalidTime .. &amp;#039;&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		barargs[1] = &amp;#039;⋮&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs[2] = args[2] or 0&lt;br /&gt;
	barargs[3] = args[3] or 0&lt;br /&gt;
&lt;br /&gt;
	if is(args[&amp;#039;alttot1&amp;#039;]) then&lt;br /&gt;
		barargs[4] = args[&amp;#039;alttot1&amp;#039;]&lt;br /&gt;
	elseif args[4] then&lt;br /&gt;
		barargs[4] = (tonumber(args[4]) or 0) - (tonumber(barargs[2]) or 0) - (tonumber(barargs[3]) or 0)&lt;br /&gt;
	else&lt;br /&gt;
		barargs[4] = 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs[5] = args[5] or 0&lt;br /&gt;
&lt;br /&gt;
	if is(args[&amp;#039;alttot2&amp;#039;]) then&lt;br /&gt;
		barargs[6] = args[&amp;#039;alttot2&amp;#039;]&lt;br /&gt;
	elseif args[6] then&lt;br /&gt;
		barargs[6] = (tonumber(args[6]) or 0) - (tonumber(barargs[2]) or 0) - (tonumber(barargs[3]) or 0)&lt;br /&gt;
	else&lt;br /&gt;
		barargs[6] = 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs[7] = args[7] or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local function changeArg(firstright, valuecol, changecol)&lt;br /&gt;
		local change = &amp;#039;&amp;#039;&lt;br /&gt;
		if yesno(args[&amp;#039;firstright&amp;#039; .. firstright]) == true then&lt;br /&gt;
			change = &amp;#039;(&amp;#039; .. i18n.na .. &amp;#039;)&amp;#039;&lt;br /&gt;
		elseif yesno(args[&amp;#039;firstright&amp;#039; .. firstright]) == false or not is(args[&amp;#039;firstright&amp;#039; .. firstright]) then&lt;br /&gt;
			if not is(args[1]) and is(args[valuecol]) then&lt;br /&gt;
				change = &amp;#039;(&amp;#039; .. i18n[&amp;#039;=&amp;#039;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				change = is(args[changecol]) and &amp;#039;(&amp;#039; .. args[changecol] .. &amp;#039;)&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return change&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs[8] = changeArg(1,7,8)&lt;br /&gt;
	barargs[9] = args[9] or &amp;#039;&amp;#039;&lt;br /&gt;
	barargs[10] = changeArg(2,9,10)&lt;br /&gt;
&lt;br /&gt;
	barargs.divisor = args.divisor or 1&lt;br /&gt;
	barargs.numwidth = args.numwidth&lt;br /&gt;
	barargs.rowheight = args.rowheight&lt;br /&gt;
&lt;br /&gt;
	if yesno(args.collapsible) == true then&lt;br /&gt;
		local duration = tonumber(args.duration) or 15&lt;br /&gt;
		if args.collapsed then&lt;br /&gt;
			barargs.collapsed = args.collapsed&lt;br /&gt;
		elseif args.rowsToEnd &amp;gt;= duration then&lt;br /&gt;
			barargs.collapsed = &amp;#039;y&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			barargs.collapsed = &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.id then&lt;br /&gt;
			barargs.id = args.id&lt;br /&gt;
		elseif args.nooverlap and args.rowsToEnd &amp;lt; duration then&lt;br /&gt;
			barargs.id = &amp;#039;l&amp;#039; .. duration&lt;br /&gt;
		else&lt;br /&gt;
			barargs.id = mw.ustring.lower(mw.getLanguage(&amp;#039;en&amp;#039;):formatDate(&amp;#039;M&amp;#039;, rowDate))&lt;br /&gt;
			if args.rowsToEnd &amp;lt; duration then&lt;br /&gt;
				barargs.id = barargs.id .. &amp;#039;-l&amp;#039; .. duration&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		barargs.collapsed = &amp;#039;&amp;#039;&lt;br /&gt;
		barargs.id = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p._customBarStacked(barargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._buildBars(args)&lt;br /&gt;
	local lines = mw.text.split(args.data, &amp;#039;\n&amp;#039;)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local lang = mw.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
	local bars, rows, months, prevRow, maxparam = {}, {}, {}, &amp;#039;&amp;#039;, 1&lt;br /&gt;
	for k, line in pairs(lines) do&lt;br /&gt;
		local barargs, i = {}, 1&lt;br /&gt;
		for parameter in mw.text.gsplit(line, &amp;#039;;&amp;#039;) do&lt;br /&gt;
			parameter = mw.text.trim(parameter)&lt;br /&gt;
			if string.find(parameter, &amp;#039;^%a&amp;#039;) then&lt;br /&gt;
				parameter = mw.text.split(parameter, &amp;#039;=&amp;#039;)&lt;br /&gt;
				if parameter[1] == &amp;#039;alttot1&amp;#039; or parameter[1] == &amp;#039;alttot2&amp;#039; then&lt;br /&gt;
					parameter[2] = tonumber(frame:callParserFunction(&amp;#039;#expr&amp;#039;, parameter[2]))&lt;br /&gt;
					if is(parameter[2]) then&lt;br /&gt;
						maxparam = math.max(maxparam, parameter[2])&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				barargs[parameter[1]] = parameter[2]&lt;br /&gt;
			else&lt;br /&gt;
				if is(parameter) then&lt;br /&gt;
					if i &amp;gt;= 2 and i &amp;lt;= 6 then&lt;br /&gt;
						parameter = tonumber(frame:callParserFunction(&amp;#039;#expr&amp;#039;, frame:callParserFunction(&amp;#039;formatnum&amp;#039;,parameter,&amp;#039;R&amp;#039;)))&lt;br /&gt;
						maxparam = math.max(maxparam, parameter or 1)&lt;br /&gt;
					end&lt;br /&gt;
					barargs[i] = parameter&lt;br /&gt;
					if i == 7 or i == 9 then&lt;br /&gt;
						parameter = tonumber(mw.ustring.match(frame:callParserFunction(&amp;#039;formatnum&amp;#039;,parameter,&amp;#039;R&amp;#039;), &amp;#039;^%d*&amp;#039;))&lt;br /&gt;
						maxparam = math.max(maxparam, parameter or 1)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				i = i + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local function fillCols(col, change)&lt;br /&gt;
			local data = args[&amp;#039;right&amp;#039; .. col .. &amp;#039;data&amp;#039;]&lt;br /&gt;
			local changetype = args[&amp;#039;changetype&amp;#039; .. col]&lt;br /&gt;
			local value, num, prevnum&lt;br /&gt;
&lt;br /&gt;
			if data == &amp;#039;alttot1&amp;#039; then&lt;br /&gt;
				num = tonumber(barargs.alttot1 or barargs[4])&lt;br /&gt;
				prevnum = tonumber(prevRow.alttot1 or prevRow[4])&lt;br /&gt;
			elseif data == &amp;#039;alttot2&amp;#039; then&lt;br /&gt;
				num = tonumber(barargs.alttot2 or barargs[6])&lt;br /&gt;
				prevnum = tonumber(prevRow.alttot2 or prevRow[6])&lt;br /&gt;
			elseif is(data) then&lt;br /&gt;
				num = tonumber(barargs[tonumber(data) + 1])&lt;br /&gt;
				prevnum = tonumber(prevRow[tonumber(data) + 1])&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if is(data) and num then -- nothing in column, source found, and data exists&lt;br /&gt;
				value = changetype == &amp;#039;o&amp;#039; and &amp;#039;&amp;#039; or lang:formatNum(num) -- set value to num if changetype isn&amp;#039;t &amp;#039;o&amp;#039;&lt;br /&gt;
				&lt;br /&gt;
				if not change and yesno(barargs[&amp;#039;firstright&amp;#039; .. col] ~= true) then&lt;br /&gt;
					if prevnum and prevnum ~= 0 then -- data on previous row&lt;br /&gt;
						if num - prevnum ~= 0 then --data has changed since previous row&lt;br /&gt;
							change = num-prevnum&lt;br /&gt;
							if changetype == &amp;#039;a&amp;#039; then -- change type is &amp;quot;absolute&amp;quot;&lt;br /&gt;
								if change &amp;gt; 0 then&lt;br /&gt;
									change = &amp;#039;+&amp;#039; .. lang:formatNum(change)&lt;br /&gt;
								end&lt;br /&gt;
							else -- change type is &amp;quot;percent&amp;quot;, &amp;quot;only percent&amp;quot; or undefined&lt;br /&gt;
								local percent = 100 * change / prevnum -- calculate percent&lt;br /&gt;
								local rounding = math.abs(percent) &amp;gt;= 10 and &amp;quot;%.0f&amp;quot; or math.abs(percent) &amp;gt;= 1 and &amp;quot;%.1f&amp;quot; or &amp;quot;%.2f&amp;quot;&lt;br /&gt;
								percent = tonumber(mw.ustring.format(rounding, percent)) -- round to two sigfigs&lt;br /&gt;
								&lt;br /&gt;
								if percent &amp;gt; 0 then&lt;br /&gt;
									change = &amp;#039;+&amp;#039; .. lang:formatNum(percent) .. &amp;#039;%&amp;#039;&lt;br /&gt;
								elseif percent &amp;lt; 0 then&lt;br /&gt;
									change = lang:formatNum(percent) .. &amp;#039;%&amp;#039;&lt;br /&gt;
								else&lt;br /&gt;
									change = i18n[&amp;#039;=&amp;#039;]&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						else -- data has not changed since previous row&lt;br /&gt;
							change = i18n[&amp;#039;=&amp;#039;]&lt;br /&gt;
						end&lt;br /&gt;
					else -- no data on previous row&lt;br /&gt;
						barargs[&amp;#039;firstright&amp;#039; .. col] = true -- set to (n.a.)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			return value, change&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not is(barargs[7]) then&lt;br /&gt;
			barargs[7], barargs[8] = fillCols(1, barargs[8])&lt;br /&gt;
		end&lt;br /&gt;
		if not is(barargs[9]) then&lt;br /&gt;
			barargs[9], barargs[10] = fillCols(2, barargs[10])&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if is(barargs[1]) then&lt;br /&gt;
			local e,f,g = pcall(&lt;br /&gt;
				function ()&lt;br /&gt;
					return mw.getLanguage(&amp;#039;en&amp;#039;):formatDate(&amp;#039;M&amp;#039;,barargs[1]),&lt;br /&gt;
						mw.getLanguage(&amp;#039;en&amp;#039;):formatDate(&amp;#039;j&amp;#039;,barargs[1])&lt;br /&gt;
				end&lt;br /&gt;
			)&lt;br /&gt;
			if e then&lt;br /&gt;
				months[#months+1] = {f,g}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		barargs.prevDate = prevRow[1]&lt;br /&gt;
		rows[#rows + 1] = barargs&lt;br /&gt;
		prevRow = barargs&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i=1,#rows do -- build rows&lt;br /&gt;
		rows[i].divisor = tonumber(args.divisor) and tonumber(args.divisor) or maxparam / (0.95 * args.barwidth)&lt;br /&gt;
		rows[i].numwidth = args.numwidth&lt;br /&gt;
		rows[i].collapsible = args.collapsible&lt;br /&gt;
		rows[i].rowsToEnd = #rows - i&lt;br /&gt;
		rows[i].rowheight = args.rowheight&lt;br /&gt;
		rows[i].duration = args.duration&lt;br /&gt;
		if #months&amp;gt;(args.duration or 0) then&lt;br /&gt;
			rows[i].nooverlap = args.nooverlap&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		bars[i] = p._row(rows[i])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(bars), months&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._monthToggleButton(args)&lt;br /&gt;
	local month = mw.ustring.lower(mw.ustring.sub(args.month[1] or &amp;#039;&amp;#039;,1,3))&lt;br /&gt;
	local outString = &amp;#039;&amp;#039;&lt;br /&gt;
	local newline = (args.nonewline or false) and &amp;#039;&amp;#039; or &amp;#039;\n&amp;#039;&lt;br /&gt;
	if is(month) then&lt;br /&gt;
		local collapsed = (args.active == &amp;#039;&amp;#039;) and &amp;#039;&amp;#039; or &amp;#039; mw-collapsed&amp;#039;&lt;br /&gt;
		local uncollapsed = (args.active == &amp;#039;&amp;#039;) and &amp;#039; mw-collapsed&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
		if args.nooverlap then&lt;br /&gt;
			outString = &amp;#039;&amp;lt;span class=&amp;quot;mw-collapsible mw-customtoggle-&amp;#039; .. month .. &amp;#039; %s&amp;quot; id=&amp;quot;mw-customcollapsible-&amp;#039; .. month .. &amp;#039;&amp;quot; style=&amp;quot;padding:0 8px&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;\n&amp;#039; ..&lt;br /&gt;
				&amp;#039;&amp;lt;span class=&amp;quot;mw-collapsible mw-customtoggle-&amp;#039; .. month .. &amp;#039; %s&amp;quot; id=&amp;quot;mw-customcollapsible-&amp;#039; .. month .. &amp;#039;&amp;quot; style=&amp;quot;border:2px solid lightblue; padding:0 8px&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039; .. newline&lt;br /&gt;
			&lt;br /&gt;
			if mw.ustring.sub(month,1,1) == &amp;#039;l&amp;#039; and tonumber(mw.ustring.sub(month,2)) == args.duration then&lt;br /&gt;
				--&amp;quot;Last ## days&amp;quot;&lt;br /&gt;
				local lastDays = mw.ustring.format(i18n.lastDays, args.duration)&lt;br /&gt;
			&lt;br /&gt;
				outString = mw.ustring.format( outString,&lt;br /&gt;
					collapsed, lastDays,&lt;br /&gt;
					uncollapsed, lastDays )&lt;br /&gt;
			else&lt;br /&gt;
				if i18n.m[month] then&lt;br /&gt;
					if is(args.month[2]) and is(args.month[3]) then&lt;br /&gt;
						if (args.month[2] ~= args.month[3]) then -- &amp;quot;Mmm ##–##&amp;quot;&lt;br /&gt;
							month = mw.ustring.gsub(i18n.toggleRange,&amp;#039;$.&amp;#039;, {&lt;br /&gt;
								[&amp;#039;$m&amp;#039;] = i18n.m[month],&lt;br /&gt;
								[&amp;#039;$s&amp;#039;] = args.month[2],&lt;br /&gt;
								[&amp;#039;$e&amp;#039;] = args.month[3]})&lt;br /&gt;
						else -- &amp;quot;Mmm ##&amp;quot;&amp;quot;&lt;br /&gt;
							month = mw.ustring.gsub(i18n.toggleSingleDate,&amp;#039;$.&amp;#039;, {&lt;br /&gt;
								[&amp;#039;$m&amp;#039;] = i18n.m[month],&lt;br /&gt;
								[&amp;#039;$s&amp;#039;] = args.month[2]})&lt;br /&gt;
						end&lt;br /&gt;
					else --&amp;quot;Mmm&amp;quot;&lt;br /&gt;
						month = i18n.m[month]&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
						&lt;br /&gt;
				outString = mw.ustring.format( outString,&lt;br /&gt;
					uncollapsed, month,&lt;br /&gt;
					collapsed, month )&lt;br /&gt;
			end&lt;br /&gt;
		elseif mw.ustring.sub(month,1,1) == &amp;#039;l&amp;#039; and tonumber(mw.ustring.sub(month,2)) == args.duration then&lt;br /&gt;
			local customtoggles = {(&amp;#039; mw-customtoggle-l&amp;#039; .. args.duration)}&lt;br /&gt;
			for k in pairs(i18n.m) do --list of months&lt;br /&gt;
				customtoggles[#customtoggles + 1] = &amp;#039; mw-customtoggle-&amp;#039; .. k .. &amp;#039;-l&amp;#039; .. args.duration&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local lastDays = mw.ustring.format(i18n.lastDays, args.duration)&lt;br /&gt;
			&lt;br /&gt;
			outString = &amp;#039;&amp;lt;span class=&amp;quot;mw-collapsible&amp;#039; .. table.concat(customtoggles) .. collapsed .. &amp;#039;&amp;quot; id=&amp;quot;mw-customcollapsible-&amp;#039; .. month .. &amp;#039;&amp;quot; style=&amp;quot;padding:0 8px&amp;quot;&amp;gt;&amp;#039; .. lastDays .. &amp;#039;&amp;lt;/span&amp;gt;\n&amp;#039; ..&lt;br /&gt;
				&amp;#039;&amp;lt;span class=&amp;quot;mw-collapsible&amp;#039; .. table.concat(customtoggles) .. uncollapsed .. &amp;#039;&amp;quot; id=&amp;quot;mw-customcollapsible-&amp;#039; .. month .. &amp;#039;&amp;quot; style=&amp;quot;border:2px solid lightblue; padding:0 8px&amp;quot;&amp;gt;&amp;#039; .. lastDays .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; .. newline&lt;br /&gt;
			&lt;br /&gt;
		else&lt;br /&gt;
			local customtoggles = &amp;#039; mw-customtoggle-&amp;#039; .. month .. &amp;#039; mw-customtoggle-&amp;#039; .. month .. &amp;#039;-l&amp;#039; .. args.duration&lt;br /&gt;
			&lt;br /&gt;
			outString = &amp;#039;&amp;lt;span class=&amp;quot;mw-collapsible&amp;#039; .. customtoggles .. uncollapsed .. &amp;#039;&amp;quot; id=&amp;quot;mw-customcollapsible-&amp;#039; .. month .. &amp;#039;&amp;quot; style=&amp;quot;padding:0 8px&amp;quot;&amp;gt;&amp;#039; .. (i18n.m[month] or month)  .. &amp;#039;&amp;lt;/span&amp;gt;\n&amp;#039; ..&lt;br /&gt;
				&amp;#039;&amp;lt;span class=&amp;quot;mw-collapsible mw-customtoggle-&amp;#039; .. customtoggles .. collapsed .. &amp;#039;&amp;quot; id=&amp;quot;mw-customcollapsible-&amp;#039; .. month .. &amp;#039;&amp;quot; style=&amp;quot;border:2px solid lightblue; padding:0 8px&amp;quot;&amp;gt;&amp;#039; .. (i18n.m[month] or month)  .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;  .. newline&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return outString&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._chart(args)&lt;br /&gt;
	local navbar = require(&amp;#039;Module:Navbar&amp;#039;)._navbar&lt;br /&gt;
&lt;br /&gt;
	local barargs = {}&lt;br /&gt;
&lt;br /&gt;
	local function _numwidth(p)&lt;br /&gt;
		local nw = mw.ustring.sub(args.numwidth or &amp;#039;&amp;#039;,p,p)&lt;br /&gt;
		if nw == &amp;#039;n&amp;#039; then&lt;br /&gt;
			return 0&lt;br /&gt;
		elseif nw == &amp;#039;t&amp;#039; then&lt;br /&gt;
			return 40&lt;br /&gt;
		elseif nw == &amp;#039;m&amp;#039; then&lt;br /&gt;
			return 55&lt;br /&gt;
		elseif nw == &amp;#039;w&amp;#039; then&lt;br /&gt;
			return 70&lt;br /&gt;
		elseif nw == &amp;#039;x&amp;#039; then&lt;br /&gt;
			return 85&lt;br /&gt;
		elseif nw == &amp;#039;d&amp;#039; then&lt;br /&gt;
			return 55&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local numwidth = 120&lt;br /&gt;
	local right1 = numwidth - 8 -- -8 because of padding&lt;br /&gt;
	if args.numwidth then&lt;br /&gt;
		numwidth = _numwidth(1) + 10 + _numwidth(2)&lt;br /&gt;
		if mw.ustring.len(args.numwidth) == 4 then&lt;br /&gt;
			numwidth = numwidth + _numwidth(3) + _numwidth(4)&lt;br /&gt;
			if mw.ustring.sub(args.numwidth,3,3) == &amp;#039;n&amp;#039; then&lt;br /&gt;
				numwidth = numwidth + 6&lt;br /&gt;
			else&lt;br /&gt;
				numwidth = numwidth + 10&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		right1 = _numwidth(1) + 2 + _numwidth(2)&lt;br /&gt;
		if not args.right2 and mw.ustring.len(args.numwidth) == 4 then&lt;br /&gt;
			right1 = right1 + _numwidth(3) + _numwidth(4)&lt;br /&gt;
			if mw.ustring.sub(args.numwidth,3,3) == &amp;#039;n&amp;#039; then&lt;br /&gt;
				numwidth = numwidth + 6&lt;br /&gt;
			else&lt;br /&gt;
				numwidth = numwidth + 10&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local barwidth = 280&lt;br /&gt;
&lt;br /&gt;
	if args.barwidth == &amp;#039;thin&amp;#039; then&lt;br /&gt;
		barwidth = 120&lt;br /&gt;
	elseif args.barwidth == &amp;#039;medium&amp;#039; then&lt;br /&gt;
		barwidth = 280&lt;br /&gt;
	elseif args.barwidth == &amp;#039;wide&amp;#039; then&lt;br /&gt;
		barwidth = 400&lt;br /&gt;
	elseif args.barwidth == &amp;#039;auto&amp;#039; then&lt;br /&gt;
		barwidth = &amp;#039;auto&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if tonumber(barwidth) then&lt;br /&gt;
		barargs.width = 85 + barwidth + numwidth .. &amp;#039;px&amp;#039;&lt;br /&gt;
		barargs.barwidth = barwidth .. &amp;#039;px&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		barargs.width = &amp;#039;auto&amp;#039;&lt;br /&gt;
		barargs.barwidth = &amp;#039;auto&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs.float = args.float and args.float or &amp;#039;right&amp;#039;&lt;br /&gt;
	local location = mw.ustring.gsub(args.location, &amp;#039;the &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	location = mw.ustring.upper(mw.ustring.sub(location,1,1)) .. mw.ustring.sub(location,2)&lt;br /&gt;
&lt;br /&gt;
	local navbartitle = args.outbreak .. &amp;#039; data/&amp;#039; ..&lt;br /&gt;
		(args.location3 and args.location3 .. &amp;#039;/&amp;#039; or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		(args.location2 and args.location2 .. &amp;#039;/&amp;#039; or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		location .. &amp;#039; medical cases chart&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- get duration for toggles&lt;br /&gt;
	local duration = 15 -- default if manual togglesbar is last 15 days&lt;br /&gt;
	if yesno(args.collapsible) == true and ( not is(args.togglesbar) ) then&lt;br /&gt;
		duration = tonumber(args.duration) or 15 -- default if auto togglesbar is last 15 days&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local months, togglesbar, lastdate = {{}}, &amp;#039;&amp;#039;, nil&lt;br /&gt;
	if args.rows then&lt;br /&gt;
		barargs.bars = args.rows&lt;br /&gt;
		if yesno(args.collapsible) == true then&lt;br /&gt;
			togglesbar = is(args.togglesbar) and args.togglesbar or &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif is(args.data) or is(args.datapage) then&lt;br /&gt;
		local buildargs = {}&lt;br /&gt;
		&lt;br /&gt;
		local nooverlap = yesno(args.nooverlap)&lt;br /&gt;
		&lt;br /&gt;
		buildargs.barwidth = tonumber(barwidth) or 280&lt;br /&gt;
		buildargs.data = is(args.datapage) and require(&amp;#039;Module:Medical cases chart/data&amp;#039;)._externalData(args) or args.data&lt;br /&gt;
		buildargs.divisor = args.divisor&lt;br /&gt;
		buildargs.numwidth = args.numwidth&lt;br /&gt;
		buildargs.collapsible = args.collapsible&lt;br /&gt;
		buildargs.right1data = args.right1data or -- if no right1data and right1 title is default, use 3rd classification&lt;br /&gt;
				not args.right1 and 3&lt;br /&gt;
		buildargs.right2data = args.right2data or -- if no right2data and right2 title is deaths, use 1st classification&lt;br /&gt;
				(args.right2 == i18n.noOfDeaths or args.right2 == i18n.noOfDeaths2) and 1&lt;br /&gt;
		buildargs.changetype1 = mw.ustring.sub(args.changetype1 or (args.changetype or &amp;#039;&amp;#039;),1,1) -- 1st letter&lt;br /&gt;
		buildargs.changetype2 = mw.ustring.sub(args.changetype2 or (args.changetype or &amp;#039;&amp;#039;),1,1) -- 1st letter&lt;br /&gt;
		buildargs.rowheight = args.rowheight&lt;br /&gt;
		buildargs.duration = duration&lt;br /&gt;
		if is(args.togglesbar) then&lt;br /&gt;
			buildargs.nooverlap = false&lt;br /&gt;
		else&lt;br /&gt;
			buildargs.nooverlap = nooverlap&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		barargs.bars, monthList = p._buildBars(buildargs)&lt;br /&gt;
		&lt;br /&gt;
		local lastRow = #monthList&lt;br /&gt;
		if nooverlap == true then&lt;br /&gt;
			if #monthList &amp;lt;= duration then&lt;br /&gt;
				nooverlap = false&lt;br /&gt;
			else&lt;br /&gt;
				lastRow = #monthList - duration&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for i=1,(lastRow) do -- deduplicate months&lt;br /&gt;
			if monthList[i][1] ~= months[#months][1] then --new month&lt;br /&gt;
				if #months &amp;gt; 1 and i &amp;gt; 1 then&lt;br /&gt;
					months[#months][3] = monthList[i-1][2] --store end of previous month&lt;br /&gt;
				end&lt;br /&gt;
				months[#months+1] = monthList[i] --store start of this month&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		months[#months][3] = monthList[lastRow][2] --store end of final month&lt;br /&gt;
		&lt;br /&gt;
		-- automatically generate toggles&lt;br /&gt;
		if yesno(args.collapsible) == true then&lt;br /&gt;
			if is(args.togglesbar) then&lt;br /&gt;
				togglesbar = args.togglesbar&lt;br /&gt;
			else&lt;br /&gt;
				local toggles = {}&lt;br /&gt;
				for i=1,#months do&lt;br /&gt;
					toggles[#toggles+1] = p._monthToggleButton({month=months[i], duration=duration, nooverlap=nooverlap})&lt;br /&gt;
				end&lt;br /&gt;
				toggles[#toggles+1] = p._monthToggleButton({month={(&amp;#039;l&amp;#039; .. duration)}, duration=duration, nooverlap=nooverlap})&lt;br /&gt;
				togglesbar = &amp;#039;&amp;lt;div class=&amp;quot;nomobile&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;\n&amp;#039; .. table.concat(toggles) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local title = {}&lt;br /&gt;
	title[1] = (args.pretitle and args.pretitle .. &amp;#039; &amp;#039; or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		args.disease .. &amp;#039; &amp;#039; .. i18n.casesIn .. &amp;#039; &amp;#039; .. args.location ..&lt;br /&gt;
		(args.location2 and &amp;#039;, &amp;#039; .. args.location2 or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		(args.location3 and &amp;#039;, &amp;#039; .. args.location3 or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		(args.posttitle and &amp;#039; &amp;#039; .. args.posttitle or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;(&amp;#039; ..&lt;br /&gt;
		navbar({[1] = navbartitle, titleArg = &amp;#039;:&amp;#039; .. mw.getCurrentFrame():getParent():getTitle(), mini = 1, nodiv = 1}) ..&lt;br /&gt;
		&amp;#039;)&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
	title[2] = p._legend0({[1] = p._barColors(1), [2] = &amp;#039;درگذشتگان&amp;#039;})&lt;br /&gt;
	if yesno(args.recoveries) == false then&lt;br /&gt;
		title[3] = &amp;#039;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		title[3] = &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;#039; .. p._legend0({[1] = p._barColors(2), [2] = args.reclbl or i18n.recoveries})&lt;br /&gt;
	end&lt;br /&gt;
	title[4] = &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;#039; .. p._legend0({[1] = p._barColors(3), [2] = args.altlbl1 or i18n.activeCases})&lt;br /&gt;
	if args.altlbl2 then&lt;br /&gt;
		title[5] = &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;#039; .. p._legend0({[1] = p._barColors(4), [2] = args.altlbl2})&lt;br /&gt;
	else&lt;br /&gt;
		title[5] = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if args.altlbl3 then&lt;br /&gt;
		title[6] = &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;#039; .. p._legend0({[1] = p._barColors(5), [2] = args.altlbl3}) ..&amp;#039;\n&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		title[6] = &amp;#039;\n&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	title[7] = togglesbar&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	barargs.title = table.concat(title)&lt;br /&gt;
	barargs.left1 =&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;center&amp;quot; style=&amp;quot;width:77px&amp;quot;&amp;gt;&amp;#039; .. -- 85-8 because of padding&lt;br /&gt;
			&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. i18n.date .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; ..&lt;br /&gt;
		&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	barargs.right1 =&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;center&amp;quot; style=&amp;quot;width:&amp;#039; .. right1 .. &amp;#039;px&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
			&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. (args.right1 or i18n.noOfCases) .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; ..&lt;br /&gt;
		&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if args.right2 then&lt;br /&gt;
		local right2 = _numwidth(3) + _numwidth(4)&lt;br /&gt;
		if mw.ustring.sub(args.numwidth,3,3) == &amp;#039;n&amp;#039; then&lt;br /&gt;
			right2 = right2 - 2&lt;br /&gt;
		else&lt;br /&gt;
			right2 = right2 + 2&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		barargs.right2 =&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;center&amp;quot; style=&amp;quot;width:&amp;#039; ..right2 ..&amp;#039;px&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
			&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. args.right2 .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; ..&lt;br /&gt;
		&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	barargs.caption = args.caption&lt;br /&gt;
	barargs.css = &amp;#039;Template:Medical_cases_chart/styles.css&amp;#039;&lt;br /&gt;
	return barBox._box(barargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.chart(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		valueFunc = function (key, value)&lt;br /&gt;
			if value then&lt;br /&gt;
				value = mw.text.trim(value)&lt;br /&gt;
				if ({[&amp;#039;numwidth&amp;#039;]=1,[&amp;#039;barwidth&amp;#039;]=1,[&amp;#039;recoveries&amp;#039;]=1,[&amp;#039;changetype&amp;#039;]=1})[mw.ustring.gsub(key,&amp;quot;%A&amp;quot;,&amp;quot;&amp;quot;)] then&lt;br /&gt;
					value = mw.ustring.lower(value) --make numwidth, barwidth, recoveries, and changetype lower case&lt;br /&gt;
				end&lt;br /&gt;
				if is(value) then&lt;br /&gt;
					return value&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
	return p._chart(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.barColors(frame)&lt;br /&gt;
	return p._barColors(tonumber(frame:getParent().args[1]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildBars(frame)&lt;br /&gt;
	local bars = p._buildBars(frame.args)&lt;br /&gt;
	return bars&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.monthToggleButton(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	args.month = {frame:getParent().args.month or frame:getParent().args[1] or &amp;#039;l15&amp;#039;}&lt;br /&gt;
	args.active = frame:getParent().args.active or &amp;#039;true&amp;#039;&lt;br /&gt;
	args.duration = frame:getParent().args.duration or 15&lt;br /&gt;
	args.nonewline = true&lt;br /&gt;
	return p._monthToggleButton(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>fa&gt;Hooman91</name></author>
	</entry>
</feed>