<?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%3ADot_chart</id>
	<title>Module:Dot chart - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADot_chart"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Dot_chart&amp;action=history"/>
	<updated>2026-06-13T20:15:34Z</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:Dot_chart&amp;diff=471525&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:Dot_chart&amp;diff=471525&amp;oldid=prev"/>
		<updated>2021-07-15T21:22:47Z</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;local p = {}&lt;br /&gt;
local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
---------- P . D O T S ---------------------------------------------------------&lt;br /&gt;
---------- Returns all the dots (with absolute postions) -----------------------&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&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;quot;yx&amp;quot;]) == 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;quot;x labels&amp;quot;] then                                                    -- Create xLabels&lt;br /&gt;
		for str in string.gmatch(args[&amp;quot;x labels&amp;quot;], &amp;quot;([^,]+)&amp;quot;) 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;quot;y labels&amp;quot;] then                                                    -- Create yLabels&lt;br /&gt;
		for str in string.gmatch(args[&amp;quot;y labels&amp;quot;], &amp;quot;([^,]+)&amp;quot;) 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;quot;dots&amp;quot;] 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;quot;%d+&amp;quot;) &lt;br /&gt;
			and not string.match(k,&amp;quot;color%-&amp;quot;) 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;quot;dots&amp;quot;])&lt;br /&gt;
		&lt;br /&gt;
		if cols ~= math.floor(cols) then&lt;br /&gt;
			return table.concat({'&amp;lt;span style=&amp;quot;font-size:100%&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;The amount of y parameters (',yCount,') ÷ parameter dots (',args[&amp;quot;dots&amp;quot;],') is not a integer (',cols,')&amp;lt;/span&amp;gt;'})&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		while(cols&amp;gt;i) do&lt;br /&gt;
			local xValue = ((100/cols*i)+(100/cols/10))*1.1&lt;br /&gt;
			i=i+1&lt;br /&gt;
			while(tonumber(args[&amp;quot;dots&amp;quot;])&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;quot;%d+&amp;quot;) &lt;br /&gt;
			and not string.match(k,&amp;quot;color%-&amp;quot;) 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;quot;dots&amp;quot;] 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 table.concat({'&amp;lt;span style=&amp;quot;font-size:100%&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;The amount of x values (',xCount,') is less then the number y values (',yCount,')&amp;lt;/span&amp;gt;'})&lt;br /&gt;
	elseif xCount &amp;gt; yCount then&lt;br /&gt;
		return table.concat({'&amp;lt;span style=&amp;quot;font-size:100%&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;The amount of x values (',xCount,') is more then the number y values (',yCount,')&amp;lt;/span&amp;gt;'})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;color-even&amp;quot;] 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;quot;color-even&amp;quot;]&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;quot;color-odd&amp;quot;] 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;quot;color-odd&amp;quot;]&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;quot;color%-%d+&amp;quot;) then&lt;br /&gt;
			num = mw.ustring.gsub(k,&amp;quot;color%-&amp;quot;,&amp;quot;&amp;quot;)&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                                                 -- Creates the dotTable&lt;br /&gt;
		local InnerDiv = mw.html.create('div')&lt;br /&gt;
		local div = mw.html.create('div')&lt;br /&gt;
		local size; &lt;br /&gt;
		if args[&amp;quot;size&amp;quot;] then&lt;br /&gt;
			size = tonumber(mw.ustring.match(args[&amp;quot;size&amp;quot;],&amp;quot;(%d+)&amp;quot;))&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('position','absolute')&lt;br /&gt;
			:css('top',table.concat({'-',size/2,'px'}))&lt;br /&gt;
			:css('left',table.concat({'-',size/2,'px'}))&lt;br /&gt;
			:css('line-height','0')&lt;br /&gt;
			:wikitext('[[File:Location dot ',colorTable[k] or 'red','.svg|',size,'x',size,'px]]')&lt;br /&gt;
		div&lt;br /&gt;
			:css('position','absolute')&lt;br /&gt;
			:css('bottom',table.concat({y*0.85+15,'%'}))&lt;br /&gt;
			:css('left',table.concat({x*0.85+15,'%'}))&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 div = mw.html.create('div')&lt;br /&gt;
		div&lt;br /&gt;
			:css('position','absolute')&lt;br /&gt;
			:css('bottom','0%')&lt;br /&gt;
			:css('left',table.concat({((100/xLCount*k-100/xLCount)*0.85+15)-4,'%'}))&lt;br /&gt;
			:wikitext(v)&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('div')&lt;br /&gt;
		div&lt;br /&gt;
			:css('position','absolute')&lt;br /&gt;
			:css('bottom',table.concat({(((((100/yLCount*k-100/yLCount)-(100/yLCount/3))+5))+100/yLCount/2)*1.02,'%'}))&lt;br /&gt;
			:css('left','0%')&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;
