<?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%2FWnt%2FNot_lowercase</id>
	<title>Module:Sandbox/Wnt/Not lowercase - 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%2FWnt%2FNot_lowercase"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Wnt/Not_lowercase&amp;action=history"/>
	<updated>2026-04-03T20:51: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/Wnt/Not_lowercase&amp;diff=146421&amp;oldid=prev</id>
		<title>imported&gt;Wnt: Wnt moved page Module:User:wnt/sandbox/Not lowercase to Module:Sandbox/Wnt/Not lowercase without leaving a redirect: Apparently there&#039;s now a standard set of names for these ... besides, this I screwed up even my own standard...</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Wnt/Not_lowercase&amp;diff=146421&amp;oldid=prev"/>
		<updated>2018-05-07T01:57:04Z</updated>

		<summary type="html">&lt;p&gt;Wnt moved page &lt;a href=&quot;/index.php?title=Module:User:wnt/sandbox/Not_lowercase&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module:User:wnt/sandbox/Not lowercase (page does not exist)&quot;&gt;Module:User:wnt/sandbox/Not lowercase&lt;/a&gt; to &lt;a href=&quot;/research/Module:Sandbox/Wnt/Not_lowercase&quot; title=&quot;Module:Sandbox/Wnt/Not lowercase&quot;&gt;Module:Sandbox/Wnt/Not lowercase&lt;/a&gt; without leaving a redirect: Apparently there&amp;#039;s now a standard set of names for these ... besides, this I screwed up even my own standard...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; -- this code came from User:Martijn Hoekstra; I&amp;#039;m curious how he handled the task.&lt;br /&gt;
 -- (for my version see Module:Plotter|bar -- Wnt)&lt;br /&gt;
&lt;br /&gt;
local p={}&lt;br /&gt;
local better={} -- functions to make or snarf to put in some library&lt;br /&gt;
function better.concat(sometable,ignore,delimiter,delimiter2,delimiter3,level)  -- This one&amp;#039;s mine - Wnt&lt;br /&gt;
    local output=&amp;quot;&amp;quot;&lt;br /&gt;
    delimiter=delimiter or &amp;quot;,&amp;quot;;delimiter2=delimiter2 or &amp;quot;{&amp;quot;;delimiter3=delimiter3 or &amp;quot;}&amp;quot;&lt;br /&gt;
    if not(ignore) then ignore={} end -- ignore specifies types not to report&lt;br /&gt;
    if not(next(sometable)) then return &amp;quot;&amp;quot; end&lt;br /&gt;
    local notfirst;local display&lt;br /&gt;
    for i,j in pairs(sometable) do&lt;br /&gt;
        if not(ignore[type(j)]) then&lt;br /&gt;
            if notfirst then display=delimiter end&lt;br /&gt;
            if type(j)==&amp;quot;table&amp;quot; then&lt;br /&gt;
                local stopexpansion&lt;br /&gt;
                if level then&lt;br /&gt;
                    if level&amp;lt;=0 then&lt;br /&gt;
                        stopexpansion=true&lt;br /&gt;
                    else nextlevel=level-1&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if stopexpansion then&lt;br /&gt;
                    if not(ignore[&amp;quot;table&amp;quot;]) then output=output..(display or &amp;quot;&amp;quot;)..&amp;quot;table&amp;quot; end&lt;br /&gt;
                else output=output..(display or &amp;quot;&amp;quot;) .. better.concat(j,ignore,delimiter,delimiter2,delimiter3,nextlevel)&lt;br /&gt;
                end&lt;br /&gt;
            else output=output..(display or &amp;quot;&amp;quot;)..tostring(j)&lt;br /&gt;
            end&lt;br /&gt;
            notfirst=true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return delimiter2..output..delimiter3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main()&lt;br /&gt;
    local testdata = { {&amp;quot;blue&amp;quot;, {1, 2, 3}}, {&amp;quot;red&amp;quot;, {3, 4, 5}} }&lt;br /&gt;
    return better.concat(testdata,nil,&amp;quot;,&amp;quot;,&amp;quot;{&amp;quot;,&amp;quot;}&amp;quot;,2)..bar_chart(&amp;quot;1000px&amp;quot;, &amp;quot;1000px&amp;quot;, testdata, nil, nil)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
function bar_chart(height, width, data, xlabels, ylabels)&lt;br /&gt;
    local maxy = maxr(data)&lt;br /&gt;
    local paired = {}&lt;br /&gt;
    --where is a map function when you need one? &lt;br /&gt;
    for k, s in pairs(data) do&lt;br /&gt;
        for i, d in pairs(s[2]) do&lt;br /&gt;
            if paired[k] == nil then paired[k] = {} end&lt;br /&gt;
            paired[k][i] = {s[1], d}&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    --now looks like  { {{&amp;quot;blue&amp;quot;, 1}, {blue, 2}, {blue, 3}}, { {&amp;quot;red&amp;quot;, 3}, {&amp;quot;red&amp;quot;, 4}, {&amp;quot;red&amp;quot;, 5} } }&lt;br /&gt;
    -- ? so paired [yseries][x]={color,y} ?&lt;br /&gt;
    local trans = transpose(paired)&lt;br /&gt;
    local content = &amp;quot;&amp;quot;&lt;br /&gt;
    for i, v in pairs(trans) do&lt;br /&gt;
        content = content .. string.format(&amp;#039;&amp;lt;div name=&amp;quot;datapointContainer&amp;quot;,style=&amp;quot;display:inline-block;position:relative;height=100%%&amp;quot;&amp;gt;&amp;amp;nbsp;%s&amp;lt;\/div&amp;gt;&amp;#039;,datapoint(v, &amp;quot;label&amp;quot;, maxy))&lt;br /&gt;
    end&lt;br /&gt;
    return better.concat(paired)..string.format(&amp;#039;&amp;lt;div name=&amp;quot;chartContainer&amp;quot;,style=&amp;quot;height: %s;width: %s&amp;quot;&amp;gt;%s&amp;lt;\/div&amp;gt;&amp;#039;, height, width, content)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function transpose(matrix)&lt;br /&gt;
    local trans = {}&lt;br /&gt;
    for i, r in pairs(matrix) do -- ? for each yseries pull out the [x]{color,y} part&lt;br /&gt;
        for j, v in pairs(r) do -- for each x, {color, y}&lt;br /&gt;
            if trans[j] == nil then trans[j] = {} end&lt;br /&gt;
            trans[j][i] = v -- now trans[x][yseries]={color,y}&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return trans&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--borks on circular reference: pass seen tables along to fix&lt;br /&gt;
function maxr(mytable) &lt;br /&gt;
    local max = 0&lt;br /&gt;
    for k,v in pairs(mytable) do&lt;br /&gt;
        if type(v) == &amp;quot;number&amp;quot; then max = math.max(v, max)&lt;br /&gt;
        elseif type(v) == &amp;quot;table&amp;quot; then max = math.max(maxr(v), max)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return max&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
--data: one datapoint of n datasets: data = { {color1, value1}, {color2, value2}, {color3, value3} }&lt;br /&gt;
function datapoint(data, label, maxy)&lt;br /&gt;
    --fix with margins instead? My css fu is weak.&lt;br /&gt;
    local result = &amp;#039;&amp;lt;div style=&amp;quot;position:absolute;bottom:1.5em;height:90%&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
    for k,v in pairs(data) do&lt;br /&gt;
        result = result .. &amp;#039;\n&amp;#039; .. bar(v[2], maxy, v[1])&lt;br /&gt;
    end&lt;br /&gt;
    return result .. string.format(&amp;#039;&amp;lt;\/div&amp;gt;\n&amp;lt;div style=&amp;quot;position:absolute;bottom:0&amp;quot;&amp;gt;%s&amp;lt;\/div&amp;gt;&amp;#039;, label)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function bar(value, maxvalue, color)&lt;br /&gt;
    return string.format(&amp;#039;&amp;lt;div style=&amp;quot;display:inline-block;background-color:%s;height:%.0f%%;vertical-align:bottom&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;\/div&amp;gt;&amp;#039;, color, math.ceil(value/maxvalue *100))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Wnt</name></author>
	</entry>
</feed>