From 977a5d01d97d1a8c0095c93df2f79ec11e69bb0b Mon Sep 17 00:00:00 2001 From: yuri-kiss <135030944+yuri-kiss@users.noreply.github.com> Date: Tue, 11 Feb 2025 00:13:19 -0500 Subject: [PATCH 1/7] Allow adding custom shadow argument reporters --- core/scratch_blocks_utils.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/scratch_blocks_utils.js b/core/scratch_blocks_utils.js index aa44203c5d..eb1b30c288 100644 --- a/core/scratch_blocks_utils.js +++ b/core/scratch_blocks_utils.js @@ -72,6 +72,14 @@ 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 {Set} + */ +Blockly.scratchBlocksUtils.shadowArgumentReporters = new Set(['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 +91,7 @@ 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.has(block.type)); }; /** From 7dbeace2c6b4d3824cef297fcb76a5bf40f90794 Mon Sep 17 00:00:00 2001 From: yuri-kiss <135030944+yuri-kiss@users.noreply.github.com> Date: Tue, 11 Feb 2025 00:16:33 -0500 Subject: [PATCH 2/7] Blockly is too old for Set :( --- core/scratch_blocks_utils.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/scratch_blocks_utils.js b/core/scratch_blocks_utils.js index eb1b30c288..dea739e9b2 100644 --- a/core/scratch_blocks_utils.js +++ b/core/scratch_blocks_utils.js @@ -76,9 +76,12 @@ 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 {Set} + * @type {string[]} */ -Blockly.scratchBlocksUtils.shadowArgumentReporters = new Set(['argument_reporter_boolean', 'argument_reporter_string_number']); +Blockly.scratchBlocksUtils.shadowArgumentReporters = [ + 'argument_reporter_boolean', + 'argument_reporter_string_number' +]; /** * Whether a block is both a shadow block and an argument reporter. These @@ -91,7 +94,7 @@ Blockly.scratchBlocksUtils.shadowArgumentReporters = new Set(['argument_reporter * @package */ Blockly.scratchBlocksUtils.isShadowArgumentReporter = function(block) { - return (block.isShadow() && Blockly.scratchBlocksUtils.shadowArgumentReporters.has(block.type)); + return (block.isShadow() && Blockly.scratchBlocksUtils.shadowArgumentReporters.includes(block.type)); }; /** From f1263239e823c89d7c4f3fe0041306138f5267ab Mon Sep 17 00:00:00 2001 From: yuri-kiss <135030944+yuri-kiss@users.noreply.github.com> Date: Tue, 11 Feb 2025 08:10:55 -0500 Subject: [PATCH 3/7] Check if the block has "shadow_argument_reporter" --- core/scratch_blocks_utils.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/scratch_blocks_utils.js b/core/scratch_blocks_utils.js index dea739e9b2..90de26be25 100644 --- a/core/scratch_blocks_utils.js +++ b/core/scratch_blocks_utils.js @@ -94,7 +94,10 @@ Blockly.scratchBlocksUtils.shadowArgumentReporters = [ * @package */ Blockly.scratchBlocksUtils.isShadowArgumentReporter = function(block) { - return (block.isShadow() && Blockly.scratchBlocksUtils.shadowArgumentReporters.includes(block.type)); + return (block.isShadow() && ( + Blockly.scratchBlocksUtils.shadowArgumentReporters.includes(block.type) || + block.shadow_argument_reporter + )); }; /** From e26092c77aae5b049ead697f9ead78786dc087cd Mon Sep 17 00:00:00 2001 From: yuri-kiss <135030944+yuri-kiss@users.noreply.github.com> Date: Tue, 11 Feb 2025 08:14:09 -0500 Subject: [PATCH 4/7] Add the boolean so it can be debugged --- core/block.js | 6 ++++++ 1 file changed, 6 insertions(+) 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. From 652ecfa25f82a6d16270cf8537b3dc878648e9fa Mon Sep 17 00:00:00 2001 From: yuri-kiss <135030944+yuri-kiss@users.noreply.github.com> Date: Tue, 11 Feb 2025 08:59:33 -0500 Subject: [PATCH 5/7] Add the shadow_argument_reporter extension --- core/extensions.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/extensions.js b/core/extensions.js index 1aabed1be0..bfd705dfb3 100644 --- a/core/extensions.js +++ b/core/extensions.js @@ -448,3 +448,6 @@ Blockly.Extensions.extensionParentTooltip_ = function() { }; Blockly.Extensions.register('parent_tooltip_when_inline', Blockly.Extensions.extensionParentTooltip_); +Blockly.Extensions.register('shadow_argument_reporter', function() { + this.shadow_argument_reporter = true; +}); \ No newline at end of file From 073a5da79c8505a41e0bdd7e49de69fbfdc70d52 Mon Sep 17 00:00:00 2001 From: yuri-kiss <135030944+yuri-kiss@users.noreply.github.com> Date: Tue, 11 Feb 2025 09:06:11 -0500 Subject: [PATCH 6/7] Move the extension to vertical extensions --- blocks_vertical/vertical_extensions.js | 8 ++++++++ core/extensions.js | 5 +---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/blocks_vertical/vertical_extensions.js b/blocks_vertical/vertical_extensions.js index 96e2684534..169143957b 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/extensions.js b/core/extensions.js index bfd705dfb3..7183d81229 100644 --- a/core/extensions.js +++ b/core/extensions.js @@ -447,7 +447,4 @@ Blockly.Extensions.extensionParentTooltip_ = function() { }.bind(this)); }; Blockly.Extensions.register('parent_tooltip_when_inline', - Blockly.Extensions.extensionParentTooltip_); -Blockly.Extensions.register('shadow_argument_reporter', function() { - this.shadow_argument_reporter = true; -}); \ No newline at end of file + Blockly.Extensions.extensionParentTooltip_); \ No newline at end of file From db8941dd70d504b8a83893cbb135f154b8f222c2 Mon Sep 17 00:00:00 2001 From: yuri-kiss <135030944+yuri-kiss@users.noreply.github.com> Date: Tue, 11 Feb 2025 09:10:11 -0500 Subject: [PATCH 7/7] ESLint fixes (I hope :sob:) --- blocks_vertical/vertical_extensions.js | 2 +- core/extensions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blocks_vertical/vertical_extensions.js b/blocks_vertical/vertical_extensions.js index 169143957b..47c3f06a90 100644 --- a/blocks_vertical/vertical_extensions.js +++ b/blocks_vertical/vertical_extensions.js @@ -291,7 +291,7 @@ Blockly.ScratchBlocks.VerticalExtensions.registerAll = function() { // Blocks that are regenerative shadow reporters Blockly.Extensions.register('shadow_argument_reporter', - Blockly.ScratchBlocks.VerticalExtensions.SHADOW_ARGUMENT_REPORTER); + Blockly.ScratchBlocks.VerticalExtensions.SHADOW_ARGUMENT_REPORTER); }; Blockly.ScratchBlocks.VerticalExtensions.registerAll(); diff --git a/core/extensions.js b/core/extensions.js index 7183d81229..1aabed1be0 100644 --- a/core/extensions.js +++ b/core/extensions.js @@ -447,4 +447,4 @@ Blockly.Extensions.extensionParentTooltip_ = function() { }.bind(this)); }; Blockly.Extensions.register('parent_tooltip_when_inline', - Blockly.Extensions.extensionParentTooltip_); \ No newline at end of file + Blockly.Extensions.extensionParentTooltip_);