---------- L E G E N D ---------------------------------------------------------&lt;br /&gt;
---------- Makes the legendTable -----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function legend(args)&lt;br /&gt;
	local color;&lt;br /&gt;
	local aValue;&lt;br /&gt;
	local Table = {}&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;quot;legend%-%a+&amp;quot;) then&lt;br /&gt;
			color = mw.ustring.gsub(k,&amp;quot;legend%-&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
			v = table.concat({'&amp;lt;div&amp;gt;[[File:Location dot ',color or 'red','.svg|8x8px]] (',color,') = ',v,'&amp;lt;/div&amp;gt;'})&lt;br /&gt;
			table.insert(Table,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(Table)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
---------- P . G R A P H -------------------------------------------------------&lt;br /&gt;
---------- Returns all the dots in div tags-------------------------------------&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&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;quot;&amp;lt;span&amp;quot;) 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;quot;Blank.png&amp;quot;&lt;br /&gt;
	local div = mw.html.create('div')&lt;br /&gt;
	local center = mw.html.create('div')&lt;br /&gt;
	local container = mw.html.create('div')&lt;br /&gt;
	local top = mw.html.create('div')&lt;br /&gt;
	local size; &lt;br /&gt;
	if args[&amp;quot;size&amp;quot;] then&lt;br /&gt;
		size = tonumber(mw.ustring.match(args[&amp;quot;size&amp;quot;],&amp;quot;(%d+)&amp;quot;))&lt;br /&gt;
	else&lt;br /&gt;
		size = 8&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;width&amp;quot;] then&lt;br /&gt;
		if args[&amp;quot;width&amp;quot;] == mw.ustring.match(args[&amp;quot;width&amp;quot;],&amp;quot;(%d+)&amp;quot;) then&lt;br /&gt;
			args[&amp;quot;width&amp;quot;] = table.concat({args[&amp;quot;width&amp;quot;],'px'})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;quot;picture&amp;quot;] then                                                     -- Set local picture&lt;br /&gt;
		picture = args[&amp;quot;picture&amp;quot;]&lt;br /&gt;
	elseif yesno(args[&amp;quot;square&amp;quot;]) == true then&lt;br /&gt;
		picture = &amp;quot;Transparent.png&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	picture = mw.ustring.gsub(picture,'|.+','')&lt;br /&gt;
	picture = mw.ustring.gsub(picture,'.-:','')&lt;br /&gt;
	&lt;br /&gt;
	if p.data(frame) == &amp;quot;&amp;quot; then                                                 -- Don't make box if empty&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	 &lt;br /&gt;
	if args[&amp;quot;top&amp;quot;] then&lt;br /&gt;
		top                                                                     -- Create top text&lt;br /&gt;
			:css('font-weight','bold')&lt;br /&gt;
			:css('text-decoration','underline')&lt;br /&gt;
			:css('text-align','center')&lt;br /&gt;
			:wikitext(args[&amp;quot;top&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	container                                                                   -- Creates container&lt;br /&gt;
		:css('width',args[&amp;quot;width&amp;quot;] or '240px')&lt;br /&gt;
		:css('float','right')&lt;br /&gt;
		:css('position','relative')&lt;br /&gt;
		:wikitext('[[File:',picture,'|',args[&amp;quot;width&amp;quot;] or '240px',']]')&lt;br /&gt;
		:wikitext(p.data(frame))&lt;br /&gt;
	div                                                                         -- Creates box&lt;br /&gt;
		:css('width',args[&amp;quot;width&amp;quot;] or '240px')&lt;br /&gt;
		:css('display','inline-block')&lt;br /&gt;
		:css('float',args[&amp;quot;align&amp;quot;] or 'right')&lt;br /&gt;
		:css('margin',args[&amp;quot;margin&amp;quot;] or '2px')&lt;br /&gt;
		:css('padding',args[&amp;quot;padding&amp;quot;] or table.concat({size/2,'px'}))&lt;br /&gt;
		:css('background',args[&amp;quot;color&amp;quot;] or 'none')&lt;br /&gt;
		:wikitext(tostring(top))&lt;br /&gt;
		:wikitext(tostring(container))&lt;br /&gt;
		:wikitext(legend(args))&lt;br /&gt;
		:wikitext(args[&amp;quot;bottom&amp;quot;])&lt;br /&gt;
		&lt;br /&gt;
	if yesno(args['border']) ~= false then                                      -- Creates box border&lt;br /&gt;
		div&lt;br /&gt;
			:css('border-style','solid')&lt;br /&gt;
			:css('border-color','black')&lt;br /&gt;
			:css('border-width','3px')&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	if args['align'] == 'center' then                                           -- Centers output if needed&lt;br /&gt;
		center&lt;br /&gt;
			:addClass('center')&lt;br /&gt;
			:css('width','auto')&lt;br /&gt;
			:css('margin-left','auto')&lt;br /&gt;
			:css('margin-right','auto')&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>Zoran</name></author>
	</entry>
</feed>