From df563625cda6e04d3896d3402ceab5b1e43fddfc Mon Sep 17 00:00:00 2001 From: Tim Stallard Date: Tue, 21 Feb 2017 21:28:24 +0000 Subject: [PATCH] Implemented output calculation (yay) --- client/src/blocks/concat.js | 15 ++++++++++++ client/src/blocks/index.js | 2 +- client/src/blocks/input.js | 10 ++++++-- client/src/blocks/output.js | 2 +- client/src/index.js | 1 + client/src/outputCalculation.js | 34 ++++++++++++++++++++++++++ client/src/pageInteraction/dragDrop.js | 2 ++ client/src/pageInteraction/joining.js | 1 + 8 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 client/src/blocks/concat.js create mode 100644 client/src/outputCalculation.js 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"); } });