diff --git a/demos/blockfactory/block_definition_extractor.js b/demos/blockfactory/block_definition_extractor.js index 35186ac845c..e6b1cedd619 100644 --- a/demos/blockfactory/block_definition_extractor.js +++ b/demos/blockfactory/block_definition_extractor.js @@ -287,14 +287,16 @@ BlockDefinitionExtractor.parseInputs_ = function(block) { * @private */ BlockDefinitionExtractor.input_ = function(input, align) { - var isDummy = (input.type === Blockly.DUMMY_INPUT); + var hasConnector = (input.type === Blockly.inputs.inputTypes.VALUE || input.type === Blockly.inputs.inputTypes.STATEMENT); var inputTypeAttr = - isDummy ? 'input_dummy' : - (input.type === Blockly.INPUT_VALUE) ? 'input_value' : 'input_statement'; + input.type === Blockly.inputs.inputTypes.DUMMY ? 'input_dummy' : + input.type === Blockly.inputs.inputTypes.END_ROW ? 'input_end_row' : + input.type === Blockly.inputs.inputTypes.VALUE ? 'input_value' : + 'input_statement'; var inputDefBlock = BlockDefinitionExtractor.newDomElement_('block', {type: inputTypeAttr}); - if (!isDummy) { + if (hasConnector) { inputDefBlock.append(BlockDefinitionExtractor.newDomElement_( 'field', {name: 'INPUTNAME'}, input.name)); } @@ -307,7 +309,7 @@ BlockDefinitionExtractor.input_ = function(input, align) { fieldsDef.append(fieldsXml); inputDefBlock.append(fieldsDef); - if (!isDummy) { + if (hasConnector) { var typeValue = BlockDefinitionExtractor.newDomElement_( 'value', {name: 'TYPE'}); typeValue.append( diff --git a/demos/blockfactory/blocks.js b/demos/blockfactory/blocks.js index 8927e64531b..2bb431aaec5 100644 --- a/demos/blockfactory/blocks.js +++ b/demos/blockfactory/blocks.js @@ -228,6 +228,24 @@ Blockly.Blocks['input_dummy'] = { } }; +Blockly.Blocks['input_end_row'] = { + // End-row input. + init: function() { + this.jsonInit({ + "message0": "end-row input", + "message1": FIELD_MESSAGE, + "args1": FIELD_ARGS, + "previousStatement": "Input", + "nextStatement": "Input", + "colour": 210, + "tooltip": "For adding fields at the end of a row with no " + + "connections. Alignment options (left, right, centre) " + + "apply only to multi-line fields.", + "helpUrl": "https://developers.google.com/blockly/guides/create-custom-blocks/define-blocks#block_inputs" + }); + } +}; + Blockly.Blocks['field_static'] = { // Text value. init: function() { diff --git a/demos/blockfactory/factory_utils.js b/demos/blockfactory/factory_utils.js index 0caf4b5aa5e..7612b996c93 100644 --- a/demos/blockfactory/factory_utils.js +++ b/demos/blockfactory/factory_utils.js @@ -177,7 +177,8 @@ FactoryUtils.formatJson_ = function(blockType, rootBlock) { var input = {type: contentsBlock.type}; // Dummy inputs don't have names. Other inputs do. - if (contentsBlock.type !== 'input_dummy') { + if (contentsBlock.type !== 'input_dummy' && + contentsBlock.type !== 'input_end_row') { input.name = contentsBlock.getFieldValue('INPUTNAME'); } var check = JSON.parse( @@ -272,13 +273,15 @@ FactoryUtils.formatJavaScript_ = function(blockType, rootBlock, workspace) { // Generate inputs. var TYPES = {'input_value': 'appendValueInput', 'input_statement': 'appendStatementInput', - 'input_dummy': 'appendDummyInput'}; + 'input_dummy': 'appendDummyInput', + 'input_end_row': 'appendEndRowInput'}; var contentsBlock = rootBlock.getInputTargetBlock('INPUTS'); while (contentsBlock) { if (!contentsBlock.disabled && !contentsBlock.getInheritedDisabled()) { var name = ''; // Dummy inputs don't have names. Other inputs do. - if (contentsBlock.type !== 'input_dummy') { + if (contentsBlock.type !== 'input_dummy' && + contentsBlock.type !== 'input_end_row') { name = JSON.stringify(contentsBlock.getFieldValue('INPUTNAME')); } diff --git a/demos/blockfactory/index.html b/demos/blockfactory/index.html index 37c75236d78..14d84d73f7e 100644 --- a/demos/blockfactory/index.html +++ b/demos/blockfactory/index.html @@ -422,6 +422,7 @@

Generator stub: +