<?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%3ADot_chart%2Fsandbox</id>
	<title>Module:Dot chart/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ADot_chart%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Dot_chart/sandbox&amp;action=history"/>
	<updated>2026-05-25T08:15:47Z</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:Dot_chart/sandbox&amp;diff=136007&amp;oldid=prev</id>
		<title>imported&gt;BrandonXLF at 09:35, 24 January 2021</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Dot_chart/sandbox&amp;diff=136007&amp;oldid=prev"/>
		<updated>2021-01-24T09:35:44Z</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;
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;
&lt;br /&gt;
--  Returns all the dots (with absolute postions)&lt;br /&gt;
function p.data(frame)                                                          -- Returns the data of the graph&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	-- Dot related&lt;br /&gt;
	local yTable = {}&lt;br /&gt;
	local xTable = {}&lt;br /&gt;
	local xCount = 0&lt;br /&gt;
	local yCount = 0&lt;br /&gt;
	local isx;&lt;br /&gt;
	local dotTable = {}&lt;br /&gt;
	local x;&lt;br /&gt;
	-- Color related&lt;br /&gt;
	local colorTable = {}&lt;br /&gt;
	local num;&lt;br /&gt;
	local colorTime;&lt;br /&gt;
	-- X label related&lt;br /&gt;
	local xLabels = {}&lt;br /&gt;
	local xLCount = 0&lt;br /&gt;
	-- Y label related&lt;br /&gt;
	local yLabels = {}&lt;br /&gt;
	local yLCount = 0&lt;br /&gt;
