<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FTimbaaa%2Ftest%2F1</id>
	<title>Module:Sandbox/Timbaaa/test/1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FTimbaaa%2Ftest%2F1"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Timbaaa/test/1&amp;action=history"/>
	<updated>2026-04-21T17:54:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Timbaaa/test/1&amp;diff=146319&amp;oldid=prev</id>
		<title>imported&gt;Timbaaa at 16:25, 26 August 2020</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Timbaaa/test/1&amp;diff=146319&amp;oldid=prev"/>
		<updated>2020-08-26T16:25:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local baseChartParams = {}&lt;br /&gt;
local baseChartParams = {}&lt;br /&gt;
local activeChartParams = {}&lt;br /&gt;
local deltaChartParams = {}&lt;br /&gt;
&lt;br /&gt;
local function csvToArray(csv)&lt;br /&gt;
	if not csv then return end&lt;br /&gt;
	local list = mw.text.split(csv, &amp;quot;%s*,%s*&amp;quot;)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	local isInteger = true&lt;br /&gt;
	for i = 1, #list do&lt;br /&gt;
		if list[i] == &amp;quot;&amp;quot; then&lt;br /&gt;
			result[i] = nil&lt;br /&gt;
		else&lt;br /&gt;
			result[i] = tonumber(list[i])&lt;br /&gt;
			if not result[i] then return end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
    -- return result, isInteger&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getDelta(list)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for i = 1, #list do&lt;br /&gt;
		if list[i] == nil then&lt;br /&gt;
			result[i] = nil&lt;br /&gt;
		else&lt;br /&gt;
			if i == 1 then &lt;br /&gt;
				result[i] = list[i]&lt;br /&gt;
			else&lt;br /&gt;
				result[i] = list[i] - list[i-1]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function arrayTocsv(array)&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	for i = 1, #array do&lt;br /&gt;
		result = result..array[i]..&amp;#039;, &amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getMovingAverage(list)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for i = 1, #list do&lt;br /&gt;
		&lt;br /&gt;
		if i == 1 then &lt;br /&gt;
			result[1] = list[1]&lt;br /&gt;
		elseif i == 2 then&lt;br /&gt;
			result[i] = (list[i]+list[i-1])/2&lt;br /&gt;
		elseif i == 3 then&lt;br /&gt;
			result[i] = (list[i]+list[i-1]+list[i-2])/3	&lt;br /&gt;
		elseif i == 4 then&lt;br /&gt;
			result[i] = (list[i]+list[i-1]+list[i-2]+list[i-3])/4&lt;br /&gt;
		elseif i == 5 then&lt;br /&gt;
			result[i] = (list[i]+list[i-1]+list[i-2]+list[i-3]+list[i-4])/5&lt;br /&gt;
		elseif i == 6 then&lt;br /&gt;
			result[i] = (list[i]+list[i-1]+list[i-2]+list[i-3]+list[i-4]+list[i-5])/6&lt;br /&gt;
		elseif i == 7 then&lt;br /&gt;
			result[i] = (list[i]+list[i-1]+list[i-2]+list[i-3]+list[i-4]+list[i-5]+list[i-6])/7&lt;br /&gt;
		else&lt;br /&gt;
			result[i] = (list[i]+list[i-1]+list[i-2]+list[i-3]+list[i-4]+list[i-5]+list[i-6])/7&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makewikitext(expandedtemplate)&lt;br /&gt;
	local div = mw.html.create( &amp;#039;div&amp;#039; )&lt;br /&gt;
	div&lt;br /&gt;
	     :attr( &amp;#039;class&amp;#039;, &amp;#039;toccolours&amp;#039; )&lt;br /&gt;
	     :css(&amp;#039;display&amp;#039;,&amp;#039;inline-block&amp;#039;)&lt;br /&gt;
	     :wikitext(expandedtemplate)&lt;br /&gt;
	return tostring(div)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeWikiPlainText(header)&lt;br /&gt;
	local h = mw.html.create()&lt;br /&gt;
	h:wikitext(&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;..header..&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
	return tostring(h)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.main = function( frame )&lt;br /&gt;
	local array = csvToArray(frame.args.total)&lt;br /&gt;
	local deltaArray = getDelta(array)&lt;br /&gt;
	local deltaCSV = arrayTocsv(deltaArray)&lt;br /&gt;
	&lt;br /&gt;
	baseChartParams.width = 500&lt;br /&gt;
	baseChartParams.height = 300&lt;br /&gt;
	baseChartParams.xType = &amp;#039;date&amp;#039;&lt;br /&gt;
	baseChartParams.yType = &amp;#039;number&amp;#039;&lt;br /&gt;
	baseChartParams.xAxisTitle = &amp;#039;Date&amp;#039;&lt;br /&gt;
	baseChartParams.yAxisTitle = &amp;#039;Count&amp;#039;&lt;br /&gt;
	baseChartParams.yScaleType = &amp;#039;linear&amp;#039;&lt;br /&gt;
	baseChartParams.xGrid = &amp;#039;&amp;#039;&lt;br /&gt;
	baseChartParams.yGrid = &amp;#039;&amp;#039;&lt;br /&gt;
	baseChartParams.type = &amp;#039;line&amp;#039;&lt;br /&gt;
	baseChartParams.x = frame.args.date&lt;br /&gt;
	baseChartParams.y1 = frame.args.total&lt;br /&gt;
	baseChartParams.y1Title = &amp;#039;Reported cases&amp;#039;&lt;br /&gt;
	baseChartParams.y2 = frame.args.active&lt;br /&gt;
	baseChartParams.y2Title = &amp;#039;Active cases&amp;#039;&lt;br /&gt;
	baseChartParams.y3 = frame.args.dead&lt;br /&gt;
	baseChartParams.y3Title = &amp;#039;Deaths&amp;#039;&lt;br /&gt;
	baseChartParams.colors = &amp;#039;#FF6347,#FFC000,#343132&amp;#039;&lt;br /&gt;
	baseChartParams.legend =&amp;#039;&amp;#039;&lt;br /&gt;
	baseChartParams = baseChartParams&lt;br /&gt;
	graphWikiText1 = frame:expandTemplate{title=&amp;#039;Graph:Chart&amp;#039;,args = baseChartParams}&lt;br /&gt;
	baseChartParams.yAxisMin = 1&lt;br /&gt;
	baseChartParams.yScaleType = &amp;#039;log&amp;#039;&lt;br /&gt;
	graphWikiText2 = frame:expandTemplate{title=&amp;#039;Graph:Chart&amp;#039;,args = baseChartParams}&lt;br /&gt;
	&lt;br /&gt;
	activeChartParams.width = 500&lt;br /&gt;
	activeChartParams.height = 300&lt;br /&gt;
	activeChartParams.xType = &amp;#039;date&amp;#039;&lt;br /&gt;
	activeChartParams.yType = &amp;#039;number&amp;#039;&lt;br /&gt;
	activeChartParams.xAxisTitle = &amp;#039;Date&amp;#039;&lt;br /&gt;
	activeChartParams.yAxisTitle = &amp;#039;Count&amp;#039;&lt;br /&gt;
	activeChartParams.yScaleType = &amp;#039;linear&amp;#039;&lt;br /&gt;
	activeChartParams.xGrid = &amp;#039;&amp;#039;&lt;br /&gt;
	activeChartParams.yGrid = &amp;#039;&amp;#039;&lt;br /&gt;
	activeChartParams.type = &amp;#039;line&amp;#039;&lt;br /&gt;
	activeChartParams.x = frame.args.date&lt;br /&gt;
	activeChartParams.y1 = frame.args.active&lt;br /&gt;
	activeChartParams.y1Title = &amp;#039;Active cases&amp;#039;&lt;br /&gt;
	activeChartParams.colors = &amp;#039;#FFC000&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	deltaChartParams.width = 500&lt;br /&gt;
	deltaChartParams.height = 300&lt;br /&gt;
	deltaChartParams.xType = &amp;#039;date&amp;#039;&lt;br /&gt;
	deltaChartParams.yType = &amp;#039;number&amp;#039;&lt;br /&gt;
	deltaChartParams.xAxisTitle = &amp;#039;Date&amp;#039;&lt;br /&gt;
	deltaChartParams.yAxisTitle = &amp;#039;Count&amp;#039;&lt;br /&gt;
	deltaChartParams.yScaleType = &amp;#039;linear&amp;#039;&lt;br /&gt;
	deltaChartParams.xGrid = &amp;#039;&amp;#039;&lt;br /&gt;
	deltaChartParams.yGrid = &amp;#039;&amp;#039;&lt;br /&gt;
	deltaChartParams.type = &amp;#039;line&amp;#039;&lt;br /&gt;
	deltaChartParams.x = frame.args.date&lt;br /&gt;
	deltaChartParams.y1 = arrayTocsv(getDelta(csvToArray(frame.args.total)))&lt;br /&gt;
	deltaChartParams.y1Title = &amp;#039;Reported Cases&amp;#039;&lt;br /&gt;
	deltaChartParams.y2 = arrayTocsv(getDelta(csvToArray(frame.args.dead)))&lt;br /&gt;
	deltaChartParams.y2Title = &amp;#039;Deaths&amp;#039;&lt;br /&gt;
	deltaChartParams.y3 = arrayTocsv(getMovingAverage(getDelta(csvToArray(frame.args.total))))&lt;br /&gt;
	deltaChartParams.y3Title = &amp;#039;Moving average of reported cases&amp;#039;&lt;br /&gt;
	deltaChartParams.y4 = arrayTocsv(getMovingAverage(getDelta(csvToArray(frame.args.dead))))&lt;br /&gt;
	deltaChartParams.y4Title = &amp;#039;Moving average of deaths&amp;#039;&lt;br /&gt;
	deltaChartParams.linewidths = &amp;#039;2,2,1,1&amp;#039;&lt;br /&gt;
	deltaChartParams.legend =&amp;#039;&amp;#039;&lt;br /&gt;
	deltaChartParams = deltaChartParams&lt;br /&gt;
	deltaChartWikiText1 = frame:expandTemplate{title=&amp;#039;Graph:Chart&amp;#039;,args = deltaChartParams}&lt;br /&gt;
	deltaChartParams.yAxisMin = 1&lt;br /&gt;
	deltaChartParams.yScaleType = &amp;#039;log&amp;#039;&lt;br /&gt;
	deltaChartWikiText2 = frame:expandTemplate{title=&amp;#039;Graph:Chart&amp;#039;,args = deltaChartParams}&lt;br /&gt;
	&lt;br /&gt;
	mainWikiText = frame:expandTemplate{title=&amp;#039;Switcher&amp;#039;,args={graphWikiText1, &amp;#039;Linear scale&amp;#039;, graphWikiText2,&amp;#039;Log scale&amp;#039;}}&lt;br /&gt;
	activeWikiText = frame:expandTemplate{title=&amp;#039;Graph:Chart&amp;#039;,args = activeChartParams}&lt;br /&gt;
	dailyWikiText = frame:expandTemplate{title=&amp;#039;Switcher&amp;#039;,args={deltaChartWikiText1, &amp;#039;Linear scale&amp;#039;, deltaChartWikiText2,&amp;#039;Log scale&amp;#039;}}&lt;br /&gt;
	&lt;br /&gt;
	return makeWikiPlainText(&amp;#039;Cumulative cases&amp;#039;)..makewikitext(mainWikiText)..makeWikiPlainText(&amp;#039;Active cases&amp;#039;)..makewikitext(activeWikiText)..makeWikiPlainText(&amp;#039;Daily change&amp;#039;)..makewikitext(dailyWikiText)&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Timbaaa</name></author>
	</entry>
</feed>