mNo edit summary |
mNo edit summary |
||
Line 111: | Line 111: | ||
:attr('style', 'width:100%; display:flex; gap: 10px;') | :attr('style', 'width:100%; display:flex; gap: 10px;') | ||
:tag('span') | :tag('span') | ||
:attr('style', 'border-radius: 16px; background-color: | :attr('style', 'border-radius: 16px; background-color: #777; text-align:center; flex-grow: 3;') | ||
:wikitext( 'null' ) | :wikitext( 'null' ) | ||
:done() | :done() | ||
:tag( 'span') | :tag( 'span') | ||
:attr('style', 'border-radius: 16px; background-color: | :attr('style', 'border-radius: 16px; background-color: #333; text-align:center; flex-grow: 1;') | ||
:wikitext( '∅' ) | :wikitext( '∅' ) | ||
Container | Container |
Revision as of 19:55, 13 January 2024
Documentation for this module may be created at Module:Test/doc
local p = {}
-- Type colors - RGB values to be included in the HTML output when a color is needed
local typeColor =
{
User = '255, 128, 255',
Impulse = '179, 255, 255',
Bool = '115, 115, 115',
Boolean = '115, 115, 115',
AsyncImpulse = '204, 179, 255',
String = '245, 31, 31',
Dummy = '255, 0, 255',
IFormatProvider = '168, 143, 214',
float = '0, 255, 255',
ColorProfile = '255, 196, 54',
colorX = '255, 89, 0',
Component = '112, 76, 85',
float3 = '0, 255, 255',
float2 = '0, 255, 255'
}
-- Set the __index function of the metatable to return '0, 0, 0' - this effectively acts as the default value
-- if a type doesn't exist in the typeColor table.
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 globalsDecode = mw.text.jsonDecode( frame.args.Globals );
local protofluxContainer = mw.html.create( 'table' )
protofluxContainer
:attr( 'cellspacing', '0px')
:attr( 'style', 'color: white; background-color: #11151d;' )
:attr( 'width', "256px" )
:tag( 'tr' )
:attr( 'style', 'height: 50px; background-color: #1a2a36; font-size: 18pt;')
:tag( 'th' )
:attr('width', '15%')
:done()
:tag( 'th' )
:attr('width', '70%')
:wikitext(frame.args.Name)
:done()
:tag( 'th')
:attr('width', '15%');
local maxRows = math.max(#inputsDecode, #outputsDecode)
for i=1,maxRows do
CreateIORow(protofluxContainer, inputsDecode[i], outputsDecode[i]);
end
for i=1,#globalsDecode do
CreateGlobalsRow(protofluxContainer, globalsDecode[i]);
end
protofluxContainer
:tag( 'tr' )
:tag( 'td' )
:attr('colspan', '3')
:attr('style', 'text-align: center; padding: 10px; font-size: 18pt; color: rgb(64,64,64); font-weight: bold;' )
:wikitext(frame.args.Category)
return tostring(protofluxContainer);
end
-- Each Input/Output row is really 2 rows high.
function CreateIORow(Container, Input, Output)
local inputRow = Container
:tag( 'tr' )
:attr( 'style', 'height: 36px;');
createIOBindingPost(inputRow, Input, true);
inputRow
:tag( 'td' ) -- The Input name
:attr( 'style', 'text-align: left; border-right: 20px solid #11151d; border-bottom: 4px solid #11151d; border-top: 4px solid #11151d; background-color:' .. getIOColor(Input, 0.6) .. ';')
:wikitext( Input and Input.Name or ' ' )
createIOBindingPost(inputRow, Output, false);
Container
:tag( 'tr')
:attr( 'style', 'height: 36px;')
:tag( 'td' )
:attr( 'style', 'text-align: right; border-left: 20px solid #11151d; border-bottom: 4px solid #11151d; border-top: 4px solid #11151d; background-color: ' .. getIOColor(Output, 0.6) .. ';')
:wikitext( Output and Output.Name or ' ' )
:done()
end
-- Each Globlals row is really 2 rows high.
function CreateGlobalsRow(Container, Global)
local inputRow = Container
:tag( 'tr' )
:attr( 'style', 'height: 36px;')
:tag( 'td' )
:attr( 'rowspan', '2' )
:attr( 'colspan', '3')
:attr( 'style', 'border-left: 10px solid ' .. getIOColor(Global, 1.0) .. ';')
:tag( 'span' ) -- The Input name
:attr( 'style', 'text-align: center; font-weight: bold; display:block;')
:wikitext( Global and Global.Name or ' ' )
:done()
:tag( 'div' )
:attr('style', 'width:100%; display:flex; gap: 10px;')
:tag('span')
:attr('style', 'border-radius: 16px; background-color: #777; text-align:center; flex-grow: 3;')
:wikitext( 'null' )
:done()
:tag( 'span')
:attr('style', 'border-radius: 16px; background-color: #333; text-align:center; flex-grow: 1;')
:wikitext( '∅' )
Container
:tag( 'tr')
:attr( 'style', 'height: 36px;')
end
function createIOBindingPost(Container, Connector, isInput)
if nil and Connector and Connector.Type == "Impulse" then
Container
:tag( 'td' )
:attr( 'rowspan', '2' )
:attr( 'style', 'background-color: black; border-style: none;')
:tag( 'svg' )
:attr( 'width', '38')
:attr( 'height', '72')
:attr( 'style', 'display:block; stroke: rgba(179, 255, 255,1); fill: rgba(179, 255, 255,0.3); stroke-linejoin: round;')
:tag( 'polygon' )
:attr('style', 'stroke-width: 3px')
:attr( 'points', '2,2 2,70, 36,36')
else
Container
:tag( 'td' )
:attr( 'rowspan', '2' )
:attr( 'style', 'background-color: ' .. getIOColor(Connector, 0.3) .. '; border: 5px solid ' .. getIOColor(Connector, 1.0) .. (isInput and '; border-left: none;' or ';border-right: none;'))
end
end
function getIOColor(Connector, alpha)
return (Connector and 'rgba(' .. typeColor[Connector.Type] .. ',' .. alpha .. ')' or 'rgba(0,0,0,0)')
end
return p