&lt;br /&gt;
	if yesno(args[&amp;#039;yx&amp;#039;]) == true then&lt;br /&gt;
		isx = false&lt;br /&gt;
	else&lt;br /&gt;
		isx = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;x labels&amp;#039;] then                                                    -- Create xLabels&lt;br /&gt;
		for str in string.gmatch(args[&amp;#039;x labels&amp;#039;], &amp;#039;([^, ]+)&amp;#039;) do&lt;br /&gt;
	        table.insert(xLabels, str)&lt;br /&gt;
	        xLCount = xLCount + 1&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;y labels&amp;#039;] then                                                    -- Create yLabels&lt;br /&gt;
		for str in string.gmatch(args[&amp;#039;y labels&amp;#039;], &amp;#039;([^, ]+)&amp;#039;) do&lt;br /&gt;
			table.insert(yLabels, str)&lt;br /&gt;
			yLCount = yLCount + 1&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;dots&amp;#039;] then                                                        -- Creates xTable from dots&lt;br /&gt;
		local i = 0&lt;br /&gt;
		local j = 0&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if string.match(k, &amp;#039;%d+&amp;#039;) &lt;br /&gt;
			and not string.match(k, &amp;#039;color%-&amp;#039;) then&lt;br /&gt;
				table.insert(yTable, v)&lt;br /&gt;
				yCount = yCount + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local cols = yCount / tonumber(args[&amp;#039;dots&amp;#039;])&lt;br /&gt;
		&lt;br /&gt;
		if cols ~= math.floor(cols) then&lt;br /&gt;
			return &amp;#039;&amp;lt;span style=&amp;quot;font-size:100%&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;The amount of y parameters (&amp;#039; .. yCount .. &amp;#039;) ÷ parameter dots (&amp;#039; .. args[&amp;#039;dots&amp;#039;] .. &amp;#039;) is not a integer (&amp;#039; .. cols .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		while cols &amp;gt; i do&lt;br /&gt;
			local xValue = i / (cols - 1) * 100&lt;br /&gt;
			i = i + 1&lt;br /&gt;
			while tonumber(args[&amp;#039;dots&amp;#039;]) &amp;gt; j do&lt;br /&gt;
				j = j + 1&lt;br /&gt;
				table.insert(xTable, xValue)&lt;br /&gt;
				xCount = xCount + 1&lt;br /&gt;
			end&lt;br /&gt;
			j = 0&lt;br /&gt;
		end&lt;br /&gt;
	else                                                                        -- Divides args into the yTable and the xTable&lt;br /&gt;
		for k, v in pairs(args) do                                               &lt;br /&gt;
			if string.match(k, &amp;#039;%d+&amp;#039;) &lt;br /&gt;
			and not string.match(k, &amp;#039;color%-&amp;#039;) then&lt;br /&gt;
				if isx == false then&lt;br /&gt;
					table.insert(yTable, v)&lt;br /&gt;
					yCount = yCount + 1&lt;br /&gt;
					isx = true&lt;br /&gt;
				elseif not args[&amp;#039;dots&amp;#039;] then&lt;br /&gt;
					table.insert(xTable, v)&lt;br /&gt;
					xCount = xCount + 1&lt;br /&gt;
					isx = false&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if xCount &amp;lt; yCount then                            &lt;br /&gt;
		return &amp;#039;&amp;lt;span style=&amp;quot;font-size:100%&amp;quot;&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;The amount of x values (&amp;#039; .. xCount .. &amp;#039;) is less then the number y values (&amp;#039; .. yCount .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	elseif xCount &amp;gt; yCount then&lt;br /&gt;
		return &amp;#039;&amp;lt;span style=&amp;quot;font-size:100%&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;The amount of x values (&amp;#039; .. xCount .. &amp;#039;) is more then the number y values (&amp;#039; .. yCount .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;color-even&amp;#039;] then                                                  -- Creates the colorTable if color-even is set&lt;br /&gt;
		colorTime = false&lt;br /&gt;
		for k, v in pairs(yTable) do&lt;br /&gt;
			if colorTime == true then&lt;br /&gt;
				colorTable[k] = args[&amp;#039;color-even&amp;#039;]&lt;br /&gt;
				colorTime = false&lt;br /&gt;
			else&lt;br /&gt;
				colorTime = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;color-odd&amp;#039;] then                                                   -- Creates the colorTable if color-odd is set&lt;br /&gt;
		colorTime = true&lt;br /&gt;
		for k, v in pairs(yTable) do&lt;br /&gt;
			if colorTime == true then&lt;br /&gt;
				colorTable[k] = args[&amp;#039;color-odd&amp;#039;]&lt;br /&gt;
				colorTime = false&lt;br /&gt;
			else&lt;br /&gt;
				colorTime = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(args) do                                                  -- Adds values to the colorTable if color-# is set&lt;br /&gt;
		if k == mw.ustring.match(k, &amp;#039;color%-%d+&amp;#039;) then&lt;br /&gt;
			num = mw.ustring.gsub(k, &amp;#039;color%-&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			colorTable[num] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k, y in pairs(yTable) do                                                -- Create the dotTable&lt;br /&gt;
		local innerDiv = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		local size; &lt;br /&gt;
		if args[&amp;#039;size&amp;#039;] then&lt;br /&gt;
			size = tonumber(mw.ustring.match(args[&amp;#039;size&amp;#039;], &amp;#039;(%d+)&amp;#039;))&lt;br /&gt;
		else&lt;br /&gt;
			size = 8&lt;br /&gt;
		end&lt;br /&gt;
		x = xTable[k]&lt;br /&gt;
		innerDiv&lt;br /&gt;
			:css(&amp;#039;position&amp;#039;, &amp;#039;absolute&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;top&amp;#039;, &amp;#039;-&amp;#039; .. size / 2 .. &amp;#039;px&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;left&amp;#039;, &amp;#039;-&amp;#039; .. size / 2 .. &amp;#039;px&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;line-height&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;[[File:Location dot &amp;#039;, colorTable[k] or &amp;#039;red&amp;#039;, &amp;#039;.svg|&amp;#039;, size, &amp;#039;x&amp;#039;, size, &amp;#039;px]]&amp;#039;)&lt;br /&gt;
		div&lt;br /&gt;
			:css(&amp;#039;position&amp;#039;, &amp;#039;absolute&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;bottom&amp;#039;, y .. &amp;#039;%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;left&amp;#039;, x .. &amp;#039;%&amp;#039;)&lt;br /&gt;
			:wikitext(tostring(innerDiv))&lt;br /&gt;
		table.insert(dotTable, tostring(div))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(xLabels) do&lt;br /&gt;
		local innerDiv = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		innerDiv&lt;br /&gt;
			:css(&amp;#039;position&amp;#039;, &amp;#039;relative&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;left&amp;#039;, &amp;#039;-50%&amp;#039;)&lt;br /&gt;
			:wikitext(v)&lt;br /&gt;
		div&lt;br /&gt;
			:css(&amp;#039;position&amp;#039;, &amp;#039;absolute&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;bottom&amp;#039;, &amp;#039;0%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;left&amp;#039;, (k - 1) / (xLCount - 1) * 100 .. &amp;#039;%&amp;#039;)&lt;br /&gt;
			:wikitext(tostring(innerDiv))&lt;br /&gt;
		table.insert(dotTable, tostring(div))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(yLabels) do&lt;br /&gt;
		local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		div&lt;br /&gt;
			:css(&amp;#039;position&amp;#039;, &amp;#039;absolute&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;bottom&amp;#039;, (k - 1) / (yLCount - 1) * 100 .. &amp;#039;%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;left&amp;#039;, &amp;#039;0%&amp;#039;)&lt;br /&gt;
			:wikitext(v)&lt;br /&gt;
		table.insert(dotTable, tostring(div))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(dotTable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Create the legendTable&lt;br /&gt;
local function legend(args)&lt;br /&gt;
	local color;&lt;br /&gt;
	local aValue;&lt;br /&gt;
	local legendTable = {}&lt;br /&gt;
	for k, v in pairs(args) do                                                  -- Adds values to the table&lt;br /&gt;
		if k == mw.ustring.match(k, &amp;#039;legend%-%a+&amp;#039;) then&lt;br /&gt;
			color = mw.ustring.gsub(k, &amp;#039;legend%-&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
			v = &amp;#039;&amp;lt;div&amp;gt;[[File:Location dot &amp;#039; .. (color or &amp;#039;red&amp;#039;) .. &amp;#039;.svg|8x8px]] (&amp;#039; .. color .. &amp;#039;) = &amp;#039; .. v .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			table.insert(legendTable, v)&lt;br /&gt;
			aValue = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if aValue == true then&lt;br /&gt;
		return table.concat(legendTable)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get all the dots in a div tag&lt;br /&gt;
function p.graph(frame)         	                                        	-- Returns a graph with the dots on it&lt;br /&gt;
	if mw.ustring.match(p.data(frame), &amp;#039;&amp;lt;span&amp;#039;) then                            -- Return error messages from p.data&lt;br /&gt;
		return p.data(frame) &lt;br /&gt;
	end   &lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local picture = &amp;#039;Blank.png&amp;#039;&lt;br /&gt;
	local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	local center = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	local container = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	local top = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	local size; &lt;br /&gt;
	if args[&amp;#039;size&amp;#039;] then&lt;br /&gt;
		size = tonumber(mw.ustring.match(args[&amp;#039;size&amp;#039;], &amp;#039;(%d+)&amp;#039;))&lt;br /&gt;
	else&lt;br /&gt;
		size = 8&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;width&amp;#039;] then&lt;br /&gt;
		if args[&amp;#039;width&amp;#039;] == mw.ustring.match(args[&amp;#039;width&amp;#039;], &amp;#039;(%d+)&amp;#039;) then&lt;br /&gt;
			args[&amp;#039;width&amp;#039;] = args[&amp;#039;width&amp;#039;] .. &amp;#039;px&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;#039;picture&amp;#039;] then                                                     -- Set local picture&lt;br /&gt;
		picture = args[&amp;#039;picture&amp;#039;]&lt;br /&gt;
	elseif yesno(args[&amp;#039;square&amp;#039;]) == true then&lt;br /&gt;
		picture = &amp;#039;Transparent.png&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	picture = mw.ustring.gsub(picture, &amp;#039;|.+&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	picture = mw.ustring.gsub(picture, &amp;#039;.-:&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	if p.data(frame) == &amp;#039;&amp;#039; then                                                 -- Don&amp;#039;t make box if empty&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	 &lt;br /&gt;
	if args[&amp;#039;top&amp;#039;] then&lt;br /&gt;
		top                                                                     -- Create top text&lt;br /&gt;
			:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;text-decoration&amp;#039;, &amp;#039;underline&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
			:wikitext(args[&amp;#039;top&amp;#039;])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	args[&amp;#039;padding&amp;#039;] = args[&amp;#039;padding&amp;#039;] or &amp;#039;10px&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if not args[&amp;#039;top&amp;#039;] and size/2 &amp;gt; 10 then&lt;br /&gt;
		args[&amp;#039;padding&amp;#039;] = size/2&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	container                                                                   -- Creates container&lt;br /&gt;
		:css(&amp;#039;width&amp;#039;, args[&amp;#039;width&amp;#039;] or &amp;#039;240px&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;float&amp;#039;, &amp;#039;right&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;position&amp;#039;, &amp;#039;relative&amp;#039;)&lt;br /&gt;
		:wikitext(&amp;#039;[[File:&amp;#039;, picture, &amp;#039;|&amp;#039;, args[&amp;#039;width&amp;#039;] or &amp;#039;240px&amp;#039;, &amp;#039;]]&amp;#039;)&lt;br /&gt;
		:wikitext(p.data(frame))&lt;br /&gt;
	div                                                                         -- Creates box&lt;br /&gt;
		:css(&amp;#039;width&amp;#039;, args[&amp;#039;width&amp;#039;] or &amp;#039;240px&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;display&amp;#039;, &amp;#039;inline-block&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;float&amp;#039;, args[&amp;#039;align&amp;#039;] or &amp;#039;right&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;margin&amp;#039;, args[&amp;#039;margin&amp;#039;] or &amp;#039;2px&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;padding&amp;#039;, args[&amp;#039;padding&amp;#039;])&lt;br /&gt;
		:css(&amp;#039;background&amp;#039;, args[&amp;#039;color&amp;#039;] or &amp;#039;none&amp;#039;)&lt;br /&gt;
		:wikitext(tostring(top))&lt;br /&gt;
		:wikitext(tostring(container))&lt;br /&gt;
		:wikitext(legend(args))&lt;br /&gt;
		:wikitext(args[&amp;#039;bottom&amp;#039;])&lt;br /&gt;
		&lt;br /&gt;
	if yesno(args[&amp;#039;border&amp;#039;]) ~= false then                                      -- Creates box border&lt;br /&gt;
		div&lt;br /&gt;
			:css(&amp;#039;border-style&amp;#039;, &amp;#039;solid&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border-color&amp;#039;, &amp;#039;black&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border-width&amp;#039;, &amp;#039;3px&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	if args[&amp;#039;align&amp;#039;] == &amp;#039;center&amp;#039; then                                           -- Centers output if needed&lt;br /&gt;
		center&lt;br /&gt;
			:addClass(&amp;#039;center&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;width&amp;#039;, &amp;#039;auto&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;margin-left&amp;#039;, &amp;#039;auto&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;margin-right&amp;#039;, &amp;#039;auto&amp;#039;)&lt;br /&gt;
			:wikitext(tostring(div))&lt;br /&gt;
		return center                                                   &lt;br /&gt;
	else&lt;br /&gt;
		return div&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;BrandonXLF</name></author>
	</entry>
</feed>