From 1e58be0cd6a138c4bcb3f1eddf239852b367a8d3 Mon Sep 17 00:00:00 2001 From: picklesrus Date: Wed, 5 Oct 2016 15:04:52 -0700 Subject: [PATCH] Fix #636 by changing the factory_base block definition to only (#671) span shadow blocks for output types when the dropdown to add/change/remove output types is changed. This way, we won't overwrite existing blocks when loading from xml. --- demos/blockfactory/blocks.js | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/demos/blockfactory/blocks.js b/demos/blockfactory/blocks.js index 3cd1dcda1..856780a52 100644 --- a/demos/blockfactory/blocks.js +++ b/demos/blockfactory/blocks.js @@ -47,6 +47,8 @@ Blockly.Blocks['factory_base'] = { ['↓ bottom connection', 'BOTTOM']], function(option) { this.sourceBlock_.updateShape_(option); + // Connect a shadow block to this new input. + this.sourceBlock_.spawnOutputShadow_(option); }); this.appendDummyInput() .appendField(dropdown, 'CONNECTIONS'); @@ -67,6 +69,33 @@ Blockly.Blocks['factory_base'] = { var connections = xmlElement.getAttribute('connections'); this.updateShape_(connections); }, + spawnOutputShadow_: function(option) { + // Helper method for deciding which type of outputs this block needs + // to attach shaddow blocks to. + switch (option) { + case 'LEFT': + this.connectOutputShadow_('OUTPUTTYPE'); + break; + case 'TOP': + this.connectOutputShadow_('TOPTYPE'); + break; + case 'BOTTOM': + this.connectOutputShadow_('BOTTOMTYPE'); + break; + case 'BOTH': + this.connectOutputShadow_('TOPTYPE'); + this.connectOutputShadow_('BOTTOMTYPE'); + break; + } + }, + connectOutputShadow_: function(outputType) { + // Helper method to create & connect shadow block. + var type = this.workspace.newBlock('type_null'); + type.setShadow(true); + type.outputConnection.connect(this.getInput(outputType).connection); + type.initSvg(); + type.render(); + }, updateShape_: function(option) { var outputExists = this.getInput('OUTPUTTYPE'); var topExists = this.getInput('TOPTYPE'); @@ -98,11 +127,6 @@ Blockly.Blocks['factory_base'] = { .setCheck('Type') .appendField(label); this.moveInputBefore(name, 'COLOUR'); - var type = this.workspace.newBlock('type_null'); - type.setShadow(true); - type.outputConnection.connect(this.getInput(name).connection); - type.initSvg(); - type.render(); } };