diff --git a/blocks_vertical/vertical_extensions.js b/blocks_vertical/vertical_extensions.js index 96e2684534..47c3f06a90 100644 --- a/blocks_vertical/vertical_extensions.js +++ b/blocks_vertical/vertical_extensions.js @@ -232,6 +232,10 @@ Blockly.ScratchBlocks.VerticalExtensions.SCRATCH_EXTENSION = function() { this.isScratchExtension = true; }; +Blockly.ScratchBlocks.VerticalExtensions.SHADOW_ARGUMENT_REPORTER = function() { + this.shadow_argument_reporter = true; +}; + /** * Register all extensions for scratch-blocks. * @package @@ -284,6 +288,10 @@ Blockly.ScratchBlocks.VerticalExtensions.registerAll = function() { // Misleading name. Given to blocks that have an extension icon. Blockly.Extensions.register('scratch_extension', Blockly.ScratchBlocks.VerticalExtensions.SCRATCH_EXTENSION); + + // Blocks that are regenerative shadow reporters + Blockly.Extensions.register('shadow_argument_reporter', + Blockly.ScratchBlocks.VerticalExtensions.SHADOW_ARGUMENT_REPORTER); }; Blockly.ScratchBlocks.VerticalExtensions.registerAll(); diff --git a/core/block.js b/core/block.js index ae49a86015..38f4020322 100644 --- a/core/block.js +++ b/core/block.js @@ -210,6 +210,12 @@ Blockly.Block = function(workspace, prototypeName, opt_id) { } }; +/** + * Whether or not this block is a shadow argument reporter. (used by VM) + * @type {boolean} + */ +Blockly.Block.prototype.shadow_argument_reporter = false; + /** * Optional text data that round-trips beween blocks and XML. * Has no effect. May be used by 3rd parties for meta information. diff --git a/core/scratch_blocks_utils.js b/core/scratch_blocks_utils.js index aa44203c5d..90de26be25 100644 --- a/core/scratch_blocks_utils.js +++ b/core/scratch_blocks_utils.js @@ -72,6 +72,17 @@ Blockly.scratchBlocksUtils.changeObscuredShadowIds = function(block) { } }; +/** + * Set of blocks that have special behaviour in scratch-blocks where they're + * duplicated when dragged, and they are rendered slightly differently from + * normalshadow blocks. + * @type {string[]} + */ +Blockly.scratchBlocksUtils.shadowArgumentReporters = [ + 'argument_reporter_boolean', + 'argument_reporter_string_number' +]; + /** * Whether a block is both a shadow block and an argument reporter. These * blocks have special behaviour in scratch-blocks: they're duplicated when @@ -83,8 +94,10 @@ Blockly.scratchBlocksUtils.changeObscuredShadowIds = function(block) { * @package */ Blockly.scratchBlocksUtils.isShadowArgumentReporter = function(block) { - return (block.isShadow() && (block.type == 'argument_reporter_boolean' || - block.type == 'argument_reporter_string_number')); + return (block.isShadow() && ( + Blockly.scratchBlocksUtils.shadowArgumentReporters.includes(block.type) || + block.shadow_argument_reporter + )); }; /**