scratch-blocks 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nvmrc +1 -1
- package/commitlint.config.js +1 -1
- package/dist/main.mjs +1 -1
- package/dist/types/src/blocks/procedures.d.ts +1 -1
- package/dist/types/src/blocks/procedures.d.ts.map +1 -1
- package/dist/types/src/checkable_continuous_flyout.d.ts +1 -1
- package/dist/types/src/checkable_continuous_flyout.d.ts.map +1 -1
- package/dist/types/src/fields/field_colour_slider.d.ts +22 -0
- package/dist/types/src/fields/field_colour_slider.d.ts.map +1 -1
- package/dist/types/src/fields/field_note.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/recyclable_block_flyout_inflater.d.ts +1 -1
- package/dist/types/src/recyclable_block_flyout_inflater.d.ts.map +1 -1
- package/dist/types/src/renderer/path_object.d.ts.map +1 -1
- package/dist/types/src/scratch_continuous_category.d.ts +1 -1
- package/dist/types/src/scratch_continuous_category.d.ts.map +1 -1
- package/dist/types/src/scratch_continuous_toolbox.d.ts +1 -1
- package/dist/types/src/scratch_continuous_toolbox.d.ts.map +1 -1
- package/dist/types/src/scratch_dragger.d.ts +2 -2
- package/dist/types/src/scratch_dragger.d.ts.map +1 -1
- package/i18n/sync_tx_translations.js +1 -1
- package/i18n/test_scratch_msgs.js +2 -2
- package/package.json +10 -10
- package/src/blocks/procedures.ts +84 -24
- package/src/checkable_continuous_flyout.ts +1 -1
- package/src/context_menu_items.ts +1 -1
- package/src/data_category.ts +3 -3
- package/src/fields/field_colour_slider.ts +1 -1
- package/src/fields/field_note.ts +3 -3
- package/src/fields/scratch_field_variable.ts +2 -2
- package/src/index.ts +1 -1
- package/src/procedures.ts +9 -9
- package/src/recyclable_block_flyout_inflater.ts +1 -1
- package/src/renderer/path_object.ts +9 -5
- package/src/renderer/render_info.ts +3 -3
- package/src/scratch_connection_checker.ts +15 -0
- package/src/scratch_continuous_category.ts +1 -1
- package/src/scratch_continuous_toolbox.ts +1 -1
- package/src/scratch_dragger.ts +15 -8
- package/src/scratch_variable_map.ts +1 -1
|
@@ -42,7 +42,7 @@ interface ProcedureBlock extends Blockly.BlockSvg {
|
|
|
42
42
|
getProcCode: () => string;
|
|
43
43
|
removeAllInputs_: () => void;
|
|
44
44
|
disconnectOldBlocks_: () => ConnectionMap;
|
|
45
|
-
|
|
45
|
+
disposeObsoleteBlocks_: (connectionMap: ConnectionMap) => void;
|
|
46
46
|
createAllInputs_: (connectionMap: ConnectionMap) => void;
|
|
47
47
|
updateDisplay_: () => void;
|
|
48
48
|
populateArgument_: (type: ArgumentType, index: number, connectionMap: ConnectionMap, id: string, input: Blockly.Input) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procedures.d.ts","sourceRoot":"","sources":["../../../../src/blocks/procedures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAIvC;;GAEG;AACH,KAAK,aAAa,GAAG,MAAM,CACzB,MAAM,EACN;IACE,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAA;CACxB,GAAG,IAAI,CACT,CAAA;AAED;;GAEG;AACH,aAAK,YAAY;IACf,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,OAAO,MAAM;CACd;
|
|
1
|
+
{"version":3,"file":"procedures.d.ts","sourceRoot":"","sources":["../../../../src/blocks/procedures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAIvC;;GAEG;AACH,KAAK,aAAa,GAAG,MAAM,CACzB,MAAM,EACN;IACE,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAA;CACxB,GAAG,IAAI,CACT,CAAA;AAED;;GAEG;AACH,aAAK,YAAY;IACf,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,OAAO,MAAM;CACd;AA2gCD,UAAU,cAAe,SAAQ,OAAO,CAAC,QAAQ;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,oBAAoB,EAAE,MAAM,aAAa,CAAA;IACzC,sBAAsB,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAA;IAC9D,gBAAgB,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAA;IACxD,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,iBAAiB,EAAE,CACjB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,aAAa,EAC5B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,KAAK,KACjB,IAAI,CAAA;IACT,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C;AAED,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC/D,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,CAAA;IACnD,qBAAqB,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAA;IAC5F,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAChC,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,uBAAuB,EAAE,MAAM,IAAI,CAAA;IACnC,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright 2024 Google LLC
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import * as Blockly from 'blockly/core';
|
|
6
5
|
import { ContinuousFlyout } from '@blockly/continuous-toolbox';
|
|
6
|
+
import * as Blockly from 'blockly/core';
|
|
7
7
|
export declare class CheckableContinuousFlyout extends ContinuousFlyout {
|
|
8
8
|
/**
|
|
9
9
|
* Creates a new CheckableContinuousFlyout.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkable_continuous_flyout.d.ts","sourceRoot":"","sources":["../../../src/checkable_continuous_flyout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"checkable_continuous_flyout.d.ts","sourceRoot":"","sources":["../../../src/checkable_continuous_flyout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAKvC,qBAAa,yBAA0B,SAAQ,gBAAgB;IAC7D;;;OAGG;gBACS,gBAAgB,EAAE,OAAO,CAAC,OAAO;IAQ7C;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ;IAUhD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAIhD,cAAc;IAId,QAAQ;IAIR,SAAS,CAAC,eAAe;IAoBzB;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU;IAIrD;;OAEG;IACH,oBAAoB;IAQpB,QAAQ,CAAC,QAAQ,EAAE,MAAM;CAG1B"}
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual Blocks Editor
|
|
3
|
+
*
|
|
4
|
+
* Copyright 2012 Google Inc.
|
|
5
|
+
* https://developers.google.com/blockly/
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* @file Colour input field.
|
|
21
|
+
* @author fraser@google.com (Neil Fraser)
|
|
22
|
+
*/
|
|
1
23
|
import { FieldColour, FieldColourFromJsonConfig } from '@blockly/field-colour';
|
|
2
24
|
/**
|
|
3
25
|
* Class for a slider-based colour input field.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field_colour_slider.d.ts","sourceRoot":"","sources":["../../../../src/fields/field_colour_slider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"field_colour_slider.d.ts","sourceRoot":"","sources":["../../../../src/fields/field_colour_slider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAS9E;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAA;IAEzE;;OAEG;IACH,eAAe,SAAmB;IAClC,YAAY,UAAO;IACnB,QAAQ,UAAO;IAEf,OAAO,CAAC,kBAAkB,CAAC,CAA4B;IACvD,OAAO,CAAC,yBAAyB,CAAC,CAA4B;IAC9D,OAAO,CAAC,yBAAyB,CAAC,CAA4B;IAC9D,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,oBAAoB,CAAC,CAA4B;IAEzD;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,GAAG,iBAAiB;IAItE,cAAc,CAAC,QAAQ,EAAE,MAAM;IAM/B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,UAAU;IA4BlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAavB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAYnC;;OAEG;IACH,WAAW;IAwFX,OAAO;IAkBP,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CA+BvG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,SAExC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field_note.d.ts","sourceRoot":"","sources":["../../../../src/fields/field_note.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"field_note.d.ts","sourceRoot":"","sources":["../../../../src/fields/field_note.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,iBAAiB,CAAA;AACxB,OAAO,kBAAkB,CAAA;AACzB,OAAO,eAAe,CAAA;AACtB,OAAO,gBAAgB,CAAA;AACvB,OAAO,gBAAgB,CAAA;AACvB,OAAO,eAAe,CAAA;AACtB,OAAO,iBAAiB,CAAA;AACxB,OAAO,iBAAiB,CAAA;AACxB,OAAO,eAAe,CAAA;AACtB,OAAO,oBAAoB,CAAA;AAC3B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,kBAAkB,CAAA;AACzB,OAAO,gBAAgB,CAAA;AACvB,OAAO,eAAe,CAAA;AACtB,OAAO,8BAA8B,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,gBAAgB,MAAM,sBAAsB,CAAA;AACxD,OAAO,OAAO,CAAA;AACd,OAAO,sCAAsC,CAAA;AAC7C,OAAO,wCAAwC,CAAA;AAC/C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,oCAAoC,CAAA;AAC3C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,yCAAyC,CAAA;AAChD,OAAO,EAA6B,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAE3F,OAAO,EAAqB,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAQlE,OAAO,wBAAwB,CAAA;AAC/B,OAAO,EAAmB,SAAS,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,yBAAyB,CAAA;AAChC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAA;AAC5D,OAAO,wBAAwB,CAAA;AAC/B,OAAO,8BAA8B,CAAA;AAGrC,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sCAAsC,CAAA;AAC7C,OAAO,wBAAwB,CAAA;AAC/B,OAAO,0BAA0B,CAAA;AAIjC,OAAO,KAAK,gBAAgB,MAAM,aAAa,CAAA;AAE/C,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,OAAO,EAAE,yBAAyB,EAAE,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAClF,cAAc,OAAO,CAAA;AAErB,UAAU,oBAAqB,SAAQ,OAAO,CAAC,cAAc;IAC3D;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC;AASD,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,wBAmDvE"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright 2024 Google LLC
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import * as Blockly from 'blockly/core';
|
|
6
5
|
import { RecyclableBlockFlyoutInflater as BlocklyRecyclableBlockFlyoutInflater } from '@blockly/continuous-toolbox';
|
|
6
|
+
import * as Blockly from 'blockly/core';
|
|
7
7
|
/**
|
|
8
8
|
* A block inflater that caches and reuses blocks to improve performance.
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recyclable_block_flyout_inflater.d.ts","sourceRoot":"","sources":["../../../src/recyclable_block_flyout_inflater.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"recyclable_block_flyout_inflater.d.ts","sourceRoot":"","sources":["../../../src/recyclable_block_flyout_inflater.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,6BAA6B,IAAI,oCAAoC,EAAE,MAAM,6BAA6B,CAAA;AACnH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAGvC;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,oCAAoC;IACrF;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,UAAU;CAYxG;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,SAGpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path_object.d.ts","sourceRoot":"","sources":["../../../../src/renderer/path_object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;GAGG;AACH,qBAAa,UAAW,SAAQ,OAAO,CAAC,KAAK,CAAC,UAAU;IACtD;;;;OAIG;IACM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"path_object.d.ts","sourceRoot":"","sources":["../../../../src/renderer/path_object.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;GAGG;AACH,qBAAa,UAAW,SAAQ,OAAO,CAAC,KAAK,CAAC,UAAU;IACtD;;;;OAIG;IACM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ;CAgB7C"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright 2024 Google LLC
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import * as Blockly from 'blockly/core';
|
|
6
5
|
import { ContinuousCategory } from '@blockly/continuous-toolbox';
|
|
6
|
+
import * as Blockly from 'blockly/core';
|
|
7
7
|
type StatusIndicatorCategoryInfo = Blockly.utils.toolbox.CategoryInfo & {
|
|
8
8
|
showStatusButton?: string;
|
|
9
9
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch_continuous_category.d.ts","sourceRoot":"","sources":["../../../src/scratch_continuous_category.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"scratch_continuous_category.d.ts","sourceRoot":"","sources":["../../../src/scratch_continuous_category.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC,KAAK,2BAA2B,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB;IAC/D;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAAQ;IAEhC;;;;;OAKG;gBAED,cAAc,EAAE,2BAA2B,EAC3C,aAAa,EAAE,OAAO,CAAC,OAAO,EAC9B,UAAU,CAAC,EAAE,OAAO,CAAC,uBAAuB;IAM9C;;;OAGG;IACH,cAAc,IAAI,WAAW;IAa7B;;;OAGG;IACH,WAAW,CAAC,UAAU,EAAE,OAAO;IAM/B;;;;OAIG;IACH,sBAAsB;CAGvB;AAED,uEAAuE;AACvE,wBAAgB,iCAAiC,SAOhD"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright 2024 Google LLC
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import * as Blockly from 'blockly/core';
|
|
6
5
|
import { ContinuousToolbox } from '@blockly/continuous-toolbox';
|
|
6
|
+
import * as Blockly from 'blockly/core';
|
|
7
7
|
/**
|
|
8
8
|
* A toolbox that displays items from all categories in one scrolling list.
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch_continuous_toolbox.d.ts","sourceRoot":"","sources":["../../../src/scratch_continuous_toolbox.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"scratch_continuous_toolbox.d.ts","sourceRoot":"","sources":["../../../src/scratch_continuous_toolbox.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAIvC;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC7D;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,gBAAgB;IAKhB;;;;;OAKG;IACH,SAAS,CAAC,+BAA+B,CACvC,WAAW,EAAE,OAAO,CAAC,YAAY,GAChC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB;IAY5C;;OAEG;IACH,aAAa;IAUb;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI;IAIrC;;;;;;OAMG;IACH,mBAAmB,CACjB,OAAO,EAAE,OAAO,CAAC,sBAAsB,GAAG,IAAI,EAC9C,OAAO,EAAE,OAAO,CAAC,sBAAsB,GAAG,IAAI;CAKjD"}
|
|
@@ -50,8 +50,8 @@ export declare class ScratchDragger extends Blockly.dragging.Dragger {
|
|
|
50
50
|
*/
|
|
51
51
|
shouldReturnToStart(event: PointerEvent, rootDraggable: Blockly.IDraggable): boolean;
|
|
52
52
|
/**
|
|
53
|
-
* Returns the root element being dragged. For shadow blocks
|
|
54
|
-
* parent block.
|
|
53
|
+
* Returns the root element being dragged. For shadow blocks and the
|
|
54
|
+
* procedures_prototype block, this is the parent block.
|
|
55
55
|
* @param draggable The element being dragged directly.
|
|
56
56
|
* @returns The element being dragged, or its parent.
|
|
57
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch_dragger.d.ts","sourceRoot":"","sources":["../../../src/scratch_dragger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAUvC;;GAEG;AACH,qBAAa,cAAe,SAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAC1D;;OAEG;IACH,kBAAkB,UAAQ;IAE1B;;OAEG;IACH,oBAAoB,UAAQ;IAE5B;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU;IAI1C;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,YAAY;IAgB/B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;IAKhE;;;OAGG;IACH,sBAAsB,CAAC,KAAK,EAAE,YAAY;IAW1C;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"scratch_dragger.d.ts","sourceRoot":"","sources":["../../../src/scratch_dragger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAUvC;;GAEG;AACH,qBAAa,cAAe,SAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAC1D;;OAEG;IACH,kBAAkB,UAAQ;IAE1B;;OAEG;IACH,oBAAoB,UAAQ;IAE5B;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU;IAI1C;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,YAAY;IAgB/B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;IAKhE;;;OAGG;IACH,sBAAsB,CAAC,KAAK,EAAE,YAAY;IAW1C;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,YAAY;IA8C7B;;;;;;OAMG;IACH,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,CAAC,UAAU;IAO1E;;;;;OAKG;IACH,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU;IAczC;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,YAAY;CAKtC"}
|
|
@@ -50,8 +50,8 @@ const validateKeys = function () {
|
|
|
50
50
|
// ignore empty keys first time through
|
|
51
51
|
if (keys.length === 0) return
|
|
52
52
|
assert.strictEqual(keys.length, Object.keys(en).length, `scratch_msgs-${locale}: number of keys doesn't match`)
|
|
53
|
-
keys.map(item => assert(enKeys.includes(item), `scratch_msgs-${locale}: has key ${item} not in en`))
|
|
54
|
-
enKeys.map(item => assert(keys.includes(item), `scratch_msgs-${locale}: is missing key ${item}`))
|
|
53
|
+
keys.map((item) => assert(enKeys.includes(item), `scratch_msgs-${locale}: has key ${item} not in en`))
|
|
54
|
+
enKeys.map((item) => assert(keys.includes(item), `scratch_msgs-${locale}: is missing key ${item}`))
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
// Stream input and push each match to the storage object
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scratch-blocks",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Scratch Blocks is a library for building creative computing interfaces.",
|
|
5
5
|
"author": "Massachusetts Institute of Technology",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -32,19 +32,19 @@
|
|
|
32
32
|
"blockly": "^12.4.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@commitlint/cli": "
|
|
36
|
-
"@commitlint/config-conventional": "
|
|
37
|
-
"eslint": "
|
|
38
|
-
"eslint-config-scratch": "
|
|
35
|
+
"@commitlint/cli": "20.4.3",
|
|
36
|
+
"@commitlint/config-conventional": "20.4.3",
|
|
37
|
+
"eslint": "9.39.4",
|
|
38
|
+
"eslint-config-scratch": "14.0.3",
|
|
39
39
|
"husky": "9.1.7",
|
|
40
40
|
"prettier": "3.8.1",
|
|
41
41
|
"scratch-semantic-release-config": "4.0.1",
|
|
42
|
-
"semantic-release": "
|
|
43
|
-
"source-map-loader": "
|
|
42
|
+
"semantic-release": "25.0.3",
|
|
43
|
+
"source-map-loader": "5.0.0",
|
|
44
44
|
"ts-loader": "9.5.4",
|
|
45
|
-
"typescript": "5.
|
|
46
|
-
"webpack": "5.
|
|
47
|
-
"webpack-cli": "
|
|
45
|
+
"typescript": "5.9.3",
|
|
46
|
+
"webpack": "5.105.4",
|
|
47
|
+
"webpack-cli": "6.0.1",
|
|
48
48
|
"webpack-dev-server": "5.2.3"
|
|
49
49
|
},
|
|
50
50
|
"config": {
|
package/src/blocks/procedures.ts
CHANGED
|
@@ -43,6 +43,41 @@ enum ArgumentType {
|
|
|
43
43
|
BOOLEAN = 'b',
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* A drag strategy for the procedures_prototype block that delegates all drag
|
|
48
|
+
* operations to its parent (the procedures_definition block). This lets the
|
|
49
|
+
* prototype act as a non-shadow block (so its argument-reporter children can
|
|
50
|
+
* also be non-shadow and therefore clickable/draggable) while still causing
|
|
51
|
+
* the entire definition to move when the prototype area is dragged.
|
|
52
|
+
*/
|
|
53
|
+
class DelegateToParentDraggable implements Blockly.IDraggable {
|
|
54
|
+
constructor(private block: Blockly.BlockSvg) {}
|
|
55
|
+
|
|
56
|
+
isMovable(): boolean {
|
|
57
|
+
return this.block.getParent()?.isMovable() ?? false
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
startDrag(e: PointerEvent) {
|
|
61
|
+
this.block.getParent()?.startDrag(e)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
drag(newLoc: Blockly.utils.Coordinate, e?: PointerEvent) {
|
|
65
|
+
this.block.getParent()?.drag(newLoc, e)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
endDrag(e: PointerEvent) {
|
|
69
|
+
this.block.getParent()?.endDrag(e)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
revertDrag() {
|
|
73
|
+
this.block.getParent()?.revertDrag()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
getRelativeToSurfaceXY() {
|
|
77
|
+
return (this.block.getParent() ?? this.block).getRelativeToSurfaceXY()
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
46
81
|
/**
|
|
47
82
|
* Class representing a draggable block that copies itself on drag.
|
|
48
83
|
*/
|
|
@@ -76,6 +111,8 @@ class DuplicateOnDragDraggable implements Blockly.IDraggable {
|
|
|
76
111
|
return
|
|
77
112
|
}
|
|
78
113
|
this.copy = Blockly.clipboard.paste(data, this.block.workspace) as Blockly.BlockSvg
|
|
114
|
+
this.copy.setDeletable(true)
|
|
115
|
+
this.copy.setDragStrategy(new Blockly.dragging.BlockDragStrategy(this.copy))
|
|
79
116
|
this.copy.startDrag(e)
|
|
80
117
|
}
|
|
81
118
|
|
|
@@ -200,7 +237,7 @@ function updateDisplay_(this: ProcedureBlock) {
|
|
|
200
237
|
const connectionMap = this.disconnectOldBlocks_()
|
|
201
238
|
this.removeAllInputs_()
|
|
202
239
|
this.createAllInputs_(connectionMap)
|
|
203
|
-
this.
|
|
240
|
+
this.disposeObsoleteBlocks_(connectionMap)
|
|
204
241
|
}
|
|
205
242
|
|
|
206
243
|
/**
|
|
@@ -284,23 +321,27 @@ function createAllInputs_(this: ProcedureBlock, connectionMap: ConnectionMap) {
|
|
|
284
321
|
}
|
|
285
322
|
|
|
286
323
|
/**
|
|
287
|
-
*
|
|
324
|
+
* Dispose of blocks that were disconnected from the block (and not reconnected) during mutation.
|
|
325
|
+
* This includes:
|
|
326
|
+
* - shadow blocks for default argument values (on call blocks)
|
|
327
|
+
* - shadow argument editor blocks (on declaration blocks in the procedure editor)
|
|
328
|
+
* - non-shadow argument reporter blocks (on the prototype)
|
|
288
329
|
* @param connectionMap An object mapping argument IDs to the blocks that were
|
|
289
330
|
* connected to those IDs at the beginning of the mutation.
|
|
290
331
|
*/
|
|
291
|
-
function
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
332
|
+
function disposeObsoleteBlocks_(this: ProcedureBlock, connectionMap: ConnectionMap) {
|
|
333
|
+
for (const id in connectionMap) {
|
|
334
|
+
const saveInfo = connectionMap[id]
|
|
335
|
+
if (saveInfo) {
|
|
336
|
+
const block = saveInfo.block
|
|
337
|
+
const isOrphanedArgumentReporter =
|
|
338
|
+
this.type === 'procedures_prototype' &&
|
|
339
|
+
(block.type === 'argument_reporter_string_number' || block.type === 'argument_reporter_boolean')
|
|
340
|
+
if (block.isShadow() || isOrphanedArgumentReporter) {
|
|
341
|
+
block.dispose()
|
|
342
|
+
connectionMap[id] = null
|
|
343
|
+
// At this point we know which shadow DOMs are about to be orphaned in
|
|
344
|
+
// the VM. What do we do with that information?
|
|
304
345
|
}
|
|
305
346
|
}
|
|
306
347
|
}
|
|
@@ -409,7 +450,7 @@ function createArgumentReporter_(
|
|
|
409
450
|
let newBlock
|
|
410
451
|
try {
|
|
411
452
|
newBlock = this.workspace.newBlock(blockType)
|
|
412
|
-
newBlock.
|
|
453
|
+
newBlock.setDeletable(false)
|
|
413
454
|
newBlock.setFieldValue(displayName, 'VALUE')
|
|
414
455
|
if (!this.isInsertionMarker()) {
|
|
415
456
|
newBlock.initSvg()
|
|
@@ -780,12 +821,13 @@ function updateArgumentReporterNames_(
|
|
|
780
821
|
if (!definitionBlock) return
|
|
781
822
|
|
|
782
823
|
// Create a list of argument reporters that are descendants of the definition stack (see above comment)
|
|
783
|
-
|
|
824
|
+
// Exclude arg reporters in the prototype block itself (they're owned by the prototype, not the user).
|
|
825
|
+
const protoDescendants = new Set(this.getDescendants(false))
|
|
826
|
+
definitionBlock.getDescendants(false).forEach((block) => {
|
|
784
827
|
if (
|
|
785
828
|
(block.type === 'argument_reporter_string_number' || block.type === 'argument_reporter_boolean') &&
|
|
786
|
-
!
|
|
829
|
+
!protoDescendants.has(block)
|
|
787
830
|
) {
|
|
788
|
-
// Exclude arg reporters in the prototype block, which are shadows.
|
|
789
831
|
argReporters.push(block)
|
|
790
832
|
}
|
|
791
833
|
})
|
|
@@ -800,7 +842,7 @@ function updateArgumentReporterNames_(
|
|
|
800
842
|
if (prevName !== this.displayNames_[i]) {
|
|
801
843
|
nameChanges.push({
|
|
802
844
|
newName: this.displayNames_[i],
|
|
803
|
-
blocks: argReporters.filter(block => block.getFieldValue('VALUE') === prevName),
|
|
845
|
+
blocks: argReporters.filter((block) => block.getFieldValue('VALUE') === prevName),
|
|
804
846
|
})
|
|
805
847
|
}
|
|
806
848
|
}
|
|
@@ -848,7 +890,7 @@ Blockly.Blocks.procedures_call = {
|
|
|
848
890
|
this.getProcCode = getProcCode.bind(this)
|
|
849
891
|
this.removeAllInputs_ = removeAllInputs_.bind(this)
|
|
850
892
|
this.disconnectOldBlocks_ = disconnectOldBlocks_.bind(this)
|
|
851
|
-
this.
|
|
893
|
+
this.disposeObsoleteBlocks_ = disposeObsoleteBlocks_.bind(this)
|
|
852
894
|
this.createAllInputs_ = createAllInputs_.bind(this)
|
|
853
895
|
this.updateDisplay_ = updateDisplay_.bind(this)
|
|
854
896
|
|
|
@@ -874,6 +916,13 @@ Blockly.Blocks.procedures_prototype = {
|
|
|
874
916
|
extensions: ['colours_more', 'shape_statement'],
|
|
875
917
|
})
|
|
876
918
|
|
|
919
|
+
// Previously this block was a shadow, which is non-deletable and
|
|
920
|
+
// non-movable by default. Now that it's a regular block, explicitly
|
|
921
|
+
// replicate those properties and add a drag strategy that delegates all
|
|
922
|
+
// drag operations to the parent (procedures_definition) block.
|
|
923
|
+
this.setDeletable(false)
|
|
924
|
+
this.setDragStrategy(new DelegateToParentDraggable(this))
|
|
925
|
+
|
|
877
926
|
/* Data known about the procedure. */
|
|
878
927
|
this.procCode_ = ''
|
|
879
928
|
this.displayNames_ = []
|
|
@@ -885,7 +934,7 @@ Blockly.Blocks.procedures_prototype = {
|
|
|
885
934
|
this.getProcCode = getProcCode.bind(this)
|
|
886
935
|
this.removeAllInputs_ = removeAllInputs_.bind(this)
|
|
887
936
|
this.disconnectOldBlocks_ = disconnectOldBlocks_.bind(this)
|
|
888
|
-
this.
|
|
937
|
+
this.disposeObsoleteBlocks_ = disposeObsoleteBlocks_.bind(this)
|
|
889
938
|
this.createAllInputs_ = createAllInputs_.bind(this)
|
|
890
939
|
this.updateDisplay_ = updateDisplay_.bind(this)
|
|
891
940
|
// Exist on all three blocks, but have different implementations.
|
|
@@ -919,7 +968,7 @@ Blockly.Blocks.procedures_declaration = {
|
|
|
919
968
|
this.getProcCode = getProcCode.bind(this)
|
|
920
969
|
this.removeAllInputs_ = removeAllInputs_.bind(this)
|
|
921
970
|
this.disconnectOldBlocks_ = disconnectOldBlocks_.bind(this)
|
|
922
|
-
this.
|
|
971
|
+
this.disposeObsoleteBlocks_ = disposeObsoleteBlocks_.bind(this)
|
|
923
972
|
this.createAllInputs_ = createAllInputs_.bind(this)
|
|
924
973
|
this.updateDisplay_ = updateDisplay_.bind(this)
|
|
925
974
|
|
|
@@ -942,6 +991,17 @@ Blockly.Blocks.procedures_declaration = {
|
|
|
942
991
|
this.addStringNumberExternal = addStringNumberExternal.bind(this)
|
|
943
992
|
this.onChangeFn = updateDeclarationProcCode_.bind(this)
|
|
944
993
|
},
|
|
994
|
+
// The procedures_declaration block lives in the ephemeral Custom Procedures
|
|
995
|
+
// dialog workspace, which is disposed (and unregistered from FocusManager)
|
|
996
|
+
// when the dialog closes. If FocusManager tracks this block as the focused
|
|
997
|
+
// node while the WidgetDiv is open, the `returnEphemeralFocus` callback
|
|
998
|
+
// schedules a setTimeout that tries to re-focus it after the dialog workspace
|
|
999
|
+
// has been disposed — throwing "Attempted to focus unregistered node". Making
|
|
1000
|
+
// this block non-focusable prevents FocusManager from ever storing it as the
|
|
1001
|
+
// focused node, so the setTimeout is never scheduled.
|
|
1002
|
+
canBeFocused: function () {
|
|
1003
|
+
return false
|
|
1004
|
+
},
|
|
945
1005
|
}
|
|
946
1006
|
|
|
947
1007
|
Blockly.Blocks.argument_reporter_boolean = {
|
|
@@ -1023,7 +1083,7 @@ interface ProcedureBlock extends Blockly.BlockSvg {
|
|
|
1023
1083
|
getProcCode: () => string
|
|
1024
1084
|
removeAllInputs_: () => void
|
|
1025
1085
|
disconnectOldBlocks_: () => ConnectionMap
|
|
1026
|
-
|
|
1086
|
+
disposeObsoleteBlocks_: (connectionMap: ConnectionMap) => void
|
|
1027
1087
|
createAllInputs_: (connectionMap: ConnectionMap) => void
|
|
1028
1088
|
updateDisplay_: () => void
|
|
1029
1089
|
populateArgument_: (
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright 2024 Google LLC
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import * as Blockly from 'blockly/core'
|
|
6
5
|
import { ContinuousFlyout } from '@blockly/continuous-toolbox'
|
|
6
|
+
import * as Blockly from 'blockly/core'
|
|
7
7
|
import { CheckboxBubble } from './checkbox_bubble'
|
|
8
8
|
import { StatusIndicatorLabel } from './status_indicator_label'
|
|
9
9
|
import { STATUS_INDICATOR_LABEL_TYPE } from './status_indicator_label_flyout_inflater'
|
|
@@ -38,7 +38,7 @@ function getDeletableBlocksInStack(block: Blockly.BlockSvg): Blockly.BlockSvg[]
|
|
|
38
38
|
if (block.getNextBlock()) {
|
|
39
39
|
// Next blocks are not deleted.
|
|
40
40
|
const nextDescendants = block.getNextBlock()!.getDescendants(false).filter(isDeletable)
|
|
41
|
-
descendants = descendants.filter(b => !nextDescendants.includes(b))
|
|
41
|
+
descendants = descendants.filter((b) => !nextDescendants.includes(b))
|
|
42
42
|
}
|
|
43
43
|
return descendants
|
|
44
44
|
}
|
package/src/data_category.ts
CHANGED
|
@@ -36,7 +36,7 @@ export function getVariablesCategory(workspace: Blockly.WorkspaceSvg): Element[]
|
|
|
36
36
|
|
|
37
37
|
addCreateButton(xmlList, workspace, 'VARIABLE')
|
|
38
38
|
|
|
39
|
-
scalarVariables.forEach(variable => addDataVariable(xmlList, variable))
|
|
39
|
+
scalarVariables.forEach((variable) => addDataVariable(xmlList, variable))
|
|
40
40
|
|
|
41
41
|
if (scalarVariables.length > 0) {
|
|
42
42
|
xmlList[xmlList.length - 1].setAttribute('gap', '24')
|
|
@@ -52,7 +52,7 @@ export function getVariablesCategory(workspace: Blockly.WorkspaceSvg): Element[]
|
|
|
52
52
|
addCreateButton(xmlList, workspace, 'LIST')
|
|
53
53
|
const listVariables = workspace.getVariablesOfType(LIST_VARIABLE_TYPE)
|
|
54
54
|
listVariables.sort(Blockly.Variables.compareByName)
|
|
55
|
-
listVariables.forEach(variable => addDataList(xmlList, variable))
|
|
55
|
+
listVariables.forEach((variable) => addDataList(xmlList, variable))
|
|
56
56
|
|
|
57
57
|
if (listVariables.length > 0) {
|
|
58
58
|
xmlList[xmlList.length - 1].setAttribute('gap', '24')
|
|
@@ -387,7 +387,7 @@ function addCreateButton(xmlList: Element[], workspace: Blockly.WorkspaceSvg, ty
|
|
|
387
387
|
}
|
|
388
388
|
button.setAttribute('text', msg)
|
|
389
389
|
button.setAttribute('callbackKey', callbackKey)
|
|
390
|
-
workspace.registerButtonCallback(callbackKey, b => {
|
|
390
|
+
workspace.registerButtonCallback(callbackKey, (b) => {
|
|
391
391
|
// Run the callback after a delay to avoid it getting captured by the React
|
|
392
392
|
// modal in scratch-gui and being registered as a click on the scrim that
|
|
393
393
|
// dismisses the dialog.
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
* @file Colour input field.
|
|
21
21
|
* @author fraser@google.com (Neil Fraser)
|
|
22
22
|
*/
|
|
23
|
-
import * as Blockly from 'blockly/core'
|
|
24
23
|
import { FieldColour, FieldColourFromJsonConfig } from '@blockly/field-colour'
|
|
24
|
+
import * as Blockly from 'blockly/core'
|
|
25
25
|
|
|
26
26
|
enum ColourChannel {
|
|
27
27
|
HUE = 'hue',
|
package/src/fields/field_note.ts
CHANGED
|
@@ -255,10 +255,10 @@ export class FieldNote extends Blockly.FieldTextInput {
|
|
|
255
255
|
*/
|
|
256
256
|
dispose() {
|
|
257
257
|
super.dispose()
|
|
258
|
-
this.mouseDownWrappers_.forEach(wrapper => {
|
|
258
|
+
this.mouseDownWrappers_.forEach((wrapper) => {
|
|
259
259
|
Blockly.browserEvents.unbind(wrapper)
|
|
260
260
|
})
|
|
261
|
-
this.mouseEnterWrappers_.forEach(wrapper => {
|
|
261
|
+
this.mouseEnterWrappers_.forEach((wrapper) => {
|
|
262
262
|
Blockly.browserEvents.unbind(wrapper)
|
|
263
263
|
})
|
|
264
264
|
if (this.mouseUpWrapper_) {
|
|
@@ -722,7 +722,7 @@ export class FieldNote extends Blockly.FieldTextInput {
|
|
|
722
722
|
const index = this.noteNumToKeyIndex_(noteNum)
|
|
723
723
|
|
|
724
724
|
// Clear the highlight on all keys
|
|
725
|
-
this.keySVGs_.forEach(svg => {
|
|
725
|
+
this.keySVGs_.forEach((svg) => {
|
|
726
726
|
const isBlack = svg.getAttribute('data-isBlack')
|
|
727
727
|
if (isBlack === 'true') {
|
|
728
728
|
svg.setAttribute('fill', FieldNote.BLACK_KEY_COLOR)
|
|
@@ -92,7 +92,7 @@ export class ScratchFieldVariable extends Blockly.FieldVariable {
|
|
|
92
92
|
if (type === Constants.BROADCAST_MESSAGE_VARIABLE_TYPE) {
|
|
93
93
|
options.splice(-2, 2, [ScratchMsgs.translate('NEW_BROADCAST_MESSAGE'), Constants.NEW_BROADCAST_MESSAGE_ID])
|
|
94
94
|
} else if (type === Constants.LIST_VARIABLE_TYPE) {
|
|
95
|
-
options = options.map(option => {
|
|
95
|
+
options = options.map((option) => {
|
|
96
96
|
if (option[1] === Blockly.RENAME_VARIABLE_ID) {
|
|
97
97
|
return [ScratchMsgs.translate('RENAME_LIST'), option[1]]
|
|
98
98
|
} else if (option[1] === Blockly.DELETE_VARIABLE_ID) {
|
|
@@ -120,7 +120,7 @@ export class ScratchFieldVariable extends Blockly.FieldVariable {
|
|
|
120
120
|
if (selectedItem === Constants.NEW_BROADCAST_MESSAGE_ID) {
|
|
121
121
|
createVariable(
|
|
122
122
|
sourceBlock.workspace as Blockly.WorkspaceSvg,
|
|
123
|
-
varId => {
|
|
123
|
+
(varId) => {
|
|
124
124
|
if (varId) {
|
|
125
125
|
this.setValue(varId)
|
|
126
126
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright 2023 Google LLC
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import * as Blockly from 'blockly/core'
|
|
6
5
|
import { registerContinuousToolbox, ContinuousMetrics } from '@blockly/continuous-toolbox'
|
|
6
|
+
import * as Blockly from 'blockly/core'
|
|
7
7
|
import './blocks/colour'
|
|
8
8
|
import './blocks/control'
|
|
9
9
|
import './blocks/data'
|
package/src/procedures.ts
CHANGED
|
@@ -32,8 +32,8 @@ import * as Constants from './constants'
|
|
|
32
32
|
function allProcedureMutations(root: Blockly.WorkspaceSvg): Element[] {
|
|
33
33
|
const blocks = root.getAllBlocks()
|
|
34
34
|
return blocks
|
|
35
|
-
.filter(b => b.type === Constants.PROCEDURES_PROTOTYPE_BLOCK_TYPE)
|
|
36
|
-
.map(b => b.mutationToDom!(/* opt_generateShadows */ true))
|
|
35
|
+
.filter((b) => b.type === Constants.PROCEDURES_PROTOTYPE_BLOCK_TYPE)
|
|
36
|
+
.map((b) => b.mutationToDom!(/* opt_generateShadows */ true))
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -118,7 +118,7 @@ export function getCallers(
|
|
|
118
118
|
definitionRoot: Blockly.BlockSvg,
|
|
119
119
|
allowRecursive: boolean,
|
|
120
120
|
): Blockly.BlockSvg[] {
|
|
121
|
-
return workspace.getTopBlocks().flatMap(block => {
|
|
121
|
+
return workspace.getTopBlocks().flatMap((block) => {
|
|
122
122
|
if (block.id === definitionRoot.id && !allowRecursive) {
|
|
123
123
|
return []
|
|
124
124
|
}
|
|
@@ -126,7 +126,7 @@ export function getCallers(
|
|
|
126
126
|
return block
|
|
127
127
|
.getDescendants(false)
|
|
128
128
|
.filter(
|
|
129
|
-
descendant =>
|
|
129
|
+
(descendant) =>
|
|
130
130
|
isProcedureBlock(descendant) &&
|
|
131
131
|
descendant.type === Constants.PROCEDURES_CALL_BLOCK_TYPE &&
|
|
132
132
|
descendant.getProcCode() === name,
|
|
@@ -151,7 +151,7 @@ function mutateCallersAndPrototype(name: string, workspace: Blockly.WorkspaceSvg
|
|
|
151
151
|
const callers = getCallers(name, defineBlock.workspace, defineBlock, true /* allowRecursive */)
|
|
152
152
|
callers.push(prototypeBlock)
|
|
153
153
|
Blockly.Events.setGroup(true)
|
|
154
|
-
callers.forEach(caller => {
|
|
154
|
+
callers.forEach((caller) => {
|
|
155
155
|
const oldMutationDom = caller.mutationToDom!()
|
|
156
156
|
const oldMutation = oldMutationDom && Blockly.Xml.domToText(oldMutationDom)
|
|
157
157
|
caller.domToMutation!(mutation)
|
|
@@ -174,7 +174,7 @@ function mutateCallersAndPrototype(name: string, workspace: Blockly.WorkspaceSvg
|
|
|
174
174
|
*/
|
|
175
175
|
function getDefineBlock(procCode: string, workspace: Blockly.WorkspaceSvg): Blockly.BlockSvg | undefined {
|
|
176
176
|
// Assume that a procedure definition is a top block.
|
|
177
|
-
return workspace.getTopBlocks(false).find(block => {
|
|
177
|
+
return workspace.getTopBlocks(false).find((block) => {
|
|
178
178
|
if (block.type === Constants.PROCEDURES_DEFINITION_BLOCK_TYPE) {
|
|
179
179
|
const prototypeBlock = block.getInput('custom_block')!.connection!.targetBlock() as Blockly.BlockSvg
|
|
180
180
|
return isProcedureBlock(prototypeBlock) && prototypeBlock.getProcCode() === procCode
|
|
@@ -237,9 +237,9 @@ function createProcedureCallbackFactory(workspace: Blockly.WorkspaceSvg): (mutat
|
|
|
237
237
|
<xml>
|
|
238
238
|
<block type="procedures_definition">
|
|
239
239
|
<statement name="custom_block">
|
|
240
|
-
<
|
|
240
|
+
<block type="procedures_prototype">
|
|
241
241
|
${Blockly.Xml.domToText(mutation)}
|
|
242
|
-
</
|
|
242
|
+
</block>
|
|
243
243
|
</statement>
|
|
244
244
|
</block>
|
|
245
245
|
</xml>`
|
|
@@ -285,7 +285,7 @@ function editProcedureCallback(block: Blockly.BlockSvg) {
|
|
|
285
285
|
return
|
|
286
286
|
}
|
|
287
287
|
const innerBlock = conn.targetBlock()
|
|
288
|
-
if (
|
|
288
|
+
if (innerBlock?.type !== Constants.PROCEDURES_PROTOTYPE_BLOCK_TYPE) {
|
|
289
289
|
alert('Bad inner block') // TODO: Decide what to do about this.
|
|
290
290
|
return
|
|
291
291
|
}
|