Implemented output calculation (yay)

This commit is contained in:
Tim Stallard 2017-02-21 21:28:24 +00:00
parent 6bda6d3883
commit df563625cd
8 changed files with 63 additions and 4 deletions

View File

@ -0,0 +1,15 @@
module.exports = {
name: "Concat",
inputs: {
str1: "String 1",
str2: "String 2"
},
output: true,
execute: function({str1, str2}, block){
return str1 + str2;
},
pageBlock: {
html: "",
js: function(){}
}
}

View File

@ -1,5 +1,5 @@
module.exports = { module.exports = {
input: require("./input.js"), input: require("./input.js"),
output: require("./output.js"), output: require("./output.js"),
template: require("./template.js") concat: require("./concat.js")
} }

View File

@ -1,13 +1,19 @@
var events = require("../events.js");
module.exports = { module.exports = {
name: "Input", name: "Input",
inputs: { inputs: {
}, },
output: true, output: true,
execute: function({}, block){ execute: function({}, block){
return block.find("input[name='input']").val(); return block.elem.find("input[name='input']").val();
}, },
pageBlock: { pageBlock: {
html: "<input type='text' name='input'></input>", html: "<input type='text' name='input'></input>",
js: function(){} js: function(block){
$(block.elem).find("input[name='input']").keyup(function(){
events.emit("inputChanged");
});
}
} }
} }

View File

@ -5,7 +5,7 @@ module.exports = {
}, },
output: false, output: false,
execute: function({input}, block){ execute: function({input}, block){
$(elem).find("div.output").html(input1); $(block.elem).find("span.output").html(input);
}, },
pageBlock: { pageBlock: {
html: "<span class='output'></span>", html: "<span class='output'></span>",

View File

@ -1,5 +1,6 @@
require("./styles.scss"); require("./styles.scss");
require("./pageInteraction"); require("./pageInteraction");
require("./outputCalculation.js");
//for lazy debugging, remove when done //for lazy debugging, remove when done
window.diagram = require("./diagram.js"); window.diagram = require("./diagram.js");

View File

@ -0,0 +1,34 @@
var diagram = require("./diagram.js");
var events = require("./events.js");
var blocks = require("./blocks");
function resolveOutput(block, cache){
var inputValues = {};
for(var input in block.inputs){
if(block.inputs[input] in cache){
inputValues[input] = cache[block.inputs[input]];
}
else{
var inputBlock = diagram.state.filter((diagramBlock)=>(diagramBlock.id == block.inputs[input]))[0];
inputValues[input] = resolveOutput(inputBlock, cache);
}
}
var output = blocks[block.type].execute(inputValues, block);
cache[block.id] = output;
return output;
}
function calculateOutputBlocks(){
var cache = {};
var outputBlocks = diagram.state.filter((block)=>(block.type == "output"));
for(var block of outputBlocks){
resolveOutput(block, cache);
}
}
events.subscribe("inputChanged", calculateOutputBlocks);
events.subscribe("newJoin", calculateOutputBlocks);
window.calculate = calculateOutputBlocks;

View File

@ -41,6 +41,8 @@ $("#blocks").on("mousedown", ".block>.main,.block>.inputs", function(event){
instance: newBlock instance: newBlock
}) })
).appendTo("#workspace"); ).appendTo("#workspace");
newBlock.elem = newBlockElement;
blocks[newBlock.type].pageBlock.js(newBlock);
blockPositionChange(event); blockPositionChange(event);
}); });

View File

@ -52,6 +52,7 @@ $("#workspace").on("mouseup", ".block>.inputs>div", function(event){
var endBlockInstance = diagram.state.filter((block)=>(block.id == endBlock))[0]; var endBlockInstance = diagram.state.filter((block)=>(block.id == endBlock))[0];
endBlockInstance.inputs[endInput] = startBlock; endBlockInstance.inputs[endInput] = startBlock;
drawJoiningLines(); drawJoiningLines();
events.emit("newJoin");
} }
}); });