Register Node
Node?
This is where we define our node structure like input/output/properties, title, and description
Can be ported easily on different programming languages
That's mean we can't call specific language's API
Any interaction with specific language's API like input/output must be registered on Interface.
This supposed to run on NodeJS too, so don't control any HTML element directly inside this.
Don't declare or use variable outside of function context/scope.
Just think you want to create a compatible logic to be ported on Browser/Node.js/PHP/Python.
Just let this
node
control and communicate with your registeredinterface
.
// Register a new node
// -> (namespace, callback)
Blackprint.registerNode('math/multiply', function(node, iface){
// node = Blackprint flow handler
// iface = ScarletsFrame element handler
// Give it a title
iface.title = "Random";
// Give it a description
iface.description = "Multiply something";
// If the node would have value that can be exported to JSON
// It must being set inside options object
iface.options = {};
//> We will use `default` node type, so let this empty or undefined
// iface.interface = 'bp/default';
// ... Other information below ...
});
Reserved handler property
node
here is the Blackprint flow handler from the example above.
Property
Description
inputs
An array of input port registration
outputs
An array of output port registration
properties
An array of node property registration Still draft feature
importing
A boolean indicating if this node is being imported/created
Below are reserved property that filled with function/callback
Property
Arguments
Description
init
()
Callback function to be run after current handle and all node was initialized
request
(targetPort, sourceNode)
Callback when other node's input port are requesting current node's output value
update
(Cable)
Callback when current input value are updated from the other node's output port
imported
(options)
This is a callback after node was created, imported options should be handled here
For the detailed example you can see from this repository.
Node port registration
The port must be registered on the node
and Blackprint will create internal control with ScarletsFrame so the port can being used for sending or obtaining data from other node's port.
// ========= Port Format ==========
// ... = { PortName: DataType }
// Output port
node.outputs = {
// Declare Result as a output with Number data type
Result : Number,
// Declare Finish for trigger to other connected port's input callback
Finish : Function
// Output can have many connection into the related input data type
};
// Input port
// Let's declare as `inputs` variable too, for easy access
var inputs = node.inputs = {
// Declare A and validate this input as Number data type
A : Number, // Primitive type can only have one cable connected
// Declare B that will being called if any value
// on connected output port was updated
B : Blackprint.PortValidator(Number, function(value, Port){
// value === Port.value
}),
// Declare Start as a callback to start the multiplication
// Can have many cable connected
Start : function(/* arguments */){
// arguments are passed from the caller/output port of connected node
// Let's call declared function below
startMultiply();
},
// Accept Array of Number, can have many cable connected
C : Blackprint.PortArrayOf(Number),
};
function startMultiply(){
node.outputs.Result = inputs.A * inputs.B;
node.outputs.Finish("We can send", "arguments too");
}
Last updated
Was this helpful?