blockly 7.20211209.2 → 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
package/core/variable_model.js
CHANGED
|
@@ -26,70 +26,71 @@ goog.require('Blockly.Events.VarCreate');
|
|
|
26
26
|
/**
|
|
27
27
|
* Class for a variable model.
|
|
28
28
|
* Holds information for the variable including name, ID, and type.
|
|
29
|
-
* @param {!Workspace} workspace The variable's workspace.
|
|
30
|
-
* @param {string} name The name of the variable. This is the user-visible name
|
|
31
|
-
* (e.g. 'my var' or '私の変数'), not the generated name.
|
|
32
|
-
* @param {string=} opt_type The type of the variable like 'int' or 'string'.
|
|
33
|
-
* Does not need to be unique. Field_variable can filter variables based on
|
|
34
|
-
* their type. This will default to '' which is a specific type.
|
|
35
|
-
* @param {string=} opt_id The unique ID of the variable. This will default to
|
|
36
|
-
* a UUID.
|
|
37
29
|
* @see {Blockly.FieldVariable}
|
|
38
|
-
* @constructor
|
|
39
30
|
* @alias Blockly.VariableModel
|
|
40
31
|
*/
|
|
41
|
-
|
|
32
|
+
class VariableModel {
|
|
42
33
|
/**
|
|
43
|
-
*
|
|
44
|
-
* @
|
|
34
|
+
* @param {!Workspace} workspace The variable's workspace.
|
|
35
|
+
* @param {string} name The name of the variable. This is the user-visible
|
|
36
|
+
* name (e.g. 'my var' or '私の変数'), not the generated name.
|
|
37
|
+
* @param {string=} opt_type The type of the variable like 'int' or 'string'.
|
|
38
|
+
* Does not need to be unique. Field_variable can filter variables based
|
|
39
|
+
* on their type. This will default to '' which is a specific type.
|
|
40
|
+
* @param {string=} opt_id The unique ID of the variable. This will default to
|
|
41
|
+
* a UUID.
|
|
45
42
|
*/
|
|
46
|
-
|
|
43
|
+
constructor(workspace, name, opt_type, opt_id) {
|
|
44
|
+
/**
|
|
45
|
+
* The workspace the variable is in.
|
|
46
|
+
* @type {!Workspace}
|
|
47
|
+
*/
|
|
48
|
+
this.workspace = workspace;
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
/**
|
|
51
|
+
* The name of the variable, typically defined by the user. It may be
|
|
52
|
+
* changed by the user.
|
|
53
|
+
* @type {string}
|
|
54
|
+
*/
|
|
55
|
+
this.name = name;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The type of the variable, such as 'int' or 'sound_effect'. This may be
|
|
59
|
+
* used to build a list of variables of a specific type. By default this is
|
|
60
|
+
* the empty string '', which is a specific type.
|
|
61
|
+
* @see {Blockly.FieldVariable}
|
|
62
|
+
* @type {string}
|
|
63
|
+
*/
|
|
64
|
+
this.type = opt_type || '';
|
|
54
65
|
|
|
66
|
+
/**
|
|
67
|
+
* A unique ID for the variable. This should be defined at creation and
|
|
68
|
+
* not change, even if the name changes. In most cases this should be a
|
|
69
|
+
* UUID.
|
|
70
|
+
* @type {string}
|
|
71
|
+
* @private
|
|
72
|
+
*/
|
|
73
|
+
this.id_ = opt_id || idGenerator.genUid();
|
|
74
|
+
|
|
75
|
+
eventUtils.fire(new (eventUtils.get(eventUtils.VAR_CREATE))(this));
|
|
76
|
+
}
|
|
55
77
|
/**
|
|
56
|
-
* The
|
|
57
|
-
* used to build a list of variables of a specific type. By default this is
|
|
58
|
-
* the empty string '', which is a specific type.
|
|
59
|
-
* @see {Blockly.FieldVariable}
|
|
60
|
-
* @type {string}
|
|
78
|
+
* @return {string} The ID for the variable.
|
|
61
79
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
80
|
+
getId() {
|
|
81
|
+
return this.id_;
|
|
82
|
+
}
|
|
64
83
|
/**
|
|
65
|
-
* A
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* @
|
|
69
|
-
*
|
|
84
|
+
* A custom compare function for the VariableModel objects.
|
|
85
|
+
* @param {VariableModel} var1 First variable to compare.
|
|
86
|
+
* @param {VariableModel} var2 Second variable to compare.
|
|
87
|
+
* @return {number} -1 if name of var1 is less than name of var2, 0 if equal,
|
|
88
|
+
* and 1 if greater.
|
|
89
|
+
* @package
|
|
70
90
|
*/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @return {string} The ID for the variable.
|
|
78
|
-
*/
|
|
79
|
-
VariableModel.prototype.getId = function() {
|
|
80
|
-
return this.id_;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* A custom compare function for the VariableModel objects.
|
|
85
|
-
* @param {VariableModel} var1 First variable to compare.
|
|
86
|
-
* @param {VariableModel} var2 Second variable to compare.
|
|
87
|
-
* @return {number} -1 if name of var1 is less than name of var2, 0 if equal,
|
|
88
|
-
* and 1 if greater.
|
|
89
|
-
* @package
|
|
90
|
-
*/
|
|
91
|
-
VariableModel.compareByName = function(var1, var2) {
|
|
92
|
-
return var1.name.localeCompare(var2.name, undefined, {sensitivity: 'base'});
|
|
93
|
-
};
|
|
91
|
+
static compareByName(var1, var2) {
|
|
92
|
+
return var1.name.localeCompare(var2.name, undefined, {sensitivity: 'base'});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
94
95
|
|
|
95
96
|
exports.VariableModel = VariableModel;
|
package/core/variables.js
CHANGED
|
@@ -23,6 +23,8 @@ const {Msg} = goog.require('Blockly.Msg');
|
|
|
23
23
|
const {VariableModel} = goog.require('Blockly.VariableModel');
|
|
24
24
|
/* eslint-disable-next-line no-unused-vars */
|
|
25
25
|
const {Workspace} = goog.requireType('Blockly.Workspace');
|
|
26
|
+
/* eslint-disable-next-line no-unused-vars */
|
|
27
|
+
const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
30
|
* String for use in the "custom" attribute of a category in toolbox XML.
|
|
@@ -118,7 +120,7 @@ exports.allDeveloperVariables = allDeveloperVariables;
|
|
|
118
120
|
/**
|
|
119
121
|
* Construct the elements (blocks and button) required by the flyout for the
|
|
120
122
|
* variable category.
|
|
121
|
-
* @param {!
|
|
123
|
+
* @param {!WorkspaceSvg} workspace The workspace containing variables.
|
|
122
124
|
* @return {!Array<!Element>} Array of XML elements.
|
|
123
125
|
* @alias Blockly.Variables.flyoutCategory
|
|
124
126
|
*/
|
|
@@ -526,7 +528,12 @@ const createVariable = function(workspace, id, opt_name, opt_type) {
|
|
|
526
528
|
const potentialVariableMap = workspace.getPotentialVariableMap();
|
|
527
529
|
// Variables without names get uniquely named for this workspace.
|
|
528
530
|
if (!opt_name) {
|
|
529
|
-
const ws =
|
|
531
|
+
const ws =
|
|
532
|
+
/** @type {!Workspace} */ (
|
|
533
|
+
workspace.isFlyout ?
|
|
534
|
+
/** @type {!WorkspaceSvg} */ (workspace).targetWorkspace :
|
|
535
|
+
workspace);
|
|
536
|
+
// Must call version on exports to allow for mocking in tests. See #5321
|
|
530
537
|
opt_name = exports.generateUniqueName(ws);
|
|
531
538
|
}
|
|
532
539
|
|
|
@@ -24,6 +24,8 @@ const {Msg} = goog.require('Blockly.Msg');
|
|
|
24
24
|
const {VariableModel} = goog.require('Blockly.VariableModel');
|
|
25
25
|
/* eslint-disable-next-line no-unused-vars */
|
|
26
26
|
const {Workspace} = goog.requireType('Blockly.Workspace');
|
|
27
|
+
/* eslint-disable-next-line no-unused-vars */
|
|
28
|
+
const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
/**
|
|
@@ -59,7 +61,7 @@ exports.onCreateVariableButtonClick_Colour = colourButtonClickHandler;
|
|
|
59
61
|
/**
|
|
60
62
|
* Construct the elements (blocks and button) required by the flyout for the
|
|
61
63
|
* variable category.
|
|
62
|
-
* @param {!
|
|
64
|
+
* @param {!WorkspaceSvg} workspace The workspace containing variables.
|
|
63
65
|
* @return {!Array<!Element>} Array of XML elements.
|
|
64
66
|
* @alias Blockly.VariablesDynamic.flyoutCategory
|
|
65
67
|
*/
|
package/core/warning.js
CHANGED
|
@@ -17,11 +17,8 @@ goog.module('Blockly.Warning');
|
|
|
17
17
|
|
|
18
18
|
const dom = goog.require('Blockly.utils.dom');
|
|
19
19
|
const eventUtils = goog.require('Blockly.Events.utils');
|
|
20
|
-
const object = goog.require('Blockly.utils.object');
|
|
21
20
|
/* eslint-disable-next-line no-unused-vars */
|
|
22
21
|
const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
|
|
23
|
-
/* eslint-disable-next-line no-unused-vars */
|
|
24
|
-
const {Block} = goog.requireType('Blockly.Block');
|
|
25
22
|
const {Bubble} = goog.require('Blockly.Bubble');
|
|
26
23
|
/* eslint-disable-next-line no-unused-vars */
|
|
27
24
|
const {Coordinate} = goog.requireType('Blockly.utils.Coordinate');
|
|
@@ -33,137 +30,146 @@ goog.require('Blockly.Events.BubbleOpen');
|
|
|
33
30
|
|
|
34
31
|
/**
|
|
35
32
|
* Class for a warning.
|
|
36
|
-
* @param {!Block} block The block associated with this warning.
|
|
37
33
|
* @extends {Icon}
|
|
38
|
-
* @constructor
|
|
39
34
|
* @alias Blockly.Warning
|
|
40
35
|
*/
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
* Does this icon get hidden when the block is collapsed.
|
|
51
|
-
*/
|
|
52
|
-
Warning.prototype.collapseHidden = false;
|
|
36
|
+
class Warning extends Icon {
|
|
37
|
+
/**
|
|
38
|
+
* @param {!BlockSvg} block The block associated with this warning.
|
|
39
|
+
*/
|
|
40
|
+
constructor(block) {
|
|
41
|
+
super(block);
|
|
42
|
+
this.createIcon();
|
|
43
|
+
// The text_ object can contain multiple warnings.
|
|
44
|
+
this.text_ = Object.create(null);
|
|
53
45
|
|
|
54
|
-
/**
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
// Triangle with rounded corners.
|
|
61
|
-
dom.createSvgElement(
|
|
62
|
-
Svg.PATH, {
|
|
63
|
-
'class': 'blocklyIconShape',
|
|
64
|
-
'd': 'M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z',
|
|
65
|
-
},
|
|
66
|
-
group);
|
|
67
|
-
// Can't use a real '!' text character since different browsers and operating
|
|
68
|
-
// systems render it differently.
|
|
69
|
-
// Body of exclamation point.
|
|
70
|
-
dom.createSvgElement(
|
|
71
|
-
Svg.PATH, {
|
|
72
|
-
'class': 'blocklyIconSymbol',
|
|
73
|
-
'd': 'm7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z',
|
|
74
|
-
},
|
|
75
|
-
group);
|
|
76
|
-
// Dot of exclamation point.
|
|
77
|
-
dom.createSvgElement(
|
|
78
|
-
Svg.RECT, {
|
|
79
|
-
'class': 'blocklyIconSymbol',
|
|
80
|
-
'x': '7',
|
|
81
|
-
'y': '11',
|
|
82
|
-
'height': '2',
|
|
83
|
-
'width': '2',
|
|
84
|
-
},
|
|
85
|
-
group);
|
|
86
|
-
};
|
|
46
|
+
/**
|
|
47
|
+
* The top-level node of the warning text, or null if not created.
|
|
48
|
+
* @type {?SVGTextElement}
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
this.paragraphElement_ = null;
|
|
87
52
|
|
|
88
|
-
/**
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (visible === this.isVisible()) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
eventUtils.fire(new (eventUtils.get(eventUtils.BUBBLE_OPEN))(
|
|
97
|
-
this.block_, visible, 'warning'));
|
|
98
|
-
if (visible) {
|
|
99
|
-
this.createBubble_();
|
|
100
|
-
} else {
|
|
101
|
-
this.disposeBubble_();
|
|
53
|
+
/**
|
|
54
|
+
* Does this icon get hidden when the block is collapsed?
|
|
55
|
+
* @type {boolean}
|
|
56
|
+
*/
|
|
57
|
+
this.collapseHidden = false;
|
|
102
58
|
}
|
|
103
|
-
};
|
|
104
59
|
|
|
105
|
-
/**
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Draw the warning icon.
|
|
62
|
+
* @param {!Element} group The icon group.
|
|
63
|
+
* @protected
|
|
64
|
+
*/
|
|
65
|
+
drawIcon_(group) {
|
|
66
|
+
// Triangle with rounded corners.
|
|
67
|
+
dom.createSvgElement(
|
|
68
|
+
Svg.PATH, {
|
|
69
|
+
'class': 'blocklyIconShape',
|
|
70
|
+
'd': 'M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z',
|
|
71
|
+
},
|
|
72
|
+
group);
|
|
73
|
+
// Can't use a real '!' text character since different browsers and
|
|
74
|
+
// operating systems render it differently. Body of exclamation point.
|
|
75
|
+
dom.createSvgElement(
|
|
76
|
+
Svg.PATH, {
|
|
77
|
+
'class': 'blocklyIconSymbol',
|
|
78
|
+
'd': 'm7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z',
|
|
79
|
+
},
|
|
80
|
+
group);
|
|
81
|
+
// Dot of exclamation point.
|
|
82
|
+
dom.createSvgElement(
|
|
83
|
+
Svg.RECT, {
|
|
84
|
+
'class': 'blocklyIconSymbol',
|
|
85
|
+
'x': '7',
|
|
86
|
+
'y': '11',
|
|
87
|
+
'height': '2',
|
|
88
|
+
'width': '2',
|
|
89
|
+
},
|
|
90
|
+
group);
|
|
91
|
+
}
|
|
116
92
|
|
|
117
|
-
/**
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Show or hide the warning bubble.
|
|
95
|
+
* @param {boolean} visible True if the bubble should be visible.
|
|
96
|
+
*/
|
|
97
|
+
setVisible(visible) {
|
|
98
|
+
if (visible === this.isVisible()) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
eventUtils.fire(new (eventUtils.get(eventUtils.BUBBLE_OPEN))(
|
|
102
|
+
this.block_, visible, 'warning'));
|
|
103
|
+
if (visible) {
|
|
104
|
+
this.createBubble_();
|
|
105
|
+
} else {
|
|
106
|
+
this.disposeBubble_();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
126
109
|
|
|
127
|
-
/**
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
110
|
+
/**
|
|
111
|
+
* Show the bubble.
|
|
112
|
+
* @private
|
|
113
|
+
*/
|
|
114
|
+
createBubble_() {
|
|
115
|
+
this.paragraphElement_ = Bubble.textToDom(this.getText());
|
|
116
|
+
this.bubble_ = Bubble.createNonEditableBubble(
|
|
117
|
+
this.paragraphElement_, /** @type {!BlockSvg} */ (this.block_),
|
|
118
|
+
/** @type {!Coordinate} */ (this.iconXY_));
|
|
119
|
+
this.applyColour();
|
|
137
120
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Dispose of the bubble and references to it.
|
|
124
|
+
* @private
|
|
125
|
+
*/
|
|
126
|
+
disposeBubble_() {
|
|
127
|
+
this.bubble_.dispose();
|
|
128
|
+
this.bubble_ = null;
|
|
129
|
+
this.paragraphElement_ = null;
|
|
142
130
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Set this warning's text.
|
|
134
|
+
* @param {string} text Warning text (or '' to delete). This supports
|
|
135
|
+
* linebreaks.
|
|
136
|
+
* @param {string} id An ID for this text entry to be able to maintain
|
|
137
|
+
* multiple warnings.
|
|
138
|
+
*/
|
|
139
|
+
setText(text, id) {
|
|
140
|
+
if (this.text_[id] === text) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (text) {
|
|
144
|
+
this.text_[id] = text;
|
|
145
|
+
} else {
|
|
146
|
+
delete this.text_[id];
|
|
147
|
+
}
|
|
148
|
+
if (this.isVisible()) {
|
|
149
|
+
this.setVisible(false);
|
|
150
|
+
this.setVisible(true);
|
|
151
|
+
}
|
|
146
152
|
}
|
|
147
|
-
};
|
|
148
153
|
|
|
149
|
-
/**
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Get this warning's texts.
|
|
156
|
+
* @return {string} All texts concatenated into one string.
|
|
157
|
+
*/
|
|
158
|
+
getText() {
|
|
159
|
+
const allWarnings = [];
|
|
160
|
+
for (const id in this.text_) {
|
|
161
|
+
allWarnings.push(this.text_[id]);
|
|
162
|
+
}
|
|
163
|
+
return allWarnings.join('\n');
|
|
157
164
|
}
|
|
158
|
-
return allWarnings.join('\n');
|
|
159
|
-
};
|
|
160
165
|
|
|
161
|
-
/**
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
166
|
+
/**
|
|
167
|
+
* Dispose of this warning.
|
|
168
|
+
*/
|
|
169
|
+
dispose() {
|
|
170
|
+
this.block_.warning = null;
|
|
171
|
+
Icon.prototype.dispose.call(this);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
168
174
|
|
|
169
175
|
exports.Warning = Warning;
|
package/core/widgetdiv.js
CHANGED
|
@@ -56,13 +56,13 @@ let themeClassName = '';
|
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* The HTML container for popup overlays (e.g. editor widgets).
|
|
59
|
-
* @type {?
|
|
59
|
+
* @type {?HTMLDivElement}
|
|
60
60
|
*/
|
|
61
61
|
let DIV;
|
|
62
62
|
|
|
63
63
|
/**
|
|
64
64
|
* Returns the HTML container for editor widgets.
|
|
65
|
-
* @return {?
|
|
65
|
+
* @return {?HTMLDivElement} The editor widget container.
|
|
66
66
|
* @alias Blockly.WidgetDiv.getDiv
|
|
67
67
|
*/
|
|
68
68
|
const getDiv = function() {
|
|
@@ -72,7 +72,7 @@ exports.getDiv = getDiv;
|
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
74
|
* Allows unit tests to reset the div.
|
|
75
|
-
* @param {?
|
|
75
|
+
* @param {?HTMLDivElement} newDiv The new value for the DIV field.
|
|
76
76
|
* @alias Blockly.WidgetDiv.testOnly_setDiv
|
|
77
77
|
* @ignore
|
|
78
78
|
*/
|
|
@@ -109,7 +109,7 @@ const createDom = function() {
|
|
|
109
109
|
return; // Already created.
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
DIV = document.createElement('div');
|
|
112
|
+
DIV = /** @type {!HTMLDivElement} */ (document.createElement('div'));
|
|
113
113
|
DIV.className = 'blocklyWidgetDiv';
|
|
114
114
|
const container = common.getParentContainer() || document.body;
|
|
115
115
|
container.appendChild(DIV);
|