diff --git a/src/blocks/caesar.js b/src/blocks/caesar.js index 5ebf23e..8a0d694 100644 --- a/src/blocks/caesar.js +++ b/src/blocks/caesar.js @@ -1,8 +1,14 @@ module.exports = { name: "Caesar", inputs: { - text: "Text", - shift: "Shift" + text: { + name: "Text" + }, + shift: { + name: "Shift", + inline: true, + type: "number" + } }, output: true, execute: function({text, shift}, elem){ diff --git a/src/blocks/output.js b/src/blocks/output.js index a05a6af..77a831f 100644 --- a/src/blocks/output.js +++ b/src/blocks/output.js @@ -1,7 +1,9 @@ module.exports = { name: "Output", inputs: { - input: "Input" + input: { + name: "Input" + } }, output: false, execute: function({input}, block){ diff --git a/src/outputCalculation.js b/src/outputCalculation.js index 6ccf5c4..011ea89 100644 --- a/src/outputCalculation.js +++ b/src/outputCalculation.js @@ -5,12 +5,17 @@ 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]]; + if(block.inputs[input].joined){ //if it's joined to something else + if(block.inputs[input].joined in cache){ //if output of other block is already in cache + inputValues[input] = cache[block.inputs[input].joined]; + } + else{ + var inputBlock = diagram.state.filter((diagramBlock)=>(diagramBlock.id == block.inputs[input].joined))[0]; //find block instance + inputValues[input] = resolveOutput(inputBlock, cache); //calculate and store output + } } - else{ - var inputBlock = diagram.state.filter((diagramBlock)=>(diagramBlock.id == block.inputs[input]))[0]; - inputValues[input] = resolveOutput(inputBlock, cache); + else if(block.inputs[input].value){ //if value is already set, just save that + inputValues[input] = block.inputs[input].value; } } diff --git a/src/pageInteraction/addBlockToPage.js b/src/pageInteraction/addBlockToPage.js index 63fed70..3733671 100644 --- a/src/pageInteraction/addBlockToPage.js +++ b/src/pageInteraction/addBlockToPage.js @@ -1,4 +1,5 @@ var blocks = require("../blocks"); +var events = require("../events"); module.exports = function(newBlock){ var newBlockElement = $( @@ -7,14 +8,26 @@ module.exports = function(newBlock){ instance: newBlock }) ).appendTo("#workspace"); + newBlockElement.find(".inputs input").keyup(function(){ + //when input field is updated, save the value to the block object and emit event for updates + var inputId = $(this).parent().attr("id"); + if(!newBlock.inputs[inputId]){ + newBlock.inputs[inputId] = {}; + } + newBlock.inputs[inputId].value = $(this).val(); + events.emit("inputChanged"); + }); newBlock.elem = newBlockElement; if(blocks[newBlock.type].size){ + //if the block declaration contains a non-standard size, resize it newBlockElement.css({ height: blocks[newBlock.type].size.height, width: blocks[newBlock.type].size.width }); } if(newBlock.position){ + //if this block instance already has a position, place it there + //this will only be used for importing newBlockElement.css({ top: newBlock.position.y, left: newBlock.position.x diff --git a/src/pageInteraction/block.hbs b/src/pageInteraction/block.hbs index 99bd724..5b20b82 100644 --- a/src/pageInteraction/block.hbs +++ b/src/pageInteraction/block.hbs @@ -1,7 +1,12 @@