scratch-blocks 2.0.2 → 2.0.3
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/commitlint.config.js +2 -2
- package/dist/main.mjs +1 -2
- package/dist/types/msg/scratch_msgs.d.ts.map +1 -1
- package/dist/types/src/block_reporting.d.ts.map +1 -1
- package/dist/types/src/blocks/colour.d.ts +0 -19
- package/dist/types/src/blocks/colour.d.ts.map +1 -1
- package/dist/types/src/blocks/control.d.ts +0 -19
- package/dist/types/src/blocks/control.d.ts.map +1 -1
- package/dist/types/src/blocks/data.d.ts +0 -19
- package/dist/types/src/blocks/data.d.ts.map +1 -1
- package/dist/types/src/blocks/event.d.ts +0 -19
- package/dist/types/src/blocks/event.d.ts.map +1 -1
- package/dist/types/src/blocks/looks.d.ts +0 -19
- package/dist/types/src/blocks/looks.d.ts.map +1 -1
- package/dist/types/src/blocks/math.d.ts +0 -19
- package/dist/types/src/blocks/math.d.ts.map +1 -1
- package/dist/types/src/blocks/matrix.d.ts +0 -19
- package/dist/types/src/blocks/matrix.d.ts.map +1 -1
- package/dist/types/src/blocks/motion.d.ts +0 -19
- package/dist/types/src/blocks/motion.d.ts.map +1 -1
- package/dist/types/src/blocks/note.d.ts +0 -19
- package/dist/types/src/blocks/note.d.ts.map +1 -1
- package/dist/types/src/blocks/operators.d.ts +0 -19
- package/dist/types/src/blocks/operators.d.ts.map +1 -1
- package/dist/types/src/blocks/procedures.d.ts +6 -9
- package/dist/types/src/blocks/procedures.d.ts.map +1 -1
- package/dist/types/src/blocks/sensing.d.ts +0 -19
- package/dist/types/src/blocks/sensing.d.ts.map +1 -1
- package/dist/types/src/blocks/sound.d.ts +0 -19
- package/dist/types/src/blocks/sound.d.ts.map +1 -1
- package/dist/types/src/blocks/text.d.ts +0 -19
- package/dist/types/src/blocks/text.d.ts.map +1 -1
- package/dist/types/src/blocks/vertical_extensions.d.ts +0 -19
- package/dist/types/src/blocks/vertical_extensions.d.ts.map +1 -1
- package/dist/types/src/checkable_continuous_flyout.d.ts +2 -7
- package/dist/types/src/checkable_continuous_flyout.d.ts.map +1 -1
- package/dist/types/src/checkbox_bubble.d.ts +13 -12
- package/dist/types/src/checkbox_bubble.d.ts.map +1 -1
- package/dist/types/src/colours.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +0 -7
- package/dist/types/src/constants.d.ts.map +1 -1
- package/dist/types/src/context_menu_items.d.ts +0 -5
- package/dist/types/src/context_menu_items.d.ts.map +1 -1
- package/dist/types/src/data_category.d.ts +2 -4
- package/dist/types/src/data_category.d.ts.map +1 -1
- package/dist/types/src/events/events_block_comment_base.d.ts +2 -3
- package/dist/types/src/events/events_block_comment_base.d.ts.map +1 -1
- package/dist/types/src/events/events_block_comment_change.d.ts +0 -5
- package/dist/types/src/events/events_block_comment_change.d.ts.map +1 -1
- package/dist/types/src/events/events_block_comment_collapse.d.ts +0 -5
- package/dist/types/src/events/events_block_comment_collapse.d.ts.map +1 -1
- package/dist/types/src/events/events_block_comment_create.d.ts +0 -5
- package/dist/types/src/events/events_block_comment_create.d.ts.map +1 -1
- package/dist/types/src/events/events_block_comment_delete.d.ts +0 -5
- package/dist/types/src/events/events_block_comment_delete.d.ts.map +1 -1
- package/dist/types/src/events/events_block_comment_move.d.ts +0 -5
- package/dist/types/src/events/events_block_comment_move.d.ts.map +1 -1
- package/dist/types/src/events/events_block_comment_resize.d.ts +0 -5
- package/dist/types/src/events/events_block_comment_resize.d.ts.map +1 -1
- package/dist/types/src/events/events_block_drag_end.d.ts +1 -2
- package/dist/types/src/events/events_block_drag_end.d.ts.map +1 -1
- package/dist/types/src/events/events_block_drag_outside.d.ts +1 -2
- package/dist/types/src/events/events_block_drag_outside.d.ts.map +1 -1
- package/dist/types/src/events/events_scratch_variable_create.d.ts +0 -5
- package/dist/types/src/events/events_scratch_variable_create.d.ts.map +1 -1
- package/dist/types/src/fields/field_colour_slider.d.ts +3 -27
- package/dist/types/src/fields/field_colour_slider.d.ts.map +1 -1
- package/dist/types/src/fields/field_matrix.d.ts +0 -19
- package/dist/types/src/fields/field_matrix.d.ts.map +1 -1
- package/dist/types/src/fields/field_note.d.ts +8 -23
- package/dist/types/src/fields/field_note.d.ts.map +1 -1
- package/dist/types/src/fields/field_textinput_removable.d.ts +2 -4
- package/dist/types/src/fields/field_textinput_removable.d.ts.map +1 -1
- package/dist/types/src/fields/field_variable_getter.d.ts +0 -19
- package/dist/types/src/fields/field_variable_getter.d.ts.map +1 -1
- package/dist/types/src/fields/field_vertical_separator.d.ts +0 -19
- package/dist/types/src/fields/field_vertical_separator.d.ts.map +1 -1
- package/dist/types/src/fields/scratch_field_angle.d.ts +0 -19
- package/dist/types/src/fields/scratch_field_angle.d.ts.map +1 -1
- package/dist/types/src/fields/scratch_field_dropdown.d.ts +0 -5
- package/dist/types/src/fields/scratch_field_dropdown.d.ts.map +1 -1
- package/dist/types/src/fields/scratch_field_number.d.ts +0 -19
- package/dist/types/src/fields/scratch_field_number.d.ts.map +1 -1
- package/dist/types/src/fields/scratch_field_variable.d.ts +4 -7
- package/dist/types/src/fields/scratch_field_variable.d.ts.map +1 -1
- package/dist/types/src/flyout_checkbox_icon.d.ts +2 -3
- package/dist/types/src/flyout_checkbox_icon.d.ts.map +1 -1
- package/dist/types/src/glows.d.ts +1 -3
- package/dist/types/src/glows.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +50 -51
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/procedures.d.ts +6 -8
- package/dist/types/src/procedures.d.ts.map +1 -1
- package/dist/types/src/recyclable_block_flyout_inflater.d.ts +3 -5
- package/dist/types/src/recyclable_block_flyout_inflater.d.ts.map +1 -1
- package/dist/types/src/renderer/bowler_hat.d.ts +2 -3
- package/dist/types/src/renderer/bowler_hat.d.ts.map +1 -1
- package/dist/types/src/renderer/cat/cat_face.d.ts +6 -5
- package/dist/types/src/renderer/cat/cat_face.d.ts.map +1 -1
- package/dist/types/src/renderer/cat/constants.d.ts +2 -2
- package/dist/types/src/renderer/cat/constants.d.ts.map +1 -1
- package/dist/types/src/renderer/cat/drawer.d.ts +3 -4
- package/dist/types/src/renderer/cat/drawer.d.ts.map +1 -1
- package/dist/types/src/renderer/cat/path_object.d.ts +2 -3
- package/dist/types/src/renderer/cat/path_object.d.ts.map +1 -1
- package/dist/types/src/renderer/cat/render_info.d.ts +3 -4
- package/dist/types/src/renderer/cat/render_info.d.ts.map +1 -1
- package/dist/types/src/renderer/cat/renderer.d.ts +6 -7
- package/dist/types/src/renderer/cat/renderer.d.ts.map +1 -1
- package/dist/types/src/renderer/constants.d.ts +4 -4
- package/dist/types/src/renderer/constants.d.ts.map +1 -1
- package/dist/types/src/renderer/drawer.d.ts +5 -4
- package/dist/types/src/renderer/drawer.d.ts.map +1 -1
- package/dist/types/src/renderer/path_object.d.ts +1 -3
- package/dist/types/src/renderer/path_object.d.ts.map +1 -1
- package/dist/types/src/renderer/render_info.d.ts +3 -4
- package/dist/types/src/renderer/render_info.d.ts.map +1 -1
- package/dist/types/src/renderer/renderer.d.ts +8 -15
- package/dist/types/src/renderer/renderer.d.ts.map +1 -1
- package/dist/types/src/scratch_block_paster.d.ts +0 -5
- package/dist/types/src/scratch_block_paster.d.ts.map +1 -1
- package/dist/types/src/scratch_blocks_utils.d.ts +0 -20
- package/dist/types/src/scratch_blocks_utils.d.ts.map +1 -1
- package/dist/types/src/scratch_comment_bubble.d.ts +1 -4
- package/dist/types/src/scratch_comment_bubble.d.ts.map +1 -1
- package/dist/types/src/scratch_comment_icon.d.ts +2 -3
- package/dist/types/src/scratch_comment_icon.d.ts.map +1 -1
- package/dist/types/src/scratch_connection_checker.d.ts +0 -5
- package/dist/types/src/scratch_connection_checker.d.ts.map +1 -1
- package/dist/types/src/scratch_continuous_category.d.ts +5 -5
- package/dist/types/src/scratch_continuous_category.d.ts.map +1 -1
- package/dist/types/src/scratch_continuous_toolbox.d.ts +3 -6
- package/dist/types/src/scratch_continuous_toolbox.d.ts.map +1 -1
- package/dist/types/src/scratch_dragger.d.ts +1 -10
- package/dist/types/src/scratch_dragger.d.ts.map +1 -1
- package/dist/types/src/scratch_insertion_marker_previewer.d.ts +0 -5
- package/dist/types/src/scratch_insertion_marker_previewer.d.ts.map +1 -1
- package/dist/types/src/scratch_variable_map.d.ts +0 -5
- package/dist/types/src/scratch_variable_map.d.ts.map +1 -1
- package/dist/types/src/scratch_variable_model.d.ts +1 -2
- package/dist/types/src/scratch_variable_model.d.ts.map +1 -1
- package/dist/types/src/scratch_zoom_controls.d.ts +4 -6
- package/dist/types/src/scratch_zoom_controls.d.ts.map +1 -1
- package/dist/types/src/shadows.d.ts +2 -2
- package/dist/types/src/shadows.d.ts.map +1 -1
- package/dist/types/src/status_indicator_label.d.ts +4 -6
- package/dist/types/src/status_indicator_label.d.ts.map +1 -1
- package/dist/types/src/status_indicator_label_flyout_inflater.d.ts +1 -6
- package/dist/types/src/status_indicator_label_flyout_inflater.d.ts.map +1 -1
- package/dist/types/src/variables.d.ts +4 -8
- package/dist/types/src/variables.d.ts.map +1 -1
- package/dist/types/src/xml.d.ts +2 -3
- package/dist/types/src/xml.d.ts.map +1 -1
- package/dist/types/tests/jsunit/block_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/connection_db_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/connection_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/event_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/extensions_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/field_number_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/field_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/field_variable_getter_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/field_variable_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/gesture_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/input_test.d.ts +1 -0
- package/dist/types/tests/jsunit/input_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/json_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/names_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/procedure_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/scratch_block_comment_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/svg_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/test_utilities.d.ts.map +1 -1
- package/dist/types/tests/jsunit/utils_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/variable_map_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/variable_model_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/widget_div_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/workspace_comment_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/workspace_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/workspace_undo_redo_test.d.ts.map +1 -1
- package/dist/types/tests/jsunit/xml_test.d.ts.map +1 -1
- package/dist/types/tests/workspace_svg/workspace_svg_test.d.ts.map +1 -1
- package/eslint.config.mjs +69 -0
- package/i18n/create_scratch_msgs.js +44 -45
- package/i18n/js_to_json.js +40 -32
- package/i18n/json_to_js.js +37 -37
- package/i18n/sync_tx_translations.js +64 -65
- package/i18n/test_scratch_msgs.js +66 -63
- package/msg/js/en.js +289 -287
- package/msg/json/en.json +284 -284
- package/msg/messages.js +289 -287
- package/msg/scratch_msgs.js +22959 -22970
- package/package.json +6 -3
- package/prettier.config.mjs +3 -0
- package/release.config.js +7 -7
- package/renovate.json5 +7 -9
- package/src/block_reporting.ts +15 -18
- package/src/blocks/colour.ts +12 -15
- package/src/blocks/control.ts +167 -177
- package/src/blocks/data.ts +225 -292
- package/src/blocks/event.ts +121 -123
- package/src/blocks/looks.ts +165 -167
- package/src/blocks/math.ts +44 -46
- package/src/blocks/matrix.ts +11 -13
- package/src/blocks/motion.ts +151 -153
- package/src/blocks/note.ts +11 -13
- package/src/blocks/operators.ts +158 -160
- package/src/blocks/procedures.ts +415 -523
- package/src/blocks/sensing.ts +163 -165
- package/src/blocks/sound.ts +58 -60
- package/src/blocks/text.ts +10 -12
- package/src/blocks/vertical_extensions.ts +86 -102
- package/src/checkable_continuous_flyout.ts +25 -42
- package/src/checkbox_bubble.ts +83 -100
- package/src/colours.ts +35 -37
- package/src/constants.ts +22 -29
- package/src/context_menu_items.ts +56 -81
- package/src/css.ts +3 -4
- package/src/data_category.ts +137 -251
- package/src/events/events_block_comment_base.ts +21 -31
- package/src/events/events_block_comment_change.ts +21 -42
- package/src/events/events_block_comment_collapse.ts +22 -43
- package/src/events/events_block_comment_create.ts +29 -46
- package/src/events/events_block_comment_delete.ts +10 -19
- package/src/events/events_block_comment_move.ts +27 -52
- package/src/events/events_block_comment_resize.ts +28 -55
- package/src/events/events_block_drag_end.ts +16 -26
- package/src/events/events_block_drag_outside.ts +12 -22
- package/src/events/events_scratch_variable_create.ts +33 -56
- package/src/fields/field_colour_slider.ts +173 -228
- package/src/fields/field_matrix.ts +200 -269
- package/src/fields/field_note.ts +272 -377
- package/src/fields/field_textinput_removable.ts +25 -40
- package/src/fields/field_variable_getter.ts +26 -31
- package/src/fields/field_vertical_separator.ts +19 -24
- package/src/fields/scratch_field_angle.ts +150 -186
- package/src/fields/scratch_field_dropdown.ts +15 -19
- package/src/fields/scratch_field_number.ts +123 -180
- package/src/fields/scratch_field_variable.ts +54 -75
- package/src/flyout_checkbox_icon.ts +18 -28
- package/src/glows.ts +51 -58
- package/src/index.ts +119 -133
- package/src/procedures.ts +146 -213
- package/src/recyclable_block_flyout_inflater.ts +14 -25
- package/src/renderer/bowler_hat.ts +6 -8
- package/src/renderer/cat/cat_face.ts +98 -99
- package/src/renderer/cat/constants.ts +67 -87
- package/src/renderer/cat/drawer.ts +21 -27
- package/src/renderer/cat/path_object.ts +3 -5
- package/src/renderer/cat/render_info.ts +5 -8
- package/src/renderer/cat/renderer.ts +11 -15
- package/src/renderer/constants.ts +34 -49
- package/src/renderer/drawer.ts +35 -51
- package/src/renderer/path_object.ts +4 -10
- package/src/renderer/render_info.ts +36 -56
- package/src/renderer/renderer.ts +16 -29
- package/src/scratch_block_paster.ts +12 -20
- package/src/scratch_blocks_utils.ts +4 -7
- package/src/scratch_comment_bubble.ts +70 -101
- package/src/scratch_comment_icon.ts +74 -123
- package/src/scratch_connection_checker.ts +7 -17
- package/src/scratch_continuous_category.ts +24 -28
- package/src/scratch_continuous_toolbox.ts +20 -27
- package/src/scratch_dragger.ts +42 -81
- package/src/scratch_insertion_marker_previewer.ts +6 -11
- package/src/scratch_variable_map.ts +5 -12
- package/src/scratch_variable_model.ts +4 -11
- package/src/scratch_zoom_controls.ts +101 -156
- package/src/shadows.ts +32 -37
- package/src/status_indicator_label.ts +54 -67
- package/src/status_indicator_label_flyout_inflater.ts +11 -21
- package/src/variables.ts +89 -138
- package/src/xml.ts +21 -35
- package/tsconfig.json +2 -6
- package/types/continuous-toolbox.d.ts +1 -1
- package/dist/main.mjs.LICENSE.txt +0 -163
package/src/data_category.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
2
|
* Visual Blocks Editor
|
|
4
3
|
*
|
|
5
4
|
* Copyright 2017 Google Inc.
|
|
@@ -17,100 +16,87 @@
|
|
|
17
16
|
* See the License for the specific language governing permissions and
|
|
18
17
|
* limitations under the License.
|
|
19
18
|
*/
|
|
20
|
-
|
|
21
19
|
/**
|
|
22
|
-
* @
|
|
20
|
+
* @file Data Flyout components including variable and list blocks.
|
|
23
21
|
* @author marisaleung@google.com (Marisa Leung)
|
|
24
22
|
*/
|
|
25
|
-
|
|
26
|
-
import
|
|
27
|
-
import { createVariable } from
|
|
28
|
-
import { LIST_VARIABLE_TYPE, SCALAR_VARIABLE_TYPE } from "./constants";
|
|
23
|
+
import * as Blockly from 'blockly/core'
|
|
24
|
+
import { LIST_VARIABLE_TYPE, SCALAR_VARIABLE_TYPE } from './constants'
|
|
25
|
+
import { createVariable } from './variables'
|
|
29
26
|
|
|
30
27
|
/**
|
|
31
28
|
* Construct the blocks required by the flyout for the variable category.
|
|
32
|
-
*
|
|
33
29
|
* @param workspace The workspace containing variables.
|
|
34
30
|
* @returns Array of XML block elements.
|
|
35
31
|
*/
|
|
36
|
-
export function getVariablesCategory(
|
|
37
|
-
workspace
|
|
38
|
-
)
|
|
39
|
-
const
|
|
40
|
-
scalarVariables.sort(Blockly.Variables.compareByName);
|
|
41
|
-
const xmlList: Element[] = [];
|
|
32
|
+
export function getVariablesCategory(workspace: Blockly.WorkspaceSvg): Element[] {
|
|
33
|
+
const scalarVariables = workspace.getVariablesOfType(SCALAR_VARIABLE_TYPE)
|
|
34
|
+
scalarVariables.sort(Blockly.Variables.compareByName)
|
|
35
|
+
const xmlList: Element[] = []
|
|
42
36
|
|
|
43
|
-
addCreateButton(xmlList, workspace,
|
|
37
|
+
addCreateButton(xmlList, workspace, 'VARIABLE')
|
|
44
38
|
|
|
45
|
-
scalarVariables.forEach(
|
|
39
|
+
scalarVariables.forEach(variable => addDataVariable(xmlList, variable))
|
|
46
40
|
|
|
47
41
|
if (scalarVariables.length > 0) {
|
|
48
|
-
xmlList[xmlList.length - 1].setAttribute(
|
|
49
|
-
const firstVariable = scalarVariables[0]
|
|
42
|
+
xmlList[xmlList.length - 1].setAttribute('gap', '24')
|
|
43
|
+
const firstVariable = scalarVariables[0]
|
|
50
44
|
|
|
51
|
-
addSetVariableTo(xmlList, firstVariable)
|
|
52
|
-
addChangeVariableBy(xmlList, firstVariable)
|
|
53
|
-
addShowVariable(xmlList, firstVariable)
|
|
54
|
-
addHideVariable(xmlList, firstVariable)
|
|
45
|
+
addSetVariableTo(xmlList, firstVariable)
|
|
46
|
+
addChangeVariableBy(xmlList, firstVariable)
|
|
47
|
+
addShowVariable(xmlList, firstVariable)
|
|
48
|
+
addHideVariable(xmlList, firstVariable)
|
|
55
49
|
}
|
|
56
50
|
|
|
57
51
|
// Now add list variables to the flyout
|
|
58
|
-
addCreateButton(xmlList, workspace,
|
|
59
|
-
const listVariables = workspace.getVariablesOfType(LIST_VARIABLE_TYPE)
|
|
60
|
-
listVariables.sort(Blockly.Variables.compareByName)
|
|
61
|
-
listVariables.forEach(
|
|
52
|
+
addCreateButton(xmlList, workspace, 'LIST')
|
|
53
|
+
const listVariables = workspace.getVariablesOfType(LIST_VARIABLE_TYPE)
|
|
54
|
+
listVariables.sort(Blockly.Variables.compareByName)
|
|
55
|
+
listVariables.forEach(variable => addDataList(xmlList, variable))
|
|
62
56
|
|
|
63
57
|
if (listVariables.length > 0) {
|
|
64
|
-
xmlList[xmlList.length - 1].setAttribute(
|
|
65
|
-
const firstVariable = listVariables[0]
|
|
66
|
-
|
|
67
|
-
addAddToList(xmlList, firstVariable)
|
|
68
|
-
addSep(xmlList)
|
|
69
|
-
addDeleteOfList(xmlList, firstVariable)
|
|
70
|
-
addDeleteAllOfList(xmlList, firstVariable)
|
|
71
|
-
addInsertAtList(xmlList, firstVariable)
|
|
72
|
-
addReplaceItemOfList(xmlList, firstVariable)
|
|
73
|
-
addSep(xmlList)
|
|
74
|
-
addItemOfList(xmlList, firstVariable)
|
|
75
|
-
addItemNumberOfList(xmlList, firstVariable)
|
|
76
|
-
addLengthOfList(xmlList, firstVariable)
|
|
77
|
-
addListContainsItem(xmlList, firstVariable)
|
|
78
|
-
addSep(xmlList)
|
|
79
|
-
addShowList(xmlList, firstVariable)
|
|
80
|
-
addHideList(xmlList, firstVariable)
|
|
58
|
+
xmlList[xmlList.length - 1].setAttribute('gap', '24')
|
|
59
|
+
const firstVariable = listVariables[0]
|
|
60
|
+
|
|
61
|
+
addAddToList(xmlList, firstVariable)
|
|
62
|
+
addSep(xmlList)
|
|
63
|
+
addDeleteOfList(xmlList, firstVariable)
|
|
64
|
+
addDeleteAllOfList(xmlList, firstVariable)
|
|
65
|
+
addInsertAtList(xmlList, firstVariable)
|
|
66
|
+
addReplaceItemOfList(xmlList, firstVariable)
|
|
67
|
+
addSep(xmlList)
|
|
68
|
+
addItemOfList(xmlList, firstVariable)
|
|
69
|
+
addItemNumberOfList(xmlList, firstVariable)
|
|
70
|
+
addLengthOfList(xmlList, firstVariable)
|
|
71
|
+
addListContainsItem(xmlList, firstVariable)
|
|
72
|
+
addSep(xmlList)
|
|
73
|
+
addShowList(xmlList, firstVariable)
|
|
74
|
+
addHideList(xmlList, firstVariable)
|
|
81
75
|
}
|
|
82
76
|
|
|
83
|
-
return xmlList
|
|
77
|
+
return xmlList
|
|
84
78
|
}
|
|
85
79
|
|
|
86
80
|
/**
|
|
87
81
|
* Construct and add a data_variable block to xmlList.
|
|
88
|
-
*
|
|
89
82
|
* @param xmlList Array of XML block elements.
|
|
90
83
|
* @param variable Variable to select in the field.
|
|
91
84
|
*/
|
|
92
|
-
function addDataVariable(
|
|
93
|
-
xmlList: Element[],
|
|
94
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
95
|
-
) {
|
|
85
|
+
function addDataVariable(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
96
86
|
// <block id="variableId" type="data_variable">
|
|
97
87
|
// <field name="VARIABLE">variablename</field>
|
|
98
88
|
// </block>
|
|
99
|
-
addBlock(xmlList, variable,
|
|
89
|
+
addBlock(xmlList, variable, 'data_variable', 'VARIABLE')
|
|
100
90
|
// In the flyout, this ID must match variable ID for monitor syncing reasons
|
|
101
|
-
xmlList[xmlList.length - 1].setAttribute(
|
|
91
|
+
xmlList[xmlList.length - 1].setAttribute('id', variable.getId())
|
|
102
92
|
}
|
|
103
93
|
|
|
104
94
|
/**
|
|
105
95
|
* Construct and add a data_setvariableto block to xmlList.
|
|
106
|
-
*
|
|
107
96
|
* @param xmlList Array of XML block elements.
|
|
108
97
|
* @param variable Variable to select in the field.
|
|
109
98
|
*/
|
|
110
|
-
function addSetVariableTo(
|
|
111
|
-
xmlList: Element[],
|
|
112
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
113
|
-
) {
|
|
99
|
+
function addSetVariableTo(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
114
100
|
// <block type="data_setvariableto" gap="20">
|
|
115
101
|
// <value name="VARIABLE">
|
|
116
102
|
// <shadow type="data_variablemenu"></shadow>
|
|
@@ -121,23 +107,15 @@ function addSetVariableTo(
|
|
|
121
107
|
// </shadow>
|
|
122
108
|
// </value>
|
|
123
109
|
// </block>
|
|
124
|
-
addBlock(xmlList, variable,
|
|
125
|
-
"VALUE",
|
|
126
|
-
"text",
|
|
127
|
-
"0",
|
|
128
|
-
]);
|
|
110
|
+
addBlock(xmlList, variable, 'data_setvariableto', 'VARIABLE', ['VALUE', 'text', '0'])
|
|
129
111
|
}
|
|
130
112
|
|
|
131
113
|
/**
|
|
132
114
|
* Construct and add a data_changevariableby block to xmlList.
|
|
133
|
-
*
|
|
134
115
|
* @param xmlList Array of XML block elements.
|
|
135
116
|
* @param variable Variable to select in the field.
|
|
136
117
|
*/
|
|
137
|
-
function addChangeVariableBy(
|
|
138
|
-
xmlList: Element[],
|
|
139
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
140
|
-
) {
|
|
118
|
+
function addChangeVariableBy(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
141
119
|
// <block type="data_changevariableby">
|
|
142
120
|
// <value name="VARIABLE">
|
|
143
121
|
// <shadow type="data_variablemenu"></shadow>
|
|
@@ -148,77 +126,57 @@ function addChangeVariableBy(
|
|
|
148
126
|
// </shadow>
|
|
149
127
|
// </value>
|
|
150
128
|
// </block>
|
|
151
|
-
addBlock(xmlList, variable,
|
|
152
|
-
"VALUE",
|
|
153
|
-
"math_number",
|
|
154
|
-
"1",
|
|
155
|
-
]);
|
|
129
|
+
addBlock(xmlList, variable, 'data_changevariableby', 'VARIABLE', ['VALUE', 'math_number', '1'])
|
|
156
130
|
}
|
|
157
131
|
|
|
158
132
|
/**
|
|
159
133
|
* Construct and add a data_showVariable block to xmlList.
|
|
160
|
-
*
|
|
161
134
|
* @param xmlList Array of XML block elements.
|
|
162
135
|
* @param variable Variable to select in the field.
|
|
163
136
|
*/
|
|
164
|
-
function addShowVariable(
|
|
165
|
-
xmlList: Element[],
|
|
166
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
167
|
-
) {
|
|
137
|
+
function addShowVariable(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
168
138
|
// <block type="data_showvariable">
|
|
169
139
|
// <value name="VARIABLE">
|
|
170
140
|
// <shadow type="data_variablemenu"></shadow>
|
|
171
141
|
// </value>
|
|
172
142
|
// </block>
|
|
173
|
-
addBlock(xmlList, variable,
|
|
143
|
+
addBlock(xmlList, variable, 'data_showvariable', 'VARIABLE')
|
|
174
144
|
}
|
|
175
145
|
|
|
176
146
|
/**
|
|
177
147
|
* Construct and add a data_hideVariable block to xmlList.
|
|
178
|
-
*
|
|
179
148
|
* @param xmlList Array of XML block elements.
|
|
180
149
|
* @param variable Variable to select in the field.
|
|
181
150
|
*/
|
|
182
|
-
function addHideVariable(
|
|
183
|
-
xmlList: Element[],
|
|
184
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
185
|
-
) {
|
|
151
|
+
function addHideVariable(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
186
152
|
// <block type="data_hidevariable">
|
|
187
153
|
// <value name="VARIABLE">
|
|
188
154
|
// <shadow type="data_variablemenu"></shadow>
|
|
189
155
|
// </value>
|
|
190
156
|
// </block>
|
|
191
|
-
addBlock(xmlList, variable,
|
|
157
|
+
addBlock(xmlList, variable, 'data_hidevariable', 'VARIABLE')
|
|
192
158
|
}
|
|
193
159
|
|
|
194
160
|
/**
|
|
195
161
|
* Construct and add a data_listcontents block to xmlList.
|
|
196
|
-
*
|
|
197
162
|
* @param xmlList Array of XML block elements.
|
|
198
163
|
* @param variable Variable to select in the field.
|
|
199
164
|
*/
|
|
200
|
-
function addDataList(
|
|
201
|
-
xmlList: Element[],
|
|
202
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
203
|
-
) {
|
|
165
|
+
function addDataList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
204
166
|
// <block id="variableId" type="data_listcontents">
|
|
205
167
|
// <field name="LIST">variablename</field>
|
|
206
168
|
// </block>
|
|
207
|
-
addBlock(xmlList, variable,
|
|
169
|
+
addBlock(xmlList, variable, 'data_listcontents', 'LIST')
|
|
208
170
|
// In the flyout, this ID must match variable ID for monitor syncing reasons
|
|
209
|
-
xmlList[xmlList.length - 1].setAttribute(
|
|
171
|
+
xmlList[xmlList.length - 1].setAttribute('id', variable.getId())
|
|
210
172
|
}
|
|
211
173
|
|
|
212
174
|
/**
|
|
213
175
|
* Construct and add a data_addtolist block to xmlList.
|
|
214
|
-
*
|
|
215
176
|
* @param xmlList Array of XML block elements.
|
|
216
177
|
* @param variable Variable to select in the field.
|
|
217
178
|
*/
|
|
218
|
-
function addAddToList(
|
|
219
|
-
xmlList: Element[],
|
|
220
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
221
|
-
) {
|
|
179
|
+
function addAddToList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
222
180
|
// <block type="data_addtolist">
|
|
223
181
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
224
182
|
// <value name="ITEM">
|
|
@@ -227,23 +185,15 @@ function addAddToList(
|
|
|
227
185
|
// </shadow>
|
|
228
186
|
// </value>
|
|
229
187
|
// </block>
|
|
230
|
-
addBlock(xmlList, variable,
|
|
231
|
-
"ITEM",
|
|
232
|
-
"text",
|
|
233
|
-
Blockly.Msg.DEFAULT_LIST_ITEM,
|
|
234
|
-
]);
|
|
188
|
+
addBlock(xmlList, variable, 'data_addtolist', 'LIST', ['ITEM', 'text', Blockly.Msg.DEFAULT_LIST_ITEM])
|
|
235
189
|
}
|
|
236
190
|
|
|
237
191
|
/**
|
|
238
192
|
* Construct and add a data_deleteoflist block to xmlList.
|
|
239
|
-
*
|
|
240
193
|
* @param xmlList Array of XML block elements.
|
|
241
194
|
* @param variable Variable to select in the field.
|
|
242
195
|
*/
|
|
243
|
-
function addDeleteOfList(
|
|
244
|
-
xmlList: Element[],
|
|
245
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
246
|
-
) {
|
|
196
|
+
function addDeleteOfList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
247
197
|
// <block type="data_deleteoflist">
|
|
248
198
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
249
199
|
// <value name="INDEX">
|
|
@@ -252,39 +202,27 @@ function addDeleteOfList(
|
|
|
252
202
|
// </shadow>
|
|
253
203
|
// </value>
|
|
254
204
|
// </block>
|
|
255
|
-
addBlock(xmlList, variable,
|
|
256
|
-
"INDEX",
|
|
257
|
-
"math_integer",
|
|
258
|
-
"1",
|
|
259
|
-
]);
|
|
205
|
+
addBlock(xmlList, variable, 'data_deleteoflist', 'LIST', ['INDEX', 'math_integer', '1'])
|
|
260
206
|
}
|
|
261
207
|
|
|
262
208
|
/**
|
|
263
209
|
* Construct and add a data_deleteoflist block to xmlList.
|
|
264
|
-
*
|
|
265
210
|
* @param xmlList Array of XML block elements.
|
|
266
211
|
* @param variable Variable to select in the field.
|
|
267
212
|
*/
|
|
268
|
-
function addDeleteAllOfList(
|
|
269
|
-
xmlList: Element[],
|
|
270
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
271
|
-
) {
|
|
213
|
+
function addDeleteAllOfList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
272
214
|
// <block type="data_deletealloflist">
|
|
273
215
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
274
216
|
// </block>
|
|
275
|
-
addBlock(xmlList, variable,
|
|
217
|
+
addBlock(xmlList, variable, 'data_deletealloflist', 'LIST')
|
|
276
218
|
}
|
|
277
219
|
|
|
278
220
|
/**
|
|
279
221
|
* Construct and add a data_insertatlist block to xmlList.
|
|
280
|
-
*
|
|
281
222
|
* @param xmlList Array of XML block elements.
|
|
282
223
|
* @param variable Variable to select in the field.
|
|
283
224
|
*/
|
|
284
|
-
function addInsertAtList(
|
|
285
|
-
xmlList: Element[],
|
|
286
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
287
|
-
) {
|
|
225
|
+
function addInsertAtList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
288
226
|
// <block type="data_insertatlist">
|
|
289
227
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
290
228
|
// <value name="INDEX">
|
|
@@ -301,23 +239,19 @@ function addInsertAtList(
|
|
|
301
239
|
addBlock(
|
|
302
240
|
xmlList,
|
|
303
241
|
variable,
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
[
|
|
307
|
-
[
|
|
308
|
-
)
|
|
242
|
+
'data_insertatlist',
|
|
243
|
+
'LIST',
|
|
244
|
+
['INDEX', 'math_integer', '1'],
|
|
245
|
+
['ITEM', 'text', Blockly.Msg.DEFAULT_LIST_ITEM],
|
|
246
|
+
)
|
|
309
247
|
}
|
|
310
248
|
|
|
311
249
|
/**
|
|
312
250
|
* Construct and add a data_replaceitemoflist block to xmlList.
|
|
313
|
-
*
|
|
314
251
|
* @param xmlList Array of XML block elements.
|
|
315
252
|
* @param variable Variable to select in the field.
|
|
316
253
|
*/
|
|
317
|
-
function addReplaceItemOfList(
|
|
318
|
-
xmlList: Element[],
|
|
319
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
320
|
-
) {
|
|
254
|
+
function addReplaceItemOfList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
321
255
|
// <block type="data_replaceitemoflist">
|
|
322
256
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
323
257
|
// <value name="INDEX">
|
|
@@ -334,23 +268,19 @@ function addReplaceItemOfList(
|
|
|
334
268
|
addBlock(
|
|
335
269
|
xmlList,
|
|
336
270
|
variable,
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
[
|
|
340
|
-
[
|
|
341
|
-
)
|
|
271
|
+
'data_replaceitemoflist',
|
|
272
|
+
'LIST',
|
|
273
|
+
['INDEX', 'math_integer', '1'],
|
|
274
|
+
['ITEM', 'text', Blockly.Msg.DEFAULT_LIST_ITEM],
|
|
275
|
+
)
|
|
342
276
|
}
|
|
343
277
|
|
|
344
278
|
/**
|
|
345
279
|
* Construct and add a data_itemoflist block to xmlList.
|
|
346
|
-
*
|
|
347
280
|
* @param xmlList Array of XML block elements.
|
|
348
281
|
* @param variable Variable to select in the field.
|
|
349
282
|
*/
|
|
350
|
-
function addItemOfList(
|
|
351
|
-
xmlList: Element[],
|
|
352
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
353
|
-
) {
|
|
283
|
+
function addItemOfList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
354
284
|
// <block type="data_itemoflist">
|
|
355
285
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
356
286
|
// <value name="INDEX">
|
|
@@ -359,22 +289,15 @@ function addItemOfList(
|
|
|
359
289
|
// </shadow>
|
|
360
290
|
// </value>
|
|
361
291
|
// </block>
|
|
362
|
-
addBlock(xmlList, variable,
|
|
363
|
-
"INDEX",
|
|
364
|
-
"math_integer",
|
|
365
|
-
"1",
|
|
366
|
-
]);
|
|
292
|
+
addBlock(xmlList, variable, 'data_itemoflist', 'LIST', ['INDEX', 'math_integer', '1'])
|
|
367
293
|
}
|
|
368
294
|
|
|
369
|
-
/**
|
|
370
|
-
*
|
|
295
|
+
/**
|
|
296
|
+
* Construct and add a data_itemnumoflist block to xmlList.
|
|
371
297
|
* @param xmlList Array of XML block elements.
|
|
372
298
|
* @param variable Variable to select in the field.
|
|
373
299
|
*/
|
|
374
|
-
function addItemNumberOfList(
|
|
375
|
-
xmlList: Element[],
|
|
376
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
377
|
-
) {
|
|
300
|
+
function addItemNumberOfList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
378
301
|
// <block type="data_itemnumoflist">
|
|
379
302
|
// <value name="ITEM">
|
|
380
303
|
// <shadow type="text">
|
|
@@ -383,39 +306,27 @@ function addItemNumberOfList(
|
|
|
383
306
|
// </value>
|
|
384
307
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
385
308
|
// </block>
|
|
386
|
-
addBlock(xmlList, variable,
|
|
387
|
-
"ITEM",
|
|
388
|
-
"text",
|
|
389
|
-
Blockly.Msg.DEFAULT_LIST_ITEM,
|
|
390
|
-
]);
|
|
309
|
+
addBlock(xmlList, variable, 'data_itemnumoflist', 'LIST', ['ITEM', 'text', Blockly.Msg.DEFAULT_LIST_ITEM])
|
|
391
310
|
}
|
|
392
311
|
|
|
393
312
|
/**
|
|
394
313
|
* Construct and add a data_lengthoflist block to xmlList.
|
|
395
|
-
*
|
|
396
314
|
* @param xmlList Array of XML block elements.
|
|
397
315
|
* @param variable Variable to select in the field.
|
|
398
316
|
*/
|
|
399
|
-
function addLengthOfList(
|
|
400
|
-
xmlList: Element[],
|
|
401
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
402
|
-
) {
|
|
317
|
+
function addLengthOfList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
403
318
|
// <block type="data_lengthoflist">
|
|
404
319
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
405
320
|
// </block>
|
|
406
|
-
addBlock(xmlList, variable,
|
|
321
|
+
addBlock(xmlList, variable, 'data_lengthoflist', 'LIST')
|
|
407
322
|
}
|
|
408
323
|
|
|
409
324
|
/**
|
|
410
325
|
* Construct and add a data_listcontainsitem block to xmlList.
|
|
411
|
-
*
|
|
412
326
|
* @param xmlList Array of XML block elements.
|
|
413
327
|
* @param variable Variable to select in the field.
|
|
414
328
|
*/
|
|
415
|
-
function addListContainsItem(
|
|
416
|
-
xmlList: Element[],
|
|
417
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
418
|
-
) {
|
|
329
|
+
function addListContainsItem(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
419
330
|
// <block type="data_listcontainsitem">
|
|
420
331
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
421
332
|
// <value name="ITEM">
|
|
@@ -424,92 +335,74 @@ function addListContainsItem(
|
|
|
424
335
|
// </shadow>
|
|
425
336
|
// </value>
|
|
426
337
|
// </block>
|
|
427
|
-
addBlock(xmlList, variable,
|
|
428
|
-
"ITEM",
|
|
429
|
-
"text",
|
|
430
|
-
Blockly.Msg.DEFAULT_LIST_ITEM,
|
|
431
|
-
]);
|
|
338
|
+
addBlock(xmlList, variable, 'data_listcontainsitem', 'LIST', ['ITEM', 'text', Blockly.Msg.DEFAULT_LIST_ITEM])
|
|
432
339
|
}
|
|
433
340
|
|
|
434
341
|
/**
|
|
435
342
|
* Construct and add a data_showlist block to xmlList.
|
|
436
|
-
*
|
|
437
343
|
* @param xmlList Array of XML block elements.
|
|
438
344
|
* @param variable Variable to select in the field.
|
|
439
345
|
*/
|
|
440
|
-
function addShowList(
|
|
441
|
-
xmlList: Element[],
|
|
442
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
443
|
-
) {
|
|
346
|
+
function addShowList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
444
347
|
// <block type="data_showlist">
|
|
445
348
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
446
349
|
// </block>
|
|
447
|
-
addBlock(xmlList, variable,
|
|
350
|
+
addBlock(xmlList, variable, 'data_showlist', 'LIST')
|
|
448
351
|
}
|
|
449
352
|
|
|
450
353
|
/**
|
|
451
354
|
* Construct and add a data_hidelist block to xmlList.
|
|
452
|
-
*
|
|
453
355
|
* @param xmlList Array of XML block elements.
|
|
454
356
|
* @param variable Variable to select in the field.
|
|
455
357
|
*/
|
|
456
|
-
function addHideList(
|
|
457
|
-
xmlList: Element[],
|
|
458
|
-
variable: Blockly.IVariableModel<Blockly.IVariableState>
|
|
459
|
-
) {
|
|
358
|
+
function addHideList(xmlList: Element[], variable: Blockly.IVariableModel<Blockly.IVariableState>) {
|
|
460
359
|
// <block type="data_hidelist">
|
|
461
360
|
// <field name="LIST" variabletype="list" id="">variablename</field>
|
|
462
361
|
// </block>
|
|
463
|
-
addBlock(xmlList, variable,
|
|
362
|
+
addBlock(xmlList, variable, 'data_hidelist', 'LIST')
|
|
464
363
|
}
|
|
465
364
|
|
|
466
365
|
/**
|
|
467
366
|
* Construct a create variable button and push it to the xmlList.
|
|
468
|
-
*
|
|
469
367
|
* @param xmlList Array of XML block elements.
|
|
470
368
|
* @param workspace Workspace to register callback to.
|
|
471
369
|
* @param type Type of variable this is for. For example, 'LIST' or
|
|
472
370
|
* 'VARIABLE'.
|
|
473
371
|
*/
|
|
474
|
-
function addCreateButton(
|
|
475
|
-
|
|
476
|
-
workspace: Blockly.WorkspaceSvg,
|
|
477
|
-
type: string
|
|
478
|
-
) {
|
|
479
|
-
const button = document.createElement("button");
|
|
372
|
+
function addCreateButton(xmlList: Element[], workspace: Blockly.WorkspaceSvg, type: string) {
|
|
373
|
+
const button = document.createElement('button')
|
|
480
374
|
// Set default msg, callbackKey, and callback values for type 'VARIABLE'
|
|
481
|
-
let msg = Blockly.Msg.NEW_VARIABLE
|
|
482
|
-
let callbackKey =
|
|
375
|
+
let msg = Blockly.Msg.NEW_VARIABLE
|
|
376
|
+
let callbackKey = 'CREATE_VARIABLE'
|
|
483
377
|
let callback = function (button: Blockly.FlyoutButton) {
|
|
484
|
-
createVariable(button.getTargetWorkspace(), undefined, SCALAR_VARIABLE_TYPE)
|
|
485
|
-
}
|
|
378
|
+
createVariable(button.getTargetWorkspace(), undefined, SCALAR_VARIABLE_TYPE)
|
|
379
|
+
}
|
|
486
380
|
|
|
487
|
-
if (type ===
|
|
488
|
-
msg = Blockly.Msg.NEW_LIST
|
|
489
|
-
callbackKey =
|
|
381
|
+
if (type === 'LIST') {
|
|
382
|
+
msg = Blockly.Msg.NEW_LIST
|
|
383
|
+
callbackKey = 'CREATE_LIST'
|
|
490
384
|
callback = function (button: Blockly.FlyoutButton) {
|
|
491
|
-
createVariable(button.getTargetWorkspace(), undefined, LIST_VARIABLE_TYPE)
|
|
492
|
-
}
|
|
385
|
+
createVariable(button.getTargetWorkspace(), undefined, LIST_VARIABLE_TYPE)
|
|
386
|
+
}
|
|
493
387
|
}
|
|
494
|
-
button.setAttribute(
|
|
495
|
-
button.setAttribute(
|
|
496
|
-
workspace.registerButtonCallback(callbackKey,
|
|
388
|
+
button.setAttribute('text', msg)
|
|
389
|
+
button.setAttribute('callbackKey', callbackKey)
|
|
390
|
+
workspace.registerButtonCallback(callbackKey, b => {
|
|
497
391
|
// Run the callback after a delay to avoid it getting captured by the React
|
|
498
392
|
// modal in scratch-gui and being registered as a click on the scrim that
|
|
499
393
|
// dismisses the dialog.
|
|
500
394
|
requestAnimationFrame(() => {
|
|
501
395
|
setTimeout(() => {
|
|
502
|
-
callback(b)
|
|
503
|
-
})
|
|
504
|
-
})
|
|
505
|
-
})
|
|
506
|
-
xmlList.push(button)
|
|
396
|
+
callback(b)
|
|
397
|
+
})
|
|
398
|
+
})
|
|
399
|
+
})
|
|
400
|
+
xmlList.push(button)
|
|
507
401
|
}
|
|
508
402
|
|
|
509
403
|
/**
|
|
510
404
|
* Construct a variable block with the given variable, blockType, and optional
|
|
511
405
|
* value tags. Add the variable block to the given xmlList.
|
|
512
|
-
*
|
|
513
406
|
* @param xmlList Array of XML block elements.
|
|
514
407
|
* @param variable Variable to select in the field.
|
|
515
408
|
* @param blockType Type of block. For example, 'data_hidelist' or
|
|
@@ -526,97 +419,90 @@ function addBlock(
|
|
|
526
419
|
blockType: string,
|
|
527
420
|
fieldName: string,
|
|
528
421
|
opt_value?: string[],
|
|
529
|
-
opt_secondValue?: string[]
|
|
422
|
+
opt_secondValue?: string[],
|
|
530
423
|
) {
|
|
531
424
|
if (Blockly.Blocks[blockType]) {
|
|
532
|
-
let firstValueField
|
|
533
|
-
let secondValueField
|
|
425
|
+
let firstValueField
|
|
426
|
+
let secondValueField
|
|
534
427
|
if (opt_value) {
|
|
535
|
-
firstValueField = createValue(opt_value[0], opt_value[1], opt_value[2])
|
|
428
|
+
firstValueField = createValue(opt_value[0], opt_value[1], opt_value[2])
|
|
536
429
|
}
|
|
537
430
|
if (opt_secondValue) {
|
|
538
|
-
secondValueField = createValue(
|
|
539
|
-
opt_secondValue[0],
|
|
540
|
-
opt_secondValue[1],
|
|
541
|
-
opt_secondValue[2]
|
|
542
|
-
);
|
|
431
|
+
secondValueField = createValue(opt_secondValue[0], opt_secondValue[1], opt_secondValue[2])
|
|
543
432
|
}
|
|
544
433
|
|
|
545
|
-
|
|
546
|
-
|
|
434
|
+
const gap = 8
|
|
435
|
+
const blockText = `
|
|
547
436
|
<xml>
|
|
548
437
|
<block type="${blockType}" gap="${gap}">
|
|
549
438
|
${generateVariableFieldXml(variable, fieldName)}
|
|
550
439
|
${firstValueField}
|
|
551
440
|
${secondValueField}
|
|
552
441
|
</block>
|
|
553
|
-
</xml
|
|
554
|
-
|
|
555
|
-
xmlList.push(block)
|
|
442
|
+
</xml>`
|
|
443
|
+
const block = Blockly.utils.xml.textToDom(blockText).firstElementChild!
|
|
444
|
+
xmlList.push(block)
|
|
556
445
|
}
|
|
557
446
|
}
|
|
558
447
|
|
|
559
448
|
/**
|
|
560
449
|
* Creates XML representing a variable field.
|
|
561
|
-
*
|
|
562
450
|
* @param variableModel The variable to represent in the field.
|
|
563
451
|
* @param opt_name A custom name for the field, if desired.
|
|
564
452
|
* @returns XML representation of a variable field.
|
|
565
453
|
*/
|
|
566
454
|
function generateVariableFieldXml(
|
|
567
455
|
variableModel: Blockly.IVariableModel<Blockly.IVariableState>,
|
|
568
|
-
opt_name?: string
|
|
456
|
+
opt_name?: string,
|
|
569
457
|
): string {
|
|
570
|
-
const field = document.createElement(
|
|
571
|
-
field.setAttribute(
|
|
572
|
-
field.setAttribute(
|
|
573
|
-
field.setAttribute(
|
|
574
|
-
field.textContent = variableModel.getName()
|
|
575
|
-
return field.outerHTML
|
|
458
|
+
const field = document.createElement('field')
|
|
459
|
+
field.setAttribute('name', opt_name || 'VARIABLE')
|
|
460
|
+
field.setAttribute('id', variableModel.getId())
|
|
461
|
+
field.setAttribute('variabletype', variableModel.getType())
|
|
462
|
+
field.textContent = variableModel.getName()
|
|
463
|
+
return field.outerHTML
|
|
576
464
|
}
|
|
577
465
|
|
|
578
466
|
/**
|
|
579
467
|
* Create the text representation of a value dom element with a shadow of the
|
|
580
468
|
* indicated type inside.
|
|
581
|
-
*
|
|
582
469
|
* @param valueName Name of the value tags.
|
|
583
470
|
* @param type The type of the shadow tags.
|
|
584
471
|
* @param value The default shadow value.
|
|
585
472
|
* @returns The generated dom element in text.
|
|
586
473
|
*/
|
|
587
474
|
function createValue(valueName: string, type: string, value: string): string {
|
|
588
|
-
let fieldName
|
|
475
|
+
let fieldName
|
|
589
476
|
switch (valueName) {
|
|
590
|
-
case
|
|
591
|
-
fieldName =
|
|
592
|
-
break
|
|
593
|
-
case
|
|
594
|
-
fieldName =
|
|
595
|
-
break
|
|
596
|
-
case
|
|
597
|
-
if (type ===
|
|
598
|
-
fieldName =
|
|
477
|
+
case 'ITEM':
|
|
478
|
+
fieldName = 'TEXT'
|
|
479
|
+
break
|
|
480
|
+
case 'INDEX':
|
|
481
|
+
fieldName = 'NUM'
|
|
482
|
+
break
|
|
483
|
+
case 'VALUE':
|
|
484
|
+
if (type === 'math_number') {
|
|
485
|
+
fieldName = 'NUM'
|
|
599
486
|
} else {
|
|
600
|
-
fieldName =
|
|
487
|
+
fieldName = 'TEXT'
|
|
601
488
|
}
|
|
602
|
-
break
|
|
489
|
+
break
|
|
603
490
|
}
|
|
604
491
|
const valueField = `
|
|
605
492
|
<value name="${valueName}">
|
|
606
493
|
<shadow type="${type}">
|
|
607
494
|
<field name="${fieldName}">${value}</field>
|
|
608
495
|
</shadow>
|
|
609
|
-
</value
|
|
610
|
-
return valueField
|
|
496
|
+
</value>`
|
|
497
|
+
return valueField
|
|
611
498
|
}
|
|
612
499
|
|
|
613
500
|
/**
|
|
614
501
|
* Construct a block separator. Add the separator to the given xmlList.
|
|
615
|
-
*
|
|
616
502
|
* @param xmlList Array of XML block elements.
|
|
617
503
|
*/
|
|
618
504
|
function addSep(xmlList: Element[]) {
|
|
619
|
-
const sepText = `<xml><sep gap="36"/></xml
|
|
620
|
-
const sep = Blockly.utils.xml.textToDom(sepText).firstElementChild
|
|
621
|
-
xmlList.push(sep)
|
|
505
|
+
const sepText = `<xml><sep gap="36"/></xml>`
|
|
506
|
+
const sep = Blockly.utils.xml.textToDom(sepText).firstElementChild!
|
|
507
|
+
xmlList.push(sep)
|
|
622
508
|
}
|