Documentation for this module may be created at Module:Test/doc
local p = {}
local typeColor =
{
User = '255, 128, 255',
Impulse = '179, 255, 255',
Boolean = '115, 115, 115'
}
local mt = {__index = function () return "0,0,0" end}
setmetatable(typeColor, mt)
function p.ProtoFlux( frame )
local inputsDecode = mw.text.jsonDecode( frame.args.Inputs );
local outputsDecode = mw.text.jsonDecode( frame.args.Outputs );
local protofluxContainer = mw.html.create( 'table' )
protofluxContainer
:attr( 'cellspacing', '0px')
:attr( 'style', '-webkit-text-stroke: 1.5px black; paint-order: stroke fill;' )
:attr( 'width', "256px" )
:tag( 'tr' )
:attr( 'style', 'height: 50px;')
:tag( 'th' )
:attr('width', '20%')
:done()
:tag( 'th' )
:attr('width', '60%')
:wikitext(frame.args.Name)
:done()
:tag( 'th')
:attr('width', '20%');
local maxRows = math.max(#inputsDecode, #outputsDecode)
for i=1,maxRows,1 do
CreateIORow(protofluxContainer, inputsDecode[i], outputsDecode[i]);
end
return tostring(protofluxContainer);
end
-- Each Input/Output row is really 2 rows high.
function CreateIORow(Container, Input, Output)
Container
:tag( 'tr' )
:attr( 'style', 'height: 30px;')
:tag( 'td' ) -- The Input binding post
:attr( 'rowspan', '2' )
:attr( 'style', 'background-color: ' .. getIOColor(Input, 1.0) .. ';')
:done()
:tag( 'td' ) -- The Input name
:attr( 'style', 'text-align: left; border-right: 10px solid var(--color-surface-0); border-bottom: 18px solid var(--color-surface-0); border-top: 2px solid var(--color-surface-0); background-color:' .. getIOColor(Input, 1.0) .. ';')
:wikitext( Input.Name )
:done()
:tag( 'td' ) -- The Output binding post
:attr( 'rowspan', '2' )
:attr( 'style', 'background-color:' .. getIOColor(Output, 1.0) .. ';')
:done()
:done()
:tag( 'tr')
:attr( 'style', 'height: 30px;')
:tag( 'td' )
:attr( 'style', 'text-align: right; border-left: 10px solid var(--color-surface-0); border-bottom: 2px solid var(--color-surface-0); border-top: 18px solid var(--color-surface-0); background-color: ' .. getIOColor(Output, 1.0) .. ';')
:wikitext( Output and Output.Name or '' )
:done()
end
function getIOColor(Connector, alpha)
return (Output and 'rgba(' .. typeColor[Output.Type] .. ',' .. alpha .. ')' or 'rgba(0,0,0,0)')
end
return p