diff --git a/client/src/blocks/concat.js b/client/src/blocks/concat.js
new file mode 100644
index 0000000..16eaf1f
--- /dev/null
+++ b/client/src/blocks/concat.js
@@ -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(){}
+ }
+}
diff --git a/client/src/blocks/index.js b/client/src/blocks/index.js
index 18f7ca6..c6a96f9 100644
--- a/client/src/blocks/index.js
+++ b/client/src/blocks/index.js
@@ -1,5 +1,5 @@
module.exports = {
input: require("./input.js"),
output: require("./output.js"),
- template: require("./template.js")
+ concat: require("./concat.js")
}
diff --git a/client/src/blocks/input.js b/client/src/blocks/input.js
index 6c775ca..5c5010b 100644
--- a/client/src/blocks/input.js
+++ b/client/src/blocks/input.js
@@ -1,13 +1,19 @@
+var events = require("../events.js");
+
module.exports = {
name: "Input",
inputs: {
},
output: true,
execute: function({}, block){
- return block.find("input[name='input']").val();
+ return block.elem.find("input[name='input']").val();
},
pageBlock: {
html: "",
- js: function(){}
+ js: function(block){
+ $(block.elem).find("input[name='input']").keyup(function(){
+ events.emit("inputChanged");
+ });
+ }
}
}
diff --git a/client/src/blocks/output.js b/client/src/blocks/output.js
index c860dff..a05a6af 100644
--- a/client/src/blocks/output.js
+++ b/client/src/blocks/output.js
@@ -5,7 +5,7 @@ module.exports = {
},
output: false,
execute: function({input}, block){
- $(elem).find("div.output").html(input1);
+ $(block.elem).find("span.output").html(input);
},
pageBlock: {
html: "",
diff --git a/client/src/index.js b/client/src/index.js
index 9d893e4..5a2dd84 100644
--- a/client/src/index.js
+++ b/client/src/index.js
@@ -1,5 +1,6 @@
require("./styles.scss");
require("./pageInteraction");
+require("./outputCalculation.js");
//for lazy debugging, remove when done
window.diagram = require("./diagram.js");
diff --git a/client/src/outputCalculation.js b/client/src/outputCalculation.js
new file mode 100644
index 0000000..846c7e7
--- /dev/null
+++ b/client/src/outputCalculation.js
@@ -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;
diff --git a/client/src/pageInteraction/dragDrop.js b/client/src/pageInteraction/dragDrop.js
index 8c4abf9..7d778a1 100644
--- a/client/src/pageInteraction/dragDrop.js
+++ b/client/src/pageInteraction/dragDrop.js
@@ -41,6 +41,8 @@ $("#blocks").on("mousedown", ".block>.main,.block>.inputs", function(event){
instance: newBlock
})
).appendTo("#workspace");
+ newBlock.elem = newBlockElement;
+ blocks[newBlock.type].pageBlock.js(newBlock);
blockPositionChange(event);
});
diff --git a/client/src/pageInteraction/joining.js b/client/src/pageInteraction/joining.js
index 2bf54c3..2f3f4bd 100644
--- a/client/src/pageInteraction/joining.js
+++ b/client/src/pageInteraction/joining.js
@@ -52,6 +52,7 @@ $("#workspace").on("mouseup", ".block>.inputs>div", function(event){
var endBlockInstance = diagram.state.filter((block)=>(block.id == endBlock))[0];
endBlockInstance.inputs[endInput] = startBlock;
drawJoiningLines();
+ events.emit("newJoin");
}
});