blockly 7.20211209.4 → 8.0.0
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/blockly.d.ts +18963 -18432
- package/blockly.min.js +852 -844
- package/blockly_compressed.js +669 -664
- package/blockly_compressed.js.map +1 -1
- package/blocks/blocks.js +47 -0
- package/blocks/colour.js +13 -3
- package/blocks/lists.js +22 -13
- package/blocks/logic.js +13 -3
- package/blocks/loops.js +24 -11
- package/blocks/math.js +12 -3
- package/blocks/procedures.js +41 -27
- package/blocks/text.js +22 -13
- package/blocks/variables.js +14 -3
- package/blocks/variables_dynamic.js +13 -3
- package/blocks_compressed.js +146 -141
- package/blocks_compressed.js.map +1 -1
- package/core/block.js +1869 -1814
- package/core/block_drag_surface.js +201 -200
- package/core/block_dragger.js +377 -373
- package/core/block_svg.js +1593 -1479
- package/core/blockly.js +8 -22
- package/core/blocks.js +9 -2
- package/core/browser_events.js +22 -5
- package/core/bubble.js +841 -797
- package/core/bubble_dragger.js +213 -206
- package/core/bump_objects.js +2 -2
- package/core/clipboard.js +9 -9
- package/core/comment.js +353 -332
- package/core/common.js +46 -17
- package/core/component_manager.js +181 -174
- package/core/config.js +87 -0
- package/core/connection.js +595 -584
- package/core/connection_checker.js +242 -244
- package/core/connection_db.js +235 -230
- package/core/contextmenu.js +9 -6
- package/core/contextmenu_items.js +1 -2
- package/core/contextmenu_registry.js +93 -89
- package/core/css.js +474 -474
- package/core/delete_area.js +45 -42
- package/core/drag_target.js +57 -56
- package/core/dropdowndiv.js +153 -163
- package/core/events/events.js +2 -2
- package/core/events/events_abstract.js +89 -77
- package/core/events/events_block_base.js +37 -36
- package/core/events/events_block_change.js +130 -124
- package/core/events/events_block_create.js +73 -71
- package/core/events/events_block_delete.js +84 -82
- package/core/events/events_block_drag.js +50 -49
- package/core/events/events_block_move.js +147 -140
- package/core/events/events_bubble_open.js +51 -50
- package/core/events/events_click.js +48 -44
- package/core/events/events_comment_base.js +72 -69
- package/core/events/events_comment_change.js +63 -61
- package/core/events/events_comment_create.js +44 -42
- package/core/events/events_comment_delete.js +42 -40
- package/core/events/events_comment_move.js +106 -104
- package/core/events/events_marker_move.js +65 -64
- package/core/events/events_selected.js +46 -45
- package/core/events/events_theme_change.js +36 -35
- package/core/events/events_toolbox_item_select.js +46 -45
- package/core/events/events_trashcan_open.js +37 -36
- package/core/events/events_ui.js +47 -46
- package/core/events/events_ui_base.js +30 -29
- package/core/events/events_var_base.js +37 -36
- package/core/events/events_var_create.js +50 -48
- package/core/events/events_var_delete.js +50 -48
- package/core/events/events_var_rename.js +51 -49
- package/core/events/events_viewport.js +66 -65
- package/core/events/utils.js +29 -14
- package/core/events/workspace_events.js +49 -55
- package/core/extensions.js +4 -3
- package/core/field.js +1061 -997
- package/core/field_angle.js +462 -442
- package/core/field_checkbox.js +194 -182
- package/core/field_colour.js +519 -505
- package/core/field_dropdown.js +617 -598
- package/core/field_image.js +229 -220
- package/core/field_label.js +102 -91
- package/core/field_label_serializable.js +42 -41
- package/core/field_multilineinput.js +372 -358
- package/core/field_number.js +272 -253
- package/core/field_textinput.js +499 -467
- package/core/field_variable.js +458 -420
- package/core/flyout_base.js +1005 -952
- package/core/flyout_button.js +277 -260
- package/core/flyout_horizontal.js +304 -302
- package/core/flyout_metrics_manager.js +64 -64
- package/core/flyout_vertical.js +306 -300
- package/core/generator.js +459 -446
- package/core/gesture.js +829 -813
- package/core/grid.js +166 -163
- package/core/icon.js +168 -159
- package/core/inject.js +7 -5
- package/core/input.js +257 -248
- package/core/insertion_marker_manager.js +655 -624
- package/core/internal_constants.js +0 -129
- package/core/keyboard_nav/ast_node.js +605 -596
- package/core/keyboard_nav/basic_cursor.js +166 -165
- package/core/keyboard_nav/cursor.js +99 -97
- package/core/keyboard_nav/marker.js +83 -79
- package/core/keyboard_nav/tab_navigate_cursor.js +18 -23
- package/core/marker_manager.js +153 -141
- package/core/menu.js +377 -372
- package/core/menuitem.js +223 -217
- package/core/metrics_manager.js +403 -390
- package/core/mutator.js +468 -437
- package/core/names.js +229 -188
- package/core/options.js +290 -284
- package/core/procedures.js +29 -17
- package/core/registry.js +19 -16
- package/core/rendered_connection.js +482 -463
- package/core/renderers/common/block_rendering.js +9 -3
- package/core/renderers/common/constants.js +1119 -1112
- package/core/renderers/common/debug.js +14 -0
- package/core/renderers/common/debugger.js +338 -316
- package/core/renderers/common/drawer.js +380 -370
- package/core/renderers/common/i_path_object.js +2 -2
- package/core/renderers/common/info.js +626 -618
- package/core/renderers/common/marker_svg.js +579 -541
- package/core/renderers/common/path_object.js +203 -200
- package/core/renderers/common/renderer.js +220 -218
- package/core/renderers/geras/constants.js +36 -36
- package/core/renderers/geras/drawer.js +155 -147
- package/core/renderers/geras/highlight_constants.js +244 -238
- package/core/renderers/geras/highlighter.js +231 -179
- package/core/renderers/geras/info.js +392 -369
- package/core/renderers/geras/measurables/inline_input.js +25 -19
- package/core/renderers/geras/measurables/statement_input.js +23 -17
- package/core/renderers/geras/path_object.js +106 -121
- package/core/renderers/geras/renderer.js +96 -98
- package/core/renderers/measurables/base.js +30 -18
- package/core/renderers/measurables/bottom_row.js +83 -80
- package/core/renderers/measurables/connection.js +22 -15
- package/core/renderers/measurables/external_value_input.js +35 -22
- package/core/renderers/measurables/field.js +35 -20
- package/core/renderers/measurables/hat.js +18 -13
- package/core/renderers/measurables/icon.js +24 -17
- package/core/renderers/measurables/in_row_spacer.js +15 -13
- package/core/renderers/measurables/inline_input.js +43 -33
- package/core/renderers/measurables/input_connection.js +41 -28
- package/core/renderers/measurables/input_row.js +50 -44
- package/core/renderers/measurables/jagged_edge.js +14 -12
- package/core/renderers/measurables/next_connection.js +16 -14
- package/core/renderers/measurables/output_connection.js +26 -20
- package/core/renderers/measurables/previous_connection.js +16 -15
- package/core/renderers/measurables/round_corner.js +20 -18
- package/core/renderers/measurables/row.js +184 -168
- package/core/renderers/measurables/spacer_row.js +38 -23
- package/core/renderers/measurables/square_corner.js +18 -16
- package/core/renderers/measurables/statement_input.js +23 -20
- package/core/renderers/measurables/top_row.js +88 -85
- package/core/renderers/minimalist/constants.js +8 -7
- package/core/renderers/minimalist/drawer.js +11 -10
- package/core/renderers/minimalist/info.js +18 -18
- package/core/renderers/minimalist/renderer.js +40 -39
- package/core/renderers/thrasos/info.js +258 -248
- package/core/renderers/thrasos/renderer.js +20 -20
- package/core/renderers/zelos/constants.js +898 -873
- package/core/renderers/zelos/drawer.js +186 -169
- package/core/renderers/zelos/info.js +502 -479
- package/core/renderers/zelos/marker_svg.js +129 -115
- package/core/renderers/zelos/measurables/bottom_row.js +31 -30
- package/core/renderers/zelos/measurables/inputs.js +22 -21
- package/core/renderers/zelos/measurables/row_elements.js +14 -13
- package/core/renderers/zelos/measurables/top_row.js +34 -33
- package/core/renderers/zelos/path_object.js +181 -180
- package/core/renderers/zelos/renderer.js +91 -92
- package/core/scrollbar.js +759 -713
- package/core/scrollbar_pair.js +250 -245
- package/core/serialization/blocks.js +19 -9
- package/core/serialization/workspaces.js +3 -2
- package/core/shortcut_registry.js +286 -277
- package/core/sprites.js +31 -0
- package/core/theme.js +135 -141
- package/core/theme_manager.js +147 -143
- package/core/toolbox/category.js +602 -576
- package/core/toolbox/collapsible_category.js +226 -227
- package/core/toolbox/separator.js +70 -61
- package/core/toolbox/toolbox.js +934 -927
- package/core/toolbox/toolbox_item.js +115 -99
- package/core/tooltip.js +108 -35
- package/core/touch.js +8 -3
- package/core/touch_gesture.js +254 -251
- package/core/trashcan.js +606 -595
- package/core/utils/coordinate.js +97 -95
- package/core/utils/dom.js +2 -2
- package/core/utils/global.js +2 -0
- package/core/utils/rect.js +41 -37
- package/core/utils/sentinel.js +25 -0
- package/core/utils/size.js +30 -27
- package/core/utils/svg.js +18 -16
- package/core/variable_map.js +325 -341
- package/core/variable_model.js +55 -54
- package/core/variables.js +9 -2
- package/core/variables_dynamic.js +3 -1
- package/core/warning.js +126 -120
- package/core/widgetdiv.js +4 -4
- package/core/workspace.js +685 -664
- package/core/workspace_audio.js +124 -118
- package/core/workspace_comment.js +308 -298
- package/core/workspace_comment_svg.js +1029 -951
- package/core/workspace_drag_surface_svg.js +147 -140
- package/core/workspace_dragger.js +70 -71
- package/core/workspace_svg.js +2322 -2297
- package/core/xml.js +30 -20
- package/core/zoom_controls.js +431 -439
- package/dart_compressed.js +40 -43
- package/dart_compressed.js.map +1 -1
- package/generators/dart/colour.js +56 -64
- package/generators/dart/lists.js +61 -50
- package/generators/dart/math.js +160 -148
- package/generators/dart/text.js +83 -61
- package/generators/javascript/colour.js +37 -34
- package/generators/javascript/lists.js +50 -43
- package/generators/javascript/math.js +123 -139
- package/generators/javascript/text.js +67 -81
- package/generators/lua/colour.js +25 -23
- package/generators/lua/lists.js +97 -69
- package/generators/lua/logic.js +1 -2
- package/generators/lua/math.js +182 -144
- package/generators/lua/text.js +116 -99
- package/generators/php/colour.js +38 -32
- package/generators/php/lists.js +109 -89
- package/generators/php/math.js +90 -81
- package/generators/php/text.js +63 -61
- package/generators/python/colour.js +18 -18
- package/generators/python/lists.js +38 -30
- package/generators/python/loops.js +12 -8
- package/generators/python/math.js +104 -106
- package/generators/python/text.js +34 -30
- package/javascript_compressed.js +37 -39
- package/javascript_compressed.js.map +1 -1
- package/lua_compressed.js +39 -42
- package/lua_compressed.js.map +1 -1
- package/msg/az.js +2 -2
- package/msg/be.js +4 -4
- package/msg/cs.js +15 -15
- package/msg/de.js +1 -1
- package/msg/diq.js +1 -1
- package/msg/eo.js +1 -1
- package/msg/es.js +1 -1
- package/msg/fa.js +1 -1
- package/msg/fr.js +4 -4
- package/msg/he.js +1 -1
- package/msg/hr.js +2 -2
- package/msg/hy.js +2 -2
- package/msg/id.js +12 -12
- package/msg/inh.js +14 -14
- package/msg/ja.js +7 -7
- package/msg/lv.js +29 -29
- package/msg/pa.js +3 -3
- package/msg/smn.js +436 -0
- package/msg/te.js +1 -1
- package/msg/yue.js +1 -1
- package/msg/zh-hans.js +3 -3
- package/msg/zh-hant.js +3 -3
- package/package.json +7 -6
- package/php_compressed.js +38 -42
- package/php_compressed.js.map +1 -1
- package/python_compressed.js +26 -25
- package/python_compressed.js.map +1 -1
- package/blocks/all.js +0 -23
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
goog.module('Blockly.Events.BlockMove');
|
|
17
17
|
|
|
18
18
|
const eventUtils = goog.require('Blockly.Events.utils');
|
|
19
|
-
const object = goog.require('Blockly.utils.object');
|
|
20
19
|
const registry = goog.require('Blockly.registry');
|
|
21
20
|
const {BlockBase} = goog.require('Blockly.Events.BlockBase');
|
|
22
21
|
/* eslint-disable-next-line no-unused-vars */
|
|
@@ -27,168 +26,176 @@ const {Coordinate} = goog.require('Blockly.utils.Coordinate');
|
|
|
27
26
|
|
|
28
27
|
/**
|
|
29
28
|
* Class for a block move event. Created before the move.
|
|
30
|
-
* @param {!Block=} opt_block The moved block. Undefined for a blank
|
|
31
|
-
* event.
|
|
32
29
|
* @extends {BlockBase}
|
|
33
|
-
* @constructor
|
|
34
30
|
* @alias Blockly.Events.BlockMove
|
|
35
31
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
this.recordUndo = false;
|
|
44
|
-
}
|
|
32
|
+
class BlockMove extends BlockBase {
|
|
33
|
+
/**
|
|
34
|
+
* @param {!Block=} opt_block The moved block. Undefined for a blank
|
|
35
|
+
* event.
|
|
36
|
+
*/
|
|
37
|
+
constructor(opt_block) {
|
|
38
|
+
super(opt_block);
|
|
45
39
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
object.inherits(BlockMove, BlockBase);
|
|
40
|
+
/**
|
|
41
|
+
* Type of this event.
|
|
42
|
+
* @type {string}
|
|
43
|
+
*/
|
|
44
|
+
this.type = eventUtils.BLOCK_MOVE;
|
|
52
45
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
if (!opt_block) {
|
|
47
|
+
return; // Blank event to be populated by fromJson.
|
|
48
|
+
}
|
|
49
|
+
if (opt_block.isShadow()) {
|
|
50
|
+
// Moving shadow blocks is handled via disconnection.
|
|
51
|
+
this.recordUndo = false;
|
|
52
|
+
}
|
|
58
53
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
BlockMove.prototype.toJson = function() {
|
|
64
|
-
const json = BlockMove.superClass_.toJson.call(this);
|
|
65
|
-
if (this.newParentId) {
|
|
66
|
-
json['newParentId'] = this.newParentId;
|
|
67
|
-
}
|
|
68
|
-
if (this.newInputName) {
|
|
69
|
-
json['newInputName'] = this.newInputName;
|
|
70
|
-
}
|
|
71
|
-
if (this.newCoordinate) {
|
|
72
|
-
json['newCoordinate'] = Math.round(this.newCoordinate.x) + ',' +
|
|
73
|
-
Math.round(this.newCoordinate.y);
|
|
74
|
-
}
|
|
75
|
-
if (!this.recordUndo) {
|
|
76
|
-
json['recordUndo'] = this.recordUndo;
|
|
77
|
-
}
|
|
78
|
-
return json;
|
|
79
|
-
};
|
|
54
|
+
const location = this.currentLocation_();
|
|
55
|
+
this.oldParentId = location.parentId;
|
|
56
|
+
this.oldInputName = location.inputName;
|
|
57
|
+
this.oldCoordinate = location.coordinate;
|
|
80
58
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
*/
|
|
85
|
-
BlockMove.prototype.fromJson = function(json) {
|
|
86
|
-
BlockMove.superClass_.fromJson.call(this, json);
|
|
87
|
-
this.newParentId = json['newParentId'];
|
|
88
|
-
this.newInputName = json['newInputName'];
|
|
89
|
-
if (json['newCoordinate']) {
|
|
90
|
-
const xy = json['newCoordinate'].split(',');
|
|
91
|
-
this.newCoordinate = new Coordinate(Number(xy[0]), Number(xy[1]));
|
|
59
|
+
this.newParentId = null;
|
|
60
|
+
this.newInputName = null;
|
|
61
|
+
this.newCoordinate = null;
|
|
92
62
|
}
|
|
93
|
-
if (json['recordUndo'] !== undefined) {
|
|
94
|
-
this.recordUndo = json['recordUndo'];
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
63
|
|
|
98
|
-
/**
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
*/
|
|
114
|
-
BlockMove.prototype.currentLocation_ = function() {
|
|
115
|
-
const workspace = this.getEventWorkspace_();
|
|
116
|
-
const block = workspace.getBlockById(this.blockId);
|
|
117
|
-
const location = {};
|
|
118
|
-
const parent = block.getParent();
|
|
119
|
-
if (parent) {
|
|
120
|
-
location.parentId = parent.id;
|
|
121
|
-
const input = parent.getInputWithBlock(block);
|
|
122
|
-
if (input) {
|
|
123
|
-
location.inputName = input.name;
|
|
64
|
+
/**
|
|
65
|
+
* Encode the event as JSON.
|
|
66
|
+
* @return {!Object} JSON representation.
|
|
67
|
+
*/
|
|
68
|
+
toJson() {
|
|
69
|
+
const json = super.toJson();
|
|
70
|
+
if (this.newParentId) {
|
|
71
|
+
json['newParentId'] = this.newParentId;
|
|
72
|
+
}
|
|
73
|
+
if (this.newInputName) {
|
|
74
|
+
json['newInputName'] = this.newInputName;
|
|
75
|
+
}
|
|
76
|
+
if (this.newCoordinate) {
|
|
77
|
+
json['newCoordinate'] = Math.round(this.newCoordinate.x) + ',' +
|
|
78
|
+
Math.round(this.newCoordinate.y);
|
|
124
79
|
}
|
|
125
|
-
|
|
126
|
-
|
|
80
|
+
if (!this.recordUndo) {
|
|
81
|
+
json['recordUndo'] = this.recordUndo;
|
|
82
|
+
}
|
|
83
|
+
return json;
|
|
127
84
|
}
|
|
128
|
-
return location;
|
|
129
|
-
};
|
|
130
85
|
|
|
131
|
-
/**
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Decode the JSON event.
|
|
88
|
+
* @param {!Object} json JSON representation.
|
|
89
|
+
*/
|
|
90
|
+
fromJson(json) {
|
|
91
|
+
super.fromJson(json);
|
|
92
|
+
this.newParentId = json['newParentId'];
|
|
93
|
+
this.newInputName = json['newInputName'];
|
|
94
|
+
if (json['newCoordinate']) {
|
|
95
|
+
const xy = json['newCoordinate'].split(',');
|
|
96
|
+
this.newCoordinate = new Coordinate(Number(xy[0]), Number(xy[1]));
|
|
97
|
+
}
|
|
98
|
+
if (json['recordUndo'] !== undefined) {
|
|
99
|
+
this.recordUndo = json['recordUndo'];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
140
102
|
|
|
141
|
-
/**
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
console.warn('Can\'t move non-existent block: ' + this.blockId);
|
|
150
|
-
return;
|
|
103
|
+
/**
|
|
104
|
+
* Record the block's new location. Called after the move.
|
|
105
|
+
*/
|
|
106
|
+
recordNew() {
|
|
107
|
+
const location = this.currentLocation_();
|
|
108
|
+
this.newParentId = location.parentId;
|
|
109
|
+
this.newInputName = location.inputName;
|
|
110
|
+
this.newCoordinate = location.coordinate;
|
|
151
111
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Returns the parentId and input if the block is connected,
|
|
115
|
+
* or the XY location if disconnected.
|
|
116
|
+
* @return {!Object} Collection of location info.
|
|
117
|
+
* @private
|
|
118
|
+
*/
|
|
119
|
+
currentLocation_() {
|
|
120
|
+
const workspace = this.getEventWorkspace_();
|
|
121
|
+
const block = workspace.getBlockById(this.blockId);
|
|
122
|
+
const location = {};
|
|
123
|
+
const parent = block.getParent();
|
|
124
|
+
if (parent) {
|
|
125
|
+
location.parentId = parent.id;
|
|
126
|
+
const input = parent.getInputWithBlock(block);
|
|
127
|
+
if (input) {
|
|
128
|
+
location.inputName = input.name;
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
location.coordinate = block.getRelativeToSurfaceXY();
|
|
161
132
|
}
|
|
133
|
+
return location;
|
|
162
134
|
}
|
|
163
|
-
|
|
164
|
-
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Does this event record any change of state?
|
|
138
|
+
* @return {boolean} False if something changed.
|
|
139
|
+
*/
|
|
140
|
+
isNull() {
|
|
141
|
+
return this.oldParentId === this.newParentId &&
|
|
142
|
+
this.oldInputName === this.newInputName &&
|
|
143
|
+
Coordinate.equals(this.oldCoordinate, this.newCoordinate);
|
|
165
144
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Run a move event.
|
|
148
|
+
* @param {boolean} forward True if run forward, false if run backward (undo).
|
|
149
|
+
*/
|
|
150
|
+
run(forward) {
|
|
151
|
+
const workspace = this.getEventWorkspace_();
|
|
152
|
+
const block = workspace.getBlockById(this.blockId);
|
|
153
|
+
if (!block) {
|
|
154
|
+
console.warn('Can\'t move non-existent block: ' + this.blockId);
|
|
155
|
+
return;
|
|
174
156
|
}
|
|
175
|
-
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
157
|
+
const parentId = forward ? this.newParentId : this.oldParentId;
|
|
158
|
+
const inputName = forward ? this.newInputName : this.oldInputName;
|
|
159
|
+
const coordinate = forward ? this.newCoordinate : this.oldCoordinate;
|
|
160
|
+
let parentBlock;
|
|
161
|
+
if (parentId) {
|
|
162
|
+
parentBlock = workspace.getBlockById(parentId);
|
|
163
|
+
if (!parentBlock) {
|
|
164
|
+
console.warn('Can\'t connect to non-existent block: ' + parentId);
|
|
165
|
+
return;
|
|
181
166
|
}
|
|
182
|
-
} else if (connectionType === ConnectionType.PREVIOUS_STATEMENT) {
|
|
183
|
-
parentConnection = parentBlock.nextConnection;
|
|
184
167
|
}
|
|
185
|
-
if (
|
|
186
|
-
|
|
168
|
+
if (block.getParent()) {
|
|
169
|
+
block.unplug();
|
|
170
|
+
}
|
|
171
|
+
if (coordinate) {
|
|
172
|
+
const xy = block.getRelativeToSurfaceXY();
|
|
173
|
+
block.moveBy(coordinate.x - xy.x, coordinate.y - xy.y);
|
|
187
174
|
} else {
|
|
188
|
-
|
|
175
|
+
let blockConnection = block.outputConnection;
|
|
176
|
+
if (!blockConnection ||
|
|
177
|
+
(block.previousConnection &&
|
|
178
|
+
block.previousConnection.isConnected())) {
|
|
179
|
+
blockConnection = block.previousConnection;
|
|
180
|
+
}
|
|
181
|
+
let parentConnection;
|
|
182
|
+
const connectionType = blockConnection.type;
|
|
183
|
+
if (inputName) {
|
|
184
|
+
const input = parentBlock.getInput(inputName);
|
|
185
|
+
if (input) {
|
|
186
|
+
parentConnection = input.connection;
|
|
187
|
+
}
|
|
188
|
+
} else if (connectionType === ConnectionType.PREVIOUS_STATEMENT) {
|
|
189
|
+
parentConnection = parentBlock.nextConnection;
|
|
190
|
+
}
|
|
191
|
+
if (parentConnection) {
|
|
192
|
+
blockConnection.connect(parentConnection);
|
|
193
|
+
} else {
|
|
194
|
+
console.warn('Can\'t connect to non-existent input: ' + inputName);
|
|
195
|
+
}
|
|
189
196
|
}
|
|
190
197
|
}
|
|
191
|
-
}
|
|
198
|
+
}
|
|
192
199
|
|
|
193
200
|
registry.register(registry.Type.EVENT, eventUtils.MOVE, BlockMove);
|
|
194
201
|
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
goog.module('Blockly.Events.BubbleOpen');
|
|
17
17
|
|
|
18
18
|
const eventUtils = goog.require('Blockly.Events.utils');
|
|
19
|
-
const object = goog.require('Blockly.utils.object');
|
|
20
19
|
const registry = goog.require('Blockly.registry');
|
|
21
20
|
/* eslint-disable-next-line no-unused-vars */
|
|
22
21
|
const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
|
|
@@ -25,64 +24,66 @@ const {UiBase} = goog.require('Blockly.Events.UiBase');
|
|
|
25
24
|
|
|
26
25
|
/**
|
|
27
26
|
* Class for a bubble open event.
|
|
28
|
-
* @param {BlockSvg} opt_block The associated block. Undefined for a
|
|
29
|
-
* blank event.
|
|
30
|
-
* @param {boolean=} opt_isOpen Whether the bubble is opening (false if
|
|
31
|
-
* closing). Undefined for a blank event.
|
|
32
|
-
* @param {string=} opt_bubbleType The type of bubble. One of 'mutator',
|
|
33
|
-
* 'comment'
|
|
34
|
-
* or 'warning'. Undefined for a blank event.
|
|
35
27
|
* @extends {UiBase}
|
|
36
|
-
* @constructor
|
|
37
28
|
* @alias Blockly.Events.BubbleOpen
|
|
38
29
|
*/
|
|
39
|
-
|
|
40
|
-
const workspaceId = opt_block ? opt_block.workspace.id : undefined;
|
|
41
|
-
BubbleOpen.superClass_.constructor.call(this, workspaceId);
|
|
42
|
-
this.blockId = opt_block ? opt_block.id : null;
|
|
43
|
-
|
|
30
|
+
class BubbleOpen extends UiBase {
|
|
44
31
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
32
|
+
* @param {BlockSvg} opt_block The associated block. Undefined for a
|
|
33
|
+
* blank event.
|
|
34
|
+
* @param {boolean=} opt_isOpen Whether the bubble is opening (false if
|
|
35
|
+
* closing). Undefined for a blank event.
|
|
36
|
+
* @param {string=} opt_bubbleType The type of bubble. One of 'mutator',
|
|
37
|
+
* 'comment'
|
|
38
|
+
* or 'warning'. Undefined for a blank event.
|
|
47
39
|
*/
|
|
48
|
-
|
|
40
|
+
constructor(opt_block, opt_isOpen, opt_bubbleType) {
|
|
41
|
+
const workspaceId = opt_block ? opt_block.workspace.id : undefined;
|
|
42
|
+
super(workspaceId);
|
|
43
|
+
this.blockId = opt_block ? opt_block.id : null;
|
|
49
44
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
};
|
|
56
|
-
object.inherits(BubbleOpen, UiBase);
|
|
45
|
+
/**
|
|
46
|
+
* Whether the bubble is opening (false if closing).
|
|
47
|
+
* @type {boolean|undefined}
|
|
48
|
+
*/
|
|
49
|
+
this.isOpen = opt_isOpen;
|
|
57
50
|
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
51
|
+
/**
|
|
52
|
+
* The type of bubble. One of 'mutator', 'comment', or 'warning'.
|
|
53
|
+
* @type {string|undefined}
|
|
54
|
+
*/
|
|
55
|
+
this.bubbleType = opt_bubbleType;
|
|
63
56
|
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
json['isOpen'] = this.isOpen;
|
|
71
|
-
json['bubbleType'] = this.bubbleType;
|
|
72
|
-
json['blockId'] = this.blockId;
|
|
73
|
-
return json;
|
|
74
|
-
};
|
|
57
|
+
/**
|
|
58
|
+
* Type of this event.
|
|
59
|
+
* @type {string}
|
|
60
|
+
*/
|
|
61
|
+
this.type = eventUtils.BUBBLE_OPEN;
|
|
62
|
+
}
|
|
75
63
|
|
|
76
|
-
/**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Encode the event as JSON.
|
|
66
|
+
* @return {!Object} JSON representation.
|
|
67
|
+
*/
|
|
68
|
+
toJson() {
|
|
69
|
+
const json = super.toJson();
|
|
70
|
+
json['isOpen'] = this.isOpen;
|
|
71
|
+
json['bubbleType'] = this.bubbleType;
|
|
72
|
+
json['blockId'] = this.blockId;
|
|
73
|
+
return json;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Decode the JSON event.
|
|
78
|
+
* @param {!Object} json JSON representation.
|
|
79
|
+
*/
|
|
80
|
+
fromJson(json) {
|
|
81
|
+
super.fromJson(json);
|
|
82
|
+
this.isOpen = json['isOpen'];
|
|
83
|
+
this.bubbleType = json['bubbleType'];
|
|
84
|
+
this.blockId = json['blockId'];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
86
87
|
|
|
87
88
|
registry.register(registry.Type.EVENT, eventUtils.BUBBLE_OPEN, BubbleOpen);
|
|
88
89
|
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
goog.module('Blockly.Events.Click');
|
|
17
17
|
|
|
18
18
|
const eventUtils = goog.require('Blockly.Events.utils');
|
|
19
|
-
const object = goog.require('Blockly.utils.object');
|
|
20
19
|
const registry = goog.require('Blockly.registry');
|
|
21
20
|
/* eslint-disable-next-line no-unused-vars */
|
|
22
21
|
const {Block} = goog.requireType('Blockly.Block');
|
|
@@ -25,58 +24,63 @@ const {UiBase} = goog.require('Blockly.Events.UiBase');
|
|
|
25
24
|
|
|
26
25
|
/**
|
|
27
26
|
* Class for a click event.
|
|
28
|
-
* @param {?Block=} opt_block The affected block. Null for click events
|
|
29
|
-
* that do not have an associated block (i.e. workspace click). Undefined
|
|
30
|
-
* for a blank event.
|
|
31
|
-
* @param {?string=} opt_workspaceId The workspace identifier for this event.
|
|
32
|
-
* Not used if block is passed. Undefined for a blank event.
|
|
33
|
-
* @param {string=} opt_targetType The type of element targeted by this click
|
|
34
|
-
* event. Undefined for a blank event.
|
|
35
27
|
* @extends {UiBase}
|
|
36
|
-
* @constructor
|
|
37
28
|
* @alias Blockly.Events.Click
|
|
38
29
|
*/
|
|
39
|
-
|
|
40
|
-
const workspaceId = opt_block ? opt_block.workspace.id : opt_workspaceId;
|
|
41
|
-
Click.superClass_.constructor.call(this, workspaceId);
|
|
42
|
-
this.blockId = opt_block ? opt_block.id : null;
|
|
43
|
-
|
|
30
|
+
class Click extends UiBase {
|
|
44
31
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
32
|
+
* @param {?Block=} opt_block The affected block. Null for click events
|
|
33
|
+
* that do not have an associated block (i.e. workspace click). Undefined
|
|
34
|
+
* for a blank event.
|
|
35
|
+
* @param {?string=} opt_workspaceId The workspace identifier for this event.
|
|
36
|
+
* Not used if block is passed. Undefined for a blank event.
|
|
37
|
+
* @param {string=} opt_targetType The type of element targeted by this click
|
|
38
|
+
* event. Undefined for a blank event.
|
|
47
39
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
constructor(opt_block, opt_workspaceId, opt_targetType) {
|
|
41
|
+
let workspaceId = opt_block ? opt_block.workspace.id : opt_workspaceId;
|
|
42
|
+
if (workspaceId === null) {
|
|
43
|
+
workspaceId = undefined;
|
|
44
|
+
}
|
|
45
|
+
super(workspaceId);
|
|
46
|
+
this.blockId = opt_block ? opt_block.id : null;
|
|
51
47
|
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
48
|
+
/**
|
|
49
|
+
* The type of element targeted by this click event.
|
|
50
|
+
* @type {string|undefined}
|
|
51
|
+
*/
|
|
52
|
+
this.targetType = opt_targetType;
|
|
57
53
|
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const json = Click.superClass_.toJson.call(this);
|
|
64
|
-
json['targetType'] = this.targetType;
|
|
65
|
-
if (this.blockId) {
|
|
66
|
-
json['blockId'] = this.blockId;
|
|
54
|
+
/**
|
|
55
|
+
* Type of this event.
|
|
56
|
+
* @type {string}
|
|
57
|
+
*/
|
|
58
|
+
this.type = eventUtils.CLICK;
|
|
67
59
|
}
|
|
68
|
-
return json;
|
|
69
|
-
};
|
|
70
60
|
|
|
71
|
-
/**
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Encode the event as JSON.
|
|
63
|
+
* @return {!Object} JSON representation.
|
|
64
|
+
*/
|
|
65
|
+
toJson() {
|
|
66
|
+
const json = super.toJson();
|
|
67
|
+
json['targetType'] = this.targetType;
|
|
68
|
+
if (this.blockId) {
|
|
69
|
+
json['blockId'] = this.blockId;
|
|
70
|
+
}
|
|
71
|
+
return json;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Decode the JSON event.
|
|
76
|
+
* @param {!Object} json JSON representation.
|
|
77
|
+
*/
|
|
78
|
+
fromJson(json) {
|
|
79
|
+
super.fromJson(json);
|
|
80
|
+
this.targetType = json['targetType'];
|
|
81
|
+
this.blockId = json['blockId'];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
80
84
|
|
|
81
85
|
registry.register(registry.Type.EVENT, eventUtils.CLICK, Click);
|
|
82
86
|
|