Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Humanipedia
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Module:Dot chart
Module
Discussion
English
Read
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local getArgs = require("Module:Arguments").getArgs local yesno = require('Module:Yesno') -------------------------------------------------------------------------------- ---------- P . D O T S --------------------------------------------------------- ---------- Returns all the dots (with absolute postions) ----------------------- -------------------------------------------------------------------------------- function p.data(frame) -- Returns the data of the graph local args = getArgs(frame) -- Dot related local yTable = {} local xTable = {} local xCount = 0 local yCount = 0 local isx; local dotTable = {} local x; -- Color related local colorTable = {} local num; local colorTime; -- X label related local xLabels = {} local xLCount = 0 -- Y label related local yLabels = {} local yLCount = 0 if yesno(args["yx"]) == true then isx = false else isx = true end if args["x labels"] then -- Create xLabels for str in string.gmatch(args["x labels"], "([^,]+)") do table.insert(xLabels,str) xLCount = xLCount+1 end end if args["y labels"] then -- Create yLabels for str in string.gmatch(args["y labels"], "([^,]+)") do table.insert(yLabels,str) yLCount = yLCount+1 end end if args["dots"] then -- Creates xTable from dots local i = 0 local j = 0 for k,v in pairs(args) do if string.match(k,"%d+") and not string.match(k,"color%-") then table.insert(yTable,v) yCount = yCount+1 end end local cols = yCount / tonumber(args["dots"]) if cols ~= math.floor(cols) then return table.concat({'<span style="font-size:100%" class="error">The amount of y parameters (',yCount,') Γ· parameter dots (',args["dots"],') is not a integer (',cols,')</span>'}) end while(cols>i) do local xValue = ((100/cols*i)+(100/cols/10))*1.1 i=i+1 while(tonumber(args["dots"])>j) do j=j+1 table.insert(xTable,xValue) xCount = xCount + 1 end j=0 end else -- Divides args into the yTable and the xTable for k,v in pairs(args) do if string.match(k,"%d+") and not string.match(k,"color%-") then if isx == false then table.insert(yTable,v) yCount = yCount + 1 isx = true elseif not args["dots"] then table.insert(xTable,v) xCount = xCount + 1 isx = false end end end end if xCount < yCount then return table.concat({'<span style="font-size:100%" class="error">The amount of x values (',xCount,') is less then the number y values (',yCount,')</span>'}) elseif xCount > yCount then return table.concat({'<span style="font-size:100%" class="error">The amount of x values (',xCount,') is more then the number y values (',yCount,')</span>'}) end if args["color-even"] then -- Creates the colorTable if color-even is set colorTime = false for k,v in pairs(yTable) do if colorTime == true then colorTable[k] = args["color-even"] colorTime = false else colorTime = true end end end if args["color-odd"] then -- Creates the colorTable if color-odd is set colorTime = true for k,v in pairs(yTable) do if colorTime == true then colorTable[k] = args["color-odd"] colorTime = false else colorTime = true end end end for k,v in pairs(args) do -- Adds values to the colorTable if color-# is set if k == mw.ustring.match(k,"color%-%d+") then num = mw.ustring.gsub(k,"color%-","") num = tonumber(num) colorTable[num] = v end end for k,y in pairs(yTable) do -- Creates the dotTable local InnerDiv = mw.html.create('div') local div = mw.html.create('div') local size; if args["size"] then size = tonumber(mw.ustring.match(args["size"],"(%d+)")) else size = 8 end x = xTable[k] InnerDiv :css('position','absolute') :css('top',table.concat({'-',size/2,'px'})) :css('left',table.concat({'-',size/2,'px'})) :css('line-height','0') :wikitext('[[File:Location dot ',colorTable[k] or 'red','.svg|',size,'x',size,'px]]') div :css('position','absolute') :css('bottom',table.concat({y*0.85+15,'%'})) :css('left',table.concat({x*0.85+15,'%'})) :wikitext(tostring(InnerDiv)) table.insert(dotTable,tostring(div)) end for k,v in pairs(xLabels) do local div = mw.html.create('div') div :css('position','absolute') :css('bottom','0%') :css('left',table.concat({((100/xLCount*k-100/xLCount)*0.85+15)-4,'%'})) :wikitext(v) table.insert(dotTable,tostring(div)) end for k,v in pairs(yLabels) do local div = mw.html.create('div') div :css('position','absolute') :css('bottom',table.concat({(((((100/yLCount*k-100/yLCount)-(100/yLCount/3))+5))+100/yLCount/2)*1.02,'%'})) :css('left','0%') :wikitext(v) table.insert(dotTable,tostring(div)) end return table.concat(dotTable) end ---------- L E G E N D --------------------------------------------------------- ---------- Makes the legendTable ----------------------------------------------- local function legend(args) local color; local aValue; local Table = {} for k,v in pairs(args) do -- Adds values to the table if k == mw.ustring.match(k,"legend%-%a+") then color = mw.ustring.gsub(k,"legend%-","") v = table.concat({'<div>[[File:Location dot ',color or 'red','.svg|8x8px]] (',color,') = ',v,'</div>'}) table.insert(Table,v) aValue = true end end if aValue == true then return table.concat(Table) else return "" end end -------------------------------------------------------------------------------- ---------- P . G R A P H ------------------------------------------------------- ---------- Returns all the dots in div tags------------------------------------- -------------------------------------------------------------------------------- function p.graph(frame) -- Returns a graph with the dots on it if mw.ustring.match(p.data(frame),"<span") then -- Return error messages from p.data return p.data(frame) end local args = getArgs(frame) local picture = "Blank.png" local div = mw.html.create('div') local center = mw.html.create('div') local container = mw.html.create('div') local top = mw.html.create('div') local size; if args["size"] then size = tonumber(mw.ustring.match(args["size"],"(%d+)")) else size = 8 end if args["width"] then if args["width"] == mw.ustring.match(args["width"],"(%d+)") then args["width"] = table.concat({args["width"],'px'}) end end if args["picture"] then -- Set local picture picture = args["picture"] elseif yesno(args["square"]) == true then picture = "Transparent.png" end picture = mw.ustring.gsub(picture,'|.+','') picture = mw.ustring.gsub(picture,'.-:','') if p.data(frame) == "" then -- Don't make box if empty return "" end if args["top"] then top -- Create top text :css('font-weight','bold') :css('text-decoration','underline') :css('text-align','center') :wikitext(args["top"]) end container -- Creates container :css('width',args["width"] or '240px') :css('float','right') :css('position','relative') :wikitext('[[File:',picture,'|',args["width"] or '240px',']]') :wikitext(p.data(frame)) div -- Creates box :css('width', args["width"] or '240px') :css('display', 'inline-block') :css('float', args["align"] or 'right') :css('margin', args["margin"] or '2px') :css('padding', args["padding"] or table.concat({size/2,'px'})) :wikitext(tostring(top)) :wikitext(tostring(container)) :wikitext(legend(args)) :wikitext(args["bottom"]) if args["color"] then div:css('background', args["color"]) end if yesno(args['border']) ~= false then -- Creates box border div :css('border-style','solid') :css('border-color','black') :css('border-width','3px') end if args['align'] == 'center' then -- Centers output if needed center :addClass('center') :css('width','auto') :css('margin-left','auto') :css('margin-right','auto') :wikitext(tostring(div)) return center else return div end end return p
Summary:
Please note that all contributions to Humanipedia may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Humanipedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Graph, chart and plot templates
(
edit
)
Template:Template link
(
edit
)
Template:Tl
(
edit
)
Module:Dot chart/doc
(
edit